diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 4eb8ad5f07..be7d476572 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -25,3 +25,6 @@ c4644c61d97c823b7dd940ffaf0967a104f4b58c # Migrate to app directory 7a2e8d3ead63c7d99e1069fc7823e933f931ba85 + +# DEV: Fix indentation for routes.rb +985900818ff985b04def6aa4c5d99c1aa6dbd45c diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b5a33d7a45..03f4e109c7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: - master pull_request: branches-ignore: - - 'tests-passed' + - "tests-passed" jobs: build: @@ -28,12 +28,12 @@ jobs: fail-fast: false matrix: - build_types: [ 'BACKEND', 'FRONTEND', 'LINT' ] - target: [ 'PLUGINS', 'CORE' ] - os: [ ubuntu-latest ] - ruby: [ '2.6' ] - postgres: [ '10' ] - redis: [ '4.x' ] + build_types: ["BACKEND", "FRONTEND", "LINT"] + target: ["PLUGINS", "CORE"] + os: [ubuntu-latest] + ruby: ["2.6"] + postgres: ["10"] + redis: ["4.x"] services: postgres: @@ -77,7 +77,6 @@ jobs: uses: actions/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - architecture: 'x64' - name: Setup bundler run: | @@ -145,6 +144,14 @@ jobs: yarn prettier -v yarn prettier --list-different "app/assets/stylesheets/**/*.scss" "app/assets/javascripts/**/*.js" "app/assets/javascripts/**/*.es6" "test/javascripts/**/*.es6" "plugins/**/*.scss" "plugins/**/*.es6" + - name: Core English locale + if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE' + run: bundle exec ruby script/i18n_lint.rb "config/**/locales/{client,server}.en.yml" + + - name: Plugin English locale + if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS' + run: bundle exec ruby script/i18n_lint.rb "plugins/**/locales/{client,server}.en.yml" + - name: Core RSpec if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'CORE' run: | @@ -167,5 +174,5 @@ jobs: - name: Plugin QUnit # Tests core plugins in TARGET=CORE, and all plugins in TARGET=PLUGINS if: env.BUILD_TYPE == 'FRONTEND' - run: bundle exec rake plugin:qunit + run: bundle exec rake plugin:qunit['*','1200000'] timeout-minutes: 30 diff --git a/Gemfile b/Gemfile index da983fa8c7..b708152130 100644 --- a/Gemfile +++ b/Gemfile @@ -112,6 +112,7 @@ gem 'oj' gem 'pg' gem 'mini_sql' gem 'pry-rails', require: false +gem 'pry-byebug', require: false gem 'r2', require: false gem 'rake' diff --git a/Gemfile.lock b/Gemfile.lock index 6bf999c7a3..2870d86e7b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,10 +1,9 @@ GIT remote: https://github.com/discourse/rails_failover - revision: 0e668eba86591c20aa7a43f47b0cd36d4eacaeb6 + revision: 66602aa73785851b81c506f0023d3c2a2e40de0a specs: rails_failover (0.4.0) activerecord (~> 6.0) - listen (~> 3.2) railties (~> 6.0) GEM @@ -94,7 +93,7 @@ GEM coderay (1.1.3) colored2 (3.1.2) concurrent-ruby (1.1.6) - connection_pool (2.2.2) + connection_pool (2.2.3) cose (1.0.0) cbor (~> 0.5.9) openssl-signature_algorithm (~> 0.4.0) @@ -115,7 +114,7 @@ GEM in_threads (~> 1.3) progress (~> 3.0, >= 3.0.1) docile (1.3.2) - email_reply_trimmer (0.1.12) + email_reply_trimmer (0.1.13) ember-data-source (3.0.2) ember-source (>= 2, < 3.0) ember-handlebars-template (0.8.0) @@ -156,7 +155,7 @@ GEM hkdf (0.3.0) htmlentities (4.3.4) http_accept_language (2.1.1) - i18n (1.8.2) + i18n (1.8.3) concurrent-ruby (~> 1.0) image_size (1.5.0) in_threads (1.5.4) @@ -192,7 +191,7 @@ GEM mini_mime (>= 0.1.1) maxminddb (0.1.22) memory_profiler (0.9.14) - message_bus (3.3.0) + message_bus (3.3.1) rack (>= 1.1.3) method_source (1.0.0) mini_mime (1.0.2) @@ -268,6 +267,9 @@ GEM pry (0.13.1) coderay (~> 1.1) method_source (~> 1.0) + pry-byebug (3.9.0) + byebug (~> 11.0) + pry (~> 0.13.0) pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.5) @@ -286,7 +288,7 @@ GEM nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - rails_multisite (2.1.2) + rails_multisite (2.3.0) activerecord (> 5.0, < 7) railties (> 5.0, < 7) railties (6.0.3.1) @@ -311,6 +313,7 @@ GEM redis (4.1.4) redis-namespace (1.7.0) redis (>= 3.0.4) + regexp_parser (1.7.1) request_store (1.5.0) rack (>= 1.4) rexml (3.2.4) @@ -350,10 +353,11 @@ GEM json-schema (~> 2.2) railties (>= 3.1, < 7.0) rtlit (0.0.5) - rubocop (0.84.0) + rubocop (0.85.1) parallel (~> 1.10) parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.7) rexml rubocop-ast (>= 0.0.3) ruby-progressbar (~> 1.7) @@ -515,6 +519,7 @@ DEPENDENCIES onebox parallel_tests pg + pry-byebug pry-rails puma r2 diff --git a/app/assets/javascripts/admin/components/admin-report.js b/app/assets/javascripts/admin/components/admin-report.js index b9ce9a6fdf..e64e02f3eb 100644 --- a/app/assets/javascripts/admin/components/admin-report.js +++ b/app/assets/javascripts/admin/components/admin-report.js @@ -9,8 +9,8 @@ import ReportLoader from "discourse/lib/reports-loader"; import { exportEntity } from "discourse/lib/export-csv"; import { outputExportResult } from "discourse/lib/export-result"; import Report, { SCHEMA_VERSION } from "admin/models/report"; -import ENV from "discourse-common/config/environment"; import { isPresent } from "@ember/utils"; +import { isTesting } from "discourse-common/config/environment"; const TABLE_OPTIONS = { perPage: 8, @@ -167,8 +167,8 @@ export default Component.extend({ let reportKey = "reports:"; reportKey += [ dataSourceName, - ENV.environment === "test" ? "start" : startDate.replace(/-/g, ""), - ENV.environment === "test" ? "end" : endDate.replace(/-/g, ""), + isTesting() ? "start" : startDate.replace(/-/g, ""), + isTesting() ? "end" : endDate.replace(/-/g, ""), "[:prev_period]", this.get("reportOptions.table.limit"), // Convert all filter values to strings to ensure unique serialization @@ -226,14 +226,18 @@ export default Component.extend({ @action exportCsv() { - const customFilters = this.get("filters.customFilters") || {}; - exportEntity("report", { + const args = { name: this.get("model.type"), start_date: this.startDate.toISOString(true).split("T")[0], - end_date: this.endDate.toISOString(true).split("T")[0], - category_id: customFilters.category, - group_id: customFilters.group - }).then(outputExportResult); + end_date: this.endDate.toISOString(true).split("T")[0] + }; + + const customFilters = this.get("filters.customFilters"); + if (customFilters) { + Object.assign(args, customFilters); + } + + exportEntity("report", args).then(outputExportResult); }, @action diff --git a/app/assets/javascripts/admin/components/resumable-upload.js b/app/assets/javascripts/admin/components/resumable-upload.js index ed95ea68be..97b6f19875 100644 --- a/app/assets/javascripts/admin/components/resumable-upload.js +++ b/app/assets/javascripts/admin/components/resumable-upload.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { later, schedule } from "@ember/runloop"; import Component from "@ember/component"; @@ -31,7 +32,7 @@ export default Component.extend({ @on("init") _initialize() { this.resumable = new Resumable({ - target: Discourse.getURL(this.target), + target: getURL(this.target), maxFiles: 1, // only 1 file at a time headers: { "X-CSRF-Token": document.querySelector("meta[name='csrf-token']") diff --git a/app/assets/javascripts/admin/components/simple-list.js b/app/assets/javascripts/admin/components/simple-list.js new file mode 100644 index 0000000000..3f43885d77 --- /dev/null +++ b/app/assets/javascripts/admin/components/simple-list.js @@ -0,0 +1,57 @@ +import { empty } from "@ember/object/computed"; +import Component from "@ember/component"; +import { action } from "@ember/object"; +import { on } from "discourse-common/utils/decorators"; + +export default Component.extend({ + classNameBindings: [":simple-list", ":value-list"], + inputEmpty: empty("newValue"), + inputDelimiter: null, + newValue: "", + collection: null, + values: null, + + @on("didReceiveAttrs") + _setupCollection() { + this.set("collection", this._splitValues(this.values, this.inputDelimiter)); + }, + + keyDown(event) { + if (event.which === 13) { + this.addValue(this.newValue); + return; + } + }, + + @action + changeValue(index, newValue) { + this.collection.replace(index, 1, [newValue]); + this.collection.arrayContentDidChange(index); + this._onChange(); + }, + + @action + addValue(newValue) { + if (this.inputEmpty) return; + + this.set("newValue", null); + this.collection.addObject(newValue); + this._onChange(); + }, + + @action + removeValue(value) { + this.collection.removeObject(value); + this._onChange(); + }, + + _onChange() { + this.attrs.onChange && this.attrs.onChange(this.collection); + }, + + _splitValues(values, delimiter) { + return values && values.length + ? values.split(delimiter || "\n").filter(Boolean) + : []; + } +}); diff --git a/app/assets/javascripts/admin/components/site-settings/simple-list.js b/app/assets/javascripts/admin/components/site-settings/simple-list.js new file mode 100644 index 0000000000..aab078bbe3 --- /dev/null +++ b/app/assets/javascripts/admin/components/site-settings/simple-list.js @@ -0,0 +1,11 @@ +import Component from "@ember/component"; +import { action } from "@ember/object"; + +export default Component.extend({ + inputDelimiter: "|", + + @action + onChange(value) { + this.set("value", value.join(this.inputDelimiter || "\n")); + } +}); diff --git a/app/assets/javascripts/admin/components/themes-list-item.js b/app/assets/javascripts/admin/components/themes-list-item.js index c292b80f99..56db74e7e8 100644 --- a/app/assets/javascripts/admin/components/themes-list-item.js +++ b/app/assets/javascripts/admin/components/themes-list-item.js @@ -4,7 +4,7 @@ import Component from "@ember/component"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; import { iconHTML } from "discourse-common/lib/icon-library"; import { escape } from "pretty-text/sanitizer"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; const MAX_COMPONENTS = 4; @@ -41,7 +41,7 @@ export default Component.extend({ animate(isInitial) { const $container = $(this.element); const $list = $(this.element.querySelector(".components-list")); - if ($list.length === 0 || ENV.environment === "test") { + if ($list.length === 0 || isTesting()) { return; } const duration = 300; diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js index 07a195b566..2030c1e613 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js @@ -8,6 +8,7 @@ import AdminDashboard from "admin/models/admin-dashboard"; import Report from "admin/models/report"; import PeriodComputationMixin from "admin/mixins/period-computation"; import { computed } from "@ember/object"; +import getURL from "discourse-common/lib/get-url"; function staticReport(reportType) { return computed("reports.[]", function() { @@ -20,7 +21,6 @@ export default Controller.extend(PeriodComputationMixin, { dashboardFetchedAt: null, exceptionController: inject("exception"), logSearchQueriesEnabled: setting("log_search_queries"), - basePath: Discourse.BaseUri, @discourseComputed("siteSettings.dashboard_general_tab_activity_metrics") activityMetrics(metrics) { @@ -107,7 +107,7 @@ export default Controller.extend(PeriodComputationMixin, { @discourseComputed trendingSearchDisabledLabel() { return I18n.t("admin.dashboard.reports.trending_search.disabled", { - basePath: Discourse.BaseUri + basePath: getURL("/") }); }, @@ -150,6 +150,6 @@ export default Controller.extend(PeriodComputationMixin, { }, _reportsForPeriodURL(period) { - return Discourse.getURL(`/admin?period=${period}`); + return getURL(`/admin?period=${period}`); } }); diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-moderation.js b/app/assets/javascripts/admin/controllers/admin-dashboard-moderation.js index 95f820b598..f37d8606af 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-moderation.js +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-moderation.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; import PeriodComputationMixin from "admin/mixins/period-computation"; @@ -45,6 +46,6 @@ export default Controller.extend(PeriodComputationMixin, { }, _reportsForPeriodURL(period) { - return Discourse.getURL(`/admin/dashboard/moderation?period=${period}`); + return getURL(`/admin/dashboard/moderation?period=${period}`); } }); diff --git a/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js b/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js index 031ad8ee8b..e6f20ee2f5 100644 --- a/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js +++ b/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js @@ -6,6 +6,7 @@ import Controller, { inject as controller } from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { extractDomainFromUrl } from "discourse/lib/utilities"; import EmberObject from "@ember/object"; +import { isAbsoluteURL } from "discourse-common/lib/get-url"; export default Controller.extend({ adminWebHooks: controller(), @@ -109,7 +110,7 @@ export default Controller.extend({ domain === "localhost" || domain.match(/192\.168\.\d+\.\d+/) || domain.match(/127\.\d+\.\d+\.\d+/) || - url.startsWith(Discourse.BaseUrl) + isAbsoluteURL(url) ) { return bootbox.confirm( I18n.t("admin.web_hooks.warn_local_payload_url"), diff --git a/app/assets/javascripts/admin/mixins/setting-component.js b/app/assets/javascripts/admin/mixins/setting-component.js index 83dcc31e65..699cecd32e 100644 --- a/app/assets/javascripts/admin/mixins/setting-component.js +++ b/app/assets/javascripts/admin/mixins/setting-component.js @@ -25,7 +25,8 @@ const CUSTOM_TYPES = [ "upload", "group_list", "tag_list", - "color" + "color", + "simple_list" ]; const AUTO_REFRESH_ON_SAVE = ["logo", "logo_small", "large_icon"]; diff --git a/app/assets/javascripts/admin/models/admin-user.js b/app/assets/javascripts/admin/models/admin-user.js index 9977fa8dd4..8dc7685cc1 100644 --- a/app/assets/javascripts/admin/models/admin-user.js +++ b/app/assets/javascripts/admin/models/admin-user.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { filter, or, gt, lt, not } from "@ember/object/computed"; @@ -43,7 +44,7 @@ const AdminUser = User.extend({ @discourseComputed bounceLink() { - return Discourse.getURL("/admin/email/bounced"); + return getURL("/admin/email/bounced"); }, canResetBounceScore: gt("bounce_score", 0), @@ -306,7 +307,7 @@ const AdminUser = User.extend({ type: "POST", data: { username_or_email: this.username } }) - .then(() => (document.location = Discourse.getURL("/"))) + .then(() => (document.location = getURL("/"))) .catch(e => { if (e.status === 404) { bootbox.alert(I18n.t("admin.impersonate.not_found")); @@ -395,11 +396,11 @@ const AdminUser = User.extend({ .then(function(data) { if (data.success) { if (data.username) { - document.location = Discourse.getURL( + document.location = getURL( `/admin/users/${user.get("id")}/${data.username}` ); } else { - document.location = Discourse.getURL("/admin/users/list/active"); + document.location = getURL("/admin/users/list/active"); } } else { bootbox.alert(I18n.t("admin.user.anonymize_failed")); @@ -456,7 +457,7 @@ const AdminUser = User.extend({ if (/^\/admin\/users\/list\//.test(location)) { document.location = location; } else { - document.location = Discourse.getURL("/admin/users/list/active"); + document.location = getURL("/admin/users/list/active"); } } else { bootbox.alert(I18n.t("admin.user.delete_failed")); diff --git a/app/assets/javascripts/admin/models/backup.js b/app/assets/javascripts/admin/models/backup.js index 45727a28b2..0b6f7122a4 100644 --- a/app/assets/javascripts/admin/models/backup.js +++ b/app/assets/javascripts/admin/models/backup.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { ajax } from "discourse/lib/ajax"; import { extractError } from "discourse/lib/ajax-error"; @@ -66,7 +67,7 @@ Backup.reopenClass({ bootbox.alert(result.message); } else { // redirect to homepage (session might be lost) - window.location = Discourse.getURL("/"); + window.location = getURL("/"); } }); } diff --git a/app/assets/javascripts/admin/models/email-log.js b/app/assets/javascripts/admin/models/email-log.js index c2eaaa26e6..1317df2943 100644 --- a/app/assets/javascripts/admin/models/email-log.js +++ b/app/assets/javascripts/admin/models/email-log.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import { ajax } from "discourse/lib/ajax"; import AdminUser from "admin/models/admin-user"; import EmberObject from "@ember/object"; @@ -13,7 +14,7 @@ EmailLog.reopenClass({ } if (attrs.post_url) { - attrs.post_url = Discourse.getURL(attrs.post_url); + attrs.post_url = getURL(attrs.post_url); } return this._super(attrs); diff --git a/app/assets/javascripts/admin/models/report.js b/app/assets/javascripts/admin/models/report.js index 2e0b448887..9d2f25f9a1 100644 --- a/app/assets/javascripts/admin/models/report.js +++ b/app/assets/javascripts/admin/models/report.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { makeArray } from "discourse-common/lib/helpers"; @@ -37,7 +38,7 @@ const Report = EmberObject.extend({ .locale("en") .format("YYYY-MM-DD"); - return Discourse.getURL( + return getURL( `/admin/reports/${type}?start_date=${start_date}&end_date=${end_date}` ); }, @@ -335,7 +336,7 @@ const Report = EmberObject.extend({ avatar_template: row[properties.avatar] }); - const href = Discourse.getURL(`/admin/users/${userId}/${username}`); + const href = getURL(`/admin/users/${userId}/${username}`); const avatarImg = renderAvatar(user, { imageSize: "tiny", @@ -356,7 +357,7 @@ const Report = EmberObject.extend({ const formatedValue = () => { const topicId = row[properties.id]; - const href = Discourse.getURL(`/t/-/${topicId}`); + const href = getURL(`/t/-/${topicId}`); return `${escapeExpression(topicTitle)}`; }; @@ -370,7 +371,7 @@ const Report = EmberObject.extend({ const postTitle = row[properties.truncated_raw]; const postNumber = row[properties.number]; const topicId = row[properties.topic_id]; - const href = Discourse.getURL(`/t/-/${topicId}/${postNumber}`); + const href = getURL(`/t/-/${topicId}/${postNumber}`); return { property: properties.title, @@ -434,7 +435,7 @@ const Report = EmberObject.extend({ _linkLabel(properties, row) { const property = properties[0]; - const value = Discourse.getURL(row[property]); + const value = getURL(row[property]); const formatedValue = (href, anchor) => { return `${escapeExpression( anchor diff --git a/app/assets/javascripts/admin/routes/admin-backups.js b/app/assets/javascripts/admin/routes/admin-backups.js index 3d517acbf1..aa7c88aba9 100644 --- a/app/assets/javascripts/admin/routes/admin-backups.js +++ b/app/assets/javascripts/admin/routes/admin-backups.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import EmberObject from "@ember/object"; import DiscourseRoute from "discourse/routes/discourse"; @@ -40,7 +41,7 @@ export default DiscourseRoute.extend({ ); if (log.operation === "restore") { // redirect to homepage when the restore is done (session might be lost) - window.location = Discourse.getURL("/"); + window.location = getURL("/"); } } else { this.controllerFor("adminBackupsLogs") diff --git a/app/assets/javascripts/admin/templates/components/simple-list.hbs b/app/assets/javascripts/admin/templates/components/simple-list.hbs new file mode 100644 index 0000000000..3e78f77b05 --- /dev/null +++ b/app/assets/javascripts/admin/templates/components/simple-list.hbs @@ -0,0 +1,40 @@ +{{#if collection}} + + {{#each collection as |value index|}} + + {{d-button + action=(action "removeValue") + actionParam=value + icon="times" + class="remove-value-btn btn-small" + }} + + {{input + title=value + value=value + class="value-input" + focus-out=(action "changeValue" index) + }} + + {{/each}} + +{{/if}} + + + {{input + type="text" + value=newValue + placeholderKey="admin.site_settings.simple_list.add_item" + class="add-value-input" + autocomplete="discourse" + autocorrect="off" + autocapitalize="off"}} + + {{d-button + action=(action "addValue") + actionParam=newValue + disabled=inputEmpty + icon="plus" + class="add-value-btn btn-small" + }} + diff --git a/app/assets/javascripts/admin/templates/components/site-settings/simple-list.hbs b/app/assets/javascripts/admin/templates/components/site-settings/simple-list.hbs new file mode 100644 index 0000000000..3eca57db83 --- /dev/null +++ b/app/assets/javascripts/admin/templates/components/site-settings/simple-list.hbs @@ -0,0 +1,3 @@ +{{simple-list values=value inputDelimiter=inputDelimiter onChange=(action "onChange")}} +{{setting-validation-message message=validationMessage}} +{{html-safe setting.description}} diff --git a/app/assets/javascripts/admin/templates/dashboard_general.hbs b/app/assets/javascripts/admin/templates/dashboard_general.hbs index 5566271a20..5d442f876b 100644 --- a/app/assets/javascripts/admin/templates/dashboard_general.hbs +++ b/app/assets/javascripts/admin/templates/dashboard_general.hbs @@ -147,7 +147,7 @@ filters=trendingSearchFilters isEnabled=logSearchQueriesEnabled disabledLabel=trendingSearchDisabledLabel}} - {{html-safe (i18n "admin.dashboard.reports.trending_search.more" basePath=basePath)}} + {{html-safe (i18n "admin.dashboard.reports.trending_search.more" basePath=(base-url))}} {{/if}} diff --git a/app/assets/javascripts/admin/templates/user-tl3-requirements.hbs b/app/assets/javascripts/admin/templates/user-tl3-requirements.hbs index de71c0bfb9..74738f2080 100644 --- a/app/assets/javascripts/admin/templates/user-tl3-requirements.hbs +++ b/app/assets/javascripts/admin/templates/user-tl3-requirements.hbs @@ -153,6 +153,7 @@ {{i18n "admin.user.tl3_requirements.locked_will_not_be_promoted"}} {{else}} {{d-icon "times"}} + {{i18n "admin.user.tl3_requirements.does_not_qualify"}} {{/if}} {{/if}} {{/if}} diff --git a/app/assets/javascripts/discourse-common/addon/config/environment.js b/app/assets/javascripts/discourse-common/addon/config/environment.js index 8d684bf5a4..b580231ee7 100644 --- a/app/assets/javascripts/discourse-common/addon/config/environment.js +++ b/app/assets/javascripts/discourse-common/addon/config/environment.js @@ -1,9 +1,23 @@ export const INPUT_DELAY = 250; -let environment = Ember.testing ? "test" : "development"; +let environment = "unknown"; -export function isTesting() { - return environment === "test"; +export function setEnvironment(e) { + if (isTesting()) { + environment = "testing"; + } else { + environment = e; + } } -export default { environment }; +export function isTesting() { + return Ember.testing; +} + +export function isDevelopment() { + return environment === "development"; +} + +export function isProduction() { + return environment === "production"; +} diff --git a/app/assets/javascripts/discourse-common/addon/helpers/get-url.js b/app/assets/javascripts/discourse-common/addon/helpers/get-url.js index e3847c4bde..f221c20c77 100644 --- a/app/assets/javascripts/discourse-common/addon/helpers/get-url.js +++ b/app/assets/javascripts/discourse-common/addon/helpers/get-url.js @@ -2,3 +2,4 @@ import { registerUnbound } from "discourse-common/lib/helpers"; import getUrl from "discourse-common/lib/get-url"; registerUnbound("get-url", value => getUrl(value)); +registerUnbound("base-url", () => getUrl("")); diff --git a/app/assets/javascripts/discourse-common/addon/lib/get-url.js b/app/assets/javascripts/discourse-common/addon/lib/get-url.js index 4a3a20d0d8..a74ea5ff64 100644 --- a/app/assets/javascripts/discourse-common/addon/lib/get-url.js +++ b/app/assets/javascripts/discourse-common/addon/lib/get-url.js @@ -1,9 +1,10 @@ -let baseUri; +let cdn, baseUrl, baseUri; +let S3BaseUrl, S3CDN; export default function getURL(url) { if (!url) return url; - if (!baseUri) { + if (baseUri === undefined) { baseUri = $('meta[name="discourse-base-uri"]').attr("content") || ""; } @@ -17,3 +18,42 @@ export default function getURL(url) { return baseUri + url; } + +export function getURLWithCDN(url) { + url = getURL(url); + // only relative urls + if (cdn && /^\/[^\/]/.test(url)) { + url = cdn + url; + } else if (S3CDN) { + url = url.replace(S3BaseUrl, S3CDN); + } + return url; +} + +export function getAbsoluteURL(path) { + return baseUrl + path; +} + +export function isAbsoluteURL(url) { + return url.startsWith(baseUrl); +} + +export function withoutPrefix(path) { + const rootURL = (!baseUri ? "/" : baseUri).replace(/\/$/, ""); + return path.replace(rootURL, ""); +} + +export function setPrefix(configBaseUri) { + baseUri = configBaseUri; +} + +export function setupURL(configCdn, configBaseUrl, configBaseUri) { + cdn = configCdn; + baseUrl = configBaseUrl; + baseUri = configBaseUri; +} + +export function setupS3CDN(configS3BaseUrl, configS3CDN) { + S3BaseUrl = configS3BaseUrl; + S3CDN = configS3CDN; +} diff --git a/app/assets/javascripts/discourse-common/addon/lib/icon-library.js b/app/assets/javascripts/discourse-common/addon/lib/icon-library.js index ef60571cec..8633701c1e 100644 --- a/app/assets/javascripts/discourse-common/addon/lib/icon-library.js +++ b/app/assets/javascripts/discourse-common/addon/lib/icon-library.js @@ -1,10 +1,13 @@ import I18n from "I18n"; import { h } from "virtual-dom"; import attributeHook from "discourse-common/lib/attribute-hook"; +import { isDevelopment } from "discourse-common/config/environment"; const SVG_NAMESPACE = "http://www.w3.org/2000/svg"; let _renderers = []; +let warnMissingIcons = true; + const REPLACEMENTS = { "d-tracking": "bell", "d-muted": "discourse-bell-slash", @@ -45,6 +48,14 @@ export function replaceIcon(source, destination) { REPLACEMENTS[source] = destination; } +export function disableMissingIconWarning() { + warnMissingIcons = false; +} + +export function enableMissingIconWarning() { + warnMissingIcons = false; +} + export function renderIcon(renderType, id, params) { for (let i = 0; i < _renderers.length; i++) { let renderer = _renderers[i]; @@ -105,8 +116,8 @@ function iconClasses(icon, params) { function warnIfMissing(id) { if ( typeof Discourse !== "undefined" && - Discourse.Environment === "development" && - !Discourse.disableMissingIconWarning && + isDevelopment() && + warnMissingIcons && Discourse.SvgIconList && Discourse.SvgIconList.indexOf(id) === -1 ) { diff --git a/app/assets/javascripts/discourse/app/adapters/topic-list.js b/app/assets/javascripts/discourse/app/adapters/topic-list.js index bd45b85e09..359d7ee05a 100644 --- a/app/assets/javascripts/discourse/app/adapters/topic-list.js +++ b/app/assets/javascripts/discourse/app/adapters/topic-list.js @@ -1,10 +1,11 @@ +import getURL from "discourse-common/lib/get-url"; import { ajax } from "discourse/lib/ajax"; import RestAdapter from "discourse/adapters/rest"; import PreloadStore from "discourse/lib/preload-store"; export function finderFor(filter, params) { return function() { - let url = Discourse.getURL("/") + filter + ".json"; + let url = getURL("/") + filter + ".json"; if (params) { const keys = Object.keys(params), diff --git a/app/assets/javascripts/discourse/app/app.js b/app/assets/javascripts/discourse/app/app.js index b484afcf52..06e5064e3e 100644 --- a/app/assets/javascripts/discourse/app/app.js +++ b/app/assets/javascripts/discourse/app/app.js @@ -4,6 +4,8 @@ import { computed } from "@ember/object"; import { buildResolver } from "discourse-common/resolver"; import { bind } from "@ember/runloop"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; +import { default as getURL, getURLWithCDN } from "discourse-common/lib/get-url"; +import deprecated from "discourse-common/lib/deprecated"; const _pluginCallbacks = []; @@ -42,26 +44,19 @@ const Discourse = Application.extend({ }, getURL(url) { - if (!url) return url; - - // if it's a non relative URL, return it. - if (url !== "/" && !/^\/[^\/]/.test(url)) return url; - - if (url[0] !== "/") url = "/" + url; - if (url.startsWith(this.BaseUri)) return url; - - return this.BaseUri + url; + deprecated( + "Import `getURL` from `discourse-common/lib/get-url` instead of `Discourse.getURL`", + { since: "2.5", dropFrom: "2.6" } + ); + return getURL(url); }, getURLWithCDN(url) { - url = this.getURL(url); - // only relative urls - if (this.CDN && /^\/[^\/]/.test(url)) { - url = this.CDN + url; - } else if (this.S3CDN) { - url = url.replace(this.S3BaseUrl, this.S3CDN); - } - return url; + deprecated( + "Import `getURLWithCDN` from `discourse-common/lib/get-url` instead of `Discourse.getURLWithCDN`", + { since: "2.5", dropFrom: "2.6" } + ); + return getURLWithCDN(url); }, Resolver: buildResolver("discourse"), diff --git a/app/assets/javascripts/discourse/app/components/cdn-img.js b/app/assets/javascripts/discourse/app/components/cdn-img.js index a5c7a2642a..e343eaea1f 100644 --- a/app/assets/javascripts/discourse/app/components/cdn-img.js +++ b/app/assets/javascripts/discourse/app/components/cdn-img.js @@ -1,3 +1,4 @@ +import { getURLWithCDN } from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; import { htmlSafe } from "@ember/template"; @@ -7,7 +8,7 @@ export default Component.extend({ @discourseComputed("src") cdnSrc(src) { - return Discourse.getURLWithCDN(src); + return getURLWithCDN(src); }, @discourseComputed("width", "height") diff --git a/app/assets/javascripts/discourse/app/components/composer-editor.js b/app/assets/javascripts/discourse/app/components/composer-editor.js index de6fa4344a..e33973cd44 100644 --- a/app/assets/javascripts/discourse/app/components/composer-editor.js +++ b/app/assets/javascripts/discourse/app/components/composer-editor.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { debounce, later, next, schedule, throttle } from "@ember/runloop"; import Component from "@ember/component"; @@ -44,7 +45,7 @@ import { cacheShortUploadUrl, resolveAllShortUrls } from "pretty-text/upload-short-url"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; const REBUILD_SCROLL_MAP_EVENTS = ["composer:resized", "composer:typed-reply"]; @@ -650,9 +651,7 @@ export default Component.extend({ const $element = $(this.element); $element.fileupload({ - url: Discourse.getURL( - `/uploads.json?client_id=${this.messageBus.clientId}` - ), + url: getURL(`/uploads.json?client_id=${this.messageBus.clientId}`), dataType: "json", pasteZone: $element }); @@ -847,7 +846,7 @@ export default Component.extend({ // need to wait a bit for the "slide down" transition of the composer later( () => this.appEvents.trigger("composer:closed"), - ENV.environment === "test" ? 0 : 400 + isTesting() ? 0 : 400 ); }); @@ -1001,7 +1000,7 @@ export default Component.extend({ ); // Short upload urls need resolution - resolveAllShortUrls(ajax, this.siteSettings, ".d-editor-preview-wrapper"); + resolveAllShortUrls(ajax, this.siteSettings, $preview[0]); if (this._enableAdvancedEditorPreviewSync()) { this._syncScroll( diff --git a/app/assets/javascripts/discourse/app/components/composer-title.js b/app/assets/javascripts/discourse/app/components/composer-title.js index 7ee2cb513a..ed037bd55d 100644 --- a/app/assets/javascripts/discourse/app/components/composer-title.js +++ b/app/assets/javascripts/discourse/app/components/composer-title.js @@ -6,7 +6,7 @@ import discourseComputed, { observes } from "discourse-common/utils/decorators"; import { load } from "pretty-text/oneboxer"; import { lookupCache } from "pretty-text/oneboxer-cache"; import { ajax } from "discourse/lib/ajax"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; import EmberObject from "@ember/object"; import putCursorAtEnd from "discourse/lib/put-cursor-at-end"; @@ -76,7 +76,7 @@ export default Component.extend({ return; } - if (ENV.environment === "test") { + if (isTesting()) { next(() => // not ideal but we don't want to run this in current // runloop to avoid an error in console diff --git a/app/assets/javascripts/discourse/app/components/cook-text.js b/app/assets/javascripts/discourse/app/components/cook-text.js index f3ad48f549..234d0906d6 100644 --- a/app/assets/javascripts/discourse/app/components/cook-text.js +++ b/app/assets/javascripts/discourse/app/components/cook-text.js @@ -16,7 +16,7 @@ const CookText = Component.extend({ next(() => window .requireModule("pretty-text/upload-short-url") - .resolveAllShortUrls(ajax, this.siteSettings) + .resolveAllShortUrls(ajax, this.siteSettings, this.element) ); }); } diff --git a/app/assets/javascripts/discourse/app/components/d-editor.js b/app/assets/javascripts/discourse/app/components/d-editor.js index 184b7f93a6..f979d7cc72 100644 --- a/app/assets/javascripts/discourse/app/components/d-editor.js +++ b/app/assets/javascripts/discourse/app/components/d-editor.js @@ -9,7 +9,7 @@ import discourseComputed, { } from "discourse-common/utils/decorators"; import { categoryHashtagTriggerRule } from "discourse/lib/category-hashtags"; import { search as searchCategoryTag } from "discourse/lib/category-tag-search"; -import { cookAsync } from "discourse/lib/text"; +import { generateCookFunction } from "discourse/lib/text"; import { getRegister } from "discourse-common/lib/get-owner"; import { findRawTemplate } from "discourse-common/lib/raw-templates"; import { siteDir } from "discourse/lib/text-direction"; @@ -28,7 +28,7 @@ import { emojiSearch, isSkinTonableEmoji } from "pretty-text/emoji"; import { emojiUrlFor } from "discourse/lib/text"; import showModal from "discourse/lib/show-modal"; import { Promise } from "rsvp"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; // Our head can be a static string or a function that returns a string // based on input (like for numbered lists). @@ -344,18 +344,32 @@ export default Component.extend({ return toolbar; }, + cachedCookAsync(text) { + if (this._cachedCookFunction) { + return Promise.resolve(this._cachedCookFunction(text)); + } + + const markdownOptions = this.markdownOptions || {}; + return generateCookFunction(markdownOptions).then(cook => { + this._cachedCookFunction = cook; + return cook(text); + }); + }, + _updatePreview() { if (this._state !== "inDOM") { return; } const value = this.value; - const markdownOptions = this.markdownOptions || {}; - cookAsync(value, markdownOptions).then(cooked => { + this.cachedCookAsync(value).then(cooked => { if (this.isDestroyed) { return; } + + if (this.preview === cooked) return; + this.set("preview", cooked); schedule("afterRender", () => { if (this._state !== "inDOM") { @@ -378,7 +392,7 @@ export default Component.extend({ } // Debouncing in test mode is complicated - if (ENV.environment === "test") { + if (isTesting()) { this._updatePreview(); } else { debounce(this, this._updatePreview, 30); @@ -425,7 +439,7 @@ export default Component.extend({ return false; } - const matches = /(?:^|[^a-z])(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gi.exec( + const matches = /(?:^|[>.,\/#!$%^&*;:{}=\-_`~()])(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gi.exec( text.substring(0, cp) ); diff --git a/app/assets/javascripts/discourse/app/components/discourse-tag-bound.js b/app/assets/javascripts/discourse/app/components/discourse-tag-bound.js index 13c8798631..becd4a1fa6 100644 --- a/app/assets/javascripts/discourse/app/components/discourse-tag-bound.js +++ b/app/assets/javascripts/discourse/app/components/discourse-tag-bound.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; @@ -13,6 +14,6 @@ export default Component.extend({ @discourseComputed("tagRecord.id") href(tagRecordId) { - return Discourse.getURL("/tag/" + tagRecordId); + return getURL("/tag/" + tagRecordId); } }); diff --git a/app/assets/javascripts/discourse/app/components/edit-category-general.js b/app/assets/javascripts/discourse/app/components/edit-category-general.js index a2a477f6a1..931e8923fb 100644 --- a/app/assets/javascripts/discourse/app/components/edit-category-general.js +++ b/app/assets/javascripts/discourse/app/components/edit-category-general.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { not } from "@ember/object/computed"; @@ -27,10 +28,10 @@ export default buildCategoryPanel("general", { }, canSelectParentCategory: not("category.isUncategorizedCategory"), - uncategorizedSiteSettingLink: Discourse.getURL( + uncategorizedSiteSettingLink: getURL( "/admin/site_settings/category/all_results?filter=allow_uncategorized_topics" ), - customizeTextContentLink: Discourse.getURL( + customizeTextContentLink: getURL( "/admin/customize/site_texts?q=uncategorized" ), diff --git a/app/assets/javascripts/discourse/app/components/edit-category-settings.js b/app/assets/javascripts/discourse/app/components/edit-category-settings.js index 5844e45d0c..5dc44ee02b 100644 --- a/app/assets/javascripts/discourse/app/components/edit-category-settings.js +++ b/app/assets/javascripts/discourse/app/components/edit-category-settings.js @@ -68,6 +68,13 @@ export default buildCategoryPanel("settings", { ); }, + @discourseComputed + availableListFilters() { + return ["all", "none"].map(p => { + return { name: I18n.t(`category.list_filters.${p}`), value: p }; + }); + }, + @discourseComputed searchPrioritiesOptions() { const options = []; @@ -101,11 +108,18 @@ export default buildCategoryPanel("settings", { .sort((a, b) => a.name.localeCompare(b.name)); }, + @discourseComputed("category.sort_ascending") + sortAscendingOption(sortAscending) { + if (sortAscending === "false") return false; + if (sortAscending === "true") return true; + return sortAscending; + }, + @discourseComputed sortAscendingOptions() { return [ - { name: I18n.t("category.sort_ascending"), value: "true" }, - { name: I18n.t("category.sort_descending"), value: "false" } + { name: I18n.t("category.sort_ascending"), value: true }, + { name: I18n.t("category.sort_descending"), value: false } ]; } }); diff --git a/app/assets/javascripts/discourse/app/components/email-dropdown.js b/app/assets/javascripts/discourse/app/components/email-dropdown.js new file mode 100644 index 0000000000..1a4046b240 --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/email-dropdown.js @@ -0,0 +1,63 @@ +import { action, computed } from "@ember/object"; +import { inject as service } from "@ember/service"; +import I18n from "I18n"; +import DropdownSelectBoxComponent from "select-kit/components/dropdown-select-box"; + +export default DropdownSelectBoxComponent.extend({ + router: service(), + + classNames: ["email-dropdown"], + + selectKitOptions: { + icon: "wrench", + showFullTitle: false + }, + + content: computed("email", function() { + const content = []; + + if (this.email.primary) { + content.push({ + id: "updateEmail", + icon: "pencil-alt", + name: I18n.t("user.email.update_email"), + description: "" + }); + } + + if (!this.email.primary && this.email.confirmed) { + content.push({ + id: "setPrimaryEmail", + icon: "star", + name: I18n.t("user.email.set_primary"), + description: "" + }); + } + + if (!this.email.primary) { + content.push({ + id: "destroyEmail", + icon: "times", + name: I18n.t("user.email.destroy"), + description: "" + }); + } + + return content; + }), + + @action + onChange(id) { + switch (id) { + case "updateEmail": + this.router.transitionTo("preferences.email"); + break; + case "setPrimaryEmail": + this.setPrimaryEmail(this.email.email); + break; + case "destroyEmail": + this.destroyEmail(this.email.email); + break; + } + } +}); diff --git a/app/assets/javascripts/discourse/app/components/emoji-picker.js b/app/assets/javascripts/discourse/app/components/emoji-picker.js index a77b564e59..3acf181622 100644 --- a/app/assets/javascripts/discourse/app/components/emoji-picker.js +++ b/app/assets/javascripts/discourse/app/components/emoji-picker.js @@ -10,7 +10,7 @@ import { emojiSearch } from "pretty-text/emoji"; import { safariHacksDisabled } from "discourse/lib/utilities"; -import ENV, { INPUT_DELAY } from "discourse-common/config/environment"; +import { isTesting, INPUT_DELAY } from "discourse-common/config/environment"; const PER_ROW = 11; function customEmojis() { @@ -525,7 +525,7 @@ export default Component.extend({ this.$picker.css(_.merge(attributes, options)); }; - if (ENV.environment === "test" || !this.automaticPositioning) { + if (isTesting() || !this.automaticPositioning) { desktopPositioning(); return; } diff --git a/app/assets/javascripts/discourse/app/components/emoji-uploader.js b/app/assets/javascripts/discourse/app/components/emoji-uploader.js index 9693811c15..0be91fec74 100644 --- a/app/assets/javascripts/discourse/app/components/emoji-uploader.js +++ b/app/assets/javascripts/discourse/app/components/emoji-uploader.js @@ -1,4 +1,4 @@ -import { notEmpty, not } from "@ember/object/computed"; +import { notEmpty } from "@ember/object/computed"; import { action } from "@ember/object"; import Component from "@ember/component"; import discourseComputed from "discourse-common/utils/decorators"; @@ -11,7 +11,6 @@ export default Component.extend(UploadMixin, { uploadUrl: "/admin/customize/emojis", hasName: notEmpty("name"), hasGroup: notEmpty("group"), - addDisabled: not("hasName"), group: "default", emojiGroups: null, newEmojiGroups: null, @@ -23,6 +22,11 @@ export default Component.extend(UploadMixin, { this.set("newEmojiGroups", this.emojiGroups); }, + @discourseComputed("hasName", "uploading") + addDisabled() { + return !this.hasName || this.uploading; + }, + uploadOptions() { return { sequentialUploads: true }; }, diff --git a/app/assets/javascripts/discourse/app/components/flag-action-type.js b/app/assets/javascripts/discourse/app/components/flag-action-type.js index 93de11b8fb..50f041d9b2 100644 --- a/app/assets/javascripts/discourse/app/components/flag-action-type.js +++ b/app/assets/javascripts/discourse/app/components/flag-action-type.js @@ -20,7 +20,7 @@ export default Component.extend({ ) formattedName(name, nameKey, isCustomFlag, username) { if (isCustomFlag) { - return name.replace("{{username}}", username); + return name.replace(/{{username}}|%{username}/, username); } else { return I18n.t("flagging.formatted_name." + nameKey); } diff --git a/app/assets/javascripts/discourse/app/components/global-notice.js b/app/assets/javascripts/discourse/app/components/global-notice.js index 15eb1bf376..ced8c86bb2 100644 --- a/app/assets/javascripts/discourse/app/components/global-notice.js +++ b/app/assets/javascripts/discourse/app/components/global-notice.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { bind, cancel } from "@ember/runloop"; import Component from "@ember/component"; @@ -105,7 +106,7 @@ export default Component.extend({ if (this.site.wizard_required) { const requiredText = I18n.t("wizard_required", { - url: Discourse.getURL("/wizard") + url: getURL("/wizard") }); notices.push(Notice.create({ text: requiredText, id: "alert-wizard" })); } diff --git a/app/assets/javascripts/discourse/app/components/google-search.js b/app/assets/javascripts/discourse/app/components/google-search.js index 43db648e81..0054f2898b 100644 --- a/app/assets/javascripts/discourse/app/components/google-search.js +++ b/app/assets/javascripts/discourse/app/components/google-search.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; @@ -10,6 +11,6 @@ export default Component.extend({ @discourseComputed siteUrl() { - return `${location.protocol}//${location.host}${Discourse.getURL("/")}`; + return `${location.protocol}//${location.host}${getURL("/")}`; } }); diff --git a/app/assets/javascripts/discourse/app/components/group-flair-inputs.js b/app/assets/javascripts/discourse/app/components/group-flair-inputs.js index b5ecb07bfc..0e264cdad3 100644 --- a/app/assets/javascripts/discourse/app/components/group-flair-inputs.js +++ b/app/assets/javascripts/discourse/app/components/group-flair-inputs.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { debounce } from "@ember/runloop"; @@ -14,7 +15,7 @@ export default Component.extend({ @discourseComputed demoAvatarUrl() { - return Discourse.getURL("/images/avatar.png"); + return getURL("/images/avatar.png"); }, @discourseComputed("model.flair_type") @@ -105,7 +106,7 @@ export default Component.extend({ @action setFlairImage(upload) { this.model.setProperties({ - flair_url: Discourse.getURL(upload.url), + flair_url: getURL(upload.url), flair_upload_id: upload.id }); }, diff --git a/app/assets/javascripts/discourse/app/components/group-post.js b/app/assets/javascripts/discourse/app/components/group-post.js index 51bb53f0ea..cdbd44ba38 100644 --- a/app/assets/javascripts/discourse/app/components/group-post.js +++ b/app/assets/javascripts/discourse/app/components/group-post.js @@ -1,9 +1,10 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; export default Component.extend({ @discourseComputed("post.url") postUrl(url) { - return Discourse.getURL(url); + return getURL(url); } }); diff --git a/app/assets/javascripts/discourse/app/components/image-uploader.js b/app/assets/javascripts/discourse/app/components/image-uploader.js index 6db47602ad..48a8855889 100644 --- a/app/assets/javascripts/discourse/app/components/image-uploader.js +++ b/app/assets/javascripts/discourse/app/components/image-uploader.js @@ -1,3 +1,4 @@ +import { getURLWithCDN } from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { next } from "@ember/runloop"; @@ -43,7 +44,7 @@ export default Component.extend(UploadMixin, { return "".htmlSafe(); } - return Discourse.getURLWithCDN(url); + return getURLWithCDN(url); }, @discourseComputed("imageCDNURL") diff --git a/app/assets/javascripts/discourse/app/components/invite-link-panel.js b/app/assets/javascripts/discourse/app/components/invite-link-panel.js new file mode 100644 index 0000000000..e2691e36fa --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/invite-link-panel.js @@ -0,0 +1,98 @@ +import I18n from "I18n"; +import Component from "@ember/component"; +import Group from "discourse/models/group"; +import { readOnly } from "@ember/object/computed"; +import { action } from "@ember/object"; +import discourseComputed from "discourse-common/utils/decorators"; +import Invite from "discourse/models/invite"; + +export default Component.extend({ + inviteModel: readOnly("panel.model.inviteModel"), + userInvitedShow: readOnly("panel.model.userInvitedShow"), + isStaff: readOnly("currentUser.staff"), + maxRedemptionAllowed: 5, + inviteExpiresAt: moment() + .add(1, "month") + .format("YYYY-MM-DD"), + + willDestroyElement() { + this._super(...arguments); + + this.reset(); + }, + + @discourseComputed("isStaff", "inviteModel.saving", "maxRedemptionAllowed") + disabled(isStaff, saving, canInviteTo, maxRedemptionAllowed) { + if (saving) return true; + if (!isStaff) return true; + if (maxRedemptionAllowed < 2) return true; + + return false; + }, + + groupFinder(term) { + return Group.findAll({ term, ignore_automatic: true }); + }, + + errorMessage: I18n.t("user.invited.invite_link.error"), + + reset() { + this.set("maxRedemptionAllowed", 5); + + this.inviteModel.setProperties({ + groupNames: null, + error: false, + saving: false, + finished: false, + inviteLink: null + }); + }, + + @action + generateMultipleUseInviteLink() { + if (this.disabled) { + return; + } + + const groupNames = this.get("inviteModel.groupNames"); + const maxRedemptionAllowed = this.maxRedemptionAllowed; + const inviteExpiresAt = this.inviteExpiresAt; + const userInvitedController = this.userInvitedShow; + const model = this.inviteModel; + model.setProperties({ saving: true, error: false }); + + return model + .generateMultipleUseInviteLink( + groupNames, + maxRedemptionAllowed, + inviteExpiresAt + ) + .then(result => { + model.setProperties({ + saving: false, + finished: true, + inviteLink: result + }); + + if (userInvitedController) { + Invite.findInvitedBy( + this.currentUser, + userInvitedController.filter + ).then(inviteModel => { + userInvitedController.setProperties({ + model: inviteModel, + totalInvites: inviteModel.invites.length + }); + }); + } + }) + .catch(e => { + if (e.jqXHR.responseJSON && e.jqXHR.responseJSON.errors) { + this.set("errorMessage", e.jqXHR.responseJSON.errors[0]); + } else { + this.set("errorMessage", I18n.t("user.invited.invite_link.error")); + } + model.setProperties({ saving: false, error: true }); + }); + } +}); diff --git a/app/assets/javascripts/discourse/app/components/related-messages.js b/app/assets/javascripts/discourse/app/components/related-messages.js index 1e1457db7d..6381b3f9b8 100644 --- a/app/assets/javascripts/discourse/app/components/related-messages.js +++ b/app/assets/javascripts/discourse/app/components/related-messages.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; @@ -23,7 +24,7 @@ export default Component.extend({ @discourseComputed searchLink() { - return Discourse.getURL( + return getURL( `/search?expanded=true&q=%40${this.targetUser.username}%20in%3Apersonal-direct` ); }, diff --git a/app/assets/javascripts/discourse/app/components/reviewable-score.js b/app/assets/javascripts/discourse/app/components/reviewable-score.js index ee36959c61..d9b18492cf 100644 --- a/app/assets/javascripts/discourse/app/components/reviewable-score.js +++ b/app/assets/javascripts/discourse/app/components/reviewable-score.js @@ -10,7 +10,10 @@ export default Component.extend({ @discourseComputed("rs.score_type.title", "reviewable.target_created_by") title(title, targetCreatedBy) { if (title && targetCreatedBy) { - return title.replace("{{username}}", targetCreatedBy.username); + return title.replace( + /{{username}}|%{username}/, + targetCreatedBy.username + ); } return title; diff --git a/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js b/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js index cb9b3dac27..399e2a7e63 100644 --- a/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js +++ b/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js @@ -333,6 +333,13 @@ export default MountWidget.extend({ }); this.appEvents.on("post-stream:refresh", this, "_refresh"); + + // restore scroll position on browsers with aggressive BFCaches (like Safari) + window.onpageshow = function(event) { + if (event.persisted) { + DiscourseURL.routeTo(this.location.pathname); + } + }; }, willDestroyElement() { diff --git a/app/assets/javascripts/discourse/app/components/suggested-topics.js b/app/assets/javascripts/discourse/app/components/suggested-topics.js index e5c5a40f15..38ebaa1a5a 100644 --- a/app/assets/javascripts/discourse/app/components/suggested-topics.js +++ b/app/assets/javascripts/discourse/app/components/suggested-topics.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { computed, get } from "@ember/object"; @@ -25,7 +26,7 @@ export default Component.extend({ } const opts = { - latestLink: `${I18n.t( + latestLink: `${I18n.t( "topic.view_latest_topics" )}` }; @@ -43,7 +44,7 @@ export default Component.extend({ } else { opts.catLink = '' + I18n.t("topic.browse_all_categories") + ""; diff --git a/app/assets/javascripts/discourse/app/components/topic-timer-info.js b/app/assets/javascripts/discourse/app/components/topic-timer-info.js index 6bbde2a217..953c356590 100644 --- a/app/assets/javascripts/discourse/app/components/topic-timer-info.js +++ b/app/assets/javascripts/discourse/app/components/topic-timer-info.js @@ -8,7 +8,7 @@ import { REMINDER_TYPE, DELETE_REPLIES_TYPE } from "discourse/controllers/edit-topic-timer"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; export default Component.extend({ classNames: ["topic-status-info"], @@ -92,7 +92,7 @@ export default Component.extend({ }); // TODO Sam: concerned this can cause a heavy rerender loop - if (ENV.environment !== "test") { + if (!isTesting()) { this._delayedRerender = later(() => { this.renderTopicTimer(); }, rerenderDelay); diff --git a/app/assets/javascripts/discourse/app/components/user-card-contents.js b/app/assets/javascripts/discourse/app/components/user-card-contents.js index ee19f26d82..220cadc923 100644 --- a/app/assets/javascripts/discourse/app/components/user-card-contents.js +++ b/app/assets/javascripts/discourse/app/components/user-card-contents.js @@ -1,3 +1,4 @@ +import { getURLWithCDN } from "discourse-common/lib/get-url"; import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { alias, gte, and, gt, not, or } from "@ember/object/computed"; @@ -153,7 +154,7 @@ export default Component.extend(CardContentsBase, CanCheckEmails, CleansUp, { } const url = this.get("user.card_background_upload_url"); - const bg = isEmpty(url) ? "" : `url(${Discourse.getURLWithCDN(url)})`; + const bg = isEmpty(url) ? "" : `url(${getURLWithCDN(url)})`; thisElem.style.backgroundImage = bg; }, diff --git a/app/assets/javascripts/discourse/app/controllers/bookmark.js b/app/assets/javascripts/discourse/app/controllers/bookmark.js index aa731cb62d..05a4c26b53 100644 --- a/app/assets/javascripts/discourse/app/controllers/bookmark.js +++ b/app/assets/javascripts/discourse/app/controllers/bookmark.js @@ -270,11 +270,6 @@ export default Controller.extend(ModalFunctionality, { return this.nextMonth().format(I18n.t("dates.long_no_year")); }, - @discourseComputed() - basePath() { - return Discourse.BaseUri; - }, - @discourseComputed("userTimezone") userHasTimezoneSet(userTimezone) { return !_.isEmpty(userTimezone); diff --git a/app/assets/javascripts/discourse/app/controllers/composer.js b/app/assets/javascripts/discourse/app/controllers/composer.js index d030c88c3a..3ca2b70f36 100644 --- a/app/assets/javascripts/discourse/app/controllers/composer.js +++ b/app/assets/javascripts/discourse/app/controllers/composer.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { and, or, alias, reads } from "@ember/object/computed"; @@ -23,7 +24,7 @@ import { emojiUnescape } from "discourse/lib/text"; import { shortDate } from "discourse/lib/formatter"; import { SAVE_LABELS, SAVE_ICONS } from "discourse/models/composer"; import { Promise } from "rsvp"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; import EmberObject, { computed, action } from "@ember/object"; import deprecated from "discourse-common/lib/deprecated"; @@ -71,7 +72,7 @@ function loadDraft(store, opts) { const _popupMenuOptionsCallbacks = []; -let _checkDraftPopup = ENV.environment !== "test"; +let _checkDraftPopup = !isTesting(); export function toggleCheckDraftPopup(enabled) { _checkDraftPopup = enabled; @@ -561,7 +562,7 @@ export default Controller.extend({ ) { groups.forEach(group => { let body; - const groupLink = Discourse.getURL(`/g/${group.name}/members`); + const groupLink = getURL(`/g/${group.name}/members`); if (group.max_mentions < group.user_count) { body = I18n.t("composer.group_mentioned_limit", { @@ -1109,7 +1110,7 @@ export default Controller.extend({ if (model.draftSaving) { // in test debounce is Ember.run, this will cause // an infinite loop - if (ENV.environment !== "test") { + if (!isTesting()) { this._saveDraftDebounce = debounce(this, this._saveDraft, 2000); } } else { @@ -1157,6 +1158,7 @@ export default Controller.extend({ const tagsArray = tags || []; if ( this.site.can_tag_topics && + !this.currentUser.staff && category && category.minimum_required_tags > tagsArray.length ) { diff --git a/app/assets/javascripts/discourse/app/controllers/create-account.js b/app/assets/javascripts/discourse/app/controllers/create-account.js index 75ec7b2a66..dc8ee4dbcf 100644 --- a/app/assets/javascripts/discourse/app/controllers/create-account.js +++ b/app/assets/javascripts/discourse/app/controllers/create-account.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { A } from "@ember/array"; import { isEmpty } from "@ember/utils"; @@ -86,10 +87,9 @@ export default Controller.extend( @discourseComputed disclaimerHtml() { return I18n.t("create_account.disclaimer", { - tos_link: this.get("siteSettings.tos_url") || Discourse.getURL("/tos"), + tos_link: this.get("siteSettings.tos_url") || getURL("/tos"), privacy_link: - this.get("siteSettings.privacy_policy_url") || - Discourse.getURL("/privacy") + this.get("siteSettings.privacy_policy_url") || getURL("/privacy") }); }, diff --git a/app/assets/javascripts/discourse/app/controllers/email-login.js b/app/assets/javascripts/discourse/app/controllers/email-login.js index 4000618587..6802271fd9 100644 --- a/app/assets/javascripts/discourse/app/controllers/email-login.js +++ b/app/assets/javascripts/discourse/app/controllers/email-login.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; import { SECOND_FACTOR_METHODS } from "discourse/models/user"; @@ -7,7 +8,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; import { getWebauthnCredential } from "discourse/lib/webauthn"; export default Controller.extend({ - lockImageUrl: Discourse.getURL("/images/lock.svg"), + lockImageUrl: getURL("/images/lock.svg"), @discourseComputed("model") secondFactorRequired(model) { diff --git a/app/assets/javascripts/discourse/app/controllers/forgot-password.js b/app/assets/javascripts/discourse/app/controllers/forgot-password.js index 9821947e3b..334367a370 100644 --- a/app/assets/javascripts/discourse/app/controllers/forgot-password.js +++ b/app/assets/javascripts/discourse/app/controllers/forgot-password.js @@ -6,6 +6,7 @@ import { ajax } from "discourse/lib/ajax"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import { escapeExpression } from "discourse/lib/utilities"; import { extractError } from "discourse/lib/ajax-error"; +import getURL from "discourse-common/lib/get-url"; export default Controller.extend(ModalFunctionality, { offerHelp: null, @@ -30,7 +31,7 @@ export default Controller.extend(ModalFunctionality, { help() { this.setProperties({ offerHelp: I18n.t("forgot_password.help", { - basePath: Discourse.BaseUri + basePath: getURL("/") }), helpSeen: true }); diff --git a/app/assets/javascripts/discourse/app/controllers/invites-show.js b/app/assets/javascripts/discourse/app/controllers/invites-show.js index b421b77058..a38ec6e1a9 100644 --- a/app/assets/javascripts/discourse/app/controllers/invites-show.js +++ b/app/assets/javascripts/discourse/app/controllers/invites-show.js @@ -1,16 +1,18 @@ import I18n from "I18n"; import { isEmpty } from "@ember/utils"; -import { alias, notEmpty } from "@ember/object/computed"; +import { alias, notEmpty, or, readOnly } from "@ember/object/computed"; import Controller from "@ember/controller"; import discourseComputed from "discourse-common/utils/decorators"; import getUrl from "discourse-common/lib/get-url"; import DiscourseURL from "discourse/lib/url"; import { ajax } from "discourse/lib/ajax"; +import { emailValid } from "discourse/lib/utilities"; import PasswordValidation from "discourse/mixins/password-validation"; import UsernameValidation from "discourse/mixins/username-validation"; import NameValidation from "discourse/mixins/name-validation"; import UserFieldsValidation from "discourse/mixins/user-fields-validation"; import { findAll as findLoginMethods } from "discourse/models/login-method"; +import EmberObject from "@ember/object"; export default Controller.extend( PasswordValidation, @@ -18,7 +20,7 @@ export default Controller.extend( NameValidation, UserFieldsValidation, { - invitedBy: alias("model.invited_by"), + invitedBy: readOnly("model.invited_by"), email: alias("model.email"), accountUsername: alias("model.username"), passwordRequired: notEmpty("accountPassword"), @@ -26,6 +28,21 @@ export default Controller.extend( errorMessage: null, userFields: null, inviteImageUrl: getUrl("/images/envelope.svg"), + isInviteLink: readOnly("model.is_invite_link"), + submitDisabled: or( + "emailValidation.failed", + "usernameValidation.failed", + "passwordValidation.failed", + "nameValidation.failed", + "userFieldsValidation.failed" + ), + rejectedEmails: null, + + init() { + this._super(...arguments); + + this.rejectedEmails = []; + }, @discourseComputed welcomeTitle() { @@ -44,21 +61,6 @@ export default Controller.extend( return findLoginMethods().length > 0; }, - @discourseComputed( - "usernameValidation.failed", - "passwordValidation.failed", - "nameValidation.failed", - "userFieldsValidation.failed" - ) - submitDisabled( - usernameFailed, - passwordFailed, - nameFailed, - userFieldsFailed - ) { - return usernameFailed || passwordFailed || nameFailed || userFieldsFailed; - }, - @discourseComputed fullnameRequired() { return ( @@ -66,6 +68,35 @@ export default Controller.extend( ); }, + @discourseComputed("email", "rejectedEmails.[]") + emailValidation(email, rejectedEmails) { + // If blank, fail without a reason + if (isEmpty(email)) { + return EmberObject.create({ + failed: true + }); + } + + if (rejectedEmails.includes(email)) { + return EmberObject.create({ + failed: true, + reason: I18n.t("user.email.invalid") + }); + } + + if (emailValid(email)) { + return EmberObject.create({ + ok: true, + reason: I18n.t("user.email.ok") + }); + } + + return EmberObject.create({ + failed: true, + reason: I18n.t("user.email.invalid") + }); + }, + actions: { submit() { const userFields = this.userFields; @@ -80,6 +111,7 @@ export default Controller.extend( url: `/invites/show/${this.get("model.token")}.json`, type: "PUT", data: { + email: this.email, username: this.accountUsername, name: this.accountName, password: this.accountPassword, @@ -97,6 +129,14 @@ export default Controller.extend( DiscourseURL.redirectTo(result.redirect_to); } } else { + if ( + result.errors && + result.errors.email && + result.errors.email.length > 0 && + result.values + ) { + this.rejectedEmails.pushObject(result.values.email); + } if ( result.errors && result.errors.password && diff --git a/app/assets/javascripts/discourse/app/controllers/login.js b/app/assets/javascripts/discourse/app/controllers/login.js index 4bc124b060..9edefd68ec 100644 --- a/app/assets/javascripts/discourse/app/controllers/login.js +++ b/app/assets/javascripts/discourse/app/controllers/login.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; @@ -372,8 +373,8 @@ export default Controller.extend(ModalFunctionality, { // redirect client to the original URL $.removeCookie("destination_url"); window.location.href = destinationUrl; - } else if (window.location.pathname === Discourse.getURL("/login")) { - window.location = Discourse.getURL("/"); + } else if (window.location.pathname === getURL("/login")) { + window.location = getURL("/"); } else { window.location.reload(); } diff --git a/app/assets/javascripts/discourse/app/controllers/password-reset.js b/app/assets/javascripts/discourse/app/controllers/password-reset.js index 764396c21e..e14de1c1bd 100644 --- a/app/assets/javascripts/discourse/app/controllers/password-reset.js +++ b/app/assets/javascripts/discourse/app/controllers/password-reset.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { alias, or, readOnly } from "@ember/object/computed"; import Controller from "@ember/controller"; @@ -41,10 +42,10 @@ export default Controller.extend(PasswordValidation, { @discourseComputed("redirectTo") redirectHref(redirectTo) { - return Discourse.getURL(redirectTo || "/"); + return getURL(redirectTo || "/"); }, - lockImageUrl: Discourse.getURL("/images/lock.svg"), + lockImageUrl: getURL("/images/lock.svg"), actions: { submit() { diff --git a/app/assets/javascripts/discourse/app/controllers/preferences/account.js b/app/assets/javascripts/discourse/app/controllers/preferences/account.js index 584440ed0c..6eecf3e7e9 100644 --- a/app/assets/javascripts/discourse/app/controllers/preferences/account.js +++ b/app/assets/javascripts/discourse/app/controllers/preferences/account.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { not, or, gt } from "@ember/object/computed"; import Controller from "@ember/controller"; @@ -11,6 +12,7 @@ import { findAll } from "discourse/models/login-method"; import { ajax } from "discourse/lib/ajax"; import { userPath } from "discourse/lib/url"; import logout from "discourse/lib/logout"; +import EmberObject from "@ember/object"; // Number of tokens shown by default. const DEFAULT_AUTH_TOKENS_COUNT = 2; @@ -94,6 +96,39 @@ export default Controller.extend(CanCheckEmails, { disableConnectButtons: propertyNotEqual("model.id", "currentUser.id"), + @discourseComputed( + "model.email", + "model.secondary_emails.[]", + "model.unconfirmed_emails.[]" + ) + emails(primaryEmail, secondaryEmails, unconfirmedEmails) { + const emails = []; + + if (primaryEmail) { + emails.push( + EmberObject.create({ + email: primaryEmail, + primary: true, + confirmed: true + }) + ); + } + + if (secondaryEmails) { + secondaryEmails.forEach(email => { + emails.push(EmberObject.create({ email, confirmed: true })); + }); + } + + if (unconfirmedEmails) { + unconfirmedEmails.forEach(email => { + emails.push(EmberObject.create({ email })); + }); + } + + return emails.sort((a, b) => a.email.localeCompare(b.email)); + }, + @discourseComputed( "model.second_factor_enabled", "canCheckEmails", @@ -148,6 +183,26 @@ export default Controller.extend(CanCheckEmails, { .catch(popupAjaxError); }, + setPrimaryEmail(email) { + this.model.setPrimaryEmail(email).catch(popupAjaxError); + }, + + destroyEmail(email) { + this.model.destroyEmail(email); + }, + + resendConfirmationEmail(email) { + email.set("resending", true); + this.model + .addEmail(email.email) + .then(() => { + email.set("resent", true); + }) + .finally(() => { + email.set("resending", false); + }); + }, + changePassword() { if (!this.passwordProgress) { this.set( @@ -195,7 +250,7 @@ export default Controller.extend(CanCheckEmails, { () => { bootbox.alert( I18n.t("user.deleted_yourself"), - () => (window.location = Discourse.getURL("/")) + () => (window.location = getURL("/")) ); }, () => { diff --git a/app/assets/javascripts/discourse/app/controllers/preferences/email.js b/app/assets/javascripts/discourse/app/controllers/preferences/email.js index f79e4d15d1..3365faf0f2 100644 --- a/app/assets/javascripts/discourse/app/controllers/preferences/email.js +++ b/app/assets/javascripts/discourse/app/controllers/preferences/email.js @@ -7,10 +7,13 @@ import EmberObject from "@ember/object"; import { emailValid } from "discourse/lib/utilities"; export default Controller.extend({ + queryParams: ["new"], + taken: false, saving: false, error: false, success: false, + oldEmail: null, newEmail: null, newEmailEmpty: empty("newEmail"), @@ -23,16 +26,17 @@ export default Controller.extend({ "invalidEmail" ), - unchanged: propertyEqual("newEmailLower", "currentUser.email"), + unchanged: propertyEqual("newEmailLower", "oldEmail"), @discourseComputed("newEmail") newEmailLower(newEmail) { return newEmail.toLowerCase().trim(); }, - @discourseComputed("saving") - saveButtonText(saving) { + @discourseComputed("saving", "new") + saveButtonText(saving, isNew) { if (saving) return I18n.t("saving"); + if (isNew) return I18n.t("user.add_email.add"); return I18n.t("user.change"); }, @@ -41,9 +45,9 @@ export default Controller.extend({ return !emailValid(newEmail); }, - @discourseComputed("invalidEmail") - emailValidation(invalidEmail) { - if (invalidEmail) { + @discourseComputed("invalidEmail", "oldEmail", "newEmail") + emailValidation(invalidEmail, oldEmail, newEmail) { + if (invalidEmail && (oldEmail || newEmail)) { return EmberObject.create({ failed: true, reason: I18n.t("user.email.invalid") @@ -62,10 +66,13 @@ export default Controller.extend({ }, actions: { - changeEmail() { + saveEmail() { this.set("saving", true); - return this.model.changeEmail(this.newEmail).then( + return (this.new + ? this.model.addEmail(this.newEmail) + : this.model.changeEmail(this.newEmail) + ).then( () => this.set("success", true), e => { this.setProperties({ error: true, saving: false }); diff --git a/app/assets/javascripts/discourse/app/controllers/user-invited-show.js b/app/assets/javascripts/discourse/app/controllers/user-invited-show.js index eb3a42fd14..7e8f67ebe2 100644 --- a/app/assets/javascripts/discourse/app/controllers/user-invited-show.js +++ b/app/assets/javascripts/discourse/app/controllers/user-invited-show.js @@ -1,5 +1,5 @@ import I18n from "I18n"; -import { equal, reads, gte } from "@ember/object/computed"; +import { equal, reads } from "@ember/object/computed"; import Controller from "@ember/controller"; import Invite from "discourse/models/invite"; import discourseDebounce from "discourse/lib/debounce"; @@ -35,21 +35,30 @@ export default Controller.extend({ }, INPUT_DELAY), inviteRedeemed: equal("filter", "redeemed"), + invitePending: equal("filter", "pending"), + + @discourseComputed("filter") + inviteLinks(filter) { + return filter === "links" && this.currentUser.staff; + }, @discourseComputed("filter") showBulkActionButtons(filter) { return ( filter === "pending" && this.model.invites.length > 4 && - this.currentUser.get("staff") + this.currentUser.staff ); }, canInviteToForum: reads("currentUser.can_invite_to_forum"), - canBulkInvite: reads("currentUser.admin"), + canSendInviteLink: reads("currentUser.staff"), - showSearch: gte("totalInvites", 10), + @discourseComputed("totalInvites", "inviteLinks") + showSearch(totalInvites, inviteLinks) { + return totalInvites >= 10 && !inviteLinks; + }, @discourseComputed("invitesCount.total", "invitesCount.pending") pendingLabel(invitesCountTotal, invitesCountPending) { @@ -73,6 +82,17 @@ export default Controller.extend({ } }, + @discourseComputed("invitesCount.total", "invitesCount.links") + linksLabel(invitesCountTotal, invitesCountLinks) { + if (invitesCountTotal > 50) { + return I18n.t("user.invited.links_tab_with_count", { + count: invitesCountLinks + }); + } else { + return I18n.t("user.invited.links_tab"); + } + }, + actions: { rescind(invite) { invite.rescind(); diff --git a/app/assets/javascripts/discourse/app/helpers/category-link.js b/app/assets/javascripts/discourse/app/helpers/category-link.js index 9530c26982..ff63695293 100644 --- a/app/assets/javascripts/discourse/app/helpers/category-link.js +++ b/app/assets/javascripts/discourse/app/helpers/category-link.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { get } from "@ember/object"; import { registerUnbound } from "discourse-common/lib/helpers"; @@ -104,9 +105,7 @@ function defaultCategoryLinkRenderer(category, opts) { let restricted = get(category, "read_restricted"); let url = opts.url ? opts.url - : Discourse.getURL( - `/c/${Category.slugFor(category)}/${get(category, "id")}` - ); + : getURL(`/c/${Category.slugFor(category)}/${get(category, "id")}`); let href = opts.link === false ? "" : url; let tagName = opts.link === false || opts.link === "false" ? "span" : "a"; let extraClasses = opts.extraClasses ? " " + opts.extraClasses : ""; diff --git a/app/assets/javascripts/discourse/app/initializers/live-development.js b/app/assets/javascripts/discourse/app/initializers/live-development.js index fe3d59875b..8c8a3f1287 100644 --- a/app/assets/javascripts/discourse/app/initializers/live-development.js +++ b/app/assets/javascripts/discourse/app/initializers/live-development.js @@ -1,6 +1,6 @@ import DiscourseURL from "discourse/lib/url"; import { currentThemeIds, refreshCSS } from "discourse/lib/theme-selector"; -import ENV from "discourse-common/config/environment"; +import { isDevelopment } from "discourse-common/config/environment"; import Handlebars from "handlebars"; // Use the message bus for live reloading of components for faster development. @@ -48,7 +48,7 @@ export default { }); // Useful to export this for debugging purposes - if (Discourse.Environment === "development" && ENV.environment !== "test") { + if (isDevelopment()) { window.DiscourseURL = DiscourseURL; } diff --git a/app/assets/javascripts/discourse/app/initializers/message-bus.js b/app/assets/javascripts/discourse/app/initializers/message-bus.js index f732065c0f..3422b6c405 100644 --- a/app/assets/javascripts/discourse/app/initializers/message-bus.js +++ b/app/assets/javascripts/discourse/app/initializers/message-bus.js @@ -1,6 +1,8 @@ +import getURL from "discourse-common/lib/get-url"; // Initialize the message bus to receive messages. import userPresent from "discourse/lib/user-presence"; import { handleLogoff } from "discourse/lib/ajax"; +import { isProduction } from "discourse-common/config/environment"; const LONG_POLL_AFTER_UNSEEN_TIME = 1200000; // 20 minutes @@ -32,7 +34,7 @@ export default { user = container.lookup("current-user:main"), siteSettings = container.lookup("site-settings:main"); - messageBus.alwaysLongPoll = Discourse.Environment === "development"; + messageBus.alwaysLongPoll = !isProduction(); messageBus.shouldLongPollCallback = () => userPresent(LONG_POLL_AFTER_UNSEEN_TIME); @@ -83,7 +85,7 @@ export default { return ajax(opts); }; - messageBus.baseUrl = Discourse.getURL("/"); + messageBus.baseUrl = getURL("/"); } if (user) { diff --git a/app/assets/javascripts/discourse/app/initializers/register-service-worker.js b/app/assets/javascripts/discourse/app/initializers/register-service-worker.js index fbfc4484de..6b5927d511 100644 --- a/app/assets/javascripts/discourse/app/initializers/register-service-worker.js +++ b/app/assets/javascripts/discourse/app/initializers/register-service-worker.js @@ -1,3 +1,6 @@ +import { isAbsoluteURL } from "discourse-common/lib/get-url"; +import getAbsoluteURL from "discourse-common/lib/get-url"; + export default { name: "register-service-worker", @@ -30,7 +33,7 @@ export default { }); navigator.serviceWorker - .register(`${Discourse.BaseUri}/${Discourse.ServiceWorkerURL}`) + .register(getAbsoluteURL(`/${Discourse.ServiceWorkerURL}`)) .catch(error => { // eslint-disable-next-line no-console console.info(`Failed to register Service Worker: ${error}`); @@ -46,7 +49,7 @@ export default { }, unregister(registration) { - if (registration.scope.startsWith(Discourse.BaseUrl)) { + if (isAbsoluteURL(registration.scope)) { registration.unregister(); } } diff --git a/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js b/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js index 1482cf9d18..407ab97d8c 100644 --- a/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js +++ b/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js @@ -11,7 +11,7 @@ import { unsubscribe as unsubscribePushNotifications, isPushNotificationsEnabled } from "discourse/lib/push-notifications"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; export default { name: "subscribe-user-notifications", @@ -130,7 +130,7 @@ export default { Discourse.set("assetVersion", data) ); - if (ENV.environment !== "test") { + if (!isTesting()) { bus.subscribe(alertChannel(user), data => onNotification(data, user)); initDesktopNotifications(bus, appEvents); diff --git a/app/assets/javascripts/discourse/app/lib/ajax.js b/app/assets/javascripts/discourse/app/lib/ajax.js index 1eadcda626..da1af13206 100644 --- a/app/assets/javascripts/discourse/app/lib/ajax.js +++ b/app/assets/javascripts/discourse/app/lib/ajax.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { run } from "@ember/runloop"; import userPresent from "discourse/lib/user-presence"; @@ -159,7 +160,7 @@ export function ajax() { args.cache = true; // Disable JQuery cache busting param, which was created to deal with IE8 } - ajaxObj = $.ajax(Discourse.getURL(url), args); + ajaxObj = $.ajax(getURL(url), args); } let promise; @@ -169,7 +170,7 @@ export function ajax() { if ( args.type && args.type.toUpperCase() !== "GET" && - url !== Discourse.getURL("/clicks/track") && + url !== getURL("/clicks/track") && !Session.currentProp("csrfToken") ) { promise = new Promise((resolve, reject) => { diff --git a/app/assets/javascripts/discourse/app/lib/category-tag-search.js b/app/assets/javascripts/discourse/app/lib/category-tag-search.js index 9a370f0e21..83ad3e96ab 100644 --- a/app/assets/javascripts/discourse/app/lib/category-tag-search.js +++ b/app/assets/javascripts/discourse/app/lib/category-tag-search.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseDebounce from "discourse/lib/debounce"; import { CANCELLED_STATUS } from "discourse/lib/autocomplete"; import Category from "discourse/models/category"; @@ -27,7 +28,7 @@ function searchTags(term, categories, limit) { ); const debouncedSearch = discourseDebounce((q, cats, resultFunc) => { - oldSearch = $.ajax(Discourse.getURL("/tags/filter/search"), { + oldSearch = $.ajax(getURL("/tags/filter/search"), { type: "GET", cache: true, data: { limit: limit, q } diff --git a/app/assets/javascripts/discourse/app/lib/click-track.js b/app/assets/javascripts/discourse/app/lib/click-track.js index 199a90ea43..d3a37441f7 100644 --- a/app/assets/javascripts/discourse/app/lib/click-track.js +++ b/app/assets/javascripts/discourse/app/lib/click-track.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { later } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; @@ -5,7 +6,7 @@ import DiscourseURL from "discourse/lib/url"; import { wantsNewWindow } from "discourse/lib/intercept-click"; import { selectedText } from "discourse/lib/utilities"; import { Promise } from "rsvp"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; import User from "discourse/models/user"; export function isValidLink($link) { @@ -101,14 +102,14 @@ export default { let trackPromise = Promise.resolve(); if (tracking) { - if (ENV.environment !== "test" && navigator.sendBeacon) { + if (!isTesting() && navigator.sendBeacon) { const data = new FormData(); data.append("url", href); data.append("post_id", postId); data.append("topic_id", topicId); - navigator.sendBeacon(Discourse.getURL("/clicks/track"), data); + navigator.sendBeacon(getURL("/clicks/track"), data); } else { - trackPromise = ajax(Discourse.getURL("/clicks/track"), { + trackPromise = ajax(getURL("/clicks/track"), { type: "POST", data: { url: href, diff --git a/app/assets/javascripts/discourse/app/lib/computed.js b/app/assets/javascripts/discourse/app/lib/computed.js index 68eefd11da..b3a4eb2e2a 100644 --- a/app/assets/javascripts/discourse/app/lib/computed.js +++ b/app/assets/javascripts/discourse/app/lib/computed.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { computed } from "@ember/object"; import { htmlSafe as htmlSafeTemplateHelper } from "@ember/template"; @@ -126,7 +127,7 @@ export function fmt(...args) { export function url(...args) { const format = args.pop(); return computed(...args, function() { - return Discourse.getURL(addonFmt(format, ...args.map(a => this.get(a)))); + return getURL(addonFmt(format, ...args.map(a => this.get(a)))); }); } diff --git a/app/assets/javascripts/discourse/app/lib/discourse-location.js b/app/assets/javascripts/discourse/app/lib/discourse-location.js index 20e8ad8c5d..2c0466c739 100644 --- a/app/assets/javascripts/discourse/app/lib/discourse-location.js +++ b/app/assets/javascripts/discourse/app/lib/discourse-location.js @@ -1,6 +1,7 @@ import EmberObject from "@ember/object"; import { defaultHomepage } from "discourse/lib/utilities"; import { guidFor } from "@ember/object/internals"; +import { withoutPrefix } from "discourse-common/lib/get-url"; let popstateFired = false; const supportsHistoryState = window.history && "state" in window.history; const popstateCallbacks = []; @@ -62,10 +63,7 @@ const DiscourseLocation = EmberObject.extend({ @method getURL */ getURL() { - let url = this.location.pathname; - - url = url.replace(new RegExp(`^${Discourse.BaseUri}`), ""); - + let url = withoutPrefix(this.location.pathname); const search = this.location.search || ""; url += search; return url; diff --git a/app/assets/javascripts/discourse/app/lib/eyeline.js b/app/assets/javascripts/discourse/app/lib/eyeline.js index 53f2a8435a..7afe84fe0e 100644 --- a/app/assets/javascripts/discourse/app/lib/eyeline.js +++ b/app/assets/javascripts/discourse/app/lib/eyeline.js @@ -1,4 +1,4 @@ -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; import AppEvents from "discourse/services/app-events"; let _skipUpdate; @@ -9,7 +9,7 @@ export function configureEyeline(opts) { _skipUpdate = opts.skipUpdate; _rootElement = opts.rootElement; } else { - _skipUpdate = ENV.environment === "test"; + _skipUpdate = isTesting(); _rootElement = null; } } diff --git a/app/assets/javascripts/discourse/app/lib/keyboard-shortcuts.js b/app/assets/javascripts/discourse/app/lib/keyboard-shortcuts.js index 985d9fc1af..29cfaaf9d2 100644 --- a/app/assets/javascripts/discourse/app/lib/keyboard-shortcuts.js +++ b/app/assets/javascripts/discourse/app/lib/keyboard-shortcuts.js @@ -471,9 +471,7 @@ export default { }, _bindToPath(path, key) { - this.keyTrapper.bind(key, () => - DiscourseURL.routeTo(Discourse.BaseUri + path) - ); + this.keyTrapper.bind(key, () => DiscourseURL.routeTo(path)); }, _bindToClick(selector, binding) { diff --git a/app/assets/javascripts/discourse/app/lib/link-mentions.js b/app/assets/javascripts/discourse/app/lib/link-mentions.js index 02872edaec..700412a223 100644 --- a/app/assets/javascripts/discourse/app/lib/link-mentions.js +++ b/app/assets/javascripts/discourse/app/lib/link-mentions.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import { schedule } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import { userPath } from "discourse/lib/url"; @@ -15,7 +16,7 @@ function replaceSpan($e, username, opts) { extraClass = "notify"; } $e.replaceWith( - `@${username}` ); } else { diff --git a/app/assets/javascripts/discourse/app/lib/load-script.js b/app/assets/javascripts/discourse/app/lib/load-script.js index 7c8dfd851f..52babb1952 100644 --- a/app/assets/javascripts/discourse/app/lib/load-script.js +++ b/app/assets/javascripts/discourse/app/lib/load-script.js @@ -1,3 +1,4 @@ +import { default as getURL, getURLWithCDN } from "discourse-common/lib/get-url"; import { run } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import { Promise } from "rsvp"; @@ -51,9 +52,7 @@ export default function loadScript(url, opts) { // Scripts should always load from CDN // CSS is type text, to accept it from a CDN we would need to handle CORS - const fullUrl = opts.css - ? Discourse.getURL(url) - : Discourse.getURLWithCDN(url); + const fullUrl = opts.css ? getURL(url) : getURLWithCDN(url); $("script").each((i, tag) => { const src = tag.getAttribute("src"); diff --git a/app/assets/javascripts/discourse/app/lib/logout.js b/app/assets/javascripts/discourse/app/lib/logout.js index 23160f8e44..2d5bf9966b 100644 --- a/app/assets/javascripts/discourse/app/lib/logout.js +++ b/app/assets/javascripts/discourse/app/lib/logout.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import { isEmpty } from "@ember/utils"; import { findAll } from "discourse/models/login-method"; @@ -23,9 +24,9 @@ export default function logout(siteSettings, keyValueStore) { if (siteSettings.login_required && (sso || oneAuthenticator)) { // In this situation visiting most URLs will start the auth process again // Go to the `/login` page to avoid an immediate redirect - window.location.href = Discourse.getURL("/login"); + window.location.href = getURL("/login"); return; } - window.location.href = Discourse.getURL("/"); + window.location.href = getURL("/"); } diff --git a/app/assets/javascripts/discourse/app/lib/mobile.js b/app/assets/javascripts/discourse/app/lib/mobile.js index 511e269d83..b90ccc2424 100644 --- a/app/assets/javascripts/discourse/app/lib/mobile.js +++ b/app/assets/javascripts/discourse/app/lib/mobile.js @@ -1,4 +1,4 @@ -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; let mobileForced = false; @@ -12,7 +12,7 @@ const Mobile = { this.isMobileDevice = mobileForced || $html.hasClass("mobile-device"); this.mobileView = mobileForced || $html.hasClass("mobile-view"); - if (ENV.environment === "test" || mobileForced) { + if (isTesting() || mobileForced) { return; } diff --git a/app/assets/javascripts/discourse/app/lib/page-tracker.js b/app/assets/javascripts/discourse/app/lib/page-tracker.js index 4acbdc4ea3..3246f14ee8 100644 --- a/app/assets/javascripts/discourse/app/lib/page-tracker.js +++ b/app/assets/javascripts/discourse/app/lib/page-tracker.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import { next } from "@ember/runloop"; let _started = false; let cache = {}; @@ -28,7 +29,7 @@ export function startPageTracking(router, appEvents) { transition.urlMethod === "replace" && transition.queryParamsOnly; router.send("refreshTitle"); - const url = Discourse.getURL(router.get("url")); + const url = getURL(router.get("url")); // Refreshing the title is debounced, so we need to trigger this in the // next runloop to have the correct title. diff --git a/app/assets/javascripts/discourse/app/lib/plugin-api.js b/app/assets/javascripts/discourse/app/lib/plugin-api.js index 101c97da4b..879eeac107 100644 --- a/app/assets/javascripts/discourse/app/lib/plugin-api.js +++ b/app/assets/javascripts/discourse/app/lib/plugin-api.js @@ -28,7 +28,10 @@ import { addTagsHtmlCallback } from "discourse/lib/render-tags"; import { addUserMenuGlyph } from "discourse/widgets/user-menu"; import { addPostClassesCallback } from "discourse/widgets/post"; import { addPostTransformCallback } from "discourse/widgets/post-stream"; -import { attachAdditionalPanel } from "discourse/widgets/header"; +import { + attachAdditionalPanel, + addToHeaderIcons +} from "discourse/widgets/header"; import { registerIconRenderer, replaceIcon @@ -1141,6 +1144,19 @@ class PluginApi { addCategoryLinkIcon(renderer) { addExtraIconRenderer(renderer); } + /** + * Adds a widget to the header-icon ul. The widget must already be created. You can create new widgets + * in a theme or plugin via an initializer prior to calling this function. + * + * ``` + * api.addToHeaderIcons( + * createWidget('some-widget') + * ``` + * + **/ + addToHeaderIcons(icon) { + addToHeaderIcons(icon); + } } let _pluginv01; diff --git a/app/assets/javascripts/discourse/app/lib/render-tag.js b/app/assets/javascripts/discourse/app/lib/render-tag.js index f1882a386e..da11af4669 100644 --- a/app/assets/javascripts/discourse/app/lib/render-tag.js +++ b/app/assets/javascripts/discourse/app/lib/render-tag.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import User from "discourse/models/user"; import { escapeExpression } from "discourse/lib/utilities"; @@ -24,7 +25,7 @@ export function defaultRenderTag(tag, params) { path = `/tag/${tag}`; } } - const href = path ? ` href='${Discourse.getURL(path)}' ` : ""; + const href = path ? ` href='${getURL(path)}' ` : ""; if (Discourse.SiteSettings.tag_style || params.style) { classes.push(params.style || Discourse.SiteSettings.tag_style); diff --git a/app/assets/javascripts/discourse/app/lib/search.js b/app/assets/javascripts/discourse/app/lib/search.js index 07eb6ad7bf..d0974eba05 100644 --- a/app/assets/javascripts/discourse/app/lib/search.js +++ b/app/assets/javascripts/discourse/app/lib/search.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import EmberObject from "@ember/object"; @@ -67,7 +68,7 @@ export function translateResults(results, opts) { flairBgColor, fullName, name, - url: Discourse.getURL(`/g/${name}`) + url: getURL(`/g/${name}`) }; }) .compact(); @@ -77,7 +78,7 @@ export function translateResults(results, opts) { const tagName = escapeExpression(tag.name); return EmberObject.create({ id: tagName, - url: Discourse.getURL("/tag/" + tagName) + url: getURL("/tag/" + tagName) }); }) .compact(); diff --git a/app/assets/javascripts/discourse/app/lib/text.js b/app/assets/javascripts/discourse/app/lib/text.js index 94d33b18d5..a6d5bf21ef 100644 --- a/app/assets/javascripts/discourse/app/lib/text.js +++ b/app/assets/javascripts/discourse/app/lib/text.js @@ -1,3 +1,4 @@ +import { getURLWithCDN } from "discourse-common/lib/get-url"; import PrettyText, { buildOptions } from "pretty-text/pretty-text"; import { performEmojiUnescape, buildEmojiUrl } from "pretty-text/emoji"; import WhiteLister from "pretty-text/white-lister"; @@ -7,8 +8,6 @@ import { formatUsername } from "discourse/lib/utilities"; import { Promise } from "rsvp"; import { htmlSafe } from "@ember/template"; -const getURLWithCDN = url => Discourse.getURLWithCDN(url); - function getOpts(opts) { const siteSettings = Discourse.__container__.lookup("site-settings:main"), site = Discourse.__container__.lookup("site:main"); @@ -39,6 +38,15 @@ export function cookAsync(text, options) { return loadMarkdownIt().then(() => cook(text, options)); } +// Warm up pretty text with a set of options and return a function +// which can be used to cook without rebuilding prettytext every time +export function generateCookFunction(options) { + return loadMarkdownIt().then(() => { + const prettyText = createPrettyText(options); + return text => prettyText.cook(text); + }); +} + export function sanitize(text, options) { return textSanitize(text, new WhiteLister(options)); } diff --git a/app/assets/javascripts/discourse/app/lib/transform-post.js b/app/assets/javascripts/discourse/app/lib/transform-post.js index 9c39e41713..a083d8fe07 100644 --- a/app/assets/javascripts/discourse/app/lib/transform-post.js +++ b/app/assets/javascripts/discourse/app/lib/transform-post.js @@ -47,6 +47,7 @@ export function transformBasicPost(post) { new_user: post.trust_level === 0, name: post.name, user_title: post.user_title, + title_is_group: post.title_is_group, created_at: post.created_at, updated_at: post.updated_at, canDelete: post.can_delete, diff --git a/app/assets/javascripts/discourse/app/lib/url.js b/app/assets/javascripts/discourse/app/lib/url.js index 4086ca7b62..499b5d745c 100644 --- a/app/assets/javascripts/discourse/app/lib/url.js +++ b/app/assets/javascripts/discourse/app/lib/url.js @@ -5,6 +5,7 @@ import offsetCalculator from "discourse/lib/offset-calculator"; import LockOn from "discourse/lib/lock-on"; import { defaultHomepage } from "discourse/lib/utilities"; import User from "discourse/models/user"; +import { default as getURL, withoutPrefix } from "discourse-common/lib/get-url"; const rewrites = []; const TOPIC_REGEXP = /\/t\/([^\/]+)\/(\d+)\/?(\d+)?/; @@ -55,11 +56,11 @@ export function clearRewrites() { } export function userPath(subPath) { - return Discourse.getURL(subPath ? `/u/${subPath}` : "/u"); + return getURL(subPath ? `/u/${subPath}` : "/u"); } export function groupPath(subPath) { - return Discourse.getURL(subPath ? `/g/${subPath}` : "/g"); + return getURL(subPath ? `/g/${subPath}` : "/g"); } let _jumpScheduled = false; @@ -210,11 +211,10 @@ const DiscourseURL = EmberObject.extend({ } if (Discourse.get("requiresRefresh")) { - return redirectTo(Discourse.getURL(path)); + return redirectTo(getURL(path)); } const pathname = path.replace(/(https?\:)?\/\/[^\/]+/, ""); - const baseUri = Discourse.BaseUri; if (!DiscourseURL.isInternal(path)) { return redirectTo(path); @@ -241,13 +241,13 @@ const DiscourseURL = EmberObject.extend({ path = path.replace(/(https?\:)?\/\/[^\/]+/, ""); // Rewrite /my/* urls - let myPath = `${baseUri}/my/`; + let myPath = getURL("/my"); if (path.indexOf(myPath) === 0) { const currentUser = User.current(); if (currentUser) { path = path.replace( myPath, - userPath(currentUser.get("username_lower") + "/") + userPath(currentUser.get("username_lower")) ); } else { return redirectTo("/login-preferences"); @@ -256,11 +256,7 @@ const DiscourseURL = EmberObject.extend({ // handle prefixes if (path.indexOf("/") === 0) { - const rootURL = (baseUri === undefined ? "/" : baseUri).replace( - /\/$/, - "" - ); - path = path.replace(rootURL, ""); + path = withoutPrefix(path); } path = rewritePath(path); @@ -293,7 +289,7 @@ const DiscourseURL = EmberObject.extend({ }, routeToUrl(url, opts = {}) { - this.routeTo(Discourse.getURL(url), opts); + this.routeTo(getURL(url), opts); }, rewrite(regexp, replacement, opts) { @@ -301,7 +297,7 @@ const DiscourseURL = EmberObject.extend({ }, redirectTo(url) { - window.location = Discourse.getURL(url); + window.location = getURL(url); }, /** @@ -420,10 +416,8 @@ const DiscourseURL = EmberObject.extend({ // This has been extracted so it can be tested. origin() { - return ( - window.location.origin + - (Discourse.BaseUri === "/" ? "" : Discourse.BaseUri) - ); + let prefix = getURL("/"); + return window.location.origin + (prefix === "/" ? "" : prefix); }, // TODO: These container calls can be replaced eventually if we migrate this to a service diff --git a/app/assets/javascripts/discourse/app/lib/utilities.js b/app/assets/javascripts/discourse/app/lib/utilities.js index 688aa53929..92fa344134 100644 --- a/app/assets/javascripts/discourse/app/lib/utilities.js +++ b/app/assets/javascripts/discourse/app/lib/utilities.js @@ -2,6 +2,7 @@ import I18n from "I18n"; import { escape } from "pretty-text/sanitizer"; import toMarkdown from "discourse/lib/to-markdown"; import Handlebars from "handlebars"; +import { default as getURL, getURLWithCDN } from "discourse-common/lib/get-url"; const homepageSelector = "meta[name=discourse_current_homepage]"; @@ -55,18 +56,15 @@ export function getRawSize(size) { return size * Math.min(3, Math.max(1, Math.round(pixelRatio))); } -const getURLWithCDN = url => Discourse.getURLWithCDN(url); - -export function avatarImg(options, getURL) { - getURL = getURL || getURLWithCDN; - +export function avatarImg(options, customGetURL) { const size = translateSize(options.size); - const url = avatarUrl(options.avatarTemplate, size); + let path = avatarUrl(options.avatarTemplate, size); // We won't render an invalid url - if (!url || url.length === 0) { + if (!path || path.length === 0) { return ""; } + path = (customGetURL || getURLWithCDN)(path); const classes = "avatar" + (options.extraClasses ? " " + options.extraClasses : ""); @@ -77,19 +75,7 @@ export function avatarImg(options, getURL) { title = ` title='${escaped}' aria-label='${escaped}'`; } - return ( - "" - ); + return ``; } export function tinyAvatar(avatarTemplate, options) { @@ -99,7 +85,7 @@ export function tinyAvatar(avatarTemplate, options) { } export function postUrl(slug, topicId, postNumber) { - var url = Discourse.getURL("/t/"); + var url = getURL("/t/"); if (slug) { url += slug + "/"; } else { @@ -430,7 +416,7 @@ function reportToLogster(name, error) { stacktrace: error.stack }; - Ember.$.ajax(`${Discourse.BaseUri}/logs/report_js_error`, { + Ember.$.ajax(getURL("/logs/report_js_error"), { data, type: "POST", cache: false @@ -447,7 +433,7 @@ export function rescueThemeError(name, error, api) { return; } - const path = `${Discourse.BaseUri}/admin/customize/themes`; + const path = getURL(`/admin/customize/themes`); const message = I18n.t("themes.broken_theme_alert", { theme: name, path: `${path}` diff --git a/app/assets/javascripts/discourse/app/mapping-router.js b/app/assets/javascripts/discourse/app/mapping-router.js index 38b8eec72e..ca6728a1fb 100644 --- a/app/assets/javascripts/discourse/app/mapping-router.js +++ b/app/assets/javascripts/discourse/app/mapping-router.js @@ -1,14 +1,12 @@ import EmberRouter from "@ember/routing/router"; import { defaultHomepage } from "discourse/lib/utilities"; import { rewritePath } from "discourse/lib/url"; -import ENV from "discourse-common/config/environment"; import Site from "discourse/models/site"; - -const rootURL = Discourse.BaseUri; +import { isTesting } from "discourse-common/config/environment"; +import getURL from "discourse-common/lib/get-url"; const BareRouter = EmberRouter.extend({ - rootURL, - location: ENV.environment === "test" ? "none" : "discourse-location", + location: isTesting() ? "none" : "discourse-location", handleURL(url) { url = rewritePath(url); @@ -136,10 +134,10 @@ export function mapRoutes() { } }); - return BareRouter.extend().map(function() { + return BareRouter.extend({ + rootURL: getURL("/") + }).map(function() { tree.mapRoutes(this); this.route("unknown", { path: "*path" }); }); } - -export default BareRouter; diff --git a/app/assets/javascripts/discourse/app/mixins/scroll-top.js b/app/assets/javascripts/discourse/app/mixins/scroll-top.js index d636c2333f..9151ed192f 100644 --- a/app/assets/javascripts/discourse/app/mixins/scroll-top.js +++ b/app/assets/javascripts/discourse/app/mixins/scroll-top.js @@ -2,11 +2,11 @@ import { scheduleOnce } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import { deprecated } from "discourse/mixins/scroll-top"; import Mixin from "@ember/object/mixin"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; const context = { _scrollTop() { - if (ENV.environment === "test") { + if (isTesting()) { return; } $(document).scrollTop(0); diff --git a/app/assets/javascripts/discourse/app/mixins/upload.js b/app/assets/javascripts/discourse/app/mixins/upload.js index 85fdbc0031..b7394663a9 100644 --- a/app/assets/javascripts/discourse/app/mixins/upload.js +++ b/app/assets/javascripts/discourse/app/mixins/upload.js @@ -39,8 +39,10 @@ export default Mixin.create({ _initialize: on("didInsertElement", function() { const $upload = $(this.element); - const reset = () => + const reset = () => { this.setProperties({ uploading: false, uploadProgress: 0 }); + document.getElementsByClassName("hidden-upload-field")[0].value = ""; + }; const maxFiles = this.getWithDefault( "maxFiles", this.siteSettings.simultaneous_uploads diff --git a/app/assets/javascripts/discourse/app/models/badge.js b/app/assets/javascripts/discourse/app/models/badge.js index 5b9e46cef9..3ea5131ae1 100644 --- a/app/assets/javascripts/discourse/app/models/badge.js +++ b/app/assets/javascripts/discourse/app/models/badge.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import { none } from "@ember/object/computed"; import EmberObject from "@ember/object"; @@ -11,7 +12,7 @@ const Badge = RestModel.extend({ @discourseComputed url() { - return Discourse.getURL(`/badges/${this.id}/${this.slug}`); + return getURL(`/badges/${this.id}/${this.slug}`); }, updateFromJson(json) { diff --git a/app/assets/javascripts/discourse/app/models/bookmark.js b/app/assets/javascripts/discourse/app/models/bookmark.js index a55fb80ace..c7a3249144 100644 --- a/app/assets/javascripts/discourse/app/models/bookmark.js +++ b/app/assets/javascripts/discourse/app/models/bookmark.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import Category from "discourse/models/category"; import User from "discourse/models/user"; @@ -19,7 +20,7 @@ const Bookmark = RestModel.extend({ @computed get url() { - return Discourse.getURL(`/bookmarks/${this.id}`); + return getURL(`/bookmarks/${this.id}`); }, destroy() { @@ -37,7 +38,7 @@ const Bookmark = RestModel.extend({ // Helper to build a Url with a post number urlForPostNumber(postNumber) { - let url = Discourse.getURL(`/t/${this.topic_id}`); + let url = getURL(`/t/${this.topic_id}`); if (postNumber > 0) { url += `/${postNumber}`; } diff --git a/app/assets/javascripts/discourse/app/models/category.js b/app/assets/javascripts/discourse/app/models/category.js index 78802cba87..7d950cae2c 100644 --- a/app/assets/javascripts/discourse/app/models/category.js +++ b/app/assets/javascripts/discourse/app/models/category.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import discourseComputed from "discourse-common/utils/decorators"; import { get } from "@ember/object"; import { ajax } from "discourse/lib/ajax"; @@ -96,7 +97,7 @@ const Category = RestModel.extend({ @discourseComputed("name") url() { - return Discourse.getURL(`/c/${Category.slugFor(this)}/${this.id}`); + return getURL(`/c/${Category.slugFor(this)}/${this.id}`); }, @discourseComputed @@ -187,7 +188,8 @@ const Category = RestModel.extend({ ), search_priority: this.search_priority, reviewable_by_group_name: this.reviewable_by_group_name, - read_only_banner: this.read_only_banner + read_only_banner: this.read_only_banner, + default_list_filter: this.default_list_filter }, type: id ? "PUT" : "POST" }); diff --git a/app/assets/javascripts/discourse/app/models/composer.js b/app/assets/javascripts/discourse/app/models/composer.js index 98ccdfaa6d..f4d302775a 100644 --- a/app/assets/javascripts/discourse/app/models/composer.js +++ b/app/assets/javascripts/discourse/app/models/composer.js @@ -374,7 +374,7 @@ const Composer = RestModel.extend({ "tags", "topicFirstPost", "minimumRequiredTags", - "isStaffUser" + "user.staff" ) cantSubmitPost( loading, diff --git a/app/assets/javascripts/discourse/app/models/invite.js b/app/assets/javascripts/discourse/app/models/invite.js index 7eb142c0ab..347ca71d68 100644 --- a/app/assets/javascripts/discourse/app/models/invite.js +++ b/app/assets/javascripts/discourse/app/models/invite.js @@ -10,7 +10,7 @@ const Invite = EmberObject.extend({ rescind() { ajax("/invites", { type: "DELETE", - data: { email: this.email } + data: { id: this.id } }); this.set("rescinded", true); }, @@ -42,7 +42,14 @@ Invite.reopenClass({ if (!isNone(search)) data.search = search; data.offset = offset || 0; - return ajax(userPath(`${user.username_lower}/invited.json`), { + let path; + if (filter === "links") { + path = userPath(`${user.username_lower}/invite_links.json`); + } else { + path = userPath(`${user.username_lower}/invited.json`); + } + + return ajax(path, { data }).then(result => { result.invites = result.invites.map(i => Invite.create(i)); diff --git a/app/assets/javascripts/discourse/app/models/login-method.js b/app/assets/javascripts/discourse/app/models/login-method.js index 0f2f1a46c0..0ef480e5ab 100644 --- a/app/assets/javascripts/discourse/app/models/login-method.js +++ b/app/assets/javascripts/discourse/app/models/login-method.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import EmberObject from "@ember/object"; @@ -33,7 +34,7 @@ const LoginMethod = EmberObject.extend({ return Promise.resolve(); } - let authUrl = Discourse.getURL(`/auth/${this.name}`); + let authUrl = getURL(`/auth/${this.name}`); if (reconnect) { params["reconnect"] = true; diff --git a/app/assets/javascripts/discourse/app/models/nav-item.js b/app/assets/javascripts/discourse/app/models/nav-item.js index 955e536e1e..bf41bdde66 100644 --- a/app/assets/javascripts/discourse/app/models/nav-item.js +++ b/app/assets/javascripts/discourse/app/models/nav-item.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { emojiUnescape } from "discourse/lib/text"; @@ -105,7 +106,7 @@ NavItem.reopenClass({ extraNavItemDescriptors: [], pathFor(filterType, context) { - let path = Discourse.getURL(""); + let path = getURL(""); let includesCategoryContext = false; let includesTagContext = false; diff --git a/app/assets/javascripts/discourse/app/models/published-page.js b/app/assets/javascripts/discourse/app/models/published-page.js index 7f0c12ddf5..91152fa04c 100644 --- a/app/assets/javascripts/discourse/app/models/published-page.js +++ b/app/assets/javascripts/discourse/app/models/published-page.js @@ -1,8 +1,9 @@ import RestModel from "discourse/models/rest"; import { computed } from "@ember/object"; +import { getAbsoluteURL } from "discourse-common/lib/get-url"; export default RestModel.extend({ url: computed("slug", function() { - return `${Discourse.BaseUrl}/pub/${this.slug}`; + return getAbsoluteURL(`/pub/${this.slug}`); }) }); diff --git a/app/assets/javascripts/discourse/app/models/site.js b/app/assets/javascripts/discourse/app/models/site.js index 03aee34519..8e6b8f2d2c 100644 --- a/app/assets/javascripts/discourse/app/models/site.js +++ b/app/assets/javascripts/discourse/app/models/site.js @@ -80,11 +80,6 @@ const Site = RestModel.extend({ return result; }, - @discourseComputed - baseUri() { - return Discourse.baseUri; - }, - // Returns it in the correct order, by setting @discourseComputed("categories.[]") categoriesList() { diff --git a/app/assets/javascripts/discourse/app/models/topic-details.js b/app/assets/javascripts/discourse/app/models/topic-details.js index d8d5ea0036..514db4d9f4 100644 --- a/app/assets/javascripts/discourse/app/models/topic-details.js +++ b/app/assets/javascripts/discourse/app/models/topic-details.js @@ -3,6 +3,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import EmberObject from "@ember/object"; import { ajax } from "discourse/lib/ajax"; import User from "discourse/models/user"; +import getURL from "discourse-common/lib/get-url"; + /** A model representing a Topic's details that aren't always present, such as a list of participants. When showing topics in lists and such this information should not be required. @@ -56,7 +58,7 @@ const TopicDetails = RestModel.extend({ } else { return I18n.t(localeString, { username: User.currentProp("username_lower"), - basePath: Discourse.BaseUri + basePath: getURL("/") }); } }, diff --git a/app/assets/javascripts/discourse/app/models/topic-list.js b/app/assets/javascripts/discourse/app/models/topic-list.js index 489c926de3..16b2b67c6b 100644 --- a/app/assets/javascripts/discourse/app/models/topic-list.js +++ b/app/assets/javascripts/discourse/app/models/topic-list.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import { notEmpty } from "@ember/object/computed"; import EmberObject from "@ember/object"; import { ajax } from "discourse/lib/ajax"; @@ -124,9 +125,9 @@ const TopicList = RestModel.extend({ this.topics.filter(topic => topic_ids.indexOf(topic.id) >= 0) ); - const url = `${Discourse.getURL("/")}${ - this.filter - }.json?topic_ids=${topic_ids.join(",")}`; + const url = `${getURL("/")}${this.filter}.json?topic_ids=${topic_ids.join( + "," + )}`; return ajax({ url, data: this.params }).then(result => { let i = 0; diff --git a/app/assets/javascripts/discourse/app/models/topic-tracking-state.js b/app/assets/javascripts/discourse/app/models/topic-tracking-state.js index 65d1c21269..ee18ed4287 100644 --- a/app/assets/javascripts/discourse/app/models/topic-tracking-state.js +++ b/app/assets/javascripts/discourse/app/models/topic-tracking-state.js @@ -354,6 +354,10 @@ const TopicTrackingState = EmberObject.extend({ row.category_id = topic.category.id; } + if (topic.tags) { + row.tags = topic.tags; + } + tracker.states["t" + topic.id] = row; }); diff --git a/app/assets/javascripts/discourse/app/models/topic.js b/app/assets/javascripts/discourse/app/models/topic.js index af4b87fbe2..4f5305fec6 100644 --- a/app/assets/javascripts/discourse/app/models/topic.js +++ b/app/assets/javascripts/discourse/app/models/topic.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import EmberObject from "@ember/object"; import { not, notEmpty, equal, and, or } from "@ember/object/computed"; @@ -25,7 +26,7 @@ import User from "discourse/models/user"; export function loadTopicView(topic, args) { const data = _.merge({}, args); - const url = `${Discourse.getURL("/t/")}${topic.id}`; + const url = `${getURL("/t/")}${topic.id}`; const jsonUrl = (data.nearPost ? `${url}/${data.nearPost}` : url) + ".json"; delete data.nearPost; @@ -259,7 +260,7 @@ const Topic = RestModel.extend({ if (slug.trim().length === 0) { slug = "topic"; } - return `${Discourse.getURL("/t/")}${slug}/${id}`; + return `${getURL("/t/")}${slug}/${id}`; }, // Helper to build a Url with a post number @@ -739,7 +740,7 @@ Topic.reopenClass({ // Load a topic, but accepts a set of filters find(topicId, opts) { - let url = Discourse.getURL("/t/") + topicId; + let url = getURL("/t/") + topicId; if (opts.nearPost) { url += `/${opts.nearPost}`; } diff --git a/app/assets/javascripts/discourse/app/models/user.js b/app/assets/javascripts/discourse/app/models/user.js index 6e287ccf72..0f67d613b2 100644 --- a/app/assets/javascripts/discourse/app/models/user.js +++ b/app/assets/javascripts/discourse/app/models/user.js @@ -1,3 +1,5 @@ +import { getURLWithCDN } from "discourse-common/lib/get-url"; +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { A } from "@ember/array"; import { isEmpty } from "@ember/utils"; @@ -109,11 +111,7 @@ const User = RestModel.extend({ if (isEmpty(bgUrl) || !Discourse.SiteSettings.allow_profile_backgrounds) { return "".htmlSafe(); } - return ( - "background-image: url(" + - Discourse.getURLWithCDN(bgUrl) + - ")" - ).htmlSafe(); + return ("background-image: url(" + getURLWithCDN(bgUrl) + ")").htmlSafe(); }, @discourseComputed() @@ -183,22 +181,22 @@ const User = RestModel.extend({ @discourseComputed() mutedTopicsPath() { return defaultHomepage() === "latest" - ? Discourse.getURL("/?state=muted") - : Discourse.getURL("/latest?state=muted"); + ? getURL("/?state=muted") + : getURL("/latest?state=muted"); }, @discourseComputed() watchingTopicsPath() { return defaultHomepage() === "latest" - ? Discourse.getURL("/?state=watching") - : Discourse.getURL("/latest?state=watching"); + ? getURL("/?state=watching") + : getURL("/latest?state=watching"); }, @discourseComputed() trackingTopicsPath() { return defaultHomepage() === "latest" - ? Discourse.getURL("/?state=tracking") - : Discourse.getURL("/latest?state=tracking"); + ? getURL("/?state=tracking") + : getURL("/latest?state=tracking"); }, @discourseComputed("username") @@ -248,6 +246,13 @@ const User = RestModel.extend({ }); }, + addEmail(email) { + return ajax(userPath(`${this.username_lower}/preferences/email`), { + type: "POST", + data: { email } + }); + }, + changeEmail(email) { return ajax(userPath(`${this.username_lower}/preferences/email`), { type: "PUT", @@ -377,6 +382,27 @@ const User = RestModel.extend({ }); }, + setPrimaryEmail(email) { + return ajax(userPath(`${this.username}/preferences/primary-email.json`), { + type: "PUT", + data: { email } + }).then(() => { + this.secondary_emails.removeObject(email); + this.secondary_emails.pushObject(this.email); + this.set("email", email); + }); + }, + + destroyEmail(email) { + return ajax(userPath(`${this.username}/preferences/email.json`), { + type: "DELETE", + data: { email } + }).then(() => { + this.secondary_emails.removeObject(email); + this.unconfirmed_emails.removeObject(email); + }); + }, + changePassword() { return ajax("/session/forgot_password", { dataType: "json", @@ -656,6 +682,17 @@ const User = RestModel.extend({ }); }, + generateMultipleUseInviteLink( + group_names, + max_redemptions_allowed, + expires_at + ) { + return ajax("/invites/link", { + type: "POST", + data: { group_names, max_redemptions_allowed, expires_at } + }); + }, + @observes("muted_category_ids") updateMutedCategories() { this.set("mutedCategories", Category.findByIds(this.muted_category_ids)); diff --git a/app/assets/javascripts/discourse/app/pre-initializers/discourse-bootstrap.js b/app/assets/javascripts/discourse/app/pre-initializers/discourse-bootstrap.js index 494ed5e2e9..d8eb01dadc 100644 --- a/app/assets/javascripts/discourse/app/pre-initializers/discourse-bootstrap.js +++ b/app/assets/javascripts/discourse/app/pre-initializers/discourse-bootstrap.js @@ -2,7 +2,13 @@ import PreloadStore from "discourse/lib/preload-store"; import I18n from "I18n"; import Session from "discourse/models/session"; import RSVP from "rsvp"; -import { isTesting } from "discourse-common/config/environment"; +import { + setEnvironment, + isTesting, + isProduction +} from "discourse-common/config/environment"; +import { setupURL, setupS3CDN } from "discourse-common/lib/get-url"; +import deprecated from "discourse-common/lib/deprecated"; export default { name: "discourse-bootstrap", @@ -31,9 +37,29 @@ export default { } app.CDN = setupData.cdn; - app.BaseUrl = setupData.baseUrl; - app.BaseUri = setupData.baseUri; - app.Environment = setupData.environment; + + let baseUrl = setupData.baseUrl; + Object.defineProperty(app, "BaseUrl", { + get() { + deprecated(`use "get-url" helpers instead of Discourse.BaseUrl`, { + since: "2.5", + dropFrom: "2.6" + }); + return baseUrl; + } + }); + let baseUri = setupData.baseUri; + Object.defineProperty(app, "BaseUri", { + get() { + deprecated(`use "get-url" helpers instead of Discourse.BaseUri`, { + since: "2.5", + dropFrom: "2.6" + }); + return baseUri; + } + }); + setupURL(setupData.cdn, baseUrl, setupData.baseUri); + setEnvironment(setupData.environment); app.SiteSettings = PreloadStore.get("siteSettings"); app.ThemeSettings = PreloadStore.get("themeSettings"); app.LetterAvatarVersion = setupData.letterAvatarVersion; @@ -65,6 +91,7 @@ export default { if (setupData.s3BaseUrl) { app.S3CDN = setupData.s3Cdn; app.S3BaseUrl = setupData.s3BaseUrl; + setupS3CDN(setupData.s3BaseUrl, setupData.s3Cdn); } RSVP.configure("onerror", function(e) { @@ -73,7 +100,7 @@ export default { return; } - if (Discourse.Environment === "development") { + if (!isProduction()) { /* eslint-disable no-console */ if (e) { if (e.message || e.stack) { diff --git a/app/assets/javascripts/discourse/app/pre-initializers/dynamic-route-builders.js b/app/assets/javascripts/discourse/app/pre-initializers/dynamic-route-builders.js index 9c96d01e42..47626918f0 100644 --- a/app/assets/javascripts/discourse/app/pre-initializers/dynamic-route-builders.js +++ b/app/assets/javascripts/discourse/app/pre-initializers/dynamic-route-builders.js @@ -13,6 +13,7 @@ export default { app.DiscoveryCategoryController = DiscoverySortableController.extend(); app.DiscoveryParentCategoryController = DiscoverySortableController.extend(); app.DiscoveryCategoryNoneController = DiscoverySortableController.extend(); + app.DiscoveryCategoryAllController = DiscoverySortableController.extend(); app.DiscoveryCategoryWithIDController = DiscoverySortableController.extend(); app.DiscoveryCategoryRoute = buildCategoryRoute("default"); @@ -20,6 +21,9 @@ export default { app.DiscoveryCategoryNoneRoute = buildCategoryRoute("default", { no_subcategories: true }); + app.DiscoveryCategoryAllRoute = buildCategoryRoute("default", { + no_subcategories: false + }); app.DiscoveryCategoryWithIDRoute = buildCategoryRoute("default"); const site = Site.current(); diff --git a/app/assets/javascripts/discourse/app/routes/app-route-map.js b/app/assets/javascripts/discourse/app/routes/app-route-map.js index fb13822bb2..9057ff2fe5 100644 --- a/app/assets/javascripts/discourse/app/routes/app-route-map.js +++ b/app/assets/javascripts/discourse/app/routes/app-route-map.js @@ -70,6 +70,7 @@ export default function() { // default filter for a category this.route("categoryNone", { path: "/c/*category_slug_path_with_id/none" }); + this.route("categoryAll", { path: "/c/*category_slug_path_with_id/all" }); this.route("category", { path: "/c/*category_slug_path_with_id" }); }); diff --git a/app/assets/javascripts/discourse/app/routes/application.js b/app/assets/javascripts/discourse/app/routes/application.js index b30dffebf8..cd9c6dd4a0 100644 --- a/app/assets/javascripts/discourse/app/routes/application.js +++ b/app/assets/javascripts/discourse/app/routes/application.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { once } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; @@ -46,8 +47,8 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { _collectTitleTokens(tokens) { tokens.push(this.siteTitle); if ( - (window.location.pathname === Discourse.getURL("/") || - window.location.pathname === Discourse.getURL("/login")) && + (window.location.pathname === getURL("/") || + window.location.pathname === getURL("/login")) && this.shortSiteDescription !== "" ) { tokens.push(this.shortSiteDescription); @@ -250,9 +251,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { handleShowLogin() { if (this.siteSettings.enable_sso) { const returnPath = encodeURIComponent(window.location.pathname); - window.location = Discourse.getURL( - "/session/sso?return_path=" + returnPath - ); + window.location = getURL("/session/sso?return_path=" + returnPath); } else { this._autoLogin("login", "login-modal", () => this.controllerFor("login").resetForm() @@ -263,9 +262,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { handleShowCreateAccount() { if (this.siteSettings.enable_sso) { const returnPath = encodeURIComponent(window.location.pathname); - window.location = Discourse.getURL( - "/session/sso?return_path=" + returnPath - ); + window.location = getURL("/session/sso?return_path=" + returnPath); } else { this._autoLogin("createAccount", "create-account"); } diff --git a/app/assets/javascripts/discourse/app/routes/build-category-route.js b/app/assets/javascripts/discourse/app/routes/build-category-route.js index 18fe88124f..a28b6c8471 100644 --- a/app/assets/javascripts/discourse/app/routes/build-category-route.js +++ b/app/assets/javascripts/discourse/app/routes/build-category-route.js @@ -30,6 +30,11 @@ export default (filterArg, params) => { category, category_slug_path_with_id }); + } else if (modelParams.id === "all") { + modelParams.category_slug_path_with_id = [ + modelParams.parentSlug, + modelParams.slug + ].join("/"); } else { modelParams.category_slug_path_with_id = [ modelParams.parentSlug, @@ -61,12 +66,12 @@ export default (filterArg, params) => { const record = this.store.createRecord("category", result.category); record.setupGroupsAndPermissions(); this.site.updateCategory(record); - return { category: record }; + return { category: record, modelParams }; }); } if (category) { - return { category }; + return { category, modelParams }; } }, @@ -76,10 +81,24 @@ export default (filterArg, params) => { return; } - this._setupNavigation(model.category); + const { category, modelParams } = model; + + if ( + category.default_list_filter === "none" && + filterArg === "default" && + modelParams && + modelParams.id !== "all" + ) { + this.replaceWith("discovery.categoryNone", { + category, + category_slug_path_with_id: modelParams.category_slug_path_with_id + }); + } + + this._setupNavigation(category); return all([ - this._createSubcategoryList(model.category), - this._retrieveTopicList(model.category, transition) + this._createSubcategoryList(category), + this._retrieveTopicList(category, transition, modelParams) ]); }, @@ -113,11 +132,11 @@ export default (filterArg, params) => { return Promise.resolve(); }, - _retrieveTopicList(category, transition) { + _retrieveTopicList(category, transition, modelParams) { const listFilter = `c/${Category.slugFor(category)}/${ category.id }/l/${this.filter(category)}`, - findOpts = filterQueryParams(transition.to.queryParams, params), + findOpts = filterQueryParams(modelParams, params), extras = { cached: this.isPoppedState(transition) }; return findTopicList( @@ -158,7 +177,7 @@ export default (filterArg, params) => { category = model.category, canCreateTopic = topics.get("can_create_topic"), canCreateTopicOnCategory = - category.get("permission") === PermissionType.FULL, + canCreateTopic && category.get("permission") === PermissionType.FULL, filter = this.filter(category); this.controllerFor("navigation/category").setProperties({ diff --git a/app/assets/javascripts/discourse/app/routes/build-topic-route.js b/app/assets/javascripts/discourse/app/routes/build-topic-route.js index 8d34c8380e..f623bf0b5c 100644 --- a/app/assets/javascripts/discourse/app/routes/build-topic-route.js +++ b/app/assets/javascripts/discourse/app/routes/build-topic-route.js @@ -1,3 +1,4 @@ +import { isEmpty } from "@ember/utils"; import I18n from "I18n"; import DiscourseRoute from "discourse/routes/discourse"; import { queryParams } from "discourse/controllers/discovery-sortable"; @@ -12,7 +13,7 @@ function filterQueryParams(params, defaultParams) { if (params) { Object.keys(queryParams).forEach(function(opt) { - if (params[opt]) { + if (!isEmpty(params[opt])) { findOpts[opt] = params[opt]; } }); @@ -50,10 +51,10 @@ function findTopicList(store, tracking, filter, filterParams, extras) { // Clean up any string parameters that might slip through filterParams = filterParams || {}; - Object.keys(filterParams).forEach(function(k) { + Object.keys(filterParams).forEach(k => { const val = filterParams[k]; - if (val === "undefined" || val === "null" || val === "false") { - filterParams[k] = undefined; + if (val === "undefined" || val === "null") { + filterParams[k] = null; } }); diff --git a/app/assets/javascripts/discourse/app/routes/preferences-email.js b/app/assets/javascripts/discourse/app/routes/preferences-email.js index c3fb268c4d..f2d070ad00 100644 --- a/app/assets/javascripts/discourse/app/routes/preferences-email.js +++ b/app/assets/javascripts/discourse/app/routes/preferences-email.js @@ -13,7 +13,17 @@ export default RestrictedUserRoute.extend({ setupController: function(controller, model) { controller.reset(); - controller.setProperties({ model: model, newEmail: model.get("email") }); + controller.setProperties({ + model: model, + oldEmail: controller.new ? "" : model.get("email"), + newEmail: controller.new ? "" : model.get("email") + }); + }, + + resetController: function(controller, isExiting) { + if (isExiting) { + controller.set("new", undefined); + } }, // A bit odd, but if we leave to /preferences we need to re-render that outlet diff --git a/app/assets/javascripts/discourse/app/routes/topic-from-params.js b/app/assets/javascripts/discourse/app/routes/topic-from-params.js index bcf904ad38..2c028e42de 100644 --- a/app/assets/javascripts/discourse/app/routes/topic-from-params.js +++ b/app/assets/javascripts/discourse/app/routes/topic-from-params.js @@ -3,7 +3,7 @@ import { schedule } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import DiscourseURL from "discourse/lib/url"; import Draft from "discourse/models/draft"; -import ENV from "discourse-common/config/environment"; +import { isTesting } from "discourse-common/config/environment"; // This route is used for retrieving a topic based on params export default DiscourseRoute.extend({ @@ -81,7 +81,7 @@ export default DiscourseRoute.extend({ } }) .catch(e => { - if (ENV.environment !== "test") { + if (!isTesting()) { // eslint-disable-next-line no-console console.log("Could not view topic", e); } diff --git a/app/assets/javascripts/discourse/app/routes/user-invited-show.js b/app/assets/javascripts/discourse/app/routes/user-invited-show.js index 3cd83f79ce..7af69e14df 100644 --- a/app/assets/javascripts/discourse/app/routes/user-invited-show.js +++ b/app/assets/javascripts/discourse/app/routes/user-invited-show.js @@ -30,18 +30,51 @@ export default DiscourseRoute.extend({ actions: { showInvite() { + const panels = [ + { + id: "invite", + title: "user.invited.single_user", + model: { + inviteModel: this.currentUser, + userInvitedShow: this.controllerFor("user-invited-show") + } + } + ]; + + if (this.get("currentUser.staff")) { + panels.push({ + id: "invite-link", + title: "user.invited.multiple_user", + model: { + inviteModel: this.currentUser, + userInvitedShow: this.controllerFor("user-invited-show") + } + }); + } + showModal("share-and-invite", { modalClass: "share-and-invite", - panels: [ - { - id: "invite", - title: "user.invited.create", - model: { - inviteModel: this.currentUser, - userInvitedShow: this.controllerFor("user-invited-show") - } + panels + }); + }, + + editInvite(inviteKey) { + const inviteLink = `${Discourse.BaseUrl}/invites/${inviteKey}`; + this.currentUser.setProperties({ finished: true, inviteLink }); + const panels = [ + { + id: "invite-link", + title: "user.invited.generate_link", + model: { + inviteModel: this.currentUser, + userInvitedShow: this.controllerFor("user-invited-show") } - ] + } + ]; + + showModal("share-and-invite", { + modalClass: "share-and-invite", + panels }); } } diff --git a/app/assets/javascripts/discourse/app/services/logs-notice.js b/app/assets/javascripts/discourse/app/services/logs-notice.js index c84dadb944..5faaaa2805 100644 --- a/app/assets/javascripts/discourse/app/services/logs-notice.js +++ b/app/assets/javascripts/discourse/app/services/logs-notice.js @@ -1,3 +1,4 @@ +import getURL from "discourse-common/lib/get-url"; import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import EmberObject from "@ember/object"; @@ -42,7 +43,7 @@ const LogsNotice = EmberObject.extend({ ), rate, limit: siteSettingLimit, - url: Discourse.getURL("/logs") + url: getURL("/logs") }) ); }); diff --git a/app/assets/javascripts/discourse/app/templates/components/edit-category-settings.hbs b/app/assets/javascripts/discourse/app/templates/components/edit-category-settings.hbs index ab17a307c3..5520c045a7 100644 --- a/app/assets/javascripts/discourse/app/templates/components/edit-category-settings.hbs +++ b/app/assets/javascripts/discourse/app/templates/components/edit-category-settings.hbs @@ -181,21 +181,44 @@ {{i18n "category.sort_order"}}
{{i18n "user.invited.link_generated"}}
- +
{{i18n "user.invited.valid_for" email=email}}
{{i18n "invites.invited_by"}}
{{user-info user=invitedBy}}
- {{html-safe yourEmailMessage}} - {{#if externalAuthsEnabled}} - {{i18n "invites.social_login_available"}} - {{/if}} -
+ {{html-safe yourEmailMessage}} + {{#if externalAuthsEnabled}} + {{i18n "invites.social_login_available"}} + {{/if}} +
{{html-safe pinMessage}} - {{d-icon "far-clock"}} - {{future-date-input - class="pin-until" - includeFarFuture=true - clearable=true - input=model.pinnedInCategoryUntil - onChangeInput=(action (mut model.pinnedInCategoryUntil)) - }} - {{popup-input-tip validation=pinInCategoryValidation shownAt=pinInCategoryTipShownAt}} + + {{d-icon "far-clock"}} + {{future-date-input + class="pin-until" + includeFarFuture=true + clearable=true + input=model.pinnedInCategoryUntil + onChangeInput=(action (mut model.pinnedInCategoryUntil)) + }} + {{popup-input-tip validation=pinInCategoryValidation shownAt=pinInCategoryTipShownAt}} +
@@ -100,15 +102,17 @@ {{else}}
{{i18n "topic.feature_topic.pin_globally"}} - {{d-icon "far-clock"}} - {{future-date-input - class="pin-until" - includeFarFuture=true - clearable=true - input=model.pinnedGloballyUntil - onChangeInput=(action (mut model.pinnedGloballyUntil)) - }} - {{popup-input-tip validation=pinGloballyValidation shownAt=pinGloballyTipShownAt}} + + {{d-icon "far-clock"}} + {{future-date-input + class="pin-until" + includeFarFuture=true + clearable=true + input=model.pinnedGloballyUntil + onChangeInput=(action (mut model.pinnedGloballyUntil)) + }} + {{popup-input-tip validation=pinGloballyValidation shownAt=pinGloballyTipShownAt}} +
diff --git a/app/assets/javascripts/discourse/app/templates/preferences-email.hbs b/app/assets/javascripts/discourse/app/templates/preferences-email.hbs index 1c561e265f..447d220403 100644 --- a/app/assets/javascripts/discourse/app/templates/preferences-email.hbs +++ b/app/assets/javascripts/discourse/app/templates/preferences-email.hbs @@ -3,7 +3,7 @@
- <%= t 'change_email.authorizing_new.description' %> + <% if @change_request&.old_email %> + <%= t 'change_email.authorizing_new.description' %> + <% else %> + <%= t 'change_email.authorizing_new.description_add' %> + <% end %>
<%= @to_email %> diff --git a/app/views/users_email/show_confirm_old_email.html.erb b/app/views/users_email/show_confirm_old_email.html.erb index 6d81093186..9fc65856cb 100644 --- a/app/views/users_email/show_confirm_old_email.html.erb +++ b/app/views/users_email/show_confirm_old_email.html.erb @@ -11,12 +11,19 @@ <% else %>
- <%= t 'change_email.authorizing_old.description' %> - - - <%= t 'change_email.authorizing_old.old_email', email: @from_email %> - - <%= t 'change_email.authorizing_old.new_email', email: @to_email %> + <% if @change_request&.old_email %> + <%= t 'change_email.authorizing_old.description' %> + + + <%= t 'change_email.authorizing_old.old_email', email: @from_email %> + + <%= t 'change_email.authorizing_old.new_email', email: @to_email %> + <% else %> + <%= t 'change_email.authorizing_old.description_add' %> + + + <%= @to_email %> + <% end %>
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} قبل دعوتك" - moved_post: "{{username}} نقل {{description}}" - linked: "{{username}}{{description}} " - granted_badge: "تم منحك شارة '{{description}}'" - topic_reminder: "{{username}}{{description}} " - watching_first_post: "موضوع جديد {{description}}" + zero: "%{username}, %{username2} %{description}" + one: "%{username}, %{username2} و وواحد اخر %{description}" + two: "%{username}, %{username2} و اثنين اخرون %{description}" + few: "%{username}, %{username2} و %{count} اخرون %{description}" + many: "%{username}, %{username2} و %{count} اخرون %{description}" + other: "%{username}, %{username2} و %{count} اخرون %{description}" + liked_consolidated: "%{username}%{description} " + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} قبل دعوتك" + moved_post: "%{username} نقل %{description}" + linked: "%{username}%{description} " + granted_badge: "تم منحك شارة '%{description}'" + topic_reminder: "%{username}%{description} " + watching_first_post: "موضوع جديد %{description}" group_message_summary: - zero: "لا يوجد رسائل في صندوق رسائل {{group_name}} " - one: "رسالة واحدة في صندوق رسائل {{group_name}} " - two: "{{count}} رسالة في صندوق رسائل {{group_name}} " - few: "{{count}} رسالة في صندوق رسائل {{group_name}} " - many: "{{count}} رسالة في صندوق رسائل {{group_name}} " - other: "{{count}} رسالة في صندوق رسائل {{group_name}} " + zero: "لا يوجد رسائل في صندوق رسائل %{group_name} " + one: "رسالة واحدة في صندوق رسائل %{group_name} " + two: "%{count} رسالة في صندوق رسائل %{group_name} " + few: "%{count} رسالة في صندوق رسائل %{group_name} " + many: "%{count} رسالة في صندوق رسائل %{group_name} " + other: "%{count} رسالة في صندوق رسائل %{group_name} " popup: - mentioned: 'أشار {{username}} إليك في "{{topic}}" - {{site_title}}' - group_mentioned: 'أشار {{username}} إليك في "{{topic}}" - {{site_title}}' - quoted: 'اقتبس {{username}} كلامك في "{{topic}}" - {{site_title}}' - replied: 'ردّ {{username}} عليك في "{{topic}}" - {{site_title}}' - posted: 'نشر {{username}} في "{{topic}}" - {{site_title}}' - linked: '{{username}} وضع رابطا لمنشورك في "{{topic}}" - {{site_title}}' + mentioned: 'أشار %{username} إليك في "%{topic}" - %{site_title}' + group_mentioned: 'أشار %{username} إليك في "%{topic}" - %{site_title}' + quoted: 'اقتبس %{username} كلامك في "%{topic}" - %{site_title}' + replied: 'ردّ %{username} عليك في "%{topic}" - %{site_title}' + posted: 'نشر %{username} في "%{topic}" - %{site_title}' + linked: '%{username} وضع رابطا لمنشورك في "%{topic}" - %{site_title}' titles: watching_first_post: "موضوع جديد" upload_selector: @@ -1406,9 +1409,9 @@ ar: from_my_computer: "من جهازي" from_the_web: "من الوبّ" remote_tip: "رابط لصورة" - remote_tip_with_attachments: "رابط لصورة أو ملف {{authorized_extensions}}" + remote_tip_with_attachments: "رابط لصورة أو ملف %{authorized_extensions}" local_tip: "إختر صور من جهازك ." - local_tip_with_attachments: "حدّد صورا أو ملفات من جهازك {{authorized_extensions}}" + local_tip_with_attachments: "حدّد صورا أو ملفات من جهازك %{authorized_extensions}" hint: "(يمكنك أيضا السحب والإفلات في المحرر لرفعها)" hint_for_supported_browsers: "يمكنك أيضا سحب وإفلات الصور أو لصقها في المحرر" uploading: "يرفع" @@ -1428,7 +1431,7 @@ ar: no_results: "لا يوجد نتائج." no_more_results: "لا يوجد نتائج أخرى." searching: "يبحث..." - post_format: "#{{post_number}} كتبها {{username}}" + post_format: "#%{post_number} كتبها %{username}" more_results: "يوجد عدد كبير من النتائج, يرجى تضييق نطاق البحث." cant_find: "لا تستطيع ايجاد ما تبحث عنة؟" start_new_topic: "افتح موضوع جديد." @@ -1437,8 +1440,8 @@ ar: search_google_button: "جوجل" search_google_title: "ابحث في هذا الموقع" context: - user: "ابحث في منشورات @{{username}}" - category: "أبحث في قسم #{{category}}" + user: "ابحث في منشورات @%{username}" + category: "أبحث في قسم #%{category}" topic: "ابحث في هذا الموضوع" private_messages: "البحث في الرسائل الخاصة" advanced: @@ -1507,9 +1510,9 @@ ar: zero: "لم تحدد شيئا." one: "حددت موضوع واحد." two: "حددت موضوعين." - few: "حددت {{count}} مواضيع." - many: "حددت {{count}} موضوعا." - other: "حددت {{count}} موضوع." + few: "حددت %{count} مواضيع." + many: "حددت %{count} موضوعا." + other: "حددت %{count} موضوع." change_tags: "غيّر الأوسمة" append_tags: "اضف الأوسمة" choose_new_tags: "اختر أوسمة جديدة لهذه الموضوعات:" @@ -1522,7 +1525,7 @@ ar: posted: "لم تشارك في أيّ موضوع بعد." latest: "لا مواضيع حديثة. يا للأسف." bookmarks: "لا مواضيع معلّمة بعد." - category: "لا يوجد موضوعات في قسم ’{{category}}‘." + category: "لا يوجد موضوعات في قسم ’%{category}‘." top: "لا يوجد موضوعات مشاهدة بكثرة" educate: new: '
سوف تظهر موضوعاتك هنا.
بشكل افتراضي تعتبر الموضوعات جديدة و يظهر بجانبها كلمه جديد إذا لم يمضي علي نشرها اكثر من يومين.
زور صفحة التفضيلات لتغيير هذا السلوك
Непрочетените теми се появяват тук.
По подразбиране темите се считат за непрочетени и ще показват бройката нови ако са създадени през последните 2 дни.
Моля посетете вашите настройки за да промените това.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} je prihvatio vašu pozivnicu" - moved_post: "{{username}} je pomjerio {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Zasluženo '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nova tema {{description}}" + one: "vam se svidio %{count} vaših postova" + few: "vam se svidio %{count} vaših postova" + other: "vam se svidio %{count} vaših postova" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} je prihvatio vašu pozivnicu" + moved_post: "%{username} je pomjerio %{description}" + linked: "%{username} %{description}" + granted_badge: "Zasluženo '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nova tema %{description}" group_message_summary: - one: "{{count}} poruka u vašem {{group_name}} sandučiću" - few: "{{count}} poruke u vašem {{group_name}} sandučiću" - other: "{{count}} poruka u vašem {{group_name}} sandučiću" + one: "%{count} poruka u vašem %{group_name} sandučiću" + few: "%{count} poruke u vašem %{group_name} sandučiću" + other: "%{count} poruka u vašem %{group_name} sandučiću" popup: - mentioned: '{{username}} vas je spomenuo/la u "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} vas je spomenuo/la u "{{topic}}" - {{site_title}}' - quoted: '{{username}} vas je citirao/la u "{{topic}}" - {{site_title}}' - replied: '{{username}} vam je odgovorio/la u "{{topic}}" - {{site_title}}' - posted: '{{username}} je objavio/la "{{topic}}" - {{site_title}}' - private_message: '{{username}} vam je poslao/la poruku u "{{topic}}" - {{site_title}}' - linked: '{{username}} je linkao/la vašu objavu "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} je kreirao novu temu "{{topic}}" - {{site_title}}' + mentioned: '%{username} vas je spomenuo/la u "%{topic}" - %{site_title}' + group_mentioned: '%{username} vas je spomenuo/la u "%{topic}" - %{site_title}' + quoted: '%{username} vas je citirao/la u "%{topic}" - %{site_title}' + replied: '%{username} vam je odgovorio/la u "%{topic}" - %{site_title}' + posted: '%{username} je objavio/la "%{topic}" - %{site_title}' + private_message: '%{username} vam je poslao/la poruku u "%{topic}" - %{site_title}' + linked: '%{username} je linkao/la vašu objavu "%{topic}" - %{site_title}' + watching_first_post: '%{username} je kreirao novu temu "%{topic}" - %{site_title}' confirm_title: "Obavijesti uključene - %{site_title}" confirm_body: "Uspješno! Obavijesti su sada uključene." - custom: "Obavijest od {{username}} na %{site_title}" + custom: "Obavijest od %{username} na %{site_title}" titles: mentioned: "spomenuto" replied: "novi odgovor" @@ -1741,9 +1742,9 @@ bs_BA: from_my_computer: "Sa mog uređaja" from_the_web: "Sa neta" remote_tip: "link do slike http://primjer.com/slika.jpg" - remote_tip_with_attachments: "link ka slici ili datoteci {{authorized_extensions}}" + remote_tip_with_attachments: "link ka slici ili datoteci %{authorized_extensions}" local_tip: "Izaberi slike sa svog uređaja" - local_tip_with_attachments: "izaberite slike ili fajlove sa vašeg uređaja {{authorized_extensions}}" + local_tip_with_attachments: "izaberite slike ili fajlove sa vašeg uređaja %{authorized_extensions}" hint: "(možete i mišom prenijeti vaše slike direktno iz vašeg foldera ovdje)" hint_for_supported_browsers: "također možete povući i ispustiti ili zalijepiti slike u editor teksta" uploading: "Učitavam" @@ -1760,16 +1761,16 @@ bs_BA: clear_all: "Očisti sve" too_short: "Vaš termin za pretragu je prekratak." result_count: - one: "%{count} rezultat za{{term}}" - few: "{{count}}{{plus}} resultata za{{term}}" - other: "{{count}}{{plus}} rezultata za{{term}}" + one: "%{count} rezultat za%{term}" + few: "%{count}%{plus} resultata za%{term}" + other: "%{count}%{plus} rezultata za%{term}" title: "traži teme, postove, članove ili kategorije" full_page_title: "pretraži teme ili objave" no_results: "Nema rezultata." no_more_results: "Nema rezultata pretrage." searching: "Potražujem..." - post_format: "#{{post_number}} od {{username}}" - results_page: "Pretraži za termin '{{term}}'" + post_format: "#%{post_number} od %{username}" + results_page: "Pretraži za termin '%{term}'" more_results: "Postoji više rezultata. Molimo vas da suzite kriterij za pretragu." cant_find: "Ne možete naći ono što tražite?" start_new_topic: "Možda da započnete novu temu?" @@ -1778,8 +1779,8 @@ bs_BA: search_google_button: "Google" search_google_title: "Pretraži ovaj sajt" context: - user: "Traži postove od @{{username}}" - category: "Traži #{{category}} kategoriju" + user: "Traži postove od @%{username}" + category: "Traži #%{category} kategoriju" topic: "Pretraži ovu temu" private_messages: "Pretraži poruke" advanced: @@ -1853,8 +1854,8 @@ bs_BA: choose_new_category: "Izaberi novu kategoriju za temu:" selected: one: "Označili ste %{count} temu." - few: "Označili ste {{count}} teme." - other: "Označili ste {{count}} teme." + few: "Označili ste %{count} teme." + other: "Označili ste %{count} teme." change_tags: "Zamijeni oznake" append_tags: "Pripoji oznake" choose_new_tags: "Odaberi nove tagove za ove teme:" @@ -1867,7 +1868,7 @@ bs_BA: posted: "Niste odgovorili ni na jednu temu." latest: "Nema više novih tema. To je tužno." bookmarks: "Nemate još bookmark-iranih tema." - category: "Nema više tema u {{category}}." + category: "Nema više tema u %{category}." top: "Nema više popularnih tema." educate: new: '
Vaše nove teme se ovdje pojavljuju.
Načelno, teme se smatraju novim i prikazivat ćenova indikator u slučaju da su objavljena u zadnja 2 dana.
Posjetite svoje postavke ukoliko želite da to izmijenite.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} ha acceptat la vostra invitació" - moved_post: "{{username}} ha mogut {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Heu guanyat '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Tema nou {{description}}" - membership_request_accepted: "Membre acceptat en '{{group_name}}'" + one: "li agrada %{count} de les vostres publicacions" + other: " %{count} de les vostres publicacions té 'M'agrada'" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} ha acceptat la vostra invitació" + moved_post: "%{username} ha mogut %{description}" + linked: "%{username} %{description}" + granted_badge: "Heu guanyat '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Tema nou %{description}" + membership_request_accepted: "Membre acceptat en '%{group_name}'" group_message_summary: - one: "{{count}} missatge en la vostra bústia de {{group_name}}" - other: "{{count}} missatges en la vostra bústia de {{group_name}}" + one: "%{count} missatge en la vostra bústia de %{group_name}" + other: "%{count} missatges en la vostra bústia de %{group_name}" popup: - mentioned: '{{username}} us ha mencionat en "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} us ha mencionat en "{{topic}}" - {{site_title}}' - quoted: '{{username}} us ha citat en "{{topic}}" - {{site_title}}' - replied: '{{username}} us ha respost en "{{topic}}" - {{site_title}}' - posted: '{{username}} publicat en "{{topic}}" - {{site_title}}' - private_message: '{{username}} us ha enviat un missatge personal en "{{topic}}" - {{site_title}}' - linked: '{{username}} ha enllaçat la vostra publicació en "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} ha creat un tema nou "{{topic}}" - {{site_title}}' + mentioned: '%{username} us ha mencionat en "%{topic}" - %{site_title}' + group_mentioned: '%{username} us ha mencionat en "%{topic}" - %{site_title}' + quoted: '%{username} us ha citat en "%{topic}" - %{site_title}' + replied: '%{username} us ha respost en "%{topic}" - %{site_title}' + posted: '%{username} publicat en "%{topic}" - %{site_title}' + private_message: '%{username} us ha enviat un missatge personal en "%{topic}" - %{site_title}' + linked: '%{username} ha enllaçat la vostra publicació en "%{topic}" - %{site_title}' + watching_first_post: '%{username} ha creat un tema nou "%{topic}" - %{site_title}' confirm_title: "Notificacions activades - %{site_title}" confirm_body: "Èxit! S'han habilitat les notificacions." - custom: "Notificació de {{username}} sobre %{site_title}" + custom: "Notificació de %{username} sobre %{site_title}" titles: mentioned: "mencionat" replied: "resposta nova" @@ -1683,9 +1688,9 @@ ca: from_my_computer: "Des del meu dispositiu" from_the_web: "Des de la web" remote_tip: "enllaç a imatge" - remote_tip_with_attachments: "enllaç a imatge o fixer {{authorized_extensions}} " + remote_tip_with_attachments: "enllaç a imatge o fixer %{authorized_extensions} " local_tip: "seleccioneu imatges des del vostre dispositiu" - local_tip_with_attachments: "trieu imatges o fitxers des del vostre dispositiu {{authorized_extensions}}" + local_tip_with_attachments: "trieu imatges o fitxers des del vostre dispositiu %{authorized_extensions}" hint: "(per a carregar-los, també podeu arrossegar-los i deixar-los anar en l'editor)" hint_for_supported_browsers: "també podeu arrossegar i deixar anar o enganxar imatges en l'editor" uploading: "Carregant" @@ -1702,15 +1707,15 @@ ca: clear_all: "Neteja-ho tot" too_short: "El terme de la vostra cerca és massa curt" result_count: - one: "%{count} resultat per a {{term}}" - other: "{{count}}{{plus}} resultats per a{{term}}" + one: "%{count} resultat per a %{term}" + other: "%{count}%{plus} resultats per a%{term}" title: "cerca temes, publicacions, usuaris o categories" full_page_title: "cerca temes o publicacions" no_results: "No hi ha resultats." no_more_results: "No s'han trobat més resultats." searching: "Cercant..." - post_format: "#{{post_number}} per {{username}}" - results_page: "Resultats de la cerca per a '{{term}}'" + post_format: "#%{post_number} per %{username}" + results_page: "Resultats de la cerca per a '%{term}'" more_results: "No hi ha més resultats. Restringiu els criteris de cerca." cant_find: "No podeu trobar el que busqueu?" start_new_topic: "Podeu començar un tema nou." @@ -1719,9 +1724,9 @@ ca: search_google_button: "Google" search_google_title: "Cerca en aquest lloc web" context: - user: "Cerca publicacions de @{{username}}" - category: "Cerca en la categoria #{{category}} " - tag: "Cerca l'etiqueta #{{tag}}" + user: "Cerca publicacions de @%{username}" + category: "Cerca en la categoria #%{category} " + tag: "Cerca l'etiqueta #%{tag}" topic: "Cerca en aquest tema" private_messages: "Cerca missatges" advanced: @@ -1796,7 +1801,7 @@ ca: choose_new_category: "Seleccioneu la categoria nova per als temes:" selected: one: "He seleccionat %{count} tema." - other: "Heu seleccionat {{count}} temes." + other: "Heu seleccionat %{count} temes." change_tags: "Reemplaça etiquetes" append_tags: "Annexa etiquetes" choose_new_tags: "Trieu noves etiquetes per a aquests temes:" @@ -1809,7 +1814,7 @@ ca: posted: "Encara no heu publicat cap tema." latest: "No hi ha temes més recents. És una llàstima." bookmarks: "Encara no heu marcat temes com a preferits." - category: "No hi ha temes de {{category}}." + category: "No hi ha temes de %{category}." top: "No hi ha temes principals." educate: new: '
Els vostres temes nous són aquí.
Per defecte, els temes es consideren nous i mostraran una nova indicació si han estat creats durant els passats 2 dies.
Aneu a les vostres preferències per a canviar-ho.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} přijal vaše pozvání" - moved_post: "{{username}} přesunul {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Získáno '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nové téma {{description}}" + one: "%{username}, %{username2} a %{count} další %{description}" + few: "%{username}, %{username2} a %{count} další %{description}" + many: "%{username}, %{username2} a %{count} dalších %{description}" + other: "%{username}, %{username2} a %{count} dalších %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} přijal vaše pozvání" + moved_post: "%{username} přesunul %{description}" + linked: "%{username} %{description}" + granted_badge: "Získáno '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nové téma %{description}" group_message_summary: - one: "{{count}} zpráva ve schránce skupiny {{group_name}}" - few: "{{count}} zprávy ve schránce skupiny {{group_name}}" - many: "{{count}} zpráv ve schránce skupiny {{group_name}}" - other: "{{count}} zpráv ve schránce skupiny {{group_name}}" + one: "%{count} zpráva ve schránce skupiny %{group_name}" + few: "%{count} zprávy ve schránce skupiny %{group_name}" + many: "%{count} zpráv ve schránce skupiny %{group_name}" + other: "%{count} zpráv ve schránce skupiny %{group_name}" popup: - mentioned: '{{username}} vás zmínil v "{{topic}}" - {{site_title}}' - group_mentioned: 'Uživatel {{username}} vás zmínil v "{{topic}}" - {{site_title}}' - quoted: '{{username}} vás citoval v "{{topic}}" - {{site_title}}' - replied: '{{username}} vám odpověděl v "{{topic}}" - {{site_title}}' - posted: '{{username}} přispěl do "{{topic}}" - {{site_title}}' - private_message: '{{username}} vám poslal soukromou zprávu v "{{topic}}" - {{site_title}}' - linked: '{{username}} odkázal na vás příspěvek v "{{topic}}" - {{site_title}}' + mentioned: '%{username} vás zmínil v "%{topic}" - %{site_title}' + group_mentioned: 'Uživatel %{username} vás zmínil v "%{topic}" - %{site_title}' + quoted: '%{username} vás citoval v "%{topic}" - %{site_title}' + replied: '%{username} vám odpověděl v "%{topic}" - %{site_title}' + posted: '%{username} přispěl do "%{topic}" - %{site_title}' + private_message: '%{username} vám poslal soukromou zprávu v "%{topic}" - %{site_title}' + linked: '%{username} odkázal na vás příspěvek v "%{topic}" - %{site_title}' confirm_title: "Upozornění zapnuta - %{site_title}" confirm_body: "Upozornění úspěšně zapnuta." titles: @@ -1476,9 +1479,9 @@ cs: from_my_computer: "Z mého zařízení" from_the_web: "Z webu" remote_tip: "odkaz na obrázek" - remote_tip_with_attachments: "odkaz na obrázek nebo soubor {{authorized_extensions}}" + remote_tip_with_attachments: "odkaz na obrázek nebo soubor %{authorized_extensions}" local_tip: "vyber obrázky z tvého zařízení" - local_tip_with_attachments: "vyber obrázky nebo soubory ze svého zařízení {{authorized_extensions}}" + local_tip_with_attachments: "vyber obrázky nebo soubory ze svého zařízení %{authorized_extensions}" hint: "(můžete také rovnou soubor do editoru přetáhnout)" hint_for_supported_browsers: "také můžeš obrázky do editoru přetáhnout nebo vložit" uploading: "Nahrávám" @@ -1495,17 +1498,17 @@ cs: clear_all: "Vymazat vše" too_short: "Hledaný výraz je příliš krátký." result_count: - one: "%{count} výsledek pro{{term}}" - few: "{{count}}{{plus}} výsledky pro{{term}}" - many: "{{count}}{{plus}} výsledků pro{{term}}" - other: "{{count}}{{plus}} výsledků pro{{term}}" + one: "%{count} výsledek pro%{term}" + few: "%{count}%{plus} výsledky pro%{term}" + many: "%{count}%{plus} výsledků pro%{term}" + other: "%{count}%{plus} výsledků pro%{term}" title: "vyhledávat témata, příspěvky, uživatele nebo kategorie" full_page_title: "vyhledávat témata nebo příspěvky" no_results: "Nenalezeny žádné výsledky." no_more_results: "Nenalezeny žádné další výsledky." searching: "Hledám ..." - post_format: "#{{post_number}} od {{username}}" - results_page: "Výsledky hledání pro '{{term}}'" + post_format: "#%{post_number} od %{username}" + results_page: "Výsledky hledání pro '%{term}'" more_results: "Existuje více výsledků. Prosím zpřesněte kritéria vyhledávání." cant_find: "Nemůžete najít, co hledáte?" start_new_topic: "Možná vytvořte nové téma?" @@ -1514,8 +1517,8 @@ cs: search_google_button: "Google" search_google_title: "Hledat na tomto webu" context: - user: "Vyhledat příspěvky od @{{username}}" - category: "Hledat v kategorii #{{category}}" + user: "Vyhledat příspěvky od @%{username}" + category: "Hledat v kategorii #%{category}" topic: "Vyhledat v tomto tématu" private_messages: "Hledat ve zprávách" advanced: @@ -1589,9 +1592,9 @@ cs: choose_new_category: "Zvolte novou kategorii pro témata:" selected: one: "Vybrali jste %{count} téma." - few: "Vybrali jste {{count}} témata." - many: "Vybrali jste {{count}} témat." - other: "Vybrali jste {{count}} témat." + few: "Vybrali jste %{count} témata." + many: "Vybrali jste %{count} témat." + other: "Vybrali jste %{count} témat." change_tags: "Zaměnit štítky" append_tags: "Přidat štítky" choose_new_tags: "Zvolte nové tagy pro témata:" @@ -1604,7 +1607,7 @@ cs: posted: "Zatím jste nepřispěli do žádného tématu." latest: "Nejsou tu žádná témata z poslední doby. To je docela smutné." bookmarks: "V tématech nemáte žádné záložky." - category: "V kategorii {{category}} nejsou žádná témata." + category: "V kategorii %{category} nejsou žádná témata." top: "Nejsou tu žádná populární témata." educate: new: '
Zde se zobrazují vaše nová témata.
Dle výchozího nastavení se za nové příspěvky, které budou mít štíteknové , považují příspěvky, které byly vytvořeny během posledních 2 dnů.
Toto můžete změnit ve svém nastavení.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} accepterede din invitation" - moved_post: "{{username}} flyttede {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Optjent '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nyt emne {{description}}" + one: "kunne godt lide %{count} af dine indlæg" + other: "syntes godt om %{count} af dine indlæg" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} accepterede din invitation" + moved_post: "%{username} flyttede %{description}" + linked: "%{username} %{description}" + granted_badge: "Optjent '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nyt emne %{description}" group_message_summary: - one: "{{count}} besked i din {{group_name}} indbakke" - other: "{{count}} beskeder i din {{group_name}} indbakke" + one: "%{count} besked i din %{group_name} indbakke" + other: "%{count} beskeder i din %{group_name} indbakke" popup: - mentioned: '{{username}} nævnte dig i "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} nævnte dig i "{{topic}}" - {{site_title}}' - quoted: '{{username}} citerede dig i "{{topic}}" - {{site_title}}' - replied: '{{username}} svarede dig i "{{topic}}" - {{site_title}}' - posted: '{{username}} skrev i "{{topic}}" - {{site_title}}' - private_message: '{{username}} sendte dig en privat besked i "{{topic}}" - {{site_title}}' - linked: '{{username}} linkede til dit indlæg fra "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} oprettet et nyt emne"{{topic}}" - {{site_title}}' + mentioned: '%{username} nævnte dig i "%{topic}" - %{site_title}' + group_mentioned: '%{username} nævnte dig i "%{topic}" - %{site_title}' + quoted: '%{username} citerede dig i "%{topic}" - %{site_title}' + replied: '%{username} svarede dig i "%{topic}" - %{site_title}' + posted: '%{username} skrev i "%{topic}" - %{site_title}' + private_message: '%{username} sendte dig en privat besked i "%{topic}" - %{site_title}' + linked: '%{username} linkede til dit indlæg fra "%{topic}" - %{site_title}' + watching_first_post: '%{username} oprettet et nyt emne"%{topic}" - %{site_title}' confirm_title: "Notifikationer aktiveret - %{site_title}" confirm_body: "Succes! notifikationer er aktiveret." - custom: "Notifikation fra {{username}}på %{site_title}" + custom: "Notifikation fra %{username}på %{site_title}" titles: mentioned: "nævnte" replied: "nyt svar" @@ -1654,9 +1655,9 @@ da: from_my_computer: "Fra min computer" from_the_web: "Fra nettet" remote_tip: "link til billede" - remote_tip_with_attachments: "link til billede eller fil {{authorized_extensions}}" + remote_tip_with_attachments: "link til billede eller fil %{authorized_extensions}" local_tip: "vælg billeder fra din enhed" - local_tip_with_attachments: "vælg billeder eller filer fra din enhed {{authorized_extensions}}" + local_tip_with_attachments: "vælg billeder eller filer fra din enhed %{authorized_extensions}" hint: "(du kan også trække og slippe ind i editoren for at uploade dem)" hint_for_supported_browsers: "du kan også bruge træk-og-slip eller indsætte billeder i editoren" uploading: "Uploader billede" @@ -1673,15 +1674,15 @@ da: clear_all: "Ryd alle" too_short: "Dit søgekriterie er for kort." result_count: - one: "%{count} resultat for {{term}}" - other: "{{count}}{{plus}} resultater for {{term}}" + one: "%{count} resultat for %{term}" + other: "%{count}%{plus} resultater for %{term}" title: "søg efter emner, indlæg, brugere eller kategorier" full_page_title: "søg emner eller indlæg" no_results: "Ingen resultater fundet." no_more_results: "Ikke flere resultater." searching: "Søger…" - post_format: "#{{post_number}} af {{username}}" - results_page: "Søgeresultater for '{{term}}'" + post_format: "#%{post_number} af %{username}" + results_page: "Søgeresultater for '%{term}'" more_results: "Der er flere resultater. Begræns dine søgekriterier." cant_find: "Kan du ikke finde det, du leder efter?" start_new_topic: "Start måske et nyt emne?" @@ -1690,8 +1691,8 @@ da: search_google_button: "Google" search_google_title: "Søg denne side" context: - user: "Søg i indlæg fra @{{username}}" - category: "Søg i #{{category}} kategorien" + user: "Søg i indlæg fra @%{username}" + category: "Søg i #%{category} kategorien" topic: "Søg i dette emne" private_messages: "Søg i beskeder" advanced: @@ -1766,7 +1767,7 @@ da: choose_new_category: "Vælg den nye kategori for emnerne:" selected: one: "Du har valgt %{count} indlæg." - other: "Du har valgt {{count}} indlæg." + other: "Du har valgt %{count} indlæg." change_tags: "Erstat Tags" append_tags: "Tilføj Tags" choose_new_tags: "Vælg nye tags for dette emne" @@ -1779,7 +1780,7 @@ da: posted: "Du har ikke skrevet nogen indlæg endnu." latest: "Der er ikke nogen nye emner. Det er sørgeligt." bookmarks: "Du har ingen bogmærkede emner endnu." - category: "Der er ingen emner i kategorien {{category}}." + category: "Der er ingen emner i kategorien %{category}." top: "Der er ingen top emner" educate: new: '
Dine nye emner vises her.
Som standard, betragtes emner som ulæste og vil vise en ny indikator hvis de var oprettet indenfor de sidste 2 dage
Du kan ændre dette i dine indstillinger
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} hat deine Einladung angenommen" - moved_post: "{{username}} hat {{description}} verschoben" - linked: "{{username}} {{description}}" - granted_badge: "Du hast '{{description}}' verliehen bekommen" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "New Topic {{description}}" - membership_request_accepted: "Mitgliedschaft akzeptiert in '{{group_name}}' " - membership_request_consolidated: "{{count}} offene Gruppenmitgliedschaftsanfrage/n für die Gruppe '{{group_name}}'" + one: "gefällt %{count} deiner Beiträge" + other: "gefallen %{count} deiner Beiträge" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} hat deine Einladung angenommen" + moved_post: "%{username} hat %{description} verschoben" + linked: "%{username} %{description}" + granted_badge: "Du hast '%{description}' verliehen bekommen" + topic_reminder: "%{username} %{description}" + watching_first_post: "New Topic %{description}" + membership_request_accepted: "Mitgliedschaft akzeptiert in '%{group_name}' " + membership_request_consolidated: "%{count} offene Gruppenmitgliedschaftsanfrage/n für die Gruppe '%{group_name}'" group_message_summary: - one: "{{count}} Nachricht in deinem {{group_name}} Posteingang" - other: "{{count}} Nachrichten in deinem {{group_name}} Posteingang" + one: "%{count} Nachricht in deinem %{group_name} Posteingang" + other: "%{count} Nachrichten in deinem %{group_name} Posteingang" popup: - mentioned: '{{username}} hat dich in "{{topic}}" - {{site_title}} erwähnt' - group_mentioned: '{{username}} hat dich in "{{topic}}" - {{site_title}} erwähnt' - quoted: '{{username}} hat dich in "{{topic}}" - {{site_title}} zitiert' - replied: '{{username}} hat dir in "{{topic}}" - {{site_title}} geantwortet' - posted: '{{username}} hat in "{{topic}}" - {{site_title}} einen Beitrag verfasst' - private_message: '{{username}} hat dir eine Nachricht geschickt in „{{topic}}“ – {{site_title}}' - linked: '{{username}} hat in "{{topic}}" - {{site_title}} einen Beitrag von dir verlinkt' - watching_first_post: '{{username}} hat ein neues Thema "{{topic}}" - {{site_title}} erstellt' + mentioned: '%{username} hat dich in "%{topic}" - %{site_title} erwähnt' + group_mentioned: '%{username} hat dich in "%{topic}" - %{site_title} erwähnt' + quoted: '%{username} hat dich in "%{topic}" - %{site_title} zitiert' + replied: '%{username} hat dir in "%{topic}" - %{site_title} geantwortet' + posted: '%{username} hat in "%{topic}" - %{site_title} einen Beitrag verfasst' + private_message: '%{username} hat dir eine Nachricht geschickt in „%{topic}“ – %{site_title}' + linked: '%{username} hat in "%{topic}" - %{site_title} einen Beitrag von dir verlinkt' + watching_first_post: '%{username} hat ein neues Thema "%{topic}" - %{site_title} erstellt' confirm_title: "Benachrichtigungen aktiviert – %{site_title}" confirm_body: "Erfolgreich! Benachrichtigungen wurden aktiviert." - custom: "Benachrichtigung von {{username}} auf %{site_title}" + custom: "Benachrichtigung von %{username} auf %{site_title}" titles: mentioned: "erwähnte" replied: "neue Antwort" @@ -1727,9 +1729,9 @@ de: from_my_computer: "Von meinem Gerät" from_the_web: "Aus dem Web" remote_tip: "Link zu Bild" - remote_tip_with_attachments: "Link zu Bild oder Datei {{authorized_extensions}}" + remote_tip_with_attachments: "Link zu Bild oder Datei %{authorized_extensions}" local_tip: "wähle auf deinem Gerät gespeicherte Bilder aus" - local_tip_with_attachments: "Wähle Bilder oder Dateien von deinem Gerät aus {{authorized_extensions}}" + local_tip_with_attachments: "Wähle Bilder oder Dateien von deinem Gerät aus %{authorized_extensions}" hint: "(du kannst Dateien auch in den Editor ziehen, um diese hochzuladen)" hint_for_supported_browsers: "du kannst Bilder auch in den Editor ziehen oder diese aus der Zwischenablage einfügen" uploading: "Wird hochgeladen" @@ -1746,15 +1748,15 @@ de: clear_all: "Auswahl aufheben" too_short: "Der Suchbegriff ist zu kurz." result_count: - one: "%{count} Ergebnis für {{term}}" - other: "{{count}}{{plus}} Ergebnisse für {{term}}" + one: "%{count} Ergebnis für %{term}" + other: "%{count}%{plus} Ergebnisse für %{term}" title: "suche nach Themen, Beiträgen, Benutzern oder Kategorien" full_page_title: "suche nach Themen oder Beiträgen" no_results: "Keine Ergebnisse gefunden." no_more_results: "Es wurde keine weiteren Ergebnisse gefunden." searching: "Suche …" - post_format: "#{{post_number}} von {{username}}" - results_page: "Suchergebnisse für '{{term}}'" + post_format: "#%{post_number} von %{username}" + results_page: "Suchergebnisse für '%{term}'" more_results: "Es gibt mehr Ergebnisse. Bitte grenze deine Suchkriterien weiter ein." cant_find: "Nicht gefunden, wonach du suchst?" start_new_topic: "Wie wär’s mit einem neuen Thema?" @@ -1763,9 +1765,9 @@ de: search_google_button: "Google" search_google_title: "Durchsuche diese Seite" context: - user: "Beiträge von @{{username}} durchsuchen" - category: "Kategorie #{{category}} durchsuchen" - tag: "Den #{{tag}} tag suchen" + user: "Beiträge von @%{username} durchsuchen" + category: "Kategorie #%{category} durchsuchen" + tag: "Den #%{tag} tag suchen" topic: "Dieses Thema durchsuchen" private_messages: "Nachrichten durchsuchen" advanced: @@ -1842,7 +1844,7 @@ de: choose_new_category: "Neue Kategorie für die gewählten Themen:" selected: one: "Du hast ein Thema ausgewählt." - other: "Du hast {{count}} Themen ausgewählt." + other: "Du hast %{count} Themen ausgewählt." change_tags: "Schlagwörter ersetzen" append_tags: "Schlagwörter hinzufügen" choose_new_tags: "Neue Schlagwörter für die gewählten Themen wählen:" @@ -1855,7 +1857,7 @@ de: posted: "Du hast noch keine Beiträge verfasst." latest: "Es gibt keine aktuellen Themen. Das ist schade." bookmarks: "Du hast noch keine Themen, in denen du ein Lesezeichen gesetzt hast." - category: "Es gibt keine Themen in {{category}}." + category: "Es gibt keine Themen in %{category}." top: "Es gibt keine Top-Themen." educate: new: '
Hier werden neue Themen angezeigt.
Standardmäßig werden jene Themen als neu angesehen und mit dem neu Indikator versehen, die in den letzten 2 Tagen erstellt wurden.
Du kannst das in deinen Einstellungen ändern.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} αποδέχτηκε την πρόσκλησή σου" - moved_post: "{{username}} μετακίνησε {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Έλαβες '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Νέο Νήμα {{description}}" + one: "%{username}, %{username2} και %{count} ακόμα %{description}" + other: "%{username}, %{username2} και %{count} ακόμα %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} αποδέχτηκε την πρόσκλησή σου" + moved_post: "%{username} μετακίνησε %{description}" + linked: "%{username} %{description}" + granted_badge: "Έλαβες '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Νέο Νήμα %{description}" group_message_summary: - one: "{{count}} μήνυμα στα εισερχόμενα της ομάδας {{group_name}}" - other: "{{count}} μηνύματα στα εισερχόμενα της ομάδας {{group_name}} " + one: "%{count} μήνυμα στα εισερχόμενα της ομάδας %{group_name}" + other: "%{count} μηνύματα στα εισερχόμενα της ομάδας %{group_name} " popup: - mentioned: '{{username}} σε ανέφερε στο "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} σε ανέφερε στο "{{topic}}" - {{site_title}}' - quoted: '{{username}} σε παράθεσε στο "{{topic}}" - {{site_title}}' - replied: '{{username}} σου απάντησε στο "{{topic}}" - {{site_title}}' - posted: '{{username}} ανάρτησε στο "{{topic}}" - {{site_title}}' - linked: '{{username}} έκανε μια σύνδεση στην ανάρτηση που έκανες στο νήμα "{{topic}}" - {{site_title}}' + mentioned: '%{username} σε ανέφερε στο "%{topic}" - %{site_title}' + group_mentioned: '%{username} σε ανέφερε στο "%{topic}" - %{site_title}' + quoted: '%{username} σε παράθεσε στο "%{topic}" - %{site_title}' + replied: '%{username} σου απάντησε στο "%{topic}" - %{site_title}' + posted: '%{username} ανάρτησε στο "%{topic}" - %{site_title}' + linked: '%{username} έκανε μια σύνδεση στην ανάρτηση που έκανες στο νήμα "%{topic}" - %{site_title}' titles: watching_first_post: "νέο νήμα" upload_selector: @@ -1199,9 +1202,9 @@ el: from_my_computer: "Από τη συσκευή μου" from_the_web: "Από το διαδίκτυο" remote_tip: "υπερσύνδεσμος προς μια εικόνα" - remote_tip_with_attachments: "σύνδεσμος σε εικόνα ή αρχείο {{authorized_extensions}}" + remote_tip_with_attachments: "σύνδεσμος σε εικόνα ή αρχείο %{authorized_extensions}" local_tip: "επιλογή εικόνων από τη συσκευή σου" - local_tip_with_attachments: "επίλεξε εικόνες ή αρχεία από τη συσκευή σου {{authorized_extensions}}" + local_tip_with_attachments: "επίλεξε εικόνες ή αρχεία από τη συσκευή σου %{authorized_extensions}" hint: "(μπορείς επίσης να τα σύρεις με το ποντίκι στον editor για να τα ανεβάσεις)" hint_for_supported_browsers: "μπορείς επίσης να σύρεις ή να επικόλλησεις εικόνες στον editor" uploading: "Ανεβαίνει" @@ -1221,8 +1224,8 @@ el: no_results: "Δε βρέθηκαν αποτελέσματα." no_more_results: "Δε βρέθηκαν άλλα αποτελέσματα" searching: "Ψάχνω ..." - post_format: "#{{post_number}} από {{username}}" - results_page: "Αποτελέσματα αναζήτησης για '{{term}}'" + post_format: "#%{post_number} από %{username}" + results_page: "Αποτελέσματα αναζήτησης για '%{term}'" more_results: "Υπάρχουν περισσότερα αποτελέσματα. Παρακαλούμε περιορίστε την αναζήτησή σας." cant_find: "Δεν μπορείτε να βρείτε αυτό που ψάχνετε;" start_new_topic: "Ίσως να ξεκινούσατε ένα νέο νήμα;" @@ -1231,8 +1234,8 @@ el: search_google_button: "Google" search_google_title: "Αναζήτηση στην ιστοσελίδα" context: - user: "Ψάξε στις αναρτήσεις του χρήστη @{{username}}" - category: "Αναζήτηση στην κατηγορία #{{category}} " + user: "Ψάξε στις αναρτήσεις του χρήστη @%{username}" + category: "Αναζήτηση στην κατηγορία #%{category} " topic: "Ψάξε σε αυτό το νήμα" private_messages: "Αναζήτηση στα μηνύματα" advanced: @@ -1295,7 +1298,7 @@ el: choose_new_category: "Διάλεξε νέα κατηγορία για τα νήματα:" selected: one: "Έχεις διαλέξει %{count} νήμα." - other: "Έχεις διαλέξει {{count}} νήματα." + other: "Έχεις διαλέξει %{count} νήματα." change_tags: "Αντικατάσταση Ετικετών " append_tags: "Προσάρτηση Ετικετών " choose_new_tags: "Επίλεξε καινούριες ετικέτες για αυτά τα νήματα:" @@ -1308,7 +1311,7 @@ el: posted: "Δεν έχεις αναρτήσει σε κάποιο νήμα ακόμη." latest: "Δεν υπάρχουν νέα νήματα. Αυτό είναι λυπηρό." bookmarks: "Δεν έχεις βάλει σελιδοδείκτη σε κανένα νήμα." - category: "Δεν υπάρχουν νήματα στην κατηγορία {{category}}." + category: "Δεν υπάρχουν νήματα στην κατηγορία %{category}." top: "Δεν υπάρχουν κορυφαία νήματα." educate: new: '
Τα νέα σου νήματα εμφανίζονται εδώ.
Από προεπιλογή, τα νήματα συζητήσεων θεωρούνται καινούρια και θα δείχνουν ένα καινούριο δείκτη εαν έχουν δημιουργηθεί τις τελευταίες 2 μέρες.
Επισκέψου τις προτιμήσεις σου για να το αλλάξεις αυτό.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} accepted your invitation" - moved_post: "{{username}} moved {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Earned '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "New Topic {{description}}" - membership_request_accepted: "Membership accepted in '{{group_name}}'" - membership_request_consolidated: "{{count}} open membership requests for '{{group_name}}'" + one: "liked %{count} of your posts" + other: "liked %{count} of your posts" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} accepted your invitation" + moved_post: "%{username} moved %{description}" + linked: "%{username} %{description}" + granted_badge: "Earned '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "New Topic %{description}" + membership_request_accepted: "Membership accepted in '%{group_name}'" + membership_request_consolidated: "%{count} open membership requests for '%{group_name}'" group_message_summary: - one: "{{count}} message in your {{group_name}} inbox" - other: "{{count}} messages in your {{group_name}} inbox" + one: "%{count} message in your %{group_name} inbox" + other: "%{count} messages in your %{group_name} inbox" popup: - mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}' - quoted: '{{username}} quoted you in "{{topic}}" - {{site_title}}' - replied: '{{username}} replied to you in "{{topic}}" - {{site_title}}' - posted: '{{username}} posted in "{{topic}}" - {{site_title}}' - private_message: '{{username}} sent you a personal message in "{{topic}}" - {{site_title}}' - linked: '{{username}} linked to your post from "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} created a new topic "{{topic}}" - {{site_title}}' + mentioned: '%{username} mentioned you in "%{topic}" - %{site_title}' + group_mentioned: '%{username} mentioned you in "%{topic}" - %{site_title}' + quoted: '%{username} quoted you in "%{topic}" - %{site_title}' + replied: '%{username} replied to you in "%{topic}" - %{site_title}' + posted: '%{username} posted in "%{topic}" - %{site_title}' + private_message: '%{username} sent you a personal message in "%{topic}" - %{site_title}' + linked: '%{username} linked to your post from "%{topic}" - %{site_title}' + watching_first_post: '%{username} created a new topic "%{topic}" - %{site_title}' confirm_title: "Notifications enabled - %{site_title}" confirm_body: "Success! Notifications have been enabled." - custom: "Notification from {{username}} on %{site_title}" + custom: "Notification from %{username} on %{site_title}" titles: mentioned: "mentioned" @@ -1937,9 +1966,9 @@ en: from_my_computer: "From my device" from_the_web: "From the web" remote_tip: "link to image" - remote_tip_with_attachments: "link to image or file {{authorized_extensions}}" + remote_tip_with_attachments: "link to image or file %{authorized_extensions}" local_tip: "select images from your device" - local_tip_with_attachments: "select images or files from your device {{authorized_extensions}}" + local_tip_with_attachments: "select images or files from your device %{authorized_extensions}" hint: "(you can also drag & drop into the editor to upload them)" hint_for_supported_browsers: "you can also drag and drop or paste images into the editor" uploading: "Uploading" @@ -1957,15 +1986,15 @@ en: clear_all: "Clear All" too_short: "Your search term is too short." result_count: - one: "%{count} result for{{term}}" - other: "{{count}}{{plus}} results for{{term}}" + one: "%{count} result for%{term}" + other: "%{count}%{plus} results for%{term}" title: "search topics, posts, users, or categories" full_page_title: "search topics or posts" no_results: "No results found." no_more_results: "No more results found." searching: "Searching ..." - post_format: "#{{post_number}} by {{username}}" - results_page: "Search results for '{{term}}'" + post_format: "#%{post_number} by %{username}" + results_page: "Search results for '%{term}'" more_results: "There are more results. Please narrow your search criteria." cant_find: "Can’t find what you’re looking for?" start_new_topic: "Perhaps start a new topic?" @@ -1975,9 +2004,9 @@ en: search_google_title: "Search this site" context: - user: "Search posts by @{{username}}" - category: "Search the #{{category}} category" - tag: "Search the #{{tag}} tag" + user: "Search posts by @%{username}" + category: "Search the #%{category} category" + tag: "Search the #%{tag} tag" topic: "Search this topic" private_messages: "Search messages" @@ -2057,7 +2086,7 @@ en: choose_new_category: "Choose the new category for the topics:" selected: one: "You have selected %{count} topic." - other: "You have selected {{count}} topics." + other: "You have selected %{count} topics." change_tags: "Replace Tags" append_tags: "Append Tags" choose_new_tags: "Choose new tags for these topics:" @@ -2071,7 +2100,7 @@ en: posted: "You haven't posted in any topics yet." latest: "There are no latest topics. That's sad." bookmarks: "You have no bookmarked topics yet." - category: "There are no {{category}} topics." + category: "There are no %{category} topics." top: "There are no top topics." educate: new: '
Your new topics appear here.
By default, topics are considered new and will show a new indicator if they were created in the last 2 days.
Visit your preferences to change this.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} aceptó tu invitación" - moved_post: "{{username}} movió {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Ganaste '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nuevo tema {{description}}" - membership_request_accepted: "Membresía aceptada en «{{group_name}}»" - membership_request_consolidated: "{{count}} solicitudes de membresía abiertas para '{{group_name}}'" + one: "le ha dado me gusta a %{count} de tus mensajes" + other: "le ha dado me gusta a %{count} de tus publicaciones" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} aceptó tu invitación" + moved_post: "%{username} movió %{description}" + linked: "%{username} %{description}" + granted_badge: "Ganaste '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nuevo tema %{description}" + membership_request_accepted: "Membresía aceptada en «%{group_name}»" + membership_request_consolidated: "%{count} solicitudes de membresía abiertas para '%{group_name}'" group_message_summary: - one: "{{count}} mensaje en tu bandeja de {{group_name}}" - other: "{{count}} mensajes en tu bandeja de {{group_name}} " + one: "%{count} mensaje en tu bandeja de %{group_name}" + other: "%{count} mensajes en tu bandeja de %{group_name} " popup: - mentioned: '{{username}} te mencionó en «{{topic}}» - {{site_title}}' - group_mentioned: '{{username}} te mencionó en «{{topic}}» - {{site_title}}' - quoted: '{{username}} te citó en «{{topic}}» - {{site_title}}' - replied: '{{username}} te respondió en «{{topic}}» - {{site_title}}' - posted: '{{username}} publicó en «{{topic}}» - {{site_title}}' - private_message: '{{username}} te envió un mensaje personal en «{{topic}}» - {{site_title}}' - linked: '{{username}} enlazó tu publicación desde «{{topic}}» - {{site_title}}' - watching_first_post: '{{username}} creó un nuevo tema «{{topic}}» - {{site_title}}' + mentioned: '%{username} te mencionó en «%{topic}» - %{site_title}' + group_mentioned: '%{username} te mencionó en «%{topic}» - %{site_title}' + quoted: '%{username} te citó en «%{topic}» - %{site_title}' + replied: '%{username} te respondió en «%{topic}» - %{site_title}' + posted: '%{username} publicó en «%{topic}» - %{site_title}' + private_message: '%{username} te envió un mensaje personal en «%{topic}» - %{site_title}' + linked: '%{username} enlazó tu publicación desde «%{topic}» - %{site_title}' + watching_first_post: '%{username} creó un nuevo tema «%{topic}» - %{site_title}' confirm_title: "Notificaciones activadas - %{site_title}" confirm_body: "¡Éxito! Se han activado las notificaciones." - custom: "Notificación de {{username}} en %{site_title}" + custom: "Notificación de %{username} en %{site_title}" titles: mentioned: "mencionado" replied: "nueva respuesta" @@ -1739,9 +1761,9 @@ es: from_my_computer: "Desde mi dispositivo" from_the_web: "Desde la web" remote_tip: "enlace a la imagen" - remote_tip_with_attachments: "enlace a imagen o archivo {{authorized_extensions}}" + remote_tip_with_attachments: "enlace a imagen o archivo %{authorized_extensions}" local_tip: "selecciona las imágenes de tu dispositivo" - local_tip_with_attachments: "selecciona imágenes o archivos de tu dispositivo {{authorized_extensions}}" + local_tip_with_attachments: "selecciona imágenes o archivos de tu dispositivo %{authorized_extensions}" hint: "(también puedes arrastrarlos al editor para subirlos)" hint_for_supported_browsers: "puedes también arrastrar o pegar imágenes en el editor" uploading: "Subiendo" @@ -1758,15 +1780,15 @@ es: clear_all: "Limpiar todo" too_short: "El término de búsqueda es demasiado corto." result_count: - one: "%{count} resultado para{{term}}" - other: "{{count}}{{plus}} resultados para{{term}}" + one: "%{count} resultado para%{term}" + other: "%{count}%{plus} resultados para%{term}" title: "buscar temas, publicaciones, usuarios o categorías" full_page_title: "buscar temas o publicaciones" no_results: "No se encontró ningún resultado." no_more_results: "No se encontraron más resultados." searching: "Buscando ..." - post_format: "#{{post_number}} de {{username}}" - results_page: "Resultados de búsqueda de «{{term}}»" + post_format: "#%{post_number} de %{username}" + results_page: "Resultados de búsqueda de «%{term}»" more_results: "Hay más resultados. Por favor, restringe los criterios de búsqueda." cant_find: "¿No puedes encontrar lo que estás buscando?" start_new_topic: "¿Y si creas un nuevo tema?" @@ -1775,9 +1797,9 @@ es: search_google_button: "Google" search_google_title: "Busca en este sitio" context: - user: "Buscar publicaciones de @{{username}}" - category: "Buscar la categoría #{{category}}" - tag: "Buscar la etiqueta #{{tag}} " + user: "Buscar publicaciones de @%{username}" + category: "Buscar la categoría #%{category}" + tag: "Buscar la etiqueta #%{tag} " topic: "Buscar en este tema" private_messages: "Buscar en mensajes" advanced: @@ -1785,13 +1807,13 @@ es: posted_by: label: Publicado por in_category: - label: Categorizado + label: Categoría in_group: label: En el grupo with_badge: label: Con la medalla with_tags: - label: Etiquetado + label: Etiquetas filters: label: Solo temas/mensajes que... title: coincide el título únicamente @@ -1821,7 +1843,7 @@ es: count: label: Número mínimo de publicaciones time: - label: Publicó + label: Fecha de publicación before: antes de after: después de hamburger_menu: "ir a otra lista de temas o categoría" @@ -1854,7 +1876,7 @@ es: choose_new_category: "Elige la nueva categoría de los temas:" selected: one: "Has seleccionado %{count} tema." - other: "Has seleccionado {{count}} temas." + other: "Has seleccionado %{count} temas." change_tags: "Remplazar etiquetas" append_tags: "Agregar etiquetas" choose_new_tags: "Elige etiquetas nuevas para estos temas:" @@ -1867,7 +1889,7 @@ es: posted: "Todavía no has publicado en ningún tema." latest: "No hay temas recientes. Qué pena." bookmarks: "Todavía no tienes temas guardados en marcadores." - category: "No hay temas con la categoría {{category}}." + category: "No hay temas con la categoría %{category}." top: "No hay temas destacados." educate: new: '
Tus temas nuevos aparecen aquí.
Por defecto, los temas se consideran nuevos y mostrarán un indicador de nuevo si fueron creados en los últimos 2 días.
Configura tus preferencias para cambiar esto.
¡No se puede deshacer!
Para continuar, escribe: %{text}
%{text}
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} võttis su kutse vastu" - moved_post: "{{username}} moved {{description}}" - linked: "{{username}} {{description}}" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "New Topic {{description}}" + mentioned: "%{username} %{description}" + group_mentioned: "%{username} %{description}" + quoted: "%{username} %{description}" + bookmark_reminder: "%{username} %{description}" + replied: "%{username} %{description}" + posted: "%{username} %{description}" + edited: "%{username} %{description}" + liked: "%{username} %{description}" + liked_2: "%{username}, %{username2} %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} võttis su kutse vastu" + moved_post: "%{username} moved %{description}" + linked: "%{username} %{description}" + topic_reminder: "%{username} %{description}" + watching_first_post: "New Topic %{description}" popup: - mentioned: '{{username}} mainis Sind teemas "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} mainis Sind teemas "{{topic}}" - {{site_title}}' - quoted: '{{username}} tsiteeris Sind teemas "{{topic}}" - {{site_title}}' - replied: '{{username}} vastas Sulle teemas "{{topic}}" - {{site_title}}' - posted: '{{username}} postitas teemasse "{{topic}}" - {{site_title}}' - linked: '{{username}} viitas Sinu postitusele teemas "{{topic}}" - {{site_title}}' + mentioned: '%{username} mainis Sind teemas "%{topic}" - %{site_title}' + group_mentioned: '%{username} mainis Sind teemas "%{topic}" - %{site_title}' + quoted: '%{username} tsiteeris Sind teemas "%{topic}" - %{site_title}' + replied: '%{username} vastas Sulle teemas "%{topic}" - %{site_title}' + posted: '%{username} postitas teemasse "%{topic}" - %{site_title}' + linked: '%{username} viitas Sinu postitusele teemas "%{topic}" - %{site_title}' titles: watching_first_post: "uus teema" upload_selector: @@ -1275,9 +1278,9 @@ et: from_my_computer: "Minu seadmest" from_the_web: "Veebist" remote_tip: "viide pildile" - remote_tip_with_attachments: "viide pildile või failile {{authorized_extensions}}" + remote_tip_with_attachments: "viide pildile või failile %{authorized_extensions}" local_tip: "vali pildid oma seadmest" - local_tip_with_attachments: "vali pildid või failid oma seadmest {{authorized_extensions}}" + local_tip_with_attachments: "vali pildid või failid oma seadmest %{authorized_extensions}" hint: "(üleslaadimiseks võid faili ka redaktorisse pukseerida)" hint_for_supported_browsers: "võid pildi redaktorisse ka pukseerida või kleepida" uploading: "Laen üles" @@ -1297,12 +1300,12 @@ et: no_results: "Ei leidnud midagi." no_more_results: "Rohkem vasteid pole." searching: "Otsin..." - post_format: "postituse nr{{post_number}} tegi {{username}}" + post_format: "postituse nr%{post_number} tegi %{username}" search_google_button: "Google" search_google_title: "Otsi sellelt saidilt" context: - user: "Otsi kasutaja @{{username}} postitusi" - category: "Otsi #{{category}} foorumist" + user: "Otsi kasutaja @%{username} postitusi" + category: "Otsi #%{category} foorumist" topic: "Otsi sellest teemast" private_messages: "Otsi sõnumeid" advanced: @@ -1372,7 +1375,7 @@ et: choose_new_category: "Vali teemadele uus foorum:" selected: one: "Märkisid ära %{count} teema." - other: "Märkisid ära {{count}} teemat." + other: "Märkisid ära %{count} teemat." change_tags: "Asenda sildid" append_tags: "Lisa sildid" choose_new_tags: "Vali teemadele uued sildid:" @@ -1385,7 +1388,7 @@ et: posted: "Sa ei ole veel ühtegi teemasse postitanud." latest: "Ühtegi värsket teemat pole. Nukker." bookmarks: "Sul ei ole veel ühtegi järjehoidjaga teemal." - category: "Foorumis {{category}} teemad puuduvad." + category: "Foorumis %{category} teemad puuduvad." top: "Tippteemad puuduvad." educate: new: '
Sinu uued teemad ilmuvad siia.
Teemad loetakse vaikimisi uuteks ja tähistatakse indikaatoriga uus, kui nad loodi viimase 2 ööpäeva jooksul.
Muutmiseks külasta oma eelistuste lehekülge.
{{username}}{{description}}" - invited_to_topic: "{{username}}{{description}}" - invitee_accepted: "{{username}}دعوت شما را پذیرفت" - moved_post: "{{username}} منتقل کرد {{description}}" - linked: "{{username}}{{description}}" - granted_badge: "به دست آوردید '{{description}}'" - topic_reminder: "{{username}}{{description}}" - watching_first_post: "مبحث جدید{{description}}" - membership_request_accepted: "عضویت در {{group_name}} پذیرفتهشد" + one: "%{count}نوشته ی شما را پسندید" + other: "%{count}نوشته ی شما را پسندید" + liked_consolidated: "%{username}%{description}" + private_message: "%{username}%{description}" + invited_to_private_message: "
%{username}%{description}" + invited_to_topic: "%{username}%{description}" + invitee_accepted: "%{username}دعوت شما را پذیرفت" + moved_post: "%{username} منتقل کرد %{description}" + linked: "%{username}%{description}" + granted_badge: "به دست آوردید '%{description}'" + topic_reminder: "%{username}%{description}" + watching_first_post: "مبحث جدید%{description}" + membership_request_accepted: "عضویت در %{group_name} پذیرفتهشد" group_message_summary: - one: "{{count}}پیام در اینباکس {{group_name}}" - other: "{{count}}پیام در اینباکس {{group_name}}" + one: "%{count}پیام در اینباکس %{group_name}" + other: "%{count}پیام در اینباکس %{group_name}" popup: - mentioned: '{{username}} در "{{topic}}" - {{site_title}} به شما اشاره کرد' - group_mentioned: '{{username}} به شما در "{{topic}}" - {{site_title}} اشاره نمود' - quoted: '{{username}} از شما در "{{topic}}" - {{site_title}} نقل قول کرد ' - replied: '{{username}} در "{{topic}}" - {{site_title}} به شما پاسخ داد' - posted: '{{username}} در "{{topic}}" - {{site_title}} مطلبی نوشت' - private_message: '{{username}} برای شما یک پیام خصوصی در "{{topic}}" - {{site_title}} ارسال کرد' - linked: '{{username}} در "{{topic}}" - {{site_title}} به نوشتهی شما پیوندی قرار داد' - watching_first_post: '{{username}} یک مبحث جدید در "{{topic}}" - {{site_title}} ساخته' + mentioned: '%{username} در "%{topic}" - %{site_title} به شما اشاره کرد' + group_mentioned: '%{username} به شما در "%{topic}" - %{site_title} اشاره نمود' + quoted: '%{username} از شما در "%{topic}" - %{site_title} نقل قول کرد ' + replied: '%{username} در "%{topic}" - %{site_title} به شما پاسخ داد' + posted: '%{username} در "%{topic}" - %{site_title} مطلبی نوشت' + private_message: '%{username} برای شما یک پیام خصوصی در "%{topic}" - %{site_title} ارسال کرد' + linked: '%{username} در "%{topic}" - %{site_title} به نوشتهی شما پیوندی قرار داد' + watching_first_post: '%{username} یک مبحث جدید در "%{topic}" - %{site_title} ساخته' confirm_title: "اعلانات فعال شد - %{site_title}" confirm_body: "موفق شدید. اگاهسازیها فعال شدند." - custom: "اعلان از طرف {{username}} بر روی %{site_title}" + custom: "اعلان از طرف %{username} بر روی %{site_title}" titles: mentioned: "احضار شده" replied: "پاسخ جدید" @@ -1703,9 +1704,9 @@ fa_IR: from_my_computer: "از دستگاه من" from_the_web: "از وب" remote_tip: "پیوند به تصویر" - remote_tip_with_attachments: "پیوند به عکس یا فایل {{authorized_extensions}}" + remote_tip_with_attachments: "پیوند به عکس یا فایل %{authorized_extensions}" local_tip: "عکس ها را از روی سیستم خود انتخاب کنید" - local_tip_with_attachments: "عکس ها یا فایل ها را از دستگاه خود انتخاب کنید {{authorized_extensions}}" + local_tip_with_attachments: "عکس ها یا فایل ها را از دستگاه خود انتخاب کنید %{authorized_extensions}" hint: "(برای آپلود می توانید فایل را کشیده و در ویرایشگر متن رها کنید)" hint_for_supported_browsers: "شما همچنین میتوانید عکس ها را به داخل ویرایشگر بکشید و رها کنید یا کپی کنید" uploading: "در حال بروزرسانی " @@ -1726,8 +1727,8 @@ fa_IR: no_results: "چیزی یافت نشد." no_more_results: "نتایجی بیشتری یافت نشد." searching: "در حال جستجو..." - post_format: "#{{post_number}} توسط {{username}}" - results_page: "نتایج جستجو برای '{{term}}'" + post_format: "#%{post_number} توسط %{username}" + results_page: "نتایج جستجو برای '%{term}'" more_results: "نتایج بیشتری موجود است. لطفاً معیارهای جستوجوی خود را محدودتر کنید." cant_find: "چیزی را که به دنبالش بودید نیافتید؟" start_new_topic: "شاید باید یک موضوع جدید را شروع کنید؟" @@ -1736,8 +1737,8 @@ fa_IR: search_google_button: "گوگل" search_google_title: "جستجو در سایت" context: - user: "جستجوی نوشتهها با @{{username}}" - category: "جستجوی دستهبندی #{{category}}" + user: "جستجوی نوشتهها با @%{username}" + category: "جستجوی دستهبندی #%{category}" topic: "جستجوی این موضوع" private_messages: "جستجوی پیامها" advanced: @@ -1812,8 +1813,8 @@ fa_IR: notification_level: "اعلانها" choose_new_category: "یک دستهبندی جدید برای موضوع انتخاب نمایید" selected: - one: "شما {{count}} موضوع را انتخاب کرده اید." - other: "شما {{count}} موضوع را انتخاب کرده اید." + one: "شما %{count} موضوع را انتخاب کرده اید." + other: "شما %{count} موضوع را انتخاب کرده اید." change_tags: "جایگزینی برچسبها" append_tags: "افزودن برچسبها" choose_new_tags: "انتخاب برچسبهای جدید برای این موضوعات:" @@ -1826,7 +1827,7 @@ fa_IR: posted: "هنوز در هیچ موضوعی نوشته نگذاشتهاید." latest: "هیچ موضوع تازهای نیست. چه بد!" bookmarks: "هنوز هیچ موضوع نشانکداری ندارید." - category: "هیچ موضوعی در {{category}} نیست." + category: "هیچ موضوعی در %{category} نیست." top: "موضوع برتری وجود ندارد." educate: new: "
موضوعات جدید در اینجا نمایش داده میشوند.
به صورت پیشفرض موضوعات جدید با علامت جدیدنمایش داده میشوند\n موضوعاتی که کمتر از 2 روز از ایجادشان گذشته جدید هستند. برای تغییر این مقدار روی گزینه
تنظیمات کلیک کنید.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} hyväksyi kutsusi" - moved_post: "{{username}} siirsi {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Ansaitsit '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Uusi ketju {{description}}" - membership_request_accepted: "Hyväksyttiin ryhmään '{{group_name}}'" - membership_request_consolidated: "{{count}} odottavaa jäsenhakemusta ryhmään {{group_name}}" + one: "tykkäsi %{count} viestistäsi" + other: "tykkäsi %{count} viestistäsi" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} hyväksyi kutsusi" + moved_post: "%{username} siirsi %{description}" + linked: "%{username} %{description}" + granted_badge: "Ansaitsit '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Uusi ketju %{description}" + membership_request_accepted: "Hyväksyttiin ryhmään '%{group_name}'" + membership_request_consolidated: "%{count} odottavaa jäsenhakemusta ryhmään %{group_name}" group_message_summary: - one: "{{count}} viesti ryhmän {{group_name}} saapuneissa" - other: "{{count}} viestiä ryhmän {{group_name}} saapuneissa" + one: "%{count} viesti ryhmän %{group_name} saapuneissa" + other: "%{count} viestiä ryhmän %{group_name} saapuneissa" popup: - mentioned: '{{username}} mainitsi sinut ketjussa "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} mainitsi sinut ketjussa "{{topic}}" - {{site_title}}' - quoted: '{{username}} lainasi sinua ketjussa "{{topic}}" - {{site_title}}' - replied: '{{username}} vastasi sinulle ketjussa "{{topic}}" - {{site_title}}' - posted: '{{username}} vastasi ketjuun "{{topic}}" - {{site_title}}' - private_message: '{{username}} lähetti sinulle yksityisviestin keskustelussa "{{topic}}" - {{site_title}}' - linked: '{{username}} linkitti viestiisi ketjusta "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} loi uuden ketjun "{{topic}}" - {{site_title}}' + mentioned: '%{username} mainitsi sinut ketjussa "%{topic}" - %{site_title}' + group_mentioned: '%{username} mainitsi sinut ketjussa "%{topic}" - %{site_title}' + quoted: '%{username} lainasi sinua ketjussa "%{topic}" - %{site_title}' + replied: '%{username} vastasi sinulle ketjussa "%{topic}" - %{site_title}' + posted: '%{username} vastasi ketjuun "%{topic}" - %{site_title}' + private_message: '%{username} lähetti sinulle yksityisviestin keskustelussa "%{topic}" - %{site_title}' + linked: '%{username} linkitti viestiisi ketjusta "%{topic}" - %{site_title}' + watching_first_post: '%{username} loi uuden ketjun "%{topic}" - %{site_title}' confirm_title: "Ilmoitukset käytössä - %{site_title}" confirm_body: "Onnistui! Ilmoitukset ovat nyt käytössä." - custom: "Ilmoitus käyttäjältä {{username}} sivustolla %{site_title}" + custom: "Ilmoitus käyttäjältä %{username} sivustolla %{site_title}" titles: mentioned: "mainitsi" replied: "uusi vastaus" @@ -1762,9 +1764,9 @@ fi: from_my_computer: "Tästä laitteesta" from_the_web: "Netistä" remote_tip: "linkki kuvaan" - remote_tip_with_attachments: "linkki kuvaan tai tiedostoon {{authorized_extensions}}" + remote_tip_with_attachments: "linkki kuvaan tai tiedostoon %{authorized_extensions}" local_tip: "valitse kuvia laitteeltasi" - local_tip_with_attachments: "valitse kuvia tai tiedostoja laitteeltasi {{authorized_extensions}}" + local_tip_with_attachments: "valitse kuvia tai tiedostoja laitteeltasi %{authorized_extensions}" hint: "(voit myös raahata ne editoriin ladataksesi ne sivustolle)" hint_for_supported_browsers: "voit myös raahata tai liittää kuvia editoriin" uploading: "Lähettää" @@ -1781,15 +1783,15 @@ fi: clear_all: "Tyhjennä kaikki" too_short: "Hakusana on liian lyhyt." result_count: - one: "%{count} tulos haulle{{term}}" - other: "{{count}}{{plus}} tulosta haulle{{term}}" + one: "%{count} tulos haulle%{term}" + other: "%{count}%{plus} tulosta haulle%{term}" title: "etsi ketjuja, viestejä, käyttäjiä tai alueita" full_page_title: "etsi ketjuja tai viestejä" no_results: "Ei tuloksia." no_more_results: "Enempää tuloksia ei löytynyt." searching: "Etsitään ..." - post_format: "#{{post_number}} käyttäjältä {{username}}" - results_page: "Tulokset hakusanalle '{{term}}'" + post_format: "#%{post_number} käyttäjältä %{username}" + results_page: "Tulokset hakusanalle '%{term}'" more_results: "Tuloksia olisi enemmänkin. Rajaa hakuasi." cant_find: "Etkö löydä etsimääsi?" start_new_topic: "Haluaisitko aloittaa uuden ketjun?" @@ -1798,9 +1800,9 @@ fi: search_google_button: "Google" search_google_title: "Hae tältä sivustolta" context: - user: "Etsi @{{username}} viestejä" - category: "Etsi alueelta #{{category}}" - tag: "Hae tunnistetta #{{tag}}" + user: "Etsi @%{username} viestejä" + category: "Etsi alueelta #%{category}" + tag: "Hae tunnistetta #%{tag}" topic: "Etsi tästä ketjusta" private_messages: "Etsi viesteistä" advanced: @@ -1877,7 +1879,7 @@ fi: choose_new_category: "Valitse uusi alue ketjuille:" selected: one: "Olet valinnut yhden ketjun." - other: "Olet valinnut {{count}} ketjua." + other: "Olet valinnut %{count} ketjua." change_tags: "Korvaa tunnisteet" append_tags: "Lisää tunnisteita" choose_new_tags: "Valitse tunnisteet näille ketjuille:" @@ -1890,7 +1892,7 @@ fi: posted: "Et ole kirjoittanut vielä yhteenkään ketjuun." latest: "Tuoreimpia ketjuja ei ole. Onpa harmi." bookmarks: "Et ole vielä merkinnyt kirjanmerkkejä." - category: "Alueella {{category}} ei ole ketjua." + category: "Alueella %{category} ei ole ketjua." top: "Kuumia ketjuja ei ole." educate: new: '
Sinulle uudet ketjut näytetään tässä.
Ketju tulkitaan uudeksi ja sen yhteydessä näytetään uusi-merkintä, jos se on aloitettu edellisten kahden päivän aikana.
Aikarajaa voit muuttaa käyttäjäasetuksissasi.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} a accepté votre invitation" - moved_post: "{{username}} a deplacé {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Vous avez gagné « {{description}} »" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nouveau sujet {{description}}" - membership_request_accepted: "Adhésion acceptée dans « {{group_name}} »" - membership_request_consolidated: "{{count}} demandes d'adhésion ouvertes pour « {{group_name}} »" + one: "a aimé %{count} de vos messages" + other: "a aimé %{count} de vos messages" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} a accepté votre invitation" + moved_post: "%{username} a deplacé %{description}" + linked: "%{username} %{description}" + granted_badge: "Vous avez gagné « %{description} »" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nouveau sujet %{description}" + membership_request_accepted: "Adhésion acceptée dans « %{group_name} »" + membership_request_consolidated: "%{count} demandes d'adhésion ouvertes pour « %{group_name} »" group_message_summary: - one: "{{count}} message dans la boîte de réception de {{group_name}}" - other: "{{count}} messages dans la boîte de réception de {{group_name}}" + one: "%{count} message dans la boîte de réception de %{group_name}" + other: "%{count} messages dans la boîte de réception de %{group_name}" popup: - mentioned: '{{username}} vous a mentionné dans « {{topic}} » - {{site_title}}' - group_mentioned: '{{username}} vous a mentionné dans « {{topic}} » - {{site_title}}' - quoted: '{{username}} vous a cité dans « {{topic}} » - {{site_title}}' - replied: '{{username}} vous a répondu dans « {{topic}} » - {{site_title}}' - posted: '{{username}} a posté dans « {{topic}} » - {{site_title}}' - private_message: '{{username}} vous a envoyé un message direct dans « {{topic}} » - {{site_title}}' - linked: '{{username}} a créé un lien vers votre message posté dans « {{topic}} » - {{site_title}}' - watching_first_post: '{{username}} a crée un nouveau sujet « {{topic}} » - {{site_title}}' + mentioned: '%{username} vous a mentionné dans « %{topic} » - %{site_title}' + group_mentioned: '%{username} vous a mentionné dans « %{topic} » - %{site_title}' + quoted: '%{username} vous a cité dans « %{topic} » - %{site_title}' + replied: '%{username} vous a répondu dans « %{topic} » - %{site_title}' + posted: '%{username} a posté dans « %{topic} » - %{site_title}' + private_message: '%{username} vous a envoyé un message direct dans « %{topic} » - %{site_title}' + linked: '%{username} a créé un lien vers votre message posté dans « %{topic} » - %{site_title}' + watching_first_post: '%{username} a crée un nouveau sujet « %{topic} » - %{site_title}' confirm_title: "Notifications activées - %{site_title}" confirm_body: "Les notifications ont été activées." - custom: "Notification de {{username}} sur %{site_title}" + custom: "Notification de %{username} sur %{site_title}" titles: mentioned: "mentionné" replied: "nouvelle réponse" @@ -1763,9 +1787,9 @@ fr: from_my_computer: "Depuis mon appareil" from_the_web: "Depuis le web" remote_tip: "lien vers l'image" - remote_tip_with_attachments: "lien vers l'image ou le fichier {{authorized_extensions}}" + remote_tip_with_attachments: "lien vers l'image ou le fichier %{authorized_extensions}" local_tip: "sélectionnez des images depuis votre appareil" - local_tip_with_attachments: "sélectionnez des images ou des fichiers depuis votre appareil {{authorized_extensions}}" + local_tip_with_attachments: "sélectionnez des images ou des fichiers depuis votre appareil %{authorized_extensions}" hint: "(vous pouvez également faire un glisser-déposer dans l'éditeur pour les envoyer)" hint_for_supported_browsers: "vous pouvez aussi glisser-déposer ou coller des images dans l'éditeur" uploading: "En cours d'envoi" @@ -1782,26 +1806,26 @@ fr: clear_all: "Tout désélectionner" too_short: "Votre terme de recherche est trop court." result_count: - one: "%{count} résultat pour{{term}}" - other: "{{count}}{{plus}} résultats pour{{term}}" + one: "%{count} 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…" - post_format: "#{{post_number}} par {{username}}" - results_page: "Résultats de recherche pour « {{term}} »" - more_results: "Il y a d'autres résultats. Merci de préciser vos critères de recherche." + post_format: "#%{post_number} par %{username}" + results_page: "Résultats de recherche pour « %{term} »" + more_results: "Il y a des résultats supplémentaires. Veuillez raffiner vos critères de recherche." cant_find: "Vous ne trouvez pas ce que vous cherchez ?" start_new_topic: "Voulez-vous commencer un nouveau sujet ?" - or_search_google: "Ou essayez plutôt de chercher avec Google :" - search_google: "Essayez plutôt de chercher avec Google :" + or_search_google: "Ou essayez plutôt de rechercher avec Google :" + search_google: "Essayez plutôt de rechercher avec Google :" search_google_button: "Google" search_google_title: "Rechercher dans ce site" context: - user: "Rechercher dans les messages de @{{username}}" - category: "Rechercher dans la catégorie #{{category}}" - tag: "Rechercher dans l'étiquette #{{tag}}" + user: "Rechercher dans les messages de @%{username}" + category: "Rechercher dans la catégorie #%{category}" + tag: "Rechercher dans l'étiquette #%{tag}" topic: "Rechercher dans ce sujet" private_messages: "Rechercher dans les messages directs" advanced: @@ -1853,7 +1877,7 @@ fr: go_back: "retour" not_logged_in_user: "page utilisateur avec un résumé de l'activité et les préférences " current_user: "aller à votre page utilisateur" - view_all: "Tout voir" + view_all: "tout voir" topics: new_messages_marker: "dernière visite" bulk: @@ -1866,9 +1890,9 @@ fr: dismiss: "Ignorer" dismiss_read: "Ignorer tous les sujets non lus" dismiss_button: "Ignorer…" - dismiss_tooltip: "Ignorer les nouveaux messages ou arrêter de suivre les sujets" + dismiss_tooltip: "Ignorer les nouveaux messages uniquement ou arrêter de suivre les sujets" also_dismiss_topics: "Arrêter de suivre ces sujets pour qu'ils ne soient plus jamais marqués comme non lus" - dismiss_new: "Ignorer les nouveaux" + dismiss_new: "Ignorer les nouveaux sujets" toggle: "basculer la sélection multiple de sujets" actions: "Actions sur la sélection" change_category: "Définir la catégorie" @@ -1878,7 +1902,7 @@ fr: choose_new_category: "Choisissez la nouvelle catégorie pour les sujets :" selected: one: "Vous avez sélectionné %{count} sujet." - other: "Vous avez sélectionné {{count}} sujets." + other: "Vous avez sélectionné %{count} sujets." change_tags: "Changer les étiquettes" append_tags: "Ajouter les étiquettes" choose_new_tags: "Choisissez de nouvelles étiquettes pour ces sujets :" @@ -1891,7 +1915,7 @@ fr: posted: "Vous n'avez écrit aucun message pour le moment." latest: "Il n'y a aucun sujet pour le moment. C'est triste…" bookmarks: "Vous n'avez pas encore mis de signets à des sujets." - category: "Il n'y a pas de sujets dans {{category}}." + category: "Il n'y a pas de sujets dans %{category}." top: "Il n'y a pas de meilleurs sujets." educate: new: '
Vos nouveaux sujets apparaissent ici.
Par défaut, les sujets sont considérés comme nouveaux et affichent l''indicateur nouveau lorsqu''ils ont été créés depuis moins de 2 jours.
Vous pouvez modifier cela dans vos préférences.
Aquí aparecen os teus temas novos.
De xeito predeterminado, os temas considéranse novos e amosan un indicador novo se se crearon nos últimos dous días.
Podes ir ás preferencias para cambiar este axuste.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} אישר/ה את ההזמנה שלך" - moved_post: "{{username}} עבר {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "הרווחת '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "נושא חדש {{description}}" - membership_request_accepted: "התקבלת לחברות בקבוצה ‚{{group_name}}’" - membership_request_consolidated: "{{count}} בקשות חברות פתוחות מול ‚{{group_name}}’" + one: "אהבו פוסט %{count} שלך" + two: "אהבו %{count} מהפוסטים שלך" + many: "אהבו %{count} מהפוסטים שלך" + other: "אהבו %{count} מהפוסטים שלך" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} אישר/ה את ההזמנה שלך" + moved_post: "%{username} עבר %{description}" + linked: "%{username} %{description}" + granted_badge: "הרווחת '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "נושא חדש %{description}" + membership_request_accepted: "התקבלת לחברות בקבוצה ‚%{group_name}’" + membership_request_consolidated: "%{count} בקשות חברות פתוחות מול ‚%{group_name}’" group_message_summary: - one: "הודעה {{count}} בתיבת ה{{group_name}} שלך" - two: "{{count}} הודעות בתיבת ה{{group_name}} שלך" - many: "{{count}} הודעות בתיבת ה{{group_name}} שלך" - other: "{{count}} הודעות בתיבת ה{{group_name}} שלך" + one: "הודעה %{count} בתיבת ה%{group_name} שלך" + two: "%{count} הודעות בתיבת ה%{group_name} שלך" + many: "%{count} הודעות בתיבת ה%{group_name} שלך" + other: "%{count} הודעות בתיבת ה%{group_name} שלך" popup: - mentioned: '{{username}} הזכיר/ה אותך ב{{topic}}" - {{site_title}}"' - group_mentioned: 'הוזכרת על ידי {{username}} בנושא „{{topic}}” - {{site_title}}' - quoted: '{{username}} ציטט/ה אותך ב"{{topic}}" - {{site_title}}' - replied: '{{username}} הגיב/ה לך ב"{{topic}}" - {{site_title}}' - posted: '{{username}} הגיב/ה ב"{{topic}}" - {{site_title}}' - private_message: '{{username}} שלח לך הודעה פרטית ב"{{topic}}" - {{site_title}}' - linked: 'הפוסט שלך קושר על ידי {{username}} מתוך „{{topic}}” - {{site_title}}' - watching_first_post: '{{username}} יצר נושא חדש "{{topic}}" - {{site_title}}' + mentioned: '%{username} הזכיר/ה אותך ב%{topic}" - %{site_title}"' + group_mentioned: 'הוזכרת על ידי %{username} בנושא „%{topic}” - %{site_title}' + quoted: '%{username} ציטט/ה אותך ב"%{topic}" - %{site_title}' + replied: '%{username} הגיב/ה לך ב"%{topic}" - %{site_title}' + posted: '%{username} הגיב/ה ב"%{topic}" - %{site_title}' + private_message: '%{username} שלח לך הודעה פרטית ב"%{topic}" - %{site_title}' + linked: 'הפוסט שלך קושר על ידי %{username} מתוך „%{topic}” - %{site_title}' + watching_first_post: '%{username} יצר נושא חדש "%{topic}" - %{site_title}' confirm_title: "התראות הופעלו - %{site_title}" confirm_body: "הצלחה! התראות הופעלו" - custom: "התראה מ־{{username}} באתר %{site_title}" + custom: "התראה מ־%{username} באתר %{site_title}" titles: mentioned: "אוזכר" replied: "תגובה חדשה" @@ -1890,9 +1906,9 @@ he: from_my_computer: "מהמחשב שלי" from_the_web: "מהאינטרנט" remote_tip: "קישור לתמונה" - remote_tip_with_attachments: "קישור לתמונה או לקובץ {{authorized_extensions}}" + remote_tip_with_attachments: "קישור לתמונה או לקובץ %{authorized_extensions}" local_tip: "בחרו תמונות ממכשירכם" - local_tip_with_attachments: "בחירת תמונות או קבצים מהמכשיר שלך {{authorized_extensions}}" + local_tip_with_attachments: "בחירת תמונות או קבצים מהמכשיר שלך %{authorized_extensions}" hint: "(ניתן גם לגרור לעורך להעלאה)" hint_for_supported_browsers: "תוכלו גם לגרור או להדביק תמונות לעורך" uploading: "מעלה" @@ -1909,17 +1925,17 @@ he: clear_all: "נקוי של הכל" too_short: "ביטוי החיפוש שלך קצר מידי." result_count: - one: "תוצאה אחת עבור {{term}}" - two: "{{count}}{{plus}} תוצאות עבור {{term}}" - many: "{{count}}{{plus}} תוצאות עבור{{term}}" - other: "{{count}}{{plus}} תוצאות עבור {{term}}" + one: "תוצאה אחת עבור %{term}" + two: "%{count}%{plus} תוצאות עבור %{term}" + many: "%{count}%{plus} תוצאות עבור%{term}" + other: "%{count}%{plus} תוצאות עבור %{term}" title: "חיפוש נושאים, פוסטים, משתמשים או קטגוריות" full_page_title: "חפש נושאים או פוסטים" no_results: "אין תוצאות." no_more_results: "לא נמצאו עוד תוצאות." searching: "מחפש ..." - post_format: "#{{post_number}} מאת {{username}}" - results_page: "חפש תוצאות עבור '{{term}}'" + post_format: "#%{post_number} מאת %{username}" + results_page: "חפש תוצאות עבור '%{term}'" more_results: "יש עוד תוצאות. אנא צמצם את קריטריוני החיפוש." cant_find: "לא מצליחים למצוא את מה שחיפשתם?" start_new_topic: "אולי תפתחו נושא חדש?" @@ -1928,9 +1944,9 @@ he: search_google_button: "גוגל" search_google_title: "חפש אתר זה" context: - user: "חיפוש פוסטים לפי @{{username}}" - category: "חפשו את הקטגוריה #{{category}}" - tag: "חיפוש אחר התגית #{{tag}}" + user: "חיפוש פוסטים לפי @%{username}" + category: "חפשו את הקטגוריה #%{category}" + tag: "חיפוש אחר התגית #%{tag}" topic: "חפשו בנושא זה" private_messages: "חיפוש הודעות" advanced: @@ -2004,16 +2020,16 @@ he: close_topics: "סגירת נושאים" archive_topics: "ארכוב נושאים" notification_level: "התראות" - choose_new_category: "בחרו את הקטגוריה עבור הנושאים:" + choose_new_category: "נא לבחור קטגוריה לנושאים:" selected: one: "בחרת בנושא אחד." - two: "בחרת ב־{{count}} נושאים." - many: "בחרת ב־{{count}} נושאים." - other: "בחרת ב־{{count}} נושאים." + two: "בחרת ב־%{count} נושאים." + many: "בחרת ב־%{count} נושאים." + other: "בחרת ב־%{count} נושאים." change_tags: "החלפת תגים" append_tags: "הוספת תגים" - choose_new_tags: "בחרו בתגיות חדשות עבור נושאים אלו:" - choose_append_tags: "בחרו תגים חדשים להוסיף לנושאים הללו:" + choose_new_tags: "בחירה בתגיות חדשות לנושאים אלו:" + choose_append_tags: "בחירה בתגיות חדשות שיתווספו לנושאים אלו:" changed_tags: "התגיות של נושאים אלו השתנו." none: unread: "אין לך נושאים שלא נקראו." @@ -2022,7 +2038,7 @@ he: posted: "עדיין לא פרסמתם באף נושא." latest: "אין נושאים אחרונים. זה עצוב." bookmarks: "אין לך עדיין סימניות לנושאים." - category: "אין נושאים בקטגוריה {{category}}." + category: "אין נושאים בקטגוריה %{category}." top: "אין נושאים מובילים." educate: new: '
הנושאים החדשים שלך יופיעו כאן.
כבררת מחדל, נושאים נחשבים חדשים ויופיעו עם המחוון חדש אם הם נוצרו ביומיים האחרונים
ניתן לבקר בעמוד ההעדפות שלך כדי לשנות זאת.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} elfogadta a meghívásodat" - linked: "{{username}} {{description}}" - granted_badge: "Megszerzett '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Új téma{{description}} " + one: "%{username}, %{username2} %{count} más %{description}" + other: "%{username}, %{username2} és %{count} mások %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} elfogadta a meghívásodat" + linked: "%{username} %{description}" + granted_badge: "Megszerzett '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Új téma%{description} " group_message_summary: - one: "{{count}} Üzenet a {{group_name}} postaládában" - other: "{{count}} Üzenetek a {{group_name}} postaládában" + one: "%{count} Üzenet a %{group_name} postaládában" + other: "%{count} Üzenetek a %{group_name} postaládában" popup: - mentioned: '{{username}} megemlített itt: "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} megemlített téged "{{topic}}" - {{site_title}} témakörben' - quoted: '{{username}} idézett itt: "{{topic}}" - {{site_title}}' - replied: '{{username}} válaszolt neked itt: "{{topic}}" - {{site_title}}' - posted: '{{username}} hozzászólt itt: "{{topic}}" - {{site_title}}' - private_message: '{{username}} küldött egy személyes üzenetet itt: "{{topic}}" - {{site_title}}' + mentioned: '%{username} megemlített itt: "%{topic}" - %{site_title}' + group_mentioned: '%{username} megemlített téged "%{topic}" - %{site_title} témakörben' + quoted: '%{username} idézett itt: "%{topic}" - %{site_title}' + replied: '%{username} válaszolt neked itt: "%{topic}" - %{site_title}' + posted: '%{username} hozzászólt itt: "%{topic}" - %{site_title}' + private_message: '%{username} küldött egy személyes üzenetet itt: "%{topic}" - %{site_title}' confirm_title: "Értesítések bekapcsolva - %{site_title}" confirm_body: "Siker! Értesítések engedélyezve." + custom: "Értesítés %{username} felhasználótól itt: %{site_title}" titles: watching_first_post: "új téma" post_approved: "bejegyzés jóváhagyva" @@ -1502,7 +1506,7 @@ hu: from_the_web: "Az internetről" remote_tip: "kép linkje" local_tip: "Kép kiválasztása a készülékről" - local_tip_with_attachments: "Képek vagy fájlok kiválasztása a készülékről {{authorized_extensions}}" + local_tip_with_attachments: "Képek vagy fájlok kiválasztása a készülékről %{authorized_extensions}" uploading: "Feltöltés" select_file: "File kiválasztása." default_image_alt_text: Kép @@ -1521,15 +1525,15 @@ hu: no_results: "Nincs eredmény." no_more_results: "Nincs több találat." searching: "Keresés ..." - post_format: "#{{post_number}} általa: {{username}}" - results_page: "Keresési eredmény: '{{term}}'" + post_format: "#%{post_number} általa: %{username}" + results_page: "Keresési eredmény: '%{term}'" start_new_topic: "Esetleg kezdj egy új témát?" or_search_google: "Vagy helyette próbálj meg a Googlén keresni:" search_google: "Helyette próbálj meg a Googlén keresni:" search_google_button: "Google" search_google_title: "Keresés az oldalon" context: - user: "Keresés @{{username}} bejegyzései között" + user: "Keresés @%{username} bejegyzései között" topic: "Keresés ebben a témakörben" private_messages: "Üzenetek keresése" advanced: @@ -1587,7 +1591,7 @@ hu: posted: "Még egy témakörhöz sem szóltál hozzá." latest: "Szomorú, de nem állnak rendelkezésre friss témakörök." bookmarks: "Még nem adtál hozzá témakört a könyvjelzőidhez." - category: "Nincsenek témakörök a {{category}} kategóriában." + category: "Nincsenek témakörök a %{category} kategóriában." top: "Nincsenek top témák" educate: new: '
Itt jelennek meg az új témáid.
Alapértelmezés szerint a témák újnak számítanak, és új jelzővel szereplenek, ha az elmúlt 2 napban készültek.
Látogasd meg a beállításokat, ha ezen változtatni szeretnél.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}}-ը ընդունել է Ձեր հրավերը" - moved_post: "{{username}}-ը տեղափոխել է {{description}}-ը" - linked: "{{username}} {{description}}" - granted_badge: "Վասատկել է '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Նոր Թեմա {{description}}" - membership_request_accepted: "Անդամակցության հարցումը ընդունվել է՝ '{{group_name}}'" - membership_request_consolidated: "{{count}} բաց անդամակցության հարցումներ '{{group_name}}' " + one: "հավանել է Ձեր %{count} գրառում" + other: "հավանել է Ձեր %{count} գրառումը" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username}-ը ընդունել է Ձեր հրավերը" + moved_post: "%{username}-ը տեղափոխել է %{description}-ը" + linked: "%{username} %{description}" + granted_badge: "Վասատկել է '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Նոր Թեմա %{description}" + membership_request_accepted: "Անդամակցության հարցումը ընդունվել է՝ '%{group_name}'" + membership_request_consolidated: "%{count} բաց անդամակցության հարցումներ '%{group_name}' " group_message_summary: - one: "{{count}} հաղորդագրություն Ձեր {{group_name}} մուտքային արկղում" - other: "{{count}} հաղորդագրություն Ձեր {{group_name}}-ի մուտքային արկղում" + one: "%{count} հաղորդագրություն Ձեր %{group_name} մուտքային արկղում" + other: "%{count} հաղորդագրություն Ձեր %{group_name}-ի մուտքային արկղում" popup: - mentioned: '{{username}}-ը հիշատակել է Ձեզ այստեղ՝ "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}}-ը հիշատակել է Ձեզ այստեղ՝ "{{topic}}" - {{site_title}}' - quoted: '{{username}}-ը մեջբերել է Ձեզ այստեղ՝ "{{topic}}" - {{site_title}}' - replied: '{{username}}-ը պատասխանել է Ձեզ այստեղ՝ "{{topic}}" - {{site_title}}' - posted: '{{username}}-ը գրառում է կատարել այստեղ՝ "{{topic}}" - {{site_title}}' - private_message: '{{username}}-ը ուղարկել է Ձեզ անձնական հաղորդագրություն այստեղ՝ "{{topic}}" - {{site_title}}' - linked: '{{username}}-ը "{{topic}}" - {{site_title}}"-ից հղում է կատարել Ձեր գրառմանը:' - watching_first_post: '{{username}} -ը ստեղծել է նոր թեմա՝ "{{topic}}" - {{site_title}}' + mentioned: '%{username}-ը հիշատակել է Ձեզ այստեղ՝ "%{topic}" - %{site_title}' + group_mentioned: '%{username}-ը հիշատակել է Ձեզ այստեղ՝ "%{topic}" - %{site_title}' + quoted: '%{username}-ը մեջբերել է Ձեզ այստեղ՝ "%{topic}" - %{site_title}' + replied: '%{username}-ը պատասխանել է Ձեզ այստեղ՝ "%{topic}" - %{site_title}' + posted: '%{username}-ը գրառում է կատարել այստեղ՝ "%{topic}" - %{site_title}' + private_message: '%{username}-ը ուղարկել է Ձեզ անձնական հաղորդագրություն այստեղ՝ "%{topic}" - %{site_title}' + linked: '%{username}-ը "%{topic}" - %{site_title}"-ից հղում է կատարել Ձեր գրառմանը:' + watching_first_post: '%{username} -ը ստեղծել է նոր թեմա՝ "%{topic}" - %{site_title}' confirm_title: "Ծանուցումները միացված են. %{site_title}" confirm_body: "Հաջողվեց! Ծանուցումները միացված են:" - custom: "Ծանուցում {{username}} -ից մինչև %{site_title}" + custom: "Ծանուցում %{username} -ից մինչև %{site_title}" titles: mentioned: "Հիշատակված " replied: "նոր պատասխան" @@ -1711,9 +1713,9 @@ hy: from_my_computer: "Իմ սարքից" from_the_web: "Համացանցից" remote_tip: "նկարի հղումը" - remote_tip_with_attachments: "նկարի կամ ֆայլի հղում՝ {{authorized_extensions}}" + remote_tip_with_attachments: "նկարի կամ ֆայլի հղում՝ %{authorized_extensions}" local_tip: "ընտրեք նկարներ Ձեր սարքից" - local_tip_with_attachments: "ընտրեք նկարներ կամ ֆայլեր Ձեր սարքից՝ {{authorized_extensions}}" + local_tip_with_attachments: "ընտրեք նկարներ կամ ֆայլեր Ձեր սարքից՝ %{authorized_extensions}" hint: "(վերբեռնելու համար կարող եք նաև քաշել և գցել խմբագրիչի մեջ)" hint_for_supported_browsers: "Դուք կարող եք նաև քաշել և գցել կամ տեղադրել նկարները խմբագրիչի մեջ" uploading: "Վերբեռնվում է" @@ -1730,15 +1732,15 @@ hy: clear_all: "Մաքրել Բոլորը" too_short: "Ձեր որոնման տեքստը շատ կարճ է:" result_count: - one: "%{count} result for{{term}}" - other: "{{count}}{{plus}} արդյունք{{term}}-ի համար" + one: "%{count} result for%{term}" + other: "%{count}%{plus} արդյունք%{term}-ի համար" title: "որոնել թեմաներ, հաղորդագրություններ, օգտատերեր կամ կատեգորիաներ" full_page_title: "որոնել թեմաներ կամ հաղորդագրություններ" no_results: "Արդյունքներ չեն գտնվել:" no_more_results: "Արդյունքներ այլևս չեն գտնվել:" searching: "Փնտրվում է..." - post_format: "#{{post_number}} {{username}}-ի կողմից" - results_page: "Որոնել արդյունքները '{{term}}'-ի համար" + post_format: "#%{post_number} %{username}-ի կողմից" + results_page: "Որոնել արդյունքները '%{term}'-ի համար" more_results: "Գտնվել են բազմաթիվ արդյունքներ: Խնդրում ենք հստակեցնել Ձեր որոնման չափանիշները:" cant_find: "Չե՞ք կարողանում գտնել այն, ինչ փնտրում էիք:" start_new_topic: "Միգուցե՞ սկսեք նոր թեմա:" @@ -1747,9 +1749,9 @@ hy: search_google_button: "Google" search_google_title: "Որոնել այս կայքում" context: - user: "Որոնել @{{username}}-ի գրառումները" - category: "Որոնել #{{category}} կատեգորիայում" - tag: "Որոնում #{{tag}} թեգով" + user: "Որոնել @%{username}-ի գրառումները" + category: "Որոնել #%{category} կատեգորիայում" + tag: "Որոնում #%{tag} թեգով" topic: "Որոնել այս թեմայում" private_messages: "Որոնել հաղորդագրություններում" advanced: @@ -1826,7 +1828,7 @@ hy: choose_new_category: "Ընտրել նոր կատեգորիա թեմաների համար՝" selected: one: "Դուք ընտրել եք %{count} թեմա:" - other: "Դուք ընտրել եք {{count}} թեմա:" + other: "Դուք ընտրել եք %{count} թեմա:" change_tags: "Փոխարինել Թեգերը" append_tags: "Ավելացնել Թեգեր" choose_new_tags: "Ընտրել նոր թեգեր այս թեմաների համար՝" @@ -1839,7 +1841,7 @@ hy: posted: "Դուք դեռևս գրառում չեք կատարել ոչ մի թեմայում:" latest: "Վերջերս կատարված հրապարակումներ չկան: Տխուր է:" bookmarks: "Դուք դեռևս չունեք էջանշված թեմաներ:" - category: " {{category}}-ում թեմաներ չկան:" + category: " %{category}-ում թեմաներ չկան:" top: "Թոփ թեմաներ չկան:" educate: new: '
Ձեր նոր թեմաները ցույց կտրվեն այստեղ:
Սկզբում թեմաները համարվում են նոր և ցույց է տրվում նոր ցուցիչը, եթե նրանք ստեղծվել են վերջին 2 օրվա ընթացում:
Սա փոփոխելու համար բացեք Ձեր նախընտրությունները:
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} ha accettato il tuo invito" - moved_post: "{{username}} spostato {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Guadagnato '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nuovo Argomento {{description}}" - membership_request_accepted: "Iscrizione accettata in "{{group_name}}"" - membership_request_consolidated: "{{count}} richieste di iscrizione aperte per '{{group_name}}'" + one: "ha messo \"mi piace\" ad %{count} tuo messaggio" + other: "ha messo \"mi piace\" a %{count} dei tuoi messaggi" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} ha accettato il tuo invito" + moved_post: "%{username} spostato %{description}" + linked: "%{username} %{description}" + granted_badge: "Guadagnato '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nuovo Argomento %{description}" + membership_request_accepted: "Iscrizione accettata in "%{group_name}"" + membership_request_consolidated: "%{count} richieste di iscrizione aperte per '%{group_name}'" group_message_summary: - one: "{{count}} messaggi in arrivo nella casella {{group_name}}" - other: "{{count}} messaggi in arrivo nella casella {{group_name}}" + one: "%{count} messaggi in arrivo nella casella %{group_name}" + other: "%{count} messaggi in arrivo nella casella %{group_name}" popup: - mentioned: '{{username}} ti ha menzionato in "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} ti ha menzionato in "{{topic}}" - {{site_title}}' - quoted: '{{username}} ti ha citato in "{{topic}}" - {{site_title}}' - replied: '{{username}} ti ha risposto in "{{topic}}" - {{site_title}}' - posted: '{{username}} ha pubblicato in "{{topic}}" - {{site_title}}' - private_message: '{{username}} ti ha inviato un messaggio personale in "{{topic}}" - {{site_title}}' - linked: '{{username}} ha aggiunto un collegamento a un tuo messaggio da "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} ha creato il nuovo argomento "{{topic}}" - {{site_title}}' + mentioned: '%{username} ti ha menzionato in "%{topic}" - %{site_title}' + group_mentioned: '%{username} ti ha menzionato in "%{topic}" - %{site_title}' + quoted: '%{username} ti ha citato in "%{topic}" - %{site_title}' + replied: '%{username} ti ha risposto in "%{topic}" - %{site_title}' + posted: '%{username} ha pubblicato in "%{topic}" - %{site_title}' + private_message: '%{username} ti ha inviato un messaggio personale in "%{topic}" - %{site_title}' + linked: '%{username} ha aggiunto un collegamento a un tuo messaggio da "%{topic}" - %{site_title}' + watching_first_post: '%{username} ha creato il nuovo argomento "%{topic}" - %{site_title}' confirm_title: "Notifiche abilitate - %{site_title}" confirm_body: "Successo! Le notifiche sono state abilitate." - custom: "Notifica di {{username}} su %{site_title}" + custom: "Notifica di %{username} su %{site_title}" titles: mentioned: "menzionato" replied: "nuova risposta" @@ -1766,9 +1768,9 @@ it: from_my_computer: "Dal mio dispositivo" from_the_web: "Dal web" remote_tip: "collegamento all'immagine" - remote_tip_with_attachments: "collegamento all'immagine o al file {{authorized_extensions}}" + remote_tip_with_attachments: "collegamento all'immagine o al file %{authorized_extensions}" local_tip: "seleziona immagini dal tuo dispositivo" - local_tip_with_attachments: "seleziona immagini o file dal tuo dispositivo {{authorized_extensions}}" + local_tip_with_attachments: "seleziona immagini o file dal tuo dispositivo %{authorized_extensions}" hint: "(puoi anche trascinarle nell'editor per caricarle)" hint_for_supported_browsers: "puoi fare il \"trascina e rilascia\" o incollare immagini nell'editor" uploading: "In caricamento" @@ -1785,15 +1787,15 @@ it: clear_all: "Cancella Tutto" too_short: "La tua chiave di ricerca è troppo corta." result_count: - one: "%{count} risultato per{{term}}" - other: "{{count}}{{plus}} risultati per{{term}}" + one: "%{count} risultato per%{term}" + other: "%{count}%{plus} risultati per%{term}" title: "cerca argomenti, messaggi, utenti o categorie" full_page_title: "Cerca negli Argomenti o nei Messaggi" no_results: "Nessun risultato trovato." no_more_results: "Nessun altro risultato trovato." searching: "Ricerca in corso..." - post_format: "#{{post_number}} da {{username}}" - results_page: "Risultati della ricerca per '{{term}}'" + post_format: "#%{post_number} da %{username}" + results_page: "Risultati della ricerca per '%{term}'" more_results: "Ci sono più risultati. Restringi i criteri di ricerca." cant_find: "Non riesci a trovare quello che stai cercando?" start_new_topic: "Forse vuoi avviare un nuovo argomento?" @@ -1802,9 +1804,9 @@ it: search_google_button: "Google" search_google_title: "Cerca nel sito" context: - user: "Cerca messaggi di @{{username}}" - category: "Cerca nella categoria #{{category}}" - tag: "Cerca l'etichetta #{{tag}}" + user: "Cerca messaggi di @%{username}" + category: "Cerca nella categoria #%{category}" + tag: "Cerca l'etichetta #%{tag}" topic: "Cerca in questo argomento" private_messages: "Cerca messaggi" advanced: @@ -1881,7 +1883,7 @@ it: choose_new_category: "Scegli la nuova categoria per gli argomenti:" selected: one: "Hai selezionato %{count} argomento." - other: "Hai selezionato {{count}} argomenti." + other: "Hai selezionato %{count} argomenti." change_tags: "Sostituire Etichette" append_tags: "Aggiungi Etichette" choose_new_tags: "Scegli nuove etichette per i seguenti argomenti:" @@ -1894,7 +1896,7 @@ it: posted: "Non hai ancora scritto in nessun argomento." latest: "Non ci sono argomenti più recenti. Ciò è triste." bookmarks: "Non hai ancora argomenti nei segnalibri." - category: "Non ci sono argomenti in {{category}}." + category: "Non ci sono argomenti in %{category}." top: "Non ci sono argomenti di punta." educate: new: '
Qui compaiono i nuovi argomenti.
Per difetto, gli argomenti vengono considerati nuovi e mostrano l''indicatore nuovo se sono stati creati negli ultimi 2 giorni.
Puoi cambiare questa configurazione nelle tue preferenze.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} があなたの招待を受理しました" - moved_post: "{{username}} は {{description}} を移動しました" - linked: "{{username}} {{description}}" - granted_badge: "'{{description}}'バッジをゲット!" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "新しいトピック {{description}}" + other: "%{username}, %{username2} 、他 %{count} 人 %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} があなたの招待を受理しました" + moved_post: "%{username} は %{description} を移動しました" + linked: "%{username} %{description}" + granted_badge: "'%{description}'バッジをゲット!" + topic_reminder: "%{username} %{description}" + watching_first_post: "新しいトピック %{description}" group_message_summary: - other: "{{group_name}} 宛のメッセージが {{count}} 通あります" + other: "%{group_name} 宛のメッセージが %{count} 通あります" popup: - mentioned: '"{{topic}}"で{{username}} にメンションされました - {{site_title}}' - group_mentioned: '"{{topic}}"で{{username}} にメンションされました - {{site_title}}' - quoted: '"{{topic}}"で{{username}}が引用しました - {{site_title}}' - replied: '{{username}}が"{{topic}}"へ返信しました - {{site_title}}' - posted: '{{username}} が投稿しました "{{topic}}" - {{site_title}}' - linked: '"{{topic}}"にあるあなたの投稿に{{username}}がリンクしました - {{site_title}}' + mentioned: '"%{topic}"で%{username} にメンションされました - %{site_title}' + group_mentioned: '"%{topic}"で%{username} にメンションされました - %{site_title}' + quoted: '"%{topic}"で%{username}が引用しました - %{site_title}' + replied: '%{username}が"%{topic}"へ返信しました - %{site_title}' + posted: '%{username} が投稿しました "%{topic}" - %{site_title}' + linked: '"%{topic}"にあるあなたの投稿に%{username}がリンクしました - %{site_title}' confirm_body: "成功!通知を可能にしました!" titles: watching_first_post: "新着トピック" @@ -1404,9 +1406,9 @@ ja: from_my_computer: "このデバイスから" from_the_web: "Web から" remote_tip: "画像へのリンク" - remote_tip_with_attachments: "画像かファイルへのリンク {{authorized_extensions}}" + remote_tip_with_attachments: "画像かファイルへのリンク %{authorized_extensions}" local_tip: "ローカルからアップロードする画像を選択" - local_tip_with_attachments: "デバイスから画像/ファイルを選択する {{authorized_extensions}}" + local_tip_with_attachments: "デバイスから画像/ファイルを選択する %{authorized_extensions}" hint: "(アップロードする画像をエディタにドラッグ&ドロップすることもできます)" hint_for_supported_browsers: "ドラッグ&ドロップあるいはエディター内に画像を貼り付けてください。" uploading: "アップロード中" @@ -1426,7 +1428,7 @@ ja: no_results: "何も見つかりませんでした。" no_more_results: "検索結果は以上です。" searching: "検索中..." - post_format: "#{{post_number}} {{username}}から" + post_format: "#%{post_number} %{username}から" more_results: "検索結果が多数あります。検索条件を絞ってください。" cant_find: "探しているものが見つかりませんか?" start_new_topic: "新しいトピックを始めてみては?" @@ -1435,8 +1437,8 @@ ja: search_google_button: "Google" search_google_title: "サイトを検索" context: - user: "@{{username}}の投稿を検索" - category: "#{{category}} から検索する" + user: "@%{username}の投稿を検索" + category: "#%{category} から検索する" topic: "このトピックを探す" private_messages: "メッセージ検索" advanced: @@ -1508,7 +1510,7 @@ ja: notification_level: "通知" choose_new_category: "このトピックの新しいカテゴリを選択してください" selected: - other: "あなたは {{count}} トピックを選択しました。" + other: "あなたは %{count} トピックを選択しました。" change_tags: "タグを付け替える" append_tags: "タグを追加する" choose_new_tags: "これらのトピックの新しいタグを選択してください" @@ -1521,7 +1523,7 @@ ja: posted: "トピックは一つもありません。" latest: "最新のトピックはありません。" bookmarks: "ブックマークしたトピックはありません。" - category: "{{category}} トピックはありません。" + category: "%{category} トピックはありません。" top: "トップトピックはありません。" educate: new: '
新しいトピックがここに表示されます。
デフォルトでは新しいトピックがある場合に2日間、newが表示されます。
設定はプロフィール設定から変更できます。
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} 님이 초대를 수락했습니다" - moved_post: "{{username}} 님이 {{description}} (을)를 이동했습니다" - linked: "{{username}} {{description}}" - granted_badge: "'{{description}}' 를 받았습니다" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "새 토픽 {{description}}" - membership_request_accepted: "'{{group_name}}'에 회원 가입" - membership_request_consolidated: "{{count}} '{{group_name}}'에 대한 오픈 멤버쉽 요청" + other: "%{username}, %{username2} 외 %{count} 명의 사용자가 %{description}" + liked_consolidated: "%{username} %{description} " + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} 님이 초대를 수락했습니다" + moved_post: "%{username} 님이 %{description} (을)를 이동했습니다" + linked: "%{username} %{description}" + granted_badge: "'%{description}' 를 받았습니다" + topic_reminder: "%{username} %{description}" + watching_first_post: "새 토픽 %{description}" + membership_request_accepted: "'%{group_name}'에 회원 가입" + membership_request_consolidated: "%{count} '%{group_name}'에 대한 오픈 멤버쉽 요청" group_message_summary: - other: " {{group_name}} 사서함에 {{count}} 개의 메시지가 있습니다" + other: " %{group_name} 사서함에 %{count} 개의 메시지가 있습니다" popup: - mentioned: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 나를 멘션했습니다' - group_mentioned: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 당신을 언급했습니다' - quoted: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 나를 인용했습니다' - replied: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 내게 답글을 달았습니다' - posted: '"{{topic}}" - {{site_title}}에서 {{username}}님이 글을 게시하였습니다' - private_message: '{{username}}에서 "{{topic}}"에 개인 메시지를 보냈습니다-{{site_title}}' - linked: '{{username}}님이 "{{topic}}" - {{site_title}}에 내 글을 링크했습니다' - watching_first_post: '{{username}}가 새로운 주제 "{{topic}}"-{{site_title}}을 작성했습니다.' + mentioned: '"%{topic}" - %{site_title}에서 %{username} 님이 나를 멘션했습니다' + group_mentioned: '"%{topic}" - %{site_title}에서 %{username} 님이 당신을 언급했습니다' + quoted: '"%{topic}" - %{site_title}에서 %{username} 님이 나를 인용했습니다' + replied: '"%{topic}" - %{site_title}에서 %{username} 님이 내게 답글을 달았습니다' + posted: '"%{topic}" - %{site_title}에서 %{username}님이 글을 게시하였습니다' + private_message: '%{username}에서 "%{topic}"에 개인 메시지를 보냈습니다-%{site_title}' + linked: '%{username}님이 "%{topic}" - %{site_title}에 내 글을 링크했습니다' + watching_first_post: '%{username}가 새로운 주제 "%{topic}"-%{site_title}을 작성했습니다.' confirm_title: "알림 활성 - %{site_title}" confirm_body: "완료! 알림이 활성화되었습니다." - custom: "%{site_title}의 {{username}}에서 알림" + custom: "%{site_title}의 %{username}에서 알림" titles: mentioned: "말하는" replied: "새로운 답장" @@ -1664,9 +1665,9 @@ ko: from_my_computer: "컴퓨터에서 가져오기" from_the_web: "인터넷에서 가져오기" remote_tip: "이미지 링크" - remote_tip_with_attachments: "이미니자 파일 링크 {{authorized_extensions}}" + remote_tip_with_attachments: "이미니자 파일 링크 %{authorized_extensions}" local_tip: "기기에서 이미지 선택" - local_tip_with_attachments: "디바이스에서 이미지나 파일을 선택하세요 {{authorized_extensions}}" + local_tip_with_attachments: "디바이스에서 이미지나 파일을 선택하세요 %{authorized_extensions}" hint: "(드래그&드랍으로 업로드 가능)" hint_for_supported_browsers: "편집창에 이미지를 끌어다 놓거나 붙여넣기 할 수도 있습니다" uploading: "업로드 중입니다..." @@ -1687,8 +1688,8 @@ ko: no_results: "검색 결과가 없습니다" no_more_results: "더 이상 결과가 없습니다." searching: "검색중..." - post_format: "#{{post_number}} by {{username}}" - results_page: "'{{term}}'의 검색 결과" + post_format: "#%{post_number} by %{username}" + results_page: "'%{term}'의 검색 결과" more_results: "검색 결과가 많습니다. 검색 조건을 좁혀보세요." cant_find: "원하는 걸 찾을 수 없으신가요?" start_new_topic: "새 토픽을 만들어볼까요?" @@ -1697,9 +1698,9 @@ ko: search_google_button: "구글" search_google_title: "이 사이트 검색" context: - user: "@{{username}}의 글 검색" - category: "#{{category}} 카테고리에서 검색" - tag: "# {{tag}} 태그 검색" + user: "@%{username}의 글 검색" + category: "#%{category} 카테고리에서 검색" + tag: "# %{tag} 태그 검색" topic: "이 주제를 검색" private_messages: "메시지 검색" advanced: @@ -1775,7 +1776,7 @@ ko: notification_level: "알림" choose_new_category: "주제의 새로운 카테고리를 선택" selected: - other: "{{count}}개의 주제가 선택되었습니다." + other: "%{count}개의 주제가 선택되었습니다." change_tags: "태그 교체" append_tags: "태그 덧붙이기" choose_new_tags: "이 토픽의 태그를 입력하세요:" @@ -1788,7 +1789,7 @@ ko: posted: "아직 어떠한 주제도 작성되지 않았습니다." latest: "최신 주제가 없습니다." bookmarks: "아직 북마크한 주제가 없습니다." - category: "{{category}}에 주제가 없습니다." + category: "%{category}에 주제가 없습니다." top: "Top 주제가 없습니다." educate: new: '
회원님의 주제는 여기에 나타납니다.
기본적으로 생긴 지 이틀 안된 주제는 새것으로 간주하고 new 표시가 뜹니다.
바꾸고 싶으면 환경설정으로 가보세요.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} priėmė jūsų kvietimą" - moved_post: "{{username}} perkeltas {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Gavote '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nauja tema {{description}}" + one: "%{username}, %{username2} ir dar %{count} %{description}" + few: "%{username}, %{username2}ir %{count} kiti %{description}" + many: "%{username}, %{username2} ir %{count}kitų %{description}" + other: "%{username}, %{username2} ir %{count}kitų %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} priėmė jūsų kvietimą" + moved_post: "%{username} perkeltas %{description}" + linked: "%{username} %{description}" + granted_badge: "Gavote '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nauja tema %{description}" group_message_summary: - one: "{{count}} žinutė, jūsų {{group_name}}pato dėžutėje" - few: "{{count}} žinutės, jūsų {{group_name}}pato dėžutėje" - many: "{{count}}žinučių, jūsų {{group_name}} pato dėžutėje" - other: "{{count}} žinutės, jūsų {{group_name}} pašto dėžutėje" + one: "%{count} žinutė, jūsų %{group_name}pato dėžutėje" + few: "%{count} žinutės, jūsų %{group_name}pato dėžutėje" + many: "%{count}žinučių, jūsų %{group_name} pato dėžutėje" + other: "%{count} žinutės, jūsų %{group_name} pašto dėžutėje" popup: - mentioned: '{{username}} paminėjo tave "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} paminėjo tave "{{topic}}" - {{site_title}}' - quoted: '{{username}} pacitavo tave "{{topic}}" - {{site_title}}' - replied: '{{username}} atsakė tau "{{topic}}" - {{site_title}}' - posted: '{{username}} paskelbė "{{topic}}" - {{site_title}}' - private_message: '{{username}} atsiuntė privačią žinutė "{{topic}}" - {{site_title}}' - linked: '{{username}} panaudojo tavo įrašą "{{topic}}" - {{site_title}}' + mentioned: '%{username} paminėjo tave "%{topic}" - %{site_title}' + group_mentioned: '%{username} paminėjo tave "%{topic}" - %{site_title}' + quoted: '%{username} pacitavo tave "%{topic}" - %{site_title}' + replied: '%{username} atsakė tau "%{topic}" - %{site_title}' + posted: '%{username} paskelbė "%{topic}" - %{site_title}' + private_message: '%{username} atsiuntė privačią žinutė "%{topic}" - %{site_title}' + linked: '%{username} panaudojo tavo įrašą "%{topic}" - %{site_title}' confirm_title: "Pranešimai įgalinti - %{site_title}" confirm_body: "Pavyko! Pranešimai buvo įgalinti." titles: @@ -1299,9 +1302,9 @@ lt: from_my_computer: "Iš įrenginio" from_the_web: "Iš naršyklės" remote_tip: "nuoroda į nuotrauką" - remote_tip_with_attachments: "nuoroda į nuotrauką ar failą {{authorized_extensions}}" + remote_tip_with_attachments: "nuoroda į nuotrauką ar failą %{authorized_extensions}" local_tip: "Pasirinkti nuotraukas iš įrenginio" - local_tip_with_attachments: "pasirinkti nuotraukas ar failus iš įrenginio {{authorized_extensions}}" + local_tip_with_attachments: "pasirinkti nuotraukas ar failus iš įrenginio %{authorized_extensions}" hint: "(taip pat gali perstumti ir įmesti į redagavimo skydą)" hint_for_supported_browsers: "gali perstumti, numesti ir kopijuoti nuotraukas į redagavimo skydą" uploading: "Įkeliama" @@ -1318,23 +1321,23 @@ lt: clear_all: "Ištrinti viską" too_short: "Jūsų paieškos frazė, per trumpa." result_count: - one: "%{count} rezultatas iš{{term}}" - few: "{{count}}{{plus}}rezultatų iš{{term}}" - many: "{{count}}{{plus}} rezultatai iš{{term}}" - other: "{{count}}{{plus}} rezultatai iš {{term}}" + one: "%{count} rezultatas iš%{term}" + few: "%{count}%{plus}rezultatų iš%{term}" + many: "%{count}%{plus} rezultatai iš%{term}" + other: "%{count}%{plus} rezultatai iš %{term}" title: "temų, įrašų, vartotojų ar kategorijų paieška" full_page_title: "ieškoti temų arba įrašų" no_results: "Nerasta jokių rezultatų." no_more_results: "Nerasta jokių rezultatų." searching: "Ieškoma..." - post_format: "#{{post_number}} nuo {{username}}" - results_page: "Paieškos rezultatai ir '{{term}}'" + post_format: "#%{post_number} nuo %{username}" + results_page: "Paieškos rezultatai ir '%{term}'" start_new_topic: "Galbūt pradėkite naują temą?" search_google_button: "Google" search_google_title: "Ieškoti šioje svetainėje" context: - user: "Ieškoti įrašų nuo @{{username}}" - category: "Ieškoti #{{category}}kategorijoje" + user: "Ieškoti įrašų nuo @%{username}" + category: "Ieškoti #%{category}kategorijoje" topic: "Ieškoti šioje temoje" private_messages: "Ieškoti žinučių" advanced: @@ -1398,10 +1401,10 @@ lt: notification_level: "Pranešimai" choose_new_category: "Pasirinkti naują kategoriją temoms:" selected: - one: "Jūs pasirinkote {{count}} temą." - few: "Jūs pasirinkote {{count}} temas." - many: "Jūs pasirinkote {{count}} temų." - other: "Jūs pasirinkote {{count}} temų." + one: "Jūs pasirinkote %{count} temą." + few: "Jūs pasirinkote %{count} temas." + many: "Jūs pasirinkote %{count} temų." + other: "Jūs pasirinkote %{count} temų." none: unread: "Jūs neturite neperskaitytų temų." new: "Jūs neturite naujų temų." @@ -1409,7 +1412,7 @@ lt: posted: "Jūs dar nerašėte jokiose temose." latest: "Nėra jokių paskutinių temų. Tai liūdina." bookmarks: "Jūs dar neturite pažymėtų temų." - category: "Nėra jokių temų kategorijoje {{category}}." + category: "Nėra jokių temų kategorijoje %{category}." top: "Nėra jokių TOP temų." bottom: latest: "Daugiau nėra jokių naujausių temų." @@ -1417,15 +1420,15 @@ lt: read: "Daugiau nėra jokių perskaitytų temų." new: "Daugiau nėra jokių naujų temų." unread: "Daugiau nėra jokių neperskaitytų temų." - category: "Daugiau nėra jokių temų kategorijoje {{category}}." + category: "Daugiau nėra jokių temų kategorijoje %{category}." top: "Daugiau nėra jokių populiarių temų." bookmarks: "Daugiau pažymėtų temų nėra" topic: filter_to: one: "temoje %{count} įrašas" - few: "temoje {{count}} įrašai" - many: "teoje {{count}} įrašų" - other: "temoje {{count}} įrašai" + few: "temoje %{count} įrašai" + many: "teoje %{count} įrašų" + other: "temoje %{count} įrašai" create: "Nauja Tema" create_long: "Sukurti naują temą" open_draft: "Atviras juodraštis" @@ -1444,15 +1447,15 @@ lt: new: "nauja tema" unread: "Neperskaitytos" new_topics: - one: "{{count}} nauja tema" - few: "{{count}} naujos temos" - many: "{{count}} naujų temų" - other: "{{count}} naujų temų" + one: "%{count} nauja tema" + few: "%{count} naujos temos" + many: "%{count} naujų temų" + other: "%{count} naujų temų" unread_topics: - one: "{{count}} neperskaityta tema" - few: "{{count}} neperskaitytos temos" - many: "{{count}} neperskaitytų temų" - other: "{{count}} neperskaitytų temų" + one: "%{count} neperskaityta tema" + few: "%{count} neperskaitytos temos" + many: "%{count} neperskaitytų temų" + other: "%{count} neperskaitytų temų" title: "Tema" invalid_access: title: "Tema yra privati" @@ -1466,30 +1469,30 @@ lt: description: "Atsiprašome, bet mes negalėjome rasti jūsų temos. Gal ji buvo ištrinta moderatoriaus?" total_unread_posts: one: "šioje temoje turi %{count} neperskaitytą įrašą" - few: "šioje temoje tu turi {{count}} neperskaitytų įrašų" - many: "šioje temoje tu turi {{count}} neperskaitytų įrašų" - other: "šioje temoje tu turi {{count}} neperskaitytų įrašų" + few: "šioje temoje tu turi %{count} neperskaitytų įrašų" + many: "šioje temoje tu turi %{count} neperskaitytų įrašų" + other: "šioje temoje tu turi %{count} neperskaitytų įrašų" unread_posts: one: "šioje temoje tu turi %{count} neperskaitytą seną įrašą" - few: "šioje temoje tu turi {{count}} neperskaitytų senų įrašų" - many: "šioje temoje tu turi {{count}} neperskaitytų senų įrašų" - other: "šioje temoje tu turi {{count}} neperskaitytų senų įrašų" + few: "šioje temoje tu turi %{count} neperskaitytų senų įrašų" + many: "šioje temoje tu turi %{count} neperskaitytų senų įrašų" + other: "šioje temoje tu turi %{count} neperskaitytų senų įrašų" new_posts: one: "šioje temoje yra %{count} naujas įrašas nuo paskutinio tavo skaitymo" - few: "šioje temoje yra {{count}} naujų įrašų nuo paskutinio tavo skaitymo" - many: "šioje temoje yra {{count}} naujų įrašų nuo paskutinio tavo skaitymo" - other: "šioje temoje yra {{count}} naujų įrašų nuo paskutinio tavo skaitymo" + few: "šioje temoje yra %{count} naujų įrašų nuo paskutinio tavo skaitymo" + many: "šioje temoje yra %{count} naujų įrašų nuo paskutinio tavo skaitymo" + other: "šioje temoje yra %{count} naujų įrašų nuo paskutinio tavo skaitymo" likes: one: "Šiuo metu temą mėgsta %{count} vartotojas" - few: "Šiuo metu temą mėgsta {{count}} vartotojų" - many: "Šiuo metu temą mėgsta {{count}} vartotojų" - other: "Šiuo metu temą mėgsta {{count}} vartotojų" + few: "Šiuo metu temą mėgsta %{count} vartotojų" + many: "Šiuo metu temą mėgsta %{count} vartotojų" + other: "Šiuo metu temą mėgsta %{count} vartotojų" back_to_list: "Grįžti į temų sąrašą" options: "Nustatymai" show_links: "Rodyti šios temos nuorodas" toggle_information: "perjungti temos detales" - read_more_in_category: "Nori skaityti daugiau? Ieškok kitų temų {{catLink}} arba {{latestLink}}." - read_more: "Norite skaityti daugiau? {{catLink}} arba {{latestLink}}." + read_more_in_category: "Nori skaityti daugiau? Ieškok kitų temų %{catLink} arba %{latestLink}." + read_more: "Norite skaityti daugiau? %{catLink} arba %{latestLink}." read_more_MF: "Šiuo metu { UNREAD, plural, =0 {} one { yra 1 neperskaityta } other { yra # neperskaitytos } } { NEW, plural, =0 {} one { {BOTH, select, true{and } false {is } other{}} 1 nauja tema} other { {BOTH, select, true{and } false {are } other{}} # naujos temos} } remaining, or {CATEGORY, select, true {browse other topics in {catLink}} false {{latestLink}} other {}}" browse_all_categories: Žiūrėkite visas kategorijas view_latest_topics: peržiūrėkite paskutines temas @@ -1621,29 +1624,29 @@ lt: success_message: "Tu sėkmingai uždėjai temai vėliavą." feature_topic: title: "Charakterizuok šią temą" - pin: "Nustatyk šią temą, kad laikytųsi kategorijos {{categoryLink}} viršuje" - confirm_pin: "Tu jau turi {{count}} prisegtų temų. Per daug prisegtų temų gali atstumti anoniminius ir naujus vartotojus. Ar esi tikras, jog nori prisegti šią temą?" - unpin: "Pašalink šią temą iš {{categoryLink}} kategorijos sąrašo viršaus." - unpin_until: "Pašalinti temą iš {{categoryLink}} kategorijos viršaus arba palaukti iki %{until}." + pin: "Nustatyk šią temą, kad laikytųsi kategorijos %{categoryLink} viršuje" + confirm_pin: "Tu jau turi %{count} prisegtų temų. Per daug prisegtų temų gali atstumti anoniminius ir naujus vartotojus. Ar esi tikras, jog nori prisegti šią temą?" + unpin: "Pašalink šią temą iš %{categoryLink} kategorijos sąrašo viršaus." + unpin_until: "Pašalinti temą iš %{categoryLink} kategorijos viršaus arba palaukti iki %{until}." pin_note: "Vartotojai gali Atsegti temą nuo viršaus individualiai sau." pin_validation: "Terminas reikalauja Prisegti šią temą." - not_pinned: "{{categoryLink}} nėra prisegtų temų " + not_pinned: "%{categoryLink} nėra prisegtų temų " already_pinned: - one: "Tema prisegta šioje kategorijoje {{categoryLink}}: %{count}" - few: "Prisegtos temos šioje kategorijoje {{categoryLink}}: {{count}}" - many: "Prisegtos temos šioje kategorijoje {{categoryLink}}: {{count}}" - other: "Prisegtos temos šioje kategorijoje {{categoryLink}}: {{count}}" + one: "Tema prisegta šioje kategorijoje %{categoryLink}: %{count}" + few: "Prisegtos temos šioje kategorijoje %{categoryLink}: %{count}" + many: "Prisegtos temos šioje kategorijoje %{categoryLink}: %{count}" + other: "Prisegtos temos šioje kategorijoje %{categoryLink}: %{count}" pin_globally: "Iškelti temą virš visų kitų temų sąrašo iki " - confirm_pin_globally: "Jūs jau turite {{count}} globaliai Prisegtas temas. Per daug prisegtų temų gali atbaidyti naujus ir anoniminius vartotojus. Ar tikrai to norite?" + confirm_pin_globally: "Jūs jau turite %{count} globaliai Prisegtas temas. Per daug prisegtų temų gali atbaidyti naujus ir anoniminius vartotojus. Ar tikrai to norite?" unpin_globally: "Pašalinti šią temą iš visų temų sąrašo viršaus." unpin_globally_until: "Pašalinti temą iš visų temų sąrašo viršaus arba palaukti iki %{until}." global_pin_note: "Vartotojai gali Atsegti temą nuo sąrašo viršaus individualiai." not_pinned_globally: "Nėra jokių globaliai Prisegtų temų." already_pinned_globally: one: "Šiuo metu globaliai prisegta tema: %{count}" - few: "Šiuo metu globaliai Prisegtos temos: {{count}}" - many: "Šiuo metu globaliai Prisegtos temos: {{count}}" - other: "Šiuo metu globaliai Prisegtos temos: {{count}}" + few: "Šiuo metu globaliai Prisegtos temos: %{count}" + many: "Šiuo metu globaliai Prisegtos temos: %{count}" + other: "Šiuo metu globaliai Prisegtos temos: %{count}" make_banner: "Paryškink šią temą, kad ji atsidurtų visų puslapių sąrašo viršuje." remove_banner: "Pašalinti paryškintą temą, kuri yra visų puslapių viršuje." banner_note: "Vartotojai gali uždaryti paryškiuntą temą. Tik viena tema gali būti paryškinta tam tikru metu" @@ -1671,16 +1674,16 @@ lt: to_topic_username: "Vartotojo vardas įvestas. Mes išsiųsime pranešimą su nuoroda į šią temą." to_username: "Įveskite vartotojo vardą žmogaus, kurį norite pakviesti. Mes išsiųsime pranešima su nuoroda į šią temą." email_placeholder: "vardas@pavizdys.lt" - success_email: "Mes išsiuntėme pakvietimą į {{emailOrUsername}}. Mes pranešime, kai pakvietimas bus patvirtintas. Stebėk pakvietimų kortelę savo paskyroje, kad žinotum pakvietimo statusą." + success_email: "Mes išsiuntėme pakvietimą į %{emailOrUsername}. Mes pranešime, kai pakvietimas bus patvirtintas. Stebėk pakvietimų kortelę savo paskyroje, kad žinotum pakvietimo statusą." success_username: "Vartotojas buvo pakviestas dalyvauti temoje." error: "Atsiprašome, tačiau nepavyko pakviesti šio žmogaus. Gal būt jis jau buvo pakviestas?" login_reply: "Prisijunk, kad atsakytum" filters: n_posts: one: "%{count} įrašas" - few: "{{count}} įrašai" - many: "{{count}}įrašų" - other: "{{count}}įrašai" + few: "%{count} įrašai" + many: "%{count}įrašų" + other: "%{count}įrašai" cancel: "Išjungti filtrus" split_topic: title: "Perkelti į naują temą" @@ -1689,18 +1692,18 @@ lt: error: "Įvyko klaida perkeliant įrašus į naują temą." instructions: one: "Jūs tuoj sukursite naują temą ir įkesite įrašą, kurį pažymėjote." - few: "Jūs tuoj sukursite naują temą ir įkesite {{count}} įrašus, kuriuos pažymėjote." - many: "Jūs tuoj sukursite naują temą ir įkesite {{count}} įrašus, kuriuos pažymėjote." - other: "Jūs tuoj sukursite naują temą ir įkesite {{count}} įrašus, kuriuos pažymėjote." + few: "Jūs tuoj sukursite naują temą ir įkesite %{count} įrašus, kuriuos pažymėjote." + many: "Jūs tuoj sukursite naują temą ir įkesite %{count} įrašus, kuriuos pažymėjote." + other: "Jūs tuoj sukursite naują temą ir įkesite %{count} įrašus, kuriuos pažymėjote." merge_topic: title: "Perkelti į esamą temą" action: "perkelti į esamą temą" error: "Įvyko klaida perkeliant įrašus į šią temą." instructions: one: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šį įrašą." - few: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos {{count}} įrašus." - many: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos {{count}} įrašus." - other: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos {{count}} įrašus." + few: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos %{count} įrašus." + many: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos %{count} įrašus." + other: "Prašome pasirinkti temą, į kurią norėtumėte perkelti šiuos %{count} įrašus." move_to_new_message: radio_label: "Nauja žinutė" merge_posts: @@ -1717,7 +1720,7 @@ lt: instructions: "Prašome įvesti naują šios temos laiko formatą. Visi šios temos įrašai bus atnaujinti pagal nustatytą datą." multi_select: select: "pasirinkti" - selected: "pasirinkta ({{count}})" + selected: "pasirinkta (%{count})" select_post: label: "pasirinkti" title: "Pridėti įrašą prie pasirinktų" @@ -1734,17 +1737,17 @@ lt: deselect_all: nieko nepasirinkti description: one: Jūs pasirinkote %{count} įrašą. - few: "Jūs pasirinkote {{count}} įrašus." - many: "Jūs pasirinkote {{count}} įrašus." - other: "Jūs pasirinkote {{count}} įrašus." + few: "Jūs pasirinkote %{count} įrašus." + many: "Jūs pasirinkote %{count} įrašus." + other: "Jūs pasirinkote %{count} įrašus." post: quote_reply: "Citata" edit_reason: "Priežastis:" - post_number: "įrašas {{number}}" + post_number: "įrašas %{number}" wiki_last_edited_on: "wiki paskutinį kartą redaguota " last_edited_on: "įrašas paskutinį kartą atnaujintas" reply_as_new_topic: "Atsakyti naujoje temoje" - continue_discussion: "Tęsiama {{postLink}} diskusija:" + continue_discussion: "Tęsiama %{postLink} diskusija:" follow_quote: "eiti į cituotą įrašą" show_full: "Rodyti Pilną Įrašą" deleted_by_author: @@ -1755,26 +1758,26 @@ lt: expand_collapse: "išskleisti/suskleisti" gap: one: "Peržiūrėti %{count} paslėptą atsakymą" - few: "peržiūrėti {{count}} paslėptus atsakymus" - many: "peržiūrėti {{count}} paslėptus atsakymus" - other: "peržiūrėti {{count}} paslėptus atsakymus" + few: "peržiūrėti %{count} paslėptus atsakymus" + many: "peržiūrėti %{count} paslėptus atsakymus" + other: "peržiūrėti %{count} paslėptus atsakymus" unread: "Įrašas yra neperskaitytas" has_replies: - one: "{{count}} Atsakymas" - few: "{{count}} Atsakymai" - many: "{{count}} Atsakymai" - other: "{{count}} Atsakymai" + one: "%{count} Atsakymas" + few: "%{count} Atsakymai" + many: "%{count} Atsakymai" + other: "%{count} Atsakymai" has_likes_title: one: "%{count} žmogui patiko šis įrašas" - few: "{{count}} žmonėms patinka šis įrašas" - many: "{{count}} žmonėms patinka šis įrašas" - other: "{{count}} žmonėms patinka šis įrašas" + few: "%{count} žmonėms patinka šis įrašas" + many: "%{count} žmonėms patinka šis įrašas" + other: "%{count} žmonėms patinka šis įrašas" has_likes_title_only_you: "tau patiko šis įrašas" has_likes_title_you: one: "tau ir %{count} žmogui patiko šis įrašas" - few: "tau ir {{count}} žmonėms patiko šis įrašas" - many: "tau ir {{count}} žmonėms patiko šis įrašas" - other: "tau ir {{count}} žmonėms patiko šis įrašas" + few: "tau ir %{count} žmonėms patiko šis įrašas" + many: "tau ir %{count} žmonėms patiko šis įrašas" + other: "tau ir %{count} žmonėms patiko šis įrašas" errors: create: "Atsiprašome, įvyko klaida kuriant įrašą. Prašome pamėginti dar kartą." edit: "Atsiprašome, įvyko klaida redaguojant įrašą. Prašome pamėginti dar kartą." @@ -1811,14 +1814,14 @@ lt: delete_replies: direct_replies: one: "Taip, ir %{count} tiesioginį atsakymą" - few: "Taip, ir {{count}}tiesioginius atsakymus" - many: "Taip, ir {{count}}tiesioginių atsakymų" - other: "Taip, ir {{count}} tiesioginius atsakymus" + few: "Taip, ir %{count}tiesioginius atsakymus" + many: "Taip, ir %{count}tiesioginių atsakymų" + other: "Taip, ir %{count} tiesioginius atsakymus" all_replies: one: "Taip, ir %{count} atsakymą" - few: "Taip, ir visus {{count}} atsakymus" - many: "Taip, ir visus {{count}}atsakymų" - other: "Taip, ir visus {{count}} atsakymus" + few: "Taip, ir visus %{count} atsakymus" + many: "Taip, ir visus %{count}atsakymų" + other: "Taip, ir visus %{count} atsakymus" just_the_post: "Ne, tik šį įrašą" admin: "įrašo administravimas" wiki: "Sukurti Wiki" @@ -1843,10 +1846,10 @@ lt: people: spam: "pažymėtas kaip šlamštas" like_capped: - one: "ir {{count}}kitas mėgsta tai" - few: "ir {{count}}kitų mėgsta tai" - many: "ir {{count}}kitų mėgsta tai " - other: "ir {{count}} kitų mėgsta tai" + one: "ir %{count}kitas mėgsta tai" + few: "ir %{count}kitų mėgsta tai" + many: "ir %{count}kitų mėgsta tai " + other: "ir %{count} kitų mėgsta tai" by_you: off_topic: "Tu pažymėjai tai kaip \"ne į temą\"." spam: "Tu pažymėjai tai, kaip šiukšlę" @@ -1990,14 +1993,14 @@ lt: custom_message: at_least: one: "įveskite bent jau %{count} simbolį" - few: "įveskite bent jau {{count}} simbolius" - many: "įveskite bent jau {{count}}simbolių" - other: "įveskite bent jau {{count}}simbolius" + few: "įveskite bent jau %{count} simbolius" + many: "įveskite bent jau %{count}simbolių" + other: "įveskite bent jau %{count}simbolius" more: one: "liko %{count}..." - few: "liko {{count}}..." - many: "liko {{count}}..." - other: "liko {{count}}..." + few: "liko %{count}..." + many: "liko %{count}..." + other: "liko %{count}..." flagging_topic: title: "Ačiū, kad padedi padedi išlaikyti forumą civilizuotu!" action: "Temos su vėliavomis" @@ -2041,7 +2044,7 @@ lt: unlisted: help: "Ši tema yra išimta iš sąrašo. Ji daugiau nebebus rodoma temų sąraše ir ją galima pasiekti tik su tiesiogine nuoroda." posts: "Įrašai" - posts_long: "Šiuo metu yra {{number}} įrašų šioje temoje" + posts_long: "Šiuo metu yra %{number} įrašų šioje temoje" posts_likes_MF: | Ši tema turi {count, plural, one {1 reply} other {# replies}} {ratio, select, low {with a high like to post ratio} @@ -2058,9 +2061,9 @@ lt: replies: "Atsakymai" views_long: one: "ši tema buvo peržiūrėta %{count} kartą" - few: "ši tema buvo peržiūrėta {{number}} kartus" - many: "ši tema buvo peržiūrėta {{number}}kartų" - other: "ši tema buvo peržiūrėta {{number}} kartus" + few: "ši tema buvo peržiūrėta %{number} kartus" + many: "ši tema buvo peržiūrėta %{number}kartų" + other: "ši tema buvo peržiūrėta %{number} kartus" activity: "Aktyvumas" likes: "Patikimai" likes_lowercase: @@ -2068,7 +2071,7 @@ lt: few: "patikimai" many: "patikimai" other: "patikimai" - likes_long: "Šiuo metu temoje yra {{number}} Patikimų" + likes_long: "Šiuo metu temoje yra %{number} Patikimų" users: "Vartotojai" users_lowercase: one: "vartotojas" @@ -2077,7 +2080,7 @@ lt: other: "vartotojai" category_title: "Kategorija" history: "Istorija" - changed_by: "pagal {{author}}" + changed_by: "pagal %{author}" raw_email: title: "Įeinantis paštas" not_available: "Nėra galimybių!" @@ -2089,43 +2092,43 @@ lt: title: "Paskutinės" title_with_count: one: "Paskutinis (%{count})" - few: "Paskutinės ({{count}})" - many: "Paskutinės ({{count}})" - other: "Paskutinės ({{count}})" + few: "Paskutinės (%{count})" + many: "Paskutinės (%{count})" + other: "Paskutinės (%{count})" help: "temos su paskutiniais įrašais" read: title: "Perskaityti" help: "Temos, kurias perskaitei, pagal paskutinių perskaitytų temų tvarką" categories: title: "Kategorijos" - title_in: "Kategorija - {{categoryName}}" + title_in: "Kategorija - %{categoryName}" help: "Visos temos sugrupuotos pagal kategoriją" unread: title: "Neperskaitytos" title_with_count: one: "Neperskaitytas (%{count})" - few: "Neperskaitytos ({{count}})" - many: "Neperskaitytos ({{count}})" - other: "Neperskaitytos ({{count}})" + few: "Neperskaitytos (%{count})" + many: "Neperskaitytos (%{count})" + other: "Neperskaitytos (%{count})" help: "temos, kurias stebide ar sekate su neperskaitytais įrašais" lower_title_with_count: one: "%{count} neperskaitytas" - few: "{{count}} neperskaitytų" - many: "{{count}} neperskaitytų" - other: "{{count}} neperskaitytų" + few: "%{count} neperskaitytų" + many: "%{count} neperskaitytų" + other: "%{count} neperskaitytų" new: lower_title_with_count: one: "%{count} nauja" - few: "{{count}} nauji" - many: "{{count}} nauji" - other: "{{count}} nauji" + few: "%{count} nauji" + many: "%{count} nauji" + other: "%{count} nauji" lower_title: "Nauja" title: "Naujos" title_with_count: one: "Naujas (%{count})" - few: "Naujos ({{count}})" - many: "Naujos ({{count}})" - other: "Naujos ({{count}})" + few: "Naujos (%{count})" + many: "Naujos (%{count})" + other: "Naujos (%{count})" help: "Per paskutines dienas sukurtos temos" posted: title: "Mano Įrašai" @@ -2134,13 +2137,13 @@ lt: title: "Žymės" help: "Temos, kurias pažymėjai" category: - title: "{{categoryName}}" + title: "%{categoryName}" title_with_count: - one: "{{categoryName}} (%{count})" - few: "{{categoryName}} ({{count}})" - many: "{{categoryName}} ({{count}})" - other: "{{categoryName}} ({{count}})" - help: "paskutinės temos kategorijoje {{categoryName}} " + one: "%{categoryName} (%{count})" + few: "%{categoryName} (%{count})" + many: "%{categoryName} (%{count})" + other: "%{categoryName} (%{count})" + help: "paskutinės temos kategorijoje %{categoryName} " top: title: "Populiarios" help: "pačios aktyviausios temos paskutiniaisiais metais, mėnesį, savaitę ar dieną" @@ -2486,10 +2489,10 @@ lt: label: "Įkelti" title: "Įkelti atsarginę kopiją šiam atskiram atvejui" uploading: "Įkeliama" - error: "Įvyko klaida įkeliant '{{filename}}': {{message}}" + error: "Įvyko klaida įkeliant '%{filename}': %{message}" operations: is_running: "Šiuo metu jau yra vykdoma operacija..." - failed: "Įvyko klaida su {{operation}}. Prašome patikrinti logaritmus." + failed: "Įvyko klaida su %{operation}. Prašome patikrinti logaritmus." cancel: label: "Atšaukti" title: "Atšaukti dabartinę operaciją" @@ -2853,8 +2856,8 @@ lt: title: "Atskleisk šio vartotojo el. pašto adresą" text: "Rodyti" user: - suspend_failed: "Įvyko klaida sustabdant vartotoją {{error}}" - unsuspend_failed: "Įvyko klaida atkuriant vartotoją {{error}}" + suspend_failed: "Įvyko klaida sustabdant vartotoją %{error}" + unsuspend_failed: "Įvyko klaida atkuriant vartotoją %{error}" suspend_duration: "Kuriam laikui vartotojas bus sustabdytas?" suspend_reason_label: "Kodėl sustabdote? Šis tekstas bus matomas visiems vartotojo profilyje ir vartotojui bandant prisijungti. Stenkitės aprašyti trumpai." suspend_reason: "Priežastis" @@ -3146,6 +3149,7 @@ lt: title: "Šypsenėlės" help: "Pridėti naują šypsenėlę, kurią galės matyti visi (patarimas: kelis failus kelk tuo pačiu metu)" add: "Pridėti Naują Šypsenėlę" + uploading: "Įkeliama..." name: "Vardas" group: "Grupė" image: "Paveiksliukas" diff --git a/config/locales/client.lv.yml b/config/locales/client.lv.yml index a08eed0133..b23f8da4e2 100644 --- a/config/locales/client.lv.yml +++ b/config/locales/client.lv.yml @@ -24,8 +24,8 @@ lv: mb: MB tb: TB short: - thousands: "{{number}} tūkst." - millions: "{{number}} milj." + thousands: "%{number} tūkst." + millions: "%{number} milj." dates: time: "hh:mm" timeline_date: "MMM YYYY" @@ -214,12 +214,12 @@ lv: weekly: "katru nedēļu" every_month: "katru mēnesi" every_six_months: "katrus sešus mēnešus" - max_of_count: "ne vairāk kā {{count}}" + max_of_count: "ne vairāk kā %{count}" alternation: "vai" character_count: - zero: "{{count}} zīmes" - one: "{{count}} zīme" - other: "{{count}} zīmes" + zero: "%{count} zīmes" + one: "%{count} zīme" + other: "%{count} zīmes" related_messages: title: "Saistītās ziņas" suggested_topics: @@ -331,19 +331,19 @@ lv: description: "Mēs saņēmām jūsu ierakstu, taču vispirms to jāapstiprina moderatoram. Lūdzu, esiet pacietīgi." ok: "OK" user_action: - user_posted_topic: "{{user}} pievienoja ierakstus tēmai" - you_posted_topic: "Jūs pievienojāt ierakstu tēmai" - user_replied_to_post: "{{user}} atbildēja {{post_number}}" - you_replied_to_post: "Jūs atbildējāt {{post_number}}" - user_replied_to_topic: "{{user}} atbildēja temā" - you_replied_to_topic: "Jūs atbildējāt temā" - user_mentioned_user: "{{user}} pieminēja {{another_user}}" - user_mentioned_you: "{{user}} pieminēja Jūs" - you_mentioned_user: "Jūs pieminējāt {{another_user}}" - posted_by_user: "Ierakstīja {{user}}" - posted_by_you: "Ierakstījāt Jūs" - sent_by_user: "Nosūtīja {{user}}" - sent_by_you: "Nosūtījāt Jūs" + user_posted_topic: "%{user} pievienoja ierakstus tēmai" + you_posted_topic: "Jūs pievienojāt ierakstu tēmai" + user_replied_to_post: "%{user} atbildēja %{post_number}" + you_replied_to_post: "Jūs atbildējāt %{post_number}" + user_replied_to_topic: "%{user} atbildēja temā" + you_replied_to_topic: "Jūs atbildējāt temā" + user_mentioned_user: "%{user} pieminēja %{another_user}" + user_mentioned_you: "%{user} pieminēja Jūs" + you_mentioned_user: "Jūs pieminējāt %{another_user}" + posted_by_user: "Ierakstīja %{user}" + posted_by_you: "Ierakstījāt Jūs" + sent_by_user: "Nosūtīja %{user}" + sent_by_you: "Nosūtījāt Jūs" directory: filter_name: "atlasīt pēc lietotājvārda" title: "Lietotāji" @@ -520,7 +520,7 @@ lv: user_fields: none: "(izvēlieties opciju)" user: - said: "{{username}}:" + said: "%{username}:" profile: "Profils" mute: "Klusināt" edit: "Mainīt iestatījumus" @@ -572,11 +572,11 @@ lv: external_links_in_new_tab: "Atvērt visas saites jaunā cilnē" enable_quoting: "Ieslēgt atbildi ar iezīmētā teksta citēšanu" change: "mainīt" - moderator: "{{user}} ir moderators" - admin: "{{user}} ir administrators" + moderator: "%{user} ir moderators" + admin: "%{user} ir administrators" moderator_tooltip: "Šis lietotājs ir moderators" admin_tooltip: "Šis lietotājs ir administrators" - suspended_notice: "Lietotājs ir īslaicīgi bloķēts līdz {{date}}." + suspended_notice: "Lietotājs ir īslaicīgi bloķēts līdz %{date}." suspended_reason: "Iemesls:" github_profile: "Github" email_activity_summary: "Aktivitātes atskaite" @@ -588,7 +588,7 @@ lv: Klusinātās tēmas un sadaļas nav iekļautas šajos e-pastos. individual: "Sūtīt e-pastu par katru jauno ierakstu" individual_no_echo: "Sūtīt e-pastu par katru jauno ierakstu, izņemot manus" - many_per_day: "Sūtīt e-pastu par katru jauno ierakstu (apmēram {{dailyEmailEstimate}} dienā)" + many_per_day: "Sūtīt e-pastu par katru jauno ierakstu (apmēram %{dailyEmailEstimate} dienā)" few_per_day: "Sūtīt e-pastu par katru jauno ierakstu (apmēram divus dienā)" tag_settings: "Tagi" watched_tags: "Skatīts" @@ -614,7 +614,6 @@ lv: admin_delete: "Dzēst" users: "Lietotāji" muted_users: "Klusināts" - muted_users_instructions: "Nerādīt paziņojumus no šiem lietotājiem." tracked_topics_link: "Parādīt" automatically_unpin_topics: "Automātiski atspraust tēmas, kad sasniedzu beigas." apps: "Lietotnes" @@ -699,12 +698,12 @@ lv: title: "E-pasts" ok: "Mēs jums nosūtīsim apstiprinājuma e-pastu" invalid: "Lūdzu ievadiet derīgu e-pasta adresi" - authenticated: "Jūsu e-pastu autentificēja {{provider}}" + authenticated: "Jūsu e-pastu autentificēja %{provider}" frequency_immediately: "Mēs nekavējoties sūtīsim jums epastu par jaunām neizlasītām ziņām." frequency: - zero: "Mēs sūtīsim jums e-pastu tikai tad, ja nebūsim jūs redzējuši pēdējo {{count}} minūšu laikā." + zero: "Mēs sūtīsim jums e-pastu tikai tad, ja nebūsim jūs redzējuši pēdējo %{count} minūšu laikā." one: "Mēs sūtīsim jums e-pastu tikai tad, ja nebūsim jūs redzējuši pēdējās minūtes laikā." - other: "Mēs sūtīsim jums e-pastu tikai tad, ja nebūsim jūs redzējuši pēdējo {{count}} minūšu laikā." + other: "Mēs sūtīsim jums e-pastu tikai tad, ja nebūsim jūs redzējuši pēdējo %{count} minūšu laikā." associated_accounts: revoke: "Atsaukt" cancel: "Atcelt" @@ -717,9 +716,9 @@ lv: username: title: "Lietotājvārds" instructions: "unikāls, bez atstarpēm, īss" - short_instructions: "Cilvēki var pieminēt jūs kā @{{username}}" + short_instructions: "Cilvēki var pieminēt jūs kā @%{username}" available: "Jūsu lietotājvārds ir pieejams" - not_available: "Nav pieejams. Mēģiniet {{suggestion}}?" + not_available: "Nav pieejams. Mēģiniet %{suggestion}?" not_available_no_suggestion: "Nav pieejams" too_short: "Jūsu lietotājvārds ir parāk īss" too_long: "Jūsu lietotājvārds ir pārāk garš" @@ -803,14 +802,14 @@ lv: truncated: zero: "Nav ielūgumu." one: "Pirmais ielūgums." - other: "Pirmie {{count}} ielūgumi." + other: "Pirmie %{count} ielūgumi." redeemed: "Pieņemtie ielūgumi" redeemed_tab: "Pieņemti" - redeemed_tab_with_count: "Pieņemti ({{count}})" + redeemed_tab_with_count: "Pieņemti (%{count})" redeemed_at: "Pieņemti" pending: "Gaidošie ielūgumi" pending_tab: "Gaidošie" - pending_tab_with_count: "Gaidošie ({{count}})" + pending_tab_with_count: "Gaidošie (%{count})" topics_entered: "Apskatītās tēmas" posts_read_count: "Izlasītie ieraksti" expired: "Šis ielūgums ir izbeidzies." @@ -824,13 +823,17 @@ lv: time_read: "Laiks, ko lasīja" days_visited: "Dienas, kurās apmeklēja" account_age_days: "Konta vecums dienās" + links_tab: "Saites" + link_created_at: "Radīts" + link_groups: Grupas create: "Nosūtīt ielūgumu" generate_link: "Kopēt ielūguma saiti" link_generated: "Ielūguma saite gatava!" valid_for: "Ielūguma saite ir derīga tikai šai e-pasta adresei: %{email}" + invite_link: + success: "Ielūguma saite gatava!" bulk_invite: none: "Jūs vēl šeit neesat nevienu ielūdzis. Nosūtiet atsevišķus ielūgumus vai ielūdziet daudzus lietotājus vienlaicīgi, augšupielādējot CSV failu" - text: "Ielūgt visus no faila" success: "Fails veiksmīgi lejuplādēts, jums paziņos, kad process beidzies." error: "Atvainojiet, failam jābūt CSV formātā." password: @@ -914,7 +917,7 @@ lv: desc: network: "Lūdzu, pārbaudiet jūsu savienojumu." network_fixed: "Šķiet, tīkls atkal pieslēgts." - server: "Kļūdas kods: {{status}}" + server: "Kļūdas kods: %{status}" forbidden: "Jums nav pieejas šai lapai." not_found: "Upss, aplikācija mēģināja ielādēt saiti, kura neeksistē." unknown: "Kaut kas nogāja greizi." @@ -959,8 +962,8 @@ lv: hidden_for_session: "Labi, pajautāšu jums rīt. Starp citu, vienmēr var piereģistrēties, spiežot \"Ieiet sistēmā\"." summary: enabled_description: "Jūs skatāties šīs tēmas kopsavilkumu: pašus interesantākos ierakstus, pēc kopienas domām." - description: "Ir {{replyCount}} atbildes." - description_time: "Ir {{replyCount}} atbildes ar paredzamo lasīšanas laiku: {{readingTime}} minūtes." + description: "Ir %{replyCount} atbildes." + description_time: "Ir %{replyCount} atbildes ar paredzamo lasīšanas laiku: %{readingTime} minūtes." enable: "Tēmas kopsavilkums" disable: "Parādīt visus ierakstus" deleted_filter: @@ -971,8 +974,8 @@ lv: private_message_info: title: "Ziņa" edit: "Pievienot vai noņemt..." - remove_allowed_user: "Vai jūs tiešām gribat dzēst {{name}} no šīs ziņas?" - remove_allowed_group: "Vai jūs tiešām gribat dzēst {{name}} no šīs ziņas?" + remove_allowed_user: "Vai jūs tiešām gribat dzēst %{name} no šīs ziņas?" + remove_allowed_group: "Vai jūs tiešām gribat dzēst %{name} no šīs ziņas?" email: "E-pasts" username: "Lietotājvārds" last_seen: "Redzēts" @@ -1015,7 +1018,7 @@ lv: awaiting_activation: "Jūsu profils gaida aktivizāciju; izmantojiet saiti \"aizmirsu paroli\", lai izsūtītu citu aktivizācijas e-pastu." awaiting_approval: "Darbinieki pagaidām nav apstiprinājuši jūsu profilu. Jums nosūtīs e-pastu, kad tas notiks." requires_invite: "Atvainojiet, šim forumam var piekļūt tikai ar ielūgumiem." - not_activated: "Lai ieietu forumā, nepieciešams aktivizēt jūsu profilu. Mēs nosūtījām uz e-pastu {{sentTo}} instrukcijas, kā to paveikt." + not_activated: "Lai ieietu forumā, nepieciešams aktivizēt jūsu profilu. Mēs nosūtījām uz e-pastu %{sentTo} instrukcijas, kā to paveikt." not_allowed_from_ip_address: "Jūs nevarat ieiet no šīs IP adreses." admin_not_allowed_from_ip_address: "Jūs nevarat ieiet kā administrators no šīs IP adreses." resend_activation_email: "Klikšķiniet šeit, lai saņemtu aktivācijas e-pastu atkārtoti." @@ -1023,7 +1026,7 @@ lv: change_email: "Mainīt e-pasta adresi" provide_new_email: "Norādiet jaunu adresi, un mēs atkārtoti nosūtīsim jūsu apstiprinājuma e-pastu." submit_new_email: "Atjaunināt e-pasta adresi" - sent_activation_email_again: "Mēs nosūtijām vēl vienu aktivācijas epastu uz {{currentEmail}}. Tas var pienākt dažu minūšu laikā; atcerieties pārbaudīt jūsu surogātpasta mapi." + sent_activation_email_again: "Mēs nosūtijām vēl vienu aktivācijas epastu uz %{currentEmail}. Tas var pienākt dažu minūšu laikā; atcerieties pārbaudīt jūsu surogātpasta mapi." to_continue: "Lūdzu ieejiet" preferences: "Jums ir jāieiet, lai izmainītu savus iestatījumus." forgot: "Es nevaru atcerēties sava konta informāciju." @@ -1107,18 +1110,18 @@ lv: similar_topics: "Jūsu tēma ir līdzīga..." drafts_offline: "lokāls melnraksts" group_mentioned: - zero: "Pieminot {{group}}, neviens nesaņems paziņojumu, jo grupa ir tukša." - one: "Pieminot {{group}}, šis cilvēks saņems paziņojumu – esat pārliecināti?" - other: "Pieminot {{group}}, šiem {{count}} cilvēki saņems paziņojumu – esat pārliecināti?" + zero: "Pieminot %{group}, neviens nesaņems paziņojumu, jo grupa ir tukša." + one: "Pieminot %{group}, šis cilvēks saņems paziņojumu – esat pārliecināti?" + other: "Pieminot %{group}, šiem %{count} cilvēki saņems paziņojumu – esat pārliecināti?" cannot_see_mention: - category: "Jūs pieminējāt {{username}}, kas ir bez piekļuves šai sadaļai un tāpēc nesaņems nekādu paziņojumu. Lai to izlabotu, pievieno viņus grupai ar pieeju šai sadaļai." - private: "Jūsu pieminējāt {{username}}, kas neredzēs šo privāto ziņu un tāpēc nesaņems nekādu paziņojumu. Lai to izlabotu, pievieno viņus šai ziņai." - duplicate_link: "Izskatās, ka jūsu saiti uz {{domain}} tēmā jau ievietoja @{{username}} ierakstā {{ago}} - vai jūs tiešām vēlaties to ievietot vēlreiz?" + category: "Jūs pieminējāt %{username}, kas ir bez piekļuves šai sadaļai un tāpēc nesaņems nekādu paziņojumu. Lai to izlabotu, pievieno viņus grupai ar pieeju šai sadaļai." + private: "Jūsu pieminējāt %{username}, kas neredzēs šo privāto ziņu un tāpēc nesaņems nekādu paziņojumu. Lai to izlabotu, pievieno viņus šai ziņai." + duplicate_link: "Izskatās, ka jūsu saiti uz %{domain} tēmā jau ievietoja @%{username} ierakstā %{ago} - vai jūs tiešām vēlaties to ievietot vēlreiz?" error: title_missing: "Vajadzīgs nosaukums" - title_too_short: "Nosaukumā jābūt vismaz {{min}} burtiem" - title_too_long: "Nosaukums nevar būt garāks par {{max}} burtiem" - post_length: "Ierakstā jābūt vismaz {{min}} burtiem" + title_too_short: "Nosaukumā jābūt vismaz %{min} burtiem" + title_too_long: "Nosaukums nevar būt garāks par %{max} burtiem" + post_length: "Ierakstā jābūt vismaz %{min} burtiem" category_missing: "Jums ir jāizvēlas sadaļa" save_edit: "Saglabāt izmaiņas" reply_original: "Atbildēt sākotnējā tēmā" @@ -1179,12 +1182,12 @@ lv: none: "Pašlaik neizdodas ielādēt paziņojumus." empty: "Nav atrasti paziņojumi." popup: - mentioned: '{{username}} pieminēja jūs "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} pieminēja jūs "{{topic}}" - {{site_title}}' - quoted: '{{username}} citēja jūs "{{topic}}" - {{site_title}}' - replied: '{{username}} atbildēja jums "{{topic}}" - {{site_title}}' - posted: '{{username}} ierakstīja "{{topic}}" - {{site_title}}' - linked: '{{username}} ievietoja saiti uz jūsu ierakstu no "{{topic}}" - {{site_title}}' + mentioned: '%{username} pieminēja jūs "%{topic}" - %{site_title}' + group_mentioned: '%{username} pieminēja jūs "%{topic}" - %{site_title}' + quoted: '%{username} citēja jūs "%{topic}" - %{site_title}' + replied: '%{username} atbildēja jums "%{topic}" - %{site_title}' + posted: '%{username} ierakstīja "%{topic}" - %{site_title}' + linked: '%{username} ievietoja saiti uz jūsu ierakstu no "%{topic}" - %{site_title}' titles: watching_first_post: "Jauna tēma" upload_selector: @@ -1193,9 +1196,9 @@ lv: from_my_computer: "No manas ierīces" from_the_web: "No interneta" remote_tip: "saite uz attēlu" - remote_tip_with_attachments: "saite uz attēlu vai failu {{authorized_extensions}}" + remote_tip_with_attachments: "saite uz attēlu vai failu %{authorized_extensions}" local_tip: "izvēlēties attēlus no jūsu ierīces" - local_tip_with_attachments: "izvēlēties attēlus vai failus no jūsu ierīces {{authorized_extensions}}" + local_tip_with_attachments: "izvēlēties attēlus vai failus no jūsu ierīces %{authorized_extensions}" hint: "(Jūs varat arī augšuplādēt failus, ievelkot tos redaktorā)" hint_for_supported_browsers: "Jūs varat arī ievilkt vai ielīmēt redaktorā attēlus" uploading: "Augšuplādē" @@ -1214,13 +1217,13 @@ lv: no_results: "Nav rezultātu." no_more_results: "Vairāk nav rezultātu." searching: "Meklējam..." - post_format: "#{{post_number}} - {{username}}" + post_format: "#%{post_number} - %{username}" more_results: "Ir vēl vairāk rezultātu. Lūdzu precizējiet meklēšanas kritērijus." search_google_button: "Google" search_google_title: "Meklēt šajā vietnē" context: - user: "Meklēt ierakstus ar @{{username}}" - category: "Meklēt #{{category}} sadaļā" + user: "Meklēt ierakstus ar @%{username}" + category: "Meklēt #%{category} sadaļā" topic: "Meklēt šai tēmā" private_messages: "Meklēt ziņās" advanced: @@ -1284,7 +1287,7 @@ lv: selected: zero: "Jūs izvēlējāties 0. tēmas." one: "Jūs izvēlējāties %{count}. tēmu." - other: "Jūs izvēlējāties {{count}} tēmas." + other: "Jūs izvēlējāties %{count} tēmas." change_tags: "Aizvietot tagus" append_tags: "Pievienot tagus" choose_new_tags: "Izvēlēties jaunus tagus šīm tēmām:" @@ -1297,7 +1300,7 @@ lv: posted: "Jūs vel neesat rakstījuši nevienā tēmā." latest: "Nav jaunu tēmu. Neraža." bookmarks: "Jūs vēl neesat pievienojuši grāmatzīmēm nevienu tēmu." - category: "Sadaļā {{category}} nav tēmu." + category: "Sadaļā %{category} nav tēmu." top: "Nav svarīgu tēmu." educate: new: '
Jūsu jaunās tēmas parādās šeit.
Pēc noklusējuma tēmas tiek uzskatītas par jaunām un parādīsies jauns indikators, ja tās tika izveidotas pēdējo 2 dienu laikā.
To var izmainīt jūsu iestatījumos.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} godtok din invitasjon" - moved_post: "{{username}} flyttet {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Gjorde seg fortjent til '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nytt emne {{description}}" + one: "%{username}, %{username2} og én annen %{description}" + other: "%{username}, %{username2} og %{count} andre %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} godtok din invitasjon" + moved_post: "%{username} flyttet %{description}" + linked: "%{username} %{description}" + granted_badge: "Gjorde seg fortjent til '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nytt emne %{description}" group_message_summary: - one: "{{count}} melding i din {{group_name}} innboks" - other: "{{count}} meldinger i din innboks for {{group_name}}" + one: "%{count} melding i din %{group_name} innboks" + other: "%{count} meldinger i din innboks for %{group_name}" popup: - mentioned: '{{username}} nevnte deg i "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} nevnte deg i "{{topic}}" - {{site_title}}' - quoted: '{{username}} siterte deg i "{{topic}}" - {{site_title}}' - replied: '{{username}} svarte deg i "{{topic}}" - {{site_title}}' - posted: '{{username}} skrev noe i "{{topic}}" - {{site_title}}' - private_message: '{{username}} sendte deg en personlig melding i "{{topic}}" - {{site_title}}' - linked: '{{username}} lenket til innlegget ditt i "{{topic}}" - {{site_title}}' + mentioned: '%{username} nevnte deg i "%{topic}" - %{site_title}' + group_mentioned: '%{username} nevnte deg i "%{topic}" - %{site_title}' + quoted: '%{username} siterte deg i "%{topic}" - %{site_title}' + replied: '%{username} svarte deg i "%{topic}" - %{site_title}' + posted: '%{username} skrev noe i "%{topic}" - %{site_title}' + private_message: '%{username} sendte deg en personlig melding i "%{topic}" - %{site_title}' + linked: '%{username} lenket til innlegget ditt i "%{topic}" - %{site_title}' confirm_title: "Varslinger aktivert - %{site_title}" confirm_body: "Suksess! Varslinger er nå aktivert." titles: @@ -1428,9 +1431,9 @@ nb_NO: from_my_computer: "Fra min enhet" from_the_web: "Fra nettet" remote_tip: "lenke til bilde" - remote_tip_with_attachments: "lenke til bilde eller fil {{authorized_extensions}}" + remote_tip_with_attachments: "lenke til bilde eller fil %{authorized_extensions}" local_tip: "velg bilder fra din enhet" - local_tip_with_attachments: "velg bilde eller fil fra din enhet {{authorized_extensions}}" + local_tip_with_attachments: "velg bilde eller fil fra din enhet %{authorized_extensions}" hint: "(du kan også dra og slippe inn i tekstbehandleren for å laste dem opp)" hint_for_supported_browsers: "du kan også dra og slippe eller lime inn bilder i tekstbehandleren" uploading: "Laster opp bilde" @@ -1447,15 +1450,15 @@ nb_NO: clear_all: "Fjern Alle" too_short: "Din søketekst er for kort." result_count: - one: "%{count} resultat for{{term}}" - other: "{{count}}{{plus}} resultater for{{term}}" + one: "%{count} resultat for%{term}" + other: "%{count}%{plus} resultater for%{term}" title: "søk etter emner, innlegg, brukere eller kategorier" full_page_title: "søk etter emner eller innlegg" no_results: "Ingen resultater funnet." no_more_results: "Ingen flere resultater funnet." searching: "Søker…" - post_format: "#{{post_number}} av {{username}}" - results_page: "Søkeresultater for \"{{term}}\"" + post_format: "#%{post_number} av %{username}" + results_page: "Søkeresultater for \"%{term}\"" more_results: "Det finnes flere resultater. Begrens søket ditt." cant_find: "Finner du ikke det du leter etter?" start_new_topic: "Kanskje du kan starte et nytt emne?" @@ -1464,8 +1467,8 @@ nb_NO: search_google_button: "Google" search_google_title: "Søk på denne siden" context: - user: "Søk i innleggene av @{{username}}" - category: "Søk i kategorien #{{category}}" + user: "Søk i innleggene av @%{username}" + category: "Søk i kategorien #%{category}" topic: "Søk i dette emnet" private_messages: "Søk i meldinger" advanced: @@ -1539,7 +1542,7 @@ nb_NO: choose_new_category: "Velg den nye kategorien for emnene:" selected: one: "Du har valgt %{count} emne." - other: "Du har valgt {{count}} emner." + other: "Du har valgt %{count} emner." change_tags: "Erstatt stikkord" append_tags: "Legg til stikkord" choose_new_tags: "Velg nye stikkord for følgende emner:" @@ -1552,7 +1555,7 @@ nb_NO: posted: "Du har ikke skrevet innlegg i noen emner enda." latest: "Det finnes ingen siste emner. Det er sørgelig." bookmarks: "Du har ingen bokmerkede emner enda." - category: "Det finnes ingen {{category}}-emner." + category: "Det finnes ingen %{category}-emner." top: "Det finnes ingen populære emner." educate: new: '
Dine nye emner vil vises her.
Som forvalg anses emner som nye og viser enny-indikator hvis de be opprettet i løpet av de siste 2 dagene.
Gå til innstillinger for å endre dette.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} heeft uw uitnodiging geaccepteerd" - moved_post: "{{username}} heeft {{description}} verplaatst" - linked: "{{username}} {{description}}" - granted_badge: "'{{description}}' ontvangen" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nieuw Topic {{description}}" - membership_request_accepted: "Lidmaatschap geaccepteerd in '{{group_name}}'" - membership_request_consolidated: "{{count}} open lidmaatschapsaanvragen voor '{{group_name}}'" + one: "heeft %{count} van uw berichten geliket" + other: "heeft %{count} van uw berichten geliket" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} heeft uw uitnodiging geaccepteerd" + moved_post: "%{username} heeft %{description} verplaatst" + linked: "%{username} %{description}" + granted_badge: "'%{description}' ontvangen" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nieuw Topic %{description}" + membership_request_accepted: "Lidmaatschap geaccepteerd in '%{group_name}'" + membership_request_consolidated: "%{count} open lidmaatschapsaanvragen voor '%{group_name}'" group_message_summary: - one: "{{count}} bericht in uw Postvak IN voor {{group_name}}" - other: "{{count}} berichten in uw Postvak IN voor {{group_name}}" + one: "%{count} bericht in uw Postvak IN voor %{group_name}" + other: "%{count} berichten in uw Postvak IN voor %{group_name}" popup: - mentioned: '{{username}} heeft u genoemd in ''{{topic}}'' - {{site_title}}' - group_mentioned: '{{username}} heeft u genoemd in ''{{topic}}'' - {{site_title}}' - quoted: '{{username}} heeft u geciteerd in ''{{topic}}'' - {{site_title}}' - replied: '{{username}} heeft op u geantwoord in ''{{topic}}'' - {{site_title}}' - posted: '{{username}} heeft een bericht geplaatst in ''{{topic}}'' - {{site_title}}' - private_message: '{{username}} heeft u een persoonlijk bericht gestuurd in ''{{topic}}'' - {{site_title}}' - linked: '{{username}} heeft een koppeling naar uw bericht geplaatst vanaf ''{{topic}}'' - {{site_title}}' - watching_first_post: '{{username}} heeft een nieuw topic gemaakt: ''{{topic}}'' - {{site_title}}' + mentioned: '%{username} heeft u genoemd in ''%{topic}'' - %{site_title}' + group_mentioned: '%{username} heeft u genoemd in ''%{topic}'' - %{site_title}' + quoted: '%{username} heeft u geciteerd in ''%{topic}'' - %{site_title}' + replied: '%{username} heeft op u geantwoord in ''%{topic}'' - %{site_title}' + posted: '%{username} heeft een bericht geplaatst in ''%{topic}'' - %{site_title}' + private_message: '%{username} heeft u een persoonlijk bericht gestuurd in ''%{topic}'' - %{site_title}' + linked: '%{username} heeft een koppeling naar uw bericht geplaatst vanaf ''%{topic}'' - %{site_title}' + watching_first_post: '%{username} heeft een nieuw topic gemaakt: ''%{topic}'' - %{site_title}' confirm_title: "Meldingen ingeschakeld - %{site_title}" confirm_body: "Gelukt! Meldingen zijn ingeschakeld." - custom: "Melding van {{username}} op %{site_title}" + custom: "Melding van %{username} op %{site_title}" titles: mentioned: "genoemd" replied: "nieuw antwoord" @@ -1767,9 +1784,9 @@ nl: from_my_computer: "Vanaf mijn apparaat" from_the_web: "Vanaf het web" remote_tip: "koppeling naar afbeelding" - remote_tip_with_attachments: "koppeling naar afbeelding of bestand {{authorized_extensions}}" + remote_tip_with_attachments: "koppeling naar afbeelding of bestand %{authorized_extensions}" local_tip: "selecteer afbeeldingen vanaf uw apparaat" - local_tip_with_attachments: "selecteer afbeeldingen of bestanden vanaf uw apparaat {{authorized_extensions}}" + local_tip_with_attachments: "selecteer afbeeldingen of bestanden vanaf uw apparaat %{authorized_extensions}" hint: "(u kunt ook afbeeldingen naar de editor slepen om deze te uploaden)" hint_for_supported_browsers: "u kunt ook afbeeldingen naar de editor slepen of hierin plakken" uploading: "Uploaden" @@ -1786,15 +1803,15 @@ nl: clear_all: "Alles wissen" too_short: "Uw zoekterm is te kort." result_count: - one: "%{count} resultaat voor{{term}}" - other: "{{count}}{{plus}} resultaten voor{{term}}" + one: "%{count} resultaat voor%{term}" + other: "%{count}%{plus} resultaten voor%{term}" title: "zoeken naar topics, berichten, gebruikers of categorieën" full_page_title: "zoeken naar topics of berichten" no_results: "Geen resultaten gevonden." no_more_results: "Geen resultaten meer gevonden." searching: "Zoeken..." - post_format: "#{{post_number}} door {{username}}" - results_page: "Zoekresultaten voor '{{term}}'" + post_format: "#%{post_number} door %{username}" + results_page: "Zoekresultaten voor '%{term}'" more_results: "Er zijn meer resultaten. Verfijn uw zoekcriteria." cant_find: "Kunt u niet vinden wat u zoekt?" start_new_topic: "Misschien een nieuw topic starten?" @@ -1803,9 +1820,9 @@ nl: search_google_button: "Google" search_google_title: "Zoeken op deze website" context: - user: "Berichten van @{{username}} doorzoeken" - category: "De categorie #{{category}} doorzoeken" - tag: "De tag #{{tag}} doorzoeken" + user: "Berichten van @%{username} doorzoeken" + category: "De categorie #%{category} doorzoeken" + tag: "De tag #%{tag} doorzoeken" topic: "Dit topic doorzoeken" private_messages: "Berichten doorzoeken" advanced: @@ -1882,7 +1899,7 @@ nl: choose_new_category: "Kies de nieuwe categorie voor de topics:" selected: one: "U hebt %{count} topic geselecteerd." - other: "U hebt {{count}} topics geselecteerd." + other: "U hebt %{count} topics geselecteerd." change_tags: "Tags vervangen" append_tags: "Tags toevoegen" choose_new_tags: "Kies nieuwe tags voor deze topics:" @@ -1895,7 +1912,7 @@ nl: posted: "U hebt nog niet in een topic gereageerd." latest: "Er zijn geen nieuwste topics. Dat is jammer." bookmarks: "U hebt nog geen bladwijzers voor topics gemaakt." - category: "Er zijn geen topics in {{category}}." + category: "Er zijn geen topics in %{category}." top: "Er zijn geen toptopics." educate: new: '
Hier verschijnen uw nieuwe topics.
Standaard worden topics als nieuw beschouwd en verschijnt de indicator nieuw als deze de afgelopen 2 dagen zijn aangemaakt.
Bezoek uw voorkeuren om dit te wijzigen.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} przyjmuje twoje zaproszenie" - moved_post: "{{username}} przenosi {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Otrzymujesz '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nowy temat {{description}}" - membership_request_accepted: "Członkostwo zaakceptowane w „{{group_name}}”" - membership_request_consolidated: "{{count}} otwarte wnioski o członkostwo dla „{{group_name}}”" + one: "polubiłem %{count} twoich postów" + few: "polubiłem %{count} twoich postów" + many: "polubiłem %{count} twoich postów" + other: "polubiono %{count} twoich postów" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} przyjmuje twoje zaproszenie" + moved_post: "%{username} przenosi %{description}" + linked: "%{username} %{description}" + granted_badge: "Otrzymujesz '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nowy temat %{description}" + membership_request_accepted: "Członkostwo zaakceptowane w „%{group_name}”" + membership_request_consolidated: "%{count} otwarte wnioski o członkostwo dla „%{group_name}”" group_message_summary: - one: "masz {{count}} wiadomość w skrzynce odbiorczej {{group_name}}" - few: "masz {{count}} wiadomości w skrzynce odbiorczej {{group_name}}" - many: "masz {{count}} wiadomości w skrzynce odbiorczej {{group_name}}" - other: "masz {{count}} wiadomości w skrzynce odbiorczej {{group_name}}" + one: "masz %{count} wiadomość w skrzynce odbiorczej %{group_name}" + few: "masz %{count} wiadomości w skrzynce odbiorczej %{group_name}" + many: "masz %{count} wiadomości w skrzynce odbiorczej %{group_name}" + other: "masz %{count} wiadomości w skrzynce odbiorczej %{group_name}" popup: - mentioned: '{{username}} wspomina o tobie w "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} wspomniał o Tobie w "{{topic}}" - {{site_title}}' - quoted: '{{username}} cytuje cie w "{{topic}}" - {{site_title}}' - replied: '{{username}} odpowiada na twój wpis w "{{topic}}" - {{site_title}}' - posted: '{{username}} pisze w "{{topic}}" - {{site_title}}' - private_message: '{{username}} wysłał Ci osobistą wiadomość w „{{topic}}” - {{site_title}}' - linked: '{{username}} linkuje do twojego wpisu z "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} utworzył nowy temat „{{topic}}” - {{site_title}}' + mentioned: '%{username} wspomina o tobie w "%{topic}" - %{site_title}' + group_mentioned: '%{username} wspomniał o Tobie w "%{topic}" - %{site_title}' + quoted: '%{username} cytuje cie w "%{topic}" - %{site_title}' + replied: '%{username} odpowiada na twój wpis w "%{topic}" - %{site_title}' + posted: '%{username} pisze w "%{topic}" - %{site_title}' + private_message: '%{username} wysłał Ci osobistą wiadomość w „%{topic}” - %{site_title}' + linked: '%{username} linkuje do twojego wpisu z "%{topic}" - %{site_title}' + watching_first_post: '%{username} utworzył nowy temat „%{topic}” - %{site_title}' confirm_title: "Powiadomienia włączone - %{site_title}" confirm_body: "Powodzenie! Powiadomienia zostały włączone." - custom: "Powiadomienie od {{username}} na %{site_title}" + custom: "Powiadomienie od %{username} na %{site_title}" titles: mentioned: "wzmiankowany" replied: "nowa odpowiedź" @@ -1844,9 +1846,9 @@ pl_PL: from_my_computer: "Z mojego urządzenia" from_the_web: "Z Internetu" remote_tip: "link do obrazu" - remote_tip_with_attachments: "link do obrazu lub pliku {{authorized_extensions}}" + remote_tip_with_attachments: "link do obrazu lub pliku %{authorized_extensions}" local_tip: "wybierz obrazy ze swojego urządzenia" - local_tip_with_attachments: "wybierz obrazy lub pliki ze swojego urządzenia {{authorized_extensions}}" + local_tip_with_attachments: "wybierz obrazy lub pliki ze swojego urządzenia %{authorized_extensions}" hint: "(możesz także upuścić plik z katalogu komputera w okno edytora)" hint_for_supported_browsers: "możesz też przeciągać lub wklejać grafiki do edytora" uploading: "Wgrywanie" @@ -1863,17 +1865,17 @@ pl_PL: clear_all: "Wyczyść wszystkie" too_short: "Wyszukiwana fraza jest zbyt krótka." result_count: - one: "Wynik %{count} dla {{term}}" - few: "{{count}}{{plus}} wyniki dla {{term}}" - many: "{{count}}{{plus}} wyniki dla {{term}}" - other: "{{count}}{{plus}} wyniki dla {{term}}" + one: "Wynik %{count} dla %{term}" + few: "%{count}%{plus} wyniki dla %{term}" + many: "%{count}%{plus} wyniki dla %{term}" + other: "%{count}%{plus} wyniki dla %{term}" title: "szukaj tematów, wpisów, użytkowników lub kategorii" full_page_title: "szukaj tematów lub postów" no_results: "Brak wyników wyszukiwania" no_more_results: "Nie znaleziono więcej wyników." searching: "Szukam…" - post_format: "#{{post_number}} za {{username}}" - results_page: "Wyniki wyszukiwania dla '{{term}}'" + post_format: "#%{post_number} za %{username}" + results_page: "Wyniki wyszukiwania dla '%{term}'" more_results: "Istnieje więcej wyników wyszukiwania. Doprecyzuj kryteria wyszukiwania." cant_find: "Nie możesz znaleźć tego, czego szukasz?" start_new_topic: "Może utwórz nowy temat?" @@ -1882,9 +1884,9 @@ pl_PL: search_google_button: "Google" search_google_title: "Przeszukaj tę stronę" context: - user: "Szukaj wpisów @{{username}}" - category: "Szukaj w kategorii #{{category}}" - tag: "Wyszukaj znacznik # {{tag}}" + user: "Szukaj wpisów @%{username}" + category: "Szukaj w kategorii #%{category}" + tag: "Wyszukaj znacznik # %{tag}" topic: "Szukaj w tym temacie" private_messages: "Wyszukiwanie wiadomości" advanced: @@ -1961,9 +1963,9 @@ pl_PL: choose_new_category: "Wybierz nową kategorię dla tematów:" selected: one: "Zaznaczono %{count} temat." - few: "Zaznaczono {{count}} tematy." - many: "Zaznaczono {{count}} tematów." - other: "Zaznaczono {{count}} tematów." + few: "Zaznaczono %{count} tematy." + many: "Zaznaczono %{count} tematów." + other: "Zaznaczono %{count} tematów." change_tags: "Zmień tagi" append_tags: "Dodaj tagi" choose_new_tags: "Wybierz nowe tagi dla tych tematów:" @@ -1976,7 +1978,7 @@ pl_PL: posted: "Jeszcze nie zamieściłeś wpisu w żadnym z tematów." latest: "Nie ma najnowszych tematów. Smutne." bookmarks: "Nie posiadasz tematów dodanych do zakładek." - category: "Nie ma tematów w kategorii {{category}}." + category: "Nie ma tematów w kategorii %{category}." top: "Brak najlepszych tematów." educate: new: '
Nowe tematy będą pojawiać się tutaj.
Domyślnie tematy są określane jako nowe i będą oznaczone jakonowe jeśli były stworzone w ciągu ostatnich 2 dni.
Odwiedź swoje ustawienia by to zmienić.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} aceitou o seu convite" - moved_post: "{{username}} movido {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Ganhou '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Novo Tópico {{description}}" + one: "gostou de %{count} das suas publicações" + other: "gostou de %{count} das suas publicações" + liked_consolidated: "%{username}%{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} aceitou o seu convite" + moved_post: "%{username} movido %{description}" + linked: "%{username} %{description}" + granted_badge: "Ganhou '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Novo Tópico %{description}" group_message_summary: - one: "{{count}} mensagem no seu grupo {{group_name}}" - other: "{{count}} mensagens no seu grupo {{group_name}}" + one: "%{count} mensagem no seu grupo %{group_name}" + other: "%{count} mensagens no seu grupo %{group_name}" popup: - mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}' - quoted: '{{username}} citou-o em "{{topic}}" - {{site_title}}' - replied: '{{username}} respondeu-lhe em "{{topic}}" - {{site_title}}' - posted: '{{username}} publicou em "{{topic}}" - {{site_title}}' - private_message: '{{username}} enviou-lhe uma mensagem privada em "{{topic}}" - {{site_title}}' - linked: '{{username}} ligou à sua publicação de "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} criou um novo tópico "{{topic}}" - {{site_title}}' + mentioned: '%{username} mencionou-o em "%{topic}" - %{site_title}' + group_mentioned: '%{username} mencionou-o em "%{topic}" - %{site_title}' + quoted: '%{username} citou-o em "%{topic}" - %{site_title}' + replied: '%{username} respondeu-lhe em "%{topic}" - %{site_title}' + posted: '%{username} publicou em "%{topic}" - %{site_title}' + private_message: '%{username} enviou-lhe uma mensagem privada em "%{topic}" - %{site_title}' + linked: '%{username} ligou à sua publicação de "%{topic}" - %{site_title}' + watching_first_post: '%{username} criou um novo tópico "%{topic}" - %{site_title}' confirm_title: "Notificações ativas - %{site_title}" confirm_body: "Sucesso! As notificações foram ativadas." titles: @@ -1444,9 +1445,9 @@ pt: from_my_computer: "Do meu dispositivo " from_the_web: "Da Web" remote_tip: "hiperligação para a imagem" - remote_tip_with_attachments: "hiperligação para a imagem ou ficheiro {{authorized_extensions}}" + remote_tip_with_attachments: "hiperligação para a imagem ou ficheiro %{authorized_extensions}" local_tip: "selecionar imagens a partir do seu dispositivo" - local_tip_with_attachments: "selecionar imagens ou ficheiros a partir do seu dispositivo {{authorized_extensions}}" + local_tip_with_attachments: "selecionar imagens ou ficheiros a partir do seu dispositivo %{authorized_extensions}" hint: "(também pode arrastar e largar o ficheiro para o editor para o enviar)" hint_for_supported_browsers: "também pode arrastar e largar ou colar as imagens no editor" uploading: "A enviar" @@ -1463,15 +1464,15 @@ pt: clear_all: "Limpar Tudo" too_short: "O seu termo de pesquisa é muito curto." result_count: - one: "%{count} resultado para{{term}}" - other: "{{count}}{{plus}} resultados para{{term}}" + one: "%{count} resultado para%{term}" + other: "%{count}%{plus} resultados para%{term}" title: "pesquisar por tópicos, publicações, utilizadores, ou categorias" full_page_title: "pesquisar tópicos e publicações" no_results: "Não foram encontrados resultados." no_more_results: "Não foram encontrados mais resultados." searching: "A pesquisar..." - post_format: "#{{post_number}} por {{username}}" - results_page: "Resultados da pesquisa por '{{term}}'" + post_format: "#%{post_number} por %{username}" + results_page: "Resultados da pesquisa por '%{term}'" more_results: "Existem mais resultados. Por favor adicione mais critérios de pesquisa." cant_find: "Não encontra o que procura?" start_new_topic: "Talvez criar um novo tópico?" @@ -1480,8 +1481,8 @@ pt: search_google_button: "Google" search_google_title: "Pesquisar este site" context: - user: "Procurar publicações por @{{username}}" - category: "Pesquise na categoria #{{category}}" + user: "Procurar publicações por @%{username}" + category: "Pesquise na categoria #%{category}" topic: "Pesquisar este tópico" private_messages: "Pesquisar mensagens" advanced: @@ -1555,7 +1556,7 @@ pt: choose_new_category: "Escolha a nova categoria para os tópicos:" selected: one: "Selecionou %{count} tópico." - other: "Selecionou {{count}} tópicos." + other: "Selecionou %{count} tópicos." change_tags: "Substituir Etiquetas" append_tags: "Anexar Etiquetas" choose_new_tags: "Escolha novas etiquetas para estes tópicos:" @@ -1568,7 +1569,7 @@ pt: posted: "Ainda não publicou em nenhum tópico." latest: "Não há tópicos recentes." bookmarks: "Ainda não marcou nenhum tópico." - category: "Não há tópicos na categoria {{category}}." + category: "Não há tópicos na categoria %{category}." top: "Não existem tópicos recentes." educate: new: '
Os seus novos tópicos aparecem aqui.
Por defeito, os tópicos são considerados novos e mostrarão o indicador novo caso tenham sido criados nos últimos 2 dias.
Pode alterar isto nas suas preferências.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} aceitou o seu convite" - moved_post: "{{username}} moveu {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Ganhou '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Novo Tópico {{description}}" - membership_request_accepted: "Afiliação aceita em '{{group_name}}'" - membership_request_consolidated: "{{count}} abre solicitações de associação para '{{group_name}}'" + one: "curtiu %{count} de suas postagens" + other: "curtiu %{count} de suas postagens" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} aceitou o seu convite" + moved_post: "%{username} moveu %{description}" + linked: "%{username} %{description}" + granted_badge: "Ganhou '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Novo Tópico %{description}" + membership_request_accepted: "Afiliação aceita em '%{group_name}'" + membership_request_consolidated: "%{count} abre solicitações de associação para '%{group_name}'" group_message_summary: - one: "{{count}} mensagem na caixa de entrada de {{group_name}}" - other: "{{count}} mensagens na caixa de entrada de {{group_name}}" + one: "%{count} mensagem na caixa de entrada de %{group_name}" + other: "%{count} mensagens na caixa de entrada de %{group_name}" popup: - mentioned: '{{username}} mencionou você em "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} mencionou você em "{{topic}}" - {{site_title}}' - quoted: '{{username}} citou você em "{{topic}}" - {{site_title}}' - replied: '{{username}} te respondeu em "{{topic}}" - {{site_title}}' - posted: '{{username}} postou em "{{topic}}" - {{site_title}}' - private_message: '{{username}} te enviou uma mensagem pessoal em "{{topic}}" - {{site_title}}' - linked: '{{username}} referenciou a sua postagem em "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} criou um novo tópico "{{topic}}" - {{site_title}}' + mentioned: '%{username} mencionou você em "%{topic}" - %{site_title}' + group_mentioned: '%{username} mencionou você em "%{topic}" - %{site_title}' + quoted: '%{username} citou você em "%{topic}" - %{site_title}' + replied: '%{username} te respondeu em "%{topic}" - %{site_title}' + posted: '%{username} postou em "%{topic}" - %{site_title}' + private_message: '%{username} te enviou uma mensagem pessoal em "%{topic}" - %{site_title}' + linked: '%{username} referenciou a sua postagem em "%{topic}" - %{site_title}' + watching_first_post: '%{username} criou um novo tópico "%{topic}" - %{site_title}' confirm_title: "Notificações habilitadas - %{site_title}" confirm_body: "Sucesso! Notificações foram habilitadas." - custom: "Notificação de {{username}} em %{site_title}" + custom: "Notificação de %{username} em %{site_title}" titles: mentioned: "mencionado" replied: "nova resposta" @@ -1767,9 +1769,9 @@ pt_BR: from_my_computer: "Do meu dispositivo" from_the_web: "Da Internet" remote_tip: "link para imagem" - remote_tip_with_attachments: "link para imagem ou arquivo {{authorized_extensions}}" + remote_tip_with_attachments: "link para imagem ou arquivo %{authorized_extensions}" local_tip: "selecione imagens a partir do seu dispositivo" - local_tip_with_attachments: "selecione imagens ou arquivos do seu dispositivo {{authorized_extensions}}" + local_tip_with_attachments: "selecione imagens ou arquivos do seu dispositivo %{authorized_extensions}" hint: "(você também pode arrastar e soltar no editor para enviá-las)" hint_for_supported_browsers: "você também pode arrastar e soltar no editor para enviá-las" uploading: "Enviando" @@ -1786,15 +1788,15 @@ pt_BR: clear_all: "Limpar Todos" too_short: "Seu termo de pesquisa é muito curto." result_count: - one: "%{count} resultado para{{term}}" - other: "{{count}}{{plus}} resultados para{{term}}" + one: "%{count} resultado para%{term}" + other: "%{count}%{plus} resultados para%{term}" title: "pesquisar tópicos, postagens, usuários, ou categorias" full_page_title: "pesquisar tópicos ou postagens" no_results: "Nenhum resultado encontrado." no_more_results: "Nenhum outro resultado encontrado." searching: "Pesquisando..." - post_format: "#{{post_number}} por {{username}}" - results_page: "Pesquisar resultados para '{{term}}'" + post_format: "#%{post_number} por %{username}" + results_page: "Pesquisar resultados para '%{term}'" more_results: "Existem mais resultados. Por favor, restrinja os seus critérios de pesquisa." cant_find: "Não consegue encontrar o que você está procurando?" start_new_topic: "Que tal começar um novo tópico?" @@ -1803,9 +1805,9 @@ pt_BR: search_google_button: "Google" search_google_title: "Pesquisar este site" context: - user: "Pesquisar postagens por @{{username}}" - category: "Pesquisar a categoria #{{category}}" - tag: "Pesquisar a #{{tag}} etiqueta" + user: "Pesquisar postagens por @%{username}" + category: "Pesquisar a categoria #%{category}" + tag: "Pesquisar a #%{tag} etiqueta" topic: "Pesquisar este tópico" private_messages: "Pesquisar mensagens" advanced: @@ -1882,7 +1884,7 @@ pt_BR: choose_new_category: "Escolha a nova categoria para os tópicos:" selected: one: "Você selecionou %{count} tópico." - other: "Você selecionou {{count}} tópicos." + other: "Você selecionou %{count} tópicos." change_tags: "Substituir Etiquetas" append_tags: "Adicionar Etiquetas" choose_new_tags: "Escolha novas etiquetas para estes tópicos:" @@ -1895,7 +1897,7 @@ pt_BR: posted: "Você ainda não postou em nenhum tópico." latest: "Não há últimos tópicos. Isto é triste." bookmarks: "Você ainda não tem nenhum tópico favorito." - category: "Não há tópicos na categoria {{category}}." + category: "Não há tópicos na categoria %{category}." top: "Não há melhores tópicos." educate: new: '
Seus novos tópicos aparecem aqui.
Por padrão, tópicos são considerados novos e mostrarão um indicador de novo se eles foram criados nos últimos 2 dias.
Visite as suas preferências para alterar isto.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} ți-a acceptat invitația" - moved_post: "{{username}} a mutat {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Ai câștigat '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Subiect nou {{description}}" + one: "%{username}, %{username2} și încă o persoană %{description}" + few: "%{username}, %{username2} și încă o persoană %{description}" + other: "%{username}, %{username2} și alți %{count} %{description}" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} ți-a acceptat invitația" + moved_post: "%{username} a mutat %{description}" + linked: "%{username} %{description}" + granted_badge: "Ai câștigat '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Subiect nou %{description}" popup: - mentioned: '{{username}} te-a menţionat în "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} te-a menţionat în "{{topic}}" - {{site_title}}' - quoted: '{{username}} te-a citat în "{{topic}}" - {{site_title}}' - replied: '{{username}} ți-a răspuns la "{{topic}}" - {{site_title}}' - posted: '{{username}} a postat în "{{topic}}" - {{site_title}}' - linked: '{{username}} a pus un link către postarea ta din "{{topic}}" - {{site_title}}' + mentioned: '%{username} te-a menţionat în "%{topic}" - %{site_title}' + group_mentioned: '%{username} te-a menţionat în "%{topic}" - %{site_title}' + quoted: '%{username} te-a citat în "%{topic}" - %{site_title}' + replied: '%{username} ți-a răspuns la "%{topic}" - %{site_title}' + posted: '%{username} a postat în "%{topic}" - %{site_title}' + linked: '%{username} a pus un link către postarea ta din "%{topic}" - %{site_title}' titles: watching_first_post: "subiect nou" upload_selector: @@ -1301,9 +1304,9 @@ ro: from_my_computer: "Din dispozitivul meu" from_the_web: "De pe web" remote_tip: "link către imagine" - remote_tip_with_attachments: "link la imagine sau fișier {{authorized_extensions}}" + remote_tip_with_attachments: "link la imagine sau fișier %{authorized_extensions}" local_tip: "alege imagini de pe dispozitivul tău" - local_tip_with_attachments: "alege imagini sau fișiere de pe dispozitivul tău {{authorized_extensions}}" + local_tip_with_attachments: "alege imagini sau fișiere de pe dispozitivul tău %{authorized_extensions}" hint: "(poți să faci drag and drop în editor pentru a le încărca)" hint_for_supported_browsers: "Poți de asemenea să faci drag and drop sau să lipești imagini în editor" uploading: "Se încarcă" @@ -1323,15 +1326,15 @@ ro: no_results: "Nici un rezultat." no_more_results: "Nu s-au mai găsit alte rezultate." searching: "Se caută..." - post_format: "#{{post_number}} de {{username}}" - results_page: "Caută rezultate pentru '{{term}}'" + post_format: "#%{post_number} de %{username}" + results_page: "Caută rezultate pentru '%{term}'" start_new_topic: "Creează un nou subiect?" or_search_google: "Sau încearcă să cauți cu Google:" search_google_button: "Google" search_google_title: "Caută în această pagină" context: - user: "Caută postări după @{{username}}" - category: "Caută în categoria #{{category}} " + user: "Caută postări după @%{username}" + category: "Caută în categoria #%{category} " topic: "Caută în acest subiect" private_messages: "Caută mesaje" advanced: @@ -1400,8 +1403,8 @@ ro: choose_new_category: "Alege o nouă categorie pentru acest subiect" selected: one: "Ai selectat un subiect." - few: "Ai selectat {{count}} subiecte." - other: "Ai selectat {{count}} de subiecte." + few: "Ai selectat %{count} subiecte." + other: "Ai selectat %{count} de subiecte." change_tags: "Înlocuiește etichete" append_tags: "Adaugă etichete" choose_new_tags: "Alege etichete noi pentru aceste subiecte:" @@ -1414,7 +1417,7 @@ ro: posted: "Nu ai postat încă în niciun subiect." latest: "Nu există niciun subiect recent. Asta-i trist." bookmarks: "Nu ai nici un semn de carte încă." - category: "Nu există niciun subiect din categoria {{category}}." + category: "Nu există niciun subiect din categoria %{category}." top: "Nu exită niciun subiect de top." educate: new: '
Subiectele noi vor apărea aici.
Implicit, subiectele vor fi considerate noi și vor afișa un indicator că suntnoi dacă au fost create în ultimele 2 zile.
Mergi la preferințe pentru a schimba această setare.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} принял ваше приглашение" - moved_post: "{{username}} moved {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Заслужил(а) '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Новая тема {{description}}" - membership_request_accepted: "Запрос на вступление принят '{{group_name}}'" - membership_request_consolidated: "{{count}} открытые запросы на вступления для '{{group_name}}'" + one: "Понравилось %{count} ваше сообщение" + few: "Понравилось %{count} ваших сообщения" + many: "Понравилось %{count} ваших сообщений" + other: "Понравилось %{count} ваших сообщений" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} принял ваше приглашение" + moved_post: "%{username} moved %{description}" + linked: "%{username} %{description}" + granted_badge: "Заслужил(а) '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Новая тема %{description}" + membership_request_accepted: "Запрос на вступление принят '%{group_name}'" + membership_request_consolidated: "%{count} открытые запросы на вступления для '%{group_name}'" group_message_summary: - one: "{{count}} сообщение в вашей группе: {{group_name}} " - few: "{{count}} сообщения в вашей группе: {{group_name}} " - many: "{{count}} сообщений в вашей группе: {{group_name}} " - other: "{{count}} сообщений в вашей группе: {{group_name}} " + one: "%{count} сообщение в вашей группе: %{group_name} " + few: "%{count} сообщения в вашей группе: %{group_name} " + many: "%{count} сообщений в вашей группе: %{group_name} " + other: "%{count} сообщений в вашей группе: %{group_name} " popup: - mentioned: '{{username}} упомянул вас в "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} упомянул вас в "{{topic}}" - {{site_title}}' - quoted: '{{username}} процитировал Вас в "{{topic}}" - {{site_title}}' - replied: '{{username}} ответил вам в "{{topic}}" - {{site_title}}' - posted: '{{username}} написал в "{{topic}}" - {{site_title}}' - private_message: '{{username}} отправил вам личное сообщение в "{{topic}}" - {{site_title}}' - linked: '{{username}} сослался на ваше сообщение из "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} создал новую тему "{{topic}}" - {{site_title}}' + mentioned: '%{username} упомянул вас в "%{topic}" - %{site_title}' + group_mentioned: '%{username} упомянул вас в "%{topic}" - %{site_title}' + quoted: '%{username} процитировал Вас в "%{topic}" - %{site_title}' + replied: '%{username} ответил вам в "%{topic}" - %{site_title}' + posted: '%{username} написал в "%{topic}" - %{site_title}' + private_message: '%{username} отправил вам личное сообщение в "%{topic}" - %{site_title}' + linked: '%{username} сослался на ваше сообщение из "%{topic}" - %{site_title}' + watching_first_post: '%{username} создал новую тему "%{topic}" - %{site_title}' confirm_title: "Уведомления включены - %{site_title}" confirm_body: "Успешно! Уведомления были включены." - custom: "Уведомления от {{username}} до %{site_title}" + custom: "Уведомления от %{username} до %{site_title}" titles: mentioned: "Упомянутый" replied: "Новый ответ" @@ -1890,9 +1892,9 @@ ru: from_my_computer: "С моего устройства" from_the_web: "Из интернета" remote_tip: "Ссылка на изображение" - remote_tip_with_attachments: "Ссылка на изображение или файл {{authorized_extensions}}" + remote_tip_with_attachments: "Ссылка на изображение или файл %{authorized_extensions}" local_tip: "Выбор изображения с вашего устройства" - local_tip_with_attachments: "Выбор изображения или файла с вашего устройства {{authorized_extensions}}" + local_tip_with_attachments: "Выбор изображения или файла с вашего устройства %{authorized_extensions}" hint: "(вы также можете перетащить объект в редактор для его загрузки)" hint_for_supported_browsers: "вы также можете перетащить или скопировать изображения в редактор" uploading: "Загрузка" @@ -1909,17 +1911,17 @@ ru: clear_all: "Сбросить все" too_short: "Слишком короткое слово для поиска." result_count: - one: "%{count} результат для {{term}}" - few: "{{count}}{{plus}} результата для {{term}}" - many: "{{count}}{{plus}} результатов для {{term}}" - other: "{{count}}{{plus}} результатов для {{term}}" + one: "%{count} результат для %{term}" + few: "%{count}%{plus} результата для %{term}" + many: "%{count}%{plus} результатов для %{term}" + other: "%{count}%{plus} результатов для %{term}" title: "Поиск по темам, сообщениям, псевдонимам и разделам" full_page_title: "поиск тем или сообщений" no_results: "Ничего не найдено." no_more_results: "Больше ничего не найдено." searching: "Поиск ..." - post_format: "#{{post_number}} от {{username}}" - results_page: "Результаты поиска для '{{term}}'" + post_format: "#%{post_number} от %{username}" + results_page: "Результаты поиска для '%{term}'" more_results: "Найдено множество результатов. Пожалуйста, уточните, критерии поиска." cant_find: "Не можете найти нужную информацию?" start_new_topic: "Создайте новую тему" @@ -1928,9 +1930,9 @@ ru: search_google_button: "Google" search_google_title: "Искать на этом сайте" context: - user: "Искать сообщения от @{{username}}" - category: "Искать в разделе #{{category}}" - tag: "Поиск по #{{tag}} тегу" + user: "Искать сообщения от @%{username}" + category: "Искать в разделе #%{category}" + tag: "Поиск по #%{tag} тегу" topic: "Искать в этой теме" private_messages: "Искать в личных сообщениях" advanced: @@ -2006,10 +2008,10 @@ ru: notification_level: "Уведомления" choose_new_category: "Выберите новый раздел для этих тем:" selected: - one: "Вы выбрали {{count}} тему." - few: "Вы выбрали {{count}} темы." - many: "Вы выбрали {{count}} тем." - other: "Вы выбрали {{count}} тем." + one: "Вы выбрали %{count} тему." + few: "Вы выбрали %{count} темы." + many: "Вы выбрали %{count} тем." + other: "Вы выбрали %{count} тем." change_tags: "Заменить теги" append_tags: "Добавить теги" choose_new_tags: "Выберите новые теги для этих тем:" @@ -2022,7 +2024,7 @@ ru: posted: "Вы не принимали участие в обсуждении." latest: "Новых тем нет." bookmarks: "У вас нет избранных тем." - category: "В разделе {{category}} отсутствуют темы." + category: "В разделе %{category} отсутствуют темы." top: "Нет обсуждаемых тем." educate: new: '
Ваши новые темы скоро появятся тут.
Новые темы по умолчанию отмечаются иконкой Новая , если они были созданы за последние 2 дня.
При необходимости вы можете изменить параметры уведомлений в настройках профиля пользователя.
Tu sa zobrazia Vaše nové témy.
V predvolenom nastavení sú témy považované za nové a zobrazí indikátor nové ak boli vytvorené za posledné 2 dni.
Môžete to zmeniť vo Vašich nastaveniach.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} je sprejel tvoje povabilo." - moved_post: "{{username}} premaknil {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Prislužili '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nova tema {{description}}" - membership_request_accepted: "Sprejeti v članstvo v '{{group_name}}'" + one: "je všečkal %{count} vaš prispevek" + two: "je všečkal %{count} vaša prispevka" + few: "je všečkal %{count} vaše prispevke" + other: "je všečkal %{count} vaših prispevkov" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} je sprejel tvoje povabilo." + moved_post: "%{username} premaknil %{description}" + linked: "%{username} %{description}" + granted_badge: "Prislužili '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nova tema %{description}" + membership_request_accepted: "Sprejeti v članstvo v '%{group_name}'" group_message_summary: - one: "{{count}} sporočilo v{{group_name}} predalu" - two: "{{count}} sporočili v {{group_name}} predalu" - few: "{{count}} sporočila v {{group_name}} predalu" - other: "{{count}} sporočil v {{group_name}} predalu" + one: "%{count} sporočilo v%{group_name} predalu" + two: "%{count} sporočili v %{group_name} predalu" + few: "%{count} sporočila v %{group_name} predalu" + other: "%{count} sporočil v %{group_name} predalu" popup: - mentioned: '{{username}} vas je omenil v"{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} vas je omenil v "{{topic}}" - {{site_title}}' - quoted: '{{username}} vas je citiral v "{{topic}}" - {{site_title}}' - replied: '{{username}} vam je odgovoril v "{{topic}}" - {{site_title}}' - posted: '{{username}} objavil v "{{topic}}" - {{site_title}}' - private_message: '{{username}} vam je poslal zasebno sporočilo "{{topic}}" - {{site_title}}' - linked: '{{username}} je dodal povezavo na vaš prispevek iz "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} je ustvaril novo temo "{{topic}}" - {{site_title}}' + mentioned: '%{username} vas je omenil v"%{topic}" - %{site_title}' + group_mentioned: '%{username} vas je omenil v "%{topic}" - %{site_title}' + quoted: '%{username} vas je citiral v "%{topic}" - %{site_title}' + replied: '%{username} vam je odgovoril v "%{topic}" - %{site_title}' + posted: '%{username} objavil v "%{topic}" - %{site_title}' + private_message: '%{username} vam je poslal zasebno sporočilo "%{topic}" - %{site_title}' + linked: '%{username} je dodal povezavo na vaš prispevek iz "%{topic}" - %{site_title}' + watching_first_post: '%{username} je ustvaril novo temo "%{topic}" - %{site_title}' confirm_title: "Obvestila omogočena - %{site_title}" confirm_body: "Uspelo! Obvestila so bila omogočena." - custom: "Obvestilo od {{username}} na %{site_title}" + custom: "Obvestilo od %{username} na %{site_title}" titles: mentioned: "omenjen" replied: "nov odgovor" @@ -1685,9 +1686,9 @@ sl: from_my_computer: "Iz moje naprave" from_the_web: "Iz spletne strani" remote_tip: "povezava do slike" - remote_tip_with_attachments: "povezava do slike ali datoteke {{authorized_extensions}}" + remote_tip_with_attachments: "povezava do slike ali datoteke %{authorized_extensions}" local_tip: "izberite slike iz vaše naprave" - local_tip_with_attachments: "izberite slike na svoji napravi {{authorized_extensions}}" + local_tip_with_attachments: "izberite slike na svoji napravi %{authorized_extensions}" hint: "(slike lahko naložite tudi tako, da jih povlečete in spustite v urejevalnik) " hint_for_supported_browsers: "slike lahko naložite tudi tako, da jih povlečete in spustite v urejevalnik" uploading: "Nalagam" @@ -1704,17 +1705,17 @@ sl: clear_all: "Počisti vse" too_short: "Niz za iskanje je prekratek" result_count: - one: "{{count}} zadetek za{{term}}" - two: "{{count}}{{plus}} zadetka za{{term}}" - few: "{{count}}{{plus}} zadetki za{{term}}" - other: "{{count}}{{plus}} zadetkov za{{term}}" + one: "%{count} zadetek za%{term}" + two: "%{count}%{plus} zadetka za%{term}" + few: "%{count}%{plus} zadetki za%{term}" + other: "%{count}%{plus} zadetkov za%{term}" title: "išči po temah, prispevkih, uporabnikih ali kategorijah" full_page_title: "išči teme ali prispevke" no_results: "Iskanje nima zadetkov." no_more_results: "Ni več zadetkov iskanja." searching: "Iščem ..." - post_format: "#{{post_number}} od {{username}}" - results_page: "Zadetki iskanja za '{{term}}'" + post_format: "#%{post_number} od %{username}" + results_page: "Zadetki iskanja za '%{term}'" more_results: "Obstaja več zadetkov. Zožite kriterije iskanja." cant_find: "Ne najdete tega kar iščete?" start_new_topic: "Bi mogoče ustvarili novo temo?" @@ -1723,8 +1724,8 @@ sl: search_google_button: "Google" search_google_title: "Išči po tej spletni strani" context: - user: "Išči prispevke od @{{username}}" - category: "Išči po #{{category}} kategoriji" + user: "Išči prispevke od @%{username}" + category: "Išči po #%{category} kategoriji" topic: "Išči po tej temi" private_messages: "Išči po zasebnih sporočilih" advanced: @@ -1798,10 +1799,10 @@ sl: notification_level: "Obvestila" choose_new_category: "Izberi novo kategorijo za temo:" selected: - one: "Izbrali ste {{count}} temo." - two: "Izbrali ste {{count}} temi." - few: "Izbrali ste {{count}} teme." - other: "Izbrali ste {{count}} tem." + one: "Izbrali ste %{count} temo." + two: "Izbrali ste %{count} temi." + few: "Izbrali ste %{count} teme." + other: "Izbrali ste %{count} tem." change_tags: "Zamenjaj oznake" append_tags: "Dodaj oznake" choose_new_tags: "Izberite nove oznake za te teme:" @@ -1814,7 +1815,7 @@ sl: posted: "Niste objavili še v nobeni temi." latest: "Ni najnovejših tem. " bookmarks: "Nimate tem z zaznamki." - category: "Ni tem v kategoriji {{category}} ." + category: "Ni tem v kategoriji %{category} ." top: "Ni najboljših tem." educate: new: '
Tu se prikažejo vaše nove teme.
Privzeto se teme prikažejo kot nove in bodo imele oznako novo če so bile ustvarjene v zadnjih 2 dneh.
Obiščite nastavitve če želite spremembo.
Temat e reja shfaqen këtu.
Automatikisht, temat cilësohen si të reja dhe kanë një shënim i ri nëse janë krijuar gjatë dy ditëve të fundit.
Vizitoni preferencat për t''a ndryshuar këtë parametër.
{{username}}{{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} accepterade din inbjudan" - moved_post: "{{username}} flyttade {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Förtjänade '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Nytt ämne {{description}}" - membership_request_accepted: "Medlemskap godkänt i '{{group_name}}'" - membership_request_consolidated: "{{count}} öppna medlemsansökningar för '{{group_name}}'" + one: "gillade %{count} av dina inlägg" + other: "gillade %{count} av dina inlägg" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username}%{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} accepterade din inbjudan" + moved_post: "%{username} flyttade %{description}" + linked: "%{username} %{description}" + granted_badge: "Förtjänade '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Nytt ämne %{description}" + membership_request_accepted: "Medlemskap godkänt i '%{group_name}'" + membership_request_consolidated: "%{count} öppna medlemsansökningar för '%{group_name}'" group_message_summary: - one: "{{count}} meddelande i din {{group_name}} inkorg" - other: "{{count}} meddelanden i din {{group_name}}-inkorg" + one: "%{count} meddelande i din %{group_name} inkorg" + other: "%{count} meddelanden i din %{group_name}-inkorg" popup: - mentioned: '{{username}} nämnde dig i "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} nämnde dig i "{{topic}}" - {{site_title}}' - quoted: '{{username}} citerade dig i "{{topic}}" - {{site_title}}' - replied: '{{username}} svarade dig i "{{topic}}" - {{site_title}}' - posted: '{{username}} skrev i "{{topic}}" - {{site_title}}' - private_message: '{{username}} skickade dig ett privat meddelande i "{{topic}}" - {{site_title}}' - linked: '{{username}} länkade till ett inlägg du gjort från "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} skapade ett nytt ämne "{{topic}}" - {{site_title}}' + mentioned: '%{username} nämnde dig i "%{topic}" - %{site_title}' + group_mentioned: '%{username} nämnde dig i "%{topic}" - %{site_title}' + quoted: '%{username} citerade dig i "%{topic}" - %{site_title}' + replied: '%{username} svarade dig i "%{topic}" - %{site_title}' + posted: '%{username} skrev i "%{topic}" - %{site_title}' + private_message: '%{username} skickade dig ett privat meddelande i "%{topic}" - %{site_title}' + linked: '%{username} länkade till ett inlägg du gjort från "%{topic}" - %{site_title}' + watching_first_post: '%{username} skapade ett nytt ämne "%{topic}" - %{site_title}' confirm_title: "Notifieringar aktiverade - %{site_title}" confirm_body: "Framgång! Meddelanden har aktiverats." - custom: "Notifikationer från {{username}} hos %{site_title}" + custom: "Notifikationer från %{username} hos %{site_title}" titles: mentioned: "omnämnd" replied: "nytt svar" @@ -1770,9 +1772,9 @@ sv: from_my_computer: "Från min enhet" from_the_web: "Från webben" remote_tip: "länk till bild" - remote_tip_with_attachments: "länk till bild eller fil {{authorized_extensions}}" + remote_tip_with_attachments: "länk till bild eller fil %{authorized_extensions}" local_tip: "välj bilder från din enhet" - local_tip_with_attachments: "välj bilder eller filer från din enhet {{authorized_extensions}}" + local_tip_with_attachments: "välj bilder eller filer från din enhet %{authorized_extensions}" hint: "(du kan också dra & släppa in i redigeraren för att ladda upp dem)" hint_for_supported_browsers: "du kan också släppa eller klistra in bilder i redigeraren" uploading: "Laddar upp bild" @@ -1789,15 +1791,15 @@ sv: clear_all: "Rensa allt" too_short: "Din sökterm är för kort." result_count: - one: "%{count} resultat för{{term}}" - other: "{{count}}{{plus}} resultat för{{term}}" + one: "%{count} resultat för%{term}" + other: "%{count}%{plus} resultat för%{term}" title: "sök efter ämnen, inlägg, användare, eller kategorier" full_page_title: "sök ämnen eller inlägg" no_results: "Inga resultat hittades." no_more_results: "Inga fler resultat hittades." searching: "Söker ..." - post_format: "#{{post_number}} av {{username}}" - results_page: "Sökresultat för '{{term}}'" + post_format: "#%{post_number} av %{username}" + results_page: "Sökresultat för '%{term}'" more_results: "Det finns fler resultat. Vänligen förfina ditt sökkriterium." cant_find: "Hittar du inte det du söker?" start_new_topic: "Kanske skapa ett nytt ämne?" @@ -1806,9 +1808,9 @@ sv: search_google_button: "Google" search_google_title: "Sök på hemsidan" context: - user: "Sök inlägg av @{{username}}" - category: "Sök #{{category}} kategorin" - tag: "Sök efter #{{tag}} taggen" + user: "Sök inlägg av @%{username}" + category: "Sök #%{category} kategorin" + tag: "Sök efter #%{tag} taggen" topic: "Sök i det här ämnet" private_messages: "Sök meddelanden" advanced: @@ -1885,7 +1887,7 @@ sv: choose_new_category: "Välj den nya kategorin för ämnena:" selected: one: "Du har markerat %{count} ämne." - other: "Du har markerat {{count}} ämnen." + other: "Du har markerat %{count} ämnen." change_tags: "Ersätt taggar" append_tags: "Lägg till taggar" choose_new_tags: "Välj nya taggar för de här ämnena:" @@ -1898,7 +1900,7 @@ sv: posted: "Du har inte postat i några ämnen ännu." latest: "Det finns inga senaste ämnen, tråkigt nog." bookmarks: "Du har inga bokmärkta ämnen ännu." - category: "Det finns inga ämnen i {{category}}." + category: "Det finns inga ämnen i %{category}." top: "Det finns inga toppämnen." educate: new: '
Dina nya ämnen hamnar här.
Standard är att ämnen anses nya och kommer att visa en ny indikator om de skapades de senaste 2 dagarna.
Besök dina användarinställningar för att ändra detta.
{{jina la mtumiaji}} {{maelezo}}" - invited_to_topic: "{{jina la mtumiaji}} {{maelezo}}" - invitee_accepted: "{{jina la mtumiaji}} amekubali mwaliko wako" - moved_post: "{{jina la mtumiaji}} amehama {{maelezo}}" - linked: "{{jina la mtumiaji}} {{maelezo}}" - granted_badge: "Umepata '{{maelezo}}'" - topic_reminder: "{{jina la mtumiaji}} {{maelezo}}" - watching_first_post: "Mada Mpya {{maelezo}}" + one: "%{username}, %{username2} na %{count} mwingine %{description}" + other: "%{username}, %{username2} na %{count} wengine %{description}" + liked_consolidated: "%{jina la mtumiaji} %{maelezo}" + private_message: "%{jina la mtumiaji} %{maelezo}" + invited_to_private_message: "
%{jina la mtumiaji} %{maelezo}" + invited_to_topic: "%{jina la mtumiaji} %{maelezo}" + invitee_accepted: "%{jina la mtumiaji} amekubali mwaliko wako" + moved_post: "%{jina la mtumiaji} amehama %{maelezo}" + linked: "%{jina la mtumiaji} %{maelezo}" + granted_badge: "Umepata '%{maelezo}'" + topic_reminder: "%{jina la mtumiaji} %{maelezo}" + watching_first_post: "Mada Mpya %{maelezo}" group_message_summary: - one: "Kuna meseji {{count}} kwenye {{group_name}} inbox" - other: "kuna meseji {{count}} kwenye {{group_name}} inbox" + one: "Kuna meseji %{count} kwenye %{group_name} inbox" + other: "kuna meseji %{count} kwenye %{group_name} inbox" popup: - mentioned: '{{jina la mtumiaji}} amekutaja kwenye "{{mada}}" - {{jina la_tovuti}}' - group_mentioned: '{{jina la mtumiaji}} amekutaja kwenye "{{mada}}" - {{jina la_tovuti}}' - quoted: '{{jina la mtumiaji}} amekunukulu kwenye "{{mada}}" - {{jina la_tovuti}}' - replied: '{{jina la mtumiaji}} amekujibu kwenye "{{mada}}" - {{jina la_tovuti}}' - posted: '{{jina la mtumiaji}} amechapisha kwenye "{{mada}}" - {{jina la_tovuti}}' - private_message: '{{jina la mtumiaji}} amekutumia ujumbe binafsi kwenye "{{mada}}" - {{jina la_tovuti}}' - linked: '{{jina la mtumiaji}} ametengeneza kiungo kutoka kwenye "{{mada}}" - {{jina la_tovuti}}' + mentioned: '%{jina la mtumiaji} amekutaja kwenye "%{mada}" - %{jina la_tovuti}' + group_mentioned: '%{jina la mtumiaji} amekutaja kwenye "%{mada}" - %{jina la_tovuti}' + quoted: '%{jina la mtumiaji} amekunukulu kwenye "%{mada}" - %{jina la_tovuti}' + replied: '%{jina la mtumiaji} amekujibu kwenye "%{mada}" - %{jina la_tovuti}' + posted: '%{jina la mtumiaji} amechapisha kwenye "%{mada}" - %{jina la_tovuti}' + private_message: '%{jina la mtumiaji} amekutumia ujumbe binafsi kwenye "%{mada}" - %{jina la_tovuti}' + linked: '%{jina la mtumiaji} ametengeneza kiungo kutoka kwenye "%{mada}" - %{jina la_tovuti}' confirm_title: "Taarifa mubashara zimewezeshwa - %{site_title}" confirm_body: "Taarifa mubashara zimewezeshwa kikamilifu" titles: @@ -1330,9 +1333,9 @@ sw: from_my_computer: "Kutoka kwenye kifaa changu" from_the_web: "Kutoka kwenye mtandao" remote_tip: "kiungo cha picha" - remote_tip_with_attachments: "kiungo cha picha au faili {{authorized_extensions}}" + remote_tip_with_attachments: "kiungo cha picha au faili %{authorized_extensions}" local_tip: "chagua picha kwenye kifaa chako" - local_tip_with_attachments: "Chagua picha au mafile kutoka kwenye kifaa chako {{authorized_extensions}}" + local_tip_with_attachments: "Chagua picha au mafile kutoka kwenye kifaa chako %{authorized_extensions}" hint: "(Unaweza pia kuvuta na kudondosha kwenye kihariri ili kuzipakia)" hint_for_supported_browsers: "Unaweza pia kuvuta na kudondosha kwenye kihariri" uploading: "Inapakiwa" @@ -1349,15 +1352,15 @@ sw: clear_all: "Futa Zote" too_short: "Neno la utafiti ni fupi." result_count: - one: "jibu kwa{{term}}" - other: "{{count}}{{plus}} majibu kwa{{term}}" + one: "jibu kwa%{term}" + other: "%{count}%{plus} majibu kwa%{term}" title: "Tafuta mada, machapisho, watumiaji, au kategoria" full_page_title: "tafuta mada au machapisho" no_results: "Hakuna Majibu Yaliyopatikana." no_more_results: "Hakuna majibu zaidi yaliyopatikana." searching: "Inatafuta ..." - post_format: "#{{post_number}} za {{username}}" - results_page: "Majibu ya utafiti ya'{{term}}'" + post_format: "#%{post_number} za %{username}" + results_page: "Majibu ya utafiti ya'%{term}'" more_results: "Kuna majibu zaidi. Samahani punguza vigezo vya kutafuta" cant_find: "Umeshindwa kupata ulichokuwa unakitafuta?" start_new_topic: "Au anzisha mada mpya?" @@ -1366,8 +1369,8 @@ sw: search_google_button: "Google" search_google_title: "Tafuta tovuti hii" context: - user: "Tafuta machapisho kwa kutumia @{{jina la mtumiaji}}" - category: "Tafuta kategoria #{{category}} " + user: "Tafuta machapisho kwa kutumia @%{jina la mtumiaji}" + category: "Tafuta kategoria #%{category} " topic: "Tafuta hii mada" private_messages: "Tafuta ujumbe" advanced: @@ -1441,7 +1444,7 @@ sw: choose_new_category: "Chagua kategoria mpya kwa ajili ya mada:" selected: one: "Umechagua mada %{count}." - other: "Umechagua mada {{count}}." + other: "Umechagua mada %{count}." change_tags: "Badilisha Lebo" append_tags: "Jumlisha Lebo" choose_new_tags: "Chagua lebo mpya kwa ajili ya hizi mada:" @@ -1454,7 +1457,7 @@ sw: posted: "Bado haujachapisha kwenye mada yoyote." latest: "Hakuna mada mpya. Hii ni huzuni." bookmarks: "Hauja alamisha mada yoyote." - category: "Hakuna {{category}} mada." + category: "Hakuna %{category} mada." top: "Hakuna mada za juu." educate: new: '
Mada zako mpya zitatokea hapa.
Kwa chaguo-msingi, mada ni mpya na zitakuwa na indiketa mpyakama zilitengenezwa ndani ya siku 2 zilizopita.
Tembeleamipangilioyako kubadilisha hizi.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} davetinizi kabul etti" - moved_post: "{{username}} {{description}} taşıdı" - linked: "{{username}} {{description}}" - granted_badge: "'{{description}}' kazandı" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Yeni Konu {{description}}" - membership_request_accepted: "'{{group_name}}' üyeliğine kabul edildi" - membership_request_consolidated: "{{count}} '{{group_name}}' için açık üyelik talepleri" + one: "gönderilerinizden %{count} tanesi beğenildi" + other: "gönderilerinizden %{count} tanesi beğenildi" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} davetinizi kabul etti" + moved_post: "%{username} %{description} taşıdı" + linked: "%{username} %{description}" + granted_badge: "'%{description}' kazandı" + topic_reminder: "%{username} %{description}" + watching_first_post: "Yeni Konu %{description}" + membership_request_accepted: "'%{group_name}' üyeliğine kabul edildi" + membership_request_consolidated: "%{count} '%{group_name}' için açık üyelik talepleri" group_message_summary: - one: "{{group_name}} gelen kutunuzdaki {{count}} mesaj var" - other: "{{group_name}} gelen kutunuzda {{count}} mesajları" + one: "%{group_name} gelen kutunuzdaki %{count} mesaj var" + other: "%{group_name} gelen kutunuzda %{count} mesajları" popup: - mentioned: '{{username}}, "{{topic}}" başlıklı konuda sizden bahsetti - {{site_title}}' - group_mentioned: '{{username}} sizden bahsetti "{{topic}}" - {{site_title}}' - quoted: '{{username}}, "{{topic}}" başlıklı konuda sizden alıntı yaptı - {{site_title}}' - replied: '{{username}}, "{{topic}}" başlıklı konuda size cevap verdi - {{site_title}}' - posted: '{{username}}, "{{topic}}" başlıklı konuya yazdı - {{site_title}}' - private_message: '{{username}} "{{topic}} konusunda "size kişisel bir mesaj gönderdi - {{site_title}} ' - linked: '{{username}}, "{{topic}}" başlıklı konudaki gönderinize bağlantı yaptı - {{site_title}}' - watching_first_post: '{{username}} yeni bir konu oluşturdu "{{topic}}" - {{site_title}}' + mentioned: '%{username}, "%{topic}" başlıklı konuda sizden bahsetti - %{site_title}' + group_mentioned: '%{username} sizden bahsetti "%{topic}" - %{site_title}' + quoted: '%{username}, "%{topic}" başlıklı konuda sizden alıntı yaptı - %{site_title}' + replied: '%{username}, "%{topic}" başlıklı konuda size cevap verdi - %{site_title}' + posted: '%{username}, "%{topic}" başlıklı konuya yazdı - %{site_title}' + private_message: '%{username} "%{topic} konusunda "size kişisel bir mesaj gönderdi - %{site_title} ' + linked: '%{username}, "%{topic}" başlıklı konudaki gönderinize bağlantı yaptı - %{site_title}' + watching_first_post: '%{username} yeni bir konu oluşturdu "%{topic}" - %{site_title}' confirm_title: "Bildirimler etkin - %{site_title}" confirm_body: "Başarılı! Bildirimler etkinleştirildi." - custom: "{{username}} tarafından bildirim %{site_title}" + custom: "%{username} tarafından bildirim %{site_title}" titles: mentioned: "adı geçen" replied: "yeni cevap" @@ -1696,9 +1698,9 @@ tr_TR: from_my_computer: "Kendi cihazımdan" from_the_web: "Webden" remote_tip: "resme bağlantı ata" - remote_tip_with_attachments: "dosya ya da resim bağlantısı {{authorized_extensions}}" + remote_tip_with_attachments: "dosya ya da resim bağlantısı %{authorized_extensions}" local_tip: "cihazından resimler seç" - local_tip_with_attachments: "cihazından resim ya da dosya seç {{authorized_extensions}}" + local_tip_with_attachments: "cihazından resim ya da dosya seç %{authorized_extensions}" hint: "(düzenleyiciye \"sürükle ve bırak\" yaparak da yükleyebilirsin)" hint_for_supported_browsers: "ayrıca resimleri düzenleyiciye sürükleyip bırakabilir ya da yapıştırabilirsin" uploading: "Yükleniyor" @@ -1715,15 +1717,15 @@ tr_TR: clear_all: "Tümünü Temizle" too_short: "Aradığın terim çok kısa." result_count: - one: "{{term}} için %{count} sonuç" - other: "{{term}} için {{count}} {{plus}} sonuç" + one: "%{term} için %{count} sonuç" + other: "%{term} için %{count} %{plus} sonuç" title: "konu, gönderi, kullanıcı veya kategori ara" full_page_title: "konu ya da gönderi ara" no_results: "Hiçbir sonuç bulunamadı." no_more_results: "Başka sonuç yok." searching: "Aranıyor..." - post_format: "{{username}} tarafından #{{post_number}}" - results_page: "'{{term}}' için arama sonuçları" + post_format: "%{username} tarafından #%{post_number}" + results_page: "'%{term}' için arama sonuçları" more_results: "Daha fazla sonuç var. Lütfen arama kriterlerini daralt." cant_find: "Aradığını bulamıyor musun?" start_new_topic: "Belki de yeni bir başlık oluşturmalısın..." @@ -1732,9 +1734,9 @@ tr_TR: search_google_button: "Google" search_google_title: "Bu sitede ara" context: - user: "@{{username}} kullancısına ait gönderilerde ara" - category: "#{{category}} kategorisini ara" - tag: "# {{tag}} etiketini arayın" + user: "@%{username} kullancısına ait gönderilerde ara" + category: "#%{category} kategorisini ara" + tag: "# %{tag} etiketini arayın" topic: "Bu konuyu ara" private_messages: "Mesajlarda ara" advanced: @@ -1810,8 +1812,8 @@ tr_TR: notification_level: "Bildirimler" choose_new_category: "Konular için yeni bir kategori seç:" selected: - one: "{{count}} konu seçtiniz." - other: "{{count}} konu seçtin." + one: "%{count} konu seçtiniz." + other: "%{count} konu seçtin." change_tags: "Etiketleri Değiştir" append_tags: "Etiketleri Ekle" choose_new_tags: "Bu konular için yeni etiketler seç:" @@ -1824,7 +1826,7 @@ tr_TR: posted: "Henüz herhangi bir konuda gönderi yapmadın" latest: "Güncel bir konu yok. Bu üzücü." bookmarks: "Henüz bir konu işaretlememişsin. " - category: "{{category}} konusu yok." + category: "%{category} konusu yok." top: "Popüler bir konu yok." educate: new: '
Yeni konular burada görünecek.
Öntanımlı olarak son 2 gün içerisinde oluşturulmuş konular yeni olarak nitelendirilir ve yeni ibaresiyle işaretli olarak gösterilir.
tercihler sayfanı ziyaret ederek bunu değiştirebilirsin.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} принял ваше приглашение" - moved_post: "{{username}} moved {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "Заслужив(а) '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "Нова тема {{description}}" - membership_request_accepted: "Запит на вступ прийнятий '{{group_name}}'" - membership_request_consolidated: "{{count}} відкрити запити на членство для "{{group_name}}"" + one: "Сподобався %{count} ваш пост" + few: "Сподобалося %{count} ваших поста" + many: "Сподобалося %{count} ваших постів" + other: "Сподобалося %{count} ваших поста" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} принял ваше приглашение" + moved_post: "%{username} moved %{description}" + linked: "%{username} %{description}" + granted_badge: "Заслужив(а) '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "Нова тема %{description}" + membership_request_accepted: "Запит на вступ прийнятий '%{group_name}'" + membership_request_consolidated: "%{count} відкрити запити на членство для "%{group_name}"" group_message_summary: - one: "{{count}} повідомлення в вашій групі: {{group_name}} " - few: "{{count}} повідомлень в вашій групі: {{group_name}} " - many: "{{count}} повідомлень в вашій групі: {{group_name}} " - other: "{{count}} повідомлень в вашій групі: {{group_name}} " + one: "%{count} повідомлення в вашій групі: %{group_name} " + few: "%{count} повідомлень в вашій групі: %{group_name} " + many: "%{count} повідомлень в вашій групі: %{group_name} " + other: "%{count} повідомлень в вашій групі: %{group_name} " popup: - mentioned: '{{username}} згадав вас у "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} згадав вас у "{{topic}}" - {{site_title}}' - quoted: '{{username}} процитував вас у "{{topic}}" - {{site_title}}' - replied: '{{username}} відповів вам у "{{topic}}" - {{site_title}}' - posted: '{{username}} написав у "{{topic}}" - {{site_title}}' - private_message: '{{username}} відправив вам приватне повідомлення в "{{topic}}" - {{site_title}}' - linked: '{{username}} посилається на ваш пост у темі: "{{topic}}" - {{site_title}}' - watching_first_post: '{{username}} створив нову тему "{{topic}}" - {{site_title}}' + mentioned: '%{username} згадав вас у "%{topic}" - %{site_title}' + group_mentioned: '%{username} згадав вас у "%{topic}" - %{site_title}' + quoted: '%{username} процитував вас у "%{topic}" - %{site_title}' + replied: '%{username} відповів вам у "%{topic}" - %{site_title}' + posted: '%{username} написав у "%{topic}" - %{site_title}' + private_message: '%{username} відправив вам приватне повідомлення в "%{topic}" - %{site_title}' + linked: '%{username} посилається на ваш пост у темі: "%{topic}" - %{site_title}' + watching_first_post: '%{username} створив нову тему "%{topic}" - %{site_title}' confirm_title: "Повідомлення включені - %{site_title}" confirm_body: "Успішно! Повідомлення були включені." - custom: "Повідомлення від {{username}} до %{site_title}" + custom: "Повідомлення від %{username} до %{site_title}" titles: mentioned: "згаданий" replied: "нову відповідь" @@ -1819,9 +1821,9 @@ uk: from_my_computer: "З мого пристрою" from_the_web: "З інтернету" remote_tip: "посилання на зображення" - remote_tip_with_attachments: "посилання на зображення або файл {{authorized_extensions}}" + remote_tip_with_attachments: "посилання на зображення або файл %{authorized_extensions}" local_tip: "вибрати зображення з вашого пристрою" - local_tip_with_attachments: "вибрати зображення або файли з вашого пристрою {{authorized_extensions}}" + local_tip_with_attachments: "вибрати зображення або файли з вашого пристрою %{authorized_extensions}" hint: "(Ви також можете перетягувати зображення в редактор, щоб їх завантажити)" hint_for_supported_browsers: "ви так само можете перетягнути або скопіювати зображення в редактор" uploading: "Завантаження" @@ -1838,17 +1840,17 @@ uk: clear_all: "Скинути все" too_short: "Занадто коротке слово для пошуку." result_count: - one: "%{count} результат для {{term}}" - few: "{{count}} {{plus}} результатів для {{term}}" - many: "{{count}} {{plus}} результат для {{term}}" - other: "{{count}} {{plus}} результатів для {{term}}" + one: "%{count} результат для %{term}" + few: "%{count} %{plus} результатів для %{term}" + many: "%{count} %{plus} результат для %{term}" + other: "%{count} %{plus} результатів для %{term}" title: "Пошук по темам, повідомленням, псевдонімам та розділам" full_page_title: "пошук тем або повідомлень" no_results: "Нічого не знайдено." no_more_results: "Більше нічого не знайдено." searching: "Пошук ..." - post_format: "#{{post_number}} від {{username}}" - results_page: "Результати пошуку для '{{term}}'" + post_format: "#%{post_number} від %{username}" + results_page: "Результати пошуку для '%{term}'" more_results: "Знайдено безліч результатів. Будь ласка, уточніть, критерії пошуку." cant_find: "Не можете знайти потрібну інформацію?" start_new_topic: "Створити нову тему?" @@ -1857,9 +1859,9 @@ uk: search_google_button: "Google" search_google_title: "Пошук на цьому сайті" context: - user: "Шукати повідомлення від @{{username}}" - category: "Шукати в розділі #{{category}}" - tag: "Шукати тег #{{tag}}" + user: "Шукати повідомлення від @%{username}" + category: "Шукати в розділі #%{category}" + tag: "Шукати тег #%{tag}" topic: "Пошук в цій темі" private_messages: "Шукати приватні повідомлення" advanced: @@ -1935,10 +1937,10 @@ uk: notification_level: "Сповіщення" choose_new_category: "Виберіть новий розділ для цих тем:" selected: - one: "Ви вибрали {{count}} тему." - few: "Ви вибрали {{count}} теми." - many: "Ви вибрали {{count}} тем." - other: "Ви вибрали {{count}} тем." + one: "Ви вибрали %{count} тему." + few: "Ви вибрали %{count} теми." + many: "Ви вибрали %{count} тем." + other: "Ви вибрали %{count} тем." change_tags: "Замінити мітки" append_tags: "Додати мітки" choose_new_tags: "Виберіть нові мітки для цих тем:" @@ -1951,7 +1953,7 @@ uk: posted: "Ви ще не дописували в жодну тему." latest: "Останніх тем немає. Шкода." bookmarks: "У вас немає обраних тем." - category: "В категорії {{category}} немає тем." + category: "В категорії %{category} немає тем." top: "There are no top topics." educate: new: '
Ваші нові теми скоро з’являться тут.
За замовчуванням, нові теми відзначаються іконкою: Нова, якщо вона була створена протягом 2 тижнів.
Перейдіть в настройки для того, щоб вибрати період активності нових тем.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}}نے آپ کی دعوت قبول کرلی " - moved_post: "{{username}}نے {{description}} منتقل کر دیا" - linked: "{{username}} {{description}}" - granted_badge: "'{{description}}' حاصل کیا" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "نیا ٹاپک {{description}}" - membership_request_accepted: "'{{group_name}}' میں رکنیت قبول کر لی گئی" + one: "آپ کی %{count} پوسٹس کو لائیک کیا" + other: "آپ کی %{count} پوسٹس کو لائیک کیا" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username}نے آپ کی دعوت قبول کرلی " + moved_post: "%{username}نے %{description} منتقل کر دیا" + linked: "%{username} %{description}" + granted_badge: "'%{description}' حاصل کیا" + topic_reminder: "%{username} %{description}" + watching_first_post: "نیا ٹاپک %{description}" + membership_request_accepted: "'%{group_name}' میں رکنیت قبول کر لی گئی" group_message_summary: - one: "آپ کے {{group_name}} اِن باکس میں {{count}} پیغام" - other: "آپ کے {{group_name}} اِن باکس میں {{count}} پیغامات" + one: "آپ کے %{group_name} اِن باکس میں %{count} پیغام" + other: "آپ کے %{group_name} اِن باکس میں %{count} پیغامات" popup: - mentioned: '{{username}} نے آپ کا تذکرہ "{{topic}}" میں کیا - {{site_title}}' - group_mentioned: '{{username}} نے آپ کا تذکرہ "{{topic}}" میں کیا - {{site_title}}' - quoted: '{{username}} نے "{{topic}}" میں آپ کا حوالا دیا - {{site_title}}' - replied: '{{username}} نے "{{topic}}" میں آپ کو جواب دیا - {{site_title}}' - posted: '{{username}} نے "{{topic}}" میں پوسٹ کیا - {{site_title}}' - private_message: '{{username}} نے "{{topic}}" میں آپ کو زاتی پیغام بھیجا - {{site_title}}' - linked: '{{username}} نے "{{topic}}" سے آپ کی پوسٹ کو لنک کیا - {{site_title}}' - watching_first_post: '{{username}} نے ایک نیا ٹاپک "{{topic}}" بنایا - {{site_title}}' + mentioned: '%{username} نے آپ کا تذکرہ "%{topic}" میں کیا - %{site_title}' + group_mentioned: '%{username} نے آپ کا تذکرہ "%{topic}" میں کیا - %{site_title}' + quoted: '%{username} نے "%{topic}" میں آپ کا حوالا دیا - %{site_title}' + replied: '%{username} نے "%{topic}" میں آپ کو جواب دیا - %{site_title}' + posted: '%{username} نے "%{topic}" میں پوسٹ کیا - %{site_title}' + private_message: '%{username} نے "%{topic}" میں آپ کو زاتی پیغام بھیجا - %{site_title}' + linked: '%{username} نے "%{topic}" سے آپ کی پوسٹ کو لنک کیا - %{site_title}' + watching_first_post: '%{username} نے ایک نیا ٹاپک "%{topic}" بنایا - %{site_title}' confirm_title: "نوٹیفکیشن فعال - %{site_title}" confirm_body: "کامیابی! اطلاعات فعال ہوگئی ہیں۔" - custom: "{{username}} کی طرف سے %{site_title} پر اطلاعات" + custom: "%{username} کی طرف سے %{site_title} پر اطلاعات" titles: mentioned: "ذکر کیا گیا" replied: "نیا جواب" @@ -1643,9 +1644,9 @@ ur: from_my_computer: "میری ڈیوائس سے" from_the_web: "انٹرنیٹ سے" remote_tip: "تصویر کا لنک" - remote_tip_with_attachments: "تصویر یا فائل کا لنک {{authorized_extensions}}" + remote_tip_with_attachments: "تصویر یا فائل کا لنک %{authorized_extensions}" local_tip: "اپنے ڈیوائس سے تصاویر منتخب کریں" - local_tip_with_attachments: "اپنے ڈیوائس سے تصاویر یا فائلیں منتخب کریں {{authorized_extensions}}" + local_tip_with_attachments: "اپنے ڈیوائس سے تصاویر یا فائلیں منتخب کریں %{authorized_extensions}" hint: "(آپ اِن کو اَپ لوڈ کرنے کیلئیے ایڈیٹر میں ڈرَیگ & ڈراپ بھی کر سکتے ہیں)" hint_for_supported_browsers: "آپ تصاویر کو ایڈیٹر میں ڈرَیگ & ڈراپ یا پَیسٹ بھی کر سکتے ہیں" uploading: "اَپ لوڈ کیا جا رہا ہے" @@ -1662,15 +1663,15 @@ ur: clear_all: "تمام کو صاف کریں" too_short: "آپ کا سَرچ ٹَرم بہت مختصر ہے۔" result_count: - one: "{{term}}کیلئے %{count} نتیجہ" - other: "{{term}}کیلئے {{count}}{{plus}} نتائج" + one: "%{term}کیلئے %{count} نتیجہ" + other: "%{term}کیلئے %{count}%{plus} نتائج" title: "ٹاپک، پوسٹس، صارفین، یا زمرہ جات کو سَرچ کریں" full_page_title: "ٹاپک یا پوسٹس کو سَرچ کریں" no_results: "کوئی نتائج نہیں پائے گئے۔" no_more_results: "کوئی اور نتائج نہیں پائے گئے۔" searching: "تلاش کیا جا رہا ہے ..." - post_format: "{{username}} کی طرف سے #{{post_number}}" - results_page: "'{{term}}' کیلئے سرچ کے نتائج" + post_format: "%{username} کی طرف سے #%{post_number}" + results_page: "'%{term}' کیلئے سرچ کے نتائج" more_results: "مزید نتائج موجود ہیں۔ برائے مہربانی اپنے سرچ کے معیار کو محدود کریں۔" cant_find: "آپ جو ڈھونڈ رہے تھے وہ نہیں مل سکا؟" start_new_topic: "شاید ایک نیا ٹاپک شروع کریں؟" @@ -1679,8 +1680,8 @@ ur: search_google_button: "گُوگَل" search_google_title: "اِس سائٹ میں تلاش کریں" context: - user: "@{{username}} کے حساب سے پوسٹس تلاش کریں" - category: "#{{category}} زُمرَہ میں تلاش کریں" + user: "@%{username} کے حساب سے پوسٹس تلاش کریں" + category: "#%{category} زُمرَہ میں تلاش کریں" topic: "اِس ٹاپک میں تلاش کریں" private_messages: "پیغامات میں تلاش کریں" advanced: @@ -1755,7 +1756,7 @@ ur: choose_new_category: "ٹاپکس کیلئے نئے زمرہ کا انتخاب کریں:" selected: one: "آپ نے %{count} ٹاپک منتخب کیا ہے۔" - other: "آپ نے {{count}} ٹاپک منتخب کیے ہیں۔" + other: "آپ نے %{count} ٹاپک منتخب کیے ہیں۔" change_tags: "ٹیگز بدلیں" append_tags: "ٹیگز میں اضافہ کریں" choose_new_tags: "ان ٹاپکس کیلئے نئے ٹیگز کا انتخاب کریں:" @@ -1768,7 +1769,7 @@ ur: posted: "ابھی تک آپ نے کسی ٹاپک میں پوسٹ نہیں کیا۔" latest: "کوئی تازہ ٹاپک موجود نہیں ہیں۔ یہ اداس کر دینے والی بات ہے۔" bookmarks: "ابھی تک آپ کے بُک مارک کیے ہوے کوئی ٹاپک نہیں ہیں۔" - category: "کوئی {{category}} کے ٹاپک موجود نہیں ہیں۔" + category: "کوئی %{category} کے ٹاپک موجود نہیں ہیں۔" top: "کوئی ٹاپ ٹاپک موجود نہیں ہیں۔" educate: new: '
آپ کے نئے ٹاپم یہاں ظاہر ہوتے ہیں۔
ڈیفالٹ کے طور پر، ٹاپک نئے سمجھے جاتے ہیں اور اگر وہ پچھلے 2 دن میں بنائے گئے تھے تو نئے کی علامت دکھائی جائے گی۔
اِس کو تبدیل کرنے کیلئے اپنی ترجیحات پر جائیں۔
{{username}}{{description}}" - invitee_accepted: "{{username}} đã chấp nhận lời mời của bạn" - moved_post: "{{username}} đã chuyển {{description}}" + other: "đã thích %{count} bài viết của bạn" + invited_to_private_message: "
%{username}%{description}" + invitee_accepted: "%{username} đã chấp nhận lời mời của bạn" + moved_post: "%{username} đã chuyển %{description}" popup: - mentioned: '{{username}} nhắc đến bạn trong "{{topic}}" - {{site_title}}' - group_mentioned: '{{username}} nhắc đến bạn trong "{{topic}}" - {{site_title}}' - quoted: '{{username}} trích lời bạn trong "{{topic}}" - {{site_title}}' - replied: '{{username}} trả lời cho bạn trong "{{topic}}" - {{site_title}}' - posted: '{{username}} gửi bài trong "{{topic}}" - {{site_title}}' - linked: '{{username}} liên quan đến bài viết của bạn từ "{{topic}}" - {{site_title}}' + mentioned: '%{username} nhắc đến bạn trong "%{topic}" - %{site_title}' + group_mentioned: '%{username} nhắc đến bạn trong "%{topic}" - %{site_title}' + quoted: '%{username} trích lời bạn trong "%{topic}" - %{site_title}' + replied: '%{username} trả lời cho bạn trong "%{topic}" - %{site_title}' + posted: '%{username} gửi bài trong "%{topic}" - %{site_title}' + linked: '%{username} liên quan đến bài viết của bạn từ "%{topic}" - %{site_title}' titles: liked: "lượt thích mới" watching_first_post: "chủ đề mới" @@ -1393,9 +1396,9 @@ vi: from_my_computer: "Từ thiết bị của tôi" from_the_web: "Từ Web" remote_tip: "đường dẫn tới hình ảnh" - remote_tip_with_attachments: "chọn ảnh hoặc file {{authorized_extensions}}" + remote_tip_with_attachments: "chọn ảnh hoặc file %{authorized_extensions}" local_tip: "chọn hình từ thiết bị của bạn" - local_tip_with_attachments: "chọn ảnh hoặc file {{authorized_extensions}} từ thiết bị của bạn" + local_tip_with_attachments: "chọn ảnh hoặc file %{authorized_extensions} từ thiết bị của bạn" hint: "(Bạn cũng có thể kéo & thả vào trình soạn thảo để tải chúng lên)" hint_for_supported_browsers: "bạn có thể kéo và thả ảnh vào trình soan thảo này" uploading: "Đang tải lên" @@ -1412,17 +1415,17 @@ vi: clear_all: "Xóa tất cả" too_short: "Từ khoá tìm kiếm của bạn quá ngắn." result_count: - other: "Hơn {{count}}{{plus}} kết quả cho{{term}}" + other: "Hơn %{count}%{plus} kết quả cho%{term}" title: "tìm kiếm chủ đề, bài viết, tài khoản hoặc các danh mục" no_results: "Không tìm thấy kết quả." no_more_results: "Không tìm thấy kết quả" searching: "Đang tìm ..." - post_format: "#{{post_number}} bởi {{username}}" - results_page: "Kết quả tìm kiếm cho '{{term}}'" + post_format: "#%{post_number} bởi %{username}" + results_page: "Kết quả tìm kiếm cho '%{term}'" search_google_button: "G" search_google_title: "Tìm trong trang n" context: - user: "Tìm bài viết của @{{username}}" + user: "Tìm bài viết của @%{username}" topic: "Tìm trong chủ đề này" private_messages: "Tìm tin nhắn" advanced: @@ -1479,7 +1482,7 @@ vi: notification_level: "Thông báo" choose_new_category: "Chọn chuyên mục mới cho chủ đề này:" selected: - other: "Bạn đã chọn {{count}} chủ đề" + other: "Bạn đã chọn %{count} chủ đề" choose_new_tags: "Chọn thẻ mới cho các chuyên mục sau:" none: unread: "Bạn không có chủ đề nào chưa đọc." @@ -1488,7 +1491,7 @@ vi: posted: "Bạn vẫn chưa đăng bài trong bất kì một chủ đề nào" latest: "Chán quá. Chẳng có chủ đề mới nào hết trơn." bookmarks: "Bạn chưa chủ đề nào được đánh dấu." - category: "Không có chủ đề nào trong {{category}} ." + category: "Không có chủ đề nào trong %{category} ." top: "Không có chủ đề top." educate: new: '
Chủ đề mới của bạn sẽ hiển thị ở đây.
Mặc định, chủ đề được coi là mới và sẽ hiển thị new cho biết chúng đã được tạo ra trong 2 ngày qua.
Xem thiết lập của bạn nếu muốn thay đổi.
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} 已接受你的邀请" - moved_post: "{{username}} 移动了 {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "获得 “{{description}}”" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "新主题 {{description}}" - membership_request_accepted: "接受来自“{{group_name}}”的邀请" - membership_request_consolidated: "{{count}}个加入“{{group_name}}”群组的请求" + other: "你的帖子有%{count}个赞" + liked_consolidated: "%{username}%{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} 已接受你的邀请" + moved_post: "%{username} 移动了 %{description}" + linked: "%{username} %{description}" + granted_badge: "获得 “%{description}”" + topic_reminder: "%{username} %{description}" + watching_first_post: "新主题 %{description}" + membership_request_accepted: "接受来自“%{group_name}”的邀请" + membership_request_consolidated: "%{count}个加入“%{group_name}”群组的请求" group_message_summary: - other: "{{count}} 条私信在{{group_name}}组的收件箱中" + other: "%{count} 条私信在%{group_name}组的收件箱中" popup: - mentioned: '{{username}}在“{{topic}}”提到了你 - {{site_title}}' - group_mentioned: '{{username}}在“{{topic}}”提到了你 - {{site_title}}' - quoted: '{{username}}在“{{topic}}”引用了你的帖子 - {{site_title}}' - replied: '{{username}}在“{{topic}}”回复了你 - {{site_title}}' - posted: '{{username}}在“{{topic}}”中发布了帖子 - {{site_title}}' - private_message: '{{username}}在“{{topic}}”中向你发送了个人消息 - {{site_title}}' - linked: '{{username}}在“{{topic}}”中链接了你的帖子 - {{site_title}}' - watching_first_post: '{{username}}发布了新主题“{{topic}}” - {{site_title}}' + mentioned: '%{username}在“%{topic}”提到了你 - %{site_title}' + group_mentioned: '%{username}在“%{topic}”提到了你 - %{site_title}' + quoted: '%{username}在“%{topic}”引用了你的帖子 - %{site_title}' + replied: '%{username}在“%{topic}”回复了你 - %{site_title}' + posted: '%{username}在“%{topic}”中发布了帖子 - %{site_title}' + private_message: '%{username}在“%{topic}”中向你发送了个人消息 - %{site_title}' + linked: '%{username}在“%{topic}”中链接了你的帖子 - %{site_title}' + watching_first_post: '%{username}发布了新主题“%{topic}” - %{site_title}' confirm_title: "通知已启用 - %{site_title}" confirm_body: "成功!通知已启用。" - custom: "来自{{username}}在%{site_title}的通知" + custom: "来自%{username}在%{site_title}的通知" titles: mentioned: "提及到" replied: "新回复" @@ -1710,9 +1712,9 @@ zh_CN: from_my_computer: "来自我的设备" from_the_web: "来自网络" remote_tip: "图片链接" - remote_tip_with_attachments: "链接到图片或文件 {{authorized_extensions}}" + remote_tip_with_attachments: "链接到图片或文件 %{authorized_extensions}" local_tip: "从你的设备中选择图片" - local_tip_with_attachments: "从你的设备 {{authorized_extensions}} 选择图片或文件" + local_tip_with_attachments: "从你的设备 %{authorized_extensions} 选择图片或文件" hint: "你也可以通过拖放至编辑器的方式来上传" hint_for_supported_browsers: "可以拖放或复制粘帖至编辑器以上传" uploading: "上传中" @@ -1729,14 +1731,14 @@ zh_CN: clear_all: "清除所有" too_short: "你的搜索词太短。" result_count: - other: "{{count}}{{plus}}结果{{term}}" + other: "%{count}%{plus}结果%{term}" title: "搜索主题、帖子、用户或分类" full_page_title: "搜索主题或帖子" no_results: "没有找到结果。" no_more_results: "没有找到更多结果。" searching: "搜索中…" - post_format: "#{{post_number}} 来自于 {{username}}" - results_page: "关于“{{term}}”的搜索结果" + post_format: "#%{post_number} 来自于 %{username}" + results_page: "关于“%{term}”的搜索结果" more_results: "还有更多结果。请增加你的搜索条件。" cant_find: "找不到你要找的内容?" start_new_topic: "不如创建一个新主题?" @@ -1745,9 +1747,9 @@ zh_CN: search_google_button: "Google" search_google_title: "站内搜索" context: - user: "搜索 @{{username}} 的帖子" - category: "搜索 #{{category}} 分类" - tag: "搜索#{{tag}}标签" + user: "搜索 @%{username} 的帖子" + category: "搜索 #%{category} 分类" + tag: "搜索#%{tag}标签" topic: "搜索本主题" private_messages: "搜索私信" advanced: @@ -1823,7 +1825,7 @@ zh_CN: notification_level: "通知" choose_new_category: "选择新分类:" selected: - other: "已选择 {{count}}个主题" + other: "已选择 %{count}个主题" change_tags: "替换标签" append_tags: "添加标签" choose_new_tags: "为主题选择新标签:" @@ -1836,7 +1838,7 @@ zh_CN: posted: "你尚未在任何主题中发帖。" latest: "没有新的主题。" bookmarks: "你没有收藏任何主题。" - category: "{{category}}分类中没有主题。" + category: "%{category}分类中没有主题。" top: "没有热门主题。" educate: new: '
这里会显示近期的新主题。
默认情况下,会显示近 2 天内创建的主题,还会显示一个近期的标志。
你可以在用户设置中修改。
{{username}} {{description}}" - invited_to_topic: "{{username}} {{description}}" - invitee_accepted: "{{username}} 接受了您的邀請" - moved_post: "{{username}} 移動 {{description}}" - linked: "{{username}} {{description}}" - granted_badge: "得到 '{{description}}'" - topic_reminder: "{{username}} {{description}}" - watching_first_post: "新話題 {{description}}" + other: "說你的%{count}則貼文讚" + liked_consolidated: "%{username} %{description}" + private_message: "%{username} %{description}" + invited_to_private_message: "
%{username} %{description}" + invited_to_topic: "%{username} %{description}" + invitee_accepted: "%{username} 接受了您的邀請" + moved_post: "%{username} 移動 %{description}" + linked: "%{username} %{description}" + granted_badge: "得到 '%{description}'" + topic_reminder: "%{username} %{description}" + watching_first_post: "新話題 %{description}" group_message_summary: - other: "您的收件匣中有{{count}}則訊息" + other: "您的收件匣中有%{count}則訊息" popup: - mentioned: '{{username}}在“{{topic}}”提及了你 - {{site_title}}' - group_mentioned: '{{username}}在“{{topic}}”提及了你 - {{site_title}}' - quoted: '{{username}}在“{{topic}}”引用了你的貼文 - {{site_title}}' - replied: '{{username}}在“{{topic}}”回覆了你 - {{site_title}}' - posted: '{{username}}在“{{topic}}”中發佈了貼文 - {{site_title}}' - private_message: '{{username}} 在 "{{topic}}" 中私訊了你- {{site_title}}' - linked: '{{username}}在“{{topic}}”中連結了你的貼文 - {{site_title}}' - watching_first_post: '{{username}} 在 "{{topic}}"中開啟了新話題 - {{site_title}}' + mentioned: '%{username}在“%{topic}”提及了你 - %{site_title}' + group_mentioned: '%{username}在“%{topic}”提及了你 - %{site_title}' + quoted: '%{username}在“%{topic}”引用了你的貼文 - %{site_title}' + replied: '%{username}在“%{topic}”回覆了你 - %{site_title}' + posted: '%{username}在“%{topic}”中發佈了貼文 - %{site_title}' + private_message: '%{username} 在 "%{topic}" 中私訊了你- %{site_title}' + linked: '%{username}在“%{topic}”中連結了你的貼文 - %{site_title}' + watching_first_post: '%{username} 在 "%{topic}"中開啟了新話題 - %{site_title}' confirm_title: "通知已啟用-%{site_title}" confirm_body: "成功! 通知已啟用" - custom: "新的通知由{{username}}在%{site_title}" + custom: "新的通知由%{username}在%{site_title}" titles: liked: "新的讚" watching_first_post: "新話題" @@ -1502,9 +1503,9 @@ zh_TW: from_my_computer: "從我的電腦" from_the_web: "從網站" remote_tip: "圖片連結" - remote_tip_with_attachments: "連結到圖片或檔案 {{authorized_extensions}}" + remote_tip_with_attachments: "連結到圖片或檔案 %{authorized_extensions}" local_tip: "從你的裝置中選擇圖片" - local_tip_with_attachments: "從裝置選取圖片或檔案 ({{authorized_extensions}})" + local_tip_with_attachments: "從裝置選取圖片或檔案 (%{authorized_extensions})" hint: "(你也可以將檔案拖放至編輯器直接上傳)" hint_for_supported_browsers: "可以拖放或複製粘帖至編輯器以上傳" uploading: "正在上傳" @@ -1521,14 +1522,14 @@ zh_TW: clear_all: "清除全部" too_short: "你的搜尋詞語太短。" result_count: - other: "關於{{term}}的{{count}}{{plus}} 個結果 " + other: "關於%{term}的%{count}%{plus} 個結果 " title: "搜尋話題、貼文、使用者或分類" full_page_title: "搜尋話題或貼文" no_results: "未找到任何結果。" no_more_results: "沒有找到更多的結果。" searching: "正在搜尋..." - post_format: "#{{post_number}} {{username}}" - results_page: "'{{term}}' 的搜尋結果" + post_format: "#%{post_number} %{username}" + results_page: "'%{term}' 的搜尋結果" more_results: "還有更多結果。請嘗試縮小搜尋條件。" cant_find: "找不到你想找的嗎?" start_new_topic: "或許你可以開啟一個新的話題?" @@ -1537,8 +1538,8 @@ zh_TW: search_google_button: "Google" search_google_title: "搜尋這個網站" context: - user: "搜尋 @{{username}} 的貼文" - category: "搜索 #{{category}} 分類" + user: "搜尋 @%{username} 的貼文" + category: "搜索 #%{category} 分類" topic: "搜尋此話題" private_messages: "搜尋訊息" advanced: @@ -1612,7 +1613,7 @@ zh_TW: notification_level: "通知" choose_new_category: "為話題選擇新類別:" selected: - other: "你已選擇了 {{count}} 個話題。" + other: "你已選擇了 %{count} 個話題。" change_tags: "取代標籤" append_tags: "添加標籤" choose_new_tags: "為話題選擇新標籤" @@ -1625,7 +1626,7 @@ zh_TW: posted: "你尚未在任何話題裡發表貼文。" latest: "沒有最近的話題。真令人難過。" bookmarks: "您目前沒有把任何話題加入書籤。" - category: "沒有 {{category}} 的話題。" + category: "沒有 %{category} 的話題。" top: "沒有精選話題。" educate: new: '
這裡顯示了近期話題列表。
預設情況下,以下話題將顯示在近期列表。如果是最近 2 天內開啟的,還會顯示一個近期標誌。
你可以在使用者設置中更改要顯示哪些內容。
Votre message a été signalé par la communauté. Veuillez consulter vos messages privés.
Ce message a été signalé par la communauté et temporairement masqué.
Votre message a été signalé par la communauté. Veuillez consulter vos messages directs.
Ce message a été signalé par la communauté et est temporairement masqué.
Contenu ignoré
C'est presque terminé ! Nous avons envoyé un courriel d'activation à %{email}. Merci de suivre les instructions pour activer votre compte.
Si vous ne le recevez pas, vérifiez le dossier Spam dans votre messagerie.
Seu convite para %{site_name}já foi resgatado. -
Se você lembrar de sua senha, você pode Login.
Seu convite para %{site_name} já foi utilizado. -
Caso contrário, por favorRedefinir Senha.
Se você lembrar da sua senha, você pode Fazer Login.
Caso contrário, por favor Redefina a sua Senha.
Você está quase pronto! Enviamos um e-mail de ativação para o seu endereço de e-mail. Por favor, siga as instruções no e-mail para ativar sua conta.
Se não chegar, verifique sua pasta de spam.
Sua postagem foi sinalizada pela comunidade. Por favorveja suas mensagens.
Sua postagem foi sinalizada pela comunidade. Por favor veja suas mensagens.
Conteúdo sinalizado escondido.
Conteúdo ignorado
Como você descreveria sua comunidade para um estranho em um elevador em cerca de 1 minuto?
Seu tópico de boas vindas é a primeira coisa que os recém-chegados vão ler. Pense nisso como seuum parágrafo arremesso de elevador' ou 'declaração de missão'." + description: "
Seu tópico de boas vindas é a primeira coisa que os recém-chegados vão ler. Pense nele como um \"argumento de elevador\" ou \"declaração de missão\" de um parágrafo.
name
Peut-être avez vous essayé de modifier quelque chose auquel vous n'aviez pas accès.
Peut-être vous avez essayé de modifier quelque chose auquel vous n'aviez pas accès.