diff --git a/.travis.yml b/.travis.yml index 70be408153..6692c0e3e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,6 +47,7 @@ before_install: - git clone --depth=1 https://github.com/discourse/discourse-chat-integration.git plugins/discourse-chat-integration - git clone --depth=1 https://github.com/discourse/discourse-assign.git plugins/discourse-assign - git clone --depth=1 https://github.com/discourse/discourse-patreon.git plugins/discourse-patreon + - git clone --depth=1 https://github.com/discourse/discourse-staff-notes.git plugins/discourse-staff-notes - export PATH=$HOME/.yarn/bin:$PATH install: diff --git a/Gemfile b/Gemfile index 2f4e597291..0b3f89a6ad 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem 'redis-namespace' gem 'active_model_serializers', '~> 0.8.3' -gem 'onebox', '1.8.45' +gem 'onebox', '1.8.46' gem 'http_accept_language', '~>2.0.5', require: false @@ -116,7 +116,6 @@ group :test, :development do gem 'certified', require: false # later appears to break Fabricate(:topic, category: category) gem 'fabrication', '2.9.8', require: false - gem 'discourse-qunit-rails', require: 'qunit-rails' gem 'mocha', require: false gem 'rb-fsevent', require: RUBY_PLATFORM =~ /darwin/i ? 'rb-fsevent' : false gem 'rb-inotify', '~> 0.9', require: RUBY_PLATFORM =~ /linux/i ? 'rb-inotify' : false diff --git a/Gemfile.lock b/Gemfile.lock index 0d7600cb2b..2ff7ea8552 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -83,8 +83,6 @@ GEM crass (1.0.3) debug_inspector (0.0.3) diff-lcs (1.3) - discourse-qunit-rails (0.0.11) - railties discourse_image_optim (0.24.5) exifr (~> 1.2, >= 1.2.2) fspath (~> 3.0) @@ -166,7 +164,7 @@ GEM mail (2.7.0) mini_mime (>= 0.1.1) memory_profiler (0.9.10) - message_bus (2.1.2) + message_bus (2.1.4) rack (>= 1.1.3) metaclass (0.0.4) method_source (0.8.2) @@ -226,7 +224,7 @@ GEM omniauth-twitter (1.3.0) omniauth-oauth (~> 1.1) rack - onebox (1.8.45) + onebox (1.8.46) htmlentities (~> 4.3) moneta (~> 1.0) multi_json (~> 1.11) @@ -289,9 +287,9 @@ GEM ffi (>= 1.0.6) msgpack (>= 0.4.3) trollop (>= 1.16.2) - redis (3.3.5) - redis-namespace (1.5.3) - redis (~> 3.0, >= 3.0.4) + redis (4.0.1) + redis-namespace (1.6.0) + redis (>= 3.0.4) request_store (1.3.2) rinku (2.0.2) rotp (3.3.0) @@ -355,11 +353,11 @@ GEM shoulda-context (1.2.2) shoulda-matchers (2.8.0) activesupport (>= 3.0.0) - sidekiq (5.0.5) + sidekiq (5.1.3) concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.0) rack-protection (>= 1.5.0) - redis (>= 3.3.4, < 5) + redis (>= 3.3.5, < 5) slop (3.6.0) sprockets (3.7.1) concurrent-ruby (~> 1.0) @@ -412,7 +410,6 @@ DEPENDENCIES byebug certified cppjieba_rb - discourse-qunit-rails discourse_image_optim email_reply_trimmer (= 0.1.11) ember-handlebars-template (= 0.7.5) @@ -460,7 +457,7 @@ DEPENDENCIES omniauth-oauth2 omniauth-openid omniauth-twitter - onebox (= 1.8.45) + onebox (= 1.8.46) openid-redis-store pg (~> 0.21.0) pry-nav diff --git a/README.md b/README.md index 51b8314318..6e04e399e9 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ The original Discourse code contributors can be found in [**AUTHORS.MD**](docs/A ## Copyright / License -Copyright 2014 - 2017 Civilized Discourse Construction Kit, Inc. +Copyright 2014 - 2018 Civilized Discourse Construction Kit, Inc. Licensed under the GNU General Public License Version 2.0 (or later); you may not use this work except in compliance with the License. diff --git a/app/assets/javascripts/admin/components/dashboard-inline-table.js.es6 b/app/assets/javascripts/admin/components/dashboard-inline-table.js.es6 new file mode 100644 index 0000000000..070625e9e4 --- /dev/null +++ b/app/assets/javascripts/admin/components/dashboard-inline-table.js.es6 @@ -0,0 +1,65 @@ +import { ajax } from 'discourse/lib/ajax'; +import computed from 'ember-addons/ember-computed-decorators'; + +export default Ember.Component.extend({ + classNames: ["dashboard-table", "dashboard-inline-table"], + + classNameBindings: ["isLoading"], + + total: null, + labels: null, + title: null, + chartData: null, + isLoading: false, + help: null, + helpPage: null, + model: null, + + didInsertElement() { + this._super(); + + if (this.get("dataSourceName")){ + this._fetchReport(); + } else if (this.get("model")) { + this._setPropertiesFromModel(this.get("model")); + } + }, + + didUpdateAttrs() { + this._super(); + + if (this.get("model")) { + this._setPropertiesFromModel(this.get("model")); + } + }, + + @computed("dataSourceName") + dataSource(dataSourceName) { + return `/admin/reports/${dataSourceName}`; + }, + + _fetchReport() { + if (this.get("isLoading")) return; + + this.set("isLoading", true); + + ajax(this.get("dataSource")) + .then((response) => { + this._setPropertiesFromModel(response.report); + }).finally(() => { + this.set("isLoading", false); + }); + }, + + _setPropertiesFromModel(model) { + const data = model.data.sort((a, b) => a.x >= b.x); + + this.setProperties({ + labels: data.map(r => r.x), + dataset: data.map(r => r.y), + total: model.total, + title: model.title, + chartData: data + }); + } +}); diff --git a/app/assets/javascripts/admin/components/dashboard-mini-chart.js.es6 b/app/assets/javascripts/admin/components/dashboard-mini-chart.js.es6 new file mode 100644 index 0000000000..eea4bc917c --- /dev/null +++ b/app/assets/javascripts/admin/components/dashboard-mini-chart.js.es6 @@ -0,0 +1,171 @@ +import { ajax } from 'discourse/lib/ajax'; +import computed from 'ember-addons/ember-computed-decorators'; +import loadScript from 'discourse/lib/load-script'; + +export default Ember.Component.extend({ + classNames: ["dashboard-mini-chart"], + + classNameBindings: ["trend", "oneDataPoint", "isLoading"], + + isLoading: false, + total: null, + trend: null, + title: null, + oneDataPoint: false, + backgroundColor: "rgba(200,220,240,0.3)", + borderColor: "#08C", + + didInsertElement() { + this._super(); + this._initializeChart(); + }, + + didUpdateAttrs() { + this._super(); + this._initializeChart(); + }, + + @computed("dataSourceName") + dataSource(dataSourceName) { + if (dataSourceName) { + return `/admin/reports/${dataSourceName}`; + } + }, + + @computed("trend") + trendIcon(trend) { + if (trend === "stable") { + return null; + } else { + return `angle-${trend}`; + } + }, + + _fetchReport() { + if (this.get("isLoading")) return; + + this.set("isLoading", true); + + let payload = {data: {}}; + + if (this.get("startDate")) { + payload.data.start_date = this.get("startDate").toISOString(); + } + + if (this.get("endDate")) { + payload.data.end_date = this.get("endDate").toISOString(); + } + + ajax(this.get("dataSource"), payload) + .then((response) => { + this._setPropertiesFromModel(response.report); + }) + .finally(() => { + this.set("isLoading", false); + + Ember.run.schedule("afterRender", () => { + if (!this.get("oneDataPoint")) { + this._drawChart(); + } + }); + }); + }, + + _initializeChart() { + loadScript("/javascripts/Chart.min.js").then(() => { + if (this.get("model") && !this.get("values")) { + this._setPropertiesFromModel(this.get("model")); + this._drawChart(); + } else if (this.get("dataSource")) { + this._fetchReport(); + } + }); + }, + + _drawChart() { + const $chartCanvas = this.$(".chart-canvas"); + if (!$chartCanvas.length) return; + + const context = $chartCanvas[0].getContext("2d"); + + const data = { + labels: this.get("labels"), + datasets: [{ + data: this.get("values"), + backgroundColor: this.get("backgroundColor"), + borderColor: this.get("borderColor") + }] + }; + + this._chart = new window.Chart(context, this._buildChartConfig(data)); + }, + + _setPropertiesFromModel(model) { + this.setProperties({ + labels: model.data.map(r => r.x), + values: model.data.map(r => r.y), + oneDataPoint: (this.get("startDate") && this.get("endDate")) && + this.get("startDate").isSame(this.get("endDate"), 'day'), + total: model.total, + title: model.title, + trend: this._computeTrend(model.total, model.prev30Days) + }); + }, + + _buildChartConfig(data) { + const values = this.get("values"); + const max = Math.max(...values); + const min = Math.min(...values); + const stepSize = Math.max(...[Math.ceil((max - min)/5), 20]); + + const startDate = this.get("startDate") || moment(); + const endDate = this.get("endDate") || moment(); + const datesDifference = startDate.diff(endDate, "days"); + let unit = "day"; + if (datesDifference >= 366) { + unit = "quarter"; + } else if (datesDifference >= 61) { + unit = "month"; + } else if (datesDifference >= 14) { + unit = "week"; + } + + return { + type: "line", + data, + options: { + legend: { display: false }, + responsive: true, + layout: { padding: { left: 0, top: 0, right: 0, bottom: 0 } }, + scales: { + yAxes: [ + { + display: true, + ticks: { suggestedMin: 0, stepSize, suggestedMax: max + stepSize } + } + ], + xAxes: [ + { + display: true, + type: "time", + time: { + parser: "YYYY-MM-DD", + unit + } + } + ], + } + }, + }; + }, + + _computeTrend(total, prevTotal) { + const percentChange = ((total - prevTotal) / prevTotal) * 100; + + if (percentChange > 50) return "double-up"; + if (percentChange > 0) return "up"; + if (percentChange === 0) return "stable"; + if (percentChange < 50) return "double-down"; + if (percentChange < 0) return "down"; + }, +}); diff --git a/app/assets/javascripts/admin/components/dashboard-table-trending-search.js.es6 b/app/assets/javascripts/admin/components/dashboard-table-trending-search.js.es6 new file mode 100644 index 0000000000..aac53bb9c0 --- /dev/null +++ b/app/assets/javascripts/admin/components/dashboard-table-trending-search.js.es6 @@ -0,0 +1,17 @@ +import DashboardTable from "admin/components/dashboard-table"; +import { number } from 'discourse/lib/formatter'; + +export default DashboardTable.extend({ + layoutName: "admin/templates/components/dashboard-table", + + classNames: ["dashboard-table", "dashboard-table-trending-search"], + + transformModel(model) { + return { + labels: model.labels, + values: model.data.map(data => { + return [data[0], number(data[1]), number(data[2])]; + }) + }; + }, +}); diff --git a/app/assets/javascripts/admin/components/dashboard-table.js.es6 b/app/assets/javascripts/admin/components/dashboard-table.js.es6 new file mode 100644 index 0000000000..2bf5929443 --- /dev/null +++ b/app/assets/javascripts/admin/components/dashboard-table.js.es6 @@ -0,0 +1,83 @@ +import { ajax } from 'discourse/lib/ajax'; +import computed from 'ember-addons/ember-computed-decorators'; + +export default Ember.Component.extend({ + classNames: ["dashboard-table"], + + classNameBindings: ["isLoading"], + + total: null, + labels: null, + title: null, + chartData: null, + isLoading: false, + help: null, + helpPage: null, + model: null, + + transformModel(model) { + const data = model.data.sort((a, b) => a.x >= b.x); + + return { + labels: model.labels, + values: data + }; + }, + + didInsertElement() { + this._super(); + this._initializeTable(); + }, + + didUpdateAttrs() { + this._super(); + this._initializeTable(); + }, + + @computed("dataSourceName") + dataSource(dataSourceName) { + return `/admin/reports/${dataSourceName}`; + }, + + _initializeTable() { + if (this.get("model") && !this.get("values")) { + this._setPropertiesFromModel(this.get("model")); + } else if (this.get("dataSource")) { + this._fetchReport(); + } + }, + + _fetchReport() { + if (this.get("isLoading")) return; + + this.set("isLoading", true); + + let payload = {data: {}}; + + if (this.get("startDate")) { + payload.data.start_date = this.get("startDate").toISOString(); + } + + if (this.get("endDate")) { + payload.data.end_date = this.get("endDate").toISOString(); + } + + ajax(this.get("dataSource"), payload) + .then((response) => { + this._setPropertiesFromModel(response.report); + }).finally(() => { + this.set("isLoading", false); + }); + }, + + _setPropertiesFromModel(model) { + const { labels, values } = this.transformModel(model); + + this.setProperties({ + labels, + values, + total: model.total, + title: model.title + }); + } +}); diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-next.js.es6 b/app/assets/javascripts/admin/controllers/admin-dashboard-next.js.es6 new file mode 100644 index 0000000000..3afb55343d --- /dev/null +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-next.js.es6 @@ -0,0 +1,87 @@ +import DiscourseURL from "discourse/lib/url"; +import computed from "ember-addons/ember-computed-decorators"; +import AdminDashboardNext from 'admin/models/admin-dashboard-next'; +import Report from 'admin/models/report'; + +const ATTRIBUTES = [ "disk_space", "updated_at", "last_backup_taken_at"]; + +const REPORTS = [ "global_reports", "user_reports" ]; + +export default Ember.Controller.extend({ + queryParams: ["period"], + period: "all", + isLoading: false, + dashboardFetchedAt: null, + exceptionController: Ember.inject.controller('exception'), + + fetchDashboard() { + if (this.get("isLoading")) return; + + if (!this.get("dashboardFetchedAt") || moment().subtract(30, "minutes").toDate() > this.get("dashboardFetchedAt")) { + this.set("isLoading", true); + + AdminDashboardNext.find().then(d => { + this.set("dashboardFetchedAt", new Date()); + + const reports = {}; + REPORTS.forEach(name => d[name].forEach(r => reports[`${name}_${r.type}`] = Report.create(r))); + this.setProperties(reports); + + ATTRIBUTES.forEach(a => this.set(a, d[a])); + }).catch(e => { + this.get("exceptionController").set("thrown", e.jqXHR); + this.replaceRoute("exception"); + }).finally(() => { + this.set("isLoading", false); + }); + } + }, + + @computed("period") + startDate(period) { + switch (period) { + case "yearly": + return moment().subtract(1, "year").startOf("day"); + break; + case "quarterly": + return moment().subtract(3, "month").startOf("day"); + break; + case "weekly": + return moment().subtract(1, "week").startOf("day"); + break; + case "monthly": + return moment().subtract(1, "month").startOf("day"); + break; + case "daily": + return moment().startOf("day"); + break; + default: + return null; + } + }, + + @computed("period") + endDate(period) { + return period === "all" ? null : moment().endOf("day"); + }, + + @computed("updated_at") + updatedTimestamp(updatedAt) { + return moment(updatedAt).format("LLL"); + }, + + @computed("last_backup_taken_at") + backupTimestamp(lastBackupTakenAt) { + return moment(lastBackupTakenAt).format("LLL"); + }, + + actions: { + changePeriod(period) { + DiscourseURL.routeTo(this._reportsForPeriodURL(period)); + } + }, + + _reportsForPeriodURL(period) { + return `/admin/dashboard-next?period=${period}`; + } +}); diff --git a/app/assets/javascripts/admin/models/admin-dashboard-next.js.es6 b/app/assets/javascripts/admin/models/admin-dashboard-next.js.es6 new file mode 100644 index 0000000000..fb4d7519c3 --- /dev/null +++ b/app/assets/javascripts/admin/models/admin-dashboard-next.js.es6 @@ -0,0 +1,23 @@ +import { ajax } from 'discourse/lib/ajax'; + +const AdminDashboardNext = Discourse.Model.extend({}); + +AdminDashboardNext.reopenClass({ + + /** + Fetch all dashboard data. This can be an expensive request when the cached data + has expired and the server must collect the data again. + + @method find + @return {jqXHR} a jQuery Promise object + **/ + find: function() { + return ajax("/admin/dashboard-next.json").then(function(json) { + var model = AdminDashboardNext.create(json); + model.set('loaded', true); + return model; + }); + }, +}); + +export default AdminDashboardNext; diff --git a/app/assets/javascripts/admin/models/flagged-post.js.es6 b/app/assets/javascripts/admin/models/flagged-post.js.es6 index c33f3d3c49..a1cd66ccd9 100644 --- a/app/assets/javascripts/admin/models/flagged-post.js.es6 +++ b/app/assets/javascripts/admin/models/flagged-post.js.es6 @@ -62,11 +62,74 @@ export default Post.extend({ }, deferFlags(deletePost) { - return ajax('/admin/flags/defer/' + this.id, { type: 'POST', cache: false, data: { delete_post: deletePost } }).catch(popupAjaxError); + const action = () => { + return ajax('/admin/flags/defer/' + this.id, { + type: 'POST', cache: false, data: { delete_post: deletePost } + }); + }; + + if (deletePost && this._hasDeletableReplies()) { + return this._actOnFlagAndDeleteReplies(action); + } else { + return action().catch(popupAjaxError); + } }, agreeFlags(actionOnPost) { - return ajax('/admin/flags/agree/' + this.id, { type: 'POST', cache: false, data: { action_on_post: actionOnPost } }).catch(popupAjaxError); + const action = () => { + return ajax('/admin/flags/agree/' + this.id, { + type: 'POST', cache: false, data: { action_on_post: actionOnPost } + }); + }; + + if (actionOnPost === 'delete' && this._hasDeletableReplies()) { + return this._actOnFlagAndDeleteReplies(action); + } else { + return action().catch(popupAjaxError); + } + }, + + _hasDeletableReplies() { + return this.get('post_number') > 1 && this.get('reply_count') > 0; + }, + + _actOnFlagAndDeleteReplies(action) { + return new Ember.RSVP.Promise((resolve, reject) => { + return ajax(`/posts/${this.id}/reply-ids/all.json`).then(replies => { + const buttons = []; + + buttons.push({ + label: I18n.t('no_value'), + callback() { + action() + .then(resolve) + .catch(error => { + popupAjaxError(error); + reject(); + }); + } + }); + + buttons.push({ + label: I18n.t('yes_value'), + class: "btn-danger", + callback() { + Post.deleteMany(replies.map(r => r.id)) + .then(action) + .then(resolve) + .catch(error => { + popupAjaxError(error); + reject(); + }); + } + }); + + bootbox.dialog(I18n.t("admin.flags.delete_replies", { count: replies.length }), buttons); + }).catch(error => { + popupAjaxError(error); + reject(); + }); + }); }, postHidden: Ember.computed.alias('hidden'), diff --git a/app/assets/javascripts/admin/routes/admin-dashboard-next.js.es6 b/app/assets/javascripts/admin/routes/admin-dashboard-next.js.es6 new file mode 100644 index 0000000000..30ca9b033c --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin-dashboard-next.js.es6 @@ -0,0 +1,5 @@ +export default Discourse.Route.extend({ + activate() { + this.controllerFor('admin-dashboard-next').fetchDashboard(); + } +}); diff --git a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 index b4926b9a5a..5b42f045e1 100644 --- a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 @@ -1,6 +1,7 @@ export default function() { this.route('admin', { resetNamespace: true }, function() { this.route('dashboard', { path: '/' }); + this.route('dashboardNext', { path: '/dashboard-next' }); this.route('adminSiteSettings', { path: '/site_settings', resetNamespace: true }, function() { this.route('adminSiteSettingsCategory', { path: 'category/:category_id', resetNamespace: true} ); }); diff --git a/app/assets/javascripts/admin/templates/components/dashboard-inline-table.hbs b/app/assets/javascripts/admin/templates/components/dashboard-inline-table.hbs new file mode 100644 index 0000000000..b7b0bdc61e --- /dev/null +++ b/app/assets/javascripts/admin/templates/components/dashboard-inline-table.hbs @@ -0,0 +1,28 @@ +{{#conditional-loading-spinner condition=isLoading}} +
| {{label}} | + {{/each}} +
|---|
| {{number data}} | + {{/each}} +
| {{label}} | + {{/each}} +
|---|
| {{v}} | + {{/each}} +
+ {{disk_space.backups_used}} ({{i18n "admin.dashboard.space_free" size=disk_space.backups_free}})
+
+ {{{i18n "admin.dashboard.lastest_backup" date=backupTimestamp}}}
+
+ {{disk_space.uploads_used}} ({{i18n "admin.dashboard.space_free" size=disk_space.uploads_free}}) +
++ {{i18n "admin.dashboard.last_updated"}} {{updatedTimestamp}} +
+ + + {{i18n "admin.dashboard.whats_new_in_discourse"}} + +- {{{stopNotificiationsText}}} -
- -- {{i18n "topic.unsubscribe.change_notification_state"}} -
- - {{topic-notifications-button notificationLevel=model.details.notification_level topic=model}} -Tus temas nuevos aparecen aquí.
Por defecto, los temas se consideran nuevos y mostrarán un indicador nuevo si fueron creados en los últimos 2 días.
Dirígite a preferencias para cambiar esto.
' + new: 'Tus temas nuevos aparecen aquí.
Por defecto, los temas se considerarán nuevos y mostrarán un indicador nuevo si fueron creados en los últimos 2 días.
Dirígite a tus preferencias para cambiar esto.
' unread: 'Tus temas sin leer aparecen aquí.
Por defecto, los temas son considerados sin leer y mostrarán contadores de posts sin leer 1 si:
O si has establecido específicamente el tema como Siguiendo o Vigilando a través del control de notificaciones al pie de cada tema.
Visita tus preferencias para cambiar esto.
' bottom: latest: "No hay más temas recientes para leer." @@ -1447,14 +1455,12 @@ es: bookmarks: "No hay más temas guardados en marcadores." search: "No hay más resultados de búsqueda." topic: - unsubscribe: - stop_notifications: "Ahora recibirás menos notificaciones desde {{title}}" - change_notification_state: "El estado actual de notificación para ti es" filter_to: one: "1 post en el tema" other: "{{count}} posts en el tema" create: 'Crear tema' create_long: 'Crear un nuevo tema' + open_draft: "Abrir borrador" private_message: 'Empezar un mensaje' archive_message: help: 'Archivar mensaje' @@ -2060,6 +2066,7 @@ es: default_position: "Posición predeterminada" position_disabled: "Las Categorías se mostrarán por orden de actividad. Para controlar el orden en que aparecen en las listas," position_disabled_click: 'activa la opción "fixed category positions".' + minimum_required_tags: 'Número mínimo de etiquetas requeridas en un tema:' parent: "Categoría primaria" notifications: watching: @@ -2430,6 +2437,8 @@ es: save: "Guardar" delete: "Eliminar" confirm_delete: "¿Seguro que quieres eliminar este grupo de etiquetas?" + everyone_can_use: "Las etiquetas pueden ser usadas por cualquiera" + usable_only_by_staff: "Las etiquetas son visibles para todo el mundo, pero solo el staff las puede utilizar" visible_only_to_staff: "Etiquetas solo visibles para staff" topics: none: @@ -2458,6 +2467,7 @@ es: custom_message_placeholder: "Introducir un mensaje personalizado" custom_message_template_forum: "Hey, ¡quizá deberías unirte a este foro!" custom_message_template_topic: "¡Hey, he pensado que este tema te va a encantar!" + forced_anonymous: "Debido a una carga extrema en el servidor, esto se está mostrando temporalmente a todo el mundo como una persona sin iniciar sesión lo vería." safe_mode: enabled: "El modo seguro está activado, para salir del modo seguro cierra esta ventana del navegador" admin_js: @@ -2492,11 +2502,19 @@ es: space_free: "{{size}} libre" uploads: "subidas" backups: "backups" + lastest_backup: "Última: %{date}" traffic_short: "Tráfico" traffic: "Peticiones web de la app" page_views: "Páginas vistas" page_views_short: "Páginas vistas" show_traffic_report: "Mostrar informe detallado del tráfico" + community_health: Salud de la comunidad + whats_new_in_discourse: ¿Qué hay nuevo en Discourse? + charts: + signups: + help: Usuarios creados en este periodo + topics: + help: Temas creados en este periodo reports: today: "Hoy" yesterday: "Ayer" @@ -2637,7 +2655,8 @@ es: add: "Añadir" custom: "Personalizado" automatic: "Automático" - default_title: "Título por defecto para todos los miembros en este grupo" + default_title: "Título por defecto" + default_title_description: "se aplicará a todos los usuarios en el grupo" group_owners: Propietarios add_owners: Añadir propietarios none_selected: "Selecciona un grupo para empezar" @@ -3112,6 +3131,7 @@ es: check_personal_message: "comprobar mensaje personal" disabled_second_factor: "desactivación de Verificación en dos pasos" topic_published: "tema despublicado" + post_approved: "post aprobado" screened_emails: title: "Correos bloqueados" description: "Cuando alguien trata de crear una cuenta nueva, los siguientes correos serán revisados y el registro será bloqueado, o alguna otra acción será realizada." diff --git a/config/locales/client.et.yml b/config/locales/client.et.yml index 7d6138ff6f..d79fed90f8 100644 --- a/config/locales/client.et.yml +++ b/config/locales/client.et.yml @@ -524,7 +524,6 @@ et: delete_account: "Kustuta minu konto" delete_account_confirm: "Kas oled kindel, et soovid oma konto jäädavalt kustutada? Seda toimingut ei ole võimalik tagasi võtta!" deleted_yourself: "Konto on edukalt kustutatud." - delete_yourself_not_allowed: "Sa ei saa hetkel oma kontot kustutada. Võta ühendust administraatoriga et ta teeks seda sinu eest." unread_message_count: "Sõnumid" admin_delete: "Kustuta" users: "Kasutajad" @@ -1258,9 +1257,6 @@ et: bookmarks: "Rohkem järjehoidjaga teemasid pole." search: "Rohkem otsingutulemusi pole." topic: - unsubscribe: - stop_notifications: "Sulle saabub nüüd {{title}} kohta vähem teavitusi" - change_notification_state: "Sinu teavituste olek on" filter_to: one: "1 postitus teemas" other: "{{count}} postitust teemas" @@ -2279,7 +2275,6 @@ et: add: "Lisa" custom: "Individuaalne" automatic: "Automaatne" - default_title: "Vaikimisi tiitel kõigile kasutajatele siin grupis" group_owners: Omanikud add_owners: Lisa omanikke none_selected: "Vali alustamiseks grupp" diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml index e6f3323d5c..db7fcbf0b4 100644 --- a/config/locales/client.fa_IR.yml +++ b/config/locales/client.fa_IR.yml @@ -499,7 +499,6 @@ fa_IR: delete_account: "حسابکاربری من را پاک کن" delete_account_confirm: "آیا مطمئنید که میخواهید شناسهتان را برای همیشه پاک کنید؟ برگشتی در کار نیست!" deleted_yourself: "حساب کاربری شما با موفقیت حذف شد." - delete_yourself_not_allowed: "در حال حاضر شما نمیتوانید حساب کاربری خود را حذف کنید. به این منظور با یکی از مدیران برای پاک کردن حسابتان تماس بگیرید." unread_message_count: "پیامها" admin_delete: "پاک کردن" users: "کاربران" @@ -1174,9 +1173,6 @@ fa_IR: bookmarks: "موضوع نشانکگذاری شدهی دیگری وجود ندارد." search: "نتیجهی جستجوی دیگری وجود ندارد" topic: - unsubscribe: - stop_notifications: "حالا شما اعلانات کمتری برای {{title}} دریافت میکنید" - change_notification_state: "وضعیت فعلی اعلانات شما این هست" filter_to: other: "{{count}} نوشته در این موضوع وجود دارد" create: 'موضوع جدید' @@ -2152,7 +2148,6 @@ fa_IR: add: "اضافه کردن" custom: "سفارشی" automatic: "خودکار" - default_title: "عنوان را پیش فرض کن برای تمام اعضا در این گروه" group_owners: مالکین add_owners: افزودن مالک none_selected: "برای شروع یک گروه انتخاب کنید" diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index 723086f832..08a89957b9 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -610,7 +610,6 @@ fi: delete_account: "Poista tilini" delete_account_confirm: "Oletko varma, että haluat lopullisesti poistaa käyttäjätilisi? Tätä toimintoa ei voi perua!" deleted_yourself: "Käyttäjätilisi on poistettu." - delete_yourself_not_allowed: "Et voi poistaa käyttäjätiliäsi juuti nyt. Sinun tulee pyytää ylläpitäjää poistamaan tilisi." unread_message_count: "Viestit" admin_delete: "Poista" users: "Käyttäjät" @@ -1441,9 +1440,6 @@ fi: bookmarks: "Merkattuja ketjuja ei ole enempää." search: "Hakutuloksia ei ole enempää." topic: - unsubscribe: - stop_notifications: "Saat tästä lähtien vähemmän ilmoituksia aiheesta {{title}}" - change_notification_state: "Nykyinen ilmoitusasetuksesti on" filter_to: one: "1 viesti ketjussa" other: "{{count}} viestiä ketjussa" @@ -2580,7 +2576,6 @@ fi: add: "Lisää" custom: "Mukautetut" automatic: "Automaattiset" - default_title: "Tämä ryhmän jäsenten oletustitteli" group_owners: Omistajat add_owners: Lisää omistajia none_selected: "Aloita valitsemalla ryhmä" diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml index 3879aac887..aec5369496 100644 --- a/config/locales/client.fr.yml +++ b/config/locales/client.fr.yml @@ -615,7 +615,7 @@ fr: delete_account: "Supprimer mon compte" delete_account_confirm: "Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée !" deleted_yourself: "Votre compte a été supprimé avec succès." - delete_yourself_not_allowed: "Vous ne pouvez pas supprimer votre compte maintenant. Contactez un administrateur pour faire supprimer votre compte pour vous." + delete_yourself_not_allowed: "Veuiller contacter un responsable si vous souhaiter faire supprimer votre compte." unread_message_count: "Messages" admin_delete: "Supprimer" users: "Utilisateurs" @@ -1121,6 +1121,8 @@ fr: no_content: Aucune correspondance trouvée filter_placeholder: Rechercher... create: "Créer : '{{content}}'" + max_content_reached: "Vous ne pouvez séléctionner que {{count}} élément(s)." + min_content_not_reached: "Séléctionner au moins {{count}} élément(s)." emoji_picker: filter_placeholder: Chercher un emoji people: Personnes @@ -1198,6 +1200,7 @@ fr: remove_featured_link: "Retirer le lien du sujet" reply_placeholder: "Écrivez ici. Utilisez Markdown, BBCode, ou HTML pour mettre en forme. Glissez ou collez des images." reply_placeholder_no_images: "Écrivez ici. Utilisez Markdown, BBCode, ou HTML pour mettre en forme." + reply_placeholder_choose_category: "Vous devez sélectionner une catégorie avant de rédiger ici." view_new_post: "Voir votre nouveau message." saving: "Sauvegarde" saved: "Sauvegardé !" @@ -1332,6 +1335,7 @@ fr: one: "1 résultat pour{{term}}" other: "{{count}}{{plus}} résultats pour{{term}}" title: "rechercher des sujets, messages, utilisateurs ou catégories" + full_page_title: "rechercher des sujets ou messages" no_results: "Aucun résultat." no_more_results: "Aucun résultat supplémentaire." searching: "Recherche en cours…" @@ -1452,14 +1456,12 @@ fr: bookmarks: "Il n'y a plus de sujets avec des signets." search: "Il n'y a plus de résultats à votre recherche." topic: - unsubscribe: - stop_notifications: "Vous recevrez moins de notifications pour {{title}}" - change_notification_state: "Votre statut de notification est" filter_to: one: "1 message dans le sujet" other: "{{count}} messages dans le sujet" create: 'Créer un sujet' create_long: 'Créer un nouveau sujet' + open_draft: "Ouvrir ébauche" private_message: 'Écrire un message' archive_message: help: 'Déplacer le message dans votre archive' @@ -2464,6 +2466,7 @@ fr: custom_message_placeholder: "Entrez votre message personnalisé" custom_message_template_forum: "Hey, tu devrais rejoindre ce forum !" custom_message_template_topic: "Hey, je pensais que tu pourrais aimer ce sujet !" + forced_anonymous: "En raison de la charge extrême, ceci est temporairement montré à tout le monde comme un utilisateur déconnecté le verrait." safe_mode: enabled: "Le mode sans échec est activé ; fermez cette fenêtre de navigateur pour le quitter" admin_js: @@ -2498,11 +2501,19 @@ fr: space_free: "{{size}} libre" uploads: "fichiers envoyés" backups: "sauvegardes" + lastest_backup: "Plus récent: %{date}" traffic_short: "Trafic" traffic: "Requêtes Web Application" page_views: "Pages vues" page_views_short: "Pages vues" show_traffic_report: "Afficher le rapport de trafic détaillé" + community_health: Santé communautaire + whats_new_in_discourse: Quoi de neuf dans Discourse ? + charts: + signups: + help: Utilisateurs crées dans cette période + topics: + help: Sujets crées pour cette période reports: today: "Aujourd'hui" yesterday: "Hier" @@ -2643,7 +2654,8 @@ fr: add: "Ajouter" custom: "Personnalisé" automatic: "Automatique" - default_title: "Titre par défaut pour tous les utilisateurs de ce groupe" + default_title: "Titre par défaut" + default_title_description: "sera appliqué à tous les utilisateurs du groupe" group_owners: Propriétaires add_owners: Ajouter des propriétaires none_selected: "Sélectionnez un groupe pour commencer" @@ -2712,6 +2724,9 @@ fr: tag_event: name: "Événement de tag" details: "Quand un tag est créé, mis à jour ou supprimé." + flag_event: + name: "Evènement de signalement" + details: "Quand un signalement est crée, approuvé, désapprouvé ou reporté." delivery_status: title: "État de l'envoi" inactive: "Inactif" diff --git a/config/locales/client.gl.yml b/config/locales/client.gl.yml index e0f89d916b..7f71ea2f6e 100644 --- a/config/locales/client.gl.yml +++ b/config/locales/client.gl.yml @@ -434,7 +434,6 @@ gl: delete_account: "Eliminar a miña conta" delete_account_confirm: "Confirmas que queres eliminar definitivamente a túa conta? Esta acción non se pode desfacer!" deleted_yourself: "A túa conta acaba de ser eliminada completamente." - delete_yourself_not_allowed: "Non podes eliminar a túa conta neste intre. Contacta cun administrador para que este a elimine por ti. " unread_message_count: "Mensaxes" admin_delete: "Eliminar" users: "Usuarios" @@ -933,9 +932,6 @@ gl: bookmarks: "Non hai máis temas marcados." search: "Non hai máis resultados da busca." topic: - unsubscribe: - stop_notifications: "Agora recibirás menos notificacións sobre {{title}}" - change_notification_state: "O estado actual das túas notificacións é" create: 'Novo tema' create_long: 'Crear un novo tema' private_message: 'Iniciar unha mensaxe' @@ -1643,7 +1639,6 @@ gl: add: "Engadir" custom: "Personalizar" automatic: "Automático" - default_title: "Título predeterminado para os usuarios deste grupo" group_owners: Propietarios add_owners: Engadir propietarios api: diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml index b1fd27d1b7..a3319c535e 100644 --- a/config/locales/client.he.yml +++ b/config/locales/client.he.yml @@ -512,7 +512,6 @@ he: delete_account: "מחק את החשבון שלי" delete_account_confirm: "אתם בטוחים שברצונכם למחוק את החשבון? לא ניתן לבטל פעולה זו!" deleted_yourself: "חשבונך נמחק בהצלחה." - delete_yourself_not_allowed: "אתם לא יכולים למחוק את חשבונכם כרגע. צרו קשר עם מנהל כדי שימחק אותו בשבילכם." unread_message_count: "הודעות" admin_delete: "מחק" users: "משתמשים" @@ -1196,9 +1195,6 @@ he: bookmarks: "אין עוד סימניות לנושאים." search: "אין עוד תוצאות חיפוש" topic: - unsubscribe: - stop_notifications: "תקבלו פחות התראות עבור {{title}}" - change_notification_state: "מצב ההתראות הנוכחי שלכם הוא" filter_to: one: "פוסט אחד בנושא" other: "{{count}} פוסטים בנושא" @@ -2236,7 +2232,6 @@ he: add: "הוספה" custom: "מותאם" automatic: "אוטומטי" - default_title: "ברירת המחדל לכל המשתמשים בקבוצה זו" group_owners: מנהלים add_owners: הוספת בעלים none_selected: "בחירת קבוצה כדי להתחיל" diff --git a/config/locales/client.id.yml b/config/locales/client.id.yml index de567f669f..fadce49e77 100644 --- a/config/locales/client.id.yml +++ b/config/locales/client.id.yml @@ -425,7 +425,6 @@ id: delete_account: "Hapus Akun Saya" delete_account_confirm: "Apakah Anda yakin untuk menghapus akun ini secara permanen? Perintah ini tidak dapat dibatalkan!" deleted_yourself: "Akun Anda telah sukses dihapus." - delete_yourself_not_allowed: "Anda tidak dapat menghapus akun. Hubungi admin untuk menghapus akun Anda." unread_message_count: "Pesan" admin_delete: "Hapus" users: "Pengguna" diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index 8859d857d2..af1c55b8e6 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -533,7 +533,6 @@ it: delete_account: "Cancella il mio account" delete_account_confirm: "Sei sicuro di voler cancellare il tuo account in modo permanente? Questa azione non può essere annullata!" deleted_yourself: "Il tuo account è stato eliminato con successo." - delete_yourself_not_allowed: "Non puoi eliminare il tuo account in questo momento. Contatta un amministratore e chiedigli di cancellarlo per te." unread_message_count: "Messaggi" admin_delete: "Cancella" users: "Utenti" @@ -1299,9 +1298,6 @@ it: bookmarks: "Non ci sono ulteriori argomenti nei segnalibri." search: "Non ci sono altri risultati di ricerca." topic: - unsubscribe: - stop_notifications: "Da ora riceverai meno notifiche per {{title}}" - change_notification_state: "Lo stato delle tue notifiche è" filter_to: one: "1 messaggio in questo argomento" other: "{{count}} messaggi in questo argomento" @@ -2397,7 +2393,6 @@ it: add: "Aggiungi" custom: "Personalizzato" automatic: "Automatico" - default_title: "Titolo predefinito per tutti gli utenti di questo gruppo" group_owners: Proprietari add_owners: Aggiungi proprietari none_selected: "Seleziona un gruppo per iniziare" diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index f9c8c96eb5..c3d1852944 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -517,7 +517,6 @@ ja: delete_account: "アカウントを削除する" delete_account_confirm: "アカウントを削除してもよろしいですか?削除されたアカウントは復元できません。" deleted_yourself: "あなたのアカウントは削除されました。" - delete_yourself_not_allowed: "アカウントを削除できませんでした。サイトの管理者へ連絡してください。" unread_message_count: "メッセージ" admin_delete: "削除" users: "ユーザー" @@ -1235,9 +1234,6 @@ ja: bookmarks: "ブックマーク済みのトピックはこれ以上ありません。" search: "検索結果は以上です。" topic: - unsubscribe: - stop_notifications: " {{title}}の通知を受け取らなくなります" - change_notification_state: "あなたへの通知状況は" filter_to: other: "トピック内の {{count}} 件を表示" create: '新規トピック' @@ -2135,7 +2131,6 @@ ja: add: "追加" custom: "カスタム" automatic: "自動で作成されたグループ" - default_title: "このグループのすべてのユーザーのデフォルトタイトル" group_owners: オーナー add_owners: オーナーを追加 api: diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml index 0b4367fc6a..9d08f81093 100644 --- a/config/locales/client.ko.yml +++ b/config/locales/client.ko.yml @@ -504,7 +504,6 @@ ko: delete_account: "내 계정 삭제" delete_account_confirm: "정말로 계정을 삭제할까요? 이 작업은 되돌릴 수 없습니다." deleted_yourself: "계정이 삭제 되었습니다." - delete_yourself_not_allowed: "지금은 계정을 삭제할 수 없습니다. 관리자에게 연락해 주세요." unread_message_count: "메시지" admin_delete: "삭제" users: "회원" @@ -1224,9 +1223,6 @@ ko: bookmarks: "더이상 북마크한 주제가 없습니다." search: "더이상 검색 결과가 없습니다." topic: - unsubscribe: - stop_notifications: "{{title}}에 대한 알림은 이제 덜 받게 됩니다." - change_notification_state: "현재 당신의 알림 설정 : " filter_to: other: "이 토픽에 {{count}}개 게시글" create: '새 주제 만들기' @@ -2238,7 +2234,6 @@ ko: add: "추가" custom: "Custom" automatic: "자동화" - default_title: "이 그룹의 모든 사용자를 위한 기본 제목" group_owners: 소유자 add_owners: 소유자 추가하기 none_selected: "시작할 그룹을 선택하세요" diff --git a/config/locales/client.lv.yml b/config/locales/client.lv.yml index 2e2ff3017d..bed5d358da 100644 --- a/config/locales/client.lv.yml +++ b/config/locales/client.lv.yml @@ -539,7 +539,6 @@ lv: delete_account: "Izdzēst manu profilu" delete_account_confirm: "Vai esat drošs, ka vēlaties neatgriezeniski dzēst savu profilu? Šo darbību nevar atcelt!" deleted_yourself: "Jūsu profils ir veiksmīgi izdzēsts." - delete_yourself_not_allowed: "Pašlaik jūs nevarat izdzēst savu profilu. Lūdzu sazinieties ar administratoru, lai izdzēstu jūsu profilu." unread_message_count: "Ziņas" admin_delete: "Dzēst" users: "Lietotāji" @@ -1241,9 +1240,6 @@ lv: bookmarks: "Vairāk grāmatzīmēs ievietoto tēmu nav. " search: "Nekas netika atrasts." topic: - unsubscribe: - stop_notifications: "Tagad saņemsi mazāk paziņojumus no {{title}}" - change_notification_state: "Tavs šī brīža paziņojumu statuss ir" filter_to: zero: "tēmā ziņu nav" one: "1 ziņa tēmā" @@ -2319,7 +2315,6 @@ lv: delete_owner_confirm: "Noņemt lietotāja privilēģijas '%{username}'?" add: "Pievienot" automatic: "Automātiski" - default_title: "Noklusējuma apzīmējums visiem lietotājiem šajā grupā" group_owners: Īpašnieki add_owners: Pievienot īpašniekus none_selected: "Izvēlēties grupu, lai uzsāktu" diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml index 9e5f51d711..80a17cc68f 100644 --- a/config/locales/client.nb_NO.yml +++ b/config/locales/client.nb_NO.yml @@ -544,7 +544,7 @@ nb_NO: enable: "Slå på varslinger" each_browser_note: "Merk: Du må endre denne innstillinger for hver nettleser du bruker." dismiss: 'Avslå' - dismiss_notifications: "Avslå alt" + dismiss_notifications: "Forkast alle" dismiss_notifications_tooltip: "Merk alle uleste varslinger som lest" first_notification: "Ditt første varsel! Velg det for å komme i gang." disable_jump_reply: "Ikke hopp til ditt nye innlegg etter svar" @@ -595,7 +595,6 @@ nb_NO: delete_account: "Slett kontoen min" delete_account_confirm: "Er du sikker på at du vil slette kontoen din permanent? Denne handlingen kan ikke angres!" deleted_yourself: "Slettingen av din konto har vært vellykket." - delete_yourself_not_allowed: "Kontoen din kan ikke slettes akkurat nå. Kontakt en administrator til å slette kontoen for deg." unread_message_count: "Meldinger" admin_delete: "Slett" users: "Brukere" @@ -1365,11 +1364,11 @@ nb_NO: reset_read: "Nullstill lest" delete: "Slett tråder" dismiss: "Avslå" - dismiss_read: "Avslå alle uleste" - dismiss_button: "Avslå…" - dismiss_tooltip: "Avslå bare nye innlegg eller slutt å overvåke tråder" + dismiss_read: "Forkast alle uleste" + dismiss_button: "Forkast…" + dismiss_tooltip: "Forkast kun nye innlegg eller slutt å overvåke tråder" also_dismiss_topics: "Slutt å overvåke disse trådene slik at de aldri igjen vises til meg som ulest" - dismiss_new: "Avslå nye" + dismiss_new: "Forkast nye" toggle: "slå på/av massevelging av tråder" actions: "Massehandlinger" change_category: "Velg kategori" @@ -1411,9 +1410,6 @@ nb_NO: bookmarks: "Det finnes ingen flere bokmerkede tråder." search: "Det finnes ingen flere søkeresultater" topic: - unsubscribe: - stop_notifications: "Du vil nå få færre varsler for {{title}}" - change_notification_state: "Din nåværende varslingsstatus er" filter_to: one: "1 innlegg i tråd" other: "{{count}} innlegg i tråd" @@ -2272,8 +2268,8 @@ nb_NO: show_incoming_updated_topics: '. Vis oppdaterte tråder' search: '/ eller Ctrl+Alt+f Søk' help: '? Åpne tastaturhjelp' - dismiss_new_posts: 'x, r Avslå Nye/Innlegg' - dismiss_topics: 'x, t Avslå tråder' + dismiss_new_posts: 'x, r Forkast Nye/Innlegg' + dismiss_topics: 'x, t Forkast tråder' log_out: 'shift+z shift+z Logg ut' composing: title: 'Skriving' @@ -2559,7 +2555,6 @@ nb_NO: add: "Legg til" custom: "Egendefinert" automatic: "Automatisk" - default_title: "Forvalgt tittel for alle brukere i denne gruppen" group_owners: Eiere add_owners: Legg til eiere none_selected: "Velg en gruppe for å komme i gang" diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml index 1341fd3e59..38cb2c9a6a 100644 --- a/config/locales/client.nl.yml +++ b/config/locales/client.nl.yml @@ -551,7 +551,6 @@ nl: delete_account: "Mijn account verwijderen" delete_account_confirm: "Weet u zeker dat u uw account definitief wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt!" deleted_yourself: "Uw account is met succes verwijderd." - delete_yourself_not_allowed: "U kunt uw account nu niet verwijderen. Neem contact op met een beheerder om uw account te laten verwijderen." unread_message_count: "Berichten" admin_delete: "Verwijderen" users: "Gebruikers" @@ -1281,9 +1280,6 @@ nl: bookmarks: "Er zijn geen topics met bladwijzers meer." search: "Er zijn geen zoekresultaten meer." topic: - unsubscribe: - stop_notifications: "U ontvangt nu minder meldingen voor {{title}}" - change_notification_state: "Uw huidige meldingsstatus is" filter_to: one: "1 bericht in topic" other: "{{count}} berichten in topic" @@ -2346,7 +2342,6 @@ nl: add: "Toevoegen" custom: "Aangepast" automatic: "Automatisch" - default_title: "Standaardtitel voor alle gebruikers in deze groep" group_owners: Eigenaren add_owners: Eigenaren toevoegen none_selected: "Selecteer een groep om te beginnen" diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml index 96a640a56a..33bf527123 100644 --- a/config/locales/client.pl_PL.yml +++ b/config/locales/client.pl_PL.yml @@ -584,7 +584,6 @@ pl_PL: delete_account: "Usuń moje konto" delete_account_confirm: "Czy na pewno chcesz usunąć swoje konto? To nieodwracalne!" deleted_yourself: "Twoje konto zostało usunięte." - delete_yourself_not_allowed: "Nie możesz usunąć swojego konta w tej chwili. Skontaktuj się z administratorem, by usunął Twoje konto za Ciebie." unread_message_count: "Wiadomości" admin_delete: "Usuń" users: "Użytkownicy" @@ -1371,9 +1370,6 @@ pl_PL: bookmarks: "Nie ma więcej zakładek." search: "Nie znaleziono więcej wyników." topic: - unsubscribe: - stop_notifications: "Będziesz otrzymywać mniej powiadomień o {{title}}" - change_notification_state: "Twój aktualny stan powiadomień to" filter_to: one: "1 post w temacie" few: "{{count}} posty w temacie" @@ -2571,7 +2567,6 @@ pl_PL: add: "Dodaj" custom: "Niestandardowe" automatic: "Automatyczne" - default_title: "Domyślny tytuł użytkowników należących do tej grupy" group_owners: Właściciele add_owners: Dodaj właścicieli none_selected: "Wybierz grupę, aby rozpocząć" diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml index 479e188b7b..ae97492e44 100644 --- a/config/locales/client.pt.yml +++ b/config/locales/client.pt.yml @@ -515,7 +515,6 @@ pt: delete_account: "Eliminar A Minha Conta" delete_account_confirm: "Tem a certeza que pretende eliminar a sua conta de forma permanente? Esta ação não pode ser desfeita!" deleted_yourself: "A sua conta foi eliminada com sucesso." - delete_yourself_not_allowed: "Neste momento não pode eliminar a sua conta. Contacte um administrador para que este elimine a sua conta por si." unread_message_count: "Mensagens" admin_delete: "Apagar" users: "Utilizadores" @@ -1279,9 +1278,6 @@ pt: bookmarks: "Não há mais tópicos marcados." search: "Não há mais resultados na pesquisa." topic: - unsubscribe: - stop_notifications: "Irá passar a receber menos notificações para {{title}}" - change_notification_state: "O seu estado de notificação atual é" filter_to: one: "1 publicação no tópico" other: "{{count}} publicações no tópico" @@ -2241,7 +2237,6 @@ pt: add: "Adicionar" custom: "Personalizar" automatic: "Automático" - default_title: "Título padrão para todos os utilizadores neste grupo" group_owners: Proprietários add_owners: Adicionar proprietários api: diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml index 1df3a988b8..a92c6d09fd 100644 --- a/config/locales/client.pt_BR.yml +++ b/config/locales/client.pt_BR.yml @@ -519,7 +519,6 @@ pt_BR: delete_account: "Excluir Minha Conta" delete_account_confirm: "Tem certeza de que deseja excluir permanentemente a sua conta? Essa ação não pode ser desfeita!" deleted_yourself: "Sua conta foi excluída com sucesso." - delete_yourself_not_allowed: "Você não pode excluir a sua conta agora. Contate um administrador para apagar a sua conta para você." unread_message_count: "Mensagens" admin_delete: "Apagar" users: "Usuários" @@ -1225,9 +1224,6 @@ pt_BR: bookmarks: "Não há mais tópicos nos favoritos." search: "Não existem mais resultados." topic: - unsubscribe: - stop_notifications: "Você agora vai receber menos notificações de {{title}}" - change_notification_state: "Seu estado de notificação atual é" filter_to: one: "1 publicação no tópico" other: "{{count}} publicações no tópico" @@ -2260,7 +2256,6 @@ pt_BR: add: "Adicionar" custom: "Definidos" automatic: "Automático" - default_title: "Título padrão para todos usuários nesse grupo" group_owners: Prorietários add_owners: Adicionar proprietários none_selected: "Selecione um grupo para começar" diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml index b9d2758cf1..bb4ee967fe 100644 --- a/config/locales/client.ro.yml +++ b/config/locales/client.ro.yml @@ -569,7 +569,6 @@ ro: delete_account: "Șterge-mi contul" delete_account_confirm: "Ești sigur că vrei să ștergi contul? Această acțiune este ireversibilă!" deleted_yourself: "Contul tău a fost șters cu succes." - delete_yourself_not_allowed: "Momentan nu îți poți șterge contul. Contactează un admin pentru a o face." unread_message_count: "Mesaje" admin_delete: "Șterge" users: "Utilizatori" @@ -1338,9 +1337,6 @@ ro: bookmarks: "Nu mai sunt semne de carte." search: "Nu mai sunt rezultate." topic: - unsubscribe: - stop_notifications: "Vei primi mai puține notificări pentru {{title}}" - change_notification_state: "Starea actuală a notificărilor tale este" filter_to: one: "O postare în subiect" few: "{{count}} postări în subiect" @@ -2067,7 +2063,7 @@ ro: posts_likes_MF: | Acest subiect are {count, plural, one {1 răspuns} other {# răspunsuri}} {ratio, select, jos {cu o rată înaltă de aprecieri pe postare} - med {cu o foarte înaltă rată de aprecieri pe postare} + med {cu o foarte înaltă de aprecieri pe postare} înalt {cu o rată extrem de înaltă de aprecieri pe postare} other {}} original_post: "Postare inițială" @@ -2428,6 +2424,7 @@ ro: delete_title: "Șterge postarea la care se referă marcajul de avertizare." delete_post_defer_flag: "Șterge postarea și ignoră marcarea" delete_post_defer_flag_title: "Șterge postarea; dacă este prima, șterge subiectul" + delete_post_agree_flag: "Șterge postarea și aprobă marcajul de avertizare" delete_post_agree_flag_title: "Șterge postarea; dacă este prima, șterge subiectul" delete_flag_modal_title: "Șterge și..." delete_spammer: "Șterge spammer" @@ -2481,7 +2478,6 @@ ro: add: "Adaugă" custom: "Personalizat" automatic: "Automat" - default_title: "Titlu implicit pentru toți utilizatorii din acest grup" group_owners: Proprietari add_owners: Adaugă proprietari none_selected: "Alege un grup pentru a începe" diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 71cba26d94..ae19bff3cf 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -639,7 +639,6 @@ ru: delete_account: "Удалить мою учётную запись" delete_account_confirm: "Вы уверены, что хотите удалить свою учётную запись? Отменить удаление будет невозможно!" deleted_yourself: "Ваша учётная запись была успешно удалена." - delete_yourself_not_allowed: "Вы не можете сейчас удалить свою учётную запись. Попросите администратора удалить вашу учётную запись." unread_message_count: "Сообщения" admin_delete: "Удалить" users: "Пользователи" @@ -1417,9 +1416,6 @@ ru: bookmarks: "Больше нет избранных тем." search: "Больше ничего не найдено." topic: - unsubscribe: - stop_notifications: "Вы будете получать меньше уведомлений для {{title}}" - change_notification_state: "Ваше текущее состояние уведомлений" filter_to: one: "1 сообщение в теме" few: "{{count}} сообщения в теме" @@ -2618,7 +2614,6 @@ ru: add: "Добавить" custom: "Настраиваемые" automatic: "Автоматические" - default_title: "Заголовок по умолчанию для всех пользователей в группе" group_owners: Владельцы add_owners: Добавить владельцев none_selected: "Чтобы начать, выберите группу!" diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml index b7a1bda91d..e618e0fa5c 100644 --- a/config/locales/client.sk.yml +++ b/config/locales/client.sk.yml @@ -602,7 +602,6 @@ sk: delete_account: "Vymazať môj účet" delete_account_confirm: "Ste si istý, že chcete permanentne vymazať váš účet? Táto akcia je nenávratná." deleted_yourself: "Váš účet bol úspešne vymazaný." - delete_yourself_not_allowed: "Momentálne nie je možné vymazať váš učet. Kontaktujte administrátora a ten vám ho vymaže." unread_message_count: "Správy" admin_delete: "Vymazať" users: "Používatelia" @@ -1263,9 +1262,6 @@ sk: bookmarks: "Žiadne ďalšie témy v záložkách." search: "Nenašlo sa viac výsledkov." topic: - unsubscribe: - stop_notifications: "Teraz budete dostávať menej upozornení na {{title}}" - change_notification_state: "Váš súčasný stav upozornení je" filter_to: one: "1 príspevok k téme" few: "{{count}} príspevky k téme" @@ -2238,7 +2234,6 @@ sk: add: "Pridať" custom: "Vlastné" automatic: "Automaticky" - default_title: "Štandardné označenie pre všetkých používateľov v tejto skupine" group_owners: Vlastníci add_owners: Pridať vlastníkov api: diff --git a/config/locales/client.sl.yml b/config/locales/client.sl.yml index 927cddab60..cd5ea38771 100644 --- a/config/locales/client.sl.yml +++ b/config/locales/client.sl.yml @@ -554,7 +554,6 @@ sl: delete_account: "Izbriši Moj Račun" delete_account_confirm: "Si prepričan, da želiš trajno izbrisati svoj račun? Tega postopka ni mogoče razveljaviti!" deleted_yourself: "Vaš račun je bil uspešno izbrisan." - delete_yourself_not_allowed: "Trenutno ne morete izbrisati vašega računa. Kontaktiratje administratorja, da izbriše vaš račun." unread_message_count: "Sporočila" admin_delete: "Izbriši" users: "Uporabniki" @@ -1425,7 +1424,6 @@ sl: add: "Dodaj" custom: "Po meri" automatic: "Avtomatsko" - default_title: "Privzet naziv za vse uporabnice/ke v tej skupini" group_owners: Lastniki add_owners: Dodaj lastnike api: diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml index c86014126a..1e5f57150b 100644 --- a/config/locales/client.sq.yml +++ b/config/locales/client.sq.yml @@ -484,7 +484,6 @@ sq: delete_account: "Fshi llogarinë time" delete_account_confirm: "Jeni i sigurtë që dëshironi ta mbyllni përgjithmonë llogarinë tuaj? Ky veprim nuk mund të zhbëhet!" deleted_yourself: "Llogaria juaj u fshi me sukses." - delete_yourself_not_allowed: "Nuk mund t'a fshini llogarinë tuaj tani. Kontaktoni një admin për të fshirë llogarinë. " unread_message_count: "Mesazhet" admin_delete: "Fshi" users: "Anëtarët" @@ -1102,9 +1101,6 @@ sq: bookmarks: "Nuk ka më tema të preferuara." search: "Nuk ka më rezultate nga kërkimi. " topic: - unsubscribe: - stop_notifications: "Tani ju do të merrni më pak njoftime për {{title}}" - change_notification_state: "Statusi juaj i njoftimeve tani është" filter_to: one: "1 postim në temë" other: "{{count}} postime në temë" diff --git a/config/locales/client.sr.yml b/config/locales/client.sr.yml index 7eceda1ec7..4d96a7da48 100644 --- a/config/locales/client.sr.yml +++ b/config/locales/client.sr.yml @@ -446,7 +446,6 @@ sr: delete_account: "Obriši moj Nalog" delete_account_confirm: "Jeste li sigurni da želite trajno obrisati svoj nalog? Ova se akcija ne može poništiti!" deleted_yourself: "Vaš nalog je uspešno obrisan." - delete_yourself_not_allowed: "Trenutno ne možete obrisati svoj nalog. Kontaktirajte administratora da ga obriše umesto vas." unread_message_count: "Poruke" admin_delete: "Obriši" staff_counters: diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml index b79c775938..e783fa9aa6 100644 --- a/config/locales/client.sv.yml +++ b/config/locales/client.sv.yml @@ -508,7 +508,6 @@ sv: delete_account: "Radera mitt konto" delete_account_confirm: "Är du säker på att du vill ta bort ditt konto permanent? Denna åtgärd kan inte ångras!" deleted_yourself: "Ditt konto har tagits bort." - delete_yourself_not_allowed: "Du kan inte ta bort ditt konto just nu. Kontakta en admin och be om att få ditt konto borttaget." unread_message_count: "Meddelanden" admin_delete: "Radera" users: "Användare" @@ -1155,9 +1154,6 @@ sv: bookmarks: "Inga fler bokmärkta ämnen hittades." search: "Inga fler sökresultat hittades." topic: - unsubscribe: - stop_notifications: "Du kommer du att motta färre notifieringar från {{title}}" - change_notification_state: "Ditt aktuella notifieringstillstånd är " filter_to: one: "1 inlägg i ämnet" other: "{{count}} inlägg i ämnet" @@ -2156,7 +2152,6 @@ sv: add: "Lägg till" custom: "Anpassad" automatic: "Automatisk" - default_title: "Standardtitel för alla användare i denna grupp" group_owners: Ägare add_owners: Lägg till ägare none_selected: "Välj en grupp för att komma igång" diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml index ca2bda8c4e..704fffce66 100644 --- a/config/locales/client.te.yml +++ b/config/locales/client.te.yml @@ -283,7 +283,6 @@ te: delete_account: "నా ఖాతా తొలగించు" delete_account_confirm: "నిజ్జంగా మీరు మీ ఖాతాను శాస్వతంగా తొలగించాలనుకుంటున్నారా? ఈ చర్య రద్దుచేయలేరు సుమా! " deleted_yourself: "మీ ఖాతా విజయవంతంగా తొలగించబడింది. " - delete_yourself_not_allowed: "మీ ఖాతాను ఇప్పుడు తొలగించలేరు. మీ ఖాతాను తొలగించడానికి అధికారిని సంప్రదించండి. " unread_message_count: "సందేశాలు" admin_delete: "తొలగించు" users: "వాడుకరులు" diff --git a/config/locales/client.th.yml b/config/locales/client.th.yml index 74766faf63..fa4414f489 100644 --- a/config/locales/client.th.yml +++ b/config/locales/client.th.yml @@ -454,7 +454,6 @@ th: delete_account: "ลบบัญชีของคุณ" delete_account_confirm: "คุณแน่ใจใหม่ที่จะลบบัญชีอย่างถาวร? การกระทำนี้ไม่สามารถยกเลิกได้" deleted_yourself: "คุณลบบัญชีเสร็จเเรียบร้อยแล้ว" - delete_yourself_not_allowed: "คุณไม่สามารถลบบัญชีได้ในขณะนี้ กรุณาติดต่อผู้ดูแลระบบเพื่อลบบัญชีของคุณ" unread_message_count: "ข้อความ" admin_delete: "ลบ" users: "ผู้ใช้" diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml index 033819d270..cdf2935805 100644 --- a/config/locales/client.tr_TR.yml +++ b/config/locales/client.tr_TR.yml @@ -533,7 +533,6 @@ tr_TR: delete_account: "Hesabımı Sil" delete_account_confirm: "Hesabınızı kalıcı olarak silmek istediğinize emin misiniz? Bu eylemi geri alamazsınız!" deleted_yourself: "Hesabınız başarıyla silindi." - delete_yourself_not_allowed: "Hesabınızı şu an silemezsiniz. Hesabınızı silmesi için bir yönetici ile iletişime geçin." unread_message_count: "İletiler" admin_delete: "Sil" users: "Kullanıcılar" @@ -1296,9 +1295,6 @@ tr_TR: bookmarks: "Daha fazla imlenmiş konu yok." search: "Daha fazla arama sonucu yok." topic: - unsubscribe: - stop_notifications: "Artık {{title}} için daha az bildirim alacaksınız." - change_notification_state: "Geçerli bildirim durumunuz" filter_to: one: "konuda {{count}} tane gönderi var" other: "konuda {{count}} tane gönderi var" @@ -2324,7 +2320,6 @@ tr_TR: add: "Ekle" custom: "Özel" automatic: "Otomatik" - default_title: "Bu gruptaki tüm kullanıcılar için öntanımlı başlık" group_owners: Sahipler add_owners: Sahiplik ekle api: diff --git a/config/locales/client.uk.yml b/config/locales/client.uk.yml index 8ceffa6e28..f1b5abcb94 100644 --- a/config/locales/client.uk.yml +++ b/config/locales/client.uk.yml @@ -324,7 +324,6 @@ uk: delete_account: "Видалити обліковий запис" delete_account_confirm: "Are you sure you want to permanently delete your account? This action cannot be undone!" deleted_yourself: "Your account has been deleted successfully." - delete_yourself_not_allowed: "You cannot delete your account right now. Contact an admin to do delete your account for you." unread_message_count: "Повідомлення" admin_delete: "Видалити" users: "Користувачі" diff --git a/config/locales/client.ur.yml b/config/locales/client.ur.yml index ee2b53db0a..eb81150046 100644 --- a/config/locales/client.ur.yml +++ b/config/locales/client.ur.yml @@ -604,7 +604,6 @@ ur: delete_account: "میرا اکاؤنٹ حذف کریں" delete_account_confirm: "کیا آپ واقعی مستقل طور پر اپنا اکاؤنٹ حذف کرنا چاہتے ہیں؟ اس عمل کو کالعدم نہیں کیا جا سکتا!" deleted_yourself: "آپ کے اکاؤنٹ کو کامیابی سے حزف کر دیا گیا ہے۔" - delete_yourself_not_allowed: "آپ ابھی اپنے اکاؤنٹ کو حذف نہیں کرسکتے۔ آپ کے لئے اکاؤنٹ حزف کرنے کے لئے ایک ایڈمن سے رابطہ کریں۔" unread_message_count: "پیغامات" admin_delete: "حذف کریں" users: "صارفین" @@ -1436,9 +1435,6 @@ ur: bookmarks: "مزید کوئی بک مارک کیے ہوئے ٹاپک موجود نہیں۔" search: "سرچ کے مزید کوئی نتائج نہیں۔" topic: - unsubscribe: - stop_notifications: "اب آپ کو {{title}} کیلئے کم اطلاعات موصول ہوں گی" - change_notification_state: "آپ کا موجودہ نوٹیفکیشن حالت ہے" filter_to: one: "ٹاپک میں 1 پوسٹ" other: "ٹاپک میں {{count}} پوسٹس" @@ -2589,7 +2585,6 @@ ur: add: "شامل کریں" custom: "اپنی مرضی کا" automatic: "خود کار طریقے سے" - default_title: "اِس گروپ میں تمام صارفین کے لئے پہلے سے طے شدہ عنوان" group_owners: مالکان add_owners: مالکان شامل کریں none_selected: "شروع کرنے کے لئے ایک گروپ منتخب کریں" diff --git a/config/locales/client.vi.yml b/config/locales/client.vi.yml index 15a5c6107c..8e870689a7 100644 --- a/config/locales/client.vi.yml +++ b/config/locales/client.vi.yml @@ -500,7 +500,6 @@ vi: delete_account: "Xoá Tài khoản của tôi" delete_account_confirm: "Bạn có chắc chắn muốn xóa vĩnh viễn tài khoản của bạn? Hành động này không thể được hoàn tác!" deleted_yourself: "Tài khoản của bạn đã được xóa thành công." - delete_yourself_not_allowed: "Bạn không thể xóa tài khoản của bạn ngay bây giờ. Liên lạc với admin để làm xóa tài khoản cho bạn." unread_message_count: "Tin nhắn" admin_delete: "Xoá" users: "Thành viên" @@ -1135,9 +1134,6 @@ vi: bookmarks: "Không còn thêm chủ đề được đánh dấu nào nữa." search: "Không có thêm kết quả tìm kiếm nào nữa." topic: - unsubscribe: - stop_notifications: "Từ bây giờ bạn sẽ không nhận thông báo từ {{title}}" - change_notification_state: "Tình trạn thông báo của bạn là" create: 'Chủ đề Mới' create_long: 'Tạo một Chủ đề mới' private_message: 'Bắt đầu một thông điệp' @@ -1933,7 +1929,6 @@ vi: add: "Thêm" custom: "Tùy biến" automatic: "Tự động" - default_title: "Tên mặc định cho tất cả các thành viên trong nhóm này" group_owners: Chủ sở hữu add_owners: Thêm chủ sở hữu api: diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index f7b4989f62..4a55172e92 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -151,6 +151,7 @@ zh_CN: not_implemented: "非常抱歉,这个功能仍在开发中!" no_value: "否" yes_value: "是" + submit: "提交" generic_error: "抱歉,出了点小问题。" generic_error_with_reason: "出错了:%{error}" sign_up: "注册" @@ -307,6 +308,22 @@ zh_CN: make_user_group_owner: "设为所有者" remove_user_as_group_owner: "撤销所有者" groups: + manage: + profile: + title: 个人信息 + interaction: + notification: 通知 + membership: + title: 成员资格 + access: 访问 + logs: + title: "日志" + when: "时间" + action: "操作" + subject: "主题" + details: "详情" + from: "从" + to: "到" public_admission: "允许用户自由加入小组(需要小组公开可见)" public_exit: "允许用户自由离开小组" empty: @@ -317,6 +334,9 @@ zh_CN: topics: "群组的成员从未发表主题。" logs: "没有关于群组的日志。" add: "添加" + join: "加入" + leave: "离开" + request: "请求" message: "私信" allow_membership_requests: "允许用户向小组拥有者发送成员请求" membership_request_template: "用户发送会员请求时向其显示的自定义模板" @@ -326,14 +346,27 @@ zh_CN: reason: "向小组拥有者说明你为何属于这个小组" membership: "成员资格" name: "群组ID" + user_count: "用户" bio: "关于群组" + selector_placeholder: "输入用户名" owner: "所有者" index: title: "群组" empty: "没有可见的群组。" + public: "公开" + private: "私密" + my_groups: "我的群组" + is_group_owner: "所有者" title: other: "小组" activity: "活动" + members: + title: "成员" + filter_placeholder: "用户名" + remove_member: "移除成员" + make_owner: "设为所有者" + remove_owner: "撤销所有者" + owner: "所有者" topics: "主题" posts: "帖子" mentions: "提及" @@ -508,7 +541,6 @@ zh_CN: delete_account: "删除我的帐号" delete_account_confirm: "你真的要永久删除自己的帐号吗?删除之后无法恢复!" deleted_yourself: "你的帐号已被删除。" - delete_yourself_not_allowed: "你目前不能删除自己的帐号。联系管理员帮助你删除帐号。" unread_message_count: "私信" admin_delete: "删除" users: "用户" @@ -542,6 +574,7 @@ zh_CN: move_to_archive: "存档" failed_to_move: "移动选中私信失败(可能你的网络出问题了)" select_all: "全选" + tags: "标签" preferences_nav: account: "帐号" profile: "个人信息" @@ -561,6 +594,12 @@ zh_CN: choose: "输入密码" second_factor: title: "双重验证" + disable: "停用双重验证" + enable: "为了加强账户安全" + confirm_password_description: "确认密码以继续" + label: "编码" + disable_description: "请输入来自 app 的验证码" + show_key_description: "手动输入" change_about: title: "更改个人信息" error: "提交修改时出错了" @@ -1065,6 +1104,7 @@ zh_CN: olist_title: "数字列表" ulist_title: "符号列表" list_item: "列表条目" + toggle_direction: "切换方向" help: "Markdown 编辑帮助" collapse: "最小号编辑面板" abandon: "关闭编辑面板并放弃草稿" @@ -1259,9 +1299,6 @@ zh_CN: bookmarks: "没有更多收藏的主题了。" search: "没有更多搜索结果了。" topic: - unsubscribe: - stop_notifications: "你将收到更少的关于{{title}}的通知" - change_notification_state: "你现在的通知状态是" filter_to: other: "本主题中的 {{count}} 帖" create: '发新主题' @@ -1580,6 +1617,7 @@ zh_CN: show_hidden: '查看隐藏内容' deleted_by_author: other: "(帖子被作者删除,如无标记将在 %{count} 小时后自动删除)" + collapse: "折叠" expand_collapse: "展开/折叠" gap: other: "查看 {{count}} 个隐藏回复" @@ -1629,6 +1667,8 @@ zh_CN: undelete: "恢复本帖" share: "分享指向这个帖子的链接" more: "更多" + delete_replies: + just_the_post: "不,只是这篇帖子" admin: "帖子管理" wiki: "公共编辑" unwiki: "限制公共编辑" @@ -1637,6 +1677,10 @@ zh_CN: rebake: "重建 HTML" unhide: "显示" change_owner: "更改作者" + grant_badge: "授予徽章" + lock_post: "锁定帖子" + lock_post_description: "禁止发帖者编辑这篇帖子" + unlock_post: "解锁帖子" actions: flag: '标记' defer_flags: @@ -2305,7 +2349,6 @@ zh_CN: add: "添加" custom: "定制" automatic: "自动" - default_title: "群组内所有用户的默认头衔" group_owners: 所有者 add_owners: 添加所有者 none_selected: "选择一个小组以开始" @@ -2364,6 +2407,8 @@ zh_CN: details: "当有新回复、编辑、帖子被删除或者恢复时。" user_event: name: "用户事件" + flag_event: + name: "标记事件" delivery_status: title: "分发状态" inactive: "不活跃" @@ -2507,6 +2552,7 @@ zh_CN: common: "通用" desktop: "桌面" mobile: "移动" + settings: "设置" preview: "预览" is_default: "主题默认启用" user_selectable: "用户可选择主题" @@ -2535,6 +2581,8 @@ zh_CN: updating: "更新..." up_to_date: "主题已经是最新版本,上次检查:" add: "添加" + theme_settings: "主题设置" + no_settings: "这个主题内没有设置" commits_behind: other: "主题落后了 {{count}} 个变更!" scss: @@ -2558,6 +2606,9 @@ zh_CN: body_tag: text: "