From a65ea99e3d32bb94c2333d2491a417bf96368b38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 14:47:09 +0900 Subject: [PATCH 001/422] Bump browserslist from 4.14.1 to 4.14.3 (#14853) Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.14.1 to 4.14.3. - [Release notes](https://github.com/browserslist/browserslist/releases) - [Changelog](https://github.com/browserslist/browserslist/blob/master/CHANGELOG.md) - [Commits](https://github.com/browserslist/browserslist/compare/4.14.1...4.14.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index c1e0ab7f9..e4b126be1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2496,14 +2496,14 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.1.tgz#cb2b490ba881d45dc3039078c7ed04411eaf3fa3" - integrity sha512-zyBTIHydW37pnb63c7fHFXUG6EcqWOqoMdDx6cdyaDFriZ20EoVxcE95S54N+heRqY8m8IUgB5zYta/gCwSaaA== + version "4.14.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" + integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== dependencies: - caniuse-lite "^1.0.30001124" - electron-to-chromium "^1.3.562" - escalade "^3.0.2" - node-releases "^1.1.60" + caniuse-lite "^1.0.30001131" + electron-to-chromium "^1.3.570" + escalade "^3.1.0" + node-releases "^1.1.61" bser@2.1.1: version "2.1.1" @@ -2671,7 +2671,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001124: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: version "1.0.30001133" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001133.tgz#ec564c5495311299eb05245e252d589a84acd95e" integrity sha512-s3XAUFaC/ntDb1O3lcw9K8MPeOW7KO3z9+GzAoBxfz1B0VdacXPMKgFUtG4KIsgmnbexmi013s9miVu4h+qMHw== @@ -3796,10 +3796,10 @@ ejs@^2.3.4, ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.562: - version "1.3.567" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.567.tgz#7a404288952ac990e447a7a86470d460ea953b8f" - integrity sha512-1aKkw0Hha1Bw9JA5K5PT5eFXC/TXbkJvUfNSNEciPUMgSIsRJZM1hF2GUEAGZpAbgvd8En21EA+Lv820KOhvqA== +electron-to-chromium@^1.3.570: + version "1.3.570" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" + integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== elliptic@^6.5.3: version "6.5.3" @@ -4013,7 +4013,7 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -escalade@^3.0.2: +escalade@^3.0.2, escalade@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== @@ -7220,7 +7220,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.60: +node-releases@^1.1.61: version "1.1.61" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== From 6926b771a50a049c5b38b561309a9db053242cc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 16:53:01 +0900 Subject: [PATCH 002/422] Bump premailer from 1.13.1 to 1.14.2 (#14857) Bumps [premailer](https://github.com/premailer/premailer) from 1.13.1 to 1.14.2. - [Release notes](https://github.com/premailer/premailer/releases) - [Changelog](https://github.com/premailer/premailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/premailer/premailer/compare/v1.13.1...v1.14.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 061f9de53..8c205c5f5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -409,7 +409,7 @@ GEM activerecord (>= 5) pkg-config (1.4.3) posix-spawn (0.3.15) - premailer (1.13.1) + premailer (1.14.2) addressable css_parser (>= 1.6.0) htmlentities (>= 4.0.0) From 2dee03900ec5e7f2ec5dcf10f4229ba1ea8e5506 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 16:53:24 +0900 Subject: [PATCH 003/422] Bump parallel_tests from 3.2.0 to 3.3.0 (#14843) Bumps [parallel_tests](https://github.com/grosser/parallel_tests) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/grosser/parallel_tests/releases) - [Changelog](https://github.com/grosser/parallel_tests/blob/master/CHANGELOG.md) - [Commits](https://github.com/grosser/parallel_tests/compare/v3.2.0...v3.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index b515fd343..1fd7b6d7a 100644 --- a/Gemfile +++ b/Gemfile @@ -127,7 +127,7 @@ group :test do gem 'rspec-sidekiq', '~> 3.1' gem 'simplecov', '~> 0.19', require: false gem 'webmock', '~> 3.9' - gem 'parallel_tests', '~> 3.2' + gem 'parallel_tests', '~> 3.3' gem 'rspec_junit_formatter', '~> 0.4' end diff --git a/Gemfile.lock b/Gemfile.lock index 8c205c5f5..27e46b54e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -397,7 +397,7 @@ GEM av (~> 0.9.0) paperclip (>= 2.5.2) parallel (1.19.2) - parallel_tests (3.2.0) + parallel_tests (3.3.0) parallel parser (2.7.1.4) ast (~> 2.4.1) @@ -749,7 +749,7 @@ DEPENDENCIES paperclip (~> 6.0) paperclip-av-transcoder (~> 0.6) parallel (~> 1.19) - parallel_tests (~> 3.2) + parallel_tests (~> 3.3) parslet pg (~> 1.2) pghero (~> 2.7) From 8f630552dfec6afae3b7c071a0c88e4ca28d3340 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 16:53:56 +0900 Subject: [PATCH 004/422] Bump terser-webpack-plugin from 3.0.6 to 4.2.2 (#14850) Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 3.0.6 to 4.2.2. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v3.0.6...v4.2.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 52 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 6c165770d..d6ed58ca4 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", - "terser-webpack-plugin": "^3.0.6", + "terser-webpack-plugin": "^4.2.2", "tesseract.js": "^2.1.1", "throng": "^4.0.0", "tiny-queue": "^0.2.1", diff --git a/yarn.lock b/yarn.lock index e4b126be1..e0e24a1bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2577,7 +2577,7 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.4, cacache@^15.0.5: +cacache@^15.0.5: version "15.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== @@ -6359,7 +6359,7 @@ jest-watcher@^26.3.0: jest-util "^26.3.0" string-length "^4.0.1" -jest-worker@^26.0.0, jest-worker@^26.3.0: +jest-worker@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== @@ -7550,10 +7550,10 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.1.tgz#584784ac0722d1aed09f19f90ed2999af6ce2839" - integrity sha512-mw/p92EyOzl2MhauKodw54Rx5ZK4624rNfgNaBguFZkHzyUG9WsDzFF5/yQVEJinbJDdP4jEfMN+uBquiGnaLg== +p-limit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== dependencies: p-try "^2.0.0" @@ -9395,7 +9395,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: +schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -9480,6 +9480,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -10250,22 +10257,22 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.0.6.tgz#db0a108bbdd3680d72c9b491fbabad09ba207b99" - integrity sha512-z3HLOOPUHkCNGkeEHqqiMAIy1pjpHwS1o+i6Zn0Ws3EAvHJj46737efNNEvJ0Vx9BdDQM83d56qySDJOSORA0A== +terser-webpack-plugin@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.2.tgz#d86200c700053bba637913fe4310ba1bdeb5568e" + integrity sha512-3qAQpykRTD5DReLu5/cwpsg7EZFzP3Q0Hp2XUWJUw2mpq2jfgOKTZr8IZKKnNieRVVo1UauROTdhbQJZveGKtQ== dependencies: - cacache "^15.0.4" + cacache "^15.0.5" find-cache-dir "^3.3.1" - jest-worker "^26.0.0" - p-limit "^3.0.1" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" + jest-worker "^26.3.0" + p-limit "^3.0.2" + schema-utils "^2.7.1" + serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^4.8.0" + terser "^5.3.2" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.8.0: +terser@^4.1.2: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -10274,6 +10281,15 @@ terser@^4.1.2, terser@^4.8.0: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" + integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + tesseract.js-core@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.2.0.tgz#6ef78051272a381969fac3e45a226e85022cffef" From b09810a505b0d7e9daa0dd8e4d2a31e8c3e94230 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 15:23:36 +0200 Subject: [PATCH 005/422] Bump puma from 4.3.6 to 5.0.0 (#14830) Bumps [puma](https://github.com/puma/puma) from 4.3.6 to 5.0.0. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v4.3.6...v5.0.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 1fd7b6d7a..7b1084d9d 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ ruby '>= 2.5.0', '< 3.0.0' gem 'pkg-config', '~> 1.4' -gem 'puma', '~> 4.3' +gem 'puma', '~> 5.0' gem 'rails', '~> 5.2.4.4' gem 'sprockets', '~> 3.7.2' gem 'thor', '~> 1.0' diff --git a/Gemfile.lock b/Gemfile.lock index 27e46b54e..cdbb310c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -426,7 +426,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.6) - puma (4.3.6) + puma (5.0.0) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) @@ -759,7 +759,7 @@ DEPENDENCIES private_address_check (~> 0.5) pry-byebug (~> 3.9) pry-rails (~> 0.3) - puma (~> 4.3) + puma (~> 5.0) pundit (~> 2.1) rack (~> 2.2.3) rack-attack (~> 6.3) From e39d97f7008499bbf91bb0fb3ae2f794c50f40fc Mon Sep 17 00:00:00 2001 From: fuyu <54523771+mfmfuyu@users.noreply.github.com> Date: Tue, 22 Sep 2020 22:30:41 +0900 Subject: [PATCH 006/422] Fix crash streaming process when receive invalid json (#14859) --- streaming/index.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index 7072d0bd7..791a26941 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -81,6 +81,19 @@ const redisUrlToClient = (defaultConfig, redisUrl) => { const numWorkers = +process.env.STREAMING_CLUSTER_NUM || (env === 'development' ? 1 : Math.max(os.cpus().length - 1, 1)); +/** + * @param {string} json + * @return {Object.|null} + */ +const parseJSON = (json) => { + try { + return JSON.parse(json); + } catch (err) { + log.error(err); + return null; + } +}; + const startMaster = () => { if (!process.env.SOCKET && process.env.PORT && isNaN(+process.env.PORT)) { log.warn('UNIX domain socket is now supported by using SOCKET. Please migrate from PORT hack.'); @@ -522,7 +535,9 @@ const startWorker = (workerId) => { log.verbose(req.requestId, `Starting stream from ${ids.join(', ')} for ${accountId}${streamType}`); const listener = message => { - const { event, payload, queued_at } = JSON.parse(message); + const json = parseJSON(message); + if (!json) return; + const { event, payload, queued_at } = json; const transmit = () => { const now = new Date().getTime(); @@ -932,7 +947,9 @@ const startWorker = (workerId) => { ws.on('error', onEnd); ws.on('message', data => { - const { type, stream, ...params } = JSON.parse(data); + const json = parseJSON(data); + if (!json) return; + const { type, stream, ...params } = json; if (type === 'subscribe') { subscribeWebsocketToChannel(session, firstParam(stream), params); From b655a7f88f653e143d85e1d01bfedde42dc6d9e4 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Wed, 23 Sep 2020 23:01:54 +0900 Subject: [PATCH 007/422] Fix a slow query for TagFeed (#14861) * Fix a slow query for TagFeed * rename tags to tag_ids --- app/models/status.rb | 10 +++++----- app/models/tag_feed.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/models/status.rb b/app/models/status.rb index c6e16ff75..96d90e1c2 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -89,19 +89,19 @@ class Status < ApplicationRecord scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') } scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') } scope :with_public_visibility, -> { where(visibility: :public) } - scope :tagged_with, ->(tag) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag }) } + scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } scope :in_chosen_languages, ->(account) { where(language: nil).or where(language: account.chosen_languages) } scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced_at: nil }) } scope :including_silenced_accounts, -> { left_outer_joins(:account).where.not(accounts: { silenced_at: nil }) } scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) } scope :not_domain_blocked_by_account, ->(account) { account.excluded_from_timeline_domains.blank? ? left_outer_joins(:account) : left_outer_joins(:account).where('accounts.domain IS NULL OR accounts.domain NOT IN (?)', account.excluded_from_timeline_domains) } - scope :tagged_with_all, ->(tags) { - Array(tags).map(&:id).map(&:to_i).reduce(self) do |result, id| + scope :tagged_with_all, ->(tag_ids) { + Array(tag_ids).reduce(self) do |result, id| result.joins("INNER JOIN statuses_tags t#{id} ON t#{id}.status_id = statuses.id AND t#{id}.tag_id = #{id}") end } - scope :tagged_with_none, ->(tags) { - Array(tags).map(&:id).map(&:to_i).reduce(self) do |result, id| + scope :tagged_with_none, ->(tag_ids) { + Array(tag_ids).reduce(self) do |result, id| result.joins("LEFT OUTER JOIN statuses_tags t#{id} ON t#{id}.status_id = statuses.id AND t#{id}.tag_id = #{id}") .where("t#{id}.tag_id IS NULL") end diff --git a/app/models/tag_feed.rb b/app/models/tag_feed.rb index 50634fe83..9a16ffc82 100644 --- a/app/models/tag_feed.rb +++ b/app/models/tag_feed.rb @@ -52,6 +52,6 @@ class TagFeed < PublicFeed end def tags_for(names) - Tag.matching_name(Array(names).take(LIMIT_PER_MODE)) if names.present? + Tag.matching_name(Array(names).take(LIMIT_PER_MODE)).pluck(:id) if names.present? end end From 03b6b034b95b9ee2ce4a80c3b9c724273dcb0072 Mon Sep 17 00:00:00 2001 From: Jeremy Rose Date: Thu, 24 Sep 2020 14:32:13 -0700 Subject: [PATCH 008/422] add og:published_time to opengraph meta tags (#14865) --- app/views/statuses/show.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/statuses/show.html.haml b/app/views/statuses/show.html.haml index 873df7fbd..7ef7b09a2 100644 --- a/app/views/statuses/show.html.haml +++ b/app/views/statuses/show.html.haml @@ -12,6 +12,7 @@ = opengraph 'og:type', 'article' = opengraph 'og:title', "#{display_name(@account)} (#{acct(@account)})" = opengraph 'og:url', short_account_status_url(@account, @status) + = opengraph 'og:published_time', @status.created_at.iso8601 = render 'og_description', activity: @status = render 'og_image', activity: @status, account: @account From ff89025979abf3dae40b8e0745b2584cc3feb744 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 26 Sep 2020 20:57:07 +0200 Subject: [PATCH 009/422] Add unread notification markers (#14818) * Add unread notification markers Fixes #14804 * Allow IntersectionObserverArticle's children to be updated --- app/javascript/mastodon/actions/markers.js | 41 ++++++- .../mastodon/actions/notifications.js | 2 + .../intersection_observer_article.js | 12 +- app/javascript/mastodon/components/status.js | 5 +- .../notifications/components/notification.js | 27 +++-- .../mastodon/features/notifications/index.js | 39 +++++- app/javascript/mastodon/features/ui/index.js | 4 +- .../mastodon/reducers/notifications.js | 111 ++++++++++++++++-- .../styles/mastodon/components.scss | 19 +++ 9 files changed, 227 insertions(+), 33 deletions(-) diff --git a/app/javascript/mastodon/actions/markers.js b/app/javascript/mastodon/actions/markers.js index 6cb09fe96..41a95503e 100644 --- a/app/javascript/mastodon/actions/markers.js +++ b/app/javascript/mastodon/actions/markers.js @@ -3,6 +3,9 @@ import { debounce } from 'lodash'; import compareId from '../compare_id'; import { showAlertForError } from './alerts'; +export const MARKERS_FETCH_REQUEST = 'MARKERS_FETCH_REQUEST'; +export const MARKERS_FETCH_SUCCESS = 'MARKERS_FETCH_SUCCESS'; +export const MARKERS_FETCH_FAIL = 'MARKERS_FETCH_FAIL'; export const MARKERS_SUBMIT_SUCCESS = 'MARKERS_SUBMIT_SUCCESS'; export const synchronouslySubmitMarkers = () => (dispatch, getState) => { @@ -58,7 +61,7 @@ const _buildParams = (state) => { const params = {}; const lastHomeId = state.getIn(['timelines', 'home', 'items']).find(item => item !== null); - const lastNotificationId = state.getIn(['notifications', 'items', 0, 'id']); + const lastNotificationId = state.getIn(['notifications', 'lastReadId']); if (lastHomeId && compareId(lastHomeId, state.getIn(['markers', 'home'])) > 0) { params.home = { @@ -100,3 +103,39 @@ export function submitMarkersSuccess({ home, notifications }) { export function submitMarkers() { return (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState); }; + +export const fetchMarkers = () => (dispatch, getState) => { + const params = { timeline: ['notifications'] }; + + dispatch(fetchMarkersRequest()); + + api(getState).get('/api/v1/markers', { params }).then(response => { + dispatch(fetchMarkersSuccess(response.data)); + }).catch(error => { + dispatch(fetchMarkersFail(error)); + }); +}; + +export function fetchMarkersRequest() { + return { + type: MARKERS_FETCH_REQUEST, + skipLoading: true, + }; +}; + +export function fetchMarkersSuccess(markers) { + return { + type: MARKERS_FETCH_SUCCESS, + markers, + skipLoading: true, + }; +}; + +export function fetchMarkersFail(error) { + return { + type: MARKERS_FETCH_FAIL, + error, + skipLoading: true, + skipAlert: true, + }; +}; diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 099e42f6c..552def63b 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -33,6 +33,8 @@ export const NOTIFICATIONS_LOAD_PENDING = 'NOTIFICATIONS_LOAD_PENDING'; export const NOTIFICATIONS_MOUNT = 'NOTIFICATIONS_MOUNT'; export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; +export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, diff --git a/app/javascript/mastodon/components/intersection_observer_article.js b/app/javascript/mastodon/components/intersection_observer_article.js index 124b34b02..2d87f19b5 100644 --- a/app/javascript/mastodon/components/intersection_observer_article.js +++ b/app/javascript/mastodon/components/intersection_observer_article.js @@ -2,10 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import scheduleIdleTask from '../features/ui/util/schedule_idle_task'; import getRectFromEntry from '../features/ui/util/get_rect_from_entry'; -import { is } from 'immutable'; -// Diff these props in the "rendered" state -const updateOnPropsForRendered = ['id', 'index', 'listLength']; // Diff these props in the "unrendered" state const updateOnPropsForUnrendered = ['id', 'index', 'listLength', 'cachedHeight']; @@ -33,9 +30,12 @@ export default class IntersectionObserverArticle extends React.Component { // If we're going from rendered to unrendered (or vice versa) then update return true; } - // Otherwise, diff based on props - const propsToDiff = isUnrendered ? updateOnPropsForUnrendered : updateOnPropsForRendered; - return !propsToDiff.every(prop => is(nextProps[prop], this.props[prop])); + // If we are and remain hidden, diff based on props + if (isUnrendered) { + return !updateOnPropsForUnrendered.every(prop => nextProps[prop] === this.props[prop]); + } + // Else, assume the children have changed + return true; } componentDidMount () { diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 174e401b7..a1d6f27a6 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -104,6 +104,7 @@ class Status extends ImmutablePureComponent { 'account', 'muted', 'hidden', + 'unread', ]; state = { @@ -438,10 +439,10 @@ class Status extends ImmutablePureComponent { return ( -
+
{prepend} -
+
diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js index 62a97f187..94fdbd6f4 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.js +++ b/app/javascript/mastodon/features/notifications/components/notification.js @@ -10,6 +10,7 @@ import AccountContainer from 'mastodon/containers/account_container'; import FollowRequestContainer from '../containers/follow_request_container'; import Icon from 'mastodon/components/icon'; import Permalink from 'mastodon/components/permalink'; +import classNames from 'classnames'; const messages = defineMessages({ favourite: { id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, @@ -50,6 +51,7 @@ class Notification extends ImmutablePureComponent { updateScrollBottom: PropTypes.func, cacheMediaWidth: PropTypes.func, cachedMediaWidth: PropTypes.number, + unread: PropTypes.bool, }; handleMoveUp = () => { @@ -114,11 +116,11 @@ class Notification extends ImmutablePureComponent { } renderFollow (notification, account, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( -
+
@@ -136,11 +138,11 @@ class Notification extends ImmutablePureComponent { } renderFollowRequest (notification, account, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( -
+
@@ -170,16 +172,17 @@ class Notification extends ImmutablePureComponent { updateScrollBottom={this.props.updateScrollBottom} cachedMediaWidth={this.props.cachedMediaWidth} cacheMediaWidth={this.props.cacheMediaWidth} + unread={this.props.unread} /> ); } renderFavourite (notification, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( -
+
@@ -207,11 +210,11 @@ class Notification extends ImmutablePureComponent { } renderReblog (notification, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( -
+
@@ -239,11 +242,11 @@ class Notification extends ImmutablePureComponent { } renderStatus (notification, link) { - const { intl } = this.props; + const { intl, unread } = this.props; return ( -
+
@@ -271,13 +274,13 @@ class Notification extends ImmutablePureComponent { } renderPoll (notification, account) { - const { intl } = this.props; + const { intl, unread } = this.props; const ownPoll = me === account.get('id'); const message = ownPoll ? intl.formatMessage(messages.ownPoll) : intl.formatMessage(messages.poll); return ( -
+
diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 6ff376780..41a45b2b6 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -4,7 +4,14 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Column from '../../components/column'; import ColumnHeader from '../../components/column_header'; -import { expandNotifications, scrollTopNotifications, loadPending, mountNotifications, unmountNotifications } from '../../actions/notifications'; +import { + expandNotifications, + scrollTopNotifications, + loadPending, + mountNotifications, + unmountNotifications, + markNotificationsAsRead, +} from '../../actions/notifications'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import NotificationContainer from './containers/notification_container'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -15,9 +22,12 @@ import { List as ImmutableList } from 'immutable'; import { debounce } from 'lodash'; import ScrollableList from '../../components/scrollable_list'; import LoadGap from '../../components/load_gap'; +import Icon from 'mastodon/components/icon'; +import compareId from 'mastodon/compare_id'; const messages = defineMessages({ title: { id: 'column.notifications', defaultMessage: 'Notifications' }, + markAsRead : { id: 'notifications.mark_as_read', defaultMessage: 'Mark every notification as read' }, }); const getNotifications = createSelector([ @@ -42,6 +52,8 @@ const mapStateToProps = state => ({ isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, hasMore: state.getIn(['notifications', 'hasMore']), numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, + lastReadId: state.getIn(['notifications', 'readMarkerId']), + canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0), }); export default @connect(mapStateToProps) @@ -60,6 +72,8 @@ class Notifications extends React.PureComponent { multiColumn: PropTypes.bool, hasMore: PropTypes.bool, numPending: PropTypes.number, + lastReadId: PropTypes.string, + canMarkAsRead: PropTypes.bool, }; static defaultProps = { @@ -146,8 +160,12 @@ class Notifications extends React.PureComponent { } } + handleMarkAsRead = () => { + this.props.dispatch(markNotificationsAsRead()); + }; + render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props; + const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead } = this.props; const pinned = !!columnId; const emptyMessage = ; @@ -174,6 +192,7 @@ class Notifications extends React.PureComponent { accountId={item.get('account')} onMoveUp={this.handleMoveUp} onMoveDown={this.handleMoveDown} + unread={lastReadId !== '0' && compareId(item.get('id'), lastReadId) > 0} /> )); } else { @@ -202,6 +221,21 @@ class Notifications extends React.PureComponent { ); + let extraButton = null; + + if (canMarkAsRead) { + extraButton = ( + + ); + } + return ( diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 553cb3365..5a0cf3b90 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -16,7 +16,7 @@ import { expandNotifications } from '../../actions/notifications'; import { fetchFilters } from '../../actions/filters'; import { clearHeight } from '../../actions/height_cache'; import { focusApp, unfocusApp } from 'mastodon/actions/app'; -import { synchronouslySubmitMarkers } from 'mastodon/actions/markers'; +import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import UploadArea from './components/upload_area'; import ColumnsAreaContainer from './containers/columns_area_container'; @@ -265,6 +265,7 @@ class UI extends React.PureComponent { handleWindowFocus = () => { this.props.dispatch(focusApp()); + this.props.dispatch(submitMarkers()); } handleWindowBlur = () => { @@ -368,6 +369,7 @@ class UI extends React.PureComponent { window.setTimeout(() => Notification.requestPermission(), 120 * 1000); } + this.props.dispatch(fetchMarkers()); this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index ed1ba0272..b01db806f 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -9,6 +9,7 @@ import { NOTIFICATIONS_LOAD_PENDING, NOTIFICATIONS_MOUNT, NOTIFICATIONS_UNMOUNT, + NOTIFICATIONS_MARK_AS_READ, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, @@ -16,6 +17,13 @@ import { FOLLOW_REQUEST_AUTHORIZE_SUCCESS, FOLLOW_REQUEST_REJECT_SUCCESS, } from '../actions/accounts'; +import { + MARKERS_FETCH_SUCCESS, +} from '../actions/markers'; +import { + APP_FOCUS, + APP_UNFOCUS, +} from '../actions/app'; import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import { TIMELINE_DELETE, TIMELINE_DISCONNECT } from '../actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; @@ -26,8 +34,11 @@ const initialState = ImmutableMap({ items: ImmutableList(), hasMore: true, top: false, - mounted: false, + mounted: 0, unread: 0, + lastReadId: '0', + readMarkerId: '0', + isTabVisible: true, isLoading: false, }); @@ -46,8 +57,10 @@ const normalizeNotification = (state, notification, usePendingItems) => { return state.update('pendingItems', list => list.unshift(notificationToMap(notification))).update('unread', unread => unread + 1); } - if (!top) { + if (shouldCountUnreadNotifications(state)) { state = state.update('unread', unread => unread + 1); + } else { + state = state.set('lastReadId', notification.id); } return state.update('items', list => { @@ -60,6 +73,7 @@ const normalizeNotification = (state, notification, usePendingItems) => { }; const expandNormalizedNotifications = (state, notifications, next, isLoadingRecent, usePendingItems) => { + const lastReadId = state.get('lastReadId'); let items = ImmutableList(); notifications.forEach((n, i) => { @@ -87,6 +101,15 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece mutable.set('hasMore', false); } + if (shouldCountUnreadNotifications(state)) { + mutable.update('unread', unread => unread + items.count(item => compareId(item.get('id'), lastReadId) > 0)); + } else { + const mostRecent = items.find(item => item !== null); + if (mostRecent && compareId(lastReadId, mostRecent.get('id')) < 0) { + mutable.set('lastReadId', mostRecent.get('id')); + } + } + mutable.set('isLoading', false); }); }; @@ -96,21 +119,92 @@ const filterNotifications = (state, accountIds, type) => { return state.update('items', helper).update('pendingItems', helper); }; +const clearUnread = (state) => { + state = state.set('unread', state.get('pendingItems').size); + const lastNotification = state.get('items').find(item => item !== null); + return state.set('lastReadId', lastNotification ? lastNotification.get('id') : '0'); +}; + const updateTop = (state, top) => { - if (top) { - state = state.set('unread', state.get('pendingItems').size); + state = state.set('top', top); + + if (!shouldCountUnreadNotifications(state)) { + state = clearUnread(state); } - return state.set('top', top); + return state; }; const deleteByStatus = (state, statusId) => { + const lastReadId = state.get('lastReadId'); + + if (shouldCountUnreadNotifications(state)) { + const deletedUnread = state.get('items').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); + state = state.update('unread', unread => unread - deletedUnread.size); + } + const helper = list => list.filterNot(item => item !== null && item.get('status') === statusId); + const deletedUnread = state.get('pendingItems').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); + state = state.update('unread', unread => unread - deletedUnread.size); return state.update('items', helper).update('pendingItems', helper); }; +const updateMounted = (state) => { + state = state.update('mounted', count => count + 1); + if (!shouldCountUnreadNotifications(state)) { + state = state.set('readMarkerId', state.get('lastReadId')); + state = clearUnread(state); + } + return state; +}; + +const updateVisibility = (state, visibility) => { + state = state.set('isTabVisible', visibility); + if (!shouldCountUnreadNotifications(state)) { + state = state.set('readMarkerId', state.get('lastReadId')); + state = clearUnread(state); + } + return state; +}; + +const shouldCountUnreadNotifications = (state) => { + const isTabVisible = state.get('isTabVisible'); + const isOnTop = state.get('top'); + const isMounted = state.get('mounted') > 0; + const lastReadId = state.get('lastReadId'); + const lastItemReached = !state.get('hasMore') || lastReadId === '0' || (!state.get('items').isEmpty() && compareId(state.get('items').last().get('id'), lastReadId) <= 0); + + return !(isTabVisible && isOnTop && isMounted && lastItemReached); +}; + +const recountUnread = (state, last_read_id) => { + return state.withMutations(mutable => { + if (compareId(last_read_id, mutable.get('lastReadId')) > 0) { + mutable.set('lastReadId', last_read_id); + } + + if (compareId(last_read_id, mutable.get('readMarkerId')) > 0) { + mutable.set('readMarkerId', last_read_id); + } + + if (state.get('unread') > 0 || shouldCountUnreadNotifications(state)) { + mutable.set('unread', mutable.get('pendingItems').count(item => item !== null) + mutable.get('items').count(item => item && compareId(item.get('id'), last_read_id) > 0)); + } + }); +}; + export default function notifications(state = initialState, action) { switch(action.type) { + case MARKERS_FETCH_SUCCESS: + return action.markers.notifications ? recountUnread(state, action.markers.notifications.last_read_id) : state; + case NOTIFICATIONS_MOUNT: + return updateMounted(state); + case NOTIFICATIONS_UNMOUNT: + return state.update('mounted', count => count - 1); + case APP_FOCUS: + return updateVisibility(state, true); + case APP_UNFOCUS: + return updateVisibility(state, false); case NOTIFICATIONS_LOAD_PENDING: return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: @@ -144,10 +238,9 @@ export default function notifications(state = initialState, action) { return action.timeline === 'home' ? state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : state; - case NOTIFICATIONS_MOUNT: - return state.set('mounted', true); - case NOTIFICATIONS_UNMOUNT: - return state.set('mounted', false); + case NOTIFICATIONS_MARK_AS_READ: + const lastNotification = state.get('items').find(item => item !== null); + return lastNotification ? recountUnread(state, lastNotification.get('id')) : state; default: return state; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 7defa0d16..5e79b4a11 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7015,3 +7015,22 @@ noscript { } } } + +.notification, +.status__wrapper { + position: relative; + + &.unread { + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + pointer-events: 0; + width: 100%; + height: 100%; + border-left: 2px solid $highlight-text-color; + pointer-events: none; + } + } +} From d60290044ed3f6f5cb84e1dafd317250d5c97d92 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 26 Sep 2020 20:57:39 +0200 Subject: [PATCH 010/422] Add environment variable to allow requests to some private addresses (#14722) --- app/lib/request.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/lib/request.rb b/app/lib/request.rb index 89fbeaf95..38048dad7 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -253,7 +253,15 @@ class Request alias new open def check_private_address(address) - raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(IPAddr.new(address.to_s)) + addr = IPAddr.new(address.to_s) + return if private_address_exceptions.any? { |range| range.include?(addr) } + raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(addr) + end + + def private_address_exceptions + @private_address_exceptions = begin + (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(',').map { |addr| IPAddr.new(addr) } + end end end end From 5bbc9a4f78cce2ba519b061e77b166417b044235 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 27 Sep 2020 22:00:43 +0200 Subject: [PATCH 011/422] Fix downloading remote media files when server returns empty filename (#14867) Fixes #14817 --- lib/paperclip/response_with_limit_adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/paperclip/response_with_limit_adapter.rb b/lib/paperclip/response_with_limit_adapter.rb index 8711b1349..17a2abd25 100644 --- a/lib/paperclip/response_with_limit_adapter.rb +++ b/lib/paperclip/response_with_limit_adapter.rb @@ -16,7 +16,7 @@ module Paperclip private def cache_current_values - @original_filename = filename_from_content_disposition || filename_from_path || 'data' + @original_filename = filename_from_content_disposition.presence || filename_from_path.presence || 'data' @size = @target.response.content_length @tempfile = copy_to_tempfile(@target) @content_type = ContentTypeDetector.new(@tempfile.path).detect From d88a79b4566869ede24958fbff946e357bbb3cb9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 28 Sep 2020 13:29:43 +0200 Subject: [PATCH 012/422] Add pop-out player for audio/video in web UI (#14870) Fix #11160 --- .../mastodon/actions/picture_in_picture.js | 38 +++++ .../mastodon/components/animated_number.js | 17 ++- .../mastodon/components/icon_button.js | 11 +- .../picture_in_picture_placeholder.js | 69 +++++++++ app/javascript/mastodon/components/status.js | 19 ++- .../mastodon/components/status_action_bar.js | 13 +- .../mastodon/containers/status_container.js | 6 + .../mastodon/features/audio/index.js | 47 +++++- .../picture_in_picture/components/footer.js | 137 ++++++++++++++++++ .../picture_in_picture/components/header.js | 40 +++++ .../features/picture_in_picture/index.js | 85 +++++++++++ .../status/components/detailed_status.js | 8 +- .../mastodon/features/status/index.js | 5 +- .../features/ui/components/media_modal.js | 2 +- .../features/ui/components/video_modal.js | 4 +- app/javascript/mastodon/features/ui/index.js | 2 + .../mastodon/features/video/index.js | 53 +++++-- app/javascript/mastodon/reducers/index.js | 2 + .../mastodon/reducers/picture_in_picture.js | 22 +++ .../styles/mastodon/components.scss | 126 +++++++++++++--- 20 files changed, 648 insertions(+), 58 deletions(-) create mode 100644 app/javascript/mastodon/actions/picture_in_picture.js create mode 100644 app/javascript/mastodon/components/picture_in_picture_placeholder.js create mode 100644 app/javascript/mastodon/features/picture_in_picture/components/footer.js create mode 100644 app/javascript/mastodon/features/picture_in_picture/components/header.js create mode 100644 app/javascript/mastodon/features/picture_in_picture/index.js create mode 100644 app/javascript/mastodon/reducers/picture_in_picture.js diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js new file mode 100644 index 000000000..4085cb59e --- /dev/null +++ b/app/javascript/mastodon/actions/picture_in_picture.js @@ -0,0 +1,38 @@ +// @ts-check + +export const PICTURE_IN_PICTURE_DEPLOY = 'PICTURE_IN_PICTURE_DEPLOY'; +export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; + +/** + * @typedef MediaProps + * @property {string} src + * @property {boolean} muted + * @property {number} volume + * @property {number} currentTime + * @property {string} poster + * @property {string} backgroundColor + * @property {string} foregroundColor + * @property {string} accentColor + */ + +/** + * @param {string} statusId + * @param {string} accountId + * @param {string} playerType + * @param {MediaProps} props + * @return {object} + */ +export const deployPictureInPicture = (statusId, accountId, playerType, props) => ({ + type: PICTURE_IN_PICTURE_DEPLOY, + statusId, + accountId, + playerType, + props, +}); + +/* + * @return {object} + */ +export const removePictureInPicture = () => ({ + type: PICTURE_IN_PICTURE_REMOVE, +}); diff --git a/app/javascript/mastodon/components/animated_number.js b/app/javascript/mastodon/components/animated_number.js index f3127c88e..fbe948c5b 100644 --- a/app/javascript/mastodon/components/animated_number.js +++ b/app/javascript/mastodon/components/animated_number.js @@ -5,10 +5,21 @@ import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; import { reduceMotion } from 'mastodon/initial_state'; +const obfuscatedCount = count => { + if (count < 0) { + return 0; + } else if (count <= 1) { + return count; + } else { + return '1+'; + } +}; + export default class AnimatedNumber extends React.PureComponent { static propTypes = { value: PropTypes.number.isRequired, + obfuscate: PropTypes.bool, }; state = { @@ -36,11 +47,11 @@ export default class AnimatedNumber extends React.PureComponent { } render () { - const { value } = this.props; + const { value, obfuscate } = this.props; const { direction } = this.state; if (reduceMotion) { - return ; + return obfuscate ? obfuscatedCount(value) : ; } const styles = [{ @@ -54,7 +65,7 @@ export default class AnimatedNumber extends React.PureComponent { {items => ( {items.map(({ key, data, style }) => ( - 0 ? 'absolute' : 'static', transform: `translateY(${style.y * 100}%)` }}> + 0 ? 'absolute' : 'static', transform: `translateY(${style.y * 100}%)` }}>{obfuscate ? obfuscatedCount(data) : } ))} )} diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index fd715bc3c..7f83dc1b9 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; +import AnimatedNumber from 'mastodon/components/animated_number'; export default class IconButton extends React.PureComponent { @@ -24,6 +25,8 @@ export default class IconButton extends React.PureComponent { animate: PropTypes.bool, overlay: PropTypes.bool, tabIndex: PropTypes.string, + counter: PropTypes.number, + obfuscateCount: PropTypes.bool, }; static defaultProps = { @@ -97,6 +100,8 @@ export default class IconButton extends React.PureComponent { pressed, tabIndex, title, + counter, + obfuscateCount, } = this.props; const { @@ -113,6 +118,10 @@ export default class IconButton extends React.PureComponent { overlayed: overlay, }); + if (typeof counter !== 'undefined') { + style.width = 'auto'; + } + return ( ); } diff --git a/app/javascript/mastodon/components/picture_in_picture_placeholder.js b/app/javascript/mastodon/components/picture_in_picture_placeholder.js new file mode 100644 index 000000000..19d15c18b --- /dev/null +++ b/app/javascript/mastodon/components/picture_in_picture_placeholder.js @@ -0,0 +1,69 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import Icon from 'mastodon/components/icon'; +import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; +import { connect } from 'react-redux'; +import { debounce } from 'lodash'; +import { FormattedMessage } from 'react-intl'; + +export default @connect() +class PictureInPicturePlaceholder extends React.PureComponent { + + static propTypes = { + width: PropTypes.number, + dispatch: PropTypes.func.isRequired, + }; + + state = { + width: this.props.width, + height: this.props.width && (this.props.width / (16/9)), + }; + + handleClick = () => { + const { dispatch } = this.props; + dispatch(removePictureInPicture()); + } + + setRef = c => { + this.node = c; + + if (this.node) { + this._setDimensions(); + } + } + + _setDimensions () { + const width = this.node.offsetWidth; + const height = width / (16/9); + + this.setState({ width, height }); + } + + componentDidMount () { + window.addEventListener('resize', this.handleResize, { passive: true }); + } + + componentWillUnmount () { + window.removeEventListener('resize', this.handleResize); + } + + handleResize = debounce(() => { + if (this.node) { + this._setDimensions(); + } + }, 250, { + trailing: true, + }); + + render () { + const { height } = this.state; + + return ( +
+ + +
+ ); + } + +} diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index a1d6f27a6..c1e1cd172 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -17,6 +17,7 @@ import { HotKeys } from 'react-hotkeys'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; import { displayMedia } from '../initial_state'; +import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; // We use the component (and not the container) since we do not want // to use the progress bar to show download progress @@ -95,6 +96,8 @@ class Status extends ImmutablePureComponent { cacheMediaWidth: PropTypes.func, cachedMediaWidth: PropTypes.number, scrollKey: PropTypes.string, + deployPictureInPicture: PropTypes.func, + usingPiP: PropTypes.bool, }; // Avoid checking props that are functions (and whose equality will always @@ -105,6 +108,7 @@ class Status extends ImmutablePureComponent { 'muted', 'hidden', 'unread', + 'usingPiP', ]; state = { @@ -206,6 +210,13 @@ class Status extends ImmutablePureComponent { } } + handleDeployPictureInPicture = (type, mediaProps) => { + const { deployPictureInPicture } = this.props; + const status = this._properStatus(); + + deployPictureInPicture(status, type, mediaProps); + } + handleHotkeyReply = e => { e.preventDefault(); this.props.onReply(this._properStatus(), this.context.router.history); @@ -266,7 +277,7 @@ class Status extends ImmutablePureComponent { let media = null; let statusAvatar, prepend, rebloggedByText; - const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey } = this.props; + const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, usingPiP } = this.props; let { status, account, ...other } = this.props; @@ -337,7 +348,9 @@ class Status extends ImmutablePureComponent { status = status.get('reblog'); } - if (status.get('media_attachments').size > 0) { + if (usingPiP) { + media = ; + } else if (status.get('media_attachments').size > 0) { if (this.props.muted) { media = ( )} @@ -383,6 +397,7 @@ class Status extends ImmutablePureComponent { sensitive={status.get('sensitive')} onOpenVideo={this.handleOpenVideo} cacheWidth={this.props.cacheMediaWidth} + deployPictureInPicture={this.handleDeployPictureInPicture} visible={this.state.showMedia} onToggleVisibility={this.handleToggleMediaVisibility} /> diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index b7babd4ad..66b5a17ac 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -43,16 +43,6 @@ const messages = defineMessages({ unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, }); -const obfuscatedCount = count => { - if (count < 0) { - return 0; - } else if (count <= 1) { - return count; - } else { - return '1+'; - } -}; - const mapStateToProps = (state, { status }) => ({ relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]), }); @@ -329,9 +319,10 @@ class StatusActionBar extends ImmutablePureComponent { return (
-
{obfuscatedCount(status.get('replies_count'))}
+ + {shareButton}
diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index decf7279f..7bfd66d3e 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -37,6 +37,7 @@ import { initMuteModal } from '../actions/mutes'; import { initBlockModal } from '../actions/blocks'; import { initReport } from '../actions/reports'; import { openModal } from '../actions/modal'; +import { deployPictureInPicture } from '../actions/picture_in_picture'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { boostModal, deleteModal } from '../initial_state'; import { showAlertForError } from '../actions/alerts'; @@ -56,6 +57,7 @@ const makeMapStateToProps = () => { const mapStateToProps = (state, props) => ({ status: getStatus(state, props), + usingPiP: state.get('picture_in_picture').statusId === props.id, }); return mapStateToProps; @@ -207,6 +209,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(unblockDomain(domain)); }, + deployPictureInPicture (status, type, mediaProps) { + dispatch(deployPictureInPicture(status.get('id'), status.getIn(['account', 'id']), type, mediaProps)); + }, + }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status)); diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js index 5b8172694..6954d2a4c 100644 --- a/app/javascript/mastodon/features/audio/index.js +++ b/app/javascript/mastodon/features/audio/index.js @@ -37,7 +37,11 @@ class Audio extends React.PureComponent { backgroundColor: PropTypes.string, foregroundColor: PropTypes.string, accentColor: PropTypes.string, + currentTime: PropTypes.number, autoPlay: PropTypes.bool, + volume: PropTypes.number, + muted: PropTypes.bool, + deployPictureInPicture: PropTypes.func, }; state = { @@ -64,6 +68,19 @@ class Audio extends React.PureComponent { } } + _pack() { + return { + src: this.props.src, + volume: this.audio.volume, + muted: this.audio.muted, + currentTime: this.audio.currentTime, + poster: this.props.poster, + backgroundColor: this.props.backgroundColor, + foregroundColor: this.props.foregroundColor, + accentColor: this.props.accentColor, + }; + } + _setDimensions () { const width = this.player.offsetWidth; const height = this.props.fullscreen ? this.player.offsetHeight : (width / (16/9)); @@ -112,6 +129,10 @@ class Audio extends React.PureComponent { componentWillUnmount () { window.removeEventListener('scroll', this.handleScroll); window.removeEventListener('resize', this.handleResize); + + if (!this.state.paused && this.audio && this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('audio', this._pack()); + } } togglePlay = () => { @@ -248,7 +269,13 @@ class Audio extends React.PureComponent { const inView = (top <= (window.innerHeight || document.documentElement.clientHeight)) && (top + height >= 0); if (!this.state.paused && !inView) { - this.setState({ paused: true }, () => this.audio.pause()); + this.audio.pause(); + + if (this.props.deployPictureInPicture) { + this.props.deployPictureInPicture('audio', this._pack()); + } + + this.setState({ paused: true }); } }, 150, { trailing: true }); @@ -261,10 +288,22 @@ class Audio extends React.PureComponent { } handleLoadedData = () => { - const { autoPlay } = this.props; + const { autoPlay, currentTime, volume, muted } = this.props; + + if (currentTime) { + this.audio.currentTime = currentTime; + } + + if (volume !== undefined) { + this.audio.volume = volume; + } + + if (muted !== undefined) { + this.audio.muted = muted; + } if (autoPlay) { - this.audio.play(); + this.togglePlay(); } } @@ -350,7 +389,7 @@ class Audio extends React.PureComponent { render () { const { src, intl, alt, editable, autoPlay } = this.props; const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state; - const progress = (currentTime / duration) * 100; + const progress = Math.min((currentTime / duration) * 100, 100); return (
diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.js b/app/javascript/mastodon/features/picture_in_picture/components/footer.js new file mode 100644 index 000000000..086cda954 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.js @@ -0,0 +1,137 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import classNames from 'classnames'; +import { me, boostModal } from 'mastodon/initial_state'; +import { defineMessages, injectIntl } from 'react-intl'; +import { replyCompose } from 'mastodon/actions/compose'; +import { reblog, favourite, unreblog, unfavourite } from 'mastodon/actions/interactions'; +import { makeGetStatus } from 'mastodon/selectors'; +import { openModal } from 'mastodon/actions/modal'; + +const messages = defineMessages({ + reply: { id: 'status.reply', defaultMessage: 'Reply' }, + replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' }, + reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, + reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost with original visibility' }, + cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' }, + cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, + favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, + replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, + replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, +}); + +const makeMapStateToProps = () => { + const getStatus = makeGetStatus(); + + const mapStateToProps = (state, { statusId }) => ({ + status: getStatus(state, { id: statusId }), + askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, + }); + + return mapStateToProps; +}; + +export default @connect(makeMapStateToProps) +@injectIntl +class Footer extends ImmutablePureComponent { + + static contextTypes = { + router: PropTypes.object, + }; + + static propTypes = { + statusId: PropTypes.string.isRequired, + status: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, + askReplyConfirmation: PropTypes.bool, + }; + + _performReply = () => { + const { dispatch, status } = this.props; + dispatch(replyCompose(status, this.context.router.history)); + }; + + handleReplyClick = () => { + const { dispatch, askReplyConfirmation, intl } = this.props; + + if (askReplyConfirmation) { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.replyMessage), + confirm: intl.formatMessage(messages.replyConfirm), + onConfirm: this._performReply, + })); + } else { + this._performReply(); + } + }; + + handleFavouriteClick = () => { + const { dispatch, status } = this.props; + + if (status.get('favourited')) { + dispatch(unfavourite(status)); + } else { + dispatch(favourite(status)); + } + }; + + _performReblog = () => { + const { dispatch, status } = this.props; + dispatch(reblog(status)); + } + + handleReblogClick = e => { + const { dispatch, status } = this.props; + + if (status.get('reblogged')) { + dispatch(unreblog(status)); + } else if ((e && e.shiftKey) || !boostModal) { + this._performReblog(); + } else { + dispatch(openModal('BOOST', { status, onReblog: this._performReblog })); + } + }; + + render () { + const { status, intl } = this.props; + + const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); + const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; + + let replyIcon, replyTitle; + + if (status.get('in_reply_to_id', null) === null) { + replyIcon = 'reply'; + replyTitle = intl.formatMessage(messages.reply); + } else { + replyIcon = 'reply-all'; + replyTitle = intl.formatMessage(messages.replyAll); + } + + let reblogTitle = ''; + + if (status.get('reblogged')) { + reblogTitle = intl.formatMessage(messages.cancel_reblog_private); + } else if (publicStatus) { + reblogTitle = intl.formatMessage(messages.reblog); + } else if (reblogPrivate) { + reblogTitle = intl.formatMessage(messages.reblog_private); + } else { + reblogTitle = intl.formatMessage(messages.cannot_reblog); + } + + return ( +
+ + + +
+ ); + } + +} diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.js b/app/javascript/mastodon/features/picture_in_picture/components/header.js new file mode 100644 index 000000000..4cb6de1a4 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.js @@ -0,0 +1,40 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import { Link } from 'react-router-dom'; +import Avatar from 'mastodon/components/avatar'; +import DisplayName from 'mastodon/components/display_name'; + +const mapStateToProps = (state, { accountId }) => ({ + account: state.getIn(['accounts', accountId]), +}); + +export default @connect(mapStateToProps) +class Header extends ImmutablePureComponent { + + static propTypes = { + accountId: PropTypes.string.isRequired, + statusId: PropTypes.string.isRequired, + account: ImmutablePropTypes.map.isRequired, + onClose: PropTypes.func.isRequired, + }; + + render () { + const { account, statusId, onClose } = this.props; + + return ( +
+ + + + + + +
+ ); + } + +} diff --git a/app/javascript/mastodon/features/picture_in_picture/index.js b/app/javascript/mastodon/features/picture_in_picture/index.js new file mode 100644 index 000000000..1e59fbcd3 --- /dev/null +++ b/app/javascript/mastodon/features/picture_in_picture/index.js @@ -0,0 +1,85 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import Video from 'mastodon/features/video'; +import Audio from 'mastodon/features/audio'; +import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; +import Header from './components/header'; +import Footer from './components/footer'; + +const mapStateToProps = state => ({ + ...state.get('picture_in_picture'), +}); + +export default @connect(mapStateToProps) +class PictureInPicture extends React.Component { + + static propTypes = { + statusId: PropTypes.string, + accountId: PropTypes.string, + type: PropTypes.string, + src: PropTypes.string, + muted: PropTypes.bool, + volume: PropTypes.number, + currentTime: PropTypes.number, + poster: PropTypes.string, + backgroundColor: PropTypes.string, + foregroundColor: PropTypes.string, + accentColor: PropTypes.string, + dispatch: PropTypes.func.isRequired, + }; + + handleClose = () => { + const { dispatch } = this.props; + dispatch(removePictureInPicture()); + } + + render () { + const { type, src, currentTime, accountId, statusId } = this.props; + + if (!currentTime) { + return null; + } + + let player; + + if (type === 'video') { + player = ( +
- {(!onCloseVideo && !editable && !fullscreen) && } + {(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && } {(!fullscreen && onOpenVideo) && } {onCloseVideo && } diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index 3823bb05e..a8fb69c27 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -36,6 +36,7 @@ import trends from './trends'; import missed_updates from './missed_updates'; import announcements from './announcements'; import markers from './markers'; +import picture_in_picture from './picture_in_picture'; const reducers = { announcements, @@ -75,6 +76,7 @@ const reducers = { trends, missed_updates, markers, + picture_in_picture, }; export default combineReducers(reducers); diff --git a/app/javascript/mastodon/reducers/picture_in_picture.js b/app/javascript/mastodon/reducers/picture_in_picture.js new file mode 100644 index 000000000..06cd8c5e8 --- /dev/null +++ b/app/javascript/mastodon/reducers/picture_in_picture.js @@ -0,0 +1,22 @@ +import { PICTURE_IN_PICTURE_DEPLOY, PICTURE_IN_PICTURE_REMOVE } from 'mastodon/actions/picture_in_picture'; + +const initialState = { + statusId: null, + accountId: null, + type: null, + src: null, + muted: false, + volume: 0, + currentTime: 0, +}; + +export default function pictureInPicture(state = initialState, action) { + switch(action.type) { + case PICTURE_IN_PICTURE_DEPLOY: + return { statusId: action.statusId, accountId: action.accountId, type: action.playerType, ...action.props }; + case PICTURE_IN_PICTURE_REMOVE: + return { ...initialState }; + default: + return state; + } +}; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 5e79b4a11..a20265bb9 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -163,7 +163,8 @@ } .icon-button { - display: inline-block; + display: inline-flex; + align-items: center; padding: 0; color: $action-button-color; border: 0; @@ -245,6 +246,14 @@ background: rgba($base-overlay-background, 0.9); } } + + &__counter { + display: inline-block; + width: 14px; + margin-left: 4px; + font-size: 12px; + font-weight: 500; + } } .text-icon-button { @@ -1139,24 +1148,6 @@ align-items: center; display: flex; margin-top: 8px; - - &__counter { - display: inline-flex; - margin-right: 11px; - align-items: center; - - .status__action-bar-button { - margin-right: 4px; - } - - &__label { - display: inline-block; - width: 14px; - font-size: 12px; - font-weight: 500; - color: $action-button-color; - } - } } .status__action-bar-button { @@ -7034,3 +7025,100 @@ noscript { } } } + +.picture-in-picture { + position: fixed; + bottom: 20px; + right: 20px; + width: 300px; + + &__footer { + border-radius: 0 0 4px 4px; + background: lighten($ui-base-color, 4%); + padding: 10px; + padding-top: 12px; + display: flex; + justify-content: space-between; + } + + &__header { + border-radius: 4px 4px 0 0; + background: lighten($ui-base-color, 4%); + padding: 10px; + display: flex; + justify-content: space-between; + + &__account { + display: flex; + text-decoration: none; + } + + .account__avatar { + margin-right: 10px; + } + + .display-name { + color: $primary-text-color; + text-decoration: none; + + strong, + span { + display: block; + text-overflow: ellipsis; + overflow: hidden; + } + + span { + color: $darker-text-color; + } + } + } + + .video-player, + .audio-player { + border-radius: 0; + } + + @media screen and (max-width: 415px) { + width: 210px; + bottom: 10px; + right: 10px; + + &__footer { + display: none; + } + + .video-player, + .audio-player { + border-radius: 0 0 4px 4px; + } + } +} + +.picture-in-picture-placeholder { + box-sizing: border-box; + border: 2px dashed lighten($ui-base-color, 8%); + background: $base-shadow-color; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: 10px; + font-size: 16px; + font-weight: 500; + cursor: pointer; + color: $darker-text-color; + + i { + display: block; + font-size: 24px; + font-weight: 400; + margin-bottom: 10px; + } + + &:hover, + &:focus, + &:active { + border-color: lighten($ui-base-color, 12%); + } +} From 559e1dfd94e671b347b1ba78ec3733a2680017f8 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 28 Sep 2020 18:11:54 +0200 Subject: [PATCH 013/422] Bump puma to 5.0.1 (#14895) Fixes LoadError on some OSes/architectures --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index cdbb310c4..f2c9b6bee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -426,7 +426,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.6) - puma (5.0.0) + puma (5.0.1) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) From e88ddb0949bb8ad8fa2c0a7b082420cf23114916 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 03:52:46 +0900 Subject: [PATCH 014/422] Bump pkg-config from 1.4.3 to 1.4.4 (#14881) Bumps [pkg-config](https://github.com/ruby-gnome/pkg-config) from 1.4.3 to 1.4.4. - [Release notes](https://github.com/ruby-gnome/pkg-config/releases) - [Changelog](https://github.com/ruby-gnome/pkg-config/blob/master/NEWS) - [Commits](https://github.com/ruby-gnome/pkg-config/compare/1.4.3...1.4.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f2c9b6bee..7d53f05b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -407,7 +407,7 @@ GEM pg (1.2.3) pghero (2.7.2) activerecord (>= 5) - pkg-config (1.4.3) + pkg-config (1.4.4) posix-spawn (0.3.15) premailer (1.14.2) addressable From 3754c877cad97c79ecd6607caa19087478ef1942 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 03:53:04 +0900 Subject: [PATCH 015/422] Bump aws-sdk-s3 from 1.81.0 to 1.81.1 (#14884) Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.81.0 to 1.81.1. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7d53f05b9..4fbdcef24 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,8 +79,8 @@ GEM cocaine (~> 0.5.3) awrence (1.1.1) aws-eventstream (1.1.0) - aws-partitions (1.373.0) - aws-sdk-core (3.107.0) + aws-partitions (1.376.0) + aws-sdk-core (3.108.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -88,7 +88,7 @@ GEM aws-sdk-kms (1.38.0) aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.81.0) + aws-sdk-s3 (1.81.1) aws-sdk-core (~> 3, >= 3.104.3) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) From d796327af2b2fee8d9bfdb18b77e2ec7662e169c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:04:36 +0900 Subject: [PATCH 016/422] Bump sass from 1.26.10 to 1.26.11 (#14876) Bumps [sass](https://github.com/sass/dart-sass) from 1.26.10 to 1.26.11. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.26.10...1.26.11) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 31 ++++++++----------------------- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index d6ed58ca4..0e9d8e8c7 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.26.10", + "sass": "^1.26.11", "sass-loader": "^10.0.2", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index e0e24a1bf..798be6cfa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2734,10 +2734,10 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -"chokidar@>=2.0.0 <4.0.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2768,21 +2768,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -9359,10 +9344,10 @@ sass-loader@^10.0.2: schema-utils "^2.7.1" semver "^7.3.2" -sass@^1.26.10: - version "1.26.10" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" - integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== +sass@^1.26.11: + version "1.26.11" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.11.tgz#0f22cc4ab2ba27dad1d4ca30837beb350b709847" + integrity sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw== dependencies: chokidar ">=2.0.0 <4.0.0" From f3f8164c39af785694ad80611d4e14c1e5421246 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:05:11 +0900 Subject: [PATCH 017/422] Bump electron-to-chromium from 1.3.570 to 1.3.573 (#14891) Bumps [electron-to-chromium](https://github.com/kilian/electron-to-chromium) from 1.3.570 to 1.3.573. - [Release notes](https://github.com/kilian/electron-to-chromium/releases) - [Changelog](https://github.com/Kilian/electron-to-chromium/blob/master/CHANGELOG.md) - [Commits](https://github.com/kilian/electron-to-chromium/compare/v1.3.570...v1.3.573) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 798be6cfa..17377a13b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3782,9 +3782,9 @@ ejs@^2.3.4, ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.570: - version "1.3.570" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" - integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== + version "1.3.573" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.573.tgz#6a21e13ee894eb441677333d5fe9fa3a449689a1" + integrity sha512-oypaNmexr8w0m2GX67fGLQ0Xgsd7uXz7GcwaHZ9eW3ZdQ8uA2+V/wXmLdMTk3gcacbqQGAN7CXWG3fOkfKYftw== elliptic@^6.5.3: version "6.5.3" From dbb66d74a750ea94b3e7897e69ec2c5b5dfb0292 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:05:51 +0900 Subject: [PATCH 018/422] Bump is-callable from 1.2.1 to 1.2.2 (#14889) Bumps [is-callable](https://github.com/ljharb/is-callable) from 1.2.1 to 1.2.2. - [Release notes](https://github.com/ljharb/is-callable/releases) - [Changelog](https://github.com/inspect-js/is-callable/blob/master/CHANGELOG.md) - [Commits](https://github.com/ljharb/is-callable/compare/v1.2.1...v1.2.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 17377a13b..6c4d6a34c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5615,9 +5615,9 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" - integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== is-ci@^2.0.0: version "2.0.0" From 7986e2e4d368064a508101a82d08fb949ab8934a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:06:27 +0900 Subject: [PATCH 019/422] Bump raabro from 1.3.1 to 1.3.3 (#14888) Bumps [raabro](https://github.com/floraison/raabro) from 1.3.1 to 1.3.3. - [Release notes](https://github.com/floraison/raabro/releases) - [Changelog](https://github.com/floraison/raabro/blob/master/CHANGELOG.md) - [Commits](https://github.com/floraison/raabro/compare/v1.3.1...v1.3.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4fbdcef24..5679bb76a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -430,7 +430,7 @@ GEM nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) - raabro (1.3.1) + raabro (1.3.3) rack (2.2.3) rack-attack (6.3.1) rack (>= 1.0, < 3) From 9802bf00b02789902e1c84b2c2bc8c48e89aaddb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:07:06 +0900 Subject: [PATCH 020/422] Bump postcss-load-config from 2.1.0 to 2.1.2 (#14886) Bumps [postcss-load-config](https://github.com/postcss/postcss-load-config) from 2.1.0 to 2.1.2. - [Release notes](https://github.com/postcss/postcss-load-config/releases) - [Changelog](https://github.com/postcss/postcss-load-config/blob/master/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-load-config/compare/v2.1.0...v2.1.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6c4d6a34c..272646c43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7965,9 +7965,9 @@ postcss-discard-overridden@^4.0.1: postcss "^7.0.0" postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== dependencies: cosmiconfig "^5.0.0" import-cwd "^2.0.0" From c9efb2028c7144ec6e82e287a289e1ebfb5d47fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:07:42 +0900 Subject: [PATCH 021/422] Bump sidekiq-unique-jobs from 6.0.23 to 6.0.24 (#14877) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 6.0.23 to 6.0.24. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5679bb76a..76463e0d6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -575,7 +575,7 @@ GEM sidekiq (>= 3) thwait tilt (>= 1.4.0) - sidekiq-unique-jobs (6.0.23) + sidekiq-unique-jobs (6.0.24) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 4.0, < 7.0) thor (>= 0.20, < 2.0) From 469029b5576df4417271898b4c4fe41863de945e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:09:25 +0900 Subject: [PATCH 022/422] Bump parser from 2.7.1.4 to 2.7.1.5 (#14879) Bumps [parser](https://github.com/whitequark/parser) from 2.7.1.4 to 2.7.1.5. - [Release notes](https://github.com/whitequark/parser/releases) - [Changelog](https://github.com/whitequark/parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/whitequark/parser/compare/v2.7.1.4...v2.7.1.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 76463e0d6..af637466b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -399,7 +399,7 @@ GEM parallel (1.19.2) parallel_tests (3.3.0) parallel - parser (2.7.1.4) + parser (2.7.1.5) ast (~> 2.4.1) parslet (2.0.0) pastel (0.8.0) From f7183a237d72176778226e62c0b0d3c88635c8d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:10:12 +0900 Subject: [PATCH 023/422] Bump whatwg-url from 8.2.1 to 8.2.2 (#14882) Bumps [whatwg-url](https://github.com/jsdom/whatwg-url) from 8.2.1 to 8.2.2. - [Release notes](https://github.com/jsdom/whatwg-url/releases) - [Commits](https://github.com/jsdom/whatwg-url/compare/v8.2.1...v8.2.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 272646c43..0dbb2d062 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11056,9 +11056,9 @@ whatwg-mimetype@^2.3.0: integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^8.0.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.2.1.tgz#ed73417230784b281fb2a32c3c501738b46167c3" - integrity sha512-ZmVCr6nfBeaMxEHALLEGy0LszYjpJqf6PVNQUQ1qd9Et+q7Jpygd4rGGDXgHjD8e99yLFseD69msHDM4YwPZ4A== + version "8.2.2" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.2.2.tgz#85e7f9795108b53d554cec640b2e8aee2a0d4bfd" + integrity sha512-PcVnO6NiewhkmzV0qn7A+UZ9Xx4maNTI+O+TShmfE4pqjoCMwUMjkvoNhNHPTvgR7QH9Xt3R13iHuWy2sToFxQ== dependencies: lodash.sortby "^4.7.0" tr46 "^2.0.2" From 47fdf5c5052fa9f868796489a0297040b96c17b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:11:43 +0900 Subject: [PATCH 024/422] Bump simplecov-html from 0.12.2 to 0.12.3 (#14883) Bumps [simplecov-html](https://github.com/simplecov-ruby/simplecov-html) from 0.12.2 to 0.12.3. - [Release notes](https://github.com/simplecov-ruby/simplecov-html/releases) - [Changelog](https://github.com/simplecov-ruby/simplecov-html/blob/main/CHANGELOG.md) - [Commits](https://github.com/simplecov-ruby/simplecov-html/compare/v0.12.2...v0.12.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index af637466b..457fe8515 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -587,7 +587,7 @@ GEM simplecov (0.19.0) docile (~> 1.1) simplecov-html (~> 0.11) - simplecov-html (0.12.2) + simplecov-html (0.12.3) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) From 3ea65472cab256a8e89c89b3452b802473025f6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 04:11:55 +0900 Subject: [PATCH 025/422] Bump react-overlays from 0.9.1 to 0.9.2 (#14875) Bumps [react-overlays](https://github.com/react-bootstrap/react-overlays) from 0.9.1 to 0.9.2. - [Release notes](https://github.com/react-bootstrap/react-overlays/releases) - [Changelog](https://github.com/react-bootstrap/react-overlays/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-bootstrap/react-overlays/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0e9d8e8c7..11e420d03 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "react-masonry-infinite": "^1.2.2", "react-motion": "^0.5.2", "react-notification": "^6.8.5", - "react-overlays": "^0.9.1", + "react-overlays": "^0.9.2", "react-redux": "^7.2.1", "react-redux-loading-bar": "^4.0.8", "react-router-dom": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index 0dbb2d062..5917dd353 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8640,10 +8640,10 @@ react-notification@^6.8.5: dependencies: prop-types "^15.6.2" -react-overlays@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.9.1.tgz#d4702bfe5b5e9335b676ff5a940253771fdeed12" - integrity sha512-b0asy/zHtRd0i2+2/uNxe3YVprF3bRT1guyr791DORjCzE/HSBMog+ul83CdtKQ1kZ+pLnxWCu5W3BMysFhHdQ== +react-overlays@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.9.2.tgz#51ab1c62ded5af4d279bd3b943999531bbd648da" + integrity sha512-wOi+WqO0acnUAMCbTTW06/GRkYjHdlvIoyX4bYkLvxKrLgl2kX9WzFVyBdwukl2jvN7I7oX7ZXAz7MNOWYdgCA== dependencies: classnames "^2.2.5" dom-helpers "^3.2.1" From 82951920f7321fefbdf0628cbb70f2f490f7b716 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 28 Sep 2020 21:44:29 +0200 Subject: [PATCH 026/422] =?UTF-8?q?Fix=20bell=20button=20causing=20a=20bri?= =?UTF-8?q?ef=20=E2=80=9CCancel=20follow=20request=E2=80=9D=20on=20locked?= =?UTF-8?q?=20accounts=20(#14896)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/reducers/relationships.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/relationships.js b/app/javascript/mastodon/reducers/relationships.js index 1d050cc63..53949258a 100644 --- a/app/javascript/mastodon/reducers/relationships.js +++ b/app/javascript/mastodon/reducers/relationships.js @@ -45,7 +45,7 @@ const initialState = ImmutableMap(); export default function relationships(state = initialState, action) { switch(action.type) { case ACCOUNT_FOLLOW_REQUEST: - return state.setIn([action.id, action.locked ? 'requested' : 'following'], true); + return state.getIn([action.id, 'following']) ? state : state.setIn([action.id, action.locked ? 'requested' : 'following'], true); case ACCOUNT_FOLLOW_FAIL: return state.setIn([action.id, action.locked ? 'requested' : 'following'], false); case ACCOUNT_UNFOLLOW_REQUEST: From a8367e26c92504d063815b3670adce8330f7cf1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 14:59:31 +0900 Subject: [PATCH 027/422] Bump rubocop from 0.91.0 to 0.92.0 (#14885) Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.91.0 to 0.92.0. - [Release notes](https://github.com/rubocop-hq/rubocop/releases) - [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.91.0...v0.92.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 7b1084d9d..942a105c9 100644 --- a/Gemfile +++ b/Gemfile @@ -140,7 +140,7 @@ group :development do gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.4' gem 'memory_profiler' - gem 'rubocop', '~> 0.91', require: false + gem 'rubocop', '~> 0.92', require: false gem 'rubocop-rails', '~> 2.8', require: false gem 'brakeman', '~> 4.9', require: false gem 'bundler-audit', '~> 0.7', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 457fe8515..b0de30c0b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -534,17 +534,18 @@ GEM rspec-support (3.9.3) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (0.91.0) + rubocop (0.92.0) parallel (~> 1.10) - parser (>= 2.7.1.1) + parser (>= 2.7.1.5) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.7) rexml - rubocop-ast (>= 0.4.0, < 1.0) + rubocop-ast (>= 0.5.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (0.4.2) - parser (>= 2.7.1.4) + rubocop-ast (0.7.0) + parser (>= 2.7.1.5) + strscan (>= 1.0.0) rubocop-rails (2.8.1) activesupport (>= 4.2.0) rack (>= 1.1) @@ -605,6 +606,7 @@ GEM multi_json (~> 1.8) strong_migrations (0.7.1) activerecord (>= 5) + strscan (1.0.3) temple (0.8.2) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) @@ -776,7 +778,7 @@ DEPENDENCIES rspec-rails (~> 4.0) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.4) - rubocop (~> 0.91) + rubocop (~> 0.92) rubocop-rails (~> 2.8) ruby-progressbar (~> 1.10) sanitize (~> 5.2) From 5c2fdae8d3faf1e0931c002194cb580178b0ee68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 15:03:53 +0900 Subject: [PATCH 028/422] Bump webpack-bundle-analyzer from 3.8.0 to 3.9.0 (#14893) Bumps [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) from 3.8.0 to 3.9.0. - [Release notes](https://github.com/webpack-contrib/webpack-bundle-analyzer/releases) - [Changelog](https://github.com/webpack-contrib/webpack-bundle-analyzer/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/webpack-bundle-analyzer/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 11e420d03..828bb783e 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "uuid": "^8.2.0", "webpack": "^4.44.2", "webpack-assets-manifest": "^3.1.1", - "webpack-bundle-analyzer": "^3.8.0", + "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^3.3.12", "webpack-merge": "^4.2.1", "wicg-inert": "^3.0.3" diff --git a/yarn.lock b/yarn.lock index 5917dd353..a3e11add6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10884,10 +10884,10 @@ webpack-assets-manifest@^3.1.1: tapable "^1.0.0" webpack-sources "^1.0.0" -webpack-bundle-analyzer@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" - integrity sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw== +webpack-bundle-analyzer@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" + integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== dependencies: acorn "^7.1.1" acorn-walk "^7.1.1" @@ -10898,7 +10898,7 @@ webpack-bundle-analyzer@^3.8.0: express "^4.16.3" filesize "^3.6.1" gzip-size "^5.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mkdirp "^0.5.1" opener "^1.5.1" ws "^6.0.0" From 6477faef0cc5ab81115fb2032bd9e3eb3df8c991 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 15:11:36 +0900 Subject: [PATCH 029/422] Bump eslint-plugin-react from 7.20.4 to 7.21.2 (#14874) Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.20.4 to 7.21.2. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 828bb783e..b12f0b6ee 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "eslint-plugin-import": "~2.22.0", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.20.4", + "eslint-plugin-react": "~7.21.2", "jest": "^26.4.2", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", diff --git a/yarn.lock b/yarn.lock index a3e11add6..f3a9bccb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4097,10 +4097,10 @@ eslint-plugin-promise@~4.2.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== -eslint-plugin-react@~7.20.4: - version "7.20.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.4.tgz#c14d2631221ec694ddd84557d7152f44b66e4aa0" - integrity sha512-y4DOQ0LrzuDQFEAnYFGjJMRHQQqfTco02qiWI00eGQYikHTzC15S5aRHGWSffnThv8sBpsmFBLky3K5keniAJg== +eslint-plugin-react@~7.21.2: + version "7.21.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.2.tgz#3bd5d2c4c36d5a0428d0d6dda301ac9a84d681b2" + integrity sha512-j3XKvrK3rpBzveKFbgAeGsWb9uz6iUOrR0jixRfjwdFeGSRsXvVTFtHDQYCjsd1/6Z/xvb8Vy3LiI5Reo7fDrg== dependencies: array-includes "^3.1.1" array.prototype.flatmap "^1.2.3" From 0e41710ea99715858867616620c5307dc49002f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2020 15:15:51 +0900 Subject: [PATCH 030/422] Bump browserslist from 4.14.3 to 4.14.5 (#14890) Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.14.3 to 4.14.5. - [Release notes](https://github.com/browserslist/browserslist/releases) - [Changelog](https://github.com/browserslist/browserslist/blob/master/CHANGELOG.md) - [Commits](https://github.com/browserslist/browserslist/compare/4.14.3...4.14.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index f3a9bccb3..5cefd482b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2496,12 +2496,12 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" - integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== + version "4.14.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" + integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== dependencies: - caniuse-lite "^1.0.30001131" - electron-to-chromium "^1.3.570" + caniuse-lite "^1.0.30001135" + electron-to-chromium "^1.3.571" escalade "^3.1.0" node-releases "^1.1.61" @@ -2671,10 +2671,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: - version "1.0.30001133" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001133.tgz#ec564c5495311299eb05245e252d589a84acd95e" - integrity sha512-s3XAUFaC/ntDb1O3lcw9K8MPeOW7KO3z9+GzAoBxfz1B0VdacXPMKgFUtG4KIsgmnbexmi013s9miVu4h+qMHw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: + version "1.0.30001137" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001137.tgz#6f0127b1d3788742561a25af3607a17fc778b803" + integrity sha512-54xKQZTqZrKVHmVz0+UvdZR6kQc7pJDgfhsMYDG19ID1BWoNnDMFm5Q3uSBSU401pBvKYMsHAt9qhEDcxmk8aw== capture-exit@^2.0.0: version "2.0.0" @@ -3781,10 +3781,10 @@ ejs@^2.3.4, ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.570: - version "1.3.573" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.573.tgz#6a21e13ee894eb441677333d5fe9fa3a449689a1" - integrity sha512-oypaNmexr8w0m2GX67fGLQ0Xgsd7uXz7GcwaHZ9eW3ZdQ8uA2+V/wXmLdMTk3gcacbqQGAN7CXWG3fOkfKYftw== +electron-to-chromium@^1.3.571: + version "1.3.574" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.574.tgz#bdd87f62fe70165e5c862a0acf0cee9889e23aa3" + integrity sha512-kF8Bfe1h8X1pPwlw6oRoIXj0DevowviP6fl0wcljm+nZjy/7+Fos4THo1N/7dVGEJlyEqK9C8qNnbheH+Eazfw== elliptic@^6.5.3: version "6.5.3" From f5d08f2417a55501affc0c42108f1c14d47cbb99 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Tue, 29 Sep 2020 22:30:56 +0900 Subject: [PATCH 031/422] Fix unread notification markers (#14897) --- app/javascript/mastodon/actions/notifications.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 552def63b..cd03a1d78 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -234,3 +234,7 @@ export const mountNotifications = () => ({ export const unmountNotifications = () => ({ type: NOTIFICATIONS_UNMOUNT, }); + +export const markNotificationsAsRead = () => ({ + type: NOTIFICATIONS_MARK_AS_READ, +}); From 2ee7e2c5c32e9dfd45342f7ccfa53f4acd65528e Mon Sep 17 00:00:00 2001 From: mayaeh Date: Wed, 30 Sep 2020 21:32:00 +0900 Subject: [PATCH 032/422] Bump puma from 5.0.1 to 5.0.2 (#14904) https://github.com/puma/puma/blob/master/History.md#502--2020-09-28 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b0de30c0b..f3cbed9f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -426,7 +426,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.6) - puma (5.0.1) + puma (5.0.2) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) From 78e45a52850c52ced693420a6142cf847581f563 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 30 Sep 2020 19:31:03 +0200 Subject: [PATCH 033/422] Add option to disable swiping motions across the WebUI (#13885) Fixes #13882 --- app/controllers/settings/preferences_controller.rb | 1 + .../features/getting_started/components/announcements.js | 3 ++- app/javascript/mastodon/features/introduction/index.js | 3 ++- .../mastodon/features/ui/components/columns_area.js | 4 +++- .../mastodon/features/ui/components/media_modal.js | 2 ++ app/javascript/mastodon/initial_state.js | 1 + app/lib/user_settings_decorator.rb | 5 +++++ app/models/user.rb | 1 + app/serializers/initial_state_serializer.rb | 1 + app/views/settings/preferences/appearance/show.html.haml | 1 + config/locales/simple_form.en.yml | 1 + config/settings.yml | 1 + 12 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index be4dc904d..32b5d7948 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -43,6 +43,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_display_media, :setting_expand_spoilers, :setting_reduce_motion, + :setting_disable_swiping, :setting_system_font_ui, :setting_noindex, :setting_theme, diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index 1896994da..8f824f140 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types'; import IconButton from 'mastodon/components/icon_button'; import Icon from 'mastodon/components/icon'; import { defineMessages, injectIntl, FormattedMessage, FormattedDate } from 'react-intl'; -import { autoPlayGif, reduceMotion } from 'mastodon/initial_state'; +import { autoPlayGif, reduceMotion, disableSwiping } from 'mastodon/initial_state'; import elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg'; import { mascot } from 'mastodon/initial_state'; import unicodeMapping from 'mastodon/features/emoji/emoji_unicode_mapping_light'; @@ -436,6 +436,7 @@ class Announcements extends ImmutablePureComponent { removeReaction={this.props.removeReaction} intl={intl} selected={index === idx} + disabled={disableSwiping} /> ))} diff --git a/app/javascript/mastodon/features/introduction/index.js b/app/javascript/mastodon/features/introduction/index.js index 754477bb9..5820750a4 100644 --- a/app/javascript/mastodon/features/introduction/index.js +++ b/app/javascript/mastodon/features/introduction/index.js @@ -9,6 +9,7 @@ import screenHello from '../../../images/screen_hello.svg'; import screenFederation from '../../../images/screen_federation.svg'; import screenInteractions from '../../../images/screen_interactions.svg'; import logoTransparent from '../../../images/logo_transparent.svg'; +import { disableSwiping } from 'mastodon/initial_state'; const FrameWelcome = ({ domain, onNext }) => (
@@ -171,7 +172,7 @@ class Introduction extends React.PureComponent { return (
- + {pages.map((page, i) => (
{page}
))} diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 9b03cf26d..ecc0b8f0b 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -8,6 +8,8 @@ import ReactSwipeableViews from 'react-swipeable-views'; import TabsBar, { links, getIndex, getLink } from './tabs_bar'; import { Link } from 'react-router-dom'; +import { disableSwiping } from 'mastodon/initial_state'; + import BundleContainer from '../containers/bundle_container'; import ColumnLoading from './column_loading'; import DrawerLoading from './drawer_loading'; @@ -185,7 +187,7 @@ class ColumnsArea extends ImmutablePureComponent { const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : ; const content = columnIndex !== -1 ? ( - + {links.map(this.renderView)} ) : ( diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index a02e3bbd7..54ec51fcf 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -10,6 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import ImageLoader from './image_loader'; import Icon from 'mastodon/components/icon'; import GIFV from 'mastodon/components/gifv'; +import { disableSwiping } from 'mastodon/initial_state'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -212,6 +213,7 @@ class MediaModal extends ImmutablePureComponent { containerStyle={containerStyle} onChangeIndex={this.handleSwipe} index={index} + disabled={disableSwiping} > {content} diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 1134c55db..80d43907d 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -25,5 +25,6 @@ export const usePendingItems = getMeta('use_pending_items'); export const showTrends = getMeta('trends'); export const title = getMeta('title'); export const cropImages = getMeta('crop_images'); +export const disableSwiping = getMeta('disable_swiping'); export default initialState; diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index fa8255faa..e37bc6d9f 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -27,6 +27,7 @@ class UserSettingsDecorator user.settings['display_media'] = display_media_preference if change?('setting_display_media') user.settings['expand_spoilers'] = expand_spoilers_preference if change?('setting_expand_spoilers') user.settings['reduce_motion'] = reduce_motion_preference if change?('setting_reduce_motion') + user.settings['disable_swiping'] = disable_swiping_preference if change?('setting_disable_swiping') user.settings['system_font_ui'] = system_font_ui_preference if change?('setting_system_font_ui') user.settings['noindex'] = noindex_preference if change?('setting_noindex') user.settings['theme'] = theme_preference if change?('setting_theme') @@ -88,6 +89,10 @@ class UserSettingsDecorator boolean_cast_setting 'setting_reduce_motion' end + def disable_swiping_preference + boolean_cast_setting 'setting_disable_swiping' + end + def noindex_preference boolean_cast_setting 'setting_noindex' end diff --git a/app/models/user.rb b/app/models/user.rb index 6b21d6ed6..2c460e1fd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -115,6 +115,7 @@ class User < ApplicationRecord :reduce_motion, :system_font_ui, :noindex, :theme, :display_media, :hide_network, :expand_spoilers, :default_language, :aggregate_reblogs, :show_application, :advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images, + :disable_swiping, to: :settings, prefix: :setting, allow_nil: false attr_reader :invite_code, :sign_in_token_attempt diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 2939004ef..70263e0c5 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -33,6 +33,7 @@ class InitialStateSerializer < ActiveModel::Serializer store[:display_media] = object.current_account.user.setting_display_media store[:expand_spoilers] = object.current_account.user.setting_expand_spoilers store[:reduce_motion] = object.current_account.user.setting_reduce_motion + store[:disable_swiping] = object.current_account.user.setting_disable_swiping store[:advanced_layout] = object.current_account.user.setting_advanced_layout store[:use_blurhash] = object.current_account.user.setting_use_blurhash store[:use_pending_items] = object.current_account.user.setting_use_pending_items diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 10fff406e..14941d5fd 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -30,6 +30,7 @@ .fields-group = f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label, recommended: true = f.input :setting_reduce_motion, as: :boolean, wrapper: :with_label + = f.input :setting_disable_swiping, as: :boolean, wrapper: :with_label = f.input :setting_system_font_ui, as: :boolean, wrapper: :with_label %h4= t 'appearance.toot_layout' diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 910e77ec2..9b0af6d24 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -136,6 +136,7 @@ en: setting_default_privacy: Posting privacy setting_default_sensitive: Always mark media as sensitive setting_delete_modal: Show confirmation dialog before deleting a toot + setting_disable_swiping: Disable swiping motions setting_display_media: Media display setting_display_media_default: Default setting_display_media_hide_all: Hide all diff --git a/config/settings.yml b/config/settings.yml index 002473643..217745f28 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -26,6 +26,7 @@ defaults: &defaults expand_spoilers: false preview_sensitive_media: false reduce_motion: false + disable_swiping: false show_application: true system_font_ui: false noindex: false From 65136600e36ded708dc4ea5a1ef04031db51b021 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 30 Sep 2020 19:31:17 +0200 Subject: [PATCH 034/422] Fix logging out on mobile (#14901) Fixes #14900 --- app/javascript/mastodon/features/getting_started/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js index 02e1bbba5..1b9994612 100644 --- a/app/javascript/mastodon/features/getting_started/index.js +++ b/app/javascript/mastodon/features/getting_started/index.js @@ -10,7 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { me, profile_directory, showTrends } from '../../initial_state'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { List as ImmutableList } from 'immutable'; -import NavigationBar from '../compose/components/navigation_bar'; +import NavigationContainer from '../compose/containers/navigation_container'; import Icon from 'mastodon/components/icon'; import LinkFooter from 'mastodon/features/ui/components/link_footer'; import TrendsContainer from './containers/trends_container'; @@ -168,7 +168,7 @@ class GettingStarted extends ImmutablePureComponent {
- {!multiColumn && } + {!multiColumn && } {navItems}
From bec8b12bb52a57b54b66899b2650a5611d9bd561 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 1 Oct 2020 11:17:46 +0900 Subject: [PATCH 035/422] Fix mark as read in notifications to be saved immediately (#14907) * Fix mark as read in notifications to be saved immediately * fix code style --- app/javascript/mastodon/actions/markers.js | 8 ++++++-- app/javascript/mastodon/features/notifications/index.js | 2 ++ app/javascript/mastodon/features/ui/index.js | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/actions/markers.js b/app/javascript/mastodon/actions/markers.js index 41a95503e..c4b61effd 100644 --- a/app/javascript/mastodon/actions/markers.js +++ b/app/javascript/mastodon/actions/markers.js @@ -100,8 +100,12 @@ export function submitMarkersSuccess({ home, notifications }) { }; }; -export function submitMarkers() { - return (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState); +export function submitMarkers(params = {}) { + const result = (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState); + if (params.immediate === true) { + debouncedSubmitMarkers.flush(); + } + return result; }; export const fetchMarkers = () => (dispatch, getState) => { diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 41a45b2b6..68afe593d 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -12,6 +12,7 @@ import { unmountNotifications, markNotificationsAsRead, } from '../../actions/notifications'; +import { submitMarkers } from '../../actions/markers'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import NotificationContainer from './containers/notification_container'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -162,6 +163,7 @@ class Notifications extends React.PureComponent { handleMarkAsRead = () => { this.props.dispatch(markNotificationsAsRead()); + this.props.dispatch(submitMarkers({ immediate: true })); }; render () { diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index d05133507..b53e319d2 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -266,7 +266,7 @@ class UI extends React.PureComponent { handleWindowFocus = () => { this.props.dispatch(focusApp()); - this.props.dispatch(submitMarkers()); + this.props.dispatch(submitMarkers({ immediate: true })); } handleWindowBlur = () => { From df8c6572d45e50b30514e5f814ad6246c16e7b55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2020 15:33:24 +0900 Subject: [PATCH 036/422] Bump rubocop-ast from 0.7.0 to 0.7.1 (#14899) Bumps [rubocop-ast](https://github.com/rubocop-hq/rubocop-ast) from 0.7.0 to 0.7.1. - [Release notes](https://github.com/rubocop-hq/rubocop-ast/releases) - [Changelog](https://github.com/rubocop-hq/rubocop-ast/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop-ast/compare/v0.7.0...v0.7.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f3cbed9f2..25180682c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -543,9 +543,8 @@ GEM rubocop-ast (>= 0.5.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (0.7.0) + rubocop-ast (0.7.1) parser (>= 2.7.1.5) - strscan (>= 1.0.0) rubocop-rails (2.8.1) activesupport (>= 4.2.0) rack (>= 1.1) @@ -606,7 +605,6 @@ GEM multi_json (~> 1.8) strong_migrations (0.7.1) activerecord (>= 5) - strscan (1.0.3) temple (0.8.2) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) From d9a7661f83e8f35715e8d6de2bccdb9e7be9cf59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2020 15:34:25 +0900 Subject: [PATCH 037/422] Bump @testing-library/react from 10.4.7 to 11.0.4 (#14871) Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 10.4.7 to 11.0.4. - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/master/CHANGELOG.md) - [Commits](https://github.com/testing-library/react-testing-library/compare/v10.4.7...v11.0.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 42 +++++++++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index b12f0b6ee..fa8589cc6 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ }, "devDependencies": { "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^10.4.7", + "@testing-library/react": "^11.0.4", "babel-eslint": "^10.1.0", "babel-jest": "^26.3.0", "eslint": "^7.6.0", diff --git a/yarn.lock b/yarn.lock index 5cefd482b..a0ea57299 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1340,15 +1340,18 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.17.1": - version "7.18.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.18.1.tgz#c49530410fb184522b3b59c4f9cd6397dc5b462d" - integrity sha512-tGq4KAFjaI7j375sMM1RRVleWA0viJWs/w69B+nyDkqYLNkhdTHdV6mGkspJlkn3PUfyBDi3rERDv4PA/LrpVA== +"@testing-library/dom@^7.24.2": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.3.tgz#dae3071463cf28dc7755b43d9cf2202e34cbb85d" + integrity sha512-6eW9fUhEbR423FZvoHRwbWm9RUUByLWGayYFNVvqTnQLYvsNpBS4uEuKH9aqr3trhxFwGVneJUonehL3B1sHJw== dependencies: + "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.10.3" + "@types/aria-query" "^4.2.0" aria-query "^4.2.2" - dom-accessibility-api "^0.4.5" - pretty-format "^25.5.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.1" + pretty-format "^26.4.2" "@testing-library/jest-dom@^5.11.4": version "5.11.4" @@ -1364,13 +1367,18 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^10.4.7": - version "10.4.7" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.7.tgz#fc14847fb70a5e93576b8f7f0d1490ead02a9061" - integrity sha512-hUYbum3X2f1ZKusKfPaooKNYqE/GtPiQ+D2HJaJ4pkxeNJQFVUEvAvEh9+3QuLdBeTWkDMNY5NSijc5+pGdM4Q== +"@testing-library/react@^11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.0.4.tgz#c84082bfe1593d8fcd475d46baee024452f31dee" + integrity sha512-U0fZO2zxm7M0CB5h1+lh31lbAwMSmDMEMGpMT3BUPJwIjDEKYWOV4dx7lb3x2Ue0Pyt77gmz/VropuJnSz/Iew== dependencies: - "@babel/runtime" "^7.10.3" - "@testing-library/dom" "^7.17.1" + "@babel/runtime" "^7.11.2" + "@testing-library/dom" "^7.24.2" + +"@types/aria-query@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": version "7.1.9" @@ -2716,7 +2724,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -3678,10 +3686,10 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.4.7.tgz#31d01c113af49f323409b3ed09e56967aba485a8" - integrity sha512-5+GzhTpCQYHz4NjL8loYTDVBnXIjNLBadWQBKxXk+osFEplLt3EsSYBu2YZcdZ8QqrvCHgW6TSMGMbmgfhrn2g== +dom-accessibility-api@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz#ef3cdb5d3f0d599d8f9c8b18df2fb63c9793739d" + integrity sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA== dom-helpers@^3.2.1, dom-helpers@^3.4.0: version "3.4.0" From 16b776c68f8ce40c9e31b00d0ca8e5844b237ed4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2020 15:40:30 +0900 Subject: [PATCH 038/422] Bump compression-webpack-plugin from 5.0.1 to 6.0.2 (#14892) Bumps [compression-webpack-plugin](https://github.com/webpack-contrib/compression-webpack-plugin) from 5.0.1 to 6.0.2. - [Release notes](https://github.com/webpack-contrib/compression-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/compression-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v5.0.1...v6.0.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 19 ++++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index fa8589cc6..9827400cb 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-runtime": "^6.26.0", "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^5.0.1", + "compression-webpack-plugin": "^6.0.2", "cross-env": "^7.0.2", "css-loader": "^4.3.0", "cssnano": "^4.1.10", diff --git a/yarn.lock b/yarn.lock index a0ea57299..203d9bc4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2976,15 +2976,15 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-5.0.1.tgz#316c1a4e4ccc94510a978c967fc143581d1e3643" - integrity sha512-Wcb99O4UkdDZiM+blEw6h+cUfJYCn2kgK0l3fjLOm72Stso9DVMieQpBD4PVpyI7DLL6+zNh0iJV3p4HDwTinQ== +compression-webpack-plugin@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.2.tgz#13482bfa81e0472e5d6af1165b6ee9f29f98178b" + integrity sha512-WUv7fTy2uCZKJ4iFMKJG42GDepCEocS5eqsEi8uIJZy97k/WvzxGz9dwE4+pIAkcrK4B7k+teKo71IrLu+tbqw== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" - schema-utils "^2.7.0" - serialize-javascript "^4.0.0" + schema-utils "^2.7.1" + serialize-javascript "^5.0.1" webpack-sources "^1.4.3" compression@^1.7.4: @@ -9466,13 +9466,6 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" From a549415868fe23e0afaf258c17afafac117d0163 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 4 Oct 2020 15:02:36 +0200 Subject: [PATCH 039/422] Fix regressions in icon buttons in web UI (#14915) --- app/javascript/mastodon/components/icon_button.js | 1 + app/javascript/styles/mastodon/components.scss | 14 ++++++++++++-- app/views/statuses/_simple_status.html.haml | 13 ++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index 7f83dc1b9..7ec39198a 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -116,6 +116,7 @@ export default class IconButton extends React.PureComponent { activate, deactivate, overlayed: overlay, + 'icon-button--with-counter': typeof counter !== 'undefined', }); if (typeof counter !== 'undefined') { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a20265bb9..ec49ae120 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -163,8 +163,7 @@ } .icon-button { - display: inline-flex; - align-items: center; + display: inline-block; padding: 0; color: $action-button-color; border: 0; @@ -173,6 +172,7 @@ cursor: pointer; transition: all 100ms ease-in; transition-property: background-color, color; + text-decoration: none; &:hover, &:active, @@ -247,6 +247,12 @@ } } + &--with-counter { + display: inline-flex; + align-items: center; + width: auto !important; + } + &__counter { display: inline-block; width: 14px; @@ -1152,6 +1158,10 @@ .status__action-bar-button { margin-right: 18px; + + &.icon-button--with-counter { + margin-right: 14px; + } } .status__action-bar-dropdown { diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index 0c0b57112..336c1f2c8 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -52,13 +52,12 @@ = t 'statuses.show_thread' .status__action-bar - .status__action-bar__counter - = link_to remote_interaction_path(status, type: :reply), class: 'status__action-bar-button icon-button modal-button' do - - if status.in_reply_to_id.nil? - = fa_icon 'reply fw' - - else - = fa_icon 'reply-all fw' - .status__action-bar__counter__label= obscured_counter status.replies_count + = link_to remote_interaction_path(status, type: :reply), class: 'status__action-bar-button icon-button icon-button--with-counter modal-button' do + - if status.in_reply_to_id.nil? + = fa_icon 'reply fw' + - else + = fa_icon 'reply-all fw' + %span.icon-button__counter= obscured_counter status.replies_count = link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button' do - if status.distributable? = fa_icon 'retweet fw' From 5a9ad221bf534cf52e2a81fda01b35088a3d8624 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Mon, 5 Oct 2020 09:57:38 +0900 Subject: [PATCH 040/422] Update translation files (#14920) --- .../mastodon/locales/defaultMessages.json | 115 +++++++++++++++++- app/javascript/mastodon/locales/en.json | 13 ++ 2 files changed, 124 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 9d6988cc7..c44f14dde 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -167,10 +167,18 @@ }, { "descriptors": [ + { + "defaultMessage": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "id": "error.unexpected_crash.explanation_addons" + }, { "defaultMessage": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "id": "error.unexpected_crash.explanation" }, + { + "defaultMessage": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "id": "error.unexpected_crash.next_steps_addons" + }, { "defaultMessage": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "id": "error.unexpected_crash.next_steps" @@ -265,6 +273,15 @@ ], "path": "app/javascript/mastodon/components/missing_indicator.json" }, + { + "descriptors": [ + { + "defaultMessage": "Put it back", + "id": "picture_in_picture.restore" + } + ], + "path": "app/javascript/mastodon/components/picture_in_picture_placeholder.json" + }, { "descriptors": [ { @@ -633,6 +650,15 @@ ], "path": "app/javascript/mastodon/containers/status_container.json" }, + { + "descriptors": [ + { + "defaultMessage": "Profile unavailable", + "id": "empty_column.account_unavailable" + } + ], + "path": "app/javascript/mastodon/features/account_gallery/index.json" + }, { "descriptors": [ { @@ -796,6 +822,14 @@ "defaultMessage": "Show boosts from @{name}", "id": "account.show_reblogs" }, + { + "defaultMessage": "Notify me when @{name} posts", + "id": "account.enable_notifications" + }, + { + "defaultMessage": "Stop notifying me when @{name} posts", + "id": "account.disable_notifications" + }, { "defaultMessage": "Pinned toots", "id": "navigation_bar.pins" @@ -2125,6 +2159,18 @@ "defaultMessage": "Delete", "id": "confirmations.delete_list.confirm" }, + { + "defaultMessage": "Any followed user", + "id": "lists.replies_policy.all_replies" + }, + { + "defaultMessage": "No one", + "id": "lists.replies_policy.no_replies" + }, + { + "defaultMessage": "Members of the list", + "id": "lists.replies_policy.list_replies" + }, { "defaultMessage": "Edit list", "id": "lists.edit" @@ -2133,6 +2179,10 @@ "defaultMessage": "Delete list", "id": "lists.delete" }, + { + "defaultMessage": "Show replies to:", + "id": "lists.replies_policy.title" + }, { "defaultMessage": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "id": "empty_column.list" @@ -2271,6 +2321,10 @@ "defaultMessage": "Follows", "id": "notifications.filter.follows" }, + { + "defaultMessage": "Updates from people you follow", + "id": "notifications.filter.statuses" + }, { "defaultMessage": "All", "id": "notifications.filter.all" @@ -2313,6 +2367,10 @@ "defaultMessage": "{name} boosted your status", "id": "notification.reblog" }, + { + "defaultMessage": "{name} just posted", + "id": "notification.status" + }, { "defaultMessage": "{name} has requested to follow you", "id": "notification.follow_request" @@ -2339,6 +2397,10 @@ "defaultMessage": "Notifications", "id": "column.notifications" }, + { + "defaultMessage": "Mark every notification as read", + "id": "notifications.mark_as_read" + }, { "defaultMessage": "You don't have any notifications yet. Interact with others to start the conversation.", "id": "empty_column.notifications" @@ -2346,6 +2408,47 @@ ], "path": "app/javascript/mastodon/features/notifications/index.json" }, + { + "descriptors": [ + { + "defaultMessage": "Reply", + "id": "status.reply" + }, + { + "defaultMessage": "Reply to thread", + "id": "status.replyAll" + }, + { + "defaultMessage": "Boost", + "id": "status.reblog" + }, + { + "defaultMessage": "Boost with original visibility", + "id": "status.reblog_private" + }, + { + "defaultMessage": "Unboost", + "id": "status.cancel_reblog_private" + }, + { + "defaultMessage": "This post cannot be boosted", + "id": "status.cannot_reblog" + }, + { + "defaultMessage": "Favourite", + "id": "status.favourite" + }, + { + "defaultMessage": "Reply", + "id": "confirmations.reply.confirm" + }, + { + "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "id": "confirmations.reply.message" + } + ], + "path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json" + }, { "descriptors": [ { @@ -2785,6 +2888,14 @@ "defaultMessage": "Describe for the visually impaired", "id": "upload_form.description" }, + { + "defaultMessage": "Analyzing picture…", + "id": "upload_modal.analyzing_picture" + }, + { + "defaultMessage": "Preparing OCR…", + "id": "upload_modal.preparing_ocr" + }, { "defaultMessage": "Edit media", "id": "upload_modal.edit_media" @@ -2797,10 +2908,6 @@ "defaultMessage": "Change thumbnail", "id": "upload_form.thumbnail" }, - { - "defaultMessage": "Analyzing picture…", - "id": "upload_modal.analyzing_picture" - }, { "defaultMessage": "Detect text from picture", "id": "upload_modal.detect_text" diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 8fb7d0449..9c8b3d11b 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -260,6 +264,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -298,6 +306,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your toot", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -319,7 +328,10 @@ "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +458,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading...", "video.close": "Close video", From 63770d3aac1611155213e4c903424849cc254519 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 5 Oct 2020 22:04:06 +0200 Subject: [PATCH 041/422] Ignore alt-key hotkeys in text fields (#14942) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #14862 This used to be the case until #13987, which introduced a hotkey to toggle the Content Warning field. Unfortunately, MacOS relies on the “alt” key for many things, including composing text (see #14862), therefore, even if that makes the CW toggle hotkey significantly less useful, it makes sense to not interfere with composing toots. --- app/javascript/mastodon/features/ui/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index b53e319d2..91c86b505 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -379,7 +379,7 @@ class UI extends React.PureComponent { componentDidMount () { this.hotkeys.__mousetrap__.stopCallback = (e, element) => { - return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName) && !e.altKey; + return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); }; } From 30941dd6ea81ca376f251cf3be9c927fbc291855 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 16:56:13 +0900 Subject: [PATCH 042/422] Bump aws-sdk-s3 from 1.81.1 to 1.83.0 (#14929) Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.81.1 to 1.83.0. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 942a105c9..ed9d3673e 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,7 @@ gem 'makara', '~> 0.4' gem 'pghero', '~> 2.7' gem 'dotenv-rails', '~> 2.7' -gem 'aws-sdk-s3', '~> 1.81', require: false +gem 'aws-sdk-s3', '~> 1.83', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 25180682c..2165b3603 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,17 +79,17 @@ GEM cocaine (~> 0.5.3) awrence (1.1.1) aws-eventstream (1.1.0) - aws-partitions (1.376.0) - aws-sdk-core (3.108.0) + aws-partitions (1.380.0) + aws-sdk-core (3.109.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.38.0) - aws-sdk-core (~> 3, >= 3.99.0) + aws-sdk-kms (1.39.0) + aws-sdk-core (~> 3, >= 3.109.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.81.1) - aws-sdk-core (~> 3, >= 3.104.3) + aws-sdk-s3 (1.83.0) + aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) aws-sigv4 (1.2.2) @@ -678,7 +678,7 @@ DEPENDENCIES active_record_query_trace (~> 1.7) addressable (~> 2.7) annotate (~> 3.1) - aws-sdk-s3 (~> 1.81) + aws-sdk-s3 (~> 1.83) better_errors (~> 2.8) binding_of_caller (~> 0.7) blurhash (~> 0.1) From ee82a853ed7869ebd0153dc0fdcf673aa50e9e1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:00:00 +0900 Subject: [PATCH 043/422] Bump regexpu-core from 4.7.0 to 4.7.1 (#14940) Bumps [regexpu-core](https://github.com/mathiasbynens/regexpu-core) from 4.7.0 to 4.7.1. - [Release notes](https://github.com/mathiasbynens/regexpu-core/releases) - [Commits](https://github.com/mathiasbynens/regexpu-core/compare/v4.7.0...v4.7.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 203d9bc4d..dc99668d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9011,9 +9011,9 @@ regexpp@^3.1.0: integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.2.0" From 80975c42fca8a1061b5d759a8aaf6f712a41b45e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:00:19 +0900 Subject: [PATCH 044/422] Bump regexp_parser from 1.8.0 to 1.8.1 (#14928) Bumps [regexp_parser](https://github.com/ammar/regexp_parser) from 1.8.0 to 1.8.1. - [Release notes](https://github.com/ammar/regexp_parser/releases) - [Changelog](https://github.com/ammar/regexp_parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/ammar/regexp_parser/compare/v1.8.0...v1.8.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2165b3603..5ae0c71dd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -499,7 +499,7 @@ GEM redis-store (>= 1.2, < 2) redis-store (1.9.0) redis (>= 4, < 5) - regexp_parser (1.8.0) + regexp_parser (1.8.1) request_store (1.5.0) rack (>= 1.4) responders (3.0.1) From 7cb0cc2edbb06aef50e3e6b7b44ccdbf6d895d13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:00:43 +0900 Subject: [PATCH 045/422] Bump http-link-header from 1.0.2 to 1.0.3 (#14926) Bumps [http-link-header](https://github.com/jhermsmeier/node-http-link-header) from 1.0.2 to 1.0.3. - [Release notes](https://github.com/jhermsmeier/node-http-link-header/releases) - [Changelog](https://github.com/jhermsmeier/node-http-link-header/blob/master/CHANGELOG.md) - [Commits](https://github.com/jhermsmeier/node-http-link-header/compare/v1.0.2...v1.0.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9827400cb..cde91eb11 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "font-awesome": "^4.7.0", "glob": "^7.1.6", "history": "^4.10.1", - "http-link-header": "^1.0.2", + "http-link-header": "^1.0.3", "immutable": "^3.8.2", "imports-loader": "^1.1.0", "intersection-observer": "^0.11.0", diff --git a/yarn.lock b/yarn.lock index dc99668d2..35f343244 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5264,10 +5264,10 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-link-header@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.2.tgz#bea50f02e1c7996021f1013b428c63f77e0f4e11" - integrity sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg== +http-link-header@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.3.tgz#abbc2cdc5e06dd7e196a4983adac08a2d085ec90" + integrity sha512-nARK1wSKoBBrtcoESlHBx36c1Ln/gnbNQi1eB6MeTUefJIT3NvUOsV15bClga0k38f0q/kN5xxrGSDS3EFnm9w== "http-parser-js@>=0.4.0 <0.4.11": version "0.4.10" From 78d1e577a19ff08ccd409a8ac372bf37823551f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:04:55 +0900 Subject: [PATCH 046/422] Bump @github/webauthn-json from 0.5.4 to 0.5.5 (#14925) Bumps [@github/webauthn-json](https://github.com/github/webauthn-json) from 0.5.4 to 0.5.5. - [Release notes](https://github.com/github/webauthn-json/releases) - [Commits](https://github.com/github/webauthn-json/compare/v0.5.4...v0.5.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index cde91eb11..18e4744ae 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@babel/runtime": "^7.11.2", "@clusterws/cws": "^3.0.0", "@gamestdio/websocket": "^0.3.2", - "@github/webauthn-json": "^0.5.4", + "@github/webauthn-json": "^0.5.5", "@rails/ujs": "^6.0.3", "array-includes": "^3.1.1", "arrow-key-navigation": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index 35f343244..f6d3a6b93 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1112,10 +1112,10 @@ resolved "https://registry.yarnpkg.com/@gamestdio/websocket/-/websocket-0.3.2.tgz#321ba0976ee30fd14e51dbf8faa85ce7b325f76a" integrity sha512-J3n5SKim+ZoLbe44hRGI/VYAwSMCeIJuBy+FfP6EZaujEpNchPRFcIsVQLWAwpU1bP2Ji63rC+rEUOd1vjUB6Q== -"@github/webauthn-json@^0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@github/webauthn-json/-/webauthn-json-0.5.4.tgz#fe4f47647c2b29e42e33f6f30484fec7e5adfeb1" - integrity sha512-lZi5cSZi2F08a2kmjxr/FU13ILenpxkZJUWo1p3hHAmMHLLr5GAVlkCJmvWeIsIiAp65AHh3dQIZSMPIylcClw== +"@github/webauthn-json@^0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@github/webauthn-json/-/webauthn-json-0.5.5.tgz#af05d99eb0edb0808cc46f98290d212c3d531936" + integrity sha512-ADYCZBhmYcdXk4IJBXnlLTrPLljUQ9WW6XzTpcT2AxOB49g55kdcbR0n/dr3qAdNJNJtNzMi5Pkb838AoXcVAQ== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" From a30c997586e3ebacbbf7be1d4e8830dce25d0b77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:06:23 +0900 Subject: [PATCH 047/422] Bump hamlit from 2.11.1 to 2.13.0 (#14924) Bumps [hamlit](https://github.com/k0kubun/hamlit) from 2.11.1 to 2.13.0. - [Release notes](https://github.com/k0kubun/hamlit/releases) - [Changelog](https://github.com/k0kubun/hamlit/blob/master/CHANGELOG.md) - [Commits](https://github.com/k0kubun/hamlit/compare/v2.11.1...v2.13.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5ae0c71dd..812f75fbe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -245,7 +245,7 @@ GEM http (~> 4.0) nokogiri (~> 1.8) oj (~> 3.0) - hamlit (2.11.1) + hamlit (2.13.0) temple (>= 0.8.2) thor tilt From 2e9dc7eb98455d26cba0e4f555db6e111c427b8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:07:50 +0900 Subject: [PATCH 048/422] Bump brakeman from 4.9.1 to 4.10.0 (#14933) Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 4.9.1 to 4.10.0. - [Release notes](https://github.com/presidentbeef/brakeman/releases) - [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md) - [Commits](https://github.com/presidentbeef/brakeman/compare/v4.9.1...v4.10.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index ed9d3673e..3a92b4627 100644 --- a/Gemfile +++ b/Gemfile @@ -142,7 +142,7 @@ group :development do gem 'memory_profiler' gem 'rubocop', '~> 0.92', require: false gem 'rubocop-rails', '~> 2.8', require: false - gem 'brakeman', '~> 4.9', require: false + gem 'brakeman', '~> 4.10', require: false gem 'bundler-audit', '~> 0.7', require: false gem 'capistrano', '~> 3.14' diff --git a/Gemfile.lock b/Gemfile.lock index 812f75fbe..d22e05d1b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -106,7 +106,7 @@ GEM ffi (~> 1.10.0) bootsnap (1.4.8) msgpack (~> 1.0) - brakeman (4.9.1) + brakeman (4.10.0) browser (4.2.0) builder (3.2.4) bullet (6.1.0) @@ -683,7 +683,7 @@ DEPENDENCIES binding_of_caller (~> 0.7) blurhash (~> 0.1) bootsnap (~> 1.4) - brakeman (~> 4.9) + brakeman (~> 4.10) browser bullet (~> 6.1) bundler-audit (~> 0.7) From d87a172972c73eaee0e0b5379aee24bedb31de2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:11:59 +0900 Subject: [PATCH 049/422] Bump rspec-core from 3.9.2 to 3.9.3 (#14934) Bumps [rspec-core](https://github.com/rspec/rspec-core) from 3.9.2 to 3.9.3. - [Release notes](https://github.com/rspec/rspec-core/releases) - [Changelog](https://github.com/rspec/rspec-core/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-core/compare/v3.9.2...v3.9.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d22e05d1b..ceea62710 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -512,7 +512,7 @@ GEM chunky_png (~> 1.0) rqrcode_core (~> 0.1) rqrcode_core (0.1.2) - rspec-core (3.9.2) + rspec-core (3.9.3) rspec-support (~> 3.9.3) rspec-expectations (3.9.2) diff-lcs (>= 1.2.0, < 2.0) From 3f443d00185ffd4fca6e0faf56d0cee6ec766603 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:13:26 +0900 Subject: [PATCH 050/422] Bump uuid from 8.3.0 to 8.3.1 (#14935) Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.0 to 8.3.1. - [Release notes](https://github.com/uuidjs/uuid/releases) - [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md) - [Commits](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 18e4744ae..b6b1638d8 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "tesseract.js": "^2.1.1", "throng": "^4.0.0", "tiny-queue": "^0.2.1", - "uuid": "^8.2.0", + "uuid": "^8.3.1", "webpack": "^4.44.2", "webpack-assets-manifest": "^3.1.1", "webpack-bundle-analyzer": "^3.9.0", diff --git a/yarn.lock b/yarn.lock index f6d3a6b93..cc48d46f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10741,10 +10741,10 @@ uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0, uuid@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.0, uuid@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: version "2.1.1" From 088638d593df7f08c697c9656dca7422f8ff7207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:14:05 +0900 Subject: [PATCH 051/422] Bump object-is from 1.1.2 to 1.1.3 (#14939) Bumps [object-is](https://github.com/es-shims/object-is) from 1.1.2 to 1.1.3. - [Release notes](https://github.com/es-shims/object-is/releases) - [Changelog](https://github.com/es-shims/object-is/blob/main/CHANGELOG.md) - [Commits](https://github.com/es-shims/object-is/compare/v1.1.2...v1.1.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index cc48d46f6..31709280b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3896,37 +3896,37 @@ error-stack-parser@^2.0.6: stackframe "^1.1.1" es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" object-keys "^1.1.1" - object.assign "^4.1.0" + object.assign "^4.1.1" string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-abstract@^1.18.0-next.0: - version "1.18.0-next.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" - integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.2.0" + is-callable "^1.2.2" is-negative-zero "^2.0.0" is-regex "^1.1.1" object-inspect "^1.8.0" object-keys "^1.1.1" - object.assign "^4.1.0" + object.assign "^4.1.1" string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" @@ -5622,7 +5622,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-callable@^1.1.4, is-callable@^1.2.0: +is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== @@ -5844,7 +5844,7 @@ is-regex@^1.0.4: dependencies: has-symbols "^1.0.1" -is-regex@^1.1.0, is-regex@^1.1.1: +is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -7335,18 +7335,18 @@ object-fit-images@^3.2.3: resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52" integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg== -object-inspect@^1.7.0, object-inspect@^1.8.0: +object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -7360,7 +7360,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: +object.assign@^4.1.0, object.assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== From 648fc02922680c9388c40d64e949f74c7c594d30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:15:11 +0900 Subject: [PATCH 052/422] Bump eslint-plugin-import from 2.22.0 to 2.22.1 (#14936) Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.22.0 to 2.22.1. - [Release notes](https://github.com/benmosher/eslint-plugin-import/releases) - [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md) - [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.22.0...v2.22.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b6b1638d8..697fbae1c 100644 --- a/package.json +++ b/package.json @@ -175,7 +175,7 @@ "babel-eslint": "^10.1.0", "babel-jest": "^26.3.0", "eslint": "^7.6.0", - "eslint-plugin-import": "~2.22.0", + "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.2", diff --git a/yarn.lock b/yarn.lock index 31709280b..67528408f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4048,7 +4048,7 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-import-resolver-node@^0.3.3: +eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== @@ -4064,17 +4064,17 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-import@~2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== +eslint-plugin-import@~2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" + eslint-import-resolver-node "^0.3.4" eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" From e93e6cf5d326afbf50d4f393ed63a332e9fa0791 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:15:26 +0900 Subject: [PATCH 053/422] Bump caniuse-lite from 1.0.30001137 to 1.0.30001143 (#14938) Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001137 to 1.0.30001143. - [Release notes](https://github.com/ben-eb/caniuse-lite/releases) - [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md) - [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001137...v1.0.30001143) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 67528408f..13284f6b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2680,9 +2680,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: - version "1.0.30001137" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001137.tgz#6f0127b1d3788742561a25af3607a17fc778b803" - integrity sha512-54xKQZTqZrKVHmVz0+UvdZR6kQc7pJDgfhsMYDG19ID1BWoNnDMFm5Q3uSBSU401pBvKYMsHAt9qhEDcxmk8aw== + version "1.0.30001143" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001143.tgz#560f2cfb9f313d1d7e52eb8dac0e4e36c8821c0d" + integrity sha512-p/PO5YbwmCpBJPxjOiKBvAlUPgF8dExhfEpnsH+ys4N/791WHrYrGg0cyHiAURl5hSbx5vIcjKmQAP6sHDYH3w== capture-exit@^2.0.0: version "2.0.0" From 546e4899ddb54238e234f17ed8c6f1de0db42c48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:17:27 +0900 Subject: [PATCH 054/422] Bump simple_form from 5.0.2 to 5.0.3 (#14923) Bumps [simple_form](https://github.com/plataformatec/simple_form) from 5.0.2 to 5.0.3. - [Release notes](https://github.com/plataformatec/simple_form/releases) - [Changelog](https://github.com/heartcombo/simple_form/blob/master/CHANGELOG.md) - [Commits](https://github.com/plataformatec/simple_form/compare/v5.0.2...v5.0.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ceea62710..dedf235a2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -581,7 +581,7 @@ GEM thor (>= 0.20, < 2.0) simple-navigation (4.1.0) activesupport (>= 2.3.2) - simple_form (5.0.2) + simple_form (5.0.3) actionpack (>= 5.0) activemodel (>= 5.0) simplecov (0.19.0) From 3d740f7c32eac8b5d4a9967e4867b805fe2da8fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:17:36 +0900 Subject: [PATCH 055/422] Bump decimal.js from 10.2.0 to 10.2.1 (#14921) Bumps [decimal.js](https://github.com/MikeMcl/decimal.js) from 10.2.0 to 10.2.1. - [Release notes](https://github.com/MikeMcl/decimal.js/releases) - [Changelog](https://github.com/MikeMcl/decimal.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/MikeMcl/decimal.js/compare/v10.2.0...v10.2.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13284f6b3..12e7e9d36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3486,9 +3486,9 @@ decamelize@^1.2.0: integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" - integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== decode-uri-component@^0.2.0: version "0.2.0" From 66aa520acdc2bdf57254e722f3d6736a4bc8e24b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:40:09 +0900 Subject: [PATCH 056/422] Bump better_errors from 2.8.1 to 2.8.3 (#14927) Bumps [better_errors](https://github.com/BetterErrors/better_errors) from 2.8.1 to 2.8.3. - [Release notes](https://github.com/BetterErrors/better_errors/releases) - [Commits](https://github.com/BetterErrors/better_errors/compare/v2.8.1...v2.8.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index dedf235a2..59c7f5879 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -95,7 +95,7 @@ GEM aws-sigv4 (1.2.2) aws-eventstream (~> 1, >= 1.0.2) bcrypt (3.1.16) - better_errors (2.8.1) + better_errors (2.8.3) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) From 8e6abbc4b9440e1b9b5ef6a0363e09e314473112 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2020 17:49:56 +0900 Subject: [PATCH 057/422] Bump aws-sdk-core from 3.109.0 to 3.109.1 (#14943) Bumps [aws-sdk-core](https://github.com/aws/aws-sdk-ruby) from 3.109.0 to 3.109.1. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-core/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 59c7f5879..ae304e61e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -80,7 +80,7 @@ GEM awrence (1.1.1) aws-eventstream (1.1.0) aws-partitions (1.380.0) - aws-sdk-core (3.109.0) + aws-sdk-core (3.109.1) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) From da10c5c707c4b886ef151b55080562356b1f417e Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Wed, 7 Oct 2020 02:16:30 +0900 Subject: [PATCH 058/422] Exclude dependency updates other than direct dependencies (#14944) --- .github/dependabot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6b47350a4..c4cd48878 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,7 +11,7 @@ updates: interval: weekly open-pull-requests-limit: 99 allow: - - dependency-type: all + - dependency-type: direct - package-ecosystem: bundler directory: "/" @@ -19,4 +19,4 @@ updates: interval: weekly open-pull-requests-limit: 99 allow: - - dependency-type: all + - dependency-type: direct From 7919418e4c445950cb526a42941186d1eb28c29e Mon Sep 17 00:00:00 2001 From: tateisu Date: Wed, 7 Oct 2020 04:29:22 +0900 Subject: [PATCH 059/422] add S3_READ_TIMEOUT environment variable (#14952) --- config/initializers/paperclip.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index b4849370d..b841d5220 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -62,7 +62,7 @@ if ENV['S3_ENABLED'] == 'true' s3_options: { signature_version: ENV.fetch('S3_SIGNATURE_VERSION') { 'v4' }, http_open_timeout: ENV.fetch('S3_OPEN_TIMEOUT'){ '5' }.to_i, - http_read_timeout: 5, + http_read_timeout: ENV.fetch('S3_READ_TIMEOUT'){ '5' }.to_i, http_idle_timeout: 5, retry_limit: 0, } From 9114b84157941caf16378e102a2191f94424e02f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:29:19 +0900 Subject: [PATCH 060/422] Bump babel-jest from 26.3.0 to 26.5.2 (#14945) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 26.3.0 to 26.5.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v26.5.2/packages/babel-jest) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 104 ++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 78 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 697fbae1c..d53b474d2 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.0.4", "babel-eslint": "^10.1.0", - "babel-jest": "^26.3.0", + "babel-jest": "^26.5.2", "eslint": "^7.6.0", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", diff --git a/yarn.lock b/yarn.lock index 12e7e9d36..efd4169f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1272,21 +1272,21 @@ jest-runner "^26.4.2" jest-runtime "^26.4.2" -"@jest/transform@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55" - integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A== +"@jest/transform@^26.3.0", "@jest/transform@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.5.2.tgz#6a0033a1d24316a1c75184d010d864f2c681bef5" + integrity sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.3.0" + jest-haste-map "^26.5.2" jest-regex-util "^26.0.0" - jest-util "^26.3.0" + jest-util "^26.5.2" micromatch "^4.0.2" pirates "^4.0.1" slash "^3.0.0" @@ -1303,10 +1303,10 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71" - integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ== +"@jest/types@^26.3.0", "@jest/types@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d" + integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -2110,16 +2110,16 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463" - integrity sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g== +babel-jest@^26.3.0, babel-jest@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250" + integrity sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A== dependencies: - "@jest/transform" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.3.0" + babel-preset-jest "^26.5.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2169,10 +2169,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" - integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== +babel-plugin-jest-hoist@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz#3916b3a28129c29528de91e5784a44680db46385" + integrity sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2248,12 +2248,12 @@ babel-preset-current-node-syntax@^0.1.3: "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -babel-preset-jest@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz#ed6344506225c065fd8a0b53e191986f74890776" - integrity sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw== +babel-preset-jest@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz#f1b166045cd21437d1188d29f7fba470d5bdb0e7" + integrity sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA== dependencies: - babel-plugin-jest-hoist "^26.2.0" + babel-plugin-jest-hoist "^26.5.0" babel-preset-current-node-syntax "^0.1.3" babel-runtime@^6.26.0: @@ -6131,6 +6131,27 @@ jest-haste-map@^26.3.0: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.5.2.tgz#a15008abfc502c18aa56e4919ed8c96304ceb23d" + integrity sha512-lJIAVJN3gtO3k4xy+7i2Xjtwh8CfPcH08WYjZpe9xzveDaqGw9fVNCpkYu6M525wKFVkLmyi7ku+DxCAP1lyMA== + dependencies: + "@jest/types" "^26.5.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.5.0" + jest-util "^26.5.2" + jest-worker "^26.5.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + jest-jasmine2@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz#18a9d5bec30904267ac5e9797570932aec1e2257" @@ -6294,6 +6315,14 @@ jest-serializer@^26.3.0: "@types/node" "*" graceful-fs "^4.2.4" +jest-serializer@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.5.0.tgz#f5425cc4c5f6b4b355f854b5f0f23ec6b962bc13" + integrity sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + jest-snapshot@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.2.tgz#87d3ac2f2bd87ea8003602fbebd8fcb9e94104f6" @@ -6327,6 +6356,18 @@ jest-util@^26.3.0: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7" + integrity sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg== + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + jest-validate@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.4.2.tgz#e871b0dfe97747133014dcf6445ee8018398f39c" @@ -6361,6 +6402,15 @@ jest-worker@^26.3.0: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" + integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.2.tgz#7e8bfb348ec33f5459adeaffc1a25d5752d9d312" From 0b03ee3de7baef4f873d67393b345b4cf551cb14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:31:54 +0900 Subject: [PATCH 061/422] Bump @github/webauthn-json from 0.5.5 to 0.5.6 (#14946) Bumps [@github/webauthn-json](https://github.com/github/webauthn-json) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/github/webauthn-json/releases) - [Commits](https://github.com/github/webauthn-json/compare/v0.5.5...v0.5.6) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d53b474d2..6d50b00bd 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@babel/runtime": "^7.11.2", "@clusterws/cws": "^3.0.0", "@gamestdio/websocket": "^0.3.2", - "@github/webauthn-json": "^0.5.5", + "@github/webauthn-json": "^0.5.6", "@rails/ujs": "^6.0.3", "array-includes": "^3.1.1", "arrow-key-navigation": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index efd4169f2..55684bd69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1112,10 +1112,10 @@ resolved "https://registry.yarnpkg.com/@gamestdio/websocket/-/websocket-0.3.2.tgz#321ba0976ee30fd14e51dbf8faa85ce7b325f76a" integrity sha512-J3n5SKim+ZoLbe44hRGI/VYAwSMCeIJuBy+FfP6EZaujEpNchPRFcIsVQLWAwpU1bP2Ji63rC+rEUOd1vjUB6Q== -"@github/webauthn-json@^0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@github/webauthn-json/-/webauthn-json-0.5.5.tgz#af05d99eb0edb0808cc46f98290d212c3d531936" - integrity sha512-ADYCZBhmYcdXk4IJBXnlLTrPLljUQ9WW6XzTpcT2AxOB49g55kdcbR0n/dr3qAdNJNJtNzMi5Pkb838AoXcVAQ== +"@github/webauthn-json@^0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@github/webauthn-json/-/webauthn-json-0.5.6.tgz#dd0c2c284d6b1b806fea3c534da72d65cbdafed2" + integrity sha512-38PqUby4jxRHFKryRFsqmlznXrl/Tray0lmHOaLq12uTdLIjO4i++FUrThf/IOcNmee+qYhEZS1kVSOuSPbY2Q== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" From e2d20be499d2744656b22e09b7bf543334e04f1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:32:07 +0900 Subject: [PATCH 062/422] Bump sass from 1.26.11 to 1.26.12 (#14947) Bumps [sass](https://github.com/sass/dart-sass) from 1.26.11 to 1.26.12. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.26.11...1.26.12) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6d50b00bd..2faa4ee82 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.26.11", + "sass": "^1.26.12", "sass-loader": "^10.0.2", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 55684bd69..5b74c517d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9402,10 +9402,10 @@ sass-loader@^10.0.2: schema-utils "^2.7.1" semver "^7.3.2" -sass@^1.26.11: - version "1.26.11" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.11.tgz#0f22cc4ab2ba27dad1d4ca30837beb350b709847" - integrity sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw== +sass@^1.26.12: + version "1.26.12" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.12.tgz#79eddaa1773fff32ccf19e00d1ce380fc2afc7d0" + integrity sha512-hmSwtBOWoS9zwe0yAS+QmaseVCUELiGV22gXHDR7+9stEsVuEuxfY1GhC8XmUpC+Ir3Hwq7NxSUNbnmkznnF7g== dependencies: chokidar ">=2.0.0 <4.0.0" From dcaff7d3d00ce21fed65767d5c8516625ef706be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:32:39 +0900 Subject: [PATCH 063/422] Bump eslint-plugin-react from 7.21.2 to 7.21.3 (#14950) Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.21.2 to 7.21.3. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.21.2...v7.21.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2faa4ee82..d6e98acb3 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.21.2", + "eslint-plugin-react": "~7.21.3", "jest": "^26.4.2", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", diff --git a/yarn.lock b/yarn.lock index 5b74c517d..ebaa8bf42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4105,10 +4105,10 @@ eslint-plugin-promise@~4.2.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== -eslint-plugin-react@~7.21.2: - version "7.21.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.2.tgz#3bd5d2c4c36d5a0428d0d6dda301ac9a84d681b2" - integrity sha512-j3XKvrK3rpBzveKFbgAeGsWb9uz6iUOrR0jixRfjwdFeGSRsXvVTFtHDQYCjsd1/6Z/xvb8Vy3LiI5Reo7fDrg== +eslint-plugin-react@~7.21.3: + version "7.21.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.3.tgz#71655d2af5155b19285ec929dd2cdc67a4470b52" + integrity sha512-OI4GwTCqyIb4ipaOEGLWdaOHCXZZydStAsBEPB2e1ZfNM37bojpgO1BoOQbFb0eLVz3QLDx7b+6kYcrxCuJfhw== dependencies: array-includes "^3.1.1" array.prototype.flatmap "^1.2.3" From d175a3bf093a4c4d07d282093289f00c6870c731 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:33:19 +0900 Subject: [PATCH 064/422] Bump mini-css-extract-plugin from 0.11.0 to 0.11.3 (#14949) Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.11.0 to 0.11.3. - [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.11.0...v0.11.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d6e98acb3..6c8fc2a3b 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "lodash": "^4.17.19", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^0.11.0", + "mini-css-extract-plugin": "^0.11.3", "mkdirp": "^1.0.4", "npmlog": "^4.1.2", "object-assign": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index ebaa8bf42..882f52b39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6996,10 +6996,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.0.tgz#3918953075109d4ca204bf1e8a393a78d3cc821f" - integrity sha512-dVWGuWJlQw2lZxsxBI3hOsoxg1k3DruLR0foHQLSkQMfk+qLJbv9dUk8fjmjWQKN9ef2n54ehA2FjClAsQhrWQ== +mini-css-extract-plugin@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" From 3f6ab34cc570aeeaa49841f01de2ee1b8de25d96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 22:53:43 +0900 Subject: [PATCH 065/422] Bump jest from 26.4.2 to 26.5.2 (#14951) Bumps [jest](https://github.com/facebook/jest) from 26.4.2 to 26.5.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v26.4.2...v26.5.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 619 +++++++++++++++++++++++++-------------------------- 2 files changed, 299 insertions(+), 322 deletions(-) diff --git a/package.json b/package.json index 6c8fc2a3b..7d3c1d75f 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,7 @@ "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.3", - "jest": "^26.4.2", + "jest": "^26.5.2", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.13.1", diff --git a/yarn.lock b/yarn.lock index 882f52b39..6ef4066dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1133,93 +1133,93 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.3.0.tgz#ed04063efb280c88ba87388b6f16427c0a85c856" - integrity sha512-/5Pn6sJev0nPUcAdpJHMVIsA8sKizL2ZkcKPE5+dJrCccks7tcM7c9wbgHudBJbxXLoTbqsHkG1Dofoem4F09w== +"@jest/console@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.5.2.tgz#94fc4865b1abed7c352b5e21e6c57be4b95604a6" + integrity sha512-lJELzKINpF1v74DXHbCRIkQ/+nUV1M+ntj+X1J8LxCgpmJZjfLmhFejiMSbjjD66fayxl5Z06tbs3HMyuik6rw== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.3.0" - jest-util "^26.3.0" + jest-message-util "^26.5.2" + jest-util "^26.5.2" slash "^3.0.0" -"@jest/core@^26.4.2": - version "26.4.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.4.2.tgz#85d0894f31ac29b5bab07aa86806d03dd3d33edc" - integrity sha512-sDva7YkeNprxJfepOctzS8cAk9TOekldh+5FhVuXS40+94SHbiicRO1VV2tSoRtgIo+POs/Cdyf8p76vPTd6dg== +"@jest/core@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.2.tgz#e39f14676f4ba4632ecabfdc374071ab22131f22" + integrity sha512-LLTo1LQMg7eJjG/+P1NYqFof2B25EV1EqzD5FonklihG4UJKiK2JBIvWonunws6W7e+DhNLoFD+g05tCY03eyA== dependencies: - "@jest/console" "^26.3.0" - "@jest/reporters" "^26.4.1" - "@jest/test-result" "^26.3.0" - "@jest/transform" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/console" "^26.5.2" + "@jest/reporters" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.3.0" - jest-config "^26.4.2" - jest-haste-map "^26.3.0" - jest-message-util "^26.3.0" + jest-changed-files "^26.5.2" + jest-config "^26.5.2" + jest-haste-map "^26.5.2" + jest-message-util "^26.5.2" jest-regex-util "^26.0.0" - jest-resolve "^26.4.0" - jest-resolve-dependencies "^26.4.2" - jest-runner "^26.4.2" - jest-runtime "^26.4.2" - jest-snapshot "^26.4.2" - jest-util "^26.3.0" - jest-validate "^26.4.2" - jest-watcher "^26.3.0" + jest-resolve "^26.5.2" + jest-resolve-dependencies "^26.5.2" + jest-runner "^26.5.2" + jest-runtime "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" + jest-watcher "^26.5.2" micromatch "^4.0.2" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.3.0.tgz#e6953ab711ae3e44754a025f838bde1a7fd236a0" - integrity sha512-EW+MFEo0DGHahf83RAaiqQx688qpXgl99wdb8Fy67ybyzHwR1a58LHcO376xQJHfmoXTu89M09dH3J509cx2AA== +"@jest/environment@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.5.2.tgz#eba3cfc698f6e03739628f699c28e8a07f5e65fe" + integrity sha512-YjhCD/Zhkz0/1vdlS/QN6QmuUdDkpgBdK4SdiVg4Y19e29g4VQYN5Xg8+YuHjdoWGY7wJHMxc79uDTeTOy9Ngw== dependencies: - "@jest/fake-timers" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" - jest-mock "^26.3.0" + jest-mock "^26.5.2" -"@jest/fake-timers@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.3.0.tgz#f515d4667a6770f60ae06ae050f4e001126c666a" - integrity sha512-ZL9ytUiRwVP8ujfRepffokBvD2KbxbqMhrXSBhSdAhISCw3gOkuntisiSFv+A6HN0n0fF4cxzICEKZENLmW+1A== +"@jest/fake-timers@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.5.2.tgz#1291ac81680ceb0dc7daa1f92c059307eea6400a" + integrity sha512-09Hn5Oraqt36V1akxQeWMVL0fR9c6PnEhpgLaYvREXZJAh2H2Y+QLCsl0g7uMoJeoWJAuz4tozk1prbR1Fc1sw== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.3.0" - jest-mock "^26.3.0" - jest-util "^26.3.0" + jest-message-util "^26.5.2" + jest-mock "^26.5.2" + jest-util "^26.5.2" -"@jest/globals@^26.4.2": - version "26.4.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.4.2.tgz#73c2a862ac691d998889a241beb3dc9cada40d4a" - integrity sha512-Ot5ouAlehhHLRhc+sDz2/9bmNv9p5ZWZ9LE1pXGGTCXBasmi5jnYjlgYcYt03FBwLmZXCZ7GrL29c33/XRQiow== +"@jest/globals@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.2.tgz#c333f82c29e19ecb609a75d1a532915a5c956c59" + integrity sha512-9PmnFsAUJxpPt1s/stq02acS1YHliVBDNfAWMe1bwdRr1iTCfhbNt3ERQXrO/ZfZSweftoA26Q/2yhSVSWQ3sw== dependencies: - "@jest/environment" "^26.3.0" - "@jest/types" "^26.3.0" - expect "^26.4.2" + "@jest/environment" "^26.5.2" + "@jest/types" "^26.5.2" + expect "^26.5.2" -"@jest/reporters@^26.4.1": - version "26.4.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.4.1.tgz#3b4d6faf28650f3965f8b97bc3d114077fb71795" - integrity sha512-aROTkCLU8++yiRGVxLsuDmZsQEKO6LprlrxtAuzvtpbIFl3eIjgIf3EUxDKgomkS25R9ZzwGEdB5weCcBZlrpQ== +"@jest/reporters@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.2.tgz#0f1c900c6af712b46853d9d486c9c0382e4050f6" + integrity sha512-zvq6Wvy6MmJq/0QY0YfOPb49CXKSf42wkJbrBPkeypVa8I+XDxijvFuywo6TJBX/ILPrdrlE/FW9vJZh6Rf9vA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.3.0" - "@jest/test-result" "^26.3.0" - "@jest/transform" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/console" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -1230,10 +1230,10 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.3.0" - jest-resolve "^26.4.0" - jest-util "^26.3.0" - jest-worker "^26.3.0" + jest-haste-map "^26.5.2" + jest-resolve "^26.5.2" + jest-util "^26.5.2" + jest-worker "^26.5.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -1242,37 +1242,37 @@ optionalDependencies: node-notifier "^8.0.0" -"@jest/source-map@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.3.0.tgz#0e646e519883c14c551f7b5ae4ff5f1bfe4fc3d9" - integrity sha512-hWX5IHmMDWe1kyrKl7IhFwqOuAreIwHhbe44+XH2ZRHjrKIh0LO5eLQ/vxHFeAfRwJapmxuqlGAEYLadDq6ZGQ== +"@jest/source-map@^26.5.0": + version "26.5.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.5.0.tgz#98792457c85bdd902365cd2847b58fff05d96367" + integrity sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.3.0.tgz#46cde01fa10c0aaeb7431bf71e4a20d885bc7fdb" - integrity sha512-a8rbLqzW/q7HWheFVMtghXV79Xk+GWwOK1FrtimpI5n1la2SY0qHri3/b0/1F0Ve0/yJmV8pEhxDfVwiUBGtgg== +"@jest/test-result@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.5.2.tgz#cc1a44cfd4db2ecee3fb0bc4e9fe087aa54b5230" + integrity sha512-E/Zp6LURJEGSCWpoMGmCFuuEI1OWuI3hmZwmULV0GsgJBh7u0rwqioxhRU95euUuviqBDN8ruX/vP/4bwYolXw== dependencies: - "@jest/console" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/console" "^26.5.2" + "@jest/types" "^26.5.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.4.2": - version "26.4.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.4.2.tgz#58a3760a61eec758a2ce6080201424580d97cbba" - integrity sha512-83DRD8N3M0tOhz9h0bn6Kl6dSp+US6DazuVF8J9m21WAp5x7CqSMaNycMP0aemC/SH/pDQQddbsfHRTBXVUgog== +"@jest/test-sequencer@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.2.tgz#c4559c7e134b27b020317303ee5399bf62917a4b" + integrity sha512-XmGEh7hh07H2B8mHLFCIgr7gA5Y6Hw1ZATIsbz2fOhpnQ5AnQtZk0gmP0Q5/+mVB2xygO64tVFQxOajzoptkNA== dependencies: - "@jest/test-result" "^26.3.0" + "@jest/test-result" "^26.5.2" graceful-fs "^4.2.4" - jest-haste-map "^26.3.0" - jest-runner "^26.4.2" - jest-runtime "^26.4.2" + jest-haste-map "^26.5.2" + jest-runner "^26.5.2" + jest-runtime "^26.5.2" -"@jest/transform@^26.3.0", "@jest/transform@^26.5.2": +"@jest/transform@^26.5.2": version "26.5.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.5.2.tgz#6a0033a1d24316a1c75184d010d864f2c681bef5" integrity sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg== @@ -1413,6 +1413,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/babel__traverse@^7.0.4": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== + dependencies: + "@babel/types" "^7.3.0" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -1519,10 +1526,10 @@ resolved "https://registry.yarnpkg.com/@types/schema-utils/-/schema-utils-1.0.0.tgz#295d36f01e2cb8bc3207ca1d9a68e210db6b40cb" integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/testing-library__jest-dom@^5.9.1": version "5.9.1" @@ -2110,7 +2117,7 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.3.0, babel-jest@^26.5.2: +babel-jest@^26.5.2: version "26.5.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250" integrity sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A== @@ -3630,10 +3637,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" - integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== +diff-sequences@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" + integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== diffie-hellman@^5.0.0: version "5.0.3" @@ -4388,16 +4395,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.4.2.tgz#36db120928a5a2d7d9736643032de32f24e1b2a1" - integrity sha512-IlJ3X52Z0lDHm7gjEp+m76uX46ldH5VpqmU0006vqDju/285twh7zaWMRhs67VpQhBwjjMchk+p5aA0VkERCAA== +expect@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.2.tgz#3e0631c4a657a83dbec769ad246a2998953a55a6" + integrity sha512-ccTGrXZd8DZCcvCz4htGXTkd/LOoy6OEtiDS38x3/VVf6E4AQL0QoeksBiw7BtGR5xDNiRYPB8GN6pfbuTOi7w== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" ansi-styles "^4.0.0" jest-get-type "^26.3.0" - jest-matcher-utils "^26.4.2" - jest-message-util "^26.3.0" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" jest-regex-util "^26.0.0" express@^4.16.3, express@^4.17.1: @@ -5985,57 +5992,57 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1" - integrity sha512-1C4R4nijgPltX6fugKxM4oQ18zimS7LqQ+zTTY8lMCMFPrxqBFb7KJH0Z2fRQJvw2Slbaipsqq7s1mgX5Iot+g== +jest-changed-files@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.5.2.tgz#330232c6a5c09a7f040a5870e8f0a9c6abcdbed5" + integrity sha512-qSmssmiIdvM5BWVtyK/nqVpN3spR5YyvkvPqz1x3BR1bwIxsWmU/MGwLoCrPNLbkG2ASAKfvmJpOduEApBPh2w== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.4.2.tgz#24afc6e4dfc25cde4c7ec4226fb7db5f157c21da" - integrity sha512-zb+lGd/SfrPvoRSC/0LWdaWCnscXc1mGYW//NP4/tmBvRPT3VntZ2jtKUONsRi59zc5JqmsSajA9ewJKFYp8Cw== +jest-cli@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.2.tgz#0df114399b4036a3f046f0a9f25c50372c76b3a2" + integrity sha512-usm48COuUvRp8YEG5OWOaxbSM0my7eHn3QeBWxiGUuFhvkGVBvl1fic4UjC02EAEQtDv8KrNQUXdQTV6ZZBsoA== dependencies: - "@jest/core" "^26.4.2" - "@jest/test-result" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/core" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.4.2" - jest-util "^26.3.0" - jest-validate "^26.4.2" + jest-config "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" prompts "^2.0.1" - yargs "^15.3.1" + yargs "^15.4.1" -jest-config@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.4.2.tgz#da0cbb7dc2c131ffe831f0f7f2a36256e6086558" - integrity sha512-QBf7YGLuToiM8PmTnJEdRxyYy3mHWLh24LJZKVdXZ2PNdizSe1B/E8bVm+HYcjbEzGuVXDv/di+EzdO/6Gq80A== +jest-config@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.2.tgz#6e828e25f10124433dd008fbd83348636de0972a" + integrity sha512-dqJOnSegNdE5yDiuGHsjTM5gec7Z4AcAMHiW+YscbOYJAlb3LEtDSobXCq0or9EmGQI5SFmKy4T7P1FxetJOfg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.4.2" - "@jest/types" "^26.3.0" - babel-jest "^26.3.0" + "@jest/test-sequencer" "^26.5.2" + "@jest/types" "^26.5.2" + babel-jest "^26.5.2" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.3.0" - jest-environment-node "^26.3.0" + jest-environment-jsdom "^26.5.2" + jest-environment-node "^26.5.2" jest-get-type "^26.3.0" - jest-jasmine2 "^26.4.2" + jest-jasmine2 "^26.5.2" jest-regex-util "^26.0.0" - jest-resolve "^26.4.0" - jest-util "^26.3.0" - jest-validate "^26.4.2" + jest-resolve "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" micromatch "^4.0.2" - pretty-format "^26.4.2" + pretty-format "^26.5.2" jest-diff@^25.2.1: version "25.5.0" @@ -6047,15 +6054,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.2.tgz#a1b7b303bcc534aabdb3bd4a7caf594ac059f5aa" - integrity sha512-6T1XQY8U28WH0Z5rGpQ+VqZSZz8EN8rZcBtfvXaOkbwxIEeRre6qnuZQlbY1AJ4MKDxQF8EkrCvK+hL/VkyYLQ== +jest-diff@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.5.2.tgz#8e26cb32dc598e8b8a1b9deff55316f8313c8053" + integrity sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA== dependencies: chalk "^4.0.0" - diff-sequences "^26.3.0" + diff-sequences "^26.5.0" jest-get-type "^26.3.0" - pretty-format "^26.4.2" + pretty-format "^26.5.2" jest-docblock@^26.0.0: version "26.0.0" @@ -6064,41 +6071,41 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.4.2.tgz#bb14f7f4304f2bb2e2b81f783f989449b8b6ffae" - integrity sha512-p15rt8r8cUcRY0Mvo1fpkOGYm7iI8S6ySxgIdfh3oOIv+gHwrHTy5VWCGOecWUhDsit4Nz8avJWdT07WLpbwDA== +jest-each@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.5.2.tgz#35e68d6906a7f826d3ca5803cfe91d17a5a34c31" + integrity sha512-w7D9FNe0m2D3yZ0Drj9CLkyF/mGhmBSULMQTypzAKR746xXnjUrK8GUJdlLTWUF6dd0ks3MtvGP7/xNFr9Aphg== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" chalk "^4.0.0" jest-get-type "^26.3.0" - jest-util "^26.3.0" - pretty-format "^26.4.2" + jest-util "^26.5.2" + pretty-format "^26.5.2" -jest-environment-jsdom@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.3.0.tgz#3b749ba0f3a78e92ba2c9ce519e16e5dd515220c" - integrity sha512-zra8He2btIMJkAzvLaiZ9QwEPGEetbxqmjEBQwhH3CA+Hhhu0jSiEJxnJMbX28TGUvPLxBt/zyaTLrOPF4yMJA== +jest-environment-jsdom@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.5.2.tgz#5feab05b828fd3e4b96bee5e0493464ddd2bb4bc" + integrity sha512-fWZPx0bluJaTQ36+PmRpvUtUlUFlGGBNyGX1SN3dLUHHMcQ4WseNEzcGGKOw4U5towXgxI4qDoI3vwR18H0RTw== dependencies: - "@jest/environment" "^26.3.0" - "@jest/fake-timers" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" - jest-mock "^26.3.0" - jest-util "^26.3.0" - jsdom "^16.2.2" + jest-mock "^26.5.2" + jest-util "^26.5.2" + jsdom "^16.4.0" -jest-environment-node@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.3.0.tgz#56c6cfb506d1597f94ee8d717072bda7228df849" - integrity sha512-c9BvYoo+FGcMj5FunbBgtBnbR5qk3uky8PKyRVpSfe2/8+LrNQMiXX53z6q2kY+j15SkjQCOSL/6LHnCPLVHNw== +jest-environment-node@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.5.2.tgz#275a0f01b5e47447056f1541a15ed4da14acca03" + integrity sha512-YHjnDsf/GKFCYMGF1V+6HF7jhY1fcLfLNBDjhAOvFGvt6d8vXvNdJGVM7uTZ2VO/TuIyEFhPGaXMX5j3h7fsrA== dependencies: - "@jest/environment" "^26.3.0" - "@jest/fake-timers" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" - jest-mock "^26.3.0" - jest-util "^26.3.0" + jest-mock "^26.5.2" + jest-util "^26.5.2" jest-get-type@^25.2.6: version "25.2.6" @@ -6110,27 +6117,6 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726" - integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA== - dependencies: - "@jest/types" "^26.3.0" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.3.0" - jest-util "^26.3.0" - jest-worker "^26.3.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^26.5.2: version "26.5.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.5.2.tgz#a15008abfc502c18aa56e4919ed8c96304ceb23d" @@ -6152,68 +6138,68 @@ jest-haste-map@^26.5.2: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz#18a9d5bec30904267ac5e9797570932aec1e2257" - integrity sha512-z7H4EpCldHN1J8fNgsja58QftxBSL+JcwZmaXIvV9WKIM+x49F4GLHu/+BQh2kzRKHAgaN/E82od+8rTOBPyPA== +jest-jasmine2@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.2.tgz#0e33819d31b1f2aab5efd1e02ce502209c0e64a2" + integrity sha512-2J+GYcgLVPTkpmvHEj0/IDTIAuyblGNGlyGe4fLfDT2aktEPBYvoxUwFiOmDDxxzuuEAD2uxcYXr0+1Yw4tjFA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.3.0" - "@jest/source-map" "^26.3.0" - "@jest/test-result" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/environment" "^26.5.2" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.4.2" + expect "^26.5.2" is-generator-fn "^2.0.0" - jest-each "^26.4.2" - jest-matcher-utils "^26.4.2" - jest-message-util "^26.3.0" - jest-runtime "^26.4.2" - jest-snapshot "^26.4.2" - jest-util "^26.3.0" - pretty-format "^26.4.2" + jest-each "^26.5.2" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" + jest-runtime "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + pretty-format "^26.5.2" throat "^5.0.0" -jest-leak-detector@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz#c73e2fa8757bf905f6f66fb9e0070b70fa0f573f" - integrity sha512-akzGcxwxtE+9ZJZRW+M2o+nTNnmQZxrHJxX/HjgDaU5+PLmY1qnQPnMjgADPGCRPhB+Yawe1iij0REe+k/aHoA== +jest-leak-detector@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.5.2.tgz#83fcf9a4a6ef157549552cb4f32ca1d6221eea69" + integrity sha512-h7ia3dLzBFItmYERaLPEtEKxy3YlcbcRSjj0XRNJgBEyODuu+3DM2o62kvIFvs3PsaYoIIv+e+nLRI61Dj1CNw== dependencies: jest-get-type "^26.3.0" - pretty-format "^26.4.2" + pretty-format "^26.5.2" -jest-matcher-utils@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz#fa81f3693f7cb67e5fc1537317525ef3b85f4b06" - integrity sha512-KcbNqWfWUG24R7tu9WcAOKKdiXiXCbMvQYT6iodZ9k1f7065k0keUOW6XpJMMvah+hTfqkhJhRXmA3r3zMAg0Q== +jest-matcher-utils@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz#6aa2c76ce8b9c33e66f8856ff3a52bab59e6c85a" + integrity sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA== dependencies: chalk "^4.0.0" - jest-diff "^26.4.2" + jest-diff "^26.5.2" jest-get-type "^26.3.0" - pretty-format "^26.4.2" + pretty-format "^26.5.2" -jest-message-util@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.3.0.tgz#3bdb538af27bb417f2d4d16557606fd082d5841a" - integrity sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA== +jest-message-util@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.5.2.tgz#6c4c4c46dcfbabb47cd1ba2f6351559729bc11bb" + integrity sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.3.0" - "@types/stack-utils" "^1.0.1" + "@jest/types" "^26.5.2" + "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.3.0.tgz#ee62207c3c5ebe5f35b760e1267fee19a1cfdeba" - integrity sha512-PeaRrg8Dc6mnS35gOo/CbZovoDPKAeB1FICZiuagAgGvbWdNNyjQjkOaGUa/3N3JtpQ/Mh9P4A2D4Fv51NnP8Q== +jest-mock@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.5.2.tgz#c9302e8ef807f2bfc749ee52e65ad11166a1b6a1" + integrity sha512-9SiU4b5PtO51v0MtJwVRqeGEroH66Bnwtq4ARdNP7jNXbpT7+ByeWNAk4NeT/uHfNSVDXEXgQo1XRuwEqS6Rdw== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6226,94 +6212,86 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.2.tgz#739bdb027c14befb2fe5aabbd03f7bab355f1dc5" - integrity sha512-ADHaOwqEcVc71uTfySzSowA/RdxUpCxhxa2FNLiin9vWLB1uLPad3we+JSSROq5+SrL9iYPdZZF8bdKM7XABTQ== +jest-resolve-dependencies@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.2.tgz#ee30b7cfea81c81bf5e195a9287d7ec07f893170" + integrity sha512-LLkc8LuRtxqOx0AtX/Npa2C4I23WcIrwUgNtHYXg4owYF/ZDQShcwBAHjYZIFR06+HpQcZ43+kCTMlQ3aDCYTg== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" jest-regex-util "^26.0.0" - jest-snapshot "^26.4.2" + jest-snapshot "^26.5.2" -jest-resolve@^26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.4.0.tgz#6dc0af7fb93e65b73fec0368ca2b76f3eb59a6d7" - integrity sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg== +jest-resolve@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.5.2.tgz#0d719144f61944a428657b755a0e5c6af4fc8602" + integrity sha512-XsPxojXGRA0CoDD7Vis59ucz2p3cQFU5C+19tz3tLEAlhYKkK77IL0cjYjikY9wXnOaBeEdm1rOgSJjbZWpcZg== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" chalk "^4.0.0" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^26.3.0" + jest-util "^26.5.2" read-pkg-up "^7.0.1" resolve "^1.17.0" slash "^3.0.0" -jest-runner@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.4.2.tgz#c3ec5482c8edd31973bd3935df5a449a45b5b853" - integrity sha512-FgjDHeVknDjw1gRAYaoUoShe1K3XUuFMkIaXbdhEys+1O4bEJS8Avmn4lBwoMfL8O5oFTdWYKcf3tEJyyYyk8g== +jest-runner@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.2.tgz#4f9e6b0bb7eb4710c209a9e145b8a10894f4c19f" + integrity sha512-GKhYxtSX5+tXZsd2QwfkDqPIj5C2HqOdXLRc2x2qYqWE26OJh17xo58/fN/mLhRkO4y6o60ZVloan7Kk5YA6hg== dependencies: - "@jest/console" "^26.3.0" - "@jest/environment" "^26.3.0" - "@jest/test-result" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.4.2" + jest-config "^26.5.2" jest-docblock "^26.0.0" - jest-haste-map "^26.3.0" - jest-leak-detector "^26.4.2" - jest-message-util "^26.3.0" - jest-resolve "^26.4.0" - jest-runtime "^26.4.2" - jest-util "^26.3.0" - jest-worker "^26.3.0" + jest-haste-map "^26.5.2" + jest-leak-detector "^26.5.2" + jest-message-util "^26.5.2" + jest-resolve "^26.5.2" + jest-runtime "^26.5.2" + jest-util "^26.5.2" + jest-worker "^26.5.0" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.4.2.tgz#94ce17890353c92e4206580c73a8f0c024c33c42" - integrity sha512-4Pe7Uk5a80FnbHwSOk7ojNCJvz3Ks2CNQWT5Z7MJo4tX0jb3V/LThKvD9tKPNVNyeMH98J/nzGlcwc00R2dSHQ== - dependencies: - "@jest/console" "^26.3.0" - "@jest/environment" "^26.3.0" - "@jest/fake-timers" "^26.3.0" - "@jest/globals" "^26.4.2" - "@jest/source-map" "^26.3.0" - "@jest/test-result" "^26.3.0" - "@jest/transform" "^26.3.0" - "@jest/types" "^26.3.0" +jest-runtime@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.2.tgz#b72f5f79eb2fe0c46bfef4cdb9c1e01d1c69ba41" + integrity sha512-zArr4DatX/Sn0wswX/AnAuJgmwgAR5rNtrUz36HR8BfMuysHYNq5sDbYHuLC4ICyRdy5ae/KQ+sczxyS9G6Qvw== + dependencies: + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/globals" "^26.5.2" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" "@types/yargs" "^15.0.0" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.4.2" - jest-haste-map "^26.3.0" - jest-message-util "^26.3.0" - jest-mock "^26.3.0" + jest-config "^26.5.2" + jest-haste-map "^26.5.2" + jest-message-util "^26.5.2" + jest-mock "^26.5.2" jest-regex-util "^26.0.0" - jest-resolve "^26.4.0" - jest-snapshot "^26.4.2" - jest-util "^26.3.0" - jest-validate "^26.4.2" + jest-resolve "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-serializer@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef" - integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" + yargs "^15.4.1" jest-serializer@^26.5.0: version "26.5.0" @@ -6323,39 +6301,28 @@ jest-serializer@^26.5.0: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.2.tgz#87d3ac2f2bd87ea8003602fbebd8fcb9e94104f6" - integrity sha512-N6Uub8FccKlf5SBFnL2Ri/xofbaA68Cc3MGjP/NuwgnsvWh+9hLIR/DhrxbSiKXMY9vUW5dI6EW1eHaDHqe9sg== +jest-snapshot@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.2.tgz#0cf7642eaf8e8d2736bd443f619959bf237f9ccf" + integrity sha512-MkXIDvEefzDubI/WaDVSRH4xnkuirP/Pz8LhAIDXcVQTmcEfwxywj5LGwBmhz+kAAIldA7XM4l96vbpzltSjqg== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" + "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.4.2" + expect "^26.5.2" graceful-fs "^4.2.4" - jest-diff "^26.4.2" + jest-diff "^26.5.2" jest-get-type "^26.3.0" - jest-haste-map "^26.3.0" - jest-matcher-utils "^26.4.2" - jest-message-util "^26.3.0" - jest-resolve "^26.4.0" + jest-haste-map "^26.5.2" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" + jest-resolve "^26.5.2" natural-compare "^1.4.0" - pretty-format "^26.4.2" + pretty-format "^26.5.2" semver "^7.3.2" -jest-util@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" - integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== - dependencies: - "@jest/types" "^26.3.0" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - jest-util@^26.5.2: version "26.5.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7" @@ -6368,29 +6335,29 @@ jest-util@^26.5.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.4.2.tgz#e871b0dfe97747133014dcf6445ee8018398f39c" - integrity sha512-blft+xDX7XXghfhY0mrsBCYhX365n8K5wNDC4XAcNKqqjEzsRUSXP44m6PL0QJEW2crxQFLLztVnJ4j7oPlQrQ== +jest-validate@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.2.tgz#7ea266700b64234cd1c0cee982490c5a80e9b0f0" + integrity sha512-FmJks0zY36mp6Af/5sqO6CTL9bNMU45yKCJk3hrz8d2aIqQIlN1pr9HPIwZE8blLaewOla134nt5+xAmWsx3SQ== dependencies: - "@jest/types" "^26.3.0" + "@jest/types" "^26.5.2" camelcase "^6.0.0" chalk "^4.0.0" jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.4.2" + pretty-format "^26.5.2" -jest-watcher@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.3.0.tgz#f8ef3068ddb8af160ef868400318dc4a898eed08" - integrity sha512-XnLdKmyCGJ3VoF6G/p5ohbJ04q/vv5aH9ENI+i6BL0uu9WWB6Z7Z2lhQQk0d2AVZcRGp1yW+/TsoToMhBFPRdQ== +jest-watcher@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.5.2.tgz#2957f4461007e0769d74b537379ecf6b7c696916" + integrity sha512-i3m1NtWzF+FXfJ3ljLBB/WQEp4uaNhX7QcQUWMokcifFTUQBDFyUMEwk0JkJ1kopHbx7Een3KX0Q7+9koGM/Pw== dependencies: - "@jest/test-result" "^26.3.0" - "@jest/types" "^26.3.0" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.3.0" + jest-util "^26.5.2" string-length "^4.0.1" jest-worker@^26.3.0: @@ -6411,14 +6378,14 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.2.tgz#7e8bfb348ec33f5459adeaffc1a25d5752d9d312" - integrity sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw== +jest@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.5.2.tgz#c6791642b331fe7abd2f993b0a74aa546f7be0fb" + integrity sha512-4HFabJVwsgDwul/7rhXJ3yFAF/aUkVIXiJWmgFxb+WMdZG39fVvOwYAs8/3r4AlFPc4m/n5sTMtuMbOL3kNtrQ== dependencies: - "@jest/core" "^26.4.2" + "@jest/core" "^26.5.2" import-local "^3.0.2" - jest-cli "^26.4.2" + jest-cli "^26.5.2" js-base64@^2.1.9: version "2.6.4" @@ -6448,7 +6415,7 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^16.2.2: +jsdom@^16.4.0: version "16.4.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== @@ -8377,6 +8344,16 @@ pretty-format@^26.4.2: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-format@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.5.2.tgz#5d896acfdaa09210683d34b6dc0e6e21423cd3e1" + integrity sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og== + dependencies: + "@jest/types" "^26.5.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -11303,7 +11280,7 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.3.1: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From a37732ef33e44afa960d7e80445369ce6e73d6ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Oct 2020 23:24:57 +0900 Subject: [PATCH 066/422] Bump eslint from 7.6.0 to 7.10.0 (#14948) Bumps [eslint](https://github.com/eslint/eslint) from 7.6.0 to 7.10.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.6.0...v7.10.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 62 +++++++++++++++++++++++++++++++++++----------------- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 7d3c1d75f..029195b89 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "@testing-library/react": "^11.0.4", "babel-eslint": "^10.1.0", "babel-jest": "^26.5.2", - "eslint": "^7.6.0", + "eslint": "^7.10.0", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", diff --git a/yarn.lock b/yarn.lock index 6ef4066dc..a803567ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1095,6 +1095,22 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== +"@eslint/eslintrc@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" + integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@formatjs/intl-unified-numberformat@^3.3.3": version "3.3.6" resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.6.tgz#ab69818f7568894023cb31fdb5b5c7eed62c6537" @@ -1758,11 +1774,16 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.1, acorn@^7.3.1: +acorn@^7.1.1: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -4137,12 +4158,12 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^2.1.0: @@ -4196,22 +4217,23 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6" - integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w== +eslint@^7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" + integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA== dependencies: "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.1.3" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" - eslint-scope "^5.1.0" + eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^1.3.0" - espree "^7.2.0" + espree "^7.3.0" esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -4246,12 +4268,12 @@ espree@^3.1.6: acorn "^5.5.0" acorn-jsx "^3.0.0" -espree@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" - integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== dependencies: - acorn "^7.3.1" + acorn "^7.4.0" acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" @@ -4267,7 +4289,7 @@ esquery@^1.2.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -5378,7 +5400,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -10109,7 +10131,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== From 7d985f2aac639dc5fae528db2dbc4422ca10f276 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 8 Oct 2020 00:34:57 +0200 Subject: [PATCH 067/422] Remove dependency on goldfinger gem (#14919) There are edge cases where requests to certain hosts timeout when using the vanilla HTTP.rb gem, which the goldfinger gem uses. Now that we no longer need to support OStatus servers, webfinger logic is so simple that there is no point encapsulating it in a gem, so we can just use our own Request class. With that, we benefit from more robust timeout code and IPv4/IPv6 resolution. Fix #14091 --- Gemfile | 1 - Gemfile.lock | 6 -- app/helpers/webfinger_helper.rb | 33 +------ app/lib/webfinger.rb | 93 +++++++++++++++++++ app/models/account_alias.rb | 2 +- app/models/account_migration.rb | 2 +- app/models/form/redirect.rb | 2 +- app/models/remote_follow.rb | 10 +- .../fetch_remote_account_service.rb | 7 +- app/services/process_mentions_service.rb | 2 +- app/services/resolve_account_service.rb | 9 +- app/views/well_known/host_meta/show.xml.ruby | 1 - .../remote_follow_controller_spec.rb | 10 +- .../well_known/host_meta_controller_spec.rb | 2 +- spec/lib/feed_manager_spec.rb | 1 + 15 files changed, 114 insertions(+), 67 deletions(-) create mode 100644 app/lib/webfinger.rb diff --git a/Gemfile b/Gemfile index 3a92b4627..0fc631e2a 100644 --- a/Gemfile +++ b/Gemfile @@ -54,7 +54,6 @@ gem 'doorkeeper', '~> 5.4' gem 'ed25519', '~> 1.2' gem 'fast_blank', '~> 1.0' gem 'fastimage' -gem 'goldfinger', '~> 2.1' gem 'hiredis', '~> 0.6' gem 'redis-namespace', '~> 1.8' gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b' diff --git a/Gemfile.lock b/Gemfile.lock index ae304e61e..21f5b1b4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -240,11 +240,6 @@ GEM ruby-progressbar (~> 1.4) globalid (0.4.2) activesupport (>= 4.2.0) - goldfinger (2.1.1) - addressable (~> 2.5) - http (~> 4.0) - nokogiri (~> 1.8) - oj (~> 3.0) hamlit (2.13.0) temple (>= 0.8.2) thor @@ -714,7 +709,6 @@ DEPENDENCIES fog-core (<= 2.1.0) fog-openstack (~> 0.3) fuubar (~> 2.5) - goldfinger (~> 2.1) hamlit-rails (~> 0.2) health_check! hiredis (~> 0.6) diff --git a/app/helpers/webfinger_helper.rb b/app/helpers/webfinger_helper.rb index ab7ca4698..482f4e19e 100644 --- a/app/helpers/webfinger_helper.rb +++ b/app/helpers/webfinger_helper.rb @@ -1,38 +1,7 @@ # frozen_string_literal: true -# Monkey-patch on monkey-patch. -# Because it conflicts with the request.rb patch. -class HTTP::Timeout::PerOperationOriginal < HTTP::Timeout::PerOperation - def connect(socket_class, host, port, nodelay = false) - ::Timeout.timeout(@connect_timeout, HTTP::TimeoutError) do - @socket = socket_class.open(host, port) - @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) if nodelay - end - end -end - module WebfingerHelper def webfinger!(uri) - hidden_service_uri = /\.(onion|i2p)(:\d+)?$/.match(uri) - - raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if !Rails.configuration.x.access_to_hidden_service && hidden_service_uri - - opts = { - ssl: !hidden_service_uri, - - headers: { - 'User-Agent': Mastodon::Version.user_agent, - }, - - timeout_class: HTTP::Timeout::PerOperationOriginal, - - timeout_options: { - write_timeout: 10, - connect_timeout: 5, - read_timeout: 10, - }, - } - - Goldfinger::Client.new(uri, opts.merge(Rails.configuration.x.http_client_proxy)).finger + Webfinger.new(uri).perform end end diff --git a/app/lib/webfinger.rb b/app/lib/webfinger.rb new file mode 100644 index 000000000..b2374c494 --- /dev/null +++ b/app/lib/webfinger.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +class Webfinger + class Error < StandardError; end + + class Response + def initialize(body) + @json = Oj.load(body, mode: :strict) + end + + def subject + @json['subject'] + end + + def link(rel, attribute) + links.dig(rel, attribute) + end + + private + + def links + @links ||= @json['links'].map { |link| [link['rel'], link] }.to_h + end + end + + def initialize(uri) + _, @domain = uri.split('@') + + raise ArgumentError, 'Webfinger requested for local account' if @domain.nil? + + @uri = uri + end + + def perform + Response.new(body_from_webfinger) + rescue Oj::ParseError + raise Webfinger::Error, "Invalid JSON in response for #{@uri}" + rescue Addressable::URI::InvalidURIError + raise Webfinger::Error, "Invalid URI for #{@uri}" + end + + private + + def body_from_webfinger(url = standard_url, use_fallback = true) + webfinger_request(url).perform do |res| + if res.code == 200 + res.body_with_limit + elsif res.code == 404 && use_fallback + body_from_host_meta + else + raise Webfinger::Error, "Request for #{@uri} returned HTTP #{res.code}" + end + end + end + + def body_from_host_meta + host_meta_request.perform do |res| + if res.code == 200 + body_from_webfinger(url_from_template(res.body_with_limit), false) + else + raise Webfinger::Error, "Request for #{@uri} returned HTTP #{res.code}" + end + end + end + + def url_from_template(str) + link = Nokogiri::XML(str).at_xpath('//xmlns:Link[@rel="lrdd"]') + + if link.present? + link['template'].gsub('{uri}', @uri) + else + raise Webfinger::Error, "Request for #{@uri} returned host-meta without link to Webfinger" + end + rescue Nokogiri::XML::XPath::SyntaxError + raise Webfinger::Error, "Invalid XML encountered in host-meta for #{@uri}" + end + + def host_meta_request + Request.new(:get, host_meta_url).add_headers('Accept' => 'application/xrd+xml, application/xml, text/xml') + end + + def webfinger_request(url) + Request.new(:get, url).add_headers('Accept' => 'application/jrd+json, application/json') + end + + def standard_url + "https://#{@domain}/.well-known/webfinger?resource=#{@uri}" + end + + def host_meta_url + "https://#{@domain}/.well-known/host-meta" + end +end diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb index 792e9e8d4..3d659142a 100644 --- a/app/models/account_alias.rb +++ b/app/models/account_alias.rb @@ -33,7 +33,7 @@ class AccountAlias < ApplicationRecord def set_uri target_account = ResolveAccountService.new.call(acct) self.uri = ActivityPub::TagManager.instance.uri_for(target_account) unless target_account.nil? - rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error # Validation will take care of it end diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb index 681b5b2cd..4fae98ed7 100644 --- a/app/models/account_migration.rb +++ b/app/models/account_migration.rb @@ -54,7 +54,7 @@ class AccountMigration < ApplicationRecord def set_target_account self.target_account = ResolveAccountService.new.call(acct) - rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error # Validation will take care of it end diff --git a/app/models/form/redirect.rb b/app/models/form/redirect.rb index a7961f8e8..19ee9faed 100644 --- a/app/models/form/redirect.rb +++ b/app/models/form/redirect.rb @@ -32,7 +32,7 @@ class Form::Redirect def set_target_account @target_account = ResolveAccountService.new.call(acct) - rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error # Validation will take care of it end diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb index 30b84f7d5..911c06713 100644 --- a/app/models/remote_follow.rb +++ b/app/models/remote_follow.rb @@ -56,7 +56,7 @@ class RemoteFollow if domain.nil? @addressable_template = Addressable::Template.new("#{authorize_interaction_url}?uri={uri}") - elsif redirect_url_link.nil? || redirect_url_link.template.nil? + elsif redirect_uri_template.nil? missing_resource_error else @addressable_template = Addressable::Template.new(redirect_uri_template) @@ -64,16 +64,12 @@ class RemoteFollow end def redirect_uri_template - redirect_url_link.template - end - - def redirect_url_link - acct_resource&.link('http://ostatus.org/schema/1.0/subscribe') + acct_resource&.link('http://ostatus.org/schema/1.0/subscribe', 'template') end def acct_resource @acct_resource ||= webfinger!("acct:#{acct}") - rescue Goldfinger::Error, HTTP::ConnectionError + rescue Webfinger::Error, HTTP::ConnectionError nil end diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb index 83fbf6d07..e5bd0c47c 100644 --- a/app/services/activitypub/fetch_remote_account_service.rb +++ b/app/services/activitypub/fetch_remote_account_service.rb @@ -39,17 +39,16 @@ class ActivityPub::FetchRemoteAccountService < BaseService webfinger = webfinger!("acct:#{@username}@#{@domain}") confirmed_username, confirmed_domain = split_acct(webfinger.subject) - return webfinger.link('self')&.href == @uri if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? + return webfinger.link('self', 'href') == @uri if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") @username, @domain = split_acct(webfinger.subject) - self_reference = webfinger.link('self') return false unless @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? - return false if self_reference&.href != @uri + return false if webfinger.link('self', 'href') != @uri true - rescue Goldfinger::Error + rescue Webfinger::Error false end diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 12f0f1b08..0a710f843 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -29,7 +29,7 @@ class ProcessMentionsService < BaseService if mention_undeliverable?(mentioned_account) begin mentioned_account = resolve_account_service.call(Regexp.last_match(1)) - rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError + rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError mentioned_account = nil end end diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index ba77552c6..3f7bb7cc5 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -26,11 +26,10 @@ class ResolveAccountService < BaseService @account ||= Account.find_remote(@username, @domain) - return @account if @account&.local? || !webfinger_update_due? + return @account if @account&.local? || @domain.nil? || !webfinger_update_due? # At this point we are in need of a Webfinger query, which may # yield us a different username/domain through a redirect - process_webfinger!(@uri) # Because the username/domain pair may be different than what @@ -47,7 +46,7 @@ class ResolveAccountService < BaseService # either needs to be created, or updated from fresh data process_account! - rescue Goldfinger::Error, WebfingerRedirectError, Oj::ParseError => e + rescue Webfinger::Error, WebfingerRedirectError, Oj::ParseError => e Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}" nil end @@ -118,11 +117,11 @@ class ResolveAccountService < BaseService end def activitypub_ready? - !@webfinger.link('self').nil? && ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(@webfinger.link('self').type) + ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(@webfinger.link('self', 'type')) end def actor_url - @actor_url ||= @webfinger.link('self').href + @actor_url ||= @webfinger.link('self', 'href') end def actor_json diff --git a/app/views/well_known/host_meta/show.xml.ruby b/app/views/well_known/host_meta/show.xml.ruby index 0a6bdc322..b4e867c5f 100644 --- a/app/views/well_known/host_meta/show.xml.ruby +++ b/app/views/well_known/host_meta/show.xml.ruby @@ -5,7 +5,6 @@ doc << Ox::Element.new('XRD').tap do |xrd| xrd << Ox::Element.new('Link').tap do |link| link['rel'] = 'lrdd' - link['type'] = 'application/xrd+xml' link['template'] = @webfinger_template end end diff --git a/spec/controllers/remote_follow_controller_spec.rb b/spec/controllers/remote_follow_controller_spec.rb index 3ef8f14d9..7312dde58 100644 --- a/spec/controllers/remote_follow_controller_spec.rb +++ b/spec/controllers/remote_follow_controller_spec.rb @@ -43,8 +43,7 @@ describe RemoteFollowController do end it 'renders new when template is nil' do - link_with_nil_template = double(template: nil) - resource_with_link = double(link: link_with_nil_template) + resource_with_link = double(link: nil) allow_any_instance_of(WebfingerHelper).to receive(:webfinger!).with('acct:user@example.com').and_return(resource_with_link) post :create, params: { account_username: @account.to_param, remote_follow: { acct: 'user@example.com' } } @@ -55,8 +54,7 @@ describe RemoteFollowController do context 'when webfinger values are good' do before do - link_with_template = double(template: 'http://example.com/follow_me?acct={uri}') - resource_with_link = double(link: link_with_template) + resource_with_link = double(link: 'http://example.com/follow_me?acct={uri}') allow_any_instance_of(WebfingerHelper).to receive(:webfinger!).with('acct:user@example.com').and_return(resource_with_link) post :create, params: { account_username: @account.to_param, remote_follow: { acct: 'user@example.com' } } end @@ -78,8 +76,8 @@ describe RemoteFollowController do expect(response).to render_template(:new) end - it 'renders new with error when goldfinger fails' do - allow_any_instance_of(WebfingerHelper).to receive(:webfinger!).with('acct:user@example.com').and_raise(Goldfinger::Error) + it 'renders new with error when webfinger fails' do + allow_any_instance_of(WebfingerHelper).to receive(:webfinger!).with('acct:user@example.com').and_raise(Webfinger::Error) post :create, params: { account_username: @account.to_param, remote_follow: { acct: 'user@example.com' } } expect(response).to render_template(:new) diff --git a/spec/controllers/well_known/host_meta_controller_spec.rb b/spec/controllers/well_known/host_meta_controller_spec.rb index b43ae19d8..643ba9cd3 100644 --- a/spec/controllers/well_known/host_meta_controller_spec.rb +++ b/spec/controllers/well_known/host_meta_controller_spec.rb @@ -12,7 +12,7 @@ describe WellKnown::HostMetaController, type: :controller do expect(response.body).to eq < - + XML end diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index d9c17470f..7d775a86d 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -108,6 +108,7 @@ RSpec.describe FeedManager do it 'returns false for status by followee mentioning another account' do bob.follow!(alice) + jeff.follow!(alice) status = PostStatusService.new.call(alice, text: 'Hey @jeff') expect(FeedManager.instance.filter?(:home, status, bob)).to be false end From dac3e362fd5c3d1be9e5d89149049a7eb2c6bbc4 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 8 Oct 2020 00:35:27 +0200 Subject: [PATCH 068/422] Fix unread notification marker not updating when mounting column (#14954) --- app/javascript/mastodon/reducers/notifications.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index b01db806f..98c91ebb2 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -151,7 +151,7 @@ const deleteByStatus = (state, statusId) => { const updateMounted = (state) => { state = state.update('mounted', count => count + 1); - if (!shouldCountUnreadNotifications(state)) { + if (!shouldCountUnreadNotifications(state, state.get('mounted') === 1)) { state = state.set('readMarkerId', state.get('lastReadId')); state = clearUnread(state); } @@ -167,14 +167,14 @@ const updateVisibility = (state, visibility) => { return state; }; -const shouldCountUnreadNotifications = (state) => { +const shouldCountUnreadNotifications = (state, ignoreScroll = false) => { const isTabVisible = state.get('isTabVisible'); const isOnTop = state.get('top'); const isMounted = state.get('mounted') > 0; const lastReadId = state.get('lastReadId'); const lastItemReached = !state.get('hasMore') || lastReadId === '0' || (!state.get('items').isEmpty() && compareId(state.get('items').last().get('id'), lastReadId) <= 0); - return !(isTabVisible && isOnTop && isMounted && lastItemReached); + return !(isTabVisible && (ignoreScroll || isOnTop) && isMounted && lastItemReached); }; const recountUnread = (state, last_read_id) => { From dc52a778e111a67a5275dd4afecf3991e279e005 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 9 Oct 2020 17:12:52 +0200 Subject: [PATCH 069/422] Fix issue checking for last unread notification when there are gaps (#14960) --- app/javascript/mastodon/reducers/notifications.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 98c91ebb2..216876134 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -172,7 +172,8 @@ const shouldCountUnreadNotifications = (state, ignoreScroll = false) => { const isOnTop = state.get('top'); const isMounted = state.get('mounted') > 0; const lastReadId = state.get('lastReadId'); - const lastItemReached = !state.get('hasMore') || lastReadId === '0' || (!state.get('items').isEmpty() && compareId(state.get('items').last().get('id'), lastReadId) <= 0); + const lastItem = state.get('items').findLast(item => item !== null); + const lastItemReached = !state.get('hasMore') || lastReadId === '0' || (lastItem && compareId(lastItem.get('id'), lastReadId) <= 0); return !(isTabVisible && (ignoreScroll || isOnTop) && isMounted && lastItemReached); }; From 5e1364c448222c964faa469b6b5bfe9adf701c1a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 12 Oct 2020 16:33:49 +0200 Subject: [PATCH 070/422] Add IP-based rules (#14963) --- app/controllers/admin/ip_blocks_controller.rb | 56 ++++++++ app/controllers/api/v1/accounts_controller.rb | 2 +- .../auth/registrations_controller.rb | 6 +- app/helpers/admin/action_logs_helper.rb | 4 + app/lib/fast_ip_map.rb | 32 +++++ app/models/concerns/expireable.rb | 10 +- app/models/form/ip_block_batch.rb | 31 ++++ app/models/ip_block.rb | 41 ++++++ app/models/user.rb | 16 ++- app/policies/ip_block_policy.rb | 15 ++ app/services/app_sign_up_service.rb | 4 +- app/views/admin/ip_blocks/_ip_block.html.haml | 11 ++ app/views/admin/ip_blocks/index.html.haml | 28 ++++ app/views/admin/ip_blocks/new.html.haml | 20 +++ .../admin/pending_accounts/_account.html.haml | 2 +- app/workers/scheduler/ip_cleanup_scheduler.rb | 18 ++- config/initializers/rack_attack.rb | 4 + config/locales/en.yml | 19 +++ config/locales/simple_form.en.yml | 15 ++ config/navigation.rb | 1 + config/routes.rb | 6 + db/migrate/20201008202037_create_ip_blocks.rb | 12 ++ .../20201008220312_add_sign_up_ip_to_users.rb | 5 + db/schema.rb | 12 +- lib/cli.rb | 4 + lib/mastodon/ip_blocks_cli.rb | 132 ++++++++++++++++++ spec/fabricators/ip_block_fabricator.rb | 6 + spec/lib/fast_ip_map_spec.rb | 21 +++ spec/models/ip_block_spec.rb | 5 + spec/services/app_sign_up_service_spec.rb | 13 +- 30 files changed, 530 insertions(+), 21 deletions(-) create mode 100644 app/controllers/admin/ip_blocks_controller.rb create mode 100644 app/lib/fast_ip_map.rb create mode 100644 app/models/form/ip_block_batch.rb create mode 100644 app/models/ip_block.rb create mode 100644 app/policies/ip_block_policy.rb create mode 100644 app/views/admin/ip_blocks/_ip_block.html.haml create mode 100644 app/views/admin/ip_blocks/index.html.haml create mode 100644 app/views/admin/ip_blocks/new.html.haml create mode 100644 db/migrate/20201008202037_create_ip_blocks.rb create mode 100644 db/migrate/20201008220312_add_sign_up_ip_to_users.rb create mode 100644 lib/mastodon/ip_blocks_cli.rb create mode 100644 spec/fabricators/ip_block_fabricator.rb create mode 100644 spec/lib/fast_ip_map_spec.rb create mode 100644 spec/models/ip_block_spec.rb diff --git a/app/controllers/admin/ip_blocks_controller.rb b/app/controllers/admin/ip_blocks_controller.rb new file mode 100644 index 000000000..92b8b0d2b --- /dev/null +++ b/app/controllers/admin/ip_blocks_controller.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +module Admin + class IpBlocksController < BaseController + def index + authorize :ip_block, :index? + + @ip_blocks = IpBlock.page(params[:page]) + @form = Form::IpBlockBatch.new + end + + def new + authorize :ip_block, :create? + + @ip_block = IpBlock.new(ip: '', severity: :no_access, expires_in: 1.year) + end + + def create + authorize :ip_block, :create? + + @ip_block = IpBlock.new(resource_params) + + if @ip_block.save + log_action :create, @ip_block + redirect_to admin_ip_blocks_path, notice: I18n.t('admin.ip_blocks.created_msg') + else + render :new + end + end + + def batch + @form = Form::IpBlockBatch.new(form_ip_block_batch_params.merge(current_account: current_account, action: action_from_button)) + @form.save + rescue ActionController::ParameterMissing + flash[:alert] = I18n.t('admin.ip_blocks.no_ip_block_selected') + rescue Mastodon::NotPermittedError + flash[:alert] = I18n.t('admin.custom_emojis.not_permitted') + ensure + redirect_to admin_ip_blocks_path + end + + private + + def resource_params + params.require(:ip_block).permit(:ip, :severity, :comment, :expires_in) + end + + def action_from_button + 'delete' if params[:delete] + end + + def form_ip_block_batch_params + params.require(:form_ip_block_batch).permit(ip_block_ids: []) + end + end +end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index aef51a647..4a97f0251 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -20,7 +20,7 @@ class Api::V1::AccountsController < Api::BaseController end def create - token = AppSignUpService.new.call(doorkeeper_token.application, account_params) + token = AppSignUpService.new.call(doorkeeper_token.application, request.remote_ip, account_params) response = Doorkeeper::OAuth::TokenResponse.new(token) headers.merge!(response.headers) diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index d31966248..eb0924190 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -45,9 +45,9 @@ class Auth::RegistrationsController < Devise::RegistrationsController def build_resource(hash = nil) super(hash) - resource.locale = I18n.locale - resource.invite_code = params[:invite_code] if resource.invite_code.blank? - resource.current_sign_in_ip = request.remote_ip + resource.locale = I18n.locale + resource.invite_code = params[:invite_code] if resource.invite_code.blank? + resource.sign_up_ip = request.remote_ip resource.build_account if resource.account.nil? end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 8e398c3b2..0f3ca36e2 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -29,6 +29,8 @@ module Admin::ActionLogsHelper link_to record.target_account.acct, admin_account_path(record.target_account_id) when 'Announcement' link_to truncate(record.text), edit_admin_announcement_path(record.id) + when 'IpBlock' + "#{record.ip}/#{record.ip.prefix} (#{I18n.t("simple_form.labels.ip_block.severities.#{record.severity}")})" end end @@ -48,6 +50,8 @@ module Admin::ActionLogsHelper end when 'Announcement' truncate(attributes['text'].is_a?(Array) ? attributes['text'].last : attributes['text']) + when 'IpBlock' + "#{attributes['ip']}/#{attributes['ip'].prefix} (#{I18n.t("simple_form.labels.ip_block.severities.#{attributes['severity']}")})" end end end diff --git a/app/lib/fast_ip_map.rb b/app/lib/fast_ip_map.rb new file mode 100644 index 000000000..ba30b45f3 --- /dev/null +++ b/app/lib/fast_ip_map.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class FastIpMap + MAX_IPV4_PREFIX = 32 + MAX_IPV6_PREFIX = 128 + + # @param [Enumerable] addresses + def initialize(addresses) + @fast_lookup = {} + @ranges = [] + + # Hash look-up is faster but only works for exact matches, so we split + # exact addresses from non-exact ones + addresses.each do |address| + if (address.ipv4? && address.prefix == MAX_IPV4_PREFIX) || (address.ipv6? && address.prefix == MAX_IPV6_PREFIX) + @fast_lookup[address.to_s] = true + else + @ranges << address + end + end + + # We're more likely to hit wider-reaching ranges when checking for + # inclusion, so make sure they're sorted first + @ranges.sort_by!(&:prefix) + end + + # @param [IPAddr] address + # @return [Boolean] + def include?(address) + @fast_lookup[address.to_s] || @ranges.any? { |cidr| cidr.include?(address) } + end +end diff --git a/app/models/concerns/expireable.rb b/app/models/concerns/expireable.rb index f7d2bab49..a66a4661b 100644 --- a/app/models/concerns/expireable.rb +++ b/app/models/concerns/expireable.rb @@ -6,7 +6,15 @@ module Expireable included do scope :expired, -> { where.not(expires_at: nil).where('expires_at < ?', Time.now.utc) } - attr_reader :expires_in + def expires_in + return @expires_in if defined?(@expires_in) + + if expires_at.nil? + nil + else + (expires_at - created_at).to_i + end + end def expires_in=(interval) self.expires_at = interval.to_i.seconds.from_now if interval.present? diff --git a/app/models/form/ip_block_batch.rb b/app/models/form/ip_block_batch.rb new file mode 100644 index 000000000..f6fe9b593 --- /dev/null +++ b/app/models/form/ip_block_batch.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class Form::IpBlockBatch + include ActiveModel::Model + include Authorization + include AccountableConcern + + attr_accessor :ip_block_ids, :action, :current_account + + def save + case action + when 'delete' + delete! + end + end + + private + + def ip_blocks + @ip_blocks ||= IpBlock.where(id: ip_block_ids) + end + + def delete! + ip_blocks.each { |ip_block| authorize(ip_block, :destroy?) } + + ip_blocks.each do |ip_block| + ip_block.destroy + log_action :destroy, ip_block + end + end +end diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb new file mode 100644 index 000000000..aedd3ca0d --- /dev/null +++ b/app/models/ip_block.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: ip_blocks +# +# id :bigint(8) not null, primary key +# created_at :datetime not null +# updated_at :datetime not null +# expires_at :datetime +# ip :inet default(#), not null +# severity :integer default(NULL), not null +# comment :text default(""), not null +# + +class IpBlock < ApplicationRecord + CACHE_KEY = 'blocked_ips' + + include Expireable + + enum severity: { + sign_up_requires_approval: 5000, + no_access: 9999, + } + + validates :ip, :severity, presence: true + + after_commit :reset_cache + + class << self + def blocked?(remote_ip) + blocked_ips_map = Rails.cache.fetch(CACHE_KEY) { FastIpMap.new(IpBlock.where(severity: :no_access).pluck(:ip)) } + blocked_ips_map.include?(remote_ip) + end + end + + private + + def reset_cache + Rails.cache.delete(CACHE_KEY) + end +end diff --git a/app/models/user.rb b/app/models/user.rb index 2c460e1fd..7c8124fed 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -41,6 +41,7 @@ # sign_in_token :string # sign_in_token_sent_at :datetime # webauthn_id :string +# sign_up_ip :inet # class User < ApplicationRecord @@ -97,7 +98,7 @@ class User < ApplicationRecord scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) } scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } - scope :matches_ip, ->(value) { left_joins(:session_activations).where('users.current_sign_in_ip <<= ?', value).or(left_joins(:session_activations).where('users.last_sign_in_ip <<= ?', value)).or(left_joins(:session_activations).where('session_activations.ip <<= ?', value)) } + scope :matches_ip, ->(value) { left_joins(:session_activations).where('users.current_sign_in_ip <<= ?', value).or(left_joins(:session_activations).where('users.sign_up_ip <<= ?', value)).or(left_joins(:session_activations).where('users.last_sign_in_ip <<= ?', value)).or(left_joins(:session_activations).where('session_activations.ip <<= ?', value)) } scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) } before_validation :sanitize_languages @@ -331,6 +332,7 @@ class User < ApplicationRecord arr << [current_sign_in_at, current_sign_in_ip] if current_sign_in_ip.present? arr << [last_sign_in_at, last_sign_in_ip] if last_sign_in_ip.present? + arr << [created_at, sign_up_ip] if sign_up_ip.present? arr.sort_by { |pair| pair.first || Time.now.utc }.uniq(&:last).reverse! end @@ -385,7 +387,17 @@ class User < ApplicationRecord end def set_approved - self.approved = open_registrations? || valid_invitation? || external? + self.approved = begin + if sign_up_from_ip_requires_approval? + false + else + open_registrations? || valid_invitation? || external? + end + end + end + + def sign_up_from_ip_requires_approval? + !sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists? end def open_registrations? diff --git a/app/policies/ip_block_policy.rb b/app/policies/ip_block_policy.rb new file mode 100644 index 000000000..34dbd746a --- /dev/null +++ b/app/policies/ip_block_policy.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class IpBlockPolicy < ApplicationPolicy + def index? + admin? + end + + def create? + admin? + end + + def destroy? + admin? + end +end diff --git a/app/services/app_sign_up_service.rb b/app/services/app_sign_up_service.rb index c9739c77d..e00694157 100644 --- a/app/services/app_sign_up_service.rb +++ b/app/services/app_sign_up_service.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true class AppSignUpService < BaseService - def call(app, params) + def call(app, remote_ip, params) return unless allowed_registrations? user_params = params.slice(:email, :password, :agreement, :locale) account_params = params.slice(:username) invite_request_params = { text: params[:reason] } - user = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params)) + user = User.create!(user_params.merge(created_by_application: app, sign_up_ip: remote_ip, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params)) Doorkeeper::AccessToken.create!(application: app, resource_owner_id: user.id, diff --git a/app/views/admin/ip_blocks/_ip_block.html.haml b/app/views/admin/ip_blocks/_ip_block.html.haml new file mode 100644 index 000000000..e07e2b444 --- /dev/null +++ b/app/views/admin/ip_blocks/_ip_block.html.haml @@ -0,0 +1,11 @@ +.batch-table__row + %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox + = f.check_box :ip_block_ids, { multiple: true, include_hidden: false }, ip_block.id + .batch-table__row__content + .batch-table__row__content__text + %samp= "#{ip_block.ip}/#{ip_block.ip.prefix}" + - if ip_block.comment.present? + • + = ip_block.comment + %br/ + = t("simple_form.labels.ip_block.severities.#{ip_block.severity}") diff --git a/app/views/admin/ip_blocks/index.html.haml b/app/views/admin/ip_blocks/index.html.haml new file mode 100644 index 000000000..a282a4cfe --- /dev/null +++ b/app/views/admin/ip_blocks/index.html.haml @@ -0,0 +1,28 @@ +- content_for :page_title do + = t('admin.ip_blocks.title') + +- content_for :header_tags do + = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + +- if can?(:create, :ip_block) + - content_for :heading_actions do + = link_to t('admin.ip_blocks.add_new'), new_admin_ip_block_path, class: 'button' + += form_for(@form, url: batch_admin_ip_blocks_path) do |f| + = hidden_field_tag :page, params[:page] || 1 + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - if can?(:destroy, :ip_block) + = f.button safe_join([fa_icon('times'), t('admin.ip_blocks.delete')]), name: :delete, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + .batch-table__body + - if @ip_blocks.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'ip_block', collection: @ip_blocks, locals: { f: f } + += paginate @ip_blocks + diff --git a/app/views/admin/ip_blocks/new.html.haml b/app/views/admin/ip_blocks/new.html.haml new file mode 100644 index 000000000..69f6b98b9 --- /dev/null +++ b/app/views/admin/ip_blocks/new.html.haml @@ -0,0 +1,20 @@ +- content_for :page_title do + = t('.title') + += simple_form_for @ip_block, url: admin_ip_blocks_path do |f| + = render 'shared/error_messages', object: @ip_block + + .fields-group + = f.input :ip, as: :string, wrapper: :with_block_label, input_html: { placeholder: '192.0.2.0/24' } + + .fields-group + = f.input :expires_in, wrapper: :with_block_label, collection: [1.day, 2.weeks, 1.month, 6.months, 1.year, 3.years].map(&:to_i), label_method: lambda { |i| I18n.t("admin.ip_blocks.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt') + + .fields-group + = f.input :severity, as: :radio_buttons, collection: IpBlock.severities.keys, include_blank: false, wrapper: :with_block_label, label_method: lambda { |severity| safe_join([I18n.t("simple_form.labels.ip_block.severities.#{severity}"), content_tag(:span, I18n.t("simple_form.hints.ip_block.severities.#{severity}"), class: 'hint')]) } + + .fields-group + = f.input :comment, as: :string, wrapper: :with_block_label + + .actions + = f.button :button, t('admin.ip_blocks.add_new'), type: :submit diff --git a/app/views/admin/pending_accounts/_account.html.haml b/app/views/admin/pending_accounts/_account.html.haml index 7a9796a67..5b475b59a 100644 --- a/app/views/admin/pending_accounts/_account.html.haml +++ b/app/views/admin/pending_accounts/_account.html.haml @@ -7,7 +7,7 @@ %strong= account.user_email = "(@#{account.username})" %br/ - = account.user_current_sign_in_ip + %samp= account.user_current_sign_in_ip • = t 'admin.accounts.time_in_queue', time: time_ago_in_words(account.user&.created_at) diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb index 6d38b52a2..853f20e25 100644 --- a/app/workers/scheduler/ip_cleanup_scheduler.rb +++ b/app/workers/scheduler/ip_cleanup_scheduler.rb @@ -3,13 +3,23 @@ class Scheduler::IpCleanupScheduler include Sidekiq::Worker - RETENTION_PERIOD = 1.year + IP_RETENTION_PERIOD = 1.year.freeze sidekiq_options lock: :until_executed, retry: 0 def perform - time_ago = RETENTION_PERIOD.ago - SessionActivation.where('updated_at < ?', time_ago).in_batches.destroy_all - User.where('last_sign_in_at < ?', time_ago).where.not(last_sign_in_ip: nil).in_batches.update_all(last_sign_in_ip: nil) + clean_ip_columns! + clean_expired_ip_blocks! + end + + private + + def clean_ip_columns! + SessionActivation.where('updated_at < ?', IP_RETENTION_PERIOD.ago).in_batches.destroy_all + User.where('current_sign_in_at < ?', IP_RETENTION_PERIOD.ago).in_batches.update_all(last_sign_in_ip: nil, current_sign_in_ip: nil, sign_up_ip: nil) + end + + def clean_expired_ip_blocks! + IpBlock.expired.in_batches.destroy_all end end diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index cd29afac5..6662ef40b 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -42,6 +42,10 @@ class Rack::Attack req.remote_ip == '127.0.0.1' || req.remote_ip == '::1' end + Rack::Attack.blocklist('deny from blocklist') do |req| + IpBlock.blocked?(req.remote_ip) + end + throttle('throttle_authenticated_api', limit: 300, period: 5.minutes) do |req| req.authenticated_user_id if req.api_request? end diff --git a/config/locales/en.yml b/config/locales/en.yml index 427b2c3fc..084006a2a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -223,12 +223,14 @@ en: create_domain_allow: Create Domain Allow create_domain_block: Create Domain Block create_email_domain_block: Create E-mail Domain Block + create_ip_block: Create IP rule demote_user: Demote User destroy_announcement: Delete Announcement destroy_custom_emoji: Delete Custom Emoji destroy_domain_allow: Delete Domain Allow destroy_domain_block: Delete Domain Block destroy_email_domain_block: Delete e-mail domain block + destroy_ip_block: Delete IP rule destroy_status: Delete Status disable_2fa_user: Disable 2FA disable_custom_emoji: Disable Custom Emoji @@ -259,12 +261,14 @@ en: create_domain_allow: "%{name} allowed federation with domain %{target}" create_domain_block: "%{name} blocked domain %{target}" create_email_domain_block: "%{name} blocked e-mail domain %{target}" + create_ip_block: "%{name} created rule for IP %{target}" demote_user: "%{name} demoted user %{target}" destroy_announcement: "%{name} deleted announcement %{target}" destroy_custom_emoji: "%{name} destroyed emoji %{target}" destroy_domain_allow: "%{name} disallowed federation with domain %{target}" destroy_domain_block: "%{name} unblocked domain %{target}" destroy_email_domain_block: "%{name} unblocked e-mail domain %{target}" + destroy_ip_block: "%{name} deleted rule for IP %{target}" destroy_status: "%{name} removed status by %{target}" disable_2fa_user: "%{name} disabled two factor requirement for user %{target}" disable_custom_emoji: "%{name} disabled emoji %{target}" @@ -449,6 +453,21 @@ en: expired: Expired title: Filter title: Invites + ip_blocks: + add_new: Create rule + created_msg: Successfully added new IP rule + delete: Delete + expires_in: + '1209600': 2 weeks + '15778476': 6 months + '2629746': 1 month + '31556952': 1 year + '86400': 1 day + '94670856': 3 years + new: + title: Create new IP rule + no_ip_block_selected: No IP rules were changed as none were selected + title: IP rules pending_accounts: title: Pending accounts (%{count}) relationships: diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 9b0af6d24..b69487953 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -65,6 +65,14 @@ en: data: CSV file exported from another Mastodon server invite_request: text: This will help us review your application + ip_block: + comment: Optional. Remember why you added this rule. + expires_in: IP addresses are a finite resource, they are sometimes shared and often change hands. For this reason, indefinite IP blocks are not recommended. + ip: Enter an IPv4 or IPv6 address. You can block entire ranges using the CIDR syntax. Be careful not to lock yourself out! + severities: + no_access: Block access to all resources + sign_up_requires_approval: New sign-ups will require your approval + severity: Choose what will happen with requests from this IP sessions: otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' webauthn: If it's an USB key be sure to insert it and, if necessary, tap it. @@ -170,6 +178,13 @@ en: comment: Comment invite_request: text: Why do you want to join? + ip_block: + comment: Comment + ip: IP + severities: + no_access: Block access + sign_up_requires_approval: Limit sign-ups + severity: Rule notification_emails: digest: Send digest e-mails favourite: Someone favourited your status diff --git a/config/navigation.rb b/config/navigation.rb index c113a3c3e..4a56abe18 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -41,6 +41,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :tags, safe_join([fa_icon('hashtag fw'), t('admin.tags.title')]), admin_tags_path, highlights_on: %r{/admin/tags} s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: whitelist_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.admin? } s.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? } + s.item :ip_blocks, safe_join([fa_icon('ban fw'), t('admin.ip_blocks.title')]), admin_ip_blocks_url, highlights_on: %r{/admin/ip_blocks}, if: -> { current_user.admin? } end n.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_dashboard_url, if: proc { current_user.staff? } do |s| diff --git a/config/routes.rb b/config/routes.rb index 8d9bc317b..a21dbd45e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -283,6 +283,12 @@ Rails.application.routes.draw do end end + resources :ip_blocks, only: [:index, :new, :create] do + collection do + post :batch + end + end + resources :account_moderation_notes, only: [:create, :destroy] resources :tags, only: [:index, :show, :update] do diff --git a/db/migrate/20201008202037_create_ip_blocks.rb b/db/migrate/20201008202037_create_ip_blocks.rb new file mode 100644 index 000000000..32acd6ede --- /dev/null +++ b/db/migrate/20201008202037_create_ip_blocks.rb @@ -0,0 +1,12 @@ +class CreateIpBlocks < ActiveRecord::Migration[5.2] + def change + create_table :ip_blocks do |t| + t.inet :ip, null: false, default: '0.0.0.0' + t.integer :severity, null: false, default: 0 + t.datetime :expires_at + t.text :comment, null: false, default: '' + + t.timestamps + end + end +end diff --git a/db/migrate/20201008220312_add_sign_up_ip_to_users.rb b/db/migrate/20201008220312_add_sign_up_ip_to_users.rb new file mode 100644 index 000000000..66cd624bb --- /dev/null +++ b/db/migrate/20201008220312_add_sign_up_ip_to_users.rb @@ -0,0 +1,5 @@ +class AddSignUpIpToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :sign_up_ip, :inet + end +end diff --git a/db/schema.rb b/db/schema.rb index 0029d620a..5805f3105 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_09_17_222734) do +ActiveRecord::Schema.define(version: 2020_10_08_220312) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -463,6 +463,15 @@ ActiveRecord::Schema.define(version: 2020_09_17_222734) do t.index ["user_id"], name: "index_invites_on_user_id" end + create_table "ip_blocks", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.datetime "expires_at" + t.inet "ip", default: "0.0.0.0", null: false + t.integer "severity", default: 0, null: false + t.text "comment", default: "", null: false + end + create_table "list_accounts", force: :cascade do |t| t.bigint "list_id", null: false t.bigint "account_id", null: false @@ -891,6 +900,7 @@ ActiveRecord::Schema.define(version: 2020_09_17_222734) do t.string "sign_in_token" t.datetime "sign_in_token_sent_at" t.string "webauthn_id" + t.inet "sign_up_ip" t.index ["account_id"], name: "index_users_on_account_id" t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id" diff --git a/lib/cli.rb b/lib/cli.rb index 9162144cc..2a4dd11b2 100644 --- a/lib/cli.rb +++ b/lib/cli.rb @@ -13,6 +13,7 @@ require_relative 'mastodon/preview_cards_cli' require_relative 'mastodon/cache_cli' require_relative 'mastodon/upgrade_cli' require_relative 'mastodon/email_domain_blocks_cli' +require_relative 'mastodon/ip_blocks_cli' require_relative 'mastodon/version' module Mastodon @@ -57,6 +58,9 @@ module Mastodon desc 'email_domain_blocks SUBCOMMAND ...ARGS', 'Manage e-mail domain blocks' subcommand 'email_domain_blocks', Mastodon::EmailDomainBlocksCLI + desc 'ip_blocks SUBCOMMAND ...ARGS', 'Manage IP blocks' + subcommand 'ip_blocks', Mastodon::IpBlocksCLI + option :dry_run, type: :boolean desc 'self-destruct', 'Erase the server from the federation' long_desc <<~LONG_DESC diff --git a/lib/mastodon/ip_blocks_cli.rb b/lib/mastodon/ip_blocks_cli.rb new file mode 100644 index 000000000..6aff36d90 --- /dev/null +++ b/lib/mastodon/ip_blocks_cli.rb @@ -0,0 +1,132 @@ +# frozen_string_literal: true + +require 'rubygems/package' +require_relative '../../config/boot' +require_relative '../../config/environment' +require_relative 'cli_helper' + +module Mastodon + class IpBlocksCLI < Thor + def self.exit_on_failure? + true + end + + option :severity, required: true, enum: %w(no_access sign_up_requires_approval), desc: 'Severity of the block' + option :comment, aliases: [:c], desc: 'Optional comment' + option :duration, aliases: [:d], type: :numeric, desc: 'Duration of the block in seconds' + option :force, type: :boolean, aliases: [:f], desc: 'Overwrite existing blocks' + desc 'add IP...', 'Add one or more IP blocks' + long_desc <<-LONG_DESC + Add one or more IP blocks. You can use CIDR syntax to + block IP ranges. You must specify --severity of the block. All + options will be copied for each IP block you create in one command. + + You can add a --comment. If an IP block already exists for one of + the provided IPs, it will be skipped unless you use the --force + option to overwrite it. + LONG_DESC + def add(*addresses) + if addresses.empty? + say('No IP(s) given', :red) + exit(1) + end + + skipped = 0 + processed = 0 + failed = 0 + + addresses.each do |address| + ip_block = IpBlock.find_by(ip: address) + + if ip_block.present? && !options[:force] + say("#{address} is already blocked", :yellow) + skipped += 1 + next + end + + ip_block ||= IpBlock.new(ip: address) + + ip_block.severity = options[:severity] + ip_block.comment = options[:comment] + ip_block.expires_in = options[:duration] + + if ip_block.save + processed += 1 + else + say("#{address} could not be saved", :red) + failed += 1 + end + end + + say("Added #{processed}, skipped #{skipped}, failed #{failed}", color(processed, failed)) + end + + option :force, type: :boolean, aliases: [:f], desc: 'Remove blocks for ranges that cover given IP(s)' + desc 'remove IP...', 'Remove one or more IP blocks' + long_desc <<-LONG_DESC + Remove one or more IP blocks. Normally, only exact matches are removed. If + you want to ensure that all of the given IP addresses are unblocked, you + can use --force which will also remove any blocks for IP ranges that would + cover the given IP(s). + LONG_DESC + def remove(*addresses) + if addresses.empty? + say('No IP(s) given', :red) + exit(1) + end + + processed = 0 + skipped = 0 + + addresses.each do |address| + ip_blocks = begin + if options[:force] + IpBlock.where('ip >>= ?', address) + else + IpBlock.where('ip <<= ?', address) + end + end + + if ip_blocks.empty? + say("#{address} is not yet blocked", :yellow) + skipped += 1 + next + end + + ip_blocks.in_batches.destroy_all + processed += 1 + end + + say("Removed #{processed}, skipped #{skipped}", color(processed, 0)) + end + + option :format, aliases: [:f], enum: %w(plain nginx), desc: 'Format of the output' + desc 'export', 'Export blocked IPs' + long_desc <<-LONG_DESC + Export blocked IPs. Different formats are supported for usage with other + tools. Only blocks with no_access severity are returned. + LONG_DESC + def export + IpBlock.where(severity: :no_access).find_each do |ip_block| + case options[:format] + when 'nginx' + puts "deny #{ip_block.ip}/#{ip_block.ip.prefix};" + else + puts "#{ip_block.ip}/#{ip_block.ip.prefix}" + end + end + end + + private + + def color(processed, failed) + if !processed.zero? && failed.zero? + :green + elsif failed.zero? + :yellow + else + :red + end + end + end +end diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb new file mode 100644 index 000000000..31dc336e6 --- /dev/null +++ b/spec/fabricators/ip_block_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator(:ip_block) do + ip "" + severity "" + expires_at "2020-10-08 22:20:37" + comment "MyText" +end \ No newline at end of file diff --git a/spec/lib/fast_ip_map_spec.rb b/spec/lib/fast_ip_map_spec.rb new file mode 100644 index 000000000..c66f64828 --- /dev/null +++ b/spec/lib/fast_ip_map_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe FastIpMap do + describe '#include?' do + subject { described_class.new([IPAddr.new('20.4.0.0/16'), IPAddr.new('145.22.30.0/24'), IPAddr.new('189.45.86.3')])} + + it 'returns true for an exact match' do + expect(subject.include?(IPAddr.new('189.45.86.3'))).to be true + end + + it 'returns true for a range match' do + expect(subject.include?(IPAddr.new('20.4.45.7'))).to be true + end + + it 'returns false for no match' do + expect(subject.include?(IPAddr.new('145.22.40.64'))).to be false + end + end +end diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb new file mode 100644 index 000000000..6603c6417 --- /dev/null +++ b/spec/models/ip_block_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe IpBlock, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index e7c7f3ba1..e0c83b704 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -3,6 +3,7 @@ require 'rails_helper' RSpec.describe AppSignUpService, type: :service do let(:app) { Fabricate(:application, scopes: 'read write') } let(:good_params) { { username: 'alice', password: '12345678', email: 'good@email.com', agreement: true } } + let(:remote_ip) { IPAddr.new('198.0.2.1') } subject { described_class.new } @@ -10,16 +11,16 @@ RSpec.describe AppSignUpService, type: :service do it 'returns nil when registrations are closed' do tmp = Setting.registrations_mode Setting.registrations_mode = 'none' - expect(subject.call(app, good_params)).to be_nil + expect(subject.call(app, remote_ip, good_params)).to be_nil Setting.registrations_mode = tmp end it 'raises an error when params are missing' do - expect { subject.call(app, {}) }.to raise_error ActiveRecord::RecordInvalid + expect { subject.call(app, remote_ip, {}) }.to raise_error ActiveRecord::RecordInvalid end it 'creates an unconfirmed user with access token' do - access_token = subject.call(app, good_params) + access_token = subject.call(app, remote_ip, good_params) expect(access_token).to_not be_nil user = User.find_by(id: access_token.resource_owner_id) expect(user).to_not be_nil @@ -27,13 +28,13 @@ RSpec.describe AppSignUpService, type: :service do end it 'creates access token with the app\'s scopes' do - access_token = subject.call(app, good_params) + access_token = subject.call(app, remote_ip, good_params) expect(access_token).to_not be_nil expect(access_token.scopes.to_s).to eq 'read write' end it 'creates an account' do - access_token = subject.call(app, good_params) + access_token = subject.call(app, remote_ip, good_params) expect(access_token).to_not be_nil user = User.find_by(id: access_token.resource_owner_id) expect(user).to_not be_nil @@ -42,7 +43,7 @@ RSpec.describe AppSignUpService, type: :service do end it 'creates an account with invite request text' do - access_token = subject.call(app, good_params.merge(reason: 'Foo bar')) + access_token = subject.call(app, remote_ip, good_params.merge(reason: 'Foo bar')) expect(access_token).to_not be_nil user = User.find_by(id: access_token.resource_owner_id) expect(user).to_not be_nil From f54ca3d08e068af07a5b7a8b139e7658b3236db8 Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 13 Oct 2020 00:37:21 +0200 Subject: [PATCH 071/422] Fix browser notification permission request logic (#13543) * Add notification permission handling code * Request notification permission when enabling any notification setting * Add badge to notification settings when permissions insufficient * Disable alerts by default, requesting permission and enable them on onboarding --- .../mastodon/actions/notifications.js | 45 +++++++++++++++++++ app/javascript/mastodon/actions/onboarding.js | 12 +++++ .../mastodon/components/column_header.js | 18 +++++++- .../mastodon/components/icon_with_badge.js | 4 +- .../components/column_settings.js | 39 +++++++++++++++- .../containers/column_settings_container.js | 35 ++++++++++++++- .../mastodon/features/notifications/index.js | 3 ++ .../components/notifications_counter_icon.js | 1 + app/javascript/mastodon/features/ui/index.js | 4 -- app/javascript/mastodon/main.js | 2 + .../mastodon/reducers/notifications.js | 8 ++++ app/javascript/mastodon/reducers/settings.js | 10 ++--- .../mastodon/utils/notifications.js | 29 ++++++++++++ .../styles/mastodon/components.scss | 20 +++++++++ 14 files changed, 215 insertions(+), 15 deletions(-) create mode 100644 app/javascript/mastodon/utils/notifications.js diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index cd03a1d78..c4fa66428 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -16,6 +16,7 @@ import { getFiltersRegex } from '../selectors'; import { usePendingItems as preferPendingItems } from 'mastodon/initial_state'; import compareId from 'mastodon/compare_id'; import { searchTextFromRawStatus } from 'mastodon/actions/importer/normalizer'; +import { requestNotificationPermission } from '../utils/notifications'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; @@ -33,8 +34,12 @@ export const NOTIFICATIONS_LOAD_PENDING = 'NOTIFICATIONS_LOAD_PENDING'; export const NOTIFICATIONS_MOUNT = 'NOTIFICATIONS_MOUNT'; export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; + export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; +export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; +export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -235,6 +240,46 @@ export const unmountNotifications = () => ({ type: NOTIFICATIONS_UNMOUNT, }); + export const markNotificationsAsRead = () => ({ type: NOTIFICATIONS_MARK_AS_READ, }); + +// Browser support +export function setupBrowserNotifications() { + return dispatch => { + dispatch(setBrowserSupport('Notification' in window)); + if ('Notification' in window) { + dispatch(setBrowserPermission(Notification.permission)); + } + + if ('Notification' in window && 'permissions' in navigator) { + navigator.permissions.query({ name: 'notifications' }).then((status) => { + status.onchange = () => dispatch(setBrowserPermission(Notification.permission)); + }); + } + }; +} + +export function requestBrowserPermission(callback = noOp) { + return dispatch => { + requestNotificationPermission((permission) => { + dispatch(setBrowserPermission(permission)); + callback(permission); + }); + }; +}; + +export function setBrowserSupport (value) { + return { + type: NOTIFICATIONS_SET_BROWSER_SUPPORT, + value, + }; +} + +export function setBrowserPermission (value) { + return { + type: NOTIFICATIONS_SET_BROWSER_PERMISSION, + value, + }; +} diff --git a/app/javascript/mastodon/actions/onboarding.js b/app/javascript/mastodon/actions/onboarding.js index a1dd3a731..90f1da7bd 100644 --- a/app/javascript/mastodon/actions/onboarding.js +++ b/app/javascript/mastodon/actions/onboarding.js @@ -1,8 +1,20 @@ import { changeSetting, saveSettings } from './settings'; +import { requestBrowserPermission } from './notifications'; export const INTRODUCTION_VERSION = 20181216044202; export const closeOnboarding = () => dispatch => { dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION)); dispatch(saveSettings()); + + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); + dispatch(saveSettings()); + } + })); }; diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js index 1bb583583..236e92296 100644 --- a/app/javascript/mastodon/components/column_header.js +++ b/app/javascript/mastodon/components/column_header.js @@ -34,6 +34,7 @@ class ColumnHeader extends React.PureComponent { onMove: PropTypes.func, onClick: PropTypes.func, appendContent: PropTypes.node, + collapseIssues: PropTypes.bool, }; state = { @@ -83,7 +84,7 @@ class ColumnHeader extends React.PureComponent { } render () { - const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent } = this.props; + const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent, collapseIssues } = this.props; const { collapsed, animating } = this.state; const wrapperClassName = classNames('column-header__wrapper', { @@ -145,7 +146,20 @@ class ColumnHeader extends React.PureComponent { } if (children || (multiColumn && this.props.onPin)) { - collapseButton = ; + collapseButton = ( + + ); } const hasTitle = icon && title; diff --git a/app/javascript/mastodon/components/icon_with_badge.js b/app/javascript/mastodon/components/icon_with_badge.js index 7851eb4be..4214eccfd 100644 --- a/app/javascript/mastodon/components/icon_with_badge.js +++ b/app/javascript/mastodon/components/icon_with_badge.js @@ -4,16 +4,18 @@ import Icon from 'mastodon/components/icon'; const formatNumber = num => num > 40 ? '40+' : num; -const IconWithBadge = ({ id, count, className }) => ( +const IconWithBadge = ({ id, count, issueBadge, className }) => ( {count > 0 && {formatNumber(count)}} + {issueBadge && } ); IconWithBadge.propTypes = { id: PropTypes.string.isRequired, count: PropTypes.number.isRequired, + issueBadge: PropTypes.bool, className: PropTypes.string, }; diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js index 8bd03fbda..be88df6d6 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.js +++ b/app/javascript/mastodon/features/notifications/components/column_settings.js @@ -4,6 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { FormattedMessage } from 'react-intl'; import ClearColumnButton from './clear_column_button'; import SettingToggle from './setting_toggle'; +import Icon from 'mastodon/components/icon'; export default class ColumnSettings extends React.PureComponent { @@ -12,6 +13,10 @@ export default class ColumnSettings extends React.PureComponent { pushSettings: ImmutablePropTypes.map.isRequired, onChange: PropTypes.func.isRequired, onClear: PropTypes.func.isRequired, + onRequestNotificationPermission: PropTypes.func.isRequired, + alertsEnabled: PropTypes.bool, + browserSupport: PropTypes.bool, + browserPermission: PropTypes.bool, }; onPushChange = (path, checked) => { @@ -19,7 +24,7 @@ export default class ColumnSettings extends React.PureComponent { } render () { - const { settings, pushSettings, onChange, onClear } = this.props; + const { settings, pushSettings, onChange, onClear, onRequestNotificationPermission, alertsEnabled, browserSupport, browserPermission } = this.props; const filterShowStr = ; const filterAdvancedStr = ; @@ -30,8 +35,40 @@ export default class ColumnSettings extends React.PureComponent { const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed'); const pushStr = showPushSettings && ; + const settingsIssues = []; + + if (alertsEnabled && browserSupport && browserPermission !== 'granted') { + if (browserPermission === 'denied') { + settingsIssues.push( + + ); + } else if (browserPermission === 'default') { + settingsIssues.push( + + ); + } + } + return (
+ {settingsIssues && ( +
+ {settingsIssues} +
+ )} +
diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index a67f26295..664c37980 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -3,28 +3,55 @@ import { defineMessages, injectIntl } from 'react-intl'; import ColumnSettings from '../components/column_settings'; import { changeSetting } from '../../../actions/settings'; import { setFilter } from '../../../actions/notifications'; -import { clearNotifications } from '../../../actions/notifications'; +import { clearNotifications, requestBrowserPermission } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { openModal } from '../../../actions/modal'; +import { showAlert } from '../../../actions/alerts'; const messages = defineMessages({ clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' }, clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' }, + permissionDenied: { id: 'notifications.permission_denied', defaultMessage: 'Cannot enable desktop notifications as permission has been denied.' }, }); const mapStateToProps = state => ({ settings: state.getIn(['settings', 'notifications']), pushSettings: state.get('push_notifications'), + alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true), + browserSupport: state.getIn(['notifications', 'browserSupport']), + browserPermission: state.getIn(['notifications', 'browserPermission']), }); const mapDispatchToProps = (dispatch, { intl }) => ({ onChange (path, checked) { if (path[0] === 'push') { - dispatch(changePushNotifications(path.slice(1), checked)); + if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changePushNotifications(path.slice(1), checked)); + } else { + dispatch(showAlert(undefined, messages.permissionDenied)); + } + })); + } else { + dispatch(changePushNotifications(path.slice(1), checked)); + } } else if (path[0] === 'quickFilter') { dispatch(changeSetting(['notifications', ...path], checked)); dispatch(setFilter('all')); + } else if (path[0] === 'alerts' && checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { + dispatch(requestBrowserPermission((permission) => { + if (permission === 'granted') { + dispatch(changeSetting(['notifications', ...path], checked)); + } else { + dispatch(showAlert(undefined, messages.permissionDenied)); + } + })); + } else { + dispatch(changeSetting(['notifications', ...path], checked)); + } } else { dispatch(changeSetting(['notifications', ...path], checked)); } @@ -38,6 +65,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ })); }, + onRequestNotificationPermission () { + dispatch(requestBrowserPermission()); + }, + }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings)); diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 68afe593d..5e87faa08 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -55,6 +55,7 @@ const mapStateToProps = state => ({ numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, lastReadId: state.getIn(['notifications', 'readMarkerId']), canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0), + needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) !== 'granted', }); export default @connect(mapStateToProps) @@ -75,6 +76,7 @@ class Notifications extends React.PureComponent { numPending: PropTypes.number, lastReadId: PropTypes.string, canMarkAsRead: PropTypes.bool, + needsNotificationPermission: PropTypes.bool, }; static defaultProps = { @@ -250,6 +252,7 @@ class Notifications extends React.PureComponent { pinned={pinned} multiColumn={multiColumn} extraButton={extraButton} + collapseIssues={this.props.needsNotificationPermission} > diff --git a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js index da553cd9f..b8932704b 100644 --- a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js +++ b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js @@ -3,6 +3,7 @@ import IconWithBadge from 'mastodon/components/icon_with_badge'; const mapStateToProps = state => ({ count: state.getIn(['notifications', 'unread']), + issueBadge: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) !== 'granted', id: 'bell', }); diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 91c86b505..c6df49a5f 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -366,10 +366,6 @@ class UI extends React.PureComponent { navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage); } - if (typeof window.Notification !== 'undefined' && Notification.permission === 'default') { - window.setTimeout(() => Notification.requestPermission(), 120 * 1000); - } - this.props.dispatch(fetchMarkers()); this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); diff --git a/app/javascript/mastodon/main.js b/app/javascript/mastodon/main.js index da4884fd3..bda51f692 100644 --- a/app/javascript/mastodon/main.js +++ b/app/javascript/mastodon/main.js @@ -1,4 +1,5 @@ import * as registerPushNotifications from './actions/push_notifications'; +import { setupBrowserNotifications } from './actions/notifications'; import { default as Mastodon, store } from './containers/mastodon'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -22,6 +23,7 @@ function main() { const props = JSON.parse(mountNode.getAttribute('data-props')); ReactDOM.render(, mountNode); + store.dispatch(setupBrowserNotifications()); if (process.env.NODE_ENV === 'production') { // avoid offline in dev mode because it's harder to debug require('offline-plugin/runtime').install(); diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 216876134..1d4874717 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -10,6 +10,8 @@ import { NOTIFICATIONS_MOUNT, NOTIFICATIONS_UNMOUNT, NOTIFICATIONS_MARK_AS_READ, + NOTIFICATIONS_SET_BROWSER_SUPPORT, + NOTIFICATIONS_SET_BROWSER_PERMISSION, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, @@ -40,6 +42,8 @@ const initialState = ImmutableMap({ readMarkerId: '0', isTabVisible: true, isLoading: false, + browserSupport: false, + browserPermission: 'default', }); const notificationToMap = notification => ImmutableMap({ @@ -242,6 +246,10 @@ export default function notifications(state = initialState, action) { case NOTIFICATIONS_MARK_AS_READ: const lastNotification = state.get('items').find(item => item !== null); return lastNotification ? recountUnread(state, lastNotification.get('id')) : state; + case NOTIFICATIONS_SET_BROWSER_SUPPORT: + return state.set('browserSupport', action.value); + case NOTIFICATIONS_SET_BROWSER_PERMISSION: + return state.set('browserPermission', action.value); default: return state; } diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index efef2ad9a..886353de3 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -29,12 +29,12 @@ const initialState = ImmutableMap({ notifications: ImmutableMap({ alerts: ImmutableMap({ - follow: true, + follow: false, follow_request: false, - favourite: true, - reblog: true, - mention: true, - poll: true, + favourite: false, + reblog: false, + mention: false, + poll: false, }), quickFilter: ImmutableMap({ diff --git a/app/javascript/mastodon/utils/notifications.js b/app/javascript/mastodon/utils/notifications.js new file mode 100644 index 000000000..ab119c2e3 --- /dev/null +++ b/app/javascript/mastodon/utils/notifications.js @@ -0,0 +1,29 @@ +// Handles browser quirks, based on +// https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API + +const checkNotificationPromise = () => { + try { + Notification.requestPermission().then(); + } catch(e) { + return false; + } + + return true; +}; + +const handlePermission = (permission, callback) => { + // Whatever the user answers, we make sure Chrome stores the information + if(!('permission' in Notification)) { + Notification.permission = permission; + } + + callback(Notification.permission); +}; + +export const requestNotificationPermission = (callback) => { + if (checkNotificationPromise()) { + Notification.requestPermission().then((permission) => handlePermission(permission, callback)); + } else { + Notification.requestPermission((permission) => handlePermission(permission, callback)); + } +}; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index ec49ae120..8a8f20baa 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2418,6 +2418,17 @@ a.account__display-name { line-height: 14px; color: $primary-text-color; } + + &__issue-badge { + position: absolute; + left: 11px; + bottom: 1px; + display: block; + background: $error-red; + border-radius: 50%; + width: 0.625rem; + height: 0.625rem; + } } .column-link--transparent .icon-with-badge__badge { @@ -3453,6 +3464,15 @@ a.status-card.compact:hover { cursor: pointer; } +.column-header__issue-btn { + color: $warning-red; + + &:hover { + color: $error-red; + text-decoration: underline; + } +} + .column-header__icon { display: inline-block; margin-right: 5px; From 96761752eccfc0d239974a24e0cc2d74c6aee7ac Mon Sep 17 00:00:00 2001 From: OSAMU SATO Date: Tue, 13 Oct 2020 08:01:14 +0900 Subject: [PATCH 072/422] Add duration parameter to muting. (#13831) * Adding duration to muting. * Remove useless checks --- app/controllers/api/v1/accounts_controller.rb | 2 +- app/controllers/api/v1/mutes_controller.rb | 2 +- app/javascript/mastodon/actions/accounts.js | 4 +- app/javascript/mastodon/actions/mutes.js | 10 +++++ app/javascript/mastodon/components/account.js | 7 +++ .../features/ui/components/mute_modal.js | 43 ++++++++++++++++--- app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/ja.json | 2 + app/javascript/mastodon/reducers/mutes.js | 4 ++ .../styles/mastodon-light/diff.scss | 5 +++ .../styles/mastodon/components.scss | 16 +++++++ app/models/concerns/account_interactions.rb | 7 ++- app/models/mute.rb | 2 + .../rest/muted_account_serializer.rb | 10 +++++ app/services/mute_service.rb | 6 ++- app/workers/delete_mute_worker.rb | 10 +++++ .../20200317021758_add_expires_at_to_mutes.rb | 5 +++ db/schema.rb | 1 + 18 files changed, 124 insertions(+), 14 deletions(-) create mode 100644 app/serializers/rest/muted_account_serializer.rb create mode 100644 app/workers/delete_mute_worker.rb create mode 100644 db/migrate/20200317021758_add_expires_at_to_mutes.rb diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 4a97f0251..3e66ff212 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -42,7 +42,7 @@ class Api::V1::AccountsController < Api::BaseController end def mute - MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications)) + MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration] || 0)) render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships end diff --git a/app/controllers/api/v1/mutes_controller.rb b/app/controllers/api/v1/mutes_controller.rb index 805d0dee2..fd52511d7 100644 --- a/app/controllers/api/v1/mutes_controller.rb +++ b/app/controllers/api/v1/mutes_controller.rb @@ -7,7 +7,7 @@ class Api::V1::MutesController < Api::BaseController def index @accounts = load_accounts - render json: @accounts, each_serializer: REST::AccountSerializer + render json: @accounts, each_serializer: REST::MutedAccountSerializer end private diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index 723c04e55..58b636602 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -257,11 +257,11 @@ export function unblockAccountFail(error) { }; -export function muteAccount(id, notifications) { +export function muteAccount(id, notifications, duration=0) { return (dispatch, getState) => { dispatch(muteAccountRequest(id)); - api(getState).post(`/api/v1/accounts/${id}/mute`, { notifications }).then(response => { + api(getState).post(`/api/v1/accounts/${id}/mute`, { notifications, duration }).then(response => { // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers dispatch(muteAccountSuccess(response.data, getState().get('statuses'))); }).catch(error => { diff --git a/app/javascript/mastodon/actions/mutes.js b/app/javascript/mastodon/actions/mutes.js index 9f645faee..d8874f353 100644 --- a/app/javascript/mastodon/actions/mutes.js +++ b/app/javascript/mastodon/actions/mutes.js @@ -13,6 +13,7 @@ export const MUTES_EXPAND_FAIL = 'MUTES_EXPAND_FAIL'; export const MUTES_INIT_MODAL = 'MUTES_INIT_MODAL'; export const MUTES_TOGGLE_HIDE_NOTIFICATIONS = 'MUTES_TOGGLE_HIDE_NOTIFICATIONS'; +export const MUTES_CHANGE_DURATION = 'MUTES_CHANGE_DURATION'; export function fetchMutes() { return (dispatch, getState) => { @@ -104,3 +105,12 @@ export function toggleHideNotifications() { dispatch({ type: MUTES_TOGGLE_HIDE_NOTIFICATIONS }); }; } + +export function changeMuteDuration(duration) { + return dispatch => { + dispatch({ + type: MUTES_CHANGE_DURATION, + duration, + }); + }; +} diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js index 2705a6001..0e40ee1d6 100644 --- a/app/javascript/mastodon/components/account.js +++ b/app/javascript/mastodon/components/account.js @@ -8,6 +8,7 @@ import IconButton from './icon_button'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { me } from '../initial_state'; +import RelativeTimestamp from './relative_timestamp'; const messages = defineMessages({ follow: { id: 'account.follow', defaultMessage: 'Follow' }, @@ -107,11 +108,17 @@ class Account extends ImmutablePureComponent { } } + let mute_expires_at; + if (account.get('mute_expires_at')) { + mute_expires_at =
; + } + return (
+ {mute_expires_at}
diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.js b/app/javascript/mastodon/features/ui/components/mute_modal.js index 852830c3c..51228b532 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.js +++ b/app/javascript/mastodon/features/ui/components/mute_modal.js @@ -1,25 +1,31 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; -import { injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import Toggle from 'react-toggle'; import Button from '../../../components/button'; import { closeModal } from '../../../actions/modal'; import { muteAccount } from '../../../actions/accounts'; -import { toggleHideNotifications } from '../../../actions/mutes'; +import { toggleHideNotifications, changeMuteDuration } from '../../../actions/mutes'; +const messages = defineMessages({ + minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' }, + hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' }, + days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' }, +}); const mapStateToProps = state => { return { account: state.getIn(['mutes', 'new', 'account']), notifications: state.getIn(['mutes', 'new', 'notifications']), + muteDuration: state.getIn(['mutes', 'new', 'duration']), }; }; const mapDispatchToProps = dispatch => { return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)); + onConfirm(account, notifications, muteDuration) { + dispatch(muteAccount(account.get('id'), notifications, muteDuration)); }, onClose() { @@ -29,6 +35,10 @@ const mapDispatchToProps = dispatch => { onToggleNotifications() { dispatch(toggleHideNotifications()); }, + + onChangeMuteDuration(e) { + dispatch(changeMuteDuration(e.target.value)); + }, }; }; @@ -43,6 +53,8 @@ class MuteModal extends React.PureComponent { onConfirm: PropTypes.func.isRequired, onToggleNotifications: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, + muteDuration: PropTypes.number.isRequired, + onChangeMuteDuration: PropTypes.func.isRequired, }; componentDidMount() { @@ -51,7 +63,7 @@ class MuteModal extends React.PureComponent { handleClick = () => { this.props.onClose(); - this.props.onConfirm(this.props.account, this.props.notifications); + this.props.onConfirm(this.props.account, this.props.notifications, this.props.muteDuration); } handleCancel = () => { @@ -66,8 +78,12 @@ class MuteModal extends React.PureComponent { this.props.onToggleNotifications(); } + changeMuteDuration = (e) => { + this.props.onChangeMuteDuration(e); + } + render () { - const { account, notifications } = this.props; + const { account, notifications, muteDuration, intl } = this.props; return (
@@ -91,6 +107,21 @@ class MuteModal extends React.PureComponent {
+
+ : + + {/* eslint-disable-next-line jsx-a11y/no-onchange */} + +
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 9c8b3d11b..b53731340 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -276,6 +276,8 @@ "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.duration": "Duration", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ec3d0ee59..2a1df987c 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -268,6 +268,8 @@ "missing_indicator.label": "見つかりません", "missing_indicator.sublabel": "見つかりませんでした", "mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?", + "mute_modal.duration": "ミュートする期間", + "mute_modal.indefinite": "無期限", "navigation_bar.apps": "アプリ", "navigation_bar.blocks": "ブロックしたユーザー", "navigation_bar.bookmarks": "ブックマーク", diff --git a/app/javascript/mastodon/reducers/mutes.js b/app/javascript/mastodon/reducers/mutes.js index 4672e5097..a9eb61ff8 100644 --- a/app/javascript/mastodon/reducers/mutes.js +++ b/app/javascript/mastodon/reducers/mutes.js @@ -3,12 +3,14 @@ import Immutable from 'immutable'; import { MUTES_INIT_MODAL, MUTES_TOGGLE_HIDE_NOTIFICATIONS, + MUTES_CHANGE_DURATION, } from '../actions/mutes'; const initialState = Immutable.Map({ new: Immutable.Map({ account: null, notifications: true, + duration: 0, }), }); @@ -21,6 +23,8 @@ export default function mutes(state = initialState, action) { }); case MUTES_TOGGLE_HIDE_NOTIFICATIONS: return state.updateIn(['new', 'notifications'], (old) => !old); + case MUTES_CHANGE_DURATION: + return state.setIn(['new', 'duration'], Number(action.duration)); default: return state; } diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 6b81e7623..64f4adb84 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -759,3 +759,8 @@ html { .compose-form .compose-form__warning { box-shadow: none; } + +.mute-modal select { + border: 1px solid lighten($ui-base-color, 8%); + background: $simple-background-color url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; +} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 8a8f20baa..378d1640f 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5074,6 +5074,22 @@ a.status-card.compact:hover { } } } + + select { + appearance: none; + box-sizing: border-box; + font-size: 14px; + color: $inverted-text-color; + display: inline-block; + width: auto; + outline: 0; + font-family: inherit; + background: $simple-background-color url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; + border: 1px solid darken($simple-background-color, 14%); + border-radius: 4px; + padding: 6px 10px; + padding-right: 30px; + } } .confirmation-modal__container, diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 427ebdae2..6a0ad5aa9 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -131,9 +131,12 @@ module AccountInteractions .find_or_create_by!(target_account: other_account) end - def mute!(other_account, notifications: nil) + def mute!(other_account, notifications: nil, duration: 0) notifications = true if notifications.nil? - mute = mute_relationships.create_with(hide_notifications: notifications).find_or_create_by!(target_account: other_account) + mute = mute_relationships.create_with(hide_notifications: notifications).find_or_initialize_by(target_account: other_account) + mute.expires_in = duration.zero? ? nil : duration + mute.save! + remove_potential_friendship(other_account) # When toggling a mute between hiding and allowing notifications, the mute will already exist, so the find_or_create_by! call will return the existing Mute without updating the hide_notifications attribute. Therefore, we check that hide_notifications? is what we want and set it if it isn't. diff --git a/app/models/mute.rb b/app/models/mute.rb index 0e00c2278..578345ef6 100644 --- a/app/models/mute.rb +++ b/app/models/mute.rb @@ -9,11 +9,13 @@ # account_id :bigint(8) not null # target_account_id :bigint(8) not null # hide_notifications :boolean default(TRUE), not null +# expires_at :datetime # class Mute < ApplicationRecord include Paginable include RelationshipCacheable + include Expireable belongs_to :account belongs_to :target_account, class_name: 'Account' diff --git a/app/serializers/rest/muted_account_serializer.rb b/app/serializers/rest/muted_account_serializer.rb new file mode 100644 index 000000000..3ddd706dc --- /dev/null +++ b/app/serializers/rest/muted_account_serializer.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class REST::MutedAccountSerializer < REST::AccountSerializer + attribute :mute_expires_at + + def mute_expires_at + mute = current_user.account.mute_relationships.find_by(target_account_id: object.id) + mute && !mute.expired? ? mute.expires_at : nil + end +end diff --git a/app/services/mute_service.rb b/app/services/mute_service.rb index 676804cb9..9ae9afd62 100644 --- a/app/services/mute_service.rb +++ b/app/services/mute_service.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true class MuteService < BaseService - def call(account, target_account, notifications: nil) + def call(account, target_account, notifications: nil, duration: 0) return if account.id == target_account.id - mute = account.mute!(target_account, notifications: notifications) + mute = account.mute!(target_account, notifications: notifications, duration: duration) if mute.hide_notifications? BlockWorker.perform_async(account.id, target_account.id) @@ -12,6 +12,8 @@ class MuteService < BaseService MuteWorker.perform_async(account.id, target_account.id) end + DeleteMuteWorker.perform_at(duration.seconds, mute.id) if duration != 0 + mute end end diff --git a/app/workers/delete_mute_worker.rb b/app/workers/delete_mute_worker.rb new file mode 100644 index 000000000..eb031020e --- /dev/null +++ b/app/workers/delete_mute_worker.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class DeleteMuteWorker + include Sidekiq::Worker + + def perform(mute_id) + mute = Mute.find_by(id: mute_id) + UnmuteService.new.call(mute.account, mute.target_account) if mute&.expired? + end +end diff --git a/db/migrate/20200317021758_add_expires_at_to_mutes.rb b/db/migrate/20200317021758_add_expires_at_to_mutes.rb new file mode 100644 index 000000000..eaae8319d --- /dev/null +++ b/db/migrate/20200317021758_add_expires_at_to_mutes.rb @@ -0,0 +1,5 @@ +class AddExpiresAtToMutes < ActiveRecord::Migration[5.2] + def change + add_column :mutes, :expires_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 5805f3105..262e25b3b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -545,6 +545,7 @@ ActiveRecord::Schema.define(version: 2020_10_08_220312) do t.boolean "hide_notifications", default: true, null: false t.bigint "account_id", null: false t.bigint "target_account_id", null: false + t.datetime "expires_at" t.index ["account_id", "target_account_id"], name: "index_mutes_on_account_id_and_target_account_id", unique: true t.index ["target_account_id"], name: "index_mutes_on_target_account_id" end From 53b22d247fb8500ea977774d727fe0d41950189c Mon Sep 17 00:00:00 2001 From: Alex Dunn Date: Mon, 12 Oct 2020 16:19:13 -0700 Subject: [PATCH 073/422] helm: add optional cron job to run `tootctl remove media` (#14396) --- chart/templates/cronjob-media-remove.yaml | 73 +++++++++++++++++++++++ chart/values.yaml.template | 6 ++ 2 files changed, 79 insertions(+) create mode 100644 chart/templates/cronjob-media-remove.yaml diff --git a/chart/templates/cronjob-media-remove.yaml b/chart/templates/cronjob-media-remove.yaml new file mode 100644 index 000000000..5d78f3395 --- /dev/null +++ b/chart/templates/cronjob-media-remove.yaml @@ -0,0 +1,73 @@ +{{ if .Values.cron.removeMedia.enabled }} +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: {{ include "mastodon.fullname" . }}-media-remove + labels: + {{- include "mastodon.labels" . | nindent 4 }} +spec: + schedule: {{ .Values.cron.removeMedia.schedule }} + jobTemplate: + spec: + template: + metadata: + name: {{ include "mastodon.fullname" . }}-media-remove + spec: + restartPolicy: OnFailure + # ensure we run on the same node as the other rails components; only + # required when using PVCs that are ReadWriteOnce + {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: component + operator: In + values: + - rails + topologyKey: kubernetes.io/hostname + {{- end }} + volumes: + - name: assets + persistentVolumeClaim: + claimName: {{ template "mastodon.fullname" . }}-assets + - name: system + persistentVolumeClaim: + claimName: {{ template "mastodon.fullname" . }}-system + containers: + - name: {{ include "mastodon.fullname" . }}-media-remove + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - bin/tootctl + - media + - remove + envFrom: + - configMapRef: + name: {{ include "mastodon.fullname" . }}-env + - secretRef: + name: {{ template "mastodon.fullname" . }} + env: + - name: "DB_PASS" + valueFrom: + secretKeyRef: + {{- if .Values.postgresql.enabled }} + name: {{ .Release.Name }}-postgresql + {{- else }} + name: {{ template "mastodon.fullname" . }} + {{- end }} + key: postgresql-password + - name: "REDIS_PASSWORD" + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-redis + key: redis-password + - name: "PORT" + value: {{ .Values.application.web.port | quote }} + volumeMounts: + - name: assets + mountPath: /opt/mastodon/public/assets + - name: system + mountPath: /opt/mastodon/public/system +{{- end }} diff --git a/chart/values.yaml.template b/chart/values.yaml.template index ff680b81f..c18d2f0b5 100644 --- a/chart/values.yaml.template +++ b/chart/values.yaml.template @@ -39,6 +39,12 @@ createAdmin: # available locales: https://github.com/tootsuite/mastodon/blob/master/config/application.rb#L43 locale: en +cron: + # run `tootctl media remove` every week + removeMedia: + enabled: true + schedule: "0 0 * * 0" + application: web: port: 3000 From 4c45b43cb8a3d902c130729d36d559ec9de23d3e Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 13 Oct 2020 01:19:35 +0200 Subject: [PATCH 074/422] Change how CDN_HOST is passed down to make assets build reproducible (#14381) * Change how CDN_HOST is passed down to make assets build reproducible * Change webpacker/webpack configuration to dynamically load publicPath based on meta header * Fix embedded layout missing the cdn-host meta header --- .../mastodon/components/autosuggest_emoji.js | 3 +-- .../components/emoji_picker_dropdown.js | 2 +- .../mastodon/features/emoji/emoji.js | 3 +-- .../components/announcements.js | 3 +-- .../ui/components/focal_point_modal.js | 3 +-- app/javascript/mastodon/utils/config.js | 10 +++++++++ app/javascript/packs/about.js | 1 + app/javascript/packs/admin.js | 1 + app/javascript/packs/application.js | 1 + app/javascript/packs/error.js | 1 + app/javascript/packs/public-path.js | 21 +++++++++++++++++++ app/javascript/packs/public.js | 1 + app/javascript/packs/share.js | 1 + app/views/layouts/application.html.haml | 1 + app/views/layouts/embedded.html.haml | 1 + config/webpack/configuration.js | 17 ++------------- 16 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 app/javascript/mastodon/utils/config.js create mode 100644 app/javascript/packs/public-path.js diff --git a/app/javascript/mastodon/components/autosuggest_emoji.js b/app/javascript/mastodon/components/autosuggest_emoji.js index ce4383a60..4937e4d98 100644 --- a/app/javascript/mastodon/components/autosuggest_emoji.js +++ b/app/javascript/mastodon/components/autosuggest_emoji.js @@ -1,8 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import unicodeMapping from '../features/emoji/emoji_unicode_mapping_light'; - -const assetHost = process.env.CDN_HOST || ''; +import { assetHost } from 'mastodon/utils/config'; export default class AutosuggestEmoji extends React.PureComponent { diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index e8a36a923..bac136e5e 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -7,6 +7,7 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import detectPassiveEvents from 'detect-passive-events'; import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, @@ -25,7 +26,6 @@ const messages = defineMessages({ flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' }, }); -const assetHost = process.env.CDN_HOST || ''; let EmojiPicker, Emoji; // load asynchronously const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index 5d9dad097..4e37f3a80 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -1,11 +1,10 @@ import { autoPlayGif } from '../../initial_state'; import unicodeMapping from './emoji_unicode_mapping_light'; +import { assetHost } from 'mastodon/utils/config'; import Trie from 'substring-trie'; const trie = new Trie(Object.keys(unicodeMapping)); -const assetHost = process.env.CDN_HOST || ''; - // Convert to file names from emojis. (For different variation selector emojis) const emojiFilenames = (emojis) => { return emojis.map(v => unicodeMapping[v].filename); diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index 8f824f140..4853c3935 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -15,6 +15,7 @@ import EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_pick import AnimatedNumber from 'mastodon/components/animated_number'; import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -153,8 +154,6 @@ class Content extends ImmutablePureComponent { } -const assetHost = process.env.CDN_HOST || ''; - class Emoji extends React.PureComponent { static propTypes = { diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js index 926a495d1..e19f277d8 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js @@ -20,6 +20,7 @@ import GIFV from 'mastodon/components/gifv'; import { me } from 'mastodon/initial_state'; import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js'; import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js'; +import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -50,8 +51,6 @@ const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******') .replace(/\n/g, ' ') .replace(/\*\*\*\*\*\*/g, '\n\n'); -const assetHost = process.env.CDN_HOST || ''; - class ImageLoader extends React.PureComponent { static propTypes = { diff --git a/app/javascript/mastodon/utils/config.js b/app/javascript/mastodon/utils/config.js new file mode 100644 index 000000000..932cd0cbf --- /dev/null +++ b/app/javascript/mastodon/utils/config.js @@ -0,0 +1,10 @@ +import ready from '../ready'; + +export let assetHost = ''; + +ready(() => { + const cdnHost = document.querySelector('meta[name=cdn-host]'); + if (cdnHost) { + assetHost = cdnHost.content || ''; + } +}); diff --git a/app/javascript/packs/about.js b/app/javascript/packs/about.js index 843cb2c87..892d825ec 100644 --- a/app/javascript/packs/about.js +++ b/app/javascript/packs/about.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index 51f92de8a..65b8dc040 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -1,3 +1,4 @@ +import './public-path'; import { delegate } from '@rails/ujs'; import ready from '../mastodon/ready'; diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index c65ebed74..91240aecf 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/javascript/packs/error.js b/app/javascript/packs/error.js index 685c89065..6376dc2f5 100644 --- a/app/javascript/packs/error.js +++ b/app/javascript/packs/error.js @@ -1,3 +1,4 @@ +import './public-path'; import ready from '../mastodon/ready'; ready(() => { diff --git a/app/javascript/packs/public-path.js b/app/javascript/packs/public-path.js new file mode 100644 index 000000000..f96109f4f --- /dev/null +++ b/app/javascript/packs/public-path.js @@ -0,0 +1,21 @@ +// Dynamically set webpack's loading path depending on a meta header, in order +// to share the same assets regardless of instance configuration. +// See https://webpack.js.org/guides/public-path/#on-the-fly + +function removeOuterSlashes(string) { + return string.replace(/^\/*/, '').replace(/\/*$/, ''); +} + +function formatPublicPath(host = '', path = '') { + let formattedHost = removeOuterSlashes(host); + if (formattedHost && !/^http/i.test(formattedHost)) { + formattedHost = `//${formattedHost}`; + } + const formattedPath = removeOuterSlashes(path); + return `${formattedHost}/${formattedPath}/`; +} + +const cdnHost = document.querySelector('meta[name=cdn-host]'); + +// eslint-disable-next-line camelcase, no-undef, no-unused-vars +__webpack_public_path__ = formatPublicPath(cdnHost ? cdnHost.content : '', process.env.PUBLIC_OUTPUT_PATH); diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 551e281a8..39defa7ae 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -1,3 +1,4 @@ +import './public-path'; import escapeTextContentForBrowser from 'escape-html'; import loadPolyfills from '../mastodon/load_polyfills'; import ready from '../mastodon/ready'; diff --git a/app/javascript/packs/share.js b/app/javascript/packs/share.js index 4ef23e1b2..1225d7b52 100644 --- a/app/javascript/packs/share.js +++ b/app/javascript/packs/share.js @@ -1,3 +1,4 @@ +import './public-path'; import loadPolyfills from '../mastodon/load_polyfills'; import { start } from '../mastodon/common'; diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index e32cdcabb..1f10f40c0 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -6,6 +6,7 @@ - if cdn_host? %link{ rel: 'dns-prefetch', href: cdn_host }/ + %meta{ name: 'cdn-host', content: cdn_host }/ - if storage_host? %link{ rel: 'dns-prefetch', href: storage_host }/ diff --git a/app/views/layouts/embedded.html.haml b/app/views/layouts/embedded.html.haml index 4a40b8584..37051e70c 100644 --- a/app/views/layouts/embedded.html.haml +++ b/app/views/layouts/embedded.html.haml @@ -6,6 +6,7 @@ - if cdn_host? %link{ rel: 'dns-prefetch', href: cdn_host }/ + %meta{ name: 'cdn-host', content: cdn_host }/ - if storage_host? %link{ rel: 'dns-prefetch', href: storage_host }/ diff --git a/config/webpack/configuration.js b/config/webpack/configuration.js index 80a094c72..e4f88a9c4 100644 --- a/config/webpack/configuration.js +++ b/config/webpack/configuration.js @@ -11,30 +11,17 @@ const settings = safeLoad(readFileSync(configPath), 'utf8')[env.RAILS_ENV || env const themePath = resolve('config', 'themes.yml'); const themes = safeLoad(readFileSync(themePath), 'utf8'); -function removeOuterSlashes(string) { - return string.replace(/^\/*/, '').replace(/\/*$/, ''); -} - -function formatPublicPath(host = '', path = '') { - let formattedHost = removeOuterSlashes(host); - if (formattedHost && !/^http/i.test(formattedHost)) { - formattedHost = `//${formattedHost}`; - } - const formattedPath = removeOuterSlashes(path); - return `${formattedHost}/${formattedPath}/`; -} - const output = { path: resolve('public', settings.public_output_path), - publicPath: formatPublicPath(env.CDN_HOST, settings.public_output_path), + publicPath: `/${settings.public_output_path}/`, }; module.exports = { settings, themes, env: { - CDN_HOST: env.CDN_HOST, NODE_ENV: env.NODE_ENV, + PUBLIC_OUTPUT_PATH: settings.public_output_path, }, output, }; From 3547009c4259db0832014dcab8f2887721d02e23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:16:46 +0900 Subject: [PATCH 075/422] Bump compression-webpack-plugin from 6.0.2 to 6.0.3 (#14979) Bumps [compression-webpack-plugin](https://github.com/webpack-contrib/compression-webpack-plugin) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/webpack-contrib/compression-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/compression-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v6.0.2...v6.0.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 31 +++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 029195b89..b20907691 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-runtime": "^6.26.0", "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^6.0.2", + "compression-webpack-plugin": "^6.0.3", "cross-env": "^7.0.2", "css-loader": "^4.3.0", "cssnano": "^4.1.10", diff --git a/yarn.lock b/yarn.lock index a803567ab..99b9504e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1497,7 +1497,7 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/json-schema@^7.0.5": +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== @@ -1825,6 +1825,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -3004,14 +3014,14 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.2.tgz#13482bfa81e0472e5d6af1165b6ee9f29f98178b" - integrity sha512-WUv7fTy2uCZKJ4iFMKJG42GDepCEocS5eqsEi8uIJZy97k/WvzxGz9dwE4+pIAkcrK4B7k+teKo71IrLu+tbqw== +compression-webpack-plugin@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.3.tgz#d0d3e913810e3bf67462e1cecd794b3109af89de" + integrity sha512-xzSWiZWwBs+HHGhlYxw0oFaYL/0VYErEqDHCAJhJ3Mza5fmF5JJ4iaB6Ap2JT68C0UhhmoI4Mh37LVz/THv2Fw== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" - schema-utils "^2.7.1" + schema-utils "^3.0.0" serialize-javascript "^5.0.1" webpack-sources "^1.4.3" @@ -9446,6 +9456,15 @@ schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7 ajv "^6.12.4" ajv-keywords "^3.5.2" +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + scroll-behavior@^0.9.1: version "0.9.12" resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.12.tgz#1c22d273ec4ce6cd4714a443fead50227da9424c" From fc87b15871893afda05f261b9562be9a56e23a32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:22:56 +0900 Subject: [PATCH 076/422] Bump sass-loader from 10.0.2 to 10.0.3 (#14977) Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.2 to 10.0.3. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.2...v10.0.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index b20907691..d5223aabd 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "reselect": "^4.0.0", "rimraf": "^3.0.2", "sass": "^1.26.12", - "sass-loader": "^10.0.2", + "sass-loader": "^10.0.3", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", diff --git a/yarn.lock b/yarn.lock index 99b9504e2..10c2d2e02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6607,10 +6607,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.3.tgz#98274552c513583ad7a01456a789a2a0b4a2a538" - integrity sha512-CgPOT3ZadDpXxKcfV56lEQ9OQSZ42Mk26gnozI+uN/k39vzD8toUhRQoqsX0m9Q3eMPEfsLWmtyUpK/yqST4yg== +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== knot.js@^1.1.5: version "1.1.5" @@ -9400,15 +9400,15 @@ sass-lint@^1.13.1: path-is-absolute "^1.0.0" util "^0.10.3" -sass-loader@^10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e" - integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg== +sass-loader@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.3.tgz#9e2f1bfdd6355f2adde4e4835d838b020bf800b0" + integrity sha512-W4+FV5oUdYy0PnC11ZoPrcAexODgDCa3ngxoy5X5qBhZYoPz9FPjb6Oox8Aa0ZYEyx34k8AQfOVuvqefOSAAUQ== dependencies: - klona "^2.0.3" + klona "^2.0.4" loader-utils "^2.0.0" neo-async "^2.6.2" - schema-utils "^2.7.1" + schema-utils "^3.0.0" semver "^7.3.2" sass@^1.26.12: From 658dbd7f84fbc1ea7a943587d8ec2f30e80cdfaf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:23:27 +0900 Subject: [PATCH 077/422] Bump imports-loader from 1.1.0 to 1.2.0 (#14976) Bumps [imports-loader](https://github.com/webpack-contrib/imports-loader) from 1.1.0 to 1.2.0. - [Release notes](https://github.com/webpack-contrib/imports-loader/releases) - [Changelog](https://github.com/webpack-contrib/imports-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/imports-loader/compare/v1.1.0...v1.2.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d5223aabd..c8b1c64e4 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "history": "^4.10.1", "http-link-header": "^1.0.3", "immutable": "^3.8.2", - "imports-loader": "^1.1.0", + "imports-loader": "^1.2.0", "intersection-observer": "^0.11.0", "intl": "^1.2.5", "intl-messageformat": "^2.2.0", diff --git a/yarn.lock b/yarn.lock index 10c2d2e02..bd1c9ada5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5441,13 +5441,13 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imports-loader@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.1.0.tgz#1c3a388d0c5cd7f9eb08f3646d4aae3b70e57933" - integrity sha512-HcPM6rULdQ6EBLVq+5O+CF9xb7qiUjsRm6V28bTG/c3IU5sQkVZzUDwYY0r4jHvSAmVFdO9WA/vLAURR5WQSeQ== +imports-loader@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.2.0.tgz#b06823d0bb42e6f5ff89bc893829000eda46693f" + integrity sha512-zPvangKEgrrPeqeUqH0Uhc59YqK07JqZBi9a9cQ3v/EKUIqrbJHY4CvUrDus2lgQa5AmPyXuGrWP8JJTqzE5RQ== dependencies: loader-utils "^2.0.0" - schema-utils "^2.7.0" + schema-utils "^3.0.0" source-map "^0.6.1" strip-comments "^2.0.1" @@ -9447,7 +9447,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: +schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== From 5b131f08e1d021b5e9ee9058c6a92ede8de8777c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:27:16 +0900 Subject: [PATCH 078/422] Bump tzinfo-data from 1.2020.1 to 1.2020.2 (#14966) Bumps [tzinfo-data](https://github.com/tzinfo/tzinfo-data) from 1.2020.1 to 1.2020.2. - [Release notes](https://github.com/tzinfo/tzinfo-data/releases) - [Commits](https://github.com/tzinfo/tzinfo-data/compare/v1.2020.1...v1.2020.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 21f5b1b4c..07876022d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -627,7 +627,7 @@ GEM unf (~> 0.1.0) tzinfo (1.2.7) thread_safe (~> 0.1) - tzinfo-data (1.2020.1) + tzinfo-data (1.2020.2) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext From 06c3d363950af35a1c9379f32d8e73d9ff57d452 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:45:37 +0900 Subject: [PATCH 079/422] Bump rubocop from 0.92.0 to 0.93.0 (#14967) Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.92.0 to 0.93.0. - [Release notes](https://github.com/rubocop-hq/rubocop/releases) - [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.92.0...v0.93.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 0fc631e2a..138566780 100644 --- a/Gemfile +++ b/Gemfile @@ -139,7 +139,7 @@ group :development do gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.4' gem 'memory_profiler' - gem 'rubocop', '~> 0.92', require: false + gem 'rubocop', '~> 0.93', require: false gem 'rubocop-rails', '~> 2.8', require: false gem 'brakeman', '~> 4.10', require: false gem 'bundler-audit', '~> 0.7', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 07876022d..aea592da1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -394,7 +394,7 @@ GEM parallel (1.19.2) parallel_tests (3.3.0) parallel - parser (2.7.1.5) + parser (2.7.2.0) ast (~> 2.4.1) parslet (2.0.0) pastel (0.8.0) @@ -494,7 +494,7 @@ GEM redis-store (>= 1.2, < 2) redis-store (1.9.0) redis (>= 4, < 5) - regexp_parser (1.8.1) + regexp_parser (1.8.2) request_store (1.5.0) rack (>= 1.4) responders (3.0.1) @@ -529,13 +529,13 @@ GEM rspec-support (3.9.3) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (0.92.0) + rubocop (0.93.0) parallel (~> 1.10) parser (>= 2.7.1.5) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.7) + regexp_parser (>= 1.8) rexml - rubocop-ast (>= 0.5.0) + rubocop-ast (>= 0.6.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) rubocop-ast (0.7.1) @@ -770,7 +770,7 @@ DEPENDENCIES rspec-rails (~> 4.0) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.4) - rubocop (~> 0.92) + rubocop (~> 0.93) rubocop-rails (~> 2.8) ruby-progressbar (~> 1.10) sanitize (~> 5.2) From 5de866539e722a84d48f04bc299c8d5f432f3cce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:47:40 +0900 Subject: [PATCH 080/422] Bump file-loader from 6.1.0 to 6.1.1 (#14974) Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/webpack-contrib/file-loader/releases) - [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/file-loader/compare/v6.1.0...v6.1.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c8b1c64e4..8de40ed5f 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "escape-html": "^1.0.3", "exif-js": "^2.3.0", "express": "^4.17.1", - "file-loader": "^6.1.0", + "file-loader": "^6.1.1", "font-awesome": "^4.7.0", "glob": "^7.1.6", "history": "^4.10.1", diff --git a/yarn.lock b/yarn.lock index bd1c9ada5..c77d96b2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4590,13 +4590,13 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.0.tgz#65b9fcfb0ea7f65a234a1f10cdd7f1ab9a33f253" - integrity sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg== +file-loader@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== dependencies: loader-utils "^2.0.0" - schema-utils "^2.7.1" + schema-utils "^3.0.0" file-type@^12.4.1: version "12.4.2" From a8e8ee249ac758543a5aa886f99111faab015d06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:49:16 +0900 Subject: [PATCH 081/422] Bump eslint-plugin-react from 7.21.3 to 7.21.4 (#14968) Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.21.3 to 7.21.4. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.21.3...v7.21.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8de40ed5f..b577bd889 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.21.3", + "eslint-plugin-react": "~7.21.4", "jest": "^26.5.2", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", diff --git a/yarn.lock b/yarn.lock index c77d96b2b..731194e9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4143,16 +4143,16 @@ eslint-plugin-promise@~4.2.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== -eslint-plugin-react@~7.21.3: - version "7.21.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.3.tgz#71655d2af5155b19285ec929dd2cdc67a4470b52" - integrity sha512-OI4GwTCqyIb4ipaOEGLWdaOHCXZZydStAsBEPB2e1ZfNM37bojpgO1BoOQbFb0eLVz3QLDx7b+6kYcrxCuJfhw== +eslint-plugin-react@~7.21.4: + version "7.21.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz#31060b2e5ff82b12e24a3cc33edb7d12f904775c" + integrity sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg== dependencies: array-includes "^3.1.1" array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" + jsx-ast-utils "^2.4.1 || ^3.0.0" object.entries "^1.1.2" object.fromentries "^2.0.2" object.values "^1.1.1" @@ -6587,6 +6587,14 @@ jsx-ast-utils@^2.4.1: array-includes "^3.1.1" object.assign "^4.1.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.0.0.tgz#0f49d5093bafa4b45d3fe02147d8b40ffc6c7438" + integrity sha512-sPuicm6EPKYI/UnWpOatvg4pI50qaBo4dSOMGUPutmJ26ttedFKXr0It0XXPk4HKnQ/1X0st4eSS2w2jhFk9Ow== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.1" + keycode@^2.1.7: version "2.2.0" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" From df8cbbf3641485c8c8c787287372538c85c599f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:49:45 +0900 Subject: [PATCH 082/422] Bump terser-webpack-plugin from 4.2.2 to 4.2.3 (#14971) Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 4.2.2 to 4.2.3. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v4.2.2...v4.2.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 39 +++++++++++++++------------------------ 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index b577bd889..29be685fe 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", - "terser-webpack-plugin": "^4.2.2", + "terser-webpack-plugin": "^4.2.3", "tesseract.js": "^2.1.1", "throng": "^4.0.0", "tiny-queue": "^0.2.1", diff --git a/yarn.lock b/yarn.lock index 731194e9e..02e6af5bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6392,15 +6392,6 @@ jest-watcher@^26.5.2: jest-util "^26.5.2" string-length "^4.0.1" -jest-worker@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" - integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.5.0: version "26.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" @@ -9780,7 +9771,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9808,7 +9799,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -10319,19 +10310,19 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.2.tgz#d86200c700053bba637913fe4310ba1bdeb5568e" - integrity sha512-3qAQpykRTD5DReLu5/cwpsg7EZFzP3Q0Hp2XUWJUw2mpq2jfgOKTZr8IZKKnNieRVVo1UauROTdhbQJZveGKtQ== +terser-webpack-plugin@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" - jest-worker "^26.3.0" + jest-worker "^26.5.0" p-limit "^3.0.2" - schema-utils "^2.7.1" + schema-utils "^3.0.0" serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^5.3.2" + terser "^5.3.4" webpack-sources "^1.4.3" terser@^4.1.2: @@ -10343,14 +10334,14 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" - integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== +terser@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.4.tgz#e510e05f86e0bd87f01835c3238839193f77a60c" + integrity sha512-dxuB8KQo8Gt6OVOeLg/rxfcxdNZI/V1G6ze1czFUzPeCFWZRtvZMgSzlZZ5OYBZ4HoG607F6pFPNLekJyV+yVw== dependencies: commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map "~0.7.2" + source-map-support "~0.5.19" tesseract.js-core@^2.2.0: version "2.2.0" From 37295d59c493a2979893e5ec3d90e7d250adc2a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:50:06 +0900 Subject: [PATCH 083/422] Bump eslint from 7.10.0 to 7.11.0 (#14975) Bumps [eslint](https://github.com/eslint/eslint) from 7.10.0 to 7.11.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.10.0...v7.11.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 29be685fe..67b702d98 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "@testing-library/react": "^11.0.4", "babel-eslint": "^10.1.0", "babel-jest": "^26.5.2", - "eslint": "^7.10.0", + "eslint": "^7.11.0", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", diff --git a/yarn.lock b/yarn.lock index 02e6af5bb..c932a5197 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4188,6 +4188,11 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + eslint@^2.7.0: version "2.13.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" @@ -4227,10 +4232,10 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" - integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA== +eslint@^7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.11.0.tgz#aaf2d23a0b5f1d652a08edacea0c19f7fadc0b3b" + integrity sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.1.3" @@ -4242,7 +4247,7 @@ eslint@^7.10.0: enquirer "^2.3.5" eslint-scope "^5.1.1" eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^2.0.0" espree "^7.3.0" esquery "^1.2.0" esutils "^2.0.2" From ec1d8b7121f8e89be61c7c93ca10a6d834f0d888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 16:41:47 +0900 Subject: [PATCH 084/422] Bump sass from 1.26.12 to 1.27.0 (#14973) Bumps [sass](https://github.com/sass/dart-sass) from 1.26.12 to 1.27.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.26.12...1.27.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 67b702d98..3dbe9beec 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.26.12", + "sass": "^1.27.0", "sass-loader": "^10.0.3", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index c932a5197..47c22a050 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9415,10 +9415,10 @@ sass-loader@^10.0.3: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.26.12: - version "1.26.12" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.12.tgz#79eddaa1773fff32ccf19e00d1ce380fc2afc7d0" - integrity sha512-hmSwtBOWoS9zwe0yAS+QmaseVCUELiGV22gXHDR7+9stEsVuEuxfY1GhC8XmUpC+Ir3Hwq7NxSUNbnmkznnF7g== +sass@^1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.27.0.tgz#0657ff674206b95ec20dc638a93e179c78f6ada2" + integrity sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig== dependencies: chokidar ">=2.0.0 <4.0.0" From bb180921a362f0e5972674caaad8921e4f32de4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 20:19:39 +0900 Subject: [PATCH 085/422] Bump jest from 26.5.2 to 26.5.3 (#14969) Bumps [jest](https://github.com/facebook/jest) from 26.5.2 to 26.5.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v26.5.2...v26.5.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 180 +++++++++++++++++++++++++-------------------------- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index 3dbe9beec..833bfe794 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,7 @@ "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.4", - "jest": "^26.5.2", + "jest": "^26.5.3", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.13.1", diff --git a/yarn.lock b/yarn.lock index 47c22a050..f921c9df4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1161,13 +1161,13 @@ jest-util "^26.5.2" slash "^3.0.0" -"@jest/core@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.2.tgz#e39f14676f4ba4632ecabfdc374071ab22131f22" - integrity sha512-LLTo1LQMg7eJjG/+P1NYqFof2B25EV1EqzD5FonklihG4UJKiK2JBIvWonunws6W7e+DhNLoFD+g05tCY03eyA== +"@jest/core@^26.5.3": + version "26.5.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.3.tgz#712ed4adb64c3bda256a3f400ff1d3eb2a031f13" + integrity sha512-CiU0UKFF1V7KzYTVEtFbFmGLdb2g4aTtY0WlyUfLgj/RtoTnJFhh50xKKr7OYkdmBUlGFSa2mD1TU3UZ6OLd4g== dependencies: "@jest/console" "^26.5.2" - "@jest/reporters" "^26.5.2" + "@jest/reporters" "^26.5.3" "@jest/test-result" "^26.5.2" "@jest/transform" "^26.5.2" "@jest/types" "^26.5.2" @@ -1177,17 +1177,17 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^26.5.2" - jest-config "^26.5.2" + jest-config "^26.5.3" jest-haste-map "^26.5.2" jest-message-util "^26.5.2" jest-regex-util "^26.0.0" jest-resolve "^26.5.2" - jest-resolve-dependencies "^26.5.2" - jest-runner "^26.5.2" - jest-runtime "^26.5.2" - jest-snapshot "^26.5.2" + jest-resolve-dependencies "^26.5.3" + jest-runner "^26.5.3" + jest-runtime "^26.5.3" + jest-snapshot "^26.5.3" jest-util "^26.5.2" - jest-validate "^26.5.2" + jest-validate "^26.5.3" jest-watcher "^26.5.2" micromatch "^4.0.2" p-each-series "^2.1.0" @@ -1217,19 +1217,19 @@ jest-mock "^26.5.2" jest-util "^26.5.2" -"@jest/globals@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.2.tgz#c333f82c29e19ecb609a75d1a532915a5c956c59" - integrity sha512-9PmnFsAUJxpPt1s/stq02acS1YHliVBDNfAWMe1bwdRr1iTCfhbNt3ERQXrO/ZfZSweftoA26Q/2yhSVSWQ3sw== +"@jest/globals@^26.5.3": + version "26.5.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.3.tgz#90769b40e0af3fa0b28f6d8c5bbe3712467243fd" + integrity sha512-7QztI0JC2CuB+Wx1VdnOUNeIGm8+PIaqngYsZXQCkH2QV0GFqzAYc9BZfU0nuqA6cbYrWh5wkuMzyii3P7deug== dependencies: "@jest/environment" "^26.5.2" "@jest/types" "^26.5.2" - expect "^26.5.2" + expect "^26.5.3" -"@jest/reporters@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.2.tgz#0f1c900c6af712b46853d9d486c9c0382e4050f6" - integrity sha512-zvq6Wvy6MmJq/0QY0YfOPb49CXKSf42wkJbrBPkeypVa8I+XDxijvFuywo6TJBX/ILPrdrlE/FW9vJZh6Rf9vA== +"@jest/reporters@^26.5.3": + version "26.5.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.3.tgz#e810e9c2b670f33f1c09e9975749260ca12f1c17" + integrity sha512-X+vR0CpfMQzYcYmMFKNY9n4jklcb14Kffffp7+H/MqitWnb0440bW2L76NGWKAa+bnXhNoZr+lCVtdtPmfJVOQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^26.5.2" @@ -1254,7 +1254,7 @@ source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^5.0.1" + v8-to-istanbul "^6.0.1" optionalDependencies: node-notifier "^8.0.0" @@ -1277,16 +1277,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.2.tgz#c4559c7e134b27b020317303ee5399bf62917a4b" - integrity sha512-XmGEh7hh07H2B8mHLFCIgr7gA5Y6Hw1ZATIsbz2fOhpnQ5AnQtZk0gmP0Q5/+mVB2xygO64tVFQxOajzoptkNA== +"@jest/test-sequencer@^26.5.3": + version "26.5.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.3.tgz#9ae0ab9bc37d5171b28424029192e50229814f8d" + integrity sha512-Wqzb7aQ13L3T47xHdpUqYMOpiqz6Dx2QDDghp5AV/eUDXR7JieY+E1s233TQlNyl+PqtqgjVokmyjzX/HA51BA== dependencies: "@jest/test-result" "^26.5.2" graceful-fs "^4.2.4" jest-haste-map "^26.5.2" - jest-runner "^26.5.2" - jest-runtime "^26.5.2" + jest-runner "^26.5.3" + jest-runtime "^26.5.3" "@jest/transform@^26.5.2": version "26.5.2" @@ -4432,10 +4432,10 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.2.tgz#3e0631c4a657a83dbec769ad246a2998953a55a6" - integrity sha512-ccTGrXZd8DZCcvCz4htGXTkd/LOoy6OEtiDS38x3/VVf6E4AQL0QoeksBiw7BtGR5xDNiRYPB8GN6pfbuTOi7w== +expect@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.3.tgz#89d9795036f7358b0a9a5243238eb8086482d741" + integrity sha512-kkpOhGRWGOr+TEFUnYAjfGvv35bfP+OlPtqPIJpOCR9DVtv8QV+p8zG0Edqafh80fsjeE+7RBcVUq1xApnYglw== dependencies: "@jest/types" "^26.5.2" ansi-styles "^4.0.0" @@ -6038,12 +6038,12 @@ jest-changed-files@^26.5.2: execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.2.tgz#0df114399b4036a3f046f0a9f25c50372c76b3a2" - integrity sha512-usm48COuUvRp8YEG5OWOaxbSM0my7eHn3QeBWxiGUuFhvkGVBvl1fic4UjC02EAEQtDv8KrNQUXdQTV6ZZBsoA== +jest-cli@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.3.tgz#f936b98f247b76b7bc89c7af50af82c88e356a80" + integrity sha512-HkbSvtugpSXBf2660v9FrNVUgxvPkssN8CRGj9gPM8PLhnaa6zziFiCEKQAkQS4uRzseww45o0TR+l6KeRYV9A== dependencies: - "@jest/core" "^26.5.2" + "@jest/core" "^26.5.3" "@jest/test-result" "^26.5.2" "@jest/types" "^26.5.2" chalk "^4.0.0" @@ -6051,19 +6051,19 @@ jest-cli@^26.5.2: graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.5.2" + jest-config "^26.5.3" jest-util "^26.5.2" - jest-validate "^26.5.2" + jest-validate "^26.5.3" prompts "^2.0.1" yargs "^15.4.1" -jest-config@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.2.tgz#6e828e25f10124433dd008fbd83348636de0972a" - integrity sha512-dqJOnSegNdE5yDiuGHsjTM5gec7Z4AcAMHiW+YscbOYJAlb3LEtDSobXCq0or9EmGQI5SFmKy4T7P1FxetJOfg== +jest-config@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.3.tgz#baf51c9be078c2c755c8f8a51ec0f06c762c1d3f" + integrity sha512-NVhZiIuN0GQM6b6as4CI5FSCyXKxdrx5ACMCcv/7Pf+TeCajJhJc+6dwgdAVPyerUFB9pRBIz3bE7clSrRge/w== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.5.2" + "@jest/test-sequencer" "^26.5.3" "@jest/types" "^26.5.2" babel-jest "^26.5.2" chalk "^4.0.0" @@ -6073,11 +6073,11 @@ jest-config@^26.5.2: jest-environment-jsdom "^26.5.2" jest-environment-node "^26.5.2" jest-get-type "^26.3.0" - jest-jasmine2 "^26.5.2" + jest-jasmine2 "^26.5.3" jest-regex-util "^26.0.0" jest-resolve "^26.5.2" jest-util "^26.5.2" - jest-validate "^26.5.2" + jest-validate "^26.5.3" micromatch "^4.0.2" pretty-format "^26.5.2" @@ -6175,10 +6175,10 @@ jest-haste-map@^26.5.2: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.2.tgz#0e33819d31b1f2aab5efd1e02ce502209c0e64a2" - integrity sha512-2J+GYcgLVPTkpmvHEj0/IDTIAuyblGNGlyGe4fLfDT2aktEPBYvoxUwFiOmDDxxzuuEAD2uxcYXr0+1Yw4tjFA== +jest-jasmine2@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.3.tgz#baad2114ce32d16aff25aeb877d18bb4e332dc4c" + integrity sha512-nFlZOpnGlNc7y/+UkkeHnvbOM+rLz4wB1AimgI9QhtnqSZte0wYjbAm8hf7TCwXlXgDwZxAXo6z0a2Wzn9FoOg== dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^26.5.2" @@ -6188,13 +6188,13 @@ jest-jasmine2@^26.5.2: "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.5.2" + expect "^26.5.3" is-generator-fn "^2.0.0" jest-each "^26.5.2" jest-matcher-utils "^26.5.2" jest-message-util "^26.5.2" - jest-runtime "^26.5.2" - jest-snapshot "^26.5.2" + jest-runtime "^26.5.3" + jest-snapshot "^26.5.3" jest-util "^26.5.2" pretty-format "^26.5.2" throat "^5.0.0" @@ -6249,14 +6249,14 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.2.tgz#ee30b7cfea81c81bf5e195a9287d7ec07f893170" - integrity sha512-LLkc8LuRtxqOx0AtX/Npa2C4I23WcIrwUgNtHYXg4owYF/ZDQShcwBAHjYZIFR06+HpQcZ43+kCTMlQ3aDCYTg== +jest-resolve-dependencies@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.3.tgz#11483f91e534bdcd257ab21e8622799e59701aba" + integrity sha512-+KMDeke/BFK+mIQ2IYSyBz010h7zQaVt4Xie6cLqUGChorx66vVeQVv4ErNoMwInnyYHi1Ud73tDS01UbXbfLQ== dependencies: "@jest/types" "^26.5.2" jest-regex-util "^26.0.0" - jest-snapshot "^26.5.2" + jest-snapshot "^26.5.3" jest-resolve@^26.5.2: version "26.5.2" @@ -6272,10 +6272,10 @@ jest-resolve@^26.5.2: resolve "^1.17.0" slash "^3.0.0" -jest-runner@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.2.tgz#4f9e6b0bb7eb4710c209a9e145b8a10894f4c19f" - integrity sha512-GKhYxtSX5+tXZsd2QwfkDqPIj5C2HqOdXLRc2x2qYqWE26OJh17xo58/fN/mLhRkO4y6o60ZVloan7Kk5YA6hg== +jest-runner@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.3.tgz#800787459ea59c68e7505952933e33981dc3db38" + integrity sha512-qproP0Pq7IIule+263W57k2+8kWCszVJTC9TJWGUz0xJBr+gNiniGXlG8rotd0XxwonD5UiJloYoSO5vbUr5FQ== dependencies: "@jest/console" "^26.5.2" "@jest/environment" "^26.5.2" @@ -6286,27 +6286,27 @@ jest-runner@^26.5.2: emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.5.2" + jest-config "^26.5.3" jest-docblock "^26.0.0" jest-haste-map "^26.5.2" jest-leak-detector "^26.5.2" jest-message-util "^26.5.2" jest-resolve "^26.5.2" - jest-runtime "^26.5.2" + jest-runtime "^26.5.3" jest-util "^26.5.2" jest-worker "^26.5.0" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.2.tgz#b72f5f79eb2fe0c46bfef4cdb9c1e01d1c69ba41" - integrity sha512-zArr4DatX/Sn0wswX/AnAuJgmwgAR5rNtrUz36HR8BfMuysHYNq5sDbYHuLC4ICyRdy5ae/KQ+sczxyS9G6Qvw== +jest-runtime@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.3.tgz#5882ae91fd88304310f069549e6bf82f3f198bea" + integrity sha512-IDjalmn2s/Tc4GvUwhPHZ0iaXCdMRq5p6taW9P8RpU+FpG01O3+H8z+p3rDCQ9mbyyyviDgxy/LHPLzrIOKBkQ== dependencies: "@jest/console" "^26.5.2" "@jest/environment" "^26.5.2" "@jest/fake-timers" "^26.5.2" - "@jest/globals" "^26.5.2" + "@jest/globals" "^26.5.3" "@jest/source-map" "^26.5.0" "@jest/test-result" "^26.5.2" "@jest/transform" "^26.5.2" @@ -6317,15 +6317,15 @@ jest-runtime@^26.5.2: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.5.2" + jest-config "^26.5.3" jest-haste-map "^26.5.2" jest-message-util "^26.5.2" jest-mock "^26.5.2" jest-regex-util "^26.0.0" jest-resolve "^26.5.2" - jest-snapshot "^26.5.2" + jest-snapshot "^26.5.3" jest-util "^26.5.2" - jest-validate "^26.5.2" + jest-validate "^26.5.3" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.4.1" @@ -6338,17 +6338,17 @@ jest-serializer@^26.5.0: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.2.tgz#0cf7642eaf8e8d2736bd443f619959bf237f9ccf" - integrity sha512-MkXIDvEefzDubI/WaDVSRH4xnkuirP/Pz8LhAIDXcVQTmcEfwxywj5LGwBmhz+kAAIldA7XM4l96vbpzltSjqg== +jest-snapshot@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.3.tgz#f6b4b4b845f85d4b0dadd7cf119c55d0c1688601" + integrity sha512-ZgAk0Wm0JJ75WS4lGaeRfa0zIgpL0KD595+XmtwlIEMe8j4FaYHyZhP1LNOO+8fXq7HJ3hll54+sFV9X4+CGVw== dependencies: "@babel/types" "^7.0.0" "@jest/types" "^26.5.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.5.2" + expect "^26.5.3" graceful-fs "^4.2.4" jest-diff "^26.5.2" jest-get-type "^26.3.0" @@ -6372,10 +6372,10 @@ jest-util@^26.5.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.2.tgz#7ea266700b64234cd1c0cee982490c5a80e9b0f0" - integrity sha512-FmJks0zY36mp6Af/5sqO6CTL9bNMU45yKCJk3hrz8d2aIqQIlN1pr9HPIwZE8blLaewOla134nt5+xAmWsx3SQ== +jest-validate@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.3.tgz#eefd5a5c87059550548c5ad8d6589746c66929e3" + integrity sha512-LX07qKeAtY+lsU0o3IvfDdN5KH9OulEGOMN1sFo6PnEf5/qjS1LZIwNk9blcBeW94pQUI9dLN9FlDYDWI5tyaA== dependencies: "@jest/types" "^26.5.2" camelcase "^6.0.0" @@ -6406,14 +6406,14 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.5.2.tgz#c6791642b331fe7abd2f993b0a74aa546f7be0fb" - integrity sha512-4HFabJVwsgDwul/7rhXJ3yFAF/aUkVIXiJWmgFxb+WMdZG39fVvOwYAs8/3r4AlFPc4m/n5sTMtuMbOL3kNtrQ== +jest@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.5.3.tgz#5e7a322d16f558dc565ca97639e85993ef5affe6" + integrity sha512-uJi3FuVSLmkZrWvaDyaVTZGLL8WcfynbRnFXyAHuEtYiSZ+ijDDIMOw1ytmftK+y/+OdAtsG9QrtbF7WIBmOyA== dependencies: - "@jest/core" "^26.5.2" + "@jest/core" "^26.5.3" import-local "^3.0.2" - jest-cli "^26.5.2" + jest-cli "^26.5.3" js-base64@^2.1.9: version "2.6.4" @@ -10823,10 +10823,10 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5" - integrity sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q== +v8-to-istanbul@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz#7ef0e32faa10f841fe4c1b0f8de96ed067c0be1e" + integrity sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From b4c4af18dcec04f0c8ad89b45ce3cad20ddfdc12 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Wed, 14 Oct 2020 05:41:00 +0900 Subject: [PATCH 086/422] Fix a bear check when the activity object is nil (#14981) --- app/lib/activitypub/activity.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 224451f41..2b5d3ffc2 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -74,7 +74,7 @@ class ActivityPub::Activity @object_uri ||= begin str = value_or_id(@object) - if str.start_with?('bear:') + if str&.start_with?('bear:') Addressable::URI.parse(str).query_values['u'] else str From a69ca294738dbe22bacaf9f1fc5a551d99797b35 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 15 Oct 2020 16:24:47 +0200 Subject: [PATCH 087/422] Change how missing desktop notifications permission is displayed (#14985) Add missing controls for new notification type --- app/javascript/mastodon/actions/onboarding.js | 1 + .../components/column_settings.js | 61 +++++++------------ .../notifications_permission_banner.js | 30 +++++++++ .../components/setting_toggle.js | 5 +- .../containers/column_settings_container.js | 2 +- .../mastodon/features/notifications/index.js | 8 ++- .../components/notifications_counter_icon.js | 1 - app/javascript/mastodon/reducers/settings.js | 3 + .../styles/mastodon/components.scss | 26 ++++++++ 9 files changed, 92 insertions(+), 45 deletions(-) create mode 100644 app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js diff --git a/app/javascript/mastodon/actions/onboarding.js b/app/javascript/mastodon/actions/onboarding.js index 90f1da7bd..42d8ea33f 100644 --- a/app/javascript/mastodon/actions/onboarding.js +++ b/app/javascript/mastodon/actions/onboarding.js @@ -14,6 +14,7 @@ export const closeOnboarding = () => dispatch => { dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); + dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); dispatch(saveSettings()); } })); diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js index be88df6d6..169e4b44d 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.js +++ b/app/javascript/mastodon/features/notifications/components/column_settings.js @@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { FormattedMessage } from 'react-intl'; import ClearColumnButton from './clear_column_button'; import SettingToggle from './setting_toggle'; -import Icon from 'mastodon/components/icon'; export default class ColumnSettings extends React.PureComponent { @@ -13,7 +12,7 @@ export default class ColumnSettings extends React.PureComponent { pushSettings: ImmutablePropTypes.map.isRequired, onChange: PropTypes.func.isRequired, onClear: PropTypes.func.isRequired, - onRequestNotificationPermission: PropTypes.func.isRequired, + onRequestNotificationPermission: PropTypes.func, alertsEnabled: PropTypes.bool, browserSupport: PropTypes.bool, browserPermission: PropTypes.bool, @@ -24,7 +23,7 @@ export default class ColumnSettings extends React.PureComponent { } render () { - const { settings, pushSettings, onChange, onClear, onRequestNotificationPermission, alertsEnabled, browserSupport, browserPermission } = this.props; + const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission } = this.props; const filterShowStr = ; const filterAdvancedStr = ; @@ -35,37 +34,11 @@ export default class ColumnSettings extends React.PureComponent { const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed'); const pushStr = showPushSettings && ; - const settingsIssues = []; - - if (alertsEnabled && browserSupport && browserPermission !== 'granted') { - if (browserPermission === 'denied') { - settingsIssues.push( - - ); - } else if (browserPermission === 'default') { - settingsIssues.push( - - ); - } - } - return (
- {settingsIssues && ( -
- {settingsIssues} + {alertsEnabled && browserSupport && browserPermission === 'denied' && ( +
+
)} @@ -77,6 +50,7 @@ export default class ColumnSettings extends React.PureComponent { +
@@ -87,7 +61,7 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && } @@ -98,7 +72,7 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && } @@ -109,7 +83,7 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && } @@ -120,7 +94,7 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && } @@ -131,7 +105,7 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && } @@ -142,12 +116,23 @@ export default class ColumnSettings extends React.PureComponent {
- + {showPushSettings && }
+ +
+ + +
+ + {showPushSettings && } + + +
+
); } diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js new file mode 100644 index 000000000..766c9bb5b --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js @@ -0,0 +1,30 @@ +import React from 'react'; +import Icon from 'mastodon/components/icon'; +import Button from 'mastodon/components/button'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { FormattedMessage } from 'react-intl'; + +export default @connect(() => {}) +class NotificationsPermissionBanner extends React.PureComponent { + + static propTypes = { + dispatch: PropTypes.func.isRequired, + }; + + handleClick = () => { + this.props.dispatch(requestBrowserPermission()); + } + + render () { + return ( +
+

+

}} />

+ +
+ ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/components/setting_toggle.js b/app/javascript/mastodon/features/notifications/components/setting_toggle.js index e6f593ef8..c4c8bffbe 100644 --- a/app/javascript/mastodon/features/notifications/components/setting_toggle.js +++ b/app/javascript/mastodon/features/notifications/components/setting_toggle.js @@ -12,6 +12,7 @@ export default class SettingToggle extends React.PureComponent { label: PropTypes.node.isRequired, onChange: PropTypes.func.isRequired, defaultValue: PropTypes.bool, + disabled: PropTypes.bool, } onChange = ({ target }) => { @@ -19,12 +20,12 @@ export default class SettingToggle extends React.PureComponent { } render () { - const { prefix, settings, settingPath, label, defaultValue } = this.props; + const { prefix, settings, settingPath, label, defaultValue, disabled } = this.props; const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-'); return (
- +
); diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index 664c37980..9a70bd4f3 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -11,7 +11,7 @@ import { showAlert } from '../../../actions/alerts'; const messages = defineMessages({ clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' }, clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' }, - permissionDenied: { id: 'notifications.permission_denied', defaultMessage: 'Cannot enable desktop notifications as permission has been denied.' }, + permissionDenied: { id: 'notifications.permission_denied_alert', defaultMessage: 'Desktop notifications can\'t be enabled, as browser permission has been denied before' }, }); const mapStateToProps = state => ({ diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 5e87faa08..73df7f49d 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -25,6 +25,7 @@ import ScrollableList from '../../components/scrollable_list'; import LoadGap from '../../components/load_gap'; import Icon from 'mastodon/components/icon'; import compareId from 'mastodon/compare_id'; +import NotificationsPermissionBanner from './components/notifications_permission_banner'; const messages = defineMessages({ title: { id: 'column.notifications', defaultMessage: 'Notifications' }, @@ -55,7 +56,7 @@ const mapStateToProps = state => ({ numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, lastReadId: state.getIn(['notifications', 'readMarkerId']), canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0), - needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) !== 'granted', + needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default', }); export default @connect(mapStateToProps) @@ -169,7 +170,7 @@ class Notifications extends React.PureComponent { }; render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead } = this.props; + const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; const emptyMessage = ; @@ -213,6 +214,8 @@ class Notifications extends React.PureComponent { showLoading={isLoading && notifications.size === 0} hasMore={hasMore} numPending={numPending} + prepend={needsNotificationPermission && } + alwaysPrepend emptyMessage={emptyMessage} onLoadMore={this.handleLoadOlder} onLoadPending={this.handleLoadPending} @@ -252,7 +255,6 @@ class Notifications extends React.PureComponent { pinned={pinned} multiColumn={multiColumn} extraButton={extraButton} - collapseIssues={this.props.needsNotificationPermission} > diff --git a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js index b8932704b..da553cd9f 100644 --- a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js +++ b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js @@ -3,7 +3,6 @@ import IconWithBadge from 'mastodon/components/icon_with_badge'; const mapStateToProps = state => ({ count: state.getIn(['notifications', 'unread']), - issueBadge: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) !== 'granted', id: 'bell', }); diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index 886353de3..057fa353a 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -35,6 +35,7 @@ const initialState = ImmutableMap({ reblog: false, mention: false, poll: false, + status: false, }), quickFilter: ImmutableMap({ @@ -50,6 +51,7 @@ const initialState = ImmutableMap({ reblog: true, mention: true, poll: true, + status: true, }), sounds: ImmutableMap({ @@ -59,6 +61,7 @@ const initialState = ImmutableMap({ reblog: true, mention: true, poll: true, + status: true, }), }), diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 378d1640f..0d32b9d6c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3732,6 +3732,10 @@ a.status-card.compact:hover { margin-bottom: 10px; } +.column-settings__row--with-margin { + margin-bottom: 15px; +} + .column-settings__hashtags { .column-settings__row { margin-bottom: 15px; @@ -7168,3 +7172,25 @@ noscript { border-color: lighten($ui-base-color, 12%); } } + +.notifications-permission-banner { + padding: 30px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + h2 { + font-size: 16px; + font-weight: 500; + margin-bottom: 15px; + text-align: center; + } + + p { + color: $darker-text-color; + margin-bottom: 15px; + text-align: center; + } +} From fb5f3be18f50eb5657479196e29d13a905c43ac8 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Fri, 16 Oct 2020 04:24:58 +0900 Subject: [PATCH 088/422] Fix strings that could not be translated (#14980) --- .../features/ui/components/mute_modal.js | 3 +- .../mastodon/locales/defaultMessages.json | 49 +++++++++++++++++++ app/javascript/mastodon/locales/en.json | 8 ++- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.js b/app/javascript/mastodon/features/ui/components/mute_modal.js index 51228b532..d8d8e68c3 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.js +++ b/app/javascript/mastodon/features/ui/components/mute_modal.js @@ -12,6 +12,7 @@ const messages = defineMessages({ minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' }, hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' }, days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' }, + indefinite: { id: 'mute_modal.indefinite', defaultMessage: 'Indefinite' }, }); const mapStateToProps = state => { @@ -112,7 +113,7 @@ class MuteModal extends React.PureComponent { {/* eslint-disable-next-line jsx-a11y/no-onchange */} - +
); diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 6c6232262..59f8660f1 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Barritar", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia", "compose_form.spoiler.unmarked": "El testu nun va anubrise", "compose_form.spoiler_placeholder": "Escribi equí l'alvertencia", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 42c8997b7..4e5cea459 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Раздумай", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Content warning", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 24d97a20e..be1d308e6 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -1339,15 +1339,15 @@ { "descriptors": [ { - "defaultMessage": "Media is marked as sensitive", + "defaultMessage": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", "id": "compose_form.sensitive.marked" }, { - "defaultMessage": "Media is not marked as sensitive", + "defaultMessage": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "id": "compose_form.sensitive.unmarked" }, { - "defaultMessage": "Mark media as sensitive", + "defaultMessage": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "id": "compose_form.sensitive.hide" } ], @@ -3259,4 +3259,4 @@ ], "path": "app/javascript/mastodon/features/video/index.json" } -] \ No newline at end of file +] diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 20f5b3f91..078b83cae 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -98,9 +98,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 2b1546a57..39334297b 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index bec0c7636..ed2248953 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "ללחוש", "compose_form.publish_loud": "לחצרץ!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "אזהרת תוכן", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index f20a384b9..96289cf86 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Upozorenje o sadržaju", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index e12bf697a..7e6a77241 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Siflar", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Averto di kontenajo", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 0051fee1f..d181d87a4 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -96,7 +96,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "ტუტი", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "მედია მონიშნულია მგრძნობიარედ", "compose_form.sensitive.unmarked": "მედია არაა მონიშნული მგრძნობიარედ", "compose_form.spoiler.marked": "გაფრთხილების უკან ტექსტი დამალულია", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 8a0014e91..e8673adc8 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index b3822ff08..67b231ee4 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 8a0014e91..e8673adc8 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 41d983f48..f98a624a0 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -96,7 +96,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Publicēt", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "Mēdijs ir atzīmēts kā sensitīvs", "compose_form.sensitive.unmarked": "Mēdijs nav atzīmēts kā sensitīvs", "compose_form.spoiler.marked": "Teksts ir paslēpts aiz brīdinājuma", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 0c5a84204..4d48ac5e4 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "ടൂട്ട്", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "എഴുത്ത് മുന്നറിയിപ്പിനാൽ മറച്ചിരിക്കുന്നു", "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "compose_form.spoiler_placeholder": "നിങ്ങളുടെ മുന്നറിയിപ്പ് ഇവിടെ എഴുതുക", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index e07baddff..feba70f40 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index ffac61ed0..9fcb55438 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index a140fa36e..66631004c 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Tutni", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Ovde upišite upozorenje", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index b3822ff08..67b231ee4 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index b3822ff08..67b231ee4 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 4763dcbd3..ec0f1a0da 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -96,7 +96,7 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "టూట్", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "మీడియా సున్నితమైనదిగా గుర్తించబడింది", "compose_form.sensitive.unmarked": "మీడియా సున్నితమైనదిగా గుర్తించబడలేదు", "compose_form.spoiler.marked": "హెచ్చరిక వెనుక పాఠ్యం దాచబడింది", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index b3822ff08..67b231ee4 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -96,9 +96,9 @@ "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index ada675496..decca849f 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -98,7 +98,7 @@ "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "وسائل کو حساس نشاندہ کریں", "compose_form.sensitive.marked": "وسائل حساس نشاندہ ہے", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "Write your warning here", From 2ae751f19d48c12e70a445ce1d01149866b56ce8 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Tue, 27 Oct 2020 21:34:02 +0900 Subject: [PATCH 131/422] Fix width of content text fluctuating over time (#15055) --- app/javascript/styles/mastodon/components.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 28f2a27a6..deec5c68a 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -794,6 +794,10 @@ cursor: pointer; } +.status__content { + clear: both; +} + .status__content, .reply-indicator__content { position: relative; From c79626493a90db80c6b486e4b96863bd203df34c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2020 16:55:59 +0900 Subject: [PATCH 132/422] Bump css-loader from 4.3.0 to 5.0.0 (#15011) Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 4.3.0 to 5.0.0. - [Release notes](https://github.com/webpack-contrib/css-loader/releases) - [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/css-loader/compare/v4.3.0...v5.0.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 126 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 77 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 8a823eb54..3ad6a1602 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "classnames": "^2.2.5", "compression-webpack-plugin": "^6.0.3", "cross-env": "^7.0.2", - "css-loader": "^4.3.0", + "css-loader": "^5.0.0", "cssnano": "^4.1.10", "detect-passive-events": "^1.0.5", "dotenv": "^8.2.0", diff --git a/yarn.lock b/yarn.lock index da830e219..bf538a270 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2678,10 +2678,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" - integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.0.0, camelcase@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" + integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== caniuse-api@^3.0.0: version "3.0.0" @@ -3269,22 +3269,22 @@ css-list-helpers@^1.0.1: dependencies: tcomb "^2.5.0" -css-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== +css-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.0.tgz#f0a48dfacc3ab9936a05ee16a09e7f313872e117" + integrity sha512-9g35eXRBgjvswyJWoqq/seWp+BOxvUl8IinVNTsUBFFxtwfEYvlmEn6ciyn0liXGbGh5HyJjPGCuobDSfqMIVg== dependencies: - camelcase "^6.0.0" + camelcase "^6.1.0" cssesc "^3.0.0" - icss-utils "^4.1.1" + icss-utils "^5.0.0" loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" + postcss "^8.1.1" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" + schema-utils "^3.0.0" semver "^7.3.2" css-select-base-adapter@^0.1.1: @@ -5344,12 +5344,10 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" +icss-utils@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.0.0.tgz#03ed56c3accd32f9caaf1752ebf64ef12347bb84" + integrity sha512-aF2Cf/CkEZrI/vsu5WI/I+akFgdbwQHVE9YRZxATrhH4PVIe6a3BIjwjEcW+z+jP/hNh+YvM3lAAn1wJQ6opSg== idb-keyval@^3.2.0: version "3.2.0" @@ -6657,6 +6655,14 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -7159,6 +7165,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nanoid@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8101,38 +8112,33 @@ postcss-minify-selectors@^4.0.2: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" + icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" + postcss-selector-parser "^6.0.4" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + icss-utils "^5.0.0" postcss-normalize-charset@^4.0.1: version "4.0.1" @@ -8262,7 +8268,7 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -8271,6 +8277,16 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + postcss-svgo@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" @@ -8310,7 +8326,7 @@ postcss@^5.0.16: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -8319,6 +8335,16 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.1: + version "8.1.2" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.2.tgz#9731fcaa4f7b0bef47121821bdae9eeb609a324c" + integrity sha512-mToqEVFq8jF9TFhlIK4HhE34zknFJuNTgqtsr60vUvrWn+9TIYugCwiV1JZRxCuOrej2jjstun1bn4Bc7/1HkA== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.12" + source-map "^0.6.1" + postgres-array@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.3.tgz#c561fc3b266b21451fc6555384f4986d78ec80f5" @@ -9453,7 +9479,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.7.1: +schema-utils@^2.2.0, schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -10769,7 +10795,7 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= From d56e14a9cbf47701c261b6b03bb4597bd1b26dd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2020 17:02:55 +0900 Subject: [PATCH 133/422] Bump mini-css-extract-plugin from 0.11.3 to 1.2.0 (#15034) Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.11.3 to 1.2.0. - [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.11.3...v1.2.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 53 ++++++---------------------------------------------- 2 files changed, 7 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 3ad6a1602..1fc2f3759 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "lodash": "^4.17.19", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^0.11.3", + "mini-css-extract-plugin": "^1.2.0", "mkdirp": "^1.0.4", "npmlog": "^4.1.2", "object-assign": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index bf538a270..126b80907 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5845,11 +5845,6 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -7001,14 +6996,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" - integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== +mini-css-extract-plugin@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.0.tgz#f1bdfa7bb6f6a238bc327f813f204283ea33ee36" + integrity sha512-iBZokjaIjHvI4N0AURx5aPBawcmxB/d2NYikxZ4J57Lg5sDShUPyWvuSWl1dueI5oCs7nz8V7qtOCaLjB7AYPw== dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" webpack-sources "^1.1.0" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: @@ -7305,16 +7299,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -8377,11 +8361,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" @@ -8556,14 +8535,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -9773,13 +9744,6 @@ sockjs@0.3.20: uuid "^3.4.0" websocket-driver "0.6.5" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -10025,11 +9989,6 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" From 8d7fbe7dd9b0a64915a96d342579ab80951be840 Mon Sep 17 00:00:00 2001 From: fuyu <54523771+mfmfuyu@users.noreply.github.com> Date: Fri, 30 Oct 2020 21:09:20 +0900 Subject: [PATCH 134/422] Fix wrong seek bar width on media player (#15060) --- app/javascript/mastodon/features/audio/index.js | 4 ++-- app/javascript/mastodon/features/video/index.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js index 2992e3662..434148e8e 100644 --- a/app/javascript/mastodon/features/audio/index.js +++ b/app/javascript/mastodon/features/audio/index.js @@ -246,7 +246,7 @@ class Audio extends React.PureComponent { handleTimeUpdate = () => { this.setState({ currentTime: this.audio.currentTime, - duration: Math.floor(this.audio.duration), + duration: this.audio.duration, }); } @@ -454,7 +454,7 @@ class Audio extends React.PureComponent { {formatTime(Math.floor(currentTime))} / - {formatTime(this.state.duration || Math.floor(this.props.duration))} + {formatTime(Math.floor(this.state.duration || this.props.duration))}
diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index 642722193..229a92140 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -198,7 +198,7 @@ class Video extends React.PureComponent { handleTimeUpdate = () => { this.setState({ currentTime: this.video.currentTime, - duration: Math.floor(this.video.duration), + duration:this.video.duration, }); } @@ -551,7 +551,7 @@ class Video extends React.PureComponent { {formatTime(Math.floor(currentTime))} / - {formatTime(duration)} + {formatTime(Math.floor(duration))} )} From f1f0400adcd667b8ea558dad0bf42236f12530f4 Mon Sep 17 00:00:00 2001 From: Darius Kazemi Date: Fri, 30 Oct 2020 05:09:51 -0700 Subject: [PATCH 135/422] Show announcements in reverse chronological order (#15065) --- .../features/getting_started/components/announcements.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index 4853c3935..d53bd8055 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -437,7 +437,7 @@ class Announcements extends ImmutablePureComponent { selected={index === idx} disabled={disableSwiping} /> - ))} + )).reverse()} {announcements.size > 1 && ( From c49805efb1b9eaca46c774ef6f9b27d0f18363c0 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 1 Nov 2020 06:34:43 +0100 Subject: [PATCH 136/422] Fix poll ending notifications being created for each vote (#15071) On a poll ending, notifications were created for each vote instead of for each voter. --- app/workers/poll_expiration_notify_worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/poll_expiration_notify_worker.rb b/app/workers/poll_expiration_notify_worker.rb index 8a12fc075..f0191d479 100644 --- a/app/workers/poll_expiration_notify_worker.rb +++ b/app/workers/poll_expiration_notify_worker.rb @@ -15,7 +15,7 @@ class PollExpirationNotifyWorker end # Notify local voters - poll.votes.includes(:account).map(&:account).select(&:local?).each do |account| + poll.votes.includes(:account).group(:account_id).select(:account_id).map(&:account).select(&:local?).each do |account| NotifyService.new.call(account, :poll, poll) end rescue ActiveRecord::RecordNotFound From 9d023ed4f6d8a69699d14479d5e12132ea4f4cd2 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 1 Nov 2020 18:31:39 +0100 Subject: [PATCH 137/422] Fix some account media gallery items having empty labels (#15073) Remove the labels entirely for images instead of putting an empty label. --- .../mastodon/features/account_gallery/components/media_item.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.js b/app/javascript/mastodon/features/account_gallery/components/media_item.js index c9a7af7f7..ba7ec46a3 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.js +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.js @@ -122,7 +122,7 @@ export default class MediaItem extends ImmutablePureComponent {
{content} - {label} + {label && {label}}
); } From fa929d8b81002c95f729517d3ce3985f090c5980 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 1 Nov 2020 23:38:31 +0100 Subject: [PATCH 138/422] Tweak signature verification (#15069) * Add more specific error message when request body digest is invalid This may help other implementors debug their implementation. * Relax Host parameter requirement to GET requests The only POST requests processed by Mastodon need objects/actors (including their host) to be explicitly mentioned in the request's body, so replaying a legitimate request to another host should not be a security issue. * Support Digest headers using multiple algorithms or lowercase alogirthm names --- .../concerns/signature_verification.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index f69c62ec2..fc3978fbb 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -76,6 +76,7 @@ module SignatureVerification raise SignatureVerificationError, 'Signed request date outside acceptable time window' unless matches_time_window? verify_signature_strength! + verify_body_digest! account = account_from_key_id(signature_params['keyId']) @@ -126,10 +127,19 @@ module SignatureVerification def verify_signature_strength! raise SignatureVerificationError, 'Mastodon requires the Date header or (created) pseudo-header to be signed' unless signed_headers.include?('date') || signed_headers.include?('(created)') raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(Request::REQUEST_TARGET) || signed_headers.include?('digest') - raise SignatureVerificationError, 'Mastodon requires the Host header to be signed' unless signed_headers.include?('host') + raise SignatureVerificationError, 'Mastodon requires the Host header to be signed when doing a GET request' if request.get? && !signed_headers.include?('host') raise SignatureVerificationError, 'Mastodon requires the Digest header to be signed when doing a POST request' if request.post? && !signed_headers.include?('digest') end + def verify_body_digest! + return unless signed_headers.include?('digest') + + digests = request.headers['Digest'].split(',').map { |digest| digest.split('=', 2) }.map { |key, value| [key.downcase, value] } + sha256 = digests.assoc('sha-256') + raise SignatureVerificationError, "Mastodon only supports SHA-256 in Digest header. Offered algorithms: #{digests.map(&:first).join(', ')}" if sha256.nil? + raise SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{sha256[1]}" if body_digest != sha256[1] + end + def verify_signature(account, signature, compare_signed_string) if account.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), signature, compare_signed_string) @signed_request_account = account @@ -153,8 +163,6 @@ module SignatureVerification raise SignatureVerificationError, 'Pseudo-header (expires) used but corresponding argument missing' if signature_params['expires'].blank? "(expires): #{signature_params['expires']}" - elsif signed_header == 'digest' - "digest: #{body_digest}" else "#{signed_header}: #{request.headers[to_header_name(signed_header)]}" end @@ -187,7 +195,7 @@ module SignatureVerification end def body_digest - "SHA-256=#{Digest::SHA256.base64digest(request_body)}" + @body_digest ||= Digest::SHA256.base64digest(request_body) end def to_header_name(name) From 4b2ec4a2dc3348ff27f74f442e408d92075bf7c2 Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Mon, 2 Nov 2020 06:16:51 +0100 Subject: [PATCH 139/422] Fix postrgres secret name for cronjob (#15072) The cronjob tries to get key from `mastodon` secret instead of `mastodon-postgresql` - so the cronjob fails with this error: Error: couldn't find key postgresql-password in Secret [NS]/mastodon Another solution is to save the postgres password in mastodon secret, but that means that the password is placed in two places. Postgresql use -postgresql name as secret name. --- chart/templates/cronjob-media-remove.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/templates/cronjob-media-remove.yaml b/chart/templates/cronjob-media-remove.yaml index 5d78f3395..8a01a2551 100644 --- a/chart/templates/cronjob-media-remove.yaml +++ b/chart/templates/cronjob-media-remove.yaml @@ -55,7 +55,7 @@ spec: {{- if .Values.postgresql.enabled }} name: {{ .Release.Name }}-postgresql {{- else }} - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.fullname" . }}-postgresql {{- end }} key: postgresql-password - name: "REDIS_PASSWORD" From 6a2db10f767879b9072b6c020ebadac4f985ed34 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Tue, 3 Nov 2020 04:16:38 +0800 Subject: [PATCH 140/422] Add expand/compress image button on image view box (#15068) * add zoom image button * enhance zoom algorithm & add translation * code structure * code structure * code structure * enhance grab performance * rm useless state * fix behavior on Firefox & scroll lock & horizontal scroll with mousewheel * remove scroll lock on MouseWheelEvent * code structure * enhance algorithm and code structure * rm Gemfile.lock from tree * codeclimate * fix a stupid mistake --- .../features/ui/components/image_loader.js | 4 + .../features/ui/components/media_modal.js | 24 +- .../features/ui/components/zoomable_image.js | 299 ++++++++++++++++-- app/javascript/mastodon/locales/ar.json | 23 ++ app/javascript/mastodon/locales/ast.json | 23 ++ app/javascript/mastodon/locales/bg.json | 23 ++ app/javascript/mastodon/locales/bn.json | 23 ++ app/javascript/mastodon/locales/br.json | 23 ++ app/javascript/mastodon/locales/ca.json | 23 ++ app/javascript/mastodon/locales/co.json | 23 ++ app/javascript/mastodon/locales/cs.json | 23 ++ app/javascript/mastodon/locales/cy.json | 23 ++ app/javascript/mastodon/locales/da.json | 23 ++ app/javascript/mastodon/locales/de.json | 23 ++ .../mastodon/locales/defaultMessages.json | 15 +- app/javascript/mastodon/locales/el.json | 23 ++ app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/eo.json | 23 ++ app/javascript/mastodon/locales/es-AR.json | 23 ++ app/javascript/mastodon/locales/es.json | 23 ++ app/javascript/mastodon/locales/et.json | 23 ++ app/javascript/mastodon/locales/eu.json | 23 ++ app/javascript/mastodon/locales/fa.json | 23 ++ app/javascript/mastodon/locales/fi.json | 23 ++ app/javascript/mastodon/locales/fr.json | 23 ++ app/javascript/mastodon/locales/ga.json | 23 ++ app/javascript/mastodon/locales/gl.json | 23 ++ app/javascript/mastodon/locales/he.json | 23 ++ app/javascript/mastodon/locales/hi.json | 23 ++ app/javascript/mastodon/locales/hr.json | 23 ++ app/javascript/mastodon/locales/hu.json | 23 ++ app/javascript/mastodon/locales/hy.json | 23 ++ app/javascript/mastodon/locales/id.json | 23 ++ app/javascript/mastodon/locales/io.json | 23 ++ app/javascript/mastodon/locales/is.json | 23 ++ app/javascript/mastodon/locales/it.json | 23 ++ app/javascript/mastodon/locales/ja.json | 23 +- app/javascript/mastodon/locales/ka.json | 23 ++ app/javascript/mastodon/locales/kab.json | 23 ++ app/javascript/mastodon/locales/kk.json | 23 ++ app/javascript/mastodon/locales/kn.json | 23 ++ app/javascript/mastodon/locales/ko.json | 23 ++ app/javascript/mastodon/locales/ku.json | 23 ++ app/javascript/mastodon/locales/lt.json | 23 ++ app/javascript/mastodon/locales/lv.json | 23 ++ app/javascript/mastodon/locales/mk.json | 23 ++ app/javascript/mastodon/locales/ml.json | 23 ++ app/javascript/mastodon/locales/mr.json | 23 ++ app/javascript/mastodon/locales/ms.json | 23 ++ app/javascript/mastodon/locales/nl.json | 23 ++ app/javascript/mastodon/locales/nn.json | 23 ++ app/javascript/mastodon/locales/no.json | 23 ++ app/javascript/mastodon/locales/oc.json | 23 ++ app/javascript/mastodon/locales/pl.json | 23 ++ app/javascript/mastodon/locales/pt-BR.json | 23 ++ app/javascript/mastodon/locales/pt-PT.json | 23 ++ app/javascript/mastodon/locales/ro.json | 23 ++ app/javascript/mastodon/locales/ru.json | 23 ++ app/javascript/mastodon/locales/sc.json | 23 ++ app/javascript/mastodon/locales/sk.json | 23 ++ app/javascript/mastodon/locales/sl.json | 23 ++ app/javascript/mastodon/locales/sq.json | 23 ++ app/javascript/mastodon/locales/sr-Latn.json | 23 ++ app/javascript/mastodon/locales/sr.json | 23 ++ app/javascript/mastodon/locales/sv.json | 23 ++ app/javascript/mastodon/locales/szl.json | 23 ++ app/javascript/mastodon/locales/ta.json | 23 ++ app/javascript/mastodon/locales/tai.json | 23 ++ app/javascript/mastodon/locales/te.json | 23 ++ app/javascript/mastodon/locales/th.json | 23 ++ app/javascript/mastodon/locales/tr.json | 23 ++ app/javascript/mastodon/locales/ug.json | 23 ++ app/javascript/mastodon/locales/uk.json | 23 ++ app/javascript/mastodon/locales/ur.json | 23 ++ app/javascript/mastodon/locales/vi.json | 23 ++ app/javascript/mastodon/locales/zh-CN.json | 23 ++ app/javascript/mastodon/locales/zh-HK.json | 23 ++ app/javascript/mastodon/locales/zh-TW.json | 23 ++ .../styles/mastodon/components.scss | 29 ++ 79 files changed, 2029 insertions(+), 23 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/image_loader.js b/app/javascript/mastodon/features/ui/components/image_loader.js index 5e1cf75af..c6f16a792 100644 --- a/app/javascript/mastodon/features/ui/components/image_loader.js +++ b/app/javascript/mastodon/features/ui/components/image_loader.js @@ -13,6 +13,7 @@ export default class ImageLoader extends React.PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, + zoomButtonHidden: PropTypes.bool, } static defaultProps = { @@ -151,6 +152,9 @@ export default class ImageLoader extends React.PureComponent { alt={alt} src={src} onClick={onClick} + width={width} + height={height} + zoomButtonHidden={this.props.zoomButtonHidden} /> )}
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index 54ec51fcf..d18f26b4e 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -38,23 +38,39 @@ class MediaModal extends ImmutablePureComponent { state = { index: null, navigationHidden: false, + zoomButtonHidden: false, }; handleSwipe = (index) => { this.setState({ index: index % this.props.media.size }); } + handleTransitionEnd = () => { + this.setState({ + zoomButtonHidden: false, + }); + } + handleNextClick = () => { - this.setState({ index: (this.getIndex() + 1) % this.props.media.size }); + this.setState({ + index: (this.getIndex() + 1) % this.props.media.size, + zoomButtonHidden: true, + }); } handlePrevClick = () => { - this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size }); + this.setState({ + index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size, + zoomButtonHidden: true, + }); } handleChangeIndex = (e) => { const index = Number(e.currentTarget.getAttribute('data-index')); - this.setState({ index: index % this.props.media.size }); + this.setState({ + index: index % this.props.media.size, + zoomButtonHidden: true, + }); } handleKeyDown = (e) => { @@ -149,6 +165,7 @@ class MediaModal extends ImmutablePureComponent { alt={image.get('description')} key={image.get('url')} onClick={this.toggleNavigation} + zoomButtonHidden={this.state.zoomButtonHidden} /> ); } else if (image.get('type') === 'video') { @@ -212,6 +229,7 @@ class MediaModal extends ImmutablePureComponent { style={swipeableViewsStyle} containerStyle={containerStyle} onChangeIndex={this.handleSwipe} + onTransitionEnd={this.handleTransitionEnd} index={index} disabled={disableSwiping} > diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.js b/app/javascript/mastodon/features/ui/components/zoomable_image.js index 3f6562bc9..4753a7a1c 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.js +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.js @@ -1,8 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; +import IconButton from 'mastodon/components/icon_button'; +import { defineMessages, injectIntl } from 'react-intl'; + +const messages = defineMessages({ + compress: { id: 'lightbox.compress', defaultMessage: 'Compress image view box' }, + expand: { id: 'lightbox.expand', defaultMessage: 'Expand image view box' }, +}); const MIN_SCALE = 1; const MAX_SCALE = 4; +const NAV_BAR_HEIGHT = 66; const getMidpoint = (p1, p2) => ({ x: (p1.clientX + p2.clientX) / 2, @@ -14,7 +22,77 @@ const getDistance = (p1, p2) => const clamp = (min, max, value) => Math.min(max, Math.max(min, value)); -export default class ZoomableImage extends React.PureComponent { +// Normalizing mousewheel speed across browsers +// copy from: https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js +const normalizeWheel = event => { + // Reasonable defaults + const PIXEL_STEP = 10; + const LINE_HEIGHT = 40; + const PAGE_HEIGHT = 800; + + let sX = 0, + sY = 0, // spinX, spinY + pX = 0, + pY = 0; // pixelX, pixelY + + // Legacy + if ('detail' in event) { + sY = event.detail; + } + if ('wheelDelta' in event) { + sY = -event.wheelDelta / 120; + } + if ('wheelDeltaY' in event) { + sY = -event.wheelDeltaY / 120; + } + if ('wheelDeltaX' in event) { + sX = -event.wheelDeltaX / 120; + } + + // side scrolling on FF with DOMMouseScroll + if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) { + sX = sY; + sY = 0; + } + + pX = sX * PIXEL_STEP; + pY = sY * PIXEL_STEP; + + if ('deltaY' in event) { + pY = event.deltaY; + } + if ('deltaX' in event) { + pX = event.deltaX; + } + + if ((pX || pY) && event.deltaMode) { + if (event.deltaMode === 1) { // delta in LINE units + pX *= LINE_HEIGHT; + pY *= LINE_HEIGHT; + } else { // delta in PAGE units + pX *= PAGE_HEIGHT; + pY *= PAGE_HEIGHT; + } + } + + // Fall-back if spin cannot be determined + if (pX && !sX) { + sX = (pX < 1) ? -1 : 1; + } + if (pY && !sY) { + sY = (pY < 1) ? -1 : 1; + } + + return { + spinX: sX, + spinY: sY, + pixelX: pX, + pixelY: pY, + }; +}; + +export default @injectIntl +class ZoomableImage extends React.PureComponent { static propTypes = { alt: PropTypes.string, @@ -22,6 +100,8 @@ export default class ZoomableImage extends React.PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, + zoomButtonHidden: PropTypes.bool, + intl: PropTypes.object.isRequired, } static defaultProps = { @@ -32,6 +112,22 @@ export default class ZoomableImage extends React.PureComponent { state = { scale: MIN_SCALE, + zoomMatrix: { + type: null, // 'full-width' 'full-height' + rate: null, // full screen scale rate + clientWidth: null, + clientHeight: null, + offsetWidth: null, + offsetHeight: null, + clientHeightFixed: null, + scrollTop: null, + scrollLeft: null, + }, + zoomState: 'expand', // 'expand' 'compress' + navigationHidden: false, + dragPosition: { top: 0, left: 0, x: 0, y: 0 }, + dragged: false, + lockScroll: { x: 0, y: 0 }, } removers = []; @@ -49,17 +145,101 @@ export default class ZoomableImage extends React.PureComponent { // https://www.chromestatus.com/features/5093566007214080 this.container.addEventListener('touchmove', handler, { passive: false }); this.removers.push(() => this.container.removeEventListener('touchend', handler)); + + handler = this.mouseDownHandler; + this.container.addEventListener('mousedown', handler); + this.removers.push(() => this.container.removeEventListener('mousedown', handler)); + + handler = this.mouseWheelHandler; + this.container.addEventListener('wheel', handler); + this.removers.push(() => this.container.removeEventListener('wheel', handler)); + // Old Chrome + this.container.addEventListener('mousewheel', handler); + this.removers.push(() => this.container.removeEventListener('mousewheel', handler)); + // Old Firefox + this.container.addEventListener('DOMMouseScroll', handler); + this.removers.push(() => this.container.removeEventListener('DOMMouseScroll', handler)); + + this.initZoomMatrix(); } componentWillUnmount () { this.removeEventListeners(); } + componentDidUpdate () { + if (this.props.zoomButtonHidden) { + this.setState({ scale: MIN_SCALE }, () => { + this.container.scrollLeft = 0; + this.container.scrollTop = 0; + }); + } + + this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' }); + + if (this.state.scale === 1) { + this.container.style.removeProperty('cursor'); + } + } + removeEventListeners () { this.removers.forEach(listeners => listeners()); this.removers = []; } + mouseWheelHandler = e => { + e.preventDefault(); + + const event = normalizeWheel(e); + + if (this.state.zoomMatrix.type === 'full-width') { + // full width, scroll vertical + this.container.scrollTop = this.container.scrollTop + event.pixelY; + } else { + // full height, scroll horizontal + this.container.scrollLeft = this.container.scrollLeft + event.pixelY; + } + } + + mouseDownHandler = e => { + this.container.style.cursor = 'grabbing'; + this.container.style.userSelect = 'none'; + + this.setState({ dragPosition: { + left: this.container.scrollLeft, + top: this.container.scrollTop, + // Get the current mouse position + x: e.clientX, + y: e.clientY, + } }); + + this.image.addEventListener('mousemove', this.mouseMoveHandler); + this.image.addEventListener('mouseup', this.mouseUpHandler); + } + + mouseMoveHandler = e => { + const dx = e.clientX - this.state.dragPosition.x; + const dy = e.clientY - this.state.dragPosition.y; + + if ((this.state.dragPosition.left - dx) >= this.state.lockScroll.x) { + this.container.scrollLeft = this.state.dragPosition.left - dx; + } + + if ((this.state.dragPosition.top - dy) >= this.state.lockScroll.y) { + this.container.scrollTop = this.state.dragPosition.top - dy; + } + + this.setState({ dragged: true }); + } + + mouseUpHandler = () => { + this.container.style.cursor = 'grab'; + this.container.style.removeProperty('user-select'); + + this.image.removeEventListener('mousemove', this.mouseMoveHandler); + this.image.removeEventListener('mouseup', this.mouseUpHandler); + } + handleTouchStart = e => { if (e.touches.length !== 2) return; @@ -80,7 +260,8 @@ export default class ZoomableImage extends React.PureComponent { const distance = getDistance(...e.touches); const midpoint = getMidpoint(...e.touches); - const scale = clamp(MIN_SCALE, MAX_SCALE, this.state.scale * distance / this.lastDistance); + const _MAX_SCALE = Math.max(MAX_SCALE, this.state.zoomMatrix.rate); + const scale = clamp(MIN_SCALE, _MAX_SCALE, this.state.scale * distance / this.lastDistance); this.zoom(scale, midpoint); @@ -110,8 +291,72 @@ export default class ZoomableImage extends React.PureComponent { handleClick = e => { // don't propagate event to MediaModal e.stopPropagation(); + const dragged = this.state.dragged; + this.setState({ dragged: false }); + if (dragged) return; const handler = this.props.onClick; if (handler) handler(); + this.setState({ navigationHidden: !this.state.navigationHidden }); + } + + handleMouseDown = e => { + e.preventDefault(); + } + + initZoomMatrix = () => { + const { width, height } = this.props; + const { clientWidth, clientHeight } = this.container; + const { offsetWidth, offsetHeight } = this.image; + const clientHeightFixed = clientHeight - NAV_BAR_HEIGHT; + + const type = width/height < clientWidth / clientHeightFixed ? 'full-width' : 'full-height'; + const rate = type === 'full-width' ? clientWidth / offsetWidth : clientHeightFixed / offsetHeight; + const scrollTop = type === 'full-width' ? (clientHeight - offsetHeight) / 2 - NAV_BAR_HEIGHT : (clientHeightFixed - offsetHeight) / 2; + const scrollLeft = (clientWidth - offsetWidth) / 2; + + this.setState({ + zoomMatrix: { + type: type, + rate: rate, + clientWidth: clientWidth, + clientHeight: clientHeight, + offsetWidth: offsetWidth, + offsetHeight: offsetHeight, + clientHeightFixed: clientHeightFixed, + scrollTop: scrollTop, + scrollLeft: scrollLeft, + }, + }); + } + + handleZoomClick = e => { + e.preventDefault(); + e.stopPropagation(); + + const { scale, zoomMatrix } = this.state; + + if ( scale >= zoomMatrix.rate ) { + this.setState({ scale: MIN_SCALE }, () => { + this.container.scrollLeft = 0; + this.container.scrollTop = 0; + this.setState({ lockScroll: { + x: 0, + y: 0, + } }); + }); + } else { + this.setState({ scale: zoomMatrix.rate }, () => { + this.container.scrollLeft = zoomMatrix.scrollLeft; + this.container.scrollTop = zoomMatrix.scrollTop; + this.setState({ lockScroll: { + x: zoomMatrix.scrollLeft, + y: zoomMatrix.scrollTop, + } }); + }); + } + + this.container.style.cursor = 'grab'; + this.container.style.removeProperty('user-select'); } setContainerRef = c => { @@ -123,29 +368,47 @@ export default class ZoomableImage extends React.PureComponent { } render () { - const { alt, src } = this.props; + const { alt, src, width, height, intl } = this.props; const { scale } = this.state; const overflow = scale === 1 ? 'hidden' : 'scroll'; + const zoomButtonSshouldHide = !this.state.navigationHidden && !this.props.zoomButtonHidden ? '' : 'media-modal__zoom-button--hidden'; + const zoomButtonTitle = this.state.zoomState === 'compress' ? intl.formatMessage(messages.compress) : intl.formatMessage(messages.expand); return ( -
- {alt} + -
+
+ {alt} +
+ ); } diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 548471edf..c22fac1fa 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "تصفح المزيد على الملف التعريفي الأصلي", "account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.direct": "رسالة خاصة إلى @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "النطاق مخفي", "account.edit_profile": "تعديل الملف الشخصي", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "أوصِ به على صفحتك", "account.follow": "تابِع", "account.followers": "مُتابِعون", @@ -166,7 +168,9 @@ "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات", "error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", "follow_request.authorize": "ترخيص", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "lightbox.close": "إغلاق", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "التالي", "lightbox.previous": "العودة", "lightbox.view_context": "اعرض السياق", @@ -260,6 +266,10 @@ "lists.edit.submit": "تعديل العنوان", "lists.new.create": "إنشاء قائمة", "lists.new.title_placeholder": "عنوان القائمة الجديدة", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها", "lists.subheading": "قوائمك", "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "عرض / إخفاء", "missing_indicator.label": "غير موجود", "missing_indicator.sublabel": "تعذر العثور على هذا المورد", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "تطبيقات الأجهزة المحمولة", "navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.bookmarks": "الفواصل المرجعية", @@ -298,6 +310,7 @@ "notification.own_poll": "انتهى استطلاعك للرأي", "notification.poll": "لقد إنتها تصويت شاركت فيه", "notification.reblog": "{name} قام بترقية تبويقك", + "notification.status": "{name} just posted", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.column_settings.alert": "إشعارات سطح المكتب", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "اعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", "notifications.filter.favourites": "المفضلة", "notifications.filter.follows": "يتابِع", "notifications.filter.mentions": "الإشارات", "notifications.filter.polls": "نتائج استطلاع الرأي", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} إشعارات", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "انتهى", "poll.refresh": "تحديث", "poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "اكتشف النص مِن الصورة", "upload_modal.edit_media": "تعديل الوسائط", "upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "معاينة ({ratio})", "upload_progress.label": "يرفع...", "video.close": "إغلاق الفيديو", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 59f8660f1..e0b67d6bb 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Encaboxar la solicitú de siguimientu", "account.direct": "Unviar un mensaxe direutu a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominiu anubríu", "account.edit_profile": "Editar el perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Destacar nel perfil", "account.follow": "Siguir", "account.followers": "Siguidores", @@ -166,7 +168,9 @@ "empty_column.notifications": "Entá nun tienes nunengún avisu. Interactúa con otros p'aniciar la conversación.", "empty_column.public": "¡Equí nun hai nada! Escribi daqué público o sigui a usuarios d'otros sirvidores pa rellenar esto", "error.unexpected_crash.explanation": "Pola mor d'un fallu nel códigu o un problema de compatibilidá del restolador, esta páxina nun pudo amosase correutamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "pa desenfocar l'área de composición/gueta", "keyboard_shortcuts.up": "pa xubir na llista", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Siguiente", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "Títulu nuevu de la llista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Guetar ente la xente que sigues", "lists.subheading": "Les tos llistes", "load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar la visibilidá", "missing_indicator.label": "Nun s'alcontró", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "¿Anubrir los avisos d'esti usuariu?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicaciones pa móviles", "navigation_bar.blocks": "Usuarios bloquiaos", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "Finó una encuesta na que votesti", "notification.reblog": "{name} compartió'l to estáu", + "notification.status": "{name} just posted", "notifications.clear": "Llimpiar avisos", "notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?", "notifications.column_settings.alert": "Avisos d'escritoriu", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Barritos compartíos:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir un soníu", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Too", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} avisos", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Acabó", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# persona} other {# persones}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Deteutar el testu de la semeya", "upload_modal.edit_media": "Edición", "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que va amosase siempres en toles miniatures.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previsualización ({ratio})", "upload_progress.label": "Xubiendo…", "video.close": "Zarrar el videu", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 4e5cea459..3ffa07a71 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Скрит домейн", "account.edit_profile": "Редактирай профила си", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Характеристика на профила", "account.follow": "Последвай", "account.followers": "Последователи", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Затвори", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} сподели твоята публикация", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Десктоп известия", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Споделяния:", "notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 7de1a1022..ead3d29f1 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন", "account.direct": "@{name} কে সরাসরি বার্তা", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "ডোমেন গোপন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "নিজের পাতায় দেখান", "account.follow": "অনুসরণ করুন", "account.followers": "অনুসরণকারী", @@ -166,7 +168,9 @@ "empty_column.notifications": "আপনার এখনো কোনো প্রজ্ঞাপন নেই। কথোপকথন শুরু করতে, অন্যদের সাথে মেলামেশা করতে পারেন।", "empty_column.public": "এখানে এখনো কিছু নেই! প্রকাশ্য ভাবে কিছু লিখুন বা অন্য সার্ভার থেকে কাওকে অনুসরণ করে এই জায়গা ভরে ফেলুন", "error.unexpected_crash.explanation": "আমাদের কোড বা ব্রাউজারের সামঞ্জস্য ইস্যুতে একটি বাগের কারণে এই পৃষ্ঠাটি সঠিকভাবে প্রদর্শিত করা যায় নি।", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "পাতাটি রিফ্রেশ করে চেষ্টা করুন। তবুও যদি না হয়, তবে আপনি অন্য একটি ব্রাউজার অথবা আপনার ডিভাইসের জন্যে এপের মাধ্যমে মাস্টডন ব্যাবহার করতে পারবেন।.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "follow_request.authorize": "অনুমতি দিন", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "লেখা বা খোঁজার জায়গায় ফোকাস না করতে", "keyboard_shortcuts.up": "তালিকার উপরের দিকে যেতে", "lightbox.close": "বন্ধ", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "পরবর্তী", "lightbox.previous": "পূর্ববর্তী", "lightbox.view_context": "প্রসঙ্গটি দেখতে", @@ -260,6 +266,10 @@ "lists.edit.submit": "শিরোনাম সম্পাদনা করতে", "lists.new.create": "তালিকাতে যুক্ত করতে", "lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন", "lists.subheading": "আপনার তালিকা", "load_pending": "{count, plural, one {# নতুন জিনিস} other {# নতুন জিনিস}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান", "missing_indicator.label": "খুঁজে পাওয়া যায়নি", "missing_indicator.sublabel": "জিনিসটা খুঁজে পাওয়া যায়নি", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "মোবাইলের আপ্প", "navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "আপনার পোল শেষ হয়েছে", "notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে", "notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন", + "notification.status": "{name} just posted", "notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে", "notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?", "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "সমর্থনগুলো:", "notifications.column_settings.show": "কলামে দেখানো", "notifications.column_settings.sound": "শব্দ বাজানো", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "সব", "notifications.filter.boosts": "সমর্থনগুলো", "notifications.filter.favourites": "পছন্দের গুলো", "notifications.filter.follows": "অনুসরণের", "notifications.filter.mentions": "উল্লেখিত", "notifications.filter.polls": "নির্বাচনের ফলাফল", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} প্রজ্ঞাপন", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "বন্ধ", "poll.refresh": "বদলেছে কিনা দেখতে", "poll.total_people": "{count, plural, one {# ব্যক্তি} other {# ব্যক্তি}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন", "upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন", "upload_modal.hint": "একটি দৃশ্যমান পয়েন্ট নির্বাচন করুন ক্লিক অথবা টানার মাধ্যমে যেটি সবময় সব থাম্বনেলে দেখা যাবে।", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "পূর্বরূপ({ratio})", "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...", "video.close": "ভিডিওটি বন্ধ করতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 72a6d0a0a..bb1461354 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Nullañ ar bedadenn heuliañ", "account.direct": "Kas ur gemennadenn da @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domani berzet", "account.edit_profile": "Aozañ ar profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Lakaat war-wel war ar profil", "account.follow": "Heuliañ", "account.followers": "Heulier·ezed·ien", @@ -166,7 +168,9 @@ "empty_column.notifications": "N'ho peus kemenn ebet c'hoazh. Grit gant implijer·ezed·ien all evit loc'hañ ar gomz.", "empty_column.public": "N'eus netra amañ! Skrivit un dra bennak foran pe heuilhit implijer·ien·ezed eus dafariadoù all evit leuniañ", "error.unexpected_crash.explanation": "Abalamour d'ur beug en hor c'hod pe d'ur gudenn geverlec'hded n'hallomp ket skrammañ ar bajenn-mañ en un doare dereat.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Klaskit azbevaat ar bajenn. Ma n'a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", "follow_request.authorize": "Aotren", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Serriñ", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", "lightbox.view_context": "Diskouez ar c'hemperzh", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cheñch an titl", "lists.new.create": "Ouzhpennañ ul listenn", "lists.new.title_placeholder": "Titl nevez al listenn", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Ho listennoù", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Digavet", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Arloadoù pellgomz", "navigation_bar.blocks": "Implijer·ezed·ien berzet", "navigation_bar.bookmarks": "Sinedoù", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Skarzhañ ar c'hemennoù", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Kemennoù war ar burev", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Skignadennoù:", "notifications.column_settings.show": "Diskouez er bann", "notifications.column_settings.sound": "Seniñ", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Pep tra", "notifications.filter.boosts": "Skignadennoù", "notifications.filter.favourites": "Muiañ-karet", "notifications.filter.follows": "Heuliañ", "notifications.filter.mentions": "Menegoù", "notifications.filter.polls": "Disoc'hoù ar sontadegoù", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} a gemennoù", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Serret", "poll.refresh": "Azbevaat", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Dinoiñ testenn diouzh ar skeudenn", "upload_modal.edit_media": "Embann ar media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Rakwel ({ratio})", "upload_progress.label": "O pellgargañ...", "video.close": "Serriñ ar video", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 7c149787f..9bb17241a 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Navega més en el perfil original", "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.direct": "Missatge directe @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domini ocult", "account.edit_profile": "Edita el perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Recomana en el teu perfil", "account.follow": "Segueix", "account.followers": "Seguidors", @@ -166,7 +168,9 @@ "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho", "error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina podria no ser mostrada correctament.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una app nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", "follow_request.authorize": "Autoritzar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "descentrar l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "moure amunt en la llista", "lightbox.close": "Tancar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Següent", "lightbox.previous": "Anterior", "lightbox.view_context": "Veure el context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Canvi de títol", "lists.new.create": "Afegir llista", "lists.new.title_placeholder": "Nova llista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar visibilitat", "missing_indicator.label": "No trobat", "missing_indicator.sublabel": "Aquest recurs no pot ser trobat", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Apps mòbils", "navigation_bar.blocks": "Usuaris bloquejats", "navigation_bar.bookmarks": "Marcadors", @@ -298,6 +310,7 @@ "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en la que has votat", "notification.reblog": "{name} ha impulsat el teu estat", + "notification.status": "{name} just posted", "notifications.clear": "Netejar notificacions", "notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?", "notifications.column_settings.alert": "Notificacions d'escriptori", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostra en la columna", "notifications.column_settings.sound": "Reproduir so", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tots", "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats de l'enquesta", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificacions", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Finalitzada", "poll.refresh": "Actualitza", "poll.total_people": "{count, plural, one {# persona} other {# persones}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detecta el text de l'imatge", "upload_modal.edit_media": "Editar multimèdia", "upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previsualitza ({ratio})", "upload_progress.label": "Pujant...", "video.close": "Tancar el vídeo", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 1bd9cda0b..4856a2ba3 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Vede di più nant'à u prufile uriginale", "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu", "account.direct": "Missaghju direttu @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Duminiu piattatu", "account.edit_profile": "Mudificà u prufile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Fà figurà nant'à u prufilu", "account.follow": "Siguità", "account.followers": "Abbunati", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.", "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica", "error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", "follow_request.authorize": "Auturizà", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu", "keyboard_shortcuts.up": "cullà indè a lista", "lightbox.close": "Chjudà", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", "lightbox.view_context": "Vede u cuntestu", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambià u titulu", "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Cambià a visibilità", "missing_indicator.label": "Micca trovu", "missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Applicazione per u telefuninu", "navigation_bar.blocks": "Utilizatori bluccati", "navigation_bar.bookmarks": "Segnalibri", @@ -298,6 +310,7 @@ "notification.own_poll": "U vostru scandagliu hè compiu", "notification.poll": "Un scandagliu induve avete vutatu hè finitu", "notification.reblog": "{name} hà spartutu u vostru statutu", + "notification.status": "{name} just posted", "notifications.clear": "Purgà e nutificazione", "notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?", "notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tuttu", "notifications.filter.boosts": "Spartere", "notifications.filter.favourites": "Favuriti", "notifications.filter.follows": "Abbunamenti", "notifications.filter.mentions": "Minzione", "notifications.filter.polls": "Risultati di u scandagliu", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} nutificazione", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Chjosu", "poll.refresh": "Attualizà", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Ditettà testu da u ritrattu", "upload_modal.edit_media": "Cambià media", "upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Vista ({ratio})", "upload_progress.label": "Caricamentu...", "video.close": "Chjudà a video", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 0ddd18de8..9f223d724 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Více na původním profilu", "account.cancel_follow_request": "Zrušit žádost o sledování", "account.direct": "Poslat uživateli @{name} přímou zprávu", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Zvýraznit na profilu", "account.follow": "Sledovat", "account.followers": "Sledující", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.", "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo", "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlásit problém", "follow_request.authorize": "Autorizovat", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání", "keyboard_shortcuts.up": "posunutí nahoru v seznamu", "lightbox.close": "Zavřít", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Další", "lightbox.previous": "Předchozí", "lightbox.view_context": "Zobrazit kontext", @@ -260,6 +266,10 @@ "lists.edit.submit": "Změnit název", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Přepnout viditelnost", "missing_indicator.label": "Nenalezeno", "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilní aplikace", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", @@ -298,6 +310,7 @@ "notification.own_poll": "Vaše anketa skončila", "notification.poll": "Anketa, ve které jste hlasovali, skončila", "notification.reblog": "Uživatel {name} boostnul váš toot", + "notification.status": "{name} just posted", "notifications.clear": "Smazat oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", "notifications.column_settings.alert": "Oznámení na počítači", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.show": "Zobrazit ve sloupci", "notifications.column_settings.sound": "Přehrát zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Vše", "notifications.filter.boosts": "Boosty", "notifications.filter.favourites": "Oblíbení", "notifications.filter.follows": "Sledování", "notifications.filter.mentions": "Zmínky", "notifications.filter.polls": "Výsledky anket", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} oznámení", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Uzavřeno", "poll.refresh": "Obnovit", "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detekovat text z obrázku", "upload_modal.edit_media": "Upravit média", "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Náhled ({ratio})", "upload_progress.label": "Nahrávání…", "video.close": "Zavřít video", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 312a0f97a..4e961b225 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Canslo cais dilyn", "account.direct": "Neges breifat @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Parth wedi ei guddio", "account.edit_profile": "Golygu proffil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Arddangos ar fy mhroffil", "account.follow": "Dilyn", "account.followers": "Dilynwyr", @@ -166,7 +168,9 @@ "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.", "empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o achosion eraill i'w lenwi", "error.unexpected_crash.explanation": "Oherwydd gwall yn ein cod neu oherwydd problem cysondeb porwr, nid oedd y dudalen hon gallu cael ei dangos yn gywir.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Ceisiwch ail-lwytho y dudalen. Os nad yw hyn yn eich helpu, efallai gallech defnyddio Mastodon trwy borwr neu ap brodorol gwahanol.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", "follow_request.authorize": "Caniatau", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "i ddad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "i symud yn uwch yn y rhestr", "lightbox.close": "Cau", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", "lightbox.view_context": "Gweld cyd-destyn", @@ -260,6 +266,10 @@ "lists.edit.submit": "Newid teitl", "lists.new.create": "Ychwanegu rhestr", "lists.new.title_placeholder": "Teitl rhestr newydd", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn", "lists.subheading": "Eich rhestrau", "load_pending": "{count, plural, one {# eitem newydd} other {# eitemau newydd}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Toglo gwelededd", "missing_indicator.label": "Heb ei ganfod", "missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Apiau symudol", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.bookmarks": "Tudalnodau", @@ -298,6 +310,7 @@ "notification.own_poll": "Mae eich pôl wedi diweddu", "notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben", "notification.reblog": "Hysbysebodd {name} eich tŵt", + "notification.status": "{name} just posted", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Hybiadau:", "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Pob", "notifications.filter.boosts": "Hybiadau", "notifications.filter.favourites": "Ffefrynnau", "notifications.filter.follows": "Yn dilyn", "notifications.filter.mentions": "Crybwylliadau", "notifications.filter.polls": "Canlyniadau pleidlais", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} o hysbysiadau", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Ar gau", "poll.refresh": "Adnewyddu", "poll.total_people": "{count, plural, one {# berson} other {# o bobl}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Canfod testun o'r llun", "upload_modal.edit_media": "Golygu cyfryngau", "upload_modal.hint": "Cliciwch neu llusgwch y cylch ar y rhagolwg i ddewis y canolbwynt a fydd bob amser i'w weld ar bob mân-lunau.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Rhagolwg ({ratio})", "upload_progress.label": "Uwchlwytho...", "video.close": "Cau fideo", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index a0fb354e6..f8319ca18 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Annullér følgeranmodning", "account.direct": "Send en direkte besked til @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domænet er blevet skjult", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Fremhæv på profil", "account.follow": "Følg", "account.followers": "Følgere", @@ -166,7 +168,9 @@ "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.", "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet", "error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen", "errors.unexpected_crash.report_issue": "Rapportér problem", "follow_request.authorize": "Godkend", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning", "keyboard_shortcuts.up": "for at bevæge dig op ad listen", "lightbox.close": "Luk", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Næste", "lightbox.previous": "Forrige", "lightbox.view_context": "Vis kontekst", @@ -260,6 +266,10 @@ "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", "lists.new.title_placeholder": "Ny liste titel", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Søg iblandt folk du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ændre synlighed", "missing_indicator.label": "Ikke fundet", "missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobil apps", "navigation_bar.blocks": "Blokerede brugere", "navigation_bar.bookmarks": "Bogmærker", @@ -298,6 +310,7 @@ "notification.own_poll": "Din afstemning er afsluttet", "notification.poll": "En afstemning, du stemte i, er slut", "notification.reblog": "{name} boostede din status", + "notification.status": "{name} just posted", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?", "notifications.column_settings.alert": "Skrivebordsnotifikationer", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", "notifications.filter.mentions": "Statusser der nævner dig", "notifications.filter.polls": "Afstemningsresultat", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifikationer", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Lukket", "poll.refresh": "Opdatér", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Find tekst i billede på automatisk vis", "upload_modal.edit_media": "Redigér medie", "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Uploader...", "video.close": "Luk video", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index d0274b077..6dcb0185e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Mehr auf dem Originalprofil durchsuchen", "account.cancel_follow_request": "Folgeanfrage abbrechen", "account.direct": "Direktnachricht an @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Auf Profil hervorheben", "account.follow": "Folgen", "account.followers": "Folgende", @@ -166,7 +168,9 @@ "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen", "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browser-Inkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Problem melden", "follow_request.authorize": "Erlauben", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "sich in der Liste hinauf bewegen", "lightbox.close": "Schließen", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Weiter", "lightbox.previous": "Zurück", "lightbox.view_context": "Beitrag sehen", @@ -260,6 +266,10 @@ "lists.edit.submit": "Titel ändern", "lists.new.create": "Liste hinzufügen", "lists.new.title_placeholder": "Neuer Titel der Liste", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Sichtbarkeit umschalten", "missing_indicator.label": "Nicht gefunden", "missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile Apps", "navigation_bar.blocks": "Blockierte Profile", "navigation_bar.bookmarks": "Lesezeichen", @@ -298,6 +310,7 @@ "notification.own_poll": "Deine Umfrage ist beendet", "notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei", "notification.reblog": "{name} hat deinen Beitrag geteilt", + "notification.status": "{name} just posted", "notifications.clear": "Mitteilungen löschen", "notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Geteilte Beiträge", "notifications.filter.favourites": "Favorisierungen", "notifications.filter.follows": "Folgt", "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} Benachrichtigungen", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Geschlossen", "poll.refresh": "Aktualisieren", "poll.total_people": "{count, plural, one {# Person} other {# Personen}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Text aus Bild erkennen", "upload_modal.edit_media": "Medien bearbeiten", "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Vorschau ({ratio})", "upload_progress.label": "Wird hochgeladen …", "video.close": "Video schließen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index be1d308e6..c49c6399d 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -3201,6 +3201,19 @@ ], "path": "app/javascript/mastodon/features/ui/components/video_modal.json" }, + { + "descriptors": [ + { + "defaultMessage": "Compress image view box", + "id": "lightbox.compress" + }, + { + "defaultMessage": "Expand image view box", + "id": "lightbox.expand" + } + ], + "path": "app/javascript/mastodon/features/ui/components/zoomable_image.json" + }, { "descriptors": [ { @@ -3259,4 +3272,4 @@ ], "path": "app/javascript/mastodon/features/video/index.json" } -] +] \ No newline at end of file diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 2108c4ab6..750dcf079 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ", "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.direct": "Προσωπικό μήνυμα προς @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Κρυμμένος τομέας", "account.edit_profile": "Επεξεργασία προφίλ", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Προβολή στο προφίλ", "account.follow": "Ακολούθησε", "account.followers": "Ακόλουθοι", @@ -166,7 +168,9 @@ "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.", "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις", "error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "follow_request.authorize": "Ενέκρινε", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "απο-εστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "κίνηση προς την κορυφή της λίστας", "lightbox.close": "Κλείσιμο", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", "lightbox.view_context": "Εμφάνιση πλαισίου", @@ -260,6 +266,10 @@ "lists.edit.submit": "Αλλαγή τίτλου", "lists.new.create": "Προσθήκη λίστας", "lists.new.title_placeholder": "Τίτλος νέας λίστα", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", "load_pending": "{count, plural, one {# νέο} other {# νέα}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Εναλλαγή ορατότητας", "missing_indicator.label": "Δε βρέθηκε", "missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Εφαρμογές φορητών συσκευών", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.bookmarks": "Σελιδοδείκτες", @@ -298,6 +310,7 @@ "notification.own_poll": "Η ψηφοφορία σου έληξε", "notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες", "notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου", + "notification.status": "{name} just posted", "notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Προωθήσεις:", "notifications.column_settings.show": "Εμφάνισε σε στήλη", "notifications.column_settings.sound": "Ηχητική ειδοποίηση", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Όλες", "notifications.filter.boosts": "Προωθήσεις", "notifications.filter.favourites": "Αγαπημένα", "notifications.filter.follows": "Ακόλουθοι", "notifications.filter.mentions": "Αναφορές", "notifications.filter.polls": "Αποτελέσματα ψηφοφορίας", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} ειδοποιήσεις", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Κλειστή", "poll.refresh": "Ανανέωση", "poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα", "upload_modal.edit_media": "Επεξεργασία Πολυμέσων", "upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Προεπισκόπηση ({ratio})", "upload_progress.label": "Ανεβαίνει...", "video.close": "Κλείσε το βίντεο", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 078b83cae..ccc95db7a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -254,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 886083392..47cd7ccf0 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domajno kaŝita", "account.edit_profile": "Redakti profilon", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Montri en profilo", "account.follow": "Sekvi", "account.followers": "Sekvantoj", @@ -166,7 +168,9 @@ "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Provu refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo", "errors.unexpected_crash.report_issue": "Raporti problemon", "follow_request.authorize": "Rajtigi", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sekva", "lightbox.previous": "Antaŭa", "lightbox.view_context": "Vidi kuntekston", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ŝanĝi titolon", "lists.new.create": "Aldoni liston", "lists.new.title_placeholder": "Titolo de la nova listo", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Baskuligi videblecon", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", @@ -298,6 +310,7 @@ "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Partoprenita balotenketo finiĝis", "notification.reblog": "{name} diskonigis vian mesaĝon", + "notification.status": "{name} just posted", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.column_settings.alert": "Retumilaj sciigoj", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Diskonigoj", "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} sciigoj", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Finita", "poll.refresh": "Aktualigi", "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detekti tekston de la bildo", "upload_modal.edit_media": "Redakti aŭdovidaĵon", "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", "upload_progress.label": "Alŝutado…", "video.close": "Fermi la videon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index fda386455..e94df48f9 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Explorar más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominio oculto", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Destacar en el perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -166,7 +168,9 @@ "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.", "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "follow_request.authorize": "Autorizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "para subir en la lista", "lightbox.close": "Cerrar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", "lists.new.title_placeholder": "Nuevo título de lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Buscar entre la gente que seguís", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "missing_indicator.label": "No se encontró", "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Tu encuesta finalizó", "notification.poll": "Finalizó una encuesta en la que votaste", "notification.reblog": "{name} retooteó tu estado", + "notification.status": "{name} just posted", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la encuesta", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificaciones", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Cerrada", "poll.refresh": "Refrescar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar medio", "upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previsualización ({ratio})", "upload_progress.label": "Subiendo…", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 62238a748..c01d9dda5 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Ver más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominio oculto", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Mostrar en perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -166,7 +168,9 @@ "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", "follow_request.authorize": "Autorizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "missing_indicator.label": "No encontrado", "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Tu encuesta ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado", "notification.reblog": "{name} ha retooteado tu estado", + "notification.status": "{name} just posted", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificaciones", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Cerrada", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Subiendo…", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 558fe38de..4e42fb999 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Tühista jälgimistaotlus", "account.direct": "Otsesõnum @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domeen peidetud", "account.edit_profile": "Muuda profiili", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Too profiilil esile", "account.follow": "Jälgi", "account.followers": "Jälgijad", @@ -166,7 +168,9 @@ "empty_column.notifications": "Teil ei ole veel teateid. Suhelge teistega alustamaks vestlust.", "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi", "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", "errors.unexpected_crash.report_issue": "Teavita veast", "follow_request.authorize": "Autoriseeri", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks", "keyboard_shortcuts.up": "liikumaks nimistus üles", "lightbox.close": "Sulge", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", "lightbox.view_context": "Vaata konteksti", @@ -260,6 +266,10 @@ "lists.edit.submit": "Muuda pealkiri", "lists.new.create": "Lisa nimistu", "lists.new.title_placeholder": "Uus nimistu pealkiri", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Otsi Teie poolt jälgitavate inimese hulgast", "lists.subheading": "Teie nimistud", "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Lülita nähtavus", "missing_indicator.label": "Ei leitud", "missing_indicator.sublabel": "Seda ressurssi ei leitud", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobiilrakendused", "navigation_bar.blocks": "Blokeeritud kasutajad", "navigation_bar.bookmarks": "Järjehoidjad", @@ -298,6 +310,7 @@ "notification.own_poll": "Teie küsitlus on lõppenud", "notification.poll": "Küsitlus, milles osalesite, on lõppenud", "notification.reblog": "{name} upitas Teie staatust", + "notification.status": "{name} just posted", "notifications.clear": "Puhasta teated", "notifications.clear_confirmation": "Olete kindel, et soovite püsivalt kõik oma teated eemaldada?", "notifications.column_settings.alert": "Töölauateated", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Upitused:", "notifications.column_settings.show": "Kuva tulbas", "notifications.column_settings.sound": "Mängi heli", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Kõik", "notifications.filter.boosts": "Upitused", "notifications.filter.favourites": "Lemmikud", "notifications.filter.follows": "Jälgib", "notifications.filter.mentions": "Mainimised", "notifications.filter.polls": "Küsitluse tulemused", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} teated", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Suletud", "poll.refresh": "Värskenda", "poll.total_people": "{count, plural,one {# inimene} other {# inimest}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Tuvasta teksti pildilt", "upload_modal.edit_media": "Muuda meediat", "upload_modal.hint": "Vajuta või tõmba ringi eelvaatel, et valida fookuspunkti, mis on alati nähtaval kõikidel eelvaadetel.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Eelvaade ({ratio})", "upload_progress.label": "Laeb üles....", "video.close": "Sulge video", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 09471ff2a..5139d83aa 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Nabarmendu profilean", "account.follow": "Jarraitu", "account.followers": "Jarraitzaileak", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.", "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko", "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", "errors.unexpected_crash.report_issue": "Eman arazoaren berri", "follow_request.authorize": "Baimendu", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "lightbox.close": "Itxi", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", "lightbox.view_context": "Ikusi testuingurua", @@ -260,6 +266,10 @@ "lists.edit.submit": "Aldatu izenburua", "lists.new.create": "Gehitu zerrenda", "lists.new.title_placeholder": "Zerrenda berriaren izena", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.subheading": "Zure zerrendak", "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna", "missing_indicator.label": "Ez aurkitua", "missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mugikorrerako aplikazioak", "navigation_bar.blocks": "Blokeatutako erabiltzaileak", "navigation_bar.bookmarks": "Laster-markak", @@ -298,6 +310,7 @@ "notification.own_poll": "Zure inkesta amaitu da", "notification.poll": "Zuk erantzun duzun inkesta bat bukatu da", "notification.reblog": "{name}(e)k bultzada eman dio zure mezuari", + "notification.status": "{name} just posted", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Bultzadak:", "notifications.column_settings.show": "Erakutsi zutabean", "notifications.column_settings.sound": "Jo soinua", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Denak", "notifications.filter.boosts": "Bultzadak", "notifications.filter.favourites": "Gogokoak", "notifications.filter.follows": "Jarraipenak", "notifications.filter.mentions": "Aipamenak", "notifications.filter.polls": "Inkestaren emaitza", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} jakinarazpen", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Itxita", "poll.refresh": "Berritu", "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Antzeman testua iruditik", "upload_modal.edit_media": "Editatu media", "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Aurreikusi ({ratio})", "upload_progress.label": "Igotzen...", "video.close": "Itxi bideoa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 6685b2ccb..a8313623c 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "مرور بیش‌تر روی نمایهٔ اصلی", "account.cancel_follow_request": "لغو درخواست پیگیری", "account.direct": "پیام خصوصی به @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "دامنهٔ نهفته", "account.edit_profile": "ویرایش نمایه", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "معرّفی در نمایه", "account.follow": "پی بگیرید", "account.followers": "پی‌گیران", @@ -166,7 +168,9 @@ "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا این‌جا پر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستودون از راه یک مرورگر دیگر یا با یکی از اپ‌های آن کار کنید.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "follow_request.authorize": "اجازه دهید", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو", "keyboard_shortcuts.up": "برای بالا رفتن در فهرست", "lightbox.close": "بستن", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", "lightbox.view_context": "نمایش گفتگو", @@ -260,6 +266,10 @@ "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", "lists.new.title_placeholder": "عنوان فهرست تازه", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.subheading": "فهرست‌های شما", "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "تغییر وضعیت نمایانی", "missing_indicator.label": "پیدا نشد", "missing_indicator.sublabel": "این منبع پیدا نشد", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "اعلان‌های این کاربر پنهان شود؟", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "اپ‌های موبایل", "navigation_bar.blocks": "کاربران مسدودشده", "navigation_bar.bookmarks": "نشانک‌ها", @@ -298,6 +310,7 @@ "notification.own_poll": "نظرسنجی شما به پایان رسید", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", "notification.reblog": "‫{name}‬ وضعیتتان را تقویت کرد", + "notification.status": "{name} just posted", "notifications.clear": "پاک‌کردن اعلان‌ها", "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟", "notifications.column_settings.alert": "اعلان‌های میزکار", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "بازبوق‌ها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "همه", "notifications.filter.boosts": "بازبوق‌ها", "notifications.filter.favourites": "پسندها", "notifications.filter.follows": "پیگیری‌ها", "notifications.filter.mentions": "نام‌بردن‌ها", "notifications.filter.polls": "نتایج نظرسنجی", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} اعلان", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "پایان‌یافته", "poll.refresh": "به‌روزرسانی", "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "تشخیص متن درون عکس", "upload_modal.edit_media": "ویرایش رسانه", "upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابه‌جا کردن آن تنظیم کنید.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "پیش‌نمایش ({ratio})", "upload_progress.label": "در حال بارگذاری…", "video.close": "بستن ویدیو", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 51f95e08c..4a0d4aef1 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", "account.followers": "Seuraajaa", @@ -166,7 +168,9 @@ "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "follow_request.authorize": "Valtuuta", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", "keyboard_shortcuts.up": "siirry listassa ylöspäin", "lightbox.close": "Sulje", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", "lightbox.view_context": "Näytä kontekstissa", @@ -260,6 +266,10 @@ "lists.edit.submit": "Vaihda otsikko", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listat", "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Säädä näkyvyyttä", "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobiilisovellukset", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", @@ -298,6 +310,7 @@ "notification.own_poll": "Kyselysi on päättynyt", "notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.reblog": "{name} buustasi tilaasi", + "notification.status": "{name} just posted", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.alert": "Työpöytäilmoitukset", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Kaikki", "notifications.filter.boosts": "Buustit", "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraa", "notifications.filter.mentions": "Maininnat", "notifications.filter.polls": "Kyselyn tulokset", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} ilmoitusta", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Suljettu", "poll.refresh": "Päivitä", "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "video.close": "Sulje video", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5329923da..1abaf51b6 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domaine bloqué", "account.edit_profile": "Modifier le profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Recommander sur le profil", "account.follow": "Suivre", "account.followers": "Abonné·e·s", @@ -166,7 +168,9 @@ "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", "follow_request.authorize": "Accepter", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche", "keyboard_shortcuts.up": "remonter dans la liste", "lightbox.close": "Fermer", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "lightbox.view_context": "Voir le contexte", @@ -260,6 +266,10 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Intervertir la visibilité", "missing_indicator.label": "Non trouvé", "missing_indicator.sublabel": "Ressource introuvable", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Masquer les notifications de cette personne ?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Applications mobiles", "navigation_bar.blocks": "Comptes bloqués", "navigation_bar.bookmarks": "Marque-pages", @@ -298,6 +310,7 @@ "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre statut", + "notification.status": "{name} just posted", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", "notifications.column_settings.alert": "Notifications du navigateur", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tout", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favoris", "notifications.filter.follows": "Abonnés", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Fermé", "poll.refresh": "Actualiser", "poll.total_people": "{count, plural, one {# personne} other {# personnes}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Détecter le texte de l’image", "upload_modal.edit_media": "Modifier le média", "upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Aperçu ({ratio})", "upload_progress.label": "Envoi en cours…", "video.close": "Fermer la vidéo", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 39334297b..22230ab73 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 44d8b4662..811526acb 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Busca máis no perfil orixinal", "account.cancel_follow_request": "Desbotar solicitude de seguimento", "account.direct": "Mensaxe directa @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Amosar no perfil", "account.follow": "Seguir", "account.followers": "Seguidoras", @@ -166,7 +168,9 @@ "empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.", "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo", "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Tenta actualizar a páxina. Se esto non axuda podes tamén empregar Mastodon noutro navegador ou aplicación nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", "follow_request.authorize": "Autorizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "para mover cara arriba na listaxe", "lightbox.close": "Fechar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", "lightbox.view_context": "Ollar contexto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Procurar entre as persoas que segues", "lists.subheading": "As túas listaxes", "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Trocar visibilidade", "missing_indicator.label": "Non atopado", "missing_indicator.sublabel": "Este recurso non foi atopado", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Agochar notificacións desta usuaria?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicacións móbiles", "navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "A túa enquisa rematou", "notification.poll": "Unha enquisa na que votaches rematou", "notification.reblog": "{name} compartiu o teu estado", + "notification.status": "{name} just posted", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", "notifications.column_settings.alert": "Notificacións de escritorio", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir son", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Todo", "notifications.filter.boosts": "Compartidos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguimentos", "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificacións", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Pechado", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural,one {# persoa} other {# persoas}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar texto na imaxe", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Preme ou arrastra o círculo na vista previa para escoller o punto focal que sempre estará á vista en todas as miniaturas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Estase a subir...", "video.close": "Pechar vídeo", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index ed2248953..cce1f29e7 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "המשך לגלוש בפרופיל המקורי", "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "הצג בפרופיל", "account.follow": "מעקב", "account.followers": "עוקבים", @@ -166,7 +168,9 @@ "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.", "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "קבלה", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "הלאה", "lightbox.previous": "הקודם", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "נראה\\בלתי נראה", "missing_indicator.label": "לא נמצא", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "חסימות", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "חצרוצך הודהד על ידי {name}", + "notification.status": "{name} just posted", "notifications.clear": "הסרת התראות", "notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?", "notifications.column_settings.alert": "התראות לשולחן העבודה", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "עולה...", "video.close": "סגירת וידאו", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index cec0c689f..4670e593b 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें", "account.direct": "प्रत्यक्ष संदेश @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "छिपा हुआ डोमेन", "account.edit_profile": "प्रोफ़ाइल संपादित करें", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "प्रोफ़ाइल पर दिखाए", "account.follow": "फॉलो करें", "account.followers": "फॉलोवर", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "follow_request.authorize": "अधिकार दें", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "नहीं मिला", "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "मोबाइल एप्लिकेशंस", "navigation_bar.blocks": "ब्लॉक्ड यूज़र्स", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "बूस्ट:", "notifications.column_settings.show": "कॉलम में दिखाएँ", "notifications.column_settings.sound": "ध्वनि चलाएँ", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "सभी", "notifications.filter.boosts": "बूस्ट", "notifications.filter.favourites": "पसंदीदा", "notifications.filter.follows": "फॉलो", "notifications.filter.mentions": "उल्लेख", "notifications.filter.polls": "चुनाव परिणाम", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} सूचनाएँ", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "बंद कर दिया", "poll.refresh": "रीफ्रेश करें", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "मीडिया में संशोधन करें", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "अपलोडिंग...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 96289cf86..3002ca49d 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Uredi profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Slijedi", "account.followers": "Sljedbenici", @@ -166,7 +168,9 @@ "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.", "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autoriziraj", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Zatvori", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Preklopi vidljivost", "missing_indicator.label": "Nije nađen", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} je podigao tvoj status", + "notification.status": "{name} just posted", "notifications.clear": "Očisti notifikacije", "notifications.clear_confirmation": "Želiš li zaista obrisati sve svoje notifikacije?", "notifications.column_settings.alert": "Desktop notifikacije", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploadam...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 9afadd7d6..77fdfb3c7 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "További böngészés az eredeti profilon", "account.cancel_follow_request": "Követési kérelem törlése", "account.direct": "Közvetlen üzenet @{name} számára", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Kiemelés a profilodon", "account.follow": "Követés", "account.followers": "Követő", @@ -166,7 +168,9 @@ "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.", "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd", "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", "follow_request.authorize": "Engedélyezés", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele", "keyboard_shortcuts.up": "felfelé mozdítás a listában", "lightbox.close": "Bezárás", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Következő", "lightbox.previous": "Előző", "lightbox.view_context": "Kontextus megtekintése", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", "lists.new.title_placeholder": "Új lista címe", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", "load_pending": "{count, plural, one {# új elem} other {# új elem}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Láthatóság állítása", "missing_indicator.label": "Nincs találat", "missing_indicator.sublabel": "Ez az erőforrás nem található", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobil appok", "navigation_bar.blocks": "Letiltott felhasználók", "navigation_bar.bookmarks": "Könyvjelzők", @@ -298,6 +310,7 @@ "notification.own_poll": "A szavazásod véget ért", "notification.poll": "Egy szavazás, melyben részt vettél, véget ért", "notification.reblog": "{name} megtolta a tülködet", + "notification.status": "{name} just posted", "notifications.clear": "Értesítések törlése", "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", "notifications.column_settings.alert": "Asztali értesítések", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Megtolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Mind", "notifications.filter.boosts": "Megtolások", "notifications.filter.favourites": "Kedvencnek jelölések", "notifications.filter.follows": "Követések", "notifications.filter.mentions": "Megemlítések", "notifications.filter.polls": "Szavazások eredményei", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} értesítés", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Lezárva", "poll.refresh": "Frissítés", "poll.total_people": "{count, plural, one {# személy} other {# személy}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Szöveg felismerése a képről", "upload_modal.edit_media": "Média szerkesztése", "upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Előnézet ({ratio})", "upload_progress.label": "Feltöltés...", "video.close": "Videó bezárása", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 8c6cb1de2..af2873410 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Դիտել ավելին իրական պրոֆիլում", "account.cancel_follow_request": "չեղարկել հետեւելու հայցը", "account.direct": "Նամակ գրել @{name} -ին", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել անձնական էջը", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Ցուցադրել անձնական էջում", "account.follow": "Հետեւել", "account.followers": "Հետեւողներ", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։", "empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։", "error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", "follow_request.authorize": "Վավերացնել", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար", "keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար", "lightbox.close": "Փակել", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Հաջորդ", "lightbox.previous": "Նախորդ", "lightbox.view_context": "Տեսնել ենթատեքստը", @@ -260,6 +266,10 @@ "lists.edit.submit": "Փոխել վերնագիրը", "lists.new.create": "Ավելացնել ցանկ", "lists.new.title_placeholder": "Նոր ցանկի վերնագիր", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.subheading": "Քո ցանկերը", "load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ցուցադրել/թաքցնել", "missing_indicator.label": "Չգտնվեց", "missing_indicator.sublabel": "Պաշարը չի գտնւում", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Դիւրակիր յաւելուածներ", "navigation_bar.blocks": "Արգելափակված օգտատերեր", "navigation_bar.bookmarks": "Էջանիշեր", @@ -298,6 +310,7 @@ "notification.own_poll": "Հարցումդ աւարտուեց", "notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։", "notification.reblog": "{name} տարածեց թութդ", + "notification.status": "{name} just posted", "notifications.clear": "Մաքրել ծանուցումները", "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապես մաքրել քո բոլոր ծանուցումները։", "notifications.column_settings.alert": "Աշխատատիրույթի ծանուցումներ", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.show": "Ցուցադրել սիւնում", "notifications.column_settings.sound": "Ձայն հանել", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Բոլորը", "notifications.filter.boosts": "Տարածածները", "notifications.filter.favourites": "Հաւանածները", "notifications.filter.follows": "Հետեւածները", "notifications.filter.mentions": "Նշումները", "notifications.filter.polls": "Հարցման արդիւնքները", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} ծանուցում", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Փակ", "poll.refresh": "Թարմացնել", "poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Հայտնբերել տեքստը նկարից", "upload_modal.edit_media": "Խմբագրել մեդիան", "upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Նախադիտում ({ratio})", "upload_progress.label": "Վերբեռնվում է…", "video.close": "Փակել տեսագրութիւնը", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 91ad76e03..310a2cb67 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Batalkan permintaan ikuti", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain disembunyikan", "account.edit_profile": "Ubah profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", @@ -166,7 +168,9 @@ "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.", "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini", "error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", "follow_request.authorize": "Izinkan", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", "lightbox.view_context": "Lihat konteks", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ubah judul", "lists.new.create": "Tambah daftar", "lists.new.title_placeholder": "Judul daftar baru", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Cari di antara orang yang Anda ikuti", "lists.subheading": "Daftar Anda", "load_pending": "{count, plural, other {# item baru}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Tampil/Sembunyikan", "missing_indicator.label": "Tidak ditemukan", "missing_indicator.sublabel": "Sumber daya tak bisa ditemukan", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplikasi mobile", "navigation_bar.blocks": "Pengguna diblokir", "navigation_bar.bookmarks": "Markah", @@ -298,6 +310,7 @@ "notification.own_poll": "Japat Anda telah berakhir", "notification.poll": "Japat yang Anda ikuti telah berakhir", "notification.reblog": "{name} mem-boost status anda", + "notification.status": "{name} just posted", "notifications.clear": "Hapus notifikasi", "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?", "notifications.column_settings.alert": "Notifikasi desktop", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Boost", "notifications.filter.favourites": "Favorit", "notifications.filter.follows": "Diikuti", "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Hasil japat", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifikasi", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Ditutup", "poll.refresh": "Segarkan", "poll.total_people": "{count, plural, other {# orang}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Deteksi teks pada gambar", "upload_modal.edit_media": "Sunting media", "upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Pratinjau ({ratio})", "upload_progress.label": "Mengunggah...", "video.close": "Tutup video", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 7e6a77241..1528dec69 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Modifikar profilo", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Sequar", "account.followers": "Sequanti", @@ -166,7 +168,9 @@ "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Yurizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Klozar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Chanjar videbleso", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokusita uzeri", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} repetis tua mesajo", + "notification.status": "{name} just posted", "notifications.clear": "Efacar savigi", "notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?", "notifications.column_settings.alert": "Surtabla savigi", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.sound": "Plear sono", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Kargante...", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 72d8fefaf..6b6263893 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Skoða nánari upplýsingar á notandasniðinu", "account.cancel_follow_request": "Hætta við beiðni um að fylgjast með", "account.direct": "Bein skilaboð til @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Lén falið", "account.edit_profile": "Breyta notandasniði", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Birta á notandasniði", "account.follow": "Fylgjast með", "account.followers": "Fylgjendur", @@ -166,7 +168,9 @@ "empty_column.notifications": "Þú ert ekki ennþá með neinar tilkynningar. Vertu í samskiptum við aðra til að umræður fari af stað.", "empty_column.public": "Það er ekkert hér! Skrifaðu eitthvað opinberlega, eða fylgstu með notendum á öðrum netþjónum til að fylla upp í þetta", "error.unexpected_crash.explanation": "Vegna villu í kóðanum okkar eða samhæfnivandamála í vafra er ekki hægt að birta þessa síðu svo vel sé.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prófaðu að endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", "follow_request.authorize": "Heimila", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "að taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "að fara ofar í listanum", "lightbox.close": "Loka", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", "lightbox.view_context": "Skoða samhengi", @@ -260,6 +266,10 @@ "lists.edit.submit": "Breyta titli", "lists.new.create": "Bæta við lista", "lists.new.title_placeholder": "Titill á nýjum lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Leita meðal þeirra sem þú fylgist með", "lists.subheading": "Listarnir þínir", "load_pending": "{count, plural, one {# nýtt atriði} other {# ný atriði}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Víxla sýnileika", "missing_indicator.label": "Fannst ekki", "missing_indicator.sublabel": "Tilfangið fannst ekki", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Fela tilkynningar frá þessum notanda?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Farsímaforrit", "navigation_bar.blocks": "Útilokaðir notendur", "navigation_bar.bookmarks": "Bókamerki", @@ -298,6 +310,7 @@ "notification.own_poll": "Könnuninni þinni er lokið", "notification.poll": "Könnun sem þú tókst þátt í er lokið", "notification.reblog": "{name} endurbirti stöðufærsluna þína", + "notification.status": "{name} just posted", "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", "notifications.column_settings.alert": "Tilkynningar á skjáborði", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Endurbirtingar:", "notifications.column_settings.show": "Sýna í dálki", "notifications.column_settings.sound": "Spila hljóð", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Allt", "notifications.filter.boosts": "Endurbirtingar", "notifications.filter.favourites": "Eftirlæti", "notifications.filter.follows": "Fylgist með", "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} tilkynningar", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Lokað", "poll.refresh": "Endurlesa", "poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Skynja texta úr mynd", "upload_modal.edit_media": "Breyta myndskrá", "upload_modal.hint": "Smelltu eða dragðu til hringinn á forskoðuninni til að velja miðpunktinn sem verður alltaf sýnilegastur á öllum smámyndum.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Forskoðun ({ratio})", "upload_progress.label": "Er að senda inn...", "video.close": "Loka myndskeiði", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 077f61e48..92f8cb805 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Naviga di più sul profilo originale", "account.cancel_follow_request": "Annulla richiesta di seguirti", "account.direct": "Messaggio diretto a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Dominio bloccato", "account.edit_profile": "Modifica profilo", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Mostra sul profilo", "account.follow": "Segui", "account.followers": "Seguaci", @@ -166,7 +168,9 @@ "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala il problema", "follow_request.authorize": "Autorizza", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca", "keyboard_shortcuts.up": "per spostarsi in alto nella lista", "lightbox.close": "Chiudi", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", "lightbox.view_context": "Mostra contesto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Imposta visibilità", "missing_indicator.label": "Non trovato", "missing_indicator.sublabel": "Risorsa non trovata", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Nascondere le notifiche da quest'utente?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "App per dispositivi mobili", "navigation_bar.blocks": "Utenti bloccati", "navigation_bar.bookmarks": "Segnalibri", @@ -298,6 +310,7 @@ "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha condiviso il tuo post", + "notification.status": "{name} just posted", "notifications.clear": "Cancella notifiche", "notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?", "notifications.column_settings.alert": "Notifiche desktop", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tutti", "notifications.filter.boosts": "Condivisioni", "notifications.filter.favourites": "Apprezzati", "notifications.filter.follows": "Seguaci", "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifiche", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Chiuso", "poll.refresh": "Aggiorna", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Rileva testo dall'immagine", "upload_modal.edit_media": "Modifica media", "upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Anteprima ({ratio})", "upload_progress.label": "Sto caricando...", "video.close": "Chiudi video", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 2a1df987c..8ed634c0b 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "リモートで表示", "account.cancel_follow_request": "フォローリクエストを取り消す", "account.direct": "@{name}さんにダイレクトメッセージ", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "ドメインブロック中", "account.edit_profile": "プロフィール編集", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "プロフィールで紹介する", "account.follow": "フォロー", "account.followers": "フォロワー", @@ -166,7 +168,9 @@ "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。", "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のサーバーのユーザーをフォローしたりしていっぱいにしましょう", "error.unexpected_crash.explanation": "不具合かブラウザの互換性問題のため、このページを正しく表示できませんでした。", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "ページの再読み込みをお試しください。それでも解決しない場合、別のブラウザかアプリを使えば使用できることがあります。", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", "follow_request.authorize": "許可", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "トゥート入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "lightbox.close": "閉じる", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "次", "lightbox.previous": "前", "lightbox.view_context": "トゥートを表示", @@ -260,6 +266,10 @@ "lists.edit.submit": "タイトルを変更", "lists.new.create": "リストを作成", "lists.new.title_placeholder": "新規リスト名", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", "load_pending": "{count} 件の新着", @@ -267,8 +277,8 @@ "media_gallery.toggle_visible": "メディアを隠す", "missing_indicator.label": "見つかりません", "missing_indicator.sublabel": "見つかりませんでした", - "mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?", "mute_modal.duration": "ミュートする期間", + "mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?", "mute_modal.indefinite": "無期限", "navigation_bar.apps": "アプリ", "navigation_bar.blocks": "ブロックしたユーザー", @@ -300,6 +310,7 @@ "notification.own_poll": "アンケートが終了しました", "notification.poll": "アンケートが終了しました", "notification.reblog": "{name}さんがあなたのトゥートをブーストしました", + "notification.status": "{name} just posted", "notifications.clear": "通知を消去", "notifications.clear_confirmation": "本当に通知を消去しますか?", "notifications.column_settings.alert": "デスクトップ通知", @@ -315,13 +326,22 @@ "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムに表示", "notifications.column_settings.sound": "通知音を再生", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "すべて", "notifications.filter.boosts": "ブースト", "notifications.filter.favourites": "お気に入り", "notifications.filter.follows": "フォロー", "notifications.filter.mentions": "返信", "notifications.filter.polls": "アンケート結果", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 件の通知", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "終了", "poll.refresh": "更新", "poll.total_people": "{count}人", @@ -448,6 +468,7 @@ "upload_modal.detect_text": "画像からテキストを検出", "upload_modal.edit_media": "メディアを編集", "upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "プレビュー ({ratio})", "upload_progress.label": "アップロード中...", "video.close": "動画を閉じる", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index d181d87a4..6a0b47fdc 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "პირდაპირი წერილი @{name}-ს", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "გამორჩევა პროფილზე", "account.follow": "გაყოლა", "account.followers": "მიმდევრები", @@ -166,7 +168,9 @@ "empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.", "empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "ავტორიზაცია", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "შედგენის ტექსტ-არეაზე ფოკუსის მოსაშორებლად", "keyboard_shortcuts.up": "სიაში ზემოთ გადასაადგილებლად", "lightbox.close": "დახურვა", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "შემდეგი", "lightbox.previous": "წინა", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "სიის დამატება", "lists.new.title_placeholder": "ახალი სიის სათაური", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით", "lists.subheading": "თქვენი სიები", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "ხილვადობის ჩართვა", "missing_indicator.label": "არაა ნაპოვნი", "missing_indicator.sublabel": "ამ რესურსის პოვნა ვერ მოხერხდა", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "დავმალოთ შეტყობინებები ამ მომხმარებლისგან?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "დაბლოკილი მომხმარებლები", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name}-მა დაბუსტა თქვენი სტატუსი", + "notification.status": "{name} just posted", "notifications.clear": "შეტყობინებების გასუფთავება", "notifications.clear_confirmation": "დარწმუნებული ხართ, გსურთ სამუდამოდ წაშალოთ ყველა თქვენი შეტყობინება?", "notifications.column_settings.alert": "დესკტოპ შეტყობინებები", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "ბუსტები:", "notifications.column_settings.show": "გამოჩნდეს სვეტში", "notifications.column_settings.sound": "ხმის დაკვრა", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} შეტყობინება", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "იტვირთება...", "video.close": "ვიდეოს დახურვა", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index fde037504..3e64f2eb3 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli", "account.cancel_follow_request": "Sefsex asuter n uḍfar", "account.direct": "Izen usrid i @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Welleh fell-as deg umaɣnu-inek", "account.follow": "Ḍfer", "account.followers": "Imeḍfaren", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ulac ɣur-k tilɣa. Sedmer akked yemdanen-nniḍen akken ad tebduḍ adiwenni.", "empty_column.public": "Ulac kra da! Aru kra, neɣ ḍfeṛ imdanen i yellan deg yiqeddacen-nniḍen akken ad d-teččar tsuddemt tazayezt", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Mmel ugur", "follow_request.authorize": "Ssireg", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "lightbox.close": "Mdel", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Γer zdat", "lightbox.previous": "Γer deffir", "lightbox.view_context": "Ẓer amnaḍ", @@ -260,6 +266,10 @@ "lists.edit.submit": "Beddel azwel", "lists.new.create": "Rnu tabdart", "lists.new.title_placeholder": "Azwel amaynut n tebdart", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ffer {number, plural, one {tugna} other {tugniwin}}", "missing_indicator.label": "Ulac-it", "missing_indicator.sublabel": "Ur nufi ara aɣbalu-a", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Isnasen izirazen", "navigation_bar.blocks": "Imseqdacen yettusḥebsen", "navigation_bar.bookmarks": "Ticraḍ", @@ -298,6 +310,7 @@ "notification.own_poll": "Tafrant-ik·im tfuk", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} yebḍa tajewwiqt-ik i tikelt-nniḍen", + "notification.status": "{name} just posted", "notifications.clear": "Sfeḍ tilɣa", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", "notifications.column_settings.alert": "Tilɣa n tnarit", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Seǧhed:", "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu", "notifications.column_settings.sound": "Rmed imesli", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", "notifications.filter.favourites": "Ismenyifen", "notifications.filter.follows": "Yeṭafaṛ", "notifications.filter.mentions": "Abdar", "notifications.filter.polls": "Igemmaḍ n usenqed", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} n tilɣa", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Ifukk", "poll.refresh": "Smiren", "poll.total_people": "{count, plural, one {# n wemdan} other {# n yemdanen}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Sefru-d aḍris seg tugna", "upload_modal.edit_media": "Ẓreg taɣwalt", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Taskant ({ratio})", "upload_progress.label": "Asali iteddu...", "video.close": "Mdel tabidyutt", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 322c15fff..2b5b7a9e7 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Жазылуға сұранымды қайтару", "account.direct": "Жеке хат @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен жабық", "account.edit_profile": "Профильді өңдеу", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Профильде рекомендеу", "account.follow": "Жазылу", "account.followers": "Оқырмандар", @@ -166,7 +168,9 @@ "empty_column.notifications": "Әзірше ешқандай ескертпе жоқ. Басқалармен араласуды бастаңыз және пікірталастарға қатысыңыз.", "empty_column.public": "Ештеңе жоқ бұл жерде! Өзіңіз бастап жазып көріңіз немесе басқаларға жазылыңыз", "error.unexpected_crash.explanation": "Кодтағы баг немесе браузердегі қатеден, бұл бет дұрыс ашылмай тұр.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Бетті жаңартып көріңіз. Егер бұл көмектеспесе, Mastodon желісін басқа браузерден немесе мобиль қосымшадан ашып көріңіз.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", "errors.unexpected_crash.report_issue": "Мәселені хабарла", "follow_request.authorize": "Авторизация", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "жазба қалдыру алаңынан шығу", "keyboard_shortcuts.up": "тізімде жоғары шығу", "lightbox.close": "Жабу", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Келесі", "lightbox.previous": "Алдыңғы", "lightbox.view_context": "Контексті көрсет", @@ -260,6 +266,10 @@ "lists.edit.submit": "Тақырыбын өзгерту", "lists.new.create": "Тізім құру", "lists.new.title_placeholder": "Жаңа тізім аты", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Сіз іздеген адамдар арасында іздеу", "lists.subheading": "Тізімдеріңіз", "load_pending": "{count, plural, one {# жаңа нәрсе} other {# жаңа нәрсе}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Көрінуді қосу", "missing_indicator.label": "Табылмады", "missing_indicator.sublabel": "Бұл ресурс табылмады", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Бұл қолданушы ескертпелерін жасырамыз ба?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобиль қосымшалар", "navigation_bar.blocks": "Бұғатталғандар", "navigation_bar.bookmarks": "Бетбелгілер", @@ -298,6 +310,7 @@ "notification.own_poll": "Сауалнама аяқталды", "notification.poll": "Бұл сауалнаманың мерзімі аяқталыпты", "notification.reblog": "{name} жазбаңызды бөлісті", + "notification.status": "{name} just posted", "notifications.clear": "Ескертпелерді тазарт", "notifications.clear_confirmation": "Шынымен барлық ескертпелерді өшіресіз бе?", "notifications.column_settings.alert": "Үстел ескертпелері", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Бөлісулер:", "notifications.column_settings.show": "Бағанда көрсет", "notifications.column_settings.sound": "Дыбысын қос", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Барлығы", "notifications.filter.boosts": "Бөлісулер", "notifications.filter.favourites": "Таңдаулылар", "notifications.filter.follows": "Жазылулар", "notifications.filter.mentions": "Аталымдар", "notifications.filter.polls": "Сауалнама нәтижелері", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} ескертпе", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Жабық", "poll.refresh": "Жаңарту", "poll.total_people": "{count, plural, one {# адам} other {# адам}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Суреттен мәтін анықтау", "upload_modal.edit_media": "Медиафайлды өңдеу", "upload_modal.hint": "Алдын-ала қарау шеңберін басыңыз немесе сүйреңіз, барлық нобайларда көрінетін фокусты таңдау үшін.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Превью ({ratio})", "upload_progress.label": "Жүктеп жатыр...", "video.close": "Видеоны жабу", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index e8673adc8..6141f321e 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index f13b364b0..161f43c4f 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "원본 프로필에서 더 탐색하기", "account.cancel_follow_request": "팔로우 요청 취소", "account.direct": "@{name}의 다이렉트 메시지", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "도메인 숨겨짐", "account.edit_profile": "프로필 편집", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "프로필에 보이기", "account.follow": "팔로우", "account.followers": "팔로워", @@ -166,7 +168,9 @@ "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 유저를 팔로우 해서 채워보세요", "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 올바르게 표시할 수 없습니다.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", "follow_request.authorize": "허가", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "다음", "lightbox.previous": "이전", "lightbox.view_context": "게시물 보기", @@ -260,6 +266,10 @@ "lists.edit.submit": "제목 수정", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", "load_pending": "{count}개의 새 항목", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "표시 전환", "missing_indicator.label": "찾을 수 없습니다", "missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "이 사용자로부터의 알림을 숨기시겠습니까?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "모바일 앱", "navigation_bar.blocks": "차단한 사용자", "navigation_bar.bookmarks": "보관함", @@ -298,6 +310,7 @@ "notification.own_poll": "내 투표가 끝났습니다", "notification.poll": "당신이 참여 한 투표가 종료되었습니다", "notification.reblog": "{name}님이 부스트 했습니다", + "notification.status": "{name} just posted", "notifications.clear": "알림 지우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", "notifications.column_settings.alert": "데스크탑 알림", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", "notifications.filter.favourites": "즐겨찾기", "notifications.filter.follows": "팔로우", "notifications.filter.mentions": "멘션", "notifications.filter.polls": "투표 결과", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 개의 알림", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "마감됨", "poll.refresh": "새로고침", "poll.total_people": "{count}명", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "이미지에서 텍스트 추출", "upload_modal.edit_media": "미디어 편집", "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "미리보기 ({ratio})", "upload_progress.label": "업로드 중...", "video.close": "동영상 닫기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 67b231ee4..17ffe5519 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index e8673adc8..6141f321e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index f98a624a0..061ab2a83 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Pārlūkot vairāk sākotnējā profilā", "account.cancel_follow_request": "Atcelt pieprasījumu", "account.direct": "Privātā ziņa @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Izcelts profilā", "account.follow": "Sekot", "account.followers": "Sekotāji", @@ -166,7 +168,9 @@ "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.", "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizēt", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index aeaf7355c..b640b8c66 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Одкажи барање за следење", "account.direct": "Директна порана @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Скриен домен", "account.edit_profile": "Измени профил", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Карактеристики на профилот", "account.follow": "Следи", "account.followers": "Следбеници", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Пријавете проблем", "follow_request.authorize": "Одобри", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Бустови:", "notifications.column_settings.show": "Прикажи во колона", "notifications.column_settings.sound": "Свири звуци", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Сите", "notifications.filter.boosts": "Бустови", "notifications.filter.favourites": "Омилени", "notifications.filter.follows": "Следења", "notifications.filter.mentions": "Спомнувања", "notifications.filter.polls": "Резултати од анкета", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} нотификации", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Затворени", "poll.refresh": "Освежи", "poll.total_people": "{count, plural, one {# човек} other {# луѓе}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4d48ac5e4..c03e5c81a 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക", "account.follow": "പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", @@ -166,7 +168,9 @@ "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index feba70f40..33f8cfd84 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "अनुयायी होण्याची विनंती रद्द करा", "account.direct": "थेट संदेश @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "प्रोफाइल एडिट करा", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "अनुयायी व्हा", "account.followers": "अनुयायी", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 9fcb55438..a4006a745 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 7b94a4981..8b437e66b 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Meer op het originele profiel bekijken", "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Server verborgen", "account.edit_profile": "Profiel bewerken", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Op profiel weergeven", "account.follow": "Volgen", "account.followers": "Volgers", @@ -166,7 +168,9 @@ "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen", "error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Probeer deze pagina te vernieuwen. Wanneer dit niet helpt is het nog steeds mogelijk om Mastodon in een andere webbrowser of mobiele app te gebruiken.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", "follow_request.authorize": "Goedkeuren", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen", "keyboard_shortcuts.up": "om omhoog te bewegen in de lijst", "lightbox.close": "Sluiten", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", "lightbox.view_context": "Context tonen", @@ -260,6 +266,10 @@ "lists.edit.submit": "Titel veranderen", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Zoek naar mensen die je volgt", "lists.subheading": "Jouw lijsten", "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Media verbergen", "missing_indicator.label": "Niet gevonden", "missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Verberg meldingen van deze persoon?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobiele apps", "navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.bookmarks": "Bladwijzers", @@ -298,6 +310,7 @@ "notification.own_poll": "Jouw poll is beëindigd", "notification.poll": "Een poll waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw toot", + "notification.status": "{name} just posted", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", "notifications.column_settings.alert": "Desktopmeldingen", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alles", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favorieten", "notifications.filter.follows": "Die jij volgt", "notifications.filter.mentions": "Vermeldingen", "notifications.filter.polls": "Pollresultaten", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} meldingen", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Gesloten", "poll.refresh": "Vernieuwen", "poll.total_people": "{count, plural, one {# persoon} other {# mensen}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Tekst in een afbeelding detecteren", "upload_modal.edit_media": "Media bewerken", "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Voorvertoning ({ratio})", "upload_progress.label": "Uploaden...", "video.close": "Video sluiten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index b567a3533..56df4624c 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Fjern fylgjeførespurnad", "account.direct": "Send melding til @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domenet er gøymt", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Framhev på profil", "account.follow": "Fylg", "account.followers": "Fylgjarar", @@ -166,7 +168,9 @@ "empty_column.notifications": "Du har ingen varsel ennå. Kommuniser med andre for å starte samtalen.", "empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller følg brukarar frå andre tenarar manuelt for å fylle det opp", "error.unexpected_crash.explanation": "På grunn av ein feil i vår kode eller eit nettlesarkompatibilitetsproblem, kunne ikkje denne sida verte vist korrekt.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Om det ikkje hjelper så kan du framleis nytta Mastodon i ein annan nettlesar eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", "follow_request.authorize": "Autoriser", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "for å flytta seg opp på lista", "lightbox.close": "Lukk att", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Førre", "lightbox.view_context": "Sjå kontekst", @@ -260,6 +266,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Søk gjennom folk du følgjer", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nytt element} other {# nye element}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Gjer synleg/usynleg", "missing_indicator.label": "Ikkje funne", "missing_indicator.sublabel": "Fann ikkje ressursen", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Gøyme varsel frå denne brukaren?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blokkerte brukarar", "navigation_bar.bookmarks": "Bokmerke", @@ -298,6 +310,7 @@ "notification.own_poll": "Rundspørjinga di er ferdig", "notification.poll": "Ei rundspørjing du har røysta i er ferdig", "notification.reblog": "{name} framheva statusen din", + "notification.status": "{name} just posted", "notifications.clear": "Tøm varsel", "notifications.clear_confirmation": "Er du sikker på at du vil fjerna alle varsla dine for alltid?", "notifications.column_settings.alert": "Skrivebordsvarsel", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Framhevingar:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", "notifications.filter.follows": "Fylgjer", "notifications.filter.mentions": "Nemningar", "notifications.filter.polls": "Røysteresultat", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} varsel", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Lukka", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# folk}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Gjenkjenn tekst i biletet", "upload_modal.edit_media": "Rediger medium", "upload_modal.hint": "Klikk og dra sirkelen på førehandsvisninga for å velge fokuspunktet som alltid vil vere synleg på alle miniatyrbileta.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Førehandsvis ({ratio})", "upload_progress.label": "Lastar opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a15e96fdc..cd5dd1971 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Avbryt følge forespørsel", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domenet skjult", "account.edit_profile": "Rediger profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Vis frem på profilen", "account.follow": "Følg", "account.followers": "Følgere", @@ -166,7 +168,9 @@ "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.", "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp", "error.unexpected_crash.explanation": "På grunn av en bug i koden vår eller et nettleserkompatibilitetsproblem, kunne denne siden ikke vises riktig.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prøv å oppfriske siden. Dersom det ikke hjelper, vil du kanskje fortsatt kunne bruke Mastodon gjennom en annen nettleser eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", "follow_request.authorize": "Autorisér", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "å ufokusere komponerings-/søkefeltet", "keyboard_shortcuts.up": "å flytte opp i listen", "lightbox.close": "Lukk", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Forrige", "lightbox.view_context": "Vis sammenheng", @@ -260,6 +266,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Ligg til liste", "lists.new.title_placeholder": "Ny listetittel", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural,one {# ny gjenstand} other {# nye gjenstander}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Veksle synlighet", "missing_indicator.label": "Ikke funnet", "missing_indicator.sublabel": "Denne ressursen ble ikke funnet", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skjul varslinger fra denne brukeren?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilapper", "navigation_bar.blocks": "Blokkerte brukere", "navigation_bar.bookmarks": "Bokmerker", @@ -298,6 +310,7 @@ "notification.own_poll": "Avstemningen din er ferdig", "notification.poll": "En avstemning du har stemt på har avsluttet", "notification.reblog": "{name} fremhevde din status", + "notification.status": "{name} just posted", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", "notifications.column_settings.alert": "Skrivebordsvarslinger", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følginger", "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} varslinger", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Lukket", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Oppdag tekst i bildet", "upload_modal.edit_media": "Rediger media", "upload_modal.hint": "Klikk eller dra sirkelen i forhåndsvisningen for å velge hovedpunktet som alltid vil bli vist i alle miniatyrbilder.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Laster opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 1aa0193a5..4ec1643ee 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Navigar sul perfil original", "account.cancel_follow_request": "Anullar la demanda de seguiment", "account.direct": "Escriure un MP a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domeni amagat", "account.edit_profile": "Modificar lo perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Mostrar pel perfil", "account.follow": "Sègre", "account.followers": "Seguidors", @@ -166,7 +168,9 @@ "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.", "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autres servidors per garnir lo flux public", "error.unexpected_crash.explanation": "A causa d’una avaria dins nòstre còdi o d’un problèma de compatibilitat de navegador, aquesta pagina se pòt pas afichar corrèctament.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Ensajatz d’actualizar la pagina. S’aquò càmbia pas res, podètz provar d’utilizar Mastodon via un navegador diferent o d’una aplicacion nativa estant.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "follow_request.authorize": "Acceptar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", "lightbox.view_context": "Veire lo contèxt", @@ -260,6 +266,10 @@ "lists.edit.submit": "Cambiar lo títol", "lists.new.create": "Ajustar una lista", "lists.new.title_placeholder": "Títol de la nòva lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Cercar demest lo monde que seguètz", "lists.subheading": "Vòstras listas", "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Modificar la visibilitat", "missing_indicator.label": "Pas trobat", "missing_indicator.sublabel": "Aquesta ressorsa es pas estada trobada", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicacions mobil", "navigation_bar.blocks": "Personas blocadas", "navigation_bar.bookmarks": "Marcadors", @@ -298,6 +310,7 @@ "notification.own_poll": "Vòstre sondatge es acabat", "notification.poll": "Avètz participat a un sondatge que ven de s’acabar", "notification.reblog": "{name} a partejat vòstre estatut", + "notification.status": "{name} just posted", "notifications.clear": "Escafar", "notifications.clear_confirmation": "Volètz vertadièrament escafar totas vòstras las notificacions ?", "notifications.column_settings.alert": "Notificacions localas", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Totas", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats del sondatge", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificacions", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Tampat", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar lo tèxt de l’imatge", "upload_modal.edit_media": "Modificar lo mèdia", "upload_modal.hint": "Clicatz o lisatz lo cercle de l’apercebut per causir lo ponch que serà totjorn visible dins las vinhetas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Apercebut ({ratio})", "upload_progress.label": "Mandadís…", "video.close": "Tampar la vidèo", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 4e0230b75..6dfb7a832 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Zobacz więcej na oryginalnym profilu", "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Polecaj na profilu", "account.follow": "Śledź", "account.followers": "Śledzący", @@ -166,7 +168,9 @@ "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "follow_request.authorize": "Autoryzuj", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", "keyboard_shortcuts.up": "aby przejść na górę listy", "lightbox.close": "Zamknij", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", "lightbox.view_context": "Pokaż kontekst", @@ -260,6 +266,10 @@ "lists.edit.submit": "Zmień tytuł", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", "load_pending": "{count, plural, one {# nowy przedmiot} other {nowe przedmioty}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Przełącz widoczność", "missing_indicator.label": "Nie znaleziono", "missing_indicator.sublabel": "Nie można odnaleźć tego zasobu", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Chcesz ukryć powiadomienia od tego użytkownika?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplikacje mobilne", "navigation_bar.blocks": "Zablokowani użytkownicy", "navigation_bar.bookmarks": "Zakładki", @@ -298,6 +310,7 @@ "notification.own_poll": "Twoje głosowanie zakończyło się", "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", "notification.reblog": "{name} podbił(a) Twój wpis", + "notification.status": "{name} just posted", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", "notifications.column_settings.alert": "Powiadomienia na pulpicie", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", "notifications.filter.favourites": "Ulubione", "notifications.filter.follows": "Śledzenia", "notifications.filter.mentions": "Wspomienia", "notifications.filter.polls": "Wyniki głosowania", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Wykryj tekst ze obrazu", "upload_modal.edit_media": "Edytuj multimedia", "upload_modal.hint": "Kliknij lub przeciągnij kółko na podglądzie by wybrać centralny punkt, który zawsze będzie na widoku na miniaturce.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Podgląd ({ratio})", "upload_progress.label": "Wysyłanie…", "video.close": "Zamknij film", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 016d98b93..2d0f85156 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Encontre mais no perfil original", "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.direct": "Enviar toot direto para @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Destacar no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -166,7 +168,9 @@ "empty_column.notifications": "Nada aqui. Interaja com outros usuários para começar a conversar.", "empty_column.public": "Não há nada aqui! Escreva algo publicamente, ou siga manualmente usuários de outros servidores para enchê-la", "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou um problema de compatibilidade de navegador, esta página não pôde ser exibida corretamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se não resolver, você ainda pode conseguir usar o Mastodon por meio de um navegador ou app nativo diferente.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência", "errors.unexpected_crash.report_issue": "Denunciar problema", "follow_request.authorize": "Aprovar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "para desfocar de área de texto de composição/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Renomear", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", "load_pending": "{count, plural, one {# novo item} other {# novos items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Esconder mídia", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Esse recurso não pôde ser encontrado", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ocultar notificações deste usuário?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicativos", "navigation_bar.blocks": "Usuários bloqueados", "navigation_bar.bookmarks": "Salvos", @@ -298,6 +310,7 @@ "notification.own_poll": "Sua enquete terminou", "notification.poll": "Uma enquete que você votou terminou", "notification.reblog": "{name} boostou seu status", + "notification.status": "{name} just posted", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", "notifications.column_settings.alert": "Notificações no computador", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Tocar som", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tudo", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguindo", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados de enquete", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificações", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Fechou", "poll.refresh": "Atualizar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar texto da imagem", "upload_modal.edit_media": "Editar mídia", "upload_modal.hint": "Clique ou arraste o círculo na prévia para escolher o ponto focal que vai estar sempre visível em todas as thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Prévia ({ratio})", "upload_progress.label": "Fazendo upload...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 49fb95885..17ab69216 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Encontre mais no perfil original", "account.cancel_follow_request": "Cancelar pedido de seguidor", "account.direct": "Mensagem directa @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domínio escondido", "account.edit_profile": "Editar perfil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Atributo no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", @@ -166,7 +168,9 @@ "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", "follow_request.authorize": "Autorizar", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -260,6 +266,10 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Alternar visibilidade", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Este recurso não foi encontrado", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Esconder notificações deste utilizador?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicações móveis", "navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.bookmarks": "Itens salvos", @@ -298,6 +310,7 @@ "notification.own_poll": "A sua votação terminou", "notification.poll": "Uma votação em que participaste chegou ao fim", "notification.reblog": "{name} partilhou a tua publicação", + "notification.status": "{name} just posted", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", "notifications.column_settings.alert": "Notificações no computador", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Votações", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificações", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Fechado", "poll.refresh": "Recarregar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectar texto na imagem", "upload_modal.edit_media": "Editar media", "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Pré-visualizar ({ratio})", "upload_progress.label": "A enviar...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 544d68102..dc1be7bc1 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Caută mai multe în profilul original", "account.cancel_follow_request": "Anulați cererea de urmărire", "account.direct": "Mesaj direct @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domeniu blocat", "account.edit_profile": "Editați profilul", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Promovați pe profil", "account.follow": "Urmărește", "account.followers": "Urmăritori", @@ -166,7 +168,9 @@ "empty_column.notifications": "Nu ai nici o notificare încă. Interacționează cu alții pentru a începe o conversație.", "empty_column.public": "Nu este nimic aici! Scrie ceva public, sau urmărește alți utilizatori din alte instanțe pentru a porni fluxul", "error.unexpected_crash.explanation": "Din cauza unei erori în codul nostru sau a unei probleme de compatibilitate cu navigatorul, această pagină nu a putut fi afișată corect.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Încercați să reîmprospătați pagina. Dacă acest lucru nu ajută, este posibil să mai puteți folosi site-ul printr-un navigator diferit sau o aplicație nativă.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copiați stiva în clipboard", "errors.unexpected_crash.report_issue": "Raportați o problemă", "follow_request.authorize": "Autorizează", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "să dezactiveze zona de compunere/căutare", "keyboard_shortcuts.up": "să mute mai sus în listă", "lightbox.close": "Închide", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Următorul", "lightbox.previous": "Precedentul", "lightbox.view_context": "Vizualizați contextul", @@ -260,6 +266,10 @@ "lists.edit.submit": "Schimbă titlul", "lists.new.create": "Adaugă listă", "lists.new.title_placeholder": "Titlu pentru noua listă", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Caută printre persoanele pe care le urmărești", "lists.subheading": "Listele tale", "load_pending": "{count, plural, one {# element nou} other {# elemente noi}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ascunde media", "missing_indicator.label": "Nu a fost găsit", "missing_indicator.sublabel": "Această resursă nu a putut fi găsită", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ascunzi notificările de la acest utilizator?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicații mobile", "navigation_bar.blocks": "Utilizatori blocați", "navigation_bar.bookmarks": "Marcaje", @@ -298,6 +310,7 @@ "notification.own_poll": "Sondajul tău s-a sfârșit", "notification.poll": "Un sondaj la care ai votat s-a sfârșit", "notification.reblog": "{name} a impulsionat postarea ta", + "notification.status": "{name} just posted", "notifications.clear": "Șterge notificările", "notifications.clear_confirmation": "Ești sigur că vrei să ștergi permanent toate notificările?", "notifications.column_settings.alert": "Notificări pe desktop", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Impulsuri:", "notifications.column_settings.show": "Arată în coloană", "notifications.column_settings.sound": "Redă sunet", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Toate", "notifications.filter.boosts": "Impulsuri", "notifications.filter.favourites": "Favorite", "notifications.filter.follows": "Urmărește", "notifications.filter.mentions": "Menționări", "notifications.filter.polls": "Rezultate sondaj", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notificări", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Închis", "poll.refresh": "Reîmprospătează", "poll.total_people": "{count, plural, one {# persoană} other {# persoane}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detectare text din imagine", "upload_modal.edit_media": "Editați media", "upload_modal.hint": "Faceţi clic sau trageţi cercul pe previzualizare pentru a alege punctul focal care va fi întotdeauna vizualizat pe toate miniaturile.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previzualizare ({ratio})", "upload_progress.label": "Se Încarcă...", "video.close": "Închide video", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 73d3df12b..b0c5bc4cd 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Посмотреть их можно в оригинальном профиле", "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен скрыт", "account.edit_profile": "Изменить профиль", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", "account.followers": "Подписаны", @@ -166,7 +168,9 @@ "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "follow_request.authorize": "Авторизовать", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Далее", "lightbox.previous": "Назад", "lightbox.view_context": "Контекст", @@ -260,6 +266,10 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Показать/скрыть", "missing_indicator.label": "Не найдено", "missing_indicator.sublabel": "Запрашиваемый ресурс не найден", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Скрыть уведомления от этого пользователя?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобильные приложения", "navigation_bar.blocks": "Список блокировки", "navigation_bar.bookmarks": "Закладки", @@ -298,6 +310,7 @@ "notification.own_poll": "Ваш опрос закончился", "notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.reblog": "{name} продвинул(а) ваш пост", + "notification.status": "{name} just posted", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.column_settings.alert": "Уведомления в фоне", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Ваш пост продвинули:", "notifications.column_settings.show": "Отображать в списке", "notifications.column_settings.sound": "Проигрывать звук", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Все", "notifications.filter.boosts": "Продвижения", "notifications.filter.favourites": "Отметки «избранного»", "notifications.filter.follows": "Подписки", "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} уведомл.", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Завершён", "poll.refresh": "Обновить", "poll.total_people": "{count, plural, one {# человек} few {# человека} many {# человек} other {# человек}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Найти текст на картинке", "upload_modal.edit_media": "Изменить файл", "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "video.close": "Закрыть видео", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 30a3e3374..2e9ad8a8f 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Annulla rechesta de sighidura", "account.direct": "Messàgiu deretu a @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domìniu blocadu", "account.edit_profile": "Modìfica profilu", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Cussìgia in su profilu tuo", "account.follow": "Sighi", "account.followers": "Sighiduras", @@ -166,7 +168,9 @@ "empty_column.notifications": "Non tenes ancora peruna notìfica. Chistiona cun una persone pro cumintzare un'arresonada.", "empty_column.public": "Nudda inoghe. Iscrie calicuna cosa pùblica, o sighi àteras persones de àteros serbidores pro prenare custu ispàtziu", "error.unexpected_crash.explanation": "A càusa de una faddina in su còdighe nostru o unu problema de cumpatibilidade de su navigadore, custa pàgina diat pòdere no èssere ammustrada in manera curreta.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Proa de atualizare sa pàgina. Si custu non acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Signala unu problema", "follow_request.authorize": "Autoriza", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "pro mòere in susu in sa lista", "lightbox.close": "Serra", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sighi", "lightbox.previous": "Pretzedente", "lightbox.view_context": "Bide su cuntestu", @@ -260,6 +266,10 @@ "lists.edit.submit": "Muda su tìtulu", "lists.new.create": "Agiunghe lista", "lists.new.title_placeholder": "Lista noa", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Chircare intre sa gente chi ses sighende", "lists.subheading": "Is listas tuas", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Cua mèdia", "missing_indicator.label": "Perunu resurtadu", "missing_indicator.sublabel": "Resursa no agatada", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Boles cuare is notìficas de custa persone?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicatziones mòbiles", "navigation_bar.blocks": "Persones blocadas", "navigation_bar.bookmarks": "Marcadores", @@ -298,6 +310,7 @@ "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", "notification.reblog": "{name} at cumpartzidu s'istadu tuo", + "notification.status": "{name} just posted", "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", "notifications.column_settings.alert": "Notìficas de iscrivania", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Cumpartziduras:", "notifications.column_settings.show": "Ammustra in sa colunna", "notifications.column_settings.sound": "Reprodue unu sonu", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Totus", "notifications.filter.boosts": "Cumpartziduras", "notifications.filter.favourites": "Preferidos", "notifications.filter.follows": "Sighende", "notifications.filter.mentions": "Mentovos", "notifications.filter.polls": "Resurtados dae su sondàgiu", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notìficas", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Serradu", "poll.refresh": "Atualiza", "poll.total_people": "{count, plurale, one {# persone} other {# persones}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Rileva testu de s'immàgine", "upload_modal.edit_media": "Modìfica su mèdia", "upload_modal.hint": "Incarca o traga su tzìrculu in sa previsualizatzione pro seberare su puntu focale chi at a èssere semper visìbile in totu is miniaturas.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Previsualiza ({ratio})", "upload_progress.label": "Carrighende...", "video.close": "Serra su vìdeu", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 4e48d53c8..6e3e2eef5 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Zruš žiadosť o sledovanie", "account.direct": "Priama správa pre @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Zobrazuj na profile", "account.follow": "Nasleduj", "account.followers": "Sledujúci", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.", "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo", "error.unexpected_crash.explanation": "Kvôli chybe v našom kóde, alebo problému s kompatibilitou prehliadača, túto stránku nebolo možné zobraziť správne.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Skús obnoviť stránku. Ak to nepomôže, pravdepodobne budeš stále môcť používať Mastodon cez iný prehliadač, alebo natívnu aplikáciu.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", "follow_request.authorize": "Povoľ prístup", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", "keyboard_shortcuts.up": "posuň sa vyššie v zozname", "lightbox.close": "Zatvor", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", "lightbox.view_context": "Ukáž kontext", @@ -260,6 +266,10 @@ "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "missing_indicator.label": "Nenájdené", "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplikácie", "navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.bookmarks": "Záložky", @@ -298,6 +310,7 @@ "notification.own_poll": "Tvoja anketa sa skončila", "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", "notification.reblog": "{name} zdieľal/a tvoj príspevok", + "notification.status": "{name} just posted", "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", "notifications.column_settings.alert": "Oboznámenia na ploche", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Vyzdvihnutia:", "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", "notifications.filter.favourites": "Obľúbené", "notifications.filter.follows": "Sledovania", "notifications.filter.mentions": "Iba spomenutia", "notifications.filter.polls": "Výsledky ankiet", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} oboznámení", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Uzatvorená", "poll.refresh": "Občerstvi", "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Rozpoznaj text z obrázka", "upload_modal.edit_media": "Uprav médiá", "upload_modal.hint": "Klikni, alebo potiahni okruh ukážky pre zvolenie z ktorého východzieho bodu bude vždy v dohľadne na všetkých náhľadoch.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "video.close": "Zavri video", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 71ba0d1b6..b73bfb322 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Neposredno sporočilo @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Skrita domena", "account.edit_profile": "Uredi profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Zmožnost profila", "account.follow": "Sledi", "account.followers": "Sledilci", @@ -166,7 +168,9 @@ "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.", "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Overi", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "odfokusiraj območje za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "premakni se navzgor po seznamu", "lightbox.close": "Zapri", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", "lightbox.view_context": "Poglej kontekst", @@ -260,6 +266,10 @@ "lists.edit.submit": "Spremeni naslov", "lists.new.create": "Dodaj seznam", "lists.new.title_placeholder": "Nov naslov seznama", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Išči med ljudmi, katerim sledite", "lists.subheading": "Vaši seznami", "load_pending": "{count, plural, one {# nov element} other {# novih elementov}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Preklopi vidljivost", "missing_indicator.label": "Ni najdeno", "missing_indicator.sublabel": "Tega vira ni bilo mogoče najti", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Skrij obvestila tega uporabnika?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilne aplikacije", "navigation_bar.blocks": "Blokirani uporabniki", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "Glasovanje, v katerem ste sodelovali, se je končalo", "notification.reblog": "{name} je spodbudil/a vaš status", + "notification.status": "{name} just posted", "notifications.clear": "Počisti obvestila", "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa vaša obvestila?", "notifications.column_settings.alert": "Namizna obvestila", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Spodbude:", "notifications.column_settings.show": "Prikaži v stolpcu", "notifications.column_settings.sound": "Predvajaj zvok", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Vse", "notifications.filter.boosts": "Spodbude", "notifications.filter.favourites": "Priljubljeni", "notifications.filter.follows": "Sledi", "notifications.filter.mentions": "Omembe", "notifications.filter.polls": "Rezultati glasovanj", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} obvestil", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Zaprto", "poll.refresh": "Osveži", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Pošiljanje...", "video.close": "Zapri video", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 6b33b17b6..eae860664 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Shfletoni më tepër rreth profilit origjinal", "account.cancel_follow_request": "Anulo kërkesën e ndjekjes", "account.direct": "Mesazh i drejtpërdrejtë për @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Përkatësia u bllokua", "account.edit_profile": "Përpunoni profilin", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Pasqyrojeni në profil", "account.follow": "Ndiqeni", "account.followers": "Ndjekës", @@ -166,7 +168,9 @@ "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë", "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Provoni të freskoni faqen. Nëse kjo s’bën punë, mundeni ende të jeni në gjendje të përdorni Mastodon-in që nga një shfletues tjetër ose nga ndonjë aplikacion origjinal prej projektit.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", "follow_request.authorize": "Autorizoje", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", "lightbox.view_context": "Shihni kontekstin", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ndryshoni titullin", "lists.new.create": "Shtoni listë", "lists.new.title_placeholder": "Titull liste të re", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", "load_pending": "{count, plural,one {# objekt i ri }other {# objekte të rinj }}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Fshihni {number, plural, one {figurë} other {figura}}", "missing_indicator.label": "S’u gjet", "missing_indicator.sublabel": "Ky burim s’u gjet dot", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Të kalohen të fshehura njoftimet prej këtij përdoruesi?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplikacione për celular", "navigation_bar.blocks": "Përdorues të bllokuar", "navigation_bar.bookmarks": "Faqerojtës", @@ -298,6 +310,7 @@ "notification.own_poll": "Pyetësori juaj ka përfunduar", "notification.poll": "Ka përfunduar një pyetësor ku keni votuar", "notification.reblog": "{name} përforcoi mesazhin tuaj", + "notification.status": "{name} just posted", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", "notifications.column_settings.alert": "Njoftime desktopi", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Përforcime:", "notifications.column_settings.show": "Shfaq në shtylla", "notifications.column_settings.sound": "Luaj një tingull", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Krejt", "notifications.filter.boosts": "Përforcime", "notifications.filter.favourites": "Të parapëlqyer", "notifications.filter.follows": "Ndjekje", "notifications.filter.mentions": "Përmendje", "notifications.filter.polls": "Përfundime pyetësori", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count}s njoftime", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "I mbyllur", "poll.refresh": "Rifreskoje", "poll.total_people": "{count, plural,one {# person }other {# vetë }}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Pikase tekstin prej fotoje", "upload_modal.edit_media": "Përpunoni media", "upload_modal.hint": "Që të zgjidhni pikën vatrore e cila do të jetë përherë e dukshme në krejt miniaturat, klikojeni ose tërhiqeni rrethin te paraparja.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Paraparje ({ratio})", "upload_progress.label": "Po ngarkohet…", "video.close": "Mbylle videon", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 66631004c..38fc9cdce 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Izmeni profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Zaprati", "account.followers": "Pratioca", @@ -166,7 +168,9 @@ "empty_column.notifications": "Trenutno nemate obaveštenja. Družite se malo da započnete razgovore.", "empty_column.public": "Ovde nema ničega! Napišite nešto javno, ili nađite korisnike sa drugih instanci koje ćete zapratiti da popunite ovu prazninu", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Odobri", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "da ne budete više na pretrazi/pravljenju novog tuta", "keyboard_shortcuts.up": "da se pomerite na gore u listi", "lightbox.close": "Zatvori", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sledeći", "lightbox.previous": "Prethodni", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Dodaj listu", "lists.new.title_placeholder": "Naslov nove liste", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Pretraži među ljudima koje pratite", "lists.subheading": "Vaše liste", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Uključi/isključi vidljivost", "missing_indicator.label": "Nije pronađeno", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Sakrij obaveštenja od ovog korisnika?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} je podržao(la) Vaš status", + "notification.status": "{name} just posted", "notifications.clear": "Očisti obaveštenja", "notifications.clear_confirmation": "Da li ste sigurno da trajno želite da očistite Vaša obaveštenja?", "notifications.column_settings.alert": "Obaveštenja na radnoj površini", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Podrški:", "notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.sound": "Puštaj zvuk", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Otpremam...", "video.close": "Zatvori video", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 7c42f0e8a..8df81fae6 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Приказати на профилу", "account.follow": "Запрати", "account.followers": "Пратиоци", @@ -166,7 +168,9 @@ "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.", "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину", "error.unexpected_crash.explanation": "Због грешке у нашем коду или проблема са компатибилношћу прегледача, ова страница се није могла правилно приказати.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Покушајте да освежите страницу. Ако то не помогне, можда ћете и даље моћи да користите Мастодон путем другог прегледача или матичне апликације.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Копирај \"stacktrace\" у клипборд", "errors.unexpected_crash.report_issue": "Пријави проблем", "follow_request.authorize": "Одобри", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "да одфокусирате/не будете више на претрази/прављењу нове трубе", "keyboard_shortcuts.up": "да се померите на горе у листи", "lightbox.close": "Затвори", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Следећи", "lightbox.previous": "Претходни", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Додај листу", "lists.new.title_placeholder": "Наслов нове листе", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Претражи међу људима које пратите", "lists.subheading": "Ваше листе", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Укључи/искључи видљивост", "missing_indicator.label": "Није пронађено", "missing_indicator.sublabel": "Овај ресурс није пронађен", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобилне апликације", "navigation_bar.blocks": "Блокирани корисници", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} је подржао/ла Ваш статус", + "notification.status": "{name} just posted", "notifications.clear": "Очисти обавештења", "notifications.clear_confirmation": "Да ли сте сигурно да трајно желите да очистите Ваша обавештења?", "notifications.column_settings.alert": "Обавештења на радној површини", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.sound": "Пуштај звук", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} обавештења", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Отпремам...", "video.close": "Затвори видео", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index c9251d73c..5c3f51dbe 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Avbryt följarförfrågan", "account.direct": "Skicka ett direktmeddelande till @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Visa på profil", "account.follow": "Följ", "account.followers": "Följare", @@ -166,7 +168,9 @@ "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.", "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det", "error.unexpected_crash.explanation": "På grund av en bugg i vår kod eller kompatiblitetsproblem i webbläsaren kan den här sidan inte visas korrekt.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Prova att ladda om sidan. Om det inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", "follow_request.authorize": "Godkänn", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", "keyboard_shortcuts.up": "för att flytta uppåt i listan", "lightbox.close": "Stäng", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", "lightbox.view_context": "Visa kontext", @@ -260,6 +266,10 @@ "lists.edit.submit": "Ändra titel", "lists.new.create": "Lägg till lista", "lists.new.title_placeholder": "Ny listrubrik", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", "load_pending": "{count, plural, other {# objekt}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Växla synlighet", "missing_indicator.label": "Hittades inte", "missing_indicator.sublabel": "Den här resursen kunde inte hittas", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Dölj aviseringar från denna användare?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.bookmarks": "Bokmärken", @@ -298,6 +310,7 @@ "notification.own_poll": "Din röstning har avslutats", "notification.poll": "En omröstning du röstat i har avslutats", "notification.reblog": "{name} knuffade din status", + "notification.status": "{name} just posted", "notifications.clear": "Rensa aviseringar", "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?", "notifications.column_settings.alert": "Skrivbordsaviseringar", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Alla", "notifications.filter.boosts": "Knuffar", "notifications.filter.favourites": "Favoriter", "notifications.filter.follows": "Följer", "notifications.filter.mentions": "Omnämningar", "notifications.filter.polls": "Omröstningsresultat", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} aviseringar", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Stängd", "poll.refresh": "Ladda om", "poll.total_people": "{persons, plural, one {# person} other {# personer}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Upptäck bildens text", "upload_modal.edit_media": "Redigera meida", "upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Förhandstitt ({ratio})", "upload_progress.label": "Laddar upp...", "video.close": "Stäng video", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 67b231ee4..17ffe5519 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 28f03f781..8e8c6b9f7 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "பின்தொடரும் கோரிக்கையை நிராகரி", "account.direct": "நேரடி செய்தி @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", "account.edit_profile": "சுயவிவரத்தை மாற்று", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "சுயவிவரத்தில் வெளிப்படுத்து", "account.follow": "பின்தொடர்", "account.followers": "பின்தொடர்பவர்கள்", @@ -166,7 +168,9 @@ "empty_column.notifications": "உங்களிடம் எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் தொடங்க பிறருடன் தொடர்புகொள்ளவும்.", "empty_column.public": "இங்கே எதுவும் இல்லை! பகிரங்கமாக ஒன்றை எழுதவும் அல்லது மற்ற நிகழ்வுகளிலிருந்து பயனர்களை அதை நிரப்புவதற்கு கைமுறையாக பின்பற்றவும்", "error.unexpected_crash.explanation": "மென்பொருள் பழுதுனாலோ அல்லது உங்கள் இணை உலாவியின் பொருந்தாதன்மையினாலோ இந்தப் பக்கத்தை சரியாகக் காண்பிக்க முடியவில்லை.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "பக்கத்தை புதுப்பித்துப் பார்க்கவும். வேலை செய்யவில்லையெனில், வேறு ஒரு உலாவியில் இருந்தோ அல்லது உங்கள் கருவிக்கு பொருத்தமான வேறு செயலியில் இருந்தோ மச்டோடனைப் பயன்படுத்தவும்.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "பழுசெய்தியை பிடிப்புப் பலகைக்கு நகல் எடு", "errors.unexpected_crash.report_issue": "புகாரளி", "follow_request.authorize": "அதிகாரமளி", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "உரை பகுதியை / தேடலை கவனம் செலுத்த வேண்டும்", "keyboard_shortcuts.up": "பட்டியலில் மேலே செல்ல", "lightbox.close": "நெருக்கமாக", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "அடுத்த", "lightbox.previous": "சென்ற", "lightbox.view_context": "சூழலைக் பார்", @@ -260,6 +266,10 @@ "lists.edit.submit": "தலைப்பு மாற்றவும்", "lists.new.create": "பட்டியலில் சேர்", "lists.new.title_placeholder": "புதிய பட்டியல் தலைப்பு", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "நீங்கள் பின்தொடரும் நபர்கள் மத்தியில் தேடுதல்", "lists.subheading": "உங்கள் பட்டியல்கள்", "load_pending": "{count, plural,one {# புதியது}other {# புதியவை}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "நிலைமாற்று தெரியும்", "missing_indicator.label": "கிடைக்கவில்லை", "missing_indicator.sublabel": "இந்த ஆதாரத்தை காண முடியவில்லை", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "இந்த பயனரின் அறிவிப்புகளை மறைக்கவா?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "மொபைல் பயன்பாடுகள்", "navigation_bar.blocks": "தடுக்கப்பட்ட பயனர்கள்", "navigation_bar.bookmarks": "அடையாளக்குறிகள்", @@ -298,6 +310,7 @@ "notification.own_poll": "கருத்துக்கணிப்பு நிறைவடைந்தது", "notification.poll": "நீங்கள் வாக்களித்த வாக்கெடுப்பு முடிவடைந்தது", "notification.reblog": "{name} உங்கள் நிலை அதிகரித்தது", + "notification.status": "{name} just posted", "notifications.clear": "அறிவிப்புகளை அழிக்கவும்", "notifications.clear_confirmation": "உங்கள் எல்லா அறிவிப்புகளையும் நிரந்தரமாக அழிக்க விரும்புகிறீர்களா?", "notifications.column_settings.alert": "டெஸ்க்டாப் அறிவிப்புகள்", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "மதிப்பை உயர்த்து:", "notifications.column_settings.show": "பத்தியில் காண்பி", "notifications.column_settings.sound": "ஒலி விளையாட", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "எல்லா", "notifications.filter.boosts": "மதிப்பை உயர்த்து", "notifications.filter.favourites": "விருப்பத்துக்குகந்த", "notifications.filter.follows": "பின்பற்று", "notifications.filter.mentions": "குறிப்பிடுகிறார்", "notifications.filter.polls": "கருத்துக்கணிப்பு முடிவுகள்", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} அறிவிப்புகள்", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "மூடிய", "poll.refresh": "பத்துயிர்ப்ப?ட்டு", "poll.total_people": "{count, plural, one {# நபர்} other {# நபர்கள்}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "படத்தில் இருக்கும் எழுத்தை கண்டறி", "upload_modal.edit_media": "படத்தைத் தொகு", "upload_modal.hint": "எல்லா வில்லைப்பட்த்திலும் தெரியவேண்டிய, படத்தின் முக்கிய குவியப்புள்ளிக்கு, வட்டத்தை சொடுக்கி இழுத்துச்செல்லவும்.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "முன்னோட்டம் ({ratio})", "upload_progress.label": "ஏற்றுகிறது ...", "video.close": "வீடியோவை மூடு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 67b231ee4..17ffe5519 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index ec0f1a0da..84e73f7e5 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "@{name}కు నేరుగా సందేశం పంపు", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది", "account.edit_profile": "ప్రొఫైల్ని సవరించండి", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "ప్రొఫైల్లో చూపించు", "account.follow": "అనుసరించు", "account.followers": "అనుచరులు", @@ -166,7 +168,9 @@ "empty_column.notifications": "మీకు ఇంకా ఏ నోటిఫికేషన్లు లేవు. సంభాషణను ప్రారంభించడానికి ఇతరులతో ప్రతిస్పందించండి.", "empty_column.public": "ఇక్కడ ఏమీ లేదు! దీన్ని నింపడానికి బహిరంగంగా ఏదైనా వ్రాయండి, లేదా ఇతర సేవికల నుండి వినియోగదారులను అనుసరించండి", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "అనుమతించు", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "పాఠ్యం వ్రాసే ఏరియా/శోధన పట్టిక నుండి బయటకు రావడానికి", "keyboard_shortcuts.up": "జాబితాలో పైకి తరలించడానికి", "lightbox.close": "మూసివేయు", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "తరువాత", "lightbox.previous": "మునుపటి", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "శీర్షిక మార్చు", "lists.new.create": "జాబితాను జోడించు", "lists.new.title_placeholder": "కొత్త జాబితా శీర్షిక", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "మీరు అనుసరించే వ్యక్తులలో శోధించండి", "lists.subheading": "మీ జాబితాలు", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "దృశ్యమానతను టోగుల్ చేయండి", "missing_indicator.label": "దొరకలేదు", "missing_indicator.sublabel": "ఈ వనరు కనుగొనబడలేదు", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "ఈ వినియోగదారు నుండి నోటిఫికేషన్లను దాచాలా?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "మొబైల్ ఆప్ లు", "navigation_bar.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "మీరు పాల్గొనిన ఎన్సిక ముగిసినది", "notification.reblog": "{name} మీ స్టేటస్ ను బూస్ట్ చేసారు", + "notification.status": "{name} just posted", "notifications.clear": "ప్రకటనలను తుడిచివేయు", "notifications.clear_confirmation": "మీరు మీ అన్ని నోటిఫికేషన్లను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", "notifications.column_settings.alert": "డెస్క్టాప్ నోటిఫికేషన్లు", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "బూస్ట్ లు:", "notifications.column_settings.show": "నిలువు వరుసలో చూపు", "notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "అన్నీ", "notifications.filter.boosts": "బూస్ట్లు", "notifications.filter.favourites": "ఇష్టాలు", "notifications.filter.follows": "అనుసరిస్తున్నవి", "notifications.filter.mentions": "పేర్కొన్నవి", "notifications.filter.polls": "ఎన్నిక ఫలితాలు", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} ప్రకటనలు", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "మూసివేయబడినవి", "poll.refresh": "నవీకరించు", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "అప్లోడ్ అవుతోంది...", "video.close": "వీడియోని మూసివేయి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 596473394..2715c5faa 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "เรียกดูเพิ่มเติมในโปรไฟล์ดั้งเดิม", "account.cancel_follow_request": "ยกเลิกคำขอติดตาม", "account.direct": "ส่งข้อความโดยตรงถึง @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "ปิดกั้นโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "แสดงให้เห็นในโปรไฟล์", "account.follow": "ติดตาม", "account.followers": "ผู้ติดตาม", @@ -166,7 +168,9 @@ "empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา", "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม", "error.unexpected_crash.explanation": "เนื่องจากข้อบกพร่องในโค้ดของเราหรือปัญหาความเข้ากันได้ของเบราว์เซอร์ จึงไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "follow_request.authorize": "อนุญาต", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "เพื่อเลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "เพื่อย้ายขึ้นในรายการ", "lightbox.close": "ปิด", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "lightbox.view_context": "ดูบริบท", @@ -260,6 +266,10 @@ "lists.edit.submit": "เปลี่ยนชื่อเรื่อง", "lists.new.create": "เพิ่มรายการ", "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", "load_pending": "{count, plural, other {# รายการใหม่}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "ซ่อน{number, plural, other {ภาพ}}", "missing_indicator.label": "ไม่พบ", "missing_indicator.sublabel": "ไม่พบทรัพยากรนี้", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "ซ่อนการแจ้งเตือนจากผู้ใช้นี้?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "แอปมือถือ", "navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "navigation_bar.bookmarks": "ที่คั่นหน้า", @@ -298,6 +310,7 @@ "notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว", "notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.reblog": "{name} ได้ดันโพสต์ของคุณ", + "notification.status": "{name} just posted", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "การดัน:", "notifications.column_settings.show": "แสดงในคอลัมน์", "notifications.column_settings.sound": "เล่นเสียง", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "ทั้งหมด", "notifications.filter.boosts": "การดัน", "notifications.filter.favourites": "รายการโปรด", "notifications.filter.follows": "การติดตาม", "notifications.filter.mentions": "การกล่าวถึง", "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} การแจ้งเตือน", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "ปิดแล้ว", "poll.refresh": "รีเฟรช", "poll.total_people": "{count, plural, other {# คน}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "ตรวจหาข้อความจากรูปภาพ", "upload_modal.edit_media": "แก้ไขสื่อ", "upload_modal.hint": "คลิกหรือลากวงกลมในตัวอย่างเพื่อเลือกจุดโฟกัส ซึ่งจะอยู่ในมุมมองของภาพขนาดย่อทั้งหมดเสมอ", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "ตัวอย่าง ({ratio})", "upload_progress.label": "กำลังอัปโหลด...", "video.close": "ปิดวิดีโอ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 351e80f81..09dfd3396 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Orijinal profilde daha fazlasına göz atın", "account.cancel_follow_request": "Takip isteğini iptal et", "account.direct": "Mesaj gönder @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Alan adı gizlendi", "account.edit_profile": "Profili düzenle", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Profildeki özellik", "account.follow": "Takip et", "account.followers": "Takipçi", @@ -166,7 +168,9 @@ "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Sayfayı yenilemeyi deneyin. Eğer bu yardımcı olmazsa, Mastodon'u farklı bir tarayıcı ya da yerel uygulama üzerinden kullanabilirsiniz.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", "follow_request.authorize": "Yetkilendir", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Sonraki", "lightbox.previous": "Önceli", "lightbox.view_context": "İçeriği göster", @@ -260,6 +266,10 @@ "lists.edit.submit": "Başlığı değiştir", "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", "load_pending": "{count, plural, one {# yeni öğe} other {# yeni öğe}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Görünürlüğü değiştir", "missing_indicator.label": "Bulunamadı", "missing_indicator.sublabel": "Bu kaynak bulunamadı", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Bu kullanıcıdan bildirimler gizlensin mı?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobil uygulamalar", "navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.bookmarks": "Yer imleri", @@ -298,6 +310,7 @@ "notification.own_poll": "Anketiniz sona erdi", "notification.poll": "Oy verdiğiniz bir anket bitti", "notification.reblog": "{name} senin durumunu boost etti", + "notification.status": "{name} just posted", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.alert": "Masaüstü bildirimleri", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boostlar:", "notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.sound": "Ses çal", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", "notifications.filter.favourites": "Favoriler", "notifications.filter.follows": "Takip edilenler", "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} bildirim", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Kapandı", "poll.refresh": "Yenile", "poll.total_people": "{count, plural, one {# kişi} other {# kişi}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Resimdeki metni algıla", "upload_modal.edit_media": "Medyayı düzenle", "upload_modal.hint": "Her zaman tüm küçük resimlerde görüntülenecek odak noktasını seçmek için ön izlemedeki daireyi tıklayın veya sürükleyin.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Ön izleme ({ratio})", "upload_progress.label": "Yükleniyor...", "video.close": "Videoyu kapat", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 67b231ee4..17ffe5519 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "Follow", "account.followers": "Followers", @@ -166,7 +168,9 @@ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 244f04a9e..ac69cfc73 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Переглянути більше в оригіналі", "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Публікувати у профілі", "account.follow": "Підписатися", "account.followers": "Підписники", @@ -166,7 +168,9 @@ "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку", "error.unexpected_crash.explanation": "Ця сторінка не може бути коректно відображена через баґ у нашому коді або через проблему сумісності браузера.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний додаток.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", "errors.unexpected_crash.report_issue": "Повідомити про проблему", "follow_request.authorize": "Авторизувати", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "рухатися вверх списком", "lightbox.close": "Закрити", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Далі", "lightbox.previous": "Назад", "lightbox.view_context": "Переглянути контекст", @@ -260,6 +266,10 @@ "lists.edit.submit": "Змінити назву", "lists.new.create": "Додати список", "lists.new.title_placeholder": "Нова назва списку", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Шукати серед людей, на яких ви підписані", "lists.subheading": "Ваші списки", "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Показати/приховати", "missing_indicator.label": "Не знайдено", "missing_indicator.sublabel": "Ресурс не знайдений", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Приховати сповіщення від користувача?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Мобільні додатки", "navigation_bar.blocks": "Заблоковані користувачі", "navigation_bar.bookmarks": "Закладки", @@ -298,6 +310,7 @@ "notification.own_poll": "Ваше опитування завершено", "notification.poll": "Опитування, у якому ви голосували, закінчилося", "notification.reblog": "{name} передмухнув(-ла) Ваш допис", + "notification.status": "{name} just posted", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?", "notifications.column_settings.alert": "Сповіщення на комп'ютері", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звуки", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Усі", "notifications.filter.boosts": "Передмухи", "notifications.filter.favourites": "Улюблені", "notifications.filter.follows": "Підписки", "notifications.filter.mentions": "Згадки", "notifications.filter.polls": "Результати опитування", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} сповіщень", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Закрито", "poll.refresh": "Оновити", "poll.total_people": "{count, plural, one {# особа} other {# осіб}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Виявити текст на малюнку", "upload_modal.edit_media": "Редагувати медіа", "upload_modal.hint": "Клацніть або перетягніть коло на превью, щоб обрати точку, яку буде завжди видно на мініатюрах.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Переглянути ({ratio})", "upload_progress.label": "Завантаження...", "video.close": "Закрити відео", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index decca849f..3260a33cd 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "درخواستِ پیروی منسوخ کریں", "account.direct": "راست پیغام @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "مشکص پر نمایاں کریں", "account.follow": "پیروی کریں", "account.followers": "پیروکار", @@ -166,7 +168,9 @@ "empty_column.notifications": "ابھی آپ کیلئے کوئی اطلاعات نہیں ہیں. گفتگو شروع کرنے کے لئے دیگر صارفین سے متعامل ہوں.", "empty_column.public": "یہاں کچھ بھی نہیں ہے! کچھ عمومی تحریر کریں یا اس جگہ کو پُر کرنے کے لئے از خود دیگر سرورس کے صارفین کی پیروی کریں", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "صفحے کو تازہ کرنے کی کوشش کریں. اگر کارآمد نہ ہو تو آپ کسی دیگر براؤزر یا مقامی ایپ سے ہنوز ماسٹوڈون استعمال کر سکتے ہیں.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", "follow_request.authorize": "اجازت دیں", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", @@ -260,6 +266,10 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "load_pending": "{count, plural, one {# new item} other {# new items}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", @@ -298,6 +310,7 @@ "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "All", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Closed", "poll.refresh": "Refresh", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Detect text from picture", "upload_modal.edit_media": "Edit media", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "video.close": "Close video", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index aa0c0d5ff..25711b869 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Tìm những tài khoản có liên quan", "account.cancel_follow_request": "Hủy yêu cầu theo dõi", "account.direct": "Nhắn tin cho @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Đã chặn người dùng", "account.edit_profile": "Chỉnh sửa trang cá nhân", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Vinh danh người này", "account.follow": "Theo dõi", "account.followers": "Người theo dõi", @@ -166,7 +168,9 @@ "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn tin cho một ai đó.", "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi người dùng khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Hãy thử làm mới trang. Nếu vẫn không được, bạn hãy vào Mastodon bằng một ứng dụng di động hoặc trình duyệt khác.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", "follow_request.authorize": "Cho phép", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", "lightbox.view_context": "Xem nội dung", @@ -260,6 +266,10 @@ "lists.edit.submit": "Thay đổi tiêu đề", "lists.new.create": "Thêm vào danh sách", "lists.new.title_placeholder": "Tên danh sách mới", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", "load_pending": "{count, plural, one {# tút} other {# tút}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}", "missing_indicator.label": "Không tìm thấy", "missing_indicator.sublabel": "Không tìm thấy cái này", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Ẩn thông báo từ người dùng này?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Apps", "navigation_bar.blocks": "Người dùng đã chặn", "navigation_bar.bookmarks": "Đã lưu", @@ -298,6 +310,7 @@ "notification.own_poll": "Cuộc thăm dò của bạn đã kết thúc", "notification.poll": "Một cuộc thăm dò mà bạn tham gia đã kết thúc", "notification.reblog": "{name} chia sẻ tút của bạn", + "notification.status": "{name} just posted", "notifications.clear": "Làm trống thông báo", "notifications.clear_confirmation": "Bạn có chắc chắn muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.alert": "Thông báo trên máy tính", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "Lượt chia sẻ mới:", "notifications.column_settings.show": "Thông báo trên thanh menu", "notifications.column_settings.sound": "Kèm theo tiếng \"bíp\"", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "Toàn bộ", "notifications.filter.boosts": "Chia sẻ", "notifications.filter.favourites": "Thích", "notifications.filter.follows": "Đang theo dõi", "notifications.filter.mentions": "Lượt nhắc đến", "notifications.filter.polls": "Kết quả cuộc thăm dò", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} thông báo", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "Cuộc thăm dò đã kết thúc", "poll.refresh": "Làm mới", "poll.total_people": "{count, plural, one {# người bình chọn} other {# người bình chọn}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "Phát hiện văn bản trong hình ảnh", "upload_modal.edit_media": "Chỉnh sửa ảnh/video", "upload_modal.hint": "Nhấp hoặc kéo vòng tròn trên bản xem trước để chọn phần hiển thị trên hình thu nhỏ.", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Xem trước ({ratio})", "upload_progress.label": "Đang tải lên...", "video.close": "Đóng video", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index b57bbb2ad..8052cc4f1 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "在原始个人资料页面上浏览详情", "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "网站已屏蔽", "account.edit_profile": "修改个人资料", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "在个人资料中推荐此用户", "account.follow": "关注", "account.followers": "关注者", @@ -166,7 +168,9 @@ "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "刷新一下页面试试。如果没用,您可以换个浏览器或者用本地应用。", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "follow_request.authorize": "同意", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "取消输入", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "下一个", "lightbox.previous": "上一个", "lightbox.view_context": "查看上下文", @@ -260,6 +266,10 @@ "lists.edit.submit": "更改标题", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", "load_pending": "{count} 项", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "隐藏 {number} 张图片", "missing_indicator.label": "找不到内容", "missing_indicator.sublabel": "无法找到此资源", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "同时隐藏来自这个用户的通知?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "移动应用", "navigation_bar.blocks": "已屏蔽的用户", "navigation_bar.bookmarks": "书签", @@ -298,6 +310,7 @@ "notification.own_poll": "您的投票已经结束", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转嘟了你的嘟文", + "notification.status": "{name} just posted", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", "notifications.column_settings.alert": "桌面通知", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:", "notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "全部", "notifications.filter.boosts": "转嘟", "notifications.filter.favourites": "喜欢", "notifications.filter.follows": "关注", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 条通知", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "已关闭", "poll.refresh": "刷新", "poll.total_people": "{count}人", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "从图片中检测文本", "upload_modal.edit_media": "编辑媒体", "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "预览 ({ratio})", "upload_progress.label": "上传中……", "video.close": "关闭视频", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 248a74dcd..59b950a82 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "取消關注請求", "account.direct": "私訊 @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "服務站被隱藏", "account.edit_profile": "修改個人資料", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注的人", @@ -166,7 +168,9 @@ "empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。", "empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "批准", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索", "keyboard_shortcuts.up": "在列表往上移動", "lightbox.close": "關閉", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "繼續", "lightbox.previous": "回退", "lightbox.view_context": "檢視內文", @@ -260,6 +266,10 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "從你關注的用戶中搜索", "lists.subheading": "列表", "load_pending": "{count, plural, other {# 個新項目}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "打開或關上", "missing_indicator.label": "找不到內容", "missing_indicator.sublabel": "無法找到內容", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "隱藏來自這用戶的通知嗎?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "封鎖的使用者", "navigation_bar.blocks": "被你封鎖的用戶", "navigation_bar.bookmarks": "書籤", @@ -298,6 +310,7 @@ "notification.own_poll": "您的投票已結束", "notification.poll": "您投過的投票已經結束", "notification.reblog": "{name} 轉推你的文章", + "notification.status": "{name} just posted", "notifications.clear": "清空通知紀錄", "notifications.clear_confirmation": "你確定要清空通知紀錄嗎?", "notifications.column_settings.alert": "顯示桌面通知", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "轉推你的文章:", "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 條通知", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "從圖片偵測文字", "upload_modal.edit_media": "編輯媒體", "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上載中……", "video.close": "關閉影片", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 429f6c5d3..3e4045c0f 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -9,8 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "已隱藏網域", "account.edit_profile": "編輯個人資料", + "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注者", @@ -166,7 +168,9 @@ "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "授權", @@ -250,6 +254,8 @@ "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點", "keyboard_shortcuts.up": "往上移動名單項目", "lightbox.close": "關閉", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", "lightbox.next": "下一步", "lightbox.previous": "上一步", "lightbox.view_context": "檢視內文", @@ -260,6 +266,10 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增名單", "lists.new.title_placeholder": "新名單標題", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", "load_pending": "{count, plural, other {# 個新項目}}", @@ -267,7 +277,9 @@ "media_gallery.toggle_visible": "切換可見性", "missing_indicator.label": "找不到", "missing_indicator.sublabel": "找不到此資源", + "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?", + "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "封鎖的使用者", "navigation_bar.blocks": "封鎖使用者", "navigation_bar.bookmarks": "書籤", @@ -298,6 +310,7 @@ "notification.own_poll": "您的投票已結束", "notification.poll": "您投過的投票已經結束", "notification.reblog": "{name}轉嘟了你的嘟文", + "notification.status": "{name} just posted", "notifications.clear": "清除通知", "notifications.clear_confirmation": "確定要永久清除你的通知嗎?", "notifications.column_settings.alert": "桌面通知", @@ -313,13 +326,22 @@ "notifications.column_settings.reblog": "轉嘟:", "notifications.column_settings.show": "在欄位中顯示", "notifications.column_settings.sound": "播放音效", + "notifications.column_settings.status": "New toots:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", + "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 條通知", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", @@ -446,6 +468,7 @@ "upload_modal.detect_text": "從圖片偵測文字", "upload_modal.edit_media": "編輯媒體", "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", + "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上傳中...", "video.close": "關閉影片", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index deec5c68a..9cbd7505c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1720,6 +1720,20 @@ a.account__display-name { align-items: center; justify-content: center; flex-direction: column; + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE 10+ */ + + * { + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE 10+ */ + } + + &::-webkit-scrollbar, + *::-webkit-scrollbar { + width: 0; + height: 0; + background: transparent; /* Chrome/Safari/Webkit */ + } .image-loader__preview-canvas { max-width: $media-modal-media-max-width; @@ -4606,6 +4620,21 @@ a.status-card.compact:hover { z-index: 100; } +.media-modal__zoom-button { + position: absolute; + right: 64px; + top: 8px; + z-index: 100; + pointer-events: auto; + transition: opacity 0.3s linear; + will-change: opacity; +} + +.media-modal__zoom-button--hidden { + pointer-events: none; + opacity: 0; +} + .onboarding-modal, .error-modal, .embed-modal { From f645dad661ba033efdcdd6ca7597e7b8bc7f4f51 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Tue, 3 Nov 2020 13:06:45 +0800 Subject: [PATCH 141/422] add mouse scroll lock in image expand view (#15088) * add mouse scroll lock in image expand view * enhancement --- .../features/ui/components/zoomable_image.js | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.js b/app/javascript/mastodon/features/ui/components/zoomable_image.js index 4753a7a1c..402196727 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.js +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.js @@ -194,11 +194,14 @@ class ZoomableImage extends React.PureComponent { if (this.state.zoomMatrix.type === 'full-width') { // full width, scroll vertical - this.container.scrollTop = this.container.scrollTop + event.pixelY; + this.container.scrollTop = Math.max(this.container.scrollTop + event.pixelY, this.state.lockScroll.y); } else { // full height, scroll horizontal - this.container.scrollLeft = this.container.scrollLeft + event.pixelY; + this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelY, this.state.lockScroll.x); } + + // lock horizontal scroll + this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelX, this.state.lockScroll.x); } mouseDownHandler = e => { @@ -221,13 +224,8 @@ class ZoomableImage extends React.PureComponent { const dx = e.clientX - this.state.dragPosition.x; const dy = e.clientY - this.state.dragPosition.y; - if ((this.state.dragPosition.left - dx) >= this.state.lockScroll.x) { - this.container.scrollLeft = this.state.dragPosition.left - dx; - } - - if ((this.state.dragPosition.top - dy) >= this.state.lockScroll.y) { - this.container.scrollTop = this.state.dragPosition.top - dy; - } + this.container.scrollLeft = Math.max(this.state.dragPosition.left - dx, this.state.lockScroll.x); + this.container.scrollTop = Math.max(this.state.dragPosition.top - dy, this.state.lockScroll.y); this.setState({ dragged: true }); } @@ -336,22 +334,26 @@ class ZoomableImage extends React.PureComponent { const { scale, zoomMatrix } = this.state; if ( scale >= zoomMatrix.rate ) { - this.setState({ scale: MIN_SCALE }, () => { - this.container.scrollLeft = 0; - this.container.scrollTop = 0; - this.setState({ lockScroll: { + this.setState({ + scale: MIN_SCALE, + lockScroll: { x: 0, y: 0, - } }); + }, + }, () => { + this.container.scrollLeft = 0; + this.container.scrollTop = 0; }); } else { - this.setState({ scale: zoomMatrix.rate }, () => { - this.container.scrollLeft = zoomMatrix.scrollLeft; - this.container.scrollTop = zoomMatrix.scrollTop; - this.setState({ lockScroll: { + this.setState({ + scale: zoomMatrix.rate, + lockScroll: { x: zoomMatrix.scrollLeft, y: zoomMatrix.scrollTop, - } }); + }, + }, () => { + this.container.scrollLeft = zoomMatrix.scrollLeft; + this.container.scrollTop = zoomMatrix.scrollTop; }); } From f43000d32c8b419d4ae2bc715178c9ea26cbaaa2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:38:06 +0900 Subject: [PATCH 142/422] Bump bootsnap from 1.4.8 to 1.4.9 (#15086) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.4.8 to 1.4.9. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.4.8...v1.4.9) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0a298d1a8..41c9cbc5f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,7 +104,7 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.4) ffi (~> 1.10.0) - bootsnap (1.4.8) + bootsnap (1.4.9) msgpack (~> 1.0) brakeman (4.10.0) browser (4.2.0) From d60485cb72d966b49d771be7ffe484d4574006d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:39:02 +0900 Subject: [PATCH 143/422] Bump sidekiq-unique-jobs from 6.0.24 to 6.0.25 (#15083) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 6.0.24 to 6.0.25. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/commits/v6.0.25) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 41c9cbc5f..74ddf909b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -573,7 +573,7 @@ GEM sidekiq (>= 3) thwait tilt (>= 1.4.0) - sidekiq-unique-jobs (6.0.24) + sidekiq-unique-jobs (6.0.25) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 4.0, < 7.0) thor (>= 0.20, < 2.0) From 5b6676382d238e0ec8b861b8b1b1250e04b9b8f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:41:45 +0900 Subject: [PATCH 144/422] Bump wicg-inert from 3.0.3 to 3.1.0 (#15081) Bumps [wicg-inert](https://github.com/WICG/inert) from 3.0.3 to 3.1.0. - [Release notes](https://github.com/WICG/inert/releases) - [Commits](https://github.com/WICG/inert/compare/v3.0.3...v3.1.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1fc2f3759..edc60bbd3 100644 --- a/package.json +++ b/package.json @@ -167,7 +167,7 @@ "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^3.3.12", "webpack-merge": "^4.2.1", - "wicg-inert": "^3.0.3" + "wicg-inert": "^3.1.0" }, "devDependencies": { "@testing-library/jest-dom": "^5.11.5", diff --git a/yarn.lock b/yarn.lock index 126b80907..dead314a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11143,10 +11143,10 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wicg-inert@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.0.3.tgz#7d05eaed64176887ee4c66fc0c4d6fe4b38ccce5" - integrity sha512-XwXf8K0NN4cpagjBlZ2/j/5Sjf6dW3HNbfywEy1y6Z8PJKvSHVGiuc5Id/9RZ6EmGq+GQCGTo7B2SK0Misbr6g== +wicg-inert@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.1.0.tgz#6525f12db188b83f0051bed2ddcf6c1aa5b17590" + integrity sha512-P0ZiWaN9SxOkJbYtF/PIwmIRO8UTqTJtyl33QTQlHfAb6h15T0Dp5m7WTJ8N6UWIoj+KU5M0a8EtfRZLlHiP0Q== wide-align@^1.1.0: version "1.1.3" From 84cffe89fd1afe1a66979921b19fc214b17ae5c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:43:15 +0900 Subject: [PATCH 145/422] Bump file-loader from 6.1.1 to 6.2.0 (#15075) Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 6.1.1 to 6.2.0. - [Release notes](https://github.com/webpack-contrib/file-loader/releases) - [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/file-loader/compare/v6.1.1...v6.2.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index edc60bbd3..d5e586eec 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "escape-html": "^1.0.3", "exif-js": "^2.3.0", "express": "^4.17.1", - "file-loader": "^6.1.1", + "file-loader": "^6.2.0", "font-awesome": "^4.7.0", "glob": "^7.1.6", "history": "^4.10.1", diff --git a/yarn.lock b/yarn.lock index dead314a9..a79d0fdc5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4576,10 +4576,10 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" - integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" From ff93ec559023da98c206a09d65ce152d76c8071a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:48:28 +0900 Subject: [PATCH 146/422] Bump compression-webpack-plugin from 6.0.3 to 6.0.4 (#15076) Bumps [compression-webpack-plugin](https://github.com/webpack-contrib/compression-webpack-plugin) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/webpack-contrib/compression-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/compression-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v6.0.3...v6.0.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d5e586eec..ae0602bbb 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-runtime": "^6.26.0", "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^6.0.3", + "compression-webpack-plugin": "^6.0.4", "cross-env": "^7.0.2", "css-loader": "^5.0.0", "cssnano": "^4.1.10", diff --git a/yarn.lock b/yarn.lock index a79d0fdc5..ee90784d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2995,10 +2995,10 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.3.tgz#d0d3e913810e3bf67462e1cecd794b3109af89de" - integrity sha512-xzSWiZWwBs+HHGhlYxw0oFaYL/0VYErEqDHCAJhJ3Mza5fmF5JJ4iaB6Ap2JT68C0UhhmoI4Mh37LVz/THv2Fw== +compression-webpack-plugin@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.4.tgz#524699c0ad4e94cab0eb199c734e291f6ab685b9" + integrity sha512-PViPdrF5UmqZxsr9WNoE+R6lTre6/5tC9TmWotBfhOQtWlc7oj/SXCsrecbZJ9LDpwLjHH6llPCKmw+JGPGN+A== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" From 868a13b20d2415b0b514539f10434107f3129ee3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 00:06:37 +0900 Subject: [PATCH 147/422] Bump eslint from 7.12.0 to 7.12.1 (#15080) Bumps [eslint](https://github.com/eslint/eslint) from 7.12.0 to 7.12.1. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.12.0...v7.12.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index ae0602bbb..bdf8ca185 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "@testing-library/react": "^11.1.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.1", - "eslint": "^7.12.0", + "eslint": "^7.12.1", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.3.1", "eslint-plugin-promise": "~4.2.1", diff --git a/yarn.lock b/yarn.lock index ee90784d3..ccb5189bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1080,10 +1080,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== -"@eslint/eslintrc@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.0.tgz#bc7e3c4304d4c8720968ccaee793087dfb5fe6b4" - integrity sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ== +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -4213,13 +4213,13 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^7.12.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.0.tgz#7b6a85f87a9adc239e979bb721cde5ce0dc27da6" - integrity sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA== +eslint@^7.12.1: + version "7.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" + integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== dependencies: "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.0" + "@eslint/eslintrc" "^0.2.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" From f298e78a3700896ac2feff105c63e04933058877 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 00:07:03 +0900 Subject: [PATCH 148/422] Bump react-redux from 7.2.1 to 7.2.2 (#15079) Bumps [react-redux](https://github.com/reduxjs/react-redux) from 7.2.1 to 7.2.2. - [Release notes](https://github.com/reduxjs/react-redux/releases) - [Changelog](https://github.com/reduxjs/react-redux/blob/master/CHANGELOG.md) - [Commits](https://github.com/reduxjs/react-redux/compare/v7.2.1...v7.2.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index bdf8ca185..59b1dd6d4 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "react-motion": "^0.5.2", "react-notification": "^6.8.5", "react-overlays": "^0.9.2", - "react-redux": "^7.2.1", + "react-redux": "^7.2.2", "react-redux-loading-bar": "^4.0.8", "react-router-dom": "^4.1.1", "react-router-scroll-4": "^1.0.0-beta.1", diff --git a/yarn.lock b/yarn.lock index ccb5189bd..e4836badf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5186,10 +5186,10 @@ hoist-non-react-statics@^2.5.0: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" @@ -8669,7 +8669,7 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.12.0, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6, react-is@^16.9.0: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8729,16 +8729,16 @@ react-redux-loading-bar@^4.0.8: prop-types "^15.6.2" react-lifecycles-compat "^3.0.2" -react-redux@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985" - integrity sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg== +react-redux@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736" + integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA== dependencies: - "@babel/runtime" "^7.5.5" - hoist-non-react-statics "^3.3.0" + "@babel/runtime" "^7.12.1" + hoist-non-react-statics "^3.3.2" loose-envify "^1.4.0" prop-types "^15.7.2" - react-is "^16.9.0" + react-is "^16.13.1" react-router-dom@^4.1.1: version "4.3.1" From 5b28298160d0aa475aa6125c1ef32f2d8ae8bfe8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 00:07:58 +0900 Subject: [PATCH 149/422] Bump eslint-plugin-jsx-a11y from 6.3.1 to 6.4.1 (#15078) Bumps [eslint-plugin-jsx-a11y](https://github.com/evcohen/eslint-plugin-jsx-a11y) from 6.3.1 to 6.4.1. - [Release notes](https://github.com/evcohen/eslint-plugin-jsx-a11y/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/CHANGELOG.md) - [Commits](https://github.com/evcohen/eslint-plugin-jsx-a11y/compare/v6.3.1...v6.4.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 42 +++++++++++++++++------------------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 59b1dd6d4..29d505912 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "babel-jest": "^26.6.1", "eslint": "^7.12.1", "eslint-plugin-import": "~2.22.1", - "eslint-plugin-jsx-a11y": "~6.3.1", + "eslint-plugin-jsx-a11y": "~6.4.1", "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.5", "jest": "^26.6.1", diff --git a/yarn.lock b/yarn.lock index e4836badf..d8a894513 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2095,10 +2095,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== -axe-core@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" - integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axe-core@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== axios@^0.21.0: version "0.21.0" @@ -2107,7 +2107,7 @@ axios@^0.21.0: dependencies: follow-redirects "^1.10.0" -axobject-query@^2.1.2: +axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== @@ -4102,21 +4102,21 @@ eslint-plugin-import@~2.22.1: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@~6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" - integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== +eslint-plugin-jsx-a11y@~6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== dependencies: - "@babel/runtime" "^7.10.2" + "@babel/runtime" "^7.11.2" aria-query "^4.2.2" array-includes "^3.1.1" ast-types-flow "^0.0.7" - axe-core "^3.5.4" - axobject-query "^2.1.2" + axe-core "^4.0.2" + axobject-query "^2.2.0" damerau-levenshtein "^1.0.6" emoji-regex "^9.0.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" + jsx-ast-utils "^3.1.0" language-tags "^1.0.5" eslint-plugin-promise@~4.2.1: @@ -6566,18 +6566,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== - dependencies: - array-includes "^3.1.1" - object.assign "^4.1.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.0.0.tgz#0f49d5093bafa4b45d3fe02147d8b40ffc6c7438" - integrity sha512-sPuicm6EPKYI/UnWpOatvg4pI50qaBo4dSOMGUPutmJ26ttedFKXr0It0XXPk4HKnQ/1X0st4eSS2w2jhFk9Ow== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== dependencies: array-includes "^3.1.1" object.assign "^4.1.1" From 4a4f23744f6a67f2d9763d4ccda2f8fe459e56b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 00:13:15 +0900 Subject: [PATCH 150/422] Bump mini-css-extract-plugin from 1.2.0 to 1.2.1 (#15077) Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.2.0 to 1.2.1. - [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.2.0...v1.2.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 29d505912..e05ece56c 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "lodash": "^4.17.19", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^1.2.0", + "mini-css-extract-plugin": "^1.2.1", "mkdirp": "^1.0.4", "npmlog": "^4.1.2", "object-assign": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index d8a894513..4abda2750 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6988,10 +6988,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.0.tgz#f1bdfa7bb6f6a238bc327f813f204283ea33ee36" - integrity sha512-iBZokjaIjHvI4N0AURx5aPBawcmxB/d2NYikxZ4J57Lg5sDShUPyWvuSWl1dueI5oCs7nz8V7qtOCaLjB7AYPw== +mini-css-extract-plugin@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz#30ea7dee632b3002b0c77aeed447790408cb247e" + integrity sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" From 352c4907b2d6a2f0cf34895ceaee07c1c350afb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 00:23:05 +0900 Subject: [PATCH 151/422] Bump sass from 1.27.0 to 1.28.0 (#15082) Bumps [sass](https://github.com/sass/dart-sass) from 1.27.0 to 1.28.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.27.0...1.28.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e05ece56c..762c2b499 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.27.0", + "sass": "^1.28.0", "sass-loader": "^10.0.4", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 4abda2750..b7bf767a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9406,10 +9406,10 @@ sass-loader@^10.0.4: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.27.0.tgz#0657ff674206b95ec20dc638a93e179c78f6ada2" - integrity sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig== +sass@^1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.28.0.tgz#546f1308ff74cc4ec2ad735fd35dc18bc3f51f72" + integrity sha512-9FWX/0wuE1KxwfiP02chZhHaPzu6adpx9+wGch7WMOuHy5npOo0UapRI3FNSHva2CczaYJu2yNUBN8cCSqHz/A== dependencies: chokidar ">=2.0.0 <4.0.0" From e16b0fb15a7ef2607f080e8c0b884c1cf37e5ebb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 02:21:05 +0900 Subject: [PATCH 152/422] Bump detect-passive-events from 1.0.5 to 2.0.1 (#15003) * Bump detect-passive-events from 1.0.5 to 2.0.1 Bumps [detect-passive-events](https://github.com/rafgraph/detect-passive-events) from 1.0.5 to 2.0.1. - [Release notes](https://github.com/rafgraph/detect-passive-events/releases) - [Commits](https://github.com/rafgraph/detect-passive-events/compare/v1.0.5...v2.0.1) Signed-off-by: dependabot[bot] * Migrate to detect-passive-events v2 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/components/column.js | 6 +++--- app/javascript/mastodon/components/dropdown_menu.js | 4 ++-- .../features/compose/components/emoji_picker_dropdown.js | 4 ++-- .../features/compose/components/privacy_dropdown.js | 4 ++-- .../mastodon/features/ui/components/columns_area.js | 6 +++--- app/javascript/mastodon/is_mobile.js | 4 ++-- package.json | 2 +- yarn.lock | 8 ++++---- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/javascript/mastodon/components/column.js b/app/javascript/mastodon/components/column.js index 55e3bfd5e..239824a4f 100644 --- a/app/javascript/mastodon/components/column.js +++ b/app/javascript/mastodon/components/column.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { scrollTop } from '../scroll'; export default class Column extends React.PureComponent { @@ -35,9 +35,9 @@ export default class Column extends React.PureComponent { componentDidMount () { if (this.props.bindToDocument) { - document.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + document.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } else { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } } diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js index 09e3c9df8..c6b4b1187 100644 --- a/app/javascript/mastodon/components/dropdown_menu.js +++ b/app/javascript/mastodon/components/dropdown_menu.js @@ -5,9 +5,9 @@ import IconButton from './icon_button'; import Overlay from 'react-overlays/lib/Overlay'; import Motion from '../features/ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; let id = 0; class DropdownMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index bac136e5e..dc4f48060 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -5,7 +5,7 @@ import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components' import Overlay from 'react-overlays/lib/Overlay'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji'; import { assetHost } from 'mastodon/utils/config'; @@ -29,7 +29,7 @@ const messages = defineMessages({ let EmojiPicker, Emoji; // load asynchronously const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class ModifierPickerMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js index 5223025fb..309f46290 100644 --- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js @@ -5,7 +5,7 @@ import IconButton from '../../../components/icon_button'; import Overlay from 'react-overlays/lib/Overlay'; import Motion from '../../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; @@ -21,7 +21,7 @@ const messages = defineMessages({ change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust status privacy' }, }); -const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class PrivacyDropdownMenu extends React.PureComponent { diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index ecc0b8f0b..36a84fcbf 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -31,7 +31,7 @@ import Icon from 'mastodon/components/icon'; import ComposePanel from './compose_panel'; import NavigationPanel from './navigation_panel'; -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; import { scrollRight } from '../../../scroll'; const componentMap = { @@ -80,7 +80,7 @@ class ColumnsArea extends ImmutablePureComponent { componentDidMount() { if (!this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } this.lastIndex = getIndex(this.context.router.history.location.pathname); @@ -97,7 +97,7 @@ class ColumnsArea extends ImmutablePureComponent { componentDidUpdate(prevProps) { if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); } this.lastIndex = getIndex(this.context.router.history.location.pathname); this.setState({ shouldAnimate: true }); diff --git a/app/javascript/mastodon/is_mobile.js b/app/javascript/mastodon/is_mobile.js index f96df1ebb..5a8c3db08 100644 --- a/app/javascript/mastodon/is_mobile.js +++ b/app/javascript/mastodon/is_mobile.js @@ -1,4 +1,4 @@ -import detectPassiveEvents from 'detect-passive-events'; +import { supportsPassiveEvents } from 'detect-passive-events'; const LAYOUT_BREAKPOINT = 630; @@ -9,7 +9,7 @@ export function isMobile(width) { const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; let userTouching = false; -let listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; +let listenerOptions = supportsPassiveEvents ? { passive: true } : false; function touchListener() { userTouching = true; diff --git a/package.json b/package.json index 762c2b499..ed544f070 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "cross-env": "^7.0.2", "css-loader": "^5.0.0", "cssnano": "^4.1.10", - "detect-passive-events": "^1.0.5", + "detect-passive-events": "^2.0.1", "dotenv": "^8.2.0", "emoji-mart": "Gargron/emoji-mart#build", "es6-symbol": "^3.1.3", diff --git a/yarn.lock b/yarn.lock index b7bf767a0..f0f1278f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3639,10 +3639,10 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== -detect-passive-events@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-1.0.5.tgz#ce324db665123bef9e368b8059ff95d95217cc05" - integrity sha512-foW7Q35wwOCxVzW0xLf5XeB5Fhe7oyRgvkBYdiP9IWgLMzjqUqTvsJv9ymuEWGjY6AoDXD3OC294+Z9iuOw0QA== +detect-passive-events@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-2.0.1.tgz#fdbd6f6dd5e6ac10c6189a4cb26ab264d41c0835" + integrity sha512-7WbRn4mznO63FW0KSYa7S3HgCG94uZ6HGZO1TyVRtdZuMNGUeY/ScWrIx45XnUz1LWoLZVi13ULVHqKE07ZfKg== diff-sequences@^25.2.6: version "25.2.6" From ab009985035dcad87cfd2bfaafaa76f6a03291e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Nov 2020 02:21:28 +0900 Subject: [PATCH 153/422] Bump webpack-merge from 4.2.2 to 5.0.9 (#14424) * Bump webpack-merge from 4.2.2 to 5.0.9 Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 4.2.2 to 5.0.9. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v4.2.2...v5.0.9) Signed-off-by: dependabot[bot] * Fix import path Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Yamagishi Kazutoshi --- config/webpack/development.js | 2 +- config/webpack/production.js | 2 +- config/webpack/tests.js | 2 +- package.json | 2 +- yarn.lock | 32 +++++++++++++++++++++++++++----- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/config/webpack/development.js b/config/webpack/development.js index 774ecbc07..c3cf1b655 100644 --- a/config/webpack/development.js +++ b/config/webpack/development.js @@ -1,6 +1,6 @@ // Note: You must restart bin/webpack-dev-server for changes to take effect -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const sharedConfig = require('./shared'); const { settings, output } = require('./configuration'); diff --git a/config/webpack/production.js b/config/webpack/production.js index f2f216422..f1d0dabae 100644 --- a/config/webpack/production.js +++ b/config/webpack/production.js @@ -2,7 +2,7 @@ const path = require('path'); const { URL } = require('url'); -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const OfflinePlugin = require('offline-plugin'); const TerserPlugin = require('terser-webpack-plugin'); diff --git a/config/webpack/tests.js b/config/webpack/tests.js index 8b56eb92f..f9d39f1b8 100644 --- a/config/webpack/tests.js +++ b/config/webpack/tests.js @@ -1,6 +1,6 @@ // Note: You must restart bin/webpack-dev-server for changes to take effect -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const sharedConfig = require('./shared.js'); module.exports = merge(sharedConfig, { diff --git a/package.json b/package.json index ed544f070..b51863c71 100644 --- a/package.json +++ b/package.json @@ -166,7 +166,7 @@ "webpack-assets-manifest": "^3.1.1", "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^3.3.12", - "webpack-merge": "^4.2.1", + "webpack-merge": "^5.0.9", "wicg-inert": "^3.1.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index f0f1278f7..a18dd960d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2889,6 +2889,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -9597,6 +9606,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shallow-equal@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" @@ -11030,12 +11046,13 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== +webpack-merge@^5.0.9: + version "5.0.9" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.0.9.tgz#d5e0e0ae564ae704836d747893bdd2741544bf31" + integrity sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw== dependencies: - lodash "^4.17.15" + clone-deep "^4.0.1" + wildcard "^2.0.0" webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" @@ -11147,6 +11164,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From f720af6b721b773e68c00a546256ff20eeb3226d Mon Sep 17 00:00:00 2001 From: Mashiro Date: Thu, 5 Nov 2020 03:43:31 +0800 Subject: [PATCH 154/422] Add limitation of image's max zoom rate (max to the original size of image) (#15094) * limit image max scale rate to fit the actual image size * replace with MIN_SCALE * fix behavior on touch screen --- .../features/ui/components/zoomable_image.js | 69 ++++++++++++++----- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.js b/app/javascript/mastodon/features/ui/components/zoomable_image.js index 402196727..1cf263cb9 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.js +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.js @@ -113,7 +113,8 @@ class ZoomableImage extends React.PureComponent { state = { scale: MIN_SCALE, zoomMatrix: { - type: null, // 'full-width' 'full-height' + type: null, // 'width' 'height' + fullScreen: null, // bool rate: null, // full screen scale rate clientWidth: null, clientHeight: null, @@ -122,12 +123,15 @@ class ZoomableImage extends React.PureComponent { clientHeightFixed: null, scrollTop: null, scrollLeft: null, + translateX: null, + translateY: null, }, zoomState: 'expand', // 'expand' 'compress' navigationHidden: false, dragPosition: { top: 0, left: 0, x: 0, y: 0 }, dragged: false, lockScroll: { x: 0, y: 0 }, + lockTranslate: { x: 0, y: 0 }, } removers = []; @@ -168,18 +172,24 @@ class ZoomableImage extends React.PureComponent { } componentDidUpdate () { + this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' }); + + if (this.state.scale === MIN_SCALE) { + this.container.style.removeProperty('cursor'); + } + } + + UNSAFE_componentWillReceiveProps () { + // reset when slide to next image if (this.props.zoomButtonHidden) { - this.setState({ scale: MIN_SCALE }, () => { + this.setState({ + scale: MIN_SCALE, + lockTranslate: { x: 0, y: 0 }, + }, () => { this.container.scrollLeft = 0; this.container.scrollTop = 0; }); } - - this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' }); - - if (this.state.scale === 1) { - this.container.style.removeProperty('cursor'); - } } removeEventListeners () { @@ -192,7 +202,7 @@ class ZoomableImage extends React.PureComponent { const event = normalizeWheel(e); - if (this.state.zoomMatrix.type === 'full-width') { + if (this.state.zoomMatrix.type === 'width') { // full width, scroll vertical this.container.scrollTop = Math.max(this.container.scrollTop + event.pixelY, this.state.lockScroll.y); } else { @@ -268,7 +278,7 @@ class ZoomableImage extends React.PureComponent { } zoom(nextScale, midpoint) { - const { scale } = this.state; + const { scale, zoomMatrix } = this.state; const { scrollLeft, scrollTop } = this.container; // math memo: @@ -283,6 +293,15 @@ class ZoomableImage extends React.PureComponent { this.setState({ scale: nextScale }, () => { this.container.scrollLeft = nextScrollLeft; this.container.scrollTop = nextScrollTop; + // reset the translateX/Y constantly + if (nextScale < zoomMatrix.rate) { + this.setState({ + lockTranslate: { + x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)), + y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)), + }, + }); + } }); } @@ -307,14 +326,18 @@ class ZoomableImage extends React.PureComponent { const { offsetWidth, offsetHeight } = this.image; const clientHeightFixed = clientHeight - NAV_BAR_HEIGHT; - const type = width/height < clientWidth / clientHeightFixed ? 'full-width' : 'full-height'; - const rate = type === 'full-width' ? clientWidth / offsetWidth : clientHeightFixed / offsetHeight; - const scrollTop = type === 'full-width' ? (clientHeight - offsetHeight) / 2 - NAV_BAR_HEIGHT : (clientHeightFixed - offsetHeight) / 2; + const type = width / height < clientWidth / clientHeightFixed ? 'width' : 'height'; + const fullScreen = type === 'width' ? width > clientWidth : height > clientHeightFixed; + const rate = type === 'width' ? Math.min(clientWidth, width) / offsetWidth : Math.min(clientHeightFixed, height) / offsetHeight; + const scrollTop = type === 'width' ? (clientHeight - offsetHeight) / 2 - NAV_BAR_HEIGHT : (clientHeightFixed - offsetHeight) / 2; const scrollLeft = (clientWidth - offsetWidth) / 2; + const translateX = type === 'width' ? (width - offsetWidth) / (2 * rate) : 0; + const translateY = type === 'height' ? (height - offsetHeight) / (2 * rate) : 0; this.setState({ zoomMatrix: { type: type, + fullScreen: fullScreen, rate: rate, clientWidth: clientWidth, clientHeight: clientHeight, @@ -323,6 +346,8 @@ class ZoomableImage extends React.PureComponent { clientHeightFixed: clientHeightFixed, scrollTop: scrollTop, scrollLeft: scrollLeft, + translateX: translateX, + translateY: translateY, }, }); } @@ -340,6 +365,10 @@ class ZoomableImage extends React.PureComponent { x: 0, y: 0, }, + lockTranslate: { + x: 0, + y: 0, + }, }, () => { this.container.scrollLeft = 0; this.container.scrollTop = 0; @@ -351,6 +380,10 @@ class ZoomableImage extends React.PureComponent { x: zoomMatrix.scrollLeft, y: zoomMatrix.scrollTop, }, + lockTranslate: { + x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX, + y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY, + }, }, () => { this.container.scrollLeft = zoomMatrix.scrollLeft; this.container.scrollTop = zoomMatrix.scrollTop; @@ -371,15 +404,15 @@ class ZoomableImage extends React.PureComponent { render () { const { alt, src, width, height, intl } = this.props; - const { scale } = this.state; - const overflow = scale === 1 ? 'hidden' : 'scroll'; - const zoomButtonSshouldHide = !this.state.navigationHidden && !this.props.zoomButtonHidden ? '' : 'media-modal__zoom-button--hidden'; + const { scale, lockTranslate } = this.state; + const overflow = scale === MIN_SCALE ? 'hidden' : 'scroll'; + const zoomButtonShouldHide = this.state.navigationHidden || this.props.zoomButtonHidden || this.state.zoomMatrix.rate <= MIN_SCALE ? 'media-modal__zoom-button--hidden' : ''; const zoomButtonTitle = this.state.zoomState === 'compress' ? intl.formatMessage(messages.compress) : intl.formatMessage(messages.expand); return ( Date: Wed, 4 Nov 2020 20:44:10 +0100 Subject: [PATCH 155/422] Bump puma from 5.0.2 to 5.0.4 (#15085) Bumps [puma](https://github.com/puma/puma) from 5.0.2 to 5.0.4. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.0.2...v5.0.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 74ddf909b..9ed0ed9ec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -424,7 +424,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.6) - puma (5.0.2) + puma (5.0.4) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) From d6fe0c94ca48a10d579cf5ec321c33c6124b402d Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 5 Nov 2020 04:45:01 +0900 Subject: [PATCH 156/422] Add account sensitized (#14361) * Add account sensitized * Fix i18n normalize * Fix description and spec * Fix spec * Fix wording --- app/controllers/admin/accounts_controller.rb | 7 +++++++ .../api/v1/admin/accounts_controller.rb | 8 ++++++++ app/helpers/statuses_helper.rb | 8 ++++++++ app/lib/activitypub/activity/create.rb | 2 +- app/models/account.rb | 14 ++++++++++++++ app/models/account_warning.rb | 2 +- app/models/admin/account_action.rb | 9 +++++++++ app/models/admin/action_log_filter.rb | 2 ++ app/policies/account_policy.rb | 8 ++++++++ app/serializers/activitypub/note_serializer.rb | 4 ++++ app/serializers/rest/status_serializer.rb | 8 ++++++++ app/views/admin/accounts/show.html.haml | 7 +++++++ app/views/statuses/_detailed_status.html.haml | 6 +++--- app/views/statuses/_simple_status.html.haml | 6 +++--- config/locales/en.yml | 10 ++++++++++ config/locales/ja.yml | 10 ++++++++++ config/locales/simple_form.en.yml | 1 + config/locales/simple_form.ja.yml | 1 + config/routes.rb | 2 ++ ...0200614002136_add_sensitized_to_accounts.rb | 5 +++++ db/schema.rb | 1 + .../api/v1/admin/accounts_controller_spec.rb | 18 ++++++++++++++++++ spec/models/admin/account_action_spec.rb | 8 ++++---- spec/policies/account_policy_spec.rb | 2 +- 24 files changed, 136 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20200614002136_add_sensitized_to_accounts.rb diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index b9b75727d..1dd7430e0 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -53,6 +53,13 @@ module Admin redirect_to admin_account_path(@account.id), notice: I18n.t('admin.accounts.destroyed_msg', username: @account.acct) end + def unsensitive + authorize @account, :unsensitive? + @account.unsensitize! + log_action :unsensitive, @account + redirect_to admin_account_path(@account.id) + end + def unsilence authorize @account, :unsilence? @account.unsilence! diff --git a/app/controllers/api/v1/admin/accounts_controller.rb b/app/controllers/api/v1/admin/accounts_controller.rb index 3af572f25..63cc521ed 100644 --- a/app/controllers/api/v1/admin/accounts_controller.rb +++ b/app/controllers/api/v1/admin/accounts_controller.rb @@ -22,6 +22,7 @@ class Api::V1::Admin::AccountsController < Api::BaseController active pending disabled + sensitized silenced suspended username @@ -68,6 +69,13 @@ class Api::V1::Admin::AccountsController < Api::BaseController render json: @account, serializer: REST::Admin::AccountSerializer end + def unsensitive + authorize @account, :unsensitive? + @account.unsensitize! + log_action :unsensitive, @account + render json: @account, serializer: REST::Admin::AccountSerializer + end + def unsilence authorize @account, :unsilence? @account.unsilence! diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index a51597cf3..adb7918c5 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -117,6 +117,14 @@ module StatusesHelper end end + def sensitized?(status, account) + if !account.nil? && account.id == status.account_id + status.sensitive + else + status.account.sensitized? || status.sensitive + end + end + private def simplified_text(text) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index f275feefc..c77f237f9 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -111,7 +111,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity created_at: @object['published'], override_timestamps: @options[:override_timestamps], reply: @object['inReplyTo'].present?, - sensitive: @object['sensitive'] || false, + sensitive: @account.sensitized? || @object['sensitive'] || false, visibility: visibility_from_audience, thread: replied_to_status, conversation: conversation_from_uri(@object['conversation']), diff --git a/app/models/account.rb b/app/models/account.rb index 59d338f5a..d2112a13d 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -50,6 +50,7 @@ # avatar_storage_schema_version :integer # header_storage_schema_version :integer # devices_url :string +# sensitized_at :datetime # class Account < ApplicationRecord @@ -92,6 +93,7 @@ class Account < ApplicationRecord scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } scope :silenced, -> { where.not(silenced_at: nil) } scope :suspended, -> { where.not(suspended_at: nil) } + scope :sensitized, -> { where.not(sensitized_at: nil) } scope :without_suspended, -> { where(suspended_at: nil) } scope :without_silenced, -> { where(silenced_at: nil) } scope :recent, -> { reorder(id: :desc) } @@ -234,6 +236,18 @@ class Account < ApplicationRecord end end + def sensitized? + sensitized_at.present? + end + + def sensitize!(date = Time.now.utc) + update!(sensitized_at: date) + end + + def unsensitize! + update!(sensitized_at: nil) + end + def memorialize! update!(memorial: true) end diff --git a/app/models/account_warning.rb b/app/models/account_warning.rb index 157e6c04d..5efc924d5 100644 --- a/app/models/account_warning.rb +++ b/app/models/account_warning.rb @@ -13,7 +13,7 @@ # class AccountWarning < ApplicationRecord - enum action: %i(none disable silence suspend), _suffix: :action + enum action: %i(none disable sensitive silence suspend), _suffix: :action belongs_to :account, inverse_of: :account_warnings belongs_to :target_account, class_name: 'Account', inverse_of: :targeted_account_warnings diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index c4ac09520..11ce737f3 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -8,6 +8,7 @@ class Admin::AccountAction TYPES = %w( none disable + sensitive silence suspend ).freeze @@ -64,6 +65,8 @@ class Admin::AccountAction case type when 'disable' handle_disable! + when 'sensitive' + handle_sensitive! when 'silence' handle_silence! when 'suspend' @@ -109,6 +112,12 @@ class Admin::AccountAction target_account.user&.disable! end + def handle_sensitive! + authorize(target_account, :sensitive?) + log_action(:sensitive, target_account) + target_account.sensitize! + end + def handle_silence! authorize(target_account, :silence?) log_action(:silence, target_account) diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index 0ba7e1609..3a1b67e06 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -35,9 +35,11 @@ class Admin::ActionLogFilter reopen_report: { target_type: 'Report', action: 'reopen' }.freeze, reset_password_user: { target_type: 'User', action: 'reset_password' }.freeze, resolve_report: { target_type: 'Report', action: 'resolve' }.freeze, + sensitive_account: { target_type: 'Account', action: 'sensitive' }.freeze, silence_account: { target_type: 'Account', action: 'silence' }.freeze, suspend_account: { target_type: 'Account', action: 'suspend' }.freeze, unassigned_report: { target_type: 'Report', action: 'unassigned' }.freeze, + unsensitive_account: { target_type: 'Account', action: 'unsensitive' }.freeze, unsilence_account: { target_type: 'Account', action: 'unsilence' }.freeze, unsuspend_account: { target_type: 'Account', action: 'unsuspend' }.freeze, update_announcement: { target_type: 'Announcement', action: 'update' }.freeze, diff --git a/app/policies/account_policy.rb b/app/policies/account_policy.rb index 1b105e92a..679119075 100644 --- a/app/policies/account_policy.rb +++ b/app/policies/account_policy.rb @@ -25,6 +25,14 @@ class AccountPolicy < ApplicationPolicy staff? end + def sensitive? + staff? && !record.user&.staff? + end + + def unsensitive? + staff? + end + def silence? staff? && !record.user&.staff? end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index f26fd93a4..6f9e1ca63 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -95,6 +95,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer ActivityPub::TagManager.instance.cc(object) end + def sensitive + object.account.sensitized? || object.sensitive + end + def virtual_tags object.active_mentions.to_a.sort_by(&:id) + object.tags + object.emojis end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index 0109de882..bb6df90b7 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -58,6 +58,14 @@ class REST::StatusSerializer < ActiveModel::Serializer end end + def sensitive + if current_user? && current_user.account_id == object.account_id + object.sensitive + else + object.account.sensitized? || object.sensitive + end + end + def uri ActivityPub::TagManager.instance.uri_for(object) end diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index f0a216f6b..d5978eddd 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -69,6 +69,8 @@ = t('admin.accounts.confirming') - elsif @account.local? && !@account.user_approved? = t('admin.accounts.pending') + - elsif @account.sensitized? + = t('admin.accounts.sensitive') - else = t('admin.accounts.no_limits_imposed') .dashboard__counters__label= t 'admin.accounts.login_status' @@ -192,6 +194,11 @@ - else = link_to t('admin.accounts.disable'), new_admin_account_action_path(@account.id, type: 'disable'), class: 'button' if can?(:disable, @account.user) + - if @account.sensitized? + = link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsensitive, @account) + - elsif !@account.local? || @account.user_approved? + = link_to t('admin.accounts.sensitive'), new_admin_account_action_path(@account.id, type: 'sensitive'), class: 'button' if can?(:sensitive, @account) + - if @account.silenced? = link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsilence, @account) - elsif !@account.local? || @account.user_approved? diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index b3e9c44fc..a4dd8534f 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -29,17 +29,17 @@ - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first - = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: status.sensitive?, width: 670, height: 380, detailed: true, inline: true, alt: video.description do + = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 670, height: 380, detailed: true, inline: true, alt: video.description do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.media_attachments.first.audio? - audio = status.media_attachments.first = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 670, height: 380, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - else - = react_component :media_gallery, height: 380, sensitive: status.sensitive?, standalone: true, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do + = react_component :media_gallery, height: 380, sensitive: sensitized?(status, current_account), standalone: true, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card - = react_component :card, sensitive: status.sensitive?, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json + = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json .detailed-status__meta %data.dt-published{ value: status.created_at.to_time.iso8601 } diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index 7408749cc..192192700 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -35,17 +35,17 @@ - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first - = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: status.sensitive?, width: 610, height: 343, inline: true, alt: video.description do + = react_component :video, src: full_asset_url(video.file.url(:original)), preview: full_asset_url(video.thumbnail.present? ? video.thumbnail.url : video.file.url(:small)), blurhash: video.blurhash, sensitive: sensitized?(status, current_account), width: 610, height: 343, inline: true, alt: video.description do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.media_attachments.first.audio? - audio = status.media_attachments.first = react_component :audio, src: full_asset_url(audio.file.url(:original)), poster: full_asset_url(audio.thumbnail.present? ? audio.thumbnail.url : status.account.avatar_static_url), backgroundColor: audio.file.meta.dig('colors', 'background'), foregroundColor: audio.file.meta.dig('colors', 'foreground'), accentColor: audio.file.meta.dig('colors', 'accent'), width: 610, height: 343, alt: audio.description, duration: audio.file.meta.dig('original', 'duration') do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - else - = react_component :media_gallery, height: 343, sensitive: status.sensitive?, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do + = react_component :media_gallery, height: 343, sensitive: sensitized?(status, current_account), autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card - = react_component :card, sensitive: status.sensitive?, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json + = react_component :card, sensitive: sensitized?(status, current_account), 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json - if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id = link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__content__read-more-button', target: stream_link_target, rel: 'noopener noreferrer' do diff --git a/config/locales/en.yml b/config/locales/en.yml index 084006a2a..c962bc532 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -188,6 +188,8 @@ en: search: Search search_same_email_domain: Other users with the same e-mail domain search_same_ip: Other users with the same IP + sensitive: Sensitive + sensitized: marked as sensitive shared_inbox_url: Shared inbox URL show: created_reports: Made reports @@ -202,6 +204,7 @@ en: time_in_queue: Waiting in queue %{time} title: Accounts unconfirmed_email: Unconfirmed email + undo_sensitized: Undo sensitive undo_silenced: Undo silence undo_suspension: Undo suspension unsilenced_msg: Successfully unlimited %{username}'s account @@ -243,9 +246,11 @@ en: reopen_report: Reopen Report reset_password_user: Reset Password resolve_report: Resolve Report + sensitive_account: Mark the media in your account as sensitive silence_account: Silence Account suspend_account: Suspend Account unassigned_report: Unassign Report + unsensitive_account: Unmark the media in your account as sensitive unsilence_account: Unsilence Account unsuspend_account: Unsuspend Account update_announcement: Update Announcement @@ -281,9 +286,11 @@ en: reopen_report: "%{name} reopened report %{target}" reset_password_user: "%{name} reset password of user %{target}" resolve_report: "%{name} resolved report %{target}" + sensitive_account: "%{name} marked %{target}'s media as sensitive" silence_account: "%{name} silenced %{target}'s account" suspend_account: "%{name} suspended %{target}'s account" unassigned_report: "%{name} unassigned report %{target}" + unsensitive_account: "%{name} unmarked %{target}'s media as sensitive" unsilence_account: "%{name} unsilenced %{target}'s account" unsuspend_account: "%{name} unsuspended %{target}'s account" update_announcement: "%{name} updated announcement %{target}" @@ -1339,6 +1346,7 @@ en: warning: explanation: disable: You can no longer login to your account or use it in any other way, but your profile and other data remains intact. + sensitive: Your uploaded media files and linked media will be treated as sensitive. silence: You can still use your account but only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you. suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed, but we will retain some data to prevent you from evading the suspension. get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}. @@ -1347,11 +1355,13 @@ en: subject: disable: Your account %{acct} has been frozen none: Warning for %{acct} + sensitive: Your account %{acct} posting media has been marked as sensitive silence: Your account %{acct} has been limited suspend: Your account %{acct} has been suspended title: disable: Account frozen none: Warning + sensitive: Your media has been marked as sensitive silence: Account limited suspend: Account suspended welcome: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index fb6255546..fd9ec9427 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -172,6 +172,8 @@ ja: search: 検索 search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じ IP のユーザーを検索 + sensitive: 閲覧注意 + sensitized: 閲覧注意済み shared_inbox_url: Shared inbox URL show: created_reports: このアカウントで作られた通報 @@ -184,6 +186,7 @@ ja: time_in_queue: "%{time} 待ち" title: アカウント unconfirmed_email: 確認待ちのメールアドレス + undo_sensitized: 閲覧注意から戻す undo_silenced: サイレンスから戻す undo_suspension: 停止から戻す unsubscribe: 購読の解除 @@ -220,9 +223,11 @@ ja: reopen_report: 通報を再度開く reset_password_user: パスワードをリセット resolve_report: 通報を解決済みにする + sensitive_account: アカウントのメディアを閲覧注意にマーク silence_account: アカウントをサイレンス suspend_account: アカウントを停止 unassigned_report: 通報の担当を解除 + unsensitive_account: アカウントのメディアの閲覧注意マークを解除 unsilence_account: アカウントのサイレンスを解除 unsuspend_account: アカウントの停止を解除 update_announcement: お知らせを更新 @@ -256,9 +261,11 @@ ja: reopen_report: "%{name} さんが通報 %{target} を再び開きました" reset_password_user: "%{name} さんが %{target} さんのパスワードをリセットしました" resolve_report: "%{name} さんが通報 %{target} を解決済みにしました" + sensitive_account: "%{name} さんが %{target} さんのメディアを閲覧注意にマークしました" silence_account: "%{name} さんが %{target} さんをサイレンスにしました" suspend_account: "%{name} さんが %{target} さんを停止しました" unassigned_report: "%{name} さんが通報 %{target} の担当を外しました" + unsensitive_account: "%{name} さんが %{target} さんのメディアの閲覧注意を解除しました" unsilence_account: "%{name} さんが %{target} さんのサイレンスを解除しました" unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました" update_announcement: "%{name} さんがお知らせ %{target} を更新しました" @@ -1271,6 +1278,7 @@ ja: warning: explanation: disable: アカウントが凍結されている間、データはそのまま残りますが、凍結が解除されるまでは何の操作もできません。 + sensitive: あなたのアップロードしたメディアファイルとリンク先のメディアは、閲覧注意として扱われます。 silence: あなたのアカウントは制限されていますが、あなたをフォローしているユーザーのみ、このサーバー上の投稿を見ることができます。そしてあなたは様々な公開リストから除外されるかもしれません。ただし、他のユーザーは手動であなたをフォローすることができます。 suspend: あなたのアカウントは停止されています。あなたの投稿とアップロードされたメディアファイルは、このサーバーとあなたのフォロワーが参加していたサーバーから完全に削除されました。 get_in_touch: このメールに返信することで %{instance} のスタッフと連絡を取ることができます。 @@ -1279,11 +1287,13 @@ ja: subject: disable: あなたのアカウント %{acct} は凍結されました none: "%{acct} に対する警告" + sensitive: あなたのアカウント %{acct} の投稿メディアは閲覧注意とマークされました silence: あなたのアカウント %{acct} はサイレンスにされました suspend: あなたのアカウント %{acct} は停止されました title: disable: アカウントが凍結されました none: 警告 + sensitive: あなたのメディアが閲覧注意とマークされました silence: アカウントがサイレンスにされました suspend: アカウントが停止されました welcome: diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index b69487953..46a4759a8 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -100,6 +100,7 @@ en: types: disable: Freeze none: Send a warning + sensitive: Sensitive silence: Limit suspend: Suspend warning_preset_id: Use a warning preset diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index bbc0b5fd7..00f469b87 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -91,6 +91,7 @@ ja: types: disable: ログインを無効化 none: 何もしない + sensitive: 閲覧注意 silence: サイレンス suspend: 停止しアカウントのデータを恒久的に削除する warning_preset_id: プリセット警告文を使用 diff --git a/config/routes.rb b/config/routes.rb index e0ef23723..54c76799c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -236,6 +236,7 @@ Rails.application.routes.draw do resources :accounts, only: [:index, :show, :destroy] do member do post :enable + post :unsensitive post :unsilence post :unsuspend post :redownload @@ -476,6 +477,7 @@ Rails.application.routes.draw do resources :accounts, only: [:index, :show, :destroy] do member do post :enable + post :unsensitive post :unsilence post :unsuspend post :approve diff --git a/db/migrate/20200614002136_add_sensitized_to_accounts.rb b/db/migrate/20200614002136_add_sensitized_to_accounts.rb new file mode 100644 index 000000000..bc2dfcb63 --- /dev/null +++ b/db/migrate/20200614002136_add_sensitized_to_accounts.rb @@ -0,0 +1,5 @@ +class AddSensitizedToAccounts < ActiveRecord::Migration[5.2] + def change + add_column :accounts, :sensitized_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 262e25b3b..5ff6b6300 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -189,6 +189,7 @@ ActiveRecord::Schema.define(version: 2020_10_08_220312) do t.integer "avatar_storage_schema_version" t.integer "header_storage_schema_version" t.string "devices_url" + t.datetime "sensitized_at" t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id" diff --git a/spec/controllers/api/v1/admin/accounts_controller_spec.rb b/spec/controllers/api/v1/admin/accounts_controller_spec.rb index f3f9946ba..89cadb222 100644 --- a/spec/controllers/api/v1/admin/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/admin/accounts_controller_spec.rb @@ -127,6 +127,24 @@ RSpec.describe Api::V1::Admin::AccountsController, type: :controller do end end + describe 'POST #unsensitive' do + before do + account.touch(:sensitized_at) + post :unsensitive, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'unsensitives account' do + expect(account.reload.sensitized?).to be false + end + end + describe 'POST #unsilence' do before do account.touch(:silenced_at) diff --git a/spec/models/admin/account_action_spec.rb b/spec/models/admin/account_action_spec.rb index 87fc28500..2366b9ca4 100644 --- a/spec/models/admin/account_action_spec.rb +++ b/spec/models/admin/account_action_spec.rb @@ -115,16 +115,16 @@ RSpec.describe Admin::AccountAction, type: :model do context 'account.local?' do let(:account) { Fabricate(:account, domain: nil) } - it 'returns ["none", "disable", "silence", "suspend"]' do - expect(subject).to eq %w(none disable silence suspend) + it 'returns ["none", "disable", "sensitive", "silence", "suspend"]' do + expect(subject).to eq %w(none disable sensitive silence suspend) end end context '!account.local?' do let(:account) { Fabricate(:account, domain: 'hoge.com') } - it 'returns ["silence", "suspend"]' do - expect(subject).to eq %w(silence suspend) + it 'returns ["sensitive", "silence", "suspend"]' do + expect(subject).to eq %w(sensitive silence suspend) end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index 6648b0888..d27e9d5b0 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -8,7 +8,7 @@ RSpec.describe AccountPolicy do let(:admin) { Fabricate(:user, admin: true).account } let(:john) { Fabricate(:user).account } - permissions :index?, :show?, :unsuspend?, :unsilence?, :remove_avatar?, :remove_header? do + permissions :index?, :show?, :unsuspend?, :unsensitive?, :unsilence?, :remove_avatar?, :remove_header? do context 'staff' do it 'permits' do expect(subject).to permit(admin) From b29defb851f091d9b4419ea149b44dac7944bd06 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 4 Nov 2020 21:15:22 +0100 Subject: [PATCH 157/422] Change order of announcements in admin page to sort them newest-first (#15091) * Change order of announcements in admin page to sort show newly-created first Fixes #15090 * Use reverse-chronological rather than creation date only --- app/controllers/admin/announcements_controller.rb | 2 +- app/models/announcement.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 494fd13d0..351b9a991 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -71,7 +71,7 @@ class Admin::AnnouncementsController < Admin::BaseController private def set_announcements - @announcements = AnnouncementFilter.new(filter_params).results.page(params[:page]) + @announcements = AnnouncementFilter.new(filter_params).results.reverse_chronological.page(params[:page]) end def set_announcement diff --git a/app/models/announcement.rb b/app/models/announcement.rb index c493604c2..f8183aabc 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -22,6 +22,7 @@ class Announcement < ApplicationRecord scope :published, -> { where(published: true) } scope :without_muted, ->(account) { joins("LEFT OUTER JOIN announcement_mutes ON announcement_mutes.announcement_id = announcements.id AND announcement_mutes.account_id = #{account.id}").where('announcement_mutes.id IS NULL') } scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) ASC')) } + scope :reverse_chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) DESC')) } has_many :announcement_mutes, dependent: :destroy has_many :announcement_reactions, dependent: :destroy From 68d4b2b83e124719f8473489ee8c1743ca848dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Chauvel?= Date: Wed, 4 Nov 2020 21:15:45 +0100 Subject: [PATCH 158/422] =?UTF-8?q?Display=20=E2=80=9CShow=20newer?= =?UTF-8?q?=E2=80=9D=20and=20=E2=80=9CShow=20older=E2=80=9D=20instead=20of?= =?UTF-8?q?=20=E2=80=9CShow=20more=E2=80=9D=20in=20public=20pages=20(#1505?= =?UTF-8?q?2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/statuses_helper.rb | 8 ++++++-- app/views/accounts/show.html.haml | 4 ++-- app/views/statuses/_status.html.haml | 8 ++++---- config/locales/en.yml | 2 ++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index adb7918c5..daed9048f 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -4,8 +4,12 @@ module StatusesHelper EMBEDDED_CONTROLLER = 'statuses' EMBEDDED_ACTION = 'embed' - def link_to_more(url) - link_to t('statuses.show_more'), url, class: 'load-more load-gap' + def link_to_newer(url) + link_to t('statuses.show_newer'), url, class: 'load-more load-gap' + end + + def link_to_older(url) + link_to t('statuses.show_older'), url, class: 'load-more load-gap' end def nothing_here(extra_classes = '') diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index c9688ea88..1a81b96f6 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -39,12 +39,12 @@ = render partial: 'statuses/status', collection: @pinned_statuses, as: :status, locals: { pinned: true } - if @newer_url - .entry= link_to_more @newer_url + .entry= link_to_newer @newer_url = render partial: 'statuses/status', collection: @statuses, as: :status - if @older_url - .entry= link_to_more @older_url + .entry= link_to_older @older_url .column-1 - if @account.memorial? diff --git a/app/views/statuses/_status.html.haml b/app/views/statuses/_status.html.haml index 0e3652503..650f9b679 100644 --- a/app/views/statuses/_status.html.haml +++ b/app/views/statuses/_status.html.haml @@ -17,7 +17,7 @@ - if status.reply? && include_threads - if @next_ancestor .entry{ class: entry_classes } - = link_to_more ActivityPub::TagManager.instance.url_for(@next_ancestor) + = link_to_older ActivityPub::TagManager.instance.url_for(@next_ancestor) = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }, autoplay: autoplay @@ -44,16 +44,16 @@ - if include_threads - if @since_descendant_thread_id .entry{ class: entry_classes } - = link_to_more short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1) + = link_to_newer short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1) - @descendant_threads.each do |thread| = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }, autoplay: autoplay - if thread[:next_status] .entry{ class: entry_classes } - = link_to_more ActivityPub::TagManager.instance.url_for(thread[:next_status]) + = link_to_newer ActivityPub::TagManager.instance.url_for(thread[:next_status]) - if @next_descendant_thread .entry{ class: entry_classes } - = link_to_more short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1) + = link_to_newer short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1) - if include_threads && !embedded_view? && !user_signed_in? .entry{ class: entry_classes } diff --git a/config/locales/en.yml b/config/locales/en.yml index c962bc532..047ba36ac 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1210,6 +1210,8 @@ en: other: "%{count} votes" vote: Vote show_more: Show more + show_newer: Show newer + show_older: Show older show_thread: Show thread sign_in_to_participate: Sign in to participate in the conversation title: '%{name}: "%{quote}"' From 9b1f2a4b61660f9a8be62f6296d97a856e376059 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 6 Nov 2020 11:56:31 +0100 Subject: [PATCH 159/422] Add subresource integrity for JS and CSS assets (#15096) Fix #2744 --- app/views/about/more.html.haml | 2 +- app/views/admin/action_logs/index.html.haml | 2 +- app/views/admin/custom_emojis/index.html.haml | 2 +- app/views/admin/domain_allows/new.html.haml | 2 +- app/views/admin/domain_blocks/edit.html.haml | 2 +- app/views/admin/domain_blocks/new.html.haml | 2 +- app/views/admin/ip_blocks/index.html.haml | 2 +- .../admin/pending_accounts/index.html.haml | 2 +- app/views/admin/reports/show.html.haml | 2 +- app/views/admin/settings/edit.html.haml | 2 +- app/views/admin/statuses/index.html.haml | 2 +- app/views/admin/tags/index.html.haml | 2 +- app/views/auth/sessions/two_factor.html.haml | 2 +- app/views/home/index.html.haml | 10 +++++----- app/views/layouts/admin.html.haml | 2 +- app/views/layouts/application.html.haml | 8 ++++---- app/views/layouts/auth.html.haml | 2 +- app/views/layouts/embedded.html.haml | 4 ++-- app/views/layouts/error.html.haml | 8 ++++---- app/views/layouts/modal.html.haml | 2 +- app/views/layouts/public.html.haml | 2 +- app/views/media/player.html.haml | 2 +- app/views/public_timelines/show.html.haml | 2 +- app/views/relationships/show.html.haml | 2 +- .../webauthn_credentials/new.html.haml | 2 +- app/views/shares/show.html.haml | 2 +- app/views/tags/show.html.haml | 2 +- config/application.rb | 2 ++ config/webpack/shared.js | 3 ++- lib/webpacker/helper_extensions.rb | 20 +++++++++++++++++++ lib/webpacker/manifest_extensions.rb | 17 ++++++++++++++++ 31 files changed, 79 insertions(+), 39 deletions(-) create mode 100644 lib/webpacker/helper_extensions.rb create mode 100644 lib/webpacker/manifest_extensions.rb diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index 4152a3601..c2168e1f5 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -2,7 +2,7 @@ = site_hostname - content_for :header_tags do - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' = render partial: 'shared/og' .grid-4 diff --git a/app/views/admin/action_logs/index.html.haml b/app/views/admin/action_logs/index.html.haml index 99f756762..e7d9054d9 100644 --- a/app/views/admin/action_logs/index.html.haml +++ b/app/views/admin/action_logs/index.html.haml @@ -2,7 +2,7 @@ = t('admin.action_logs.title') - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' = form_tag admin_action_logs_url, method: 'GET', class: 'simple_form' do = hidden_field_tag :target_account_id, params[:target_account_id] if params[:target_account_id].present? diff --git a/app/views/admin/custom_emojis/index.html.haml b/app/views/admin/custom_emojis/index.html.haml index 1cbc36f97..bfec0407e 100644 --- a/app/views/admin/custom_emojis/index.html.haml +++ b/app/views/admin/custom_emojis/index.html.haml @@ -2,7 +2,7 @@ = t('admin.custom_emojis.title') - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - if can?(:create, :custom_emoji) - content_for :heading_actions do diff --git a/app/views/admin/domain_allows/new.html.haml b/app/views/admin/domain_allows/new.html.haml index 52599857a..249a961ce 100644 --- a/app/views/admin/domain_allows/new.html.haml +++ b/app/views/admin/domain_allows/new.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('admin.domain_allows.add_new') diff --git a/app/views/admin/domain_blocks/edit.html.haml b/app/views/admin/domain_blocks/edit.html.haml index 29e47ef3b..d5868070a 100644 --- a/app/views/admin/domain_blocks/edit.html.haml +++ b/app/views/admin/domain_blocks/edit.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('admin.domain_blocks.edit') diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml index ed1581936..f503f9b77 100644 --- a/app/views/admin/domain_blocks/new.html.haml +++ b/app/views/admin/domain_blocks/new.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('.title') diff --git a/app/views/admin/ip_blocks/index.html.haml b/app/views/admin/ip_blocks/index.html.haml index a282a4cfe..d5b983de9 100644 --- a/app/views/admin/ip_blocks/index.html.haml +++ b/app/views/admin/ip_blocks/index.html.haml @@ -2,7 +2,7 @@ = t('admin.ip_blocks.title') - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - if can?(:create, :ip_block) - content_for :heading_actions do diff --git a/app/views/admin/pending_accounts/index.html.haml b/app/views/admin/pending_accounts/index.html.haml index 79ae4a320..8384a1c9f 100644 --- a/app/views/admin/pending_accounts/index.html.haml +++ b/app/views/admin/pending_accounts/index.html.haml @@ -2,7 +2,7 @@ = t('admin.pending_accounts.title', count: User.pending.count) - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' = form_for(@form, url: batch_admin_pending_accounts_path) do |f| = hidden_field_tag :page, params[:page] || 1 diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 0d563eea7..2681419ca 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('admin.reports.report', id: @report.id) diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index f37775aa9..9e28766b1 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('admin.settings.title') diff --git a/app/views/admin/statuses/index.html.haml b/app/views/admin/statuses/index.html.haml index f1169a2fd..c39ba9071 100644 --- a/app/views/admin/statuses/index.html.haml +++ b/app/views/admin/statuses/index.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do = t('admin.statuses.title') diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index f888a311d..d7719d45d 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -2,7 +2,7 @@ = t('admin.tags.title') - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' .filters .filter-subset diff --git a/app/views/auth/sessions/two_factor.html.haml b/app/views/auth/sessions/two_factor.html.haml index f2f6fe19d..b897a0422 100644 --- a/app/views/auth/sessions/two_factor.html.haml +++ b/app/views/auth/sessions/two_factor.html.haml @@ -1,7 +1,7 @@ - content_for :page_title do = t('auth.login') -=javascript_pack_tag 'two_factor_authentication', integrity: true, crossorigin: 'anonymous' +=javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous' - if @webauthn_enabled = render partial: 'auth/sessions/two_factor/webauthn_form', locals: { hidden: @scheme_type != 'webauthn' } diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 30c7aab19..94cc782b2 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -1,12 +1,12 @@ - content_for :header_tags do - = preload_link_tag asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous' - = preload_link_tag asset_pack_path('features/compose.js'), crossorigin: 'anonymous' - = preload_link_tag asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous' - = preload_link_tag asset_pack_path('features/notifications.js'), crossorigin: 'anonymous' + = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} = render_initial_state - = javascript_pack_tag 'application', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'application', crossorigin: 'anonymous' .app-holder#mastodon{ data: { props: Oj.dump(default_props) } } %noscript diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index b1a2d0617..62716ab1e 100644 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -1,6 +1,6 @@ - content_for :header_tags do = render_initial_state - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' - content_for :content do .admin-wrapper diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 1f10f40c0..9501207e0 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -21,10 +21,10 @@ %title= content_for?(:page_title) ? safe_join([yield(:page_title).chomp.html_safe, title], ' - ') : title - = stylesheet_pack_tag 'common', media: 'all' - = stylesheet_pack_tag current_theme, media: 'all' - = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' - = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' + = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' + = stylesheet_pack_tag current_theme, media: 'all', crossorigin: 'anonymous' + = javascript_pack_tag 'common', crossorigin: 'anonymous' + = javascript_pack_tag "locale_#{I18n.locale}", crossorigin: 'anonymous' = csrf_meta_tags %meta{ name: 'style-nonce', content: request.content_security_policy_nonce } diff --git a/app/views/layouts/auth.html.haml b/app/views/layouts/auth.html.haml index 585e24655..0ea3bbe3b 100644 --- a/app/views/layouts/auth.html.haml +++ b/app/views/layouts/auth.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' - content_for :content do .container-alt diff --git a/app/views/layouts/embedded.html.haml b/app/views/layouts/embedded.html.haml index 37051e70c..e4311d342 100644 --- a/app/views/layouts/embedded.html.haml +++ b/app/views/layouts/embedded.html.haml @@ -11,8 +11,8 @@ - if storage_host? %link{ rel: 'dns-prefetch', href: storage_host }/ - = stylesheet_pack_tag 'common', media: 'all' - = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all' + = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' + = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all', crossorigin: 'anonymous' = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' = render_initial_state diff --git a/app/views/layouts/error.html.haml b/app/views/layouts/error.html.haml index 25c85abf9..852a0c69b 100644 --- a/app/views/layouts/error.html.haml +++ b/app/views/layouts/error.html.haml @@ -5,10 +5,10 @@ %meta{ charset: 'utf-8' }/ %title= safe_join([yield(:page_title), Setting.default_settings['site_title']], ' - ') %meta{ content: 'width=device-width,initial-scale=1', name: 'viewport' }/ - = stylesheet_pack_tag 'common', media: 'all' - = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all' - = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' - = javascript_pack_tag 'error', integrity: true, crossorigin: 'anonymous' + = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' + = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all', crossorigin: 'anonymous' + = javascript_pack_tag 'common', crossorigin: 'anonymous' + = javascript_pack_tag 'error', crossorigin: 'anonymous' %body.error .dialog .dialog__illustration diff --git a/app/views/layouts/modal.html.haml b/app/views/layouts/modal.html.haml index 2ef49e413..e74e2c0e3 100644 --- a/app/views/layouts/modal.html.haml +++ b/app/views/layouts/modal.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' - content_for :content do - if user_signed_in? && !@hide_header diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index a2c4e5deb..e63cf0848 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -1,6 +1,6 @@ - content_for :header_tags do = render_initial_state - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' - content_for :content do .public-layout diff --git a/app/views/media/player.html.haml b/app/views/media/player.html.haml index ae47750e9..92428ca94 100644 --- a/app/views/media/player.html.haml +++ b/app/views/media/player.html.haml @@ -1,6 +1,6 @@ - content_for :header_tags do = render_initial_state - = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'public', crossorigin: 'anonymous' - if @media_attachment.video? = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description do diff --git a/app/views/public_timelines/show.html.haml b/app/views/public_timelines/show.html.haml index 5e536a235..3325be5bf 100644 --- a/app/views/public_timelines/show.html.haml +++ b/app/views/public_timelines/show.html.haml @@ -3,7 +3,7 @@ - content_for :header_tags do %meta{ name: 'robots', content: 'noindex' }/ - = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'about', crossorigin: 'anonymous' .page-header %h1= t('about.see_whats_happening') diff --git a/app/views/relationships/show.html.haml b/app/views/relationships/show.html.haml index 099bb3202..4b1e4fd63 100644 --- a/app/views/relationships/show.html.haml +++ b/app/views/relationships/show.html.haml @@ -2,7 +2,7 @@ = t('settings.relationships') - content_for :header_tags do - = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' .filters .filter-subset diff --git a/app/views/settings/two_factor_authentication/webauthn_credentials/new.html.haml b/app/views/settings/two_factor_authentication/webauthn_credentials/new.html.haml index 0b23bb689..1148d5ed7 100644 --- a/app/views/settings/two_factor_authentication/webauthn_credentials/new.html.haml +++ b/app/views/settings/two_factor_authentication/webauthn_credentials/new.html.haml @@ -13,4 +13,4 @@ .actions = f.button :button, t('webauthn_credentials.add'), class: 'js-webauthn', type: :submit -= javascript_pack_tag 'two_factor_authentication', integrity: true, crossorigin: 'anonymous' += javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous' diff --git a/app/views/shares/show.html.haml b/app/views/shares/show.html.haml index f2f5479a7..1c0bbf676 100644 --- a/app/views/shares/show.html.haml +++ b/app/views/shares/show.html.haml @@ -1,5 +1,5 @@ - content_for :header_tags do = render_initial_state - = javascript_pack_tag 'share', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'share', crossorigin: 'anonymous' #mastodon-compose{ data: { props: Oj.dump(default_props) } } diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml index 19dadd36a..beeeb56f2 100644 --- a/app/views/tags/show.html.haml +++ b/app/views/tags/show.html.haml @@ -5,7 +5,7 @@ %meta{ name: 'robots', content: 'noindex' }/ %link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/ - = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' + = javascript_pack_tag 'about', crossorigin: 'anonymous' = render 'og' .page-header diff --git a/config/application.rb b/config/application.rb index ad6cf82d7..bf467d6c3 100644 --- a/config/application.rb +++ b/config/application.rb @@ -22,6 +22,8 @@ require_relative '../lib/mastodon/version' require_relative '../lib/devise/two_factor_ldap_authenticatable' require_relative '../lib/devise/two_factor_pam_authenticatable' require_relative '../lib/chewy/strategy/custom_sidekiq' +require_relative '../lib/webpacker/manifest_extensions' +require_relative '../lib/webpacker/helper_extensions' Dotenv::Railtie.load diff --git a/config/webpack/shared.js b/config/webpack/shared.js index 667652809..05828aebe 100644 --- a/config/webpack/shared.js +++ b/config/webpack/shared.js @@ -79,7 +79,8 @@ module.exports = { chunkFilename: 'css/[name]-[contenthash:8].chunk.css', }), new AssetsManifestPlugin({ - integrity: false, + integrity: true, + integrityHashes: ['sha256'], entrypoints: true, writeToDisk: true, publicPath: true, diff --git a/lib/webpacker/helper_extensions.rb b/lib/webpacker/helper_extensions.rb new file mode 100644 index 000000000..8f46d7631 --- /dev/null +++ b/lib/webpacker/helper_extensions.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Webpacker::HelperExtensions + def javascript_pack_tag(name, **options) + src, integrity = current_webpacker_instance.manifest.lookup!(name, type: :javascript, with_integrity: true) + javascript_include_tag(src, options.merge(integrity: integrity)) + end + + def stylesheet_pack_tag(name, **options) + src, integrity = current_webpacker_instance.manifest.lookup!(name, type: :stylesheet, with_integrity: true) + stylesheet_link_tag(src, options.merge(integrity: integrity)) + end + + def preload_pack_asset(name, **options) + src, integrity = current_webpacker_instance.manifest.lookup!(name, with_integrity: true) + preload_link_tag(src, options.merge(integrity: integrity)) + end +end + +Webpacker::Helper.prepend(Webpacker::HelperExtensions) diff --git a/lib/webpacker/manifest_extensions.rb b/lib/webpacker/manifest_extensions.rb new file mode 100644 index 000000000..789eb81cc --- /dev/null +++ b/lib/webpacker/manifest_extensions.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Webpacker::ManifestExtensions + def lookup(name, pack_type = {}) + asset = super + + if pack_type[:with_integrity] && asset.respond_to?(:dig) + [asset.dig('src'), asset.dig('integrity')] + elsif asset.respond_to?(:dig) + asset.dig('src') + else + asset + end + end +end + +Webpacker::Manifest.prepend(Webpacker::ManifestExtensions) From acc1c038610a82d8470acde6753716da0dc4b1fa Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 6 Nov 2020 11:57:14 +0100 Subject: [PATCH 160/422] Fix cookies not having a SameSite attribute (#15098) --- config/initializers/devise.rb | 2 ++ config/initializers/makara.rb | 2 ++ config/initializers/session_store.rb | 6 +++++- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 config/initializers/makara.rb diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 59e69ad37..ef612e177 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -10,6 +10,7 @@ Warden::Manager.after_set_user except: :fetch do |user, warden| expires: 1.year.from_now, httponly: true, secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'), + same_site: :lax, } end @@ -20,6 +21,7 @@ Warden::Manager.after_fetch do |user, warden| expires: 1.year.from_now, httponly: true, secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'), + same_site: :lax, } else warden.logout diff --git a/config/initializers/makara.rb b/config/initializers/makara.rb new file mode 100644 index 000000000..dc88fa63c --- /dev/null +++ b/config/initializers/makara.rb @@ -0,0 +1,2 @@ +Makara::Cookie::DEFAULT_OPTIONS[:same_site] = :lax +Makara::Cookie::DEFAULT_OPTIONS[:secure] = Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index 3dc0edd6f..e5d1be4c6 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,3 +1,7 @@ # Be sure to restart your server when you modify this file. -Rails.application.config.session_store :cookie_store, key: '_mastodon_session', secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true') +Rails.application.config.session_store :cookie_store, { + key: '_mastodon_session', + secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'), + same_site: :lax, +} From f84239ecabf5d92d0275894ee357e58af0a4e711 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 7 Nov 2020 13:16:00 +0100 Subject: [PATCH 161/422] Fix suspension/unsuspension not working because of FeedManager change (#15099) --- app/services/suspend_account_service.rb | 2 +- app/services/unsuspend_account_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 5a079c3ac..ea96767fa 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -18,7 +18,7 @@ class SuspendAccountService < BaseService def unmerge_from_home_timelines! @account.followers_for_local_distribution.find_each do |follower| - FeedManager.instance.unmerge_from_timeline(@account, follower) + FeedManager.instance.unmerge_from_home(@account, follower) end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index 3e731ddd9..fe49e3471 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -18,7 +18,7 @@ class UnsuspendAccountService < BaseService def merge_into_home_timelines! @account.followers_for_local_distribution.find_each do |follower| - FeedManager.instance.merge_into_timeline(@account, follower) + FeedManager.instance.merge_into_home(@account, follower) end end From ee8cf246cfe8e05914ad7dcf81596f8535b3e161 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 7 Nov 2020 13:16:54 +0100 Subject: [PATCH 162/422] Fix crashes in SuspendAccountService/UnsuspendAccountService (#15100) * Fix crashes in SuspendAccountService/UnsuspendAccountService * Catch filesystem errors --- app/services/suspend_account_service.rb | 8 ++++++-- app/services/unsuspend_account_service.rb | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index ea96767fa..f08c41e17 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -39,11 +39,15 @@ class SuspendAccountService < BaseService styles.each do |style| case Paperclip::Attachment.default_options[:storage] when :s3 - attachment.s3_object(style).acl.put(:private) + attachment.s3_object(style).acl.put(acl: 'private') when :fog # Not supported when :filesystem - FileUtils.chmod(0o600 & ~File.umask, attachment.path(style)) + begin + FileUtils.chmod(0o600 & ~File.umask, attachment.path(style)) unless attachment.path(style).nil? + rescue Errno::ENOENT + Rails.logger.warn "Tried to change permission on non-existent file #{attachment.path(style)}" + end end end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index fe49e3471..91dbc9c18 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -39,11 +39,15 @@ class UnsuspendAccountService < BaseService styles.each do |style| case Paperclip::Attachment.default_options[:storage] when :s3 - attachment.s3_object(style).acl.put(Paperclip::Attachment.default_options[:s3_permissions]) + attachment.s3_object(style).acl.put(acl: Paperclip::Attachment.default_options[:s3_permissions]) when :fog # Not supported when :filesystem - FileUtils.chmod(0o666 & ~File.umask, attachment.path(style)) + begin + FileUtils.chmod(0o666 & ~File.umask, attachment.path(style)) unless attachment.path(style).nil? + rescue Errno::ENOENT + Rails.logger.warn "Tried to change permission on non-existent file #{attachment.path(style)}" + end end end end From 3134691948aeacb16b7386ed77bbea4581beec40 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 8 Nov 2020 00:28:39 +0100 Subject: [PATCH 163/422] Add support for reversible suspensions through ActivityPub (#14989) --- app/controllers/accounts_controller.rb | 4 + .../activitypub/base_controller.rb | 4 + .../activitypub/inboxes_controller.rb | 4 + .../activitypub/replies_controller.rb | 2 +- .../concerns/account_owned_concern.rb | 20 ++- .../follower_accounts_controller.rb | 12 +- .../following_accounts_controller.rb | 12 +- .../settings/deletes_controller.rb | 2 +- .../well_known/webfinger_controller.rb | 2 +- app/javascript/styles/mastodon/widgets.scss | 4 + app/lib/activitypub/adapter.rb | 1 + app/lib/webfinger.rb | 4 + app/models/account.rb | 16 +- app/models/admin/account_action.rb | 2 +- app/policies/account_policy.rb | 4 +- .../activitypub/actor_serializer.rb | 33 ++-- .../activitypub/process_account_service.rb | 55 ++++-- .../activitypub/process_collection_service.rb | 10 +- app/services/block_domain_service.rb | 5 +- app/services/delete_account_service.rb | 40 +++-- app/services/resolve_account_service.rb | 27 ++- app/services/suspend_account_service.rb | 29 +++ app/services/unblock_domain_service.rb | 2 +- app/services/unsuspend_account_service.rb | 20 +++ app/workers/account_deletion_worker.rb | 4 +- ...33919_add_suspension_origin_to_accounts.rb | 5 + ...17234926_fill_account_suspension_origin.rb | 11 ++ db/schema.rb | 3 +- lib/mastodon/accounts_cli.rb | 2 +- .../account_follow_controller_spec.rb | 48 ++++- .../account_unfollow_controller_spec.rb | 48 ++++- spec/controllers/accounts_controller_spec.rb | 68 ++++++- .../collections_controller_spec.rb | 32 +++- ...lowers_synchronizations_controller_spec.rb | 31 +++- .../activitypub/inboxes_controller_spec.rb | 27 +++ .../activitypub/outboxes_controller_spec.rb | 58 +++++- .../activitypub/replies_controller_spec.rb | 39 +++- .../api/v1/admin/accounts_controller_spec.rb | 2 +- .../follower_accounts_controller_spec.rb | 63 +++++++ .../following_accounts_controller_spec.rb | 63 +++++++ .../remote_follow_controller_spec.rb | 33 +++- spec/controllers/statuses_controller_spec.rb | 38 +++- .../well_known/webfinger_controller_spec.rb | 169 +++++++++++------- spec/policies/account_policy_spec.rb | 35 +++- .../process_account_service_spec.rb | 80 +++++++++ .../process_collection_service_spec.rb | 43 ++++- spec/services/resolve_account_service_spec.rb | 29 ++- 47 files changed, 1045 insertions(+), 200 deletions(-) create mode 100644 db/migrate/20201017233919_add_suspension_origin_to_accounts.rb create mode 100644 db/post_migrate/20201017234926_fill_account_suspension_origin.rb diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 6d711afd0..ccb5ef8e8 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -102,6 +102,10 @@ class AccountsController < ApplicationController params[:username] end + def skip_temporary_suspension_response? + request.format == :json + end + def rss_url if tag_requested? short_account_tag_url(@account, params[:tag], format: 'rss') diff --git a/app/controllers/activitypub/base_controller.rb b/app/controllers/activitypub/base_controller.rb index 0c2591e97..4cbc3ab8f 100644 --- a/app/controllers/activitypub/base_controller.rb +++ b/app/controllers/activitypub/base_controller.rb @@ -8,4 +8,8 @@ class ActivityPub::BaseController < Api::BaseController def set_cache_headers response.headers['Vary'] = 'Signature' if authorized_fetch_mode? end + + def skip_temporary_suspension_response? + false + end end diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index fdb60d590..d3044f180 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -33,6 +33,10 @@ class ActivityPub::InboxesController < ActivityPub::BaseController params[:account_username].present? end + def skip_temporary_suspension_response? + true + end + def body return @body if defined?(@body) diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb index 43bf4e657..fde6c861f 100644 --- a/app/controllers/activitypub/replies_controller.rb +++ b/app/controllers/activitypub/replies_controller.rb @@ -31,7 +31,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController end def set_replies - @replies = only_other_accounts? ? Status.where.not(account_id: @account.id) : @account.statuses + @replies = only_other_accounts? ? Status.where.not(account_id: @account.id).joins(:account).merge(Account.without_suspended) : @account.statuses @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) end diff --git a/app/controllers/concerns/account_owned_concern.rb b/app/controllers/concerns/account_owned_concern.rb index 460f71f65..62e379846 100644 --- a/app/controllers/concerns/account_owned_concern.rb +++ b/app/controllers/concerns/account_owned_concern.rb @@ -29,6 +29,24 @@ module AccountOwnedConcern end def check_account_suspension - expires_in(3.minutes, public: true) && gone if @account.suspended? + if @account.suspended_permanently? + permanent_suspension_response + elsif @account.suspended? && !skip_temporary_suspension_response? + temporary_suspension_response + end + end + + def skip_temporary_suspension_response? + false + end + + def permanent_suspension_response + expires_in(3.minutes, public: true) + gone + end + + def temporary_suspension_response + expires_in(3.minutes, public: true) + forbidden end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ab0749963..ff4df2adf 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -52,6 +52,14 @@ class FollowerAccountsController < ApplicationController account_followers_url(@account, page: page) unless page.nil? end + def next_page_url + page_url(follows.next_page) if follows.respond_to?(:next_page) + end + + def prev_page_url + page_url(follows.prev_page) if follows.respond_to?(:prev_page) + end + def collection_presenter if page_requested? ActivityPub::CollectionPresenter.new( @@ -60,8 +68,8 @@ class FollowerAccountsController < ApplicationController size: @account.followers_count, items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.account) }, part_of: account_followers_url(@account), - next: page_url(follows.next_page), - prev: page_url(follows.prev_page) + next: next_page_url, + prev: prev_page_url ) else ActivityPub::CollectionPresenter.new( diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index 918bdac0a..6bb95c454 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -52,6 +52,14 @@ class FollowingAccountsController < ApplicationController account_following_index_url(@account, page: page) unless page.nil? end + def next_page_url + page_url(follows.next_page) if follows.respond_to?(:next_page) + end + + def prev_page_url + page_url(follows.prev_page) if follows.respond_to?(:prev_page) + end + def collection_presenter if page_requested? ActivityPub::CollectionPresenter.new( @@ -60,8 +68,8 @@ class FollowingAccountsController < ApplicationController size: @account.following_count, items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.target_account) }, part_of: account_following_index_url(@account), - next: page_url(follows.next_page), - prev: page_url(follows.prev_page) + next: next_page_url, + prev: prev_page_url ) else ActivityPub::CollectionPresenter.new( diff --git a/app/controllers/settings/deletes_controller.rb b/app/controllers/settings/deletes_controller.rb index f96c83b80..7b8f8d207 100644 --- a/app/controllers/settings/deletes_controller.rb +++ b/app/controllers/settings/deletes_controller.rb @@ -42,7 +42,7 @@ class Settings::DeletesController < Settings::BaseController end def destroy_account! - current_account.suspend! + current_account.suspend!(origin: :local) AccountDeletionWorker.perform_async(current_user.account_id) sign_out end diff --git a/app/controllers/well_known/webfinger_controller.rb b/app/controllers/well_known/webfinger_controller.rb index 9de9db6ba..0227f722a 100644 --- a/app/controllers/well_known/webfinger_controller.rb +++ b/app/controllers/well_known/webfinger_controller.rb @@ -35,7 +35,7 @@ module WellKnown end def check_account_suspension - expires_in(3.minutes, public: true) && gone if @account.suspended? + expires_in(3.minutes, public: true) && gone if @account.suspended_permanently? end def bad_request diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index 5b97d1ec4..47e02d41d 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -2,6 +2,10 @@ margin-bottom: 10px; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + &:last-child { + margin-bottom: 0; + } + &__img { width: 100%; position: relative; diff --git a/app/lib/activitypub/adapter.rb b/app/lib/activitypub/adapter.rb index 9a786c9a4..2d6b87659 100644 --- a/app/lib/activitypub/adapter.rb +++ b/app/lib/activitypub/adapter.rb @@ -23,6 +23,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base discoverable: { 'toot' => 'http://joinmastodon.org/ns#', 'discoverable' => 'toot:discoverable' }, voters_count: { 'toot' => 'http://joinmastodon.org/ns#', 'votersCount' => 'toot:votersCount' }, olm: { 'toot' => 'http://joinmastodon.org/ns#', 'Device' => 'toot:Device', 'Ed25519Signature' => 'toot:Ed25519Signature', 'Ed25519Key' => 'toot:Ed25519Key', 'Curve25519Key' => 'toot:Curve25519Key', 'EncryptedMessage' => 'toot:EncryptedMessage', 'publicKeyBase64' => 'toot:publicKeyBase64', 'deviceId' => 'toot:deviceId', 'claim' => { '@type' => '@id', '@id' => 'toot:claim' }, 'fingerprintKey' => { '@type' => '@id', '@id' => 'toot:fingerprintKey' }, 'identityKey' => { '@type' => '@id', '@id' => 'toot:identityKey' }, 'devices' => { '@type' => '@id', '@id' => 'toot:devices' }, 'messageFranking' => 'toot:messageFranking', 'messageType' => 'toot:messageType', 'cipherText' => 'toot:cipherText' }, + suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' }, }.freeze def self.default_key_transform diff --git a/app/lib/webfinger.rb b/app/lib/webfinger.rb index b2374c494..c7aa43bb3 100644 --- a/app/lib/webfinger.rb +++ b/app/lib/webfinger.rb @@ -2,6 +2,8 @@ class Webfinger class Error < StandardError; end + class GoneError < Error; end + class RedirectError < StandardError; end class Response def initialize(body) @@ -47,6 +49,8 @@ class Webfinger res.body_with_limit elsif res.code == 404 && use_fallback body_from_host_meta + elsif res.code == 410 + raise Webfinger::GoneError, "#{@uri} is gone from the server" else raise Webfinger::Error, "Request for #{@uri} returned HTTP #{res.code}" end diff --git a/app/models/account.rb b/app/models/account.rb index d2112a13d..bc9bcc72d 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -51,6 +51,7 @@ # header_storage_schema_version :integer # devices_url :string # sensitized_at :datetime +# suspension_origin :integer # class Account < ApplicationRecord @@ -73,6 +74,7 @@ class Account < ApplicationRecord }.freeze enum protocol: [:ostatus, :activitypub] + enum suspension_origin: [:local, :remote], _prefix: true validates :username, presence: true validates_with UniqueUsernameValidator, if: -> { will_save_change_to_username? } @@ -222,17 +224,25 @@ class Account < ApplicationRecord suspended_at.present? end - def suspend!(date = Time.now.utc) + def suspended_permanently? + suspended? && deletion_request.nil? + end + + def suspended_temporarily? + suspended? && deletion_request.present? + end + + def suspend!(date: Time.now.utc, origin: :local) transaction do create_deletion_request! - update!(suspended_at: date) + update!(suspended_at: date, suspension_origin: origin) end end def unsuspend! transaction do deletion_request&.destroy! - update!(suspended_at: nil) + update!(suspended_at: nil, suspension_origin: nil) end end diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index 11ce737f3..bf222391f 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -127,7 +127,7 @@ class Admin::AccountAction def handle_suspend! authorize(target_account, :suspend?) log_action(:suspend, target_account) - target_account.suspend! + target_account.suspend!(origin: :local) end def text_for_warning diff --git a/app/policies/account_policy.rb b/app/policies/account_policy.rb index 679119075..262ada42e 100644 --- a/app/policies/account_policy.rb +++ b/app/policies/account_policy.rb @@ -18,11 +18,11 @@ class AccountPolicy < ApplicationPolicy end def destroy? - record.suspended? && record.deletion_request.present? && admin? + record.suspended_temporarily? && admin? end def unsuspend? - staff? + staff? && record.suspension_origin_local? end def sensitive? diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index 5d2741b17..759ef30f9 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -7,7 +7,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer context_extensions :manually_approves_followers, :featured, :also_known_as, :moved_to, :property_value, :identity_proof, - :discoverable, :olm + :discoverable, :olm, :suspended attributes :id, :type, :following, :followers, :inbox, :outbox, :featured, :featured_tags, @@ -23,6 +23,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer attribute :devices, unless: :instance_actor? attribute :moved_to, if: :moved? attribute :also_known_as, if: :also_known_as? + attribute :suspended, if: :suspended? class EndpointsSerializer < ActivityPub::Serializer include RoutingHelper @@ -39,7 +40,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer has_one :icon, serializer: ActivityPub::ImageSerializer, if: :avatar_exists? has_one :image, serializer: ActivityPub::ImageSerializer, if: :header_exists? - delegate :moved?, :instance_actor?, to: :object + delegate :suspended?, :instance_actor?, to: :object def id object.instance_actor? ? instance_actor_url : account_url(object) @@ -93,12 +94,16 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer object.username end + def discoverable + object.suspended? ? false : (object.discoverable || false) + end + def name - object.display_name + object.suspended? ? '' : object.display_name end def summary - Formatter.instance.simplified_format(object) + object.suspended? ? '' : Formatter.instance.simplified_format(object) end def icon @@ -113,36 +118,44 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer object end + def suspended + object.suspended? + end + def url object.instance_actor? ? about_more_url(instance_actor: true) : short_account_url(object) end def avatar_exists? - object.avatar? + !object.suspended? && object.avatar? end def header_exists? - object.header? + !object.suspended? && object.header? end def manually_approves_followers - object.locked + object.suspended? ? false : object.locked end def virtual_tags - object.emojis + object.tags + object.suspended? ? [] : (object.emojis + object.tags) end def virtual_attachments - object.fields + object.identity_proofs.active + object.suspended? ? [] : (object.fields + object.identity_proofs.active) end def moved_to ActivityPub::TagManager.instance.uri_for(object.moved_to_account) end + def moved? + !object.suspended? && object.moved? + end + def also_known_as? - !object.also_known_as.empty? + !object.suspended? && !object.also_known_as.empty? end class CustomEmojiSerializer < ActivityPub::EmojiSerializer diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 9f95f1950..4cb8e09db 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -18,10 +18,11 @@ class ActivityPub::ProcessAccountService < BaseService RedisLock.acquire(lock_options) do |lock| if lock.acquired? - @account = Account.remote.find_by(uri: @uri) if @options[:only_key] - @account ||= Account.find_remote(@username, @domain) - @old_public_key = @account&.public_key - @old_protocol = @account&.protocol + @account = Account.remote.find_by(uri: @uri) if @options[:only_key] + @account ||= Account.find_remote(@username, @domain) + @old_public_key = @account&.public_key + @old_protocol = @account&.protocol + @suspension_changed = false create_account if @account.nil? update_account @@ -37,8 +38,9 @@ class ActivityPub::ProcessAccountService < BaseService after_protocol_change! if protocol_changed? after_key_change! if key_changed? && !@options[:signed_with_known_key] clear_tombstones! if key_changed? + after_suspension_change! if suspension_changed? - unless @options[:only_key] + unless @options[:only_key] || @account.suspended? check_featured_collection! if @account.featured_collection_url.present? check_links! unless @account.fields.empty? end @@ -52,20 +54,23 @@ class ActivityPub::ProcessAccountService < BaseService def create_account @account = Account.new - @account.protocol = :activitypub - @account.username = @username - @account.domain = @domain - @account.private_key = nil - @account.suspended_at = domain_block.created_at if auto_suspend? - @account.silenced_at = domain_block.created_at if auto_silence? + @account.protocol = :activitypub + @account.username = @username + @account.domain = @domain + @account.private_key = nil + @account.suspended_at = domain_block.created_at if auto_suspend? + @account.suspension_origin = :local if auto_suspend? + @account.silenced_at = domain_block.created_at if auto_silence? + @account.save end def update_account @account.last_webfingered_at = Time.now.utc unless @options[:only_key] @account.protocol = :activitypub - set_immediate_attributes! - set_fetchable_attributes! unless @options[:only_keys] + set_suspension! + set_immediate_attributes! unless @account.suspended? + set_fetchable_attributes! unless @options[:only_keys] || @account.suspended? @account.save_with_optional_media! end @@ -99,6 +104,18 @@ class ActivityPub::ProcessAccountService < BaseService @account.moved_to_account = @json['movedTo'].present? ? moved_account : nil end + def set_suspension! + return if @account.suspended? && @account.suspension_origin_local? + + if @account.suspended? && !@json['suspended'] + @account.unsuspend! + @suspension_changed = true + elsif !@account.suspended? && @json['suspended'] + @account.suspend!(origin: :remote) + @suspension_changed = true + end + end + def after_protocol_change! ActivityPub::PostUpgradeWorker.perform_async(@account.domain) end @@ -107,6 +124,14 @@ class ActivityPub::ProcessAccountService < BaseService RefollowWorker.perform_async(@account.id) end + def after_suspension_change! + if @account.suspended? + Admin::SuspensionWorker.perform_async(@account.id) + else + Admin::UnsuspensionWorker.perform_async(@account.id) + end + end + def check_featured_collection! ActivityPub::SynchronizeFeaturedCollectionWorker.perform_async(@account.id) end @@ -227,6 +252,10 @@ class ActivityPub::ProcessAccountService < BaseService !@old_public_key.nil? && @old_public_key != @account.public_key end + def suspension_changed? + @suspension_changed + end + def clear_tombstones! Tombstone.where(account_id: @account.id).delete_all end diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index e6ccaccc9..f1d175dac 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -8,7 +8,7 @@ class ActivityPub::ProcessCollectionService < BaseService @json = Oj.load(body, mode: :strict) @options = options - return if !supported_context? || (different_actor? && verify_account!.nil?) || @account.suspended? || @account.local? + return if !supported_context? || (different_actor? && verify_account!.nil?) || suspended_actor? || @account.local? case @json['type'] when 'Collection', 'CollectionPage' @@ -28,6 +28,14 @@ class ActivityPub::ProcessCollectionService < BaseService @json['actor'].present? && value_or_id(@json['actor']) != @account.uri end + def suspended_actor? + @account.suspended? && !activity_allowed_while_suspended? + end + + def activity_allowed_while_suspended? + %w(Delete Reject Undo Update).include?(@json['type']) + end + def process_items(items) items.reverse_each.map { |item| process_item(item) }.compact end diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 1cf3382b3..76cc36ff6 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -16,7 +16,7 @@ class BlockDomainService < BaseService scope = Account.by_domain_and_subdomains(domain_block.domain) scope.where(silenced_at: domain_block.created_at).in_batches.update_all(silenced_at: nil) unless domain_block.silence? - scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil) unless domain_block.suspend? + scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil, suspension_origin: nil) unless domain_block.suspend? end def process_domain_block! @@ -34,7 +34,8 @@ class BlockDomainService < BaseService end def suspend_accounts! - blocked_domain_accounts.without_suspended.in_batches.update_all(suspended_at: @domain_block.created_at) + blocked_domain_accounts.without_suspended.in_batches.update_all(suspended_at: @domain_block.created_at, suspension_origin: :local) + blocked_domain_accounts.where(suspended_at: @domain_block.created_at).reorder(nil).find_each do |account| DeleteAccountService.new.call(account, reserve_username: true, suspended_at: @domain_block.created_at) end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 15bdd13e3..de6488c78 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -64,8 +64,15 @@ class DeleteAccountService < BaseService def reject_follows! return if @account.local? || !@account.activitypub? + # When deleting a remote account, the account obviously doesn't + # actually become deleted on its origin server, i.e. unlike a + # locally deleted account it continues to have access to its home + # feed and other content. To prevent it from being able to continue + # to access toots it would receive because it follows local accounts, + # we have to force it to unfollow them. + ActivityPub::DeliveryWorker.push_bulk(Follow.where(account: @account)) do |follow| - [build_reject_json(follow), follow.target_account_id, follow.account.inbox_url] + [Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] end end @@ -114,19 +121,20 @@ class DeleteAccountService < BaseService return unless @options[:reserve_username] - @account.silenced_at = nil - @account.suspended_at = @options[:suspended_at] || Time.now.utc - @account.locked = false - @account.memorial = false - @account.discoverable = false - @account.display_name = '' - @account.note = '' - @account.fields = [] - @account.statuses_count = 0 - @account.followers_count = 0 - @account.following_count = 0 - @account.moved_to_account = nil - @account.trust_level = :untrusted + @account.silenced_at = nil + @account.suspended_at = @options[:suspended_at] || Time.now.utc + @account.suspension_origin = :local + @account.locked = false + @account.memorial = false + @account.discoverable = false + @account.display_name = '' + @account.note = '' + @account.fields = [] + @account.statuses_count = 0 + @account.followers_count = 0 + @account.following_count = 0 + @account.moved_to_account = nil + @account.trust_level = :untrusted @account.avatar.destroy @account.header.destroy @account.save! @@ -154,10 +162,6 @@ class DeleteAccountService < BaseService @delete_actor_json ||= Oj.dump(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account)) end - def build_reject_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) - end - def delivery_inboxes @delivery_inboxes ||= @account.followers.inboxes + Relay.enabled.pluck(:inbox_url) end diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 3f7bb7cc5..4783e6d33 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -5,8 +5,6 @@ class ResolveAccountService < BaseService include DomainControlHelper include WebfingerHelper - class WebfingerRedirectError < StandardError; end - # Find or create an account record for a remote user. When creating, # look up the user's webfinger and fetch ActivityPub data # @param [String, Account] uri URI in the username@domain format or account record @@ -40,13 +38,18 @@ class ResolveAccountService < BaseService @account ||= Account.find_remote(@username, @domain) - return @account if @account&.local? || !webfinger_update_due? + if gone_from_origin? && not_yet_deleted? + queue_deletion! + return + end + + return @account if @account&.local? || gone_from_origin? || !webfinger_update_due? # Now it is certain, it is definitely a remote account, and it # either needs to be created, or updated from fresh data process_account! - rescue Webfinger::Error, WebfingerRedirectError, Oj::ParseError => e + rescue Webfinger::Error, Oj::ParseError => e Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}" nil end @@ -86,10 +89,12 @@ class ResolveAccountService < BaseService elsif !redirected return process_webfinger!("#{confirmed_username}@#{confirmed_domain}", true) else - raise WebfingerRedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" + raise Webfinger::RedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" end @domain = nil if TagManager.instance.local_domain?(@domain) + rescue Webfinger::GoneError + @gone = true end def process_account! @@ -131,6 +136,18 @@ class ResolveAccountService < BaseService @actor_json = supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) ? json : nil end + def gone_from_origin? + @gone + end + + def not_yet_deleted? + @account.present? && !@account.local? + end + + def queue_deletion! + AccountDeletionWorker.perform_async(@account.id, reserve_username: false) + end + def lock_options { redis: Redis.current, key: "resolve:#{@username}@#{@domain}" } end diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index f08c41e17..d7f29963c 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -1,10 +1,14 @@ # frozen_string_literal: true class SuspendAccountService < BaseService + include Payloadable + def call(account) @account = account suspend! + reject_remote_follows! + distribute_update_actor! unmerge_from_home_timelines! unmerge_from_list_timelines! privatize_media_attachments! @@ -16,6 +20,31 @@ class SuspendAccountService < BaseService @account.suspend! unless @account.suspended? end + def reject_remote_follows! + return if @account.local? || !@account.activitypub? + + # When suspending a remote account, the account obviously doesn't + # actually become suspended on its origin server, i.e. unlike a + # locally suspended account it continues to have access to its home + # feed and other content. To prevent it from being able to continue + # to access toots it would receive because it follows local accounts, + # we have to force it to unfollow them. Unfortunately, there is no + # counterpart to this operation, i.e. you can't then force a remote + # account to re-follow you, so this part is not reversible. + + follows = Follow.where(account: @account).to_a + + ActivityPub::DeliveryWorker.push_bulk(follows) do |follow| + [Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] + end + + follows.in_batches.destroy_all + end + + def distribute_update_actor! + ActivityPub::UpdateDistributionWorker.perform_async(@account.id) if @account.local? + end + def unmerge_from_home_timelines! @account.followers_for_local_distribution.find_each do |follower| FeedManager.instance.unmerge_from_home(@account, follower) diff --git a/app/services/unblock_domain_service.rb b/app/services/unblock_domain_service.rb index d502d9e49..e765fb7a8 100644 --- a/app/services/unblock_domain_service.rb +++ b/app/services/unblock_domain_service.rb @@ -13,6 +13,6 @@ class UnblockDomainService < BaseService scope = Account.by_domain_and_subdomains(domain_block.domain) scope.where(silenced_at: domain_block.created_at).in_batches.update_all(silenced_at: nil) unless domain_block.noop? - scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil) if domain_block.suspend? + scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil, suspension_origin: nil) if domain_block.suspend? end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index 91dbc9c18..a81d1ac4f 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -5,6 +5,10 @@ class UnsuspendAccountService < BaseService @account = account unsuspend! + refresh_remote_account! + + return if @account.nil? + merge_into_home_timelines! merge_into_list_timelines! publish_media_attachments! @@ -16,6 +20,22 @@ class UnsuspendAccountService < BaseService @account.unsuspend! if @account.suspended? end + def refresh_remote_account! + return if @account.local? + + # While we had the remote account suspended, it could be that + # it got suspended on its origin, too. So, we need to refresh + # it straight away so it gets marked as remotely suspended in + # that case. + + @account.update!(last_webfingered_at: nil) + @account = ResolveAccountService.new.call(@account) + + # Worth noting that it is possible that the remote has not only + # been suspended, but deleted permanently, in which case + # @account would now be nil. + end + def merge_into_home_timelines! @account.followers_for_local_distribution.find_each do |follower| FeedManager.instance.merge_into_home(@account, follower) diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index 0f6be71e1..b6016bf8c 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -5,8 +5,8 @@ class AccountDeletionWorker sidekiq_options queue: 'pull' - def perform(account_id) - DeleteAccountService.new.call(Account.find(account_id), reserve_username: true, reserve_email: false) + def perform(account_id, reserve_username: true) + DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, reserve_email: false) rescue ActiveRecord::RecordNotFound true end diff --git a/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb b/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb new file mode 100644 index 000000000..f0db02143 --- /dev/null +++ b/db/migrate/20201017233919_add_suspension_origin_to_accounts.rb @@ -0,0 +1,5 @@ +class AddSuspensionOriginToAccounts < ActiveRecord::Migration[5.2] + def change + add_column :accounts, :suspension_origin, :integer + end +end diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb new file mode 100644 index 000000000..ab7407d79 --- /dev/null +++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + Account.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local) + end + + def down; end +end diff --git a/db/schema.rb b/db/schema.rb index 5ff6b6300..873c37f67 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_10_08_220312) do +ActiveRecord::Schema.define(version: 2020_10_17_234926) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -189,6 +189,7 @@ ActiveRecord::Schema.define(version: 2020_10_08_220312) do t.integer "avatar_storage_schema_version" t.integer "header_storage_schema_version" t.string "devices_url" + t.integer "suspension_origin" t.datetime "sensitized_at" t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 8f9279a3c..7565620cf 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -245,7 +245,7 @@ module Mastodon end if [404, 410].include?(code) - SuspendAccountService.new.call(account, reserve_username: false) unless options[:dry_run] + DeleteAccountService.new.call(account, reserve_username: false) unless options[:dry_run] 1 else # Touch account even during dry run to avoid getting the account into the window again diff --git a/spec/controllers/account_follow_controller_spec.rb b/spec/controllers/account_follow_controller_spec.rb index 9a93e1ebe..d33cd0499 100644 --- a/spec/controllers/account_follow_controller_spec.rb +++ b/spec/controllers/account_follow_controller_spec.rb @@ -16,17 +16,49 @@ describe AccountFollowController do allow(service).to receive(:call) end - it 'does not create for user who is not signed in' do - subject - expect(FollowService).not_to receive(:new) + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + subject + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + subject + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + context 'when signed out' do + before do + subject + end + + it 'does not follow' do + expect(FollowService).not_to receive(:new) + end end - it 'redirects to account path' do - sign_in(user) - subject + context 'when signed in' do + before do + sign_in(user) + subject + end - expect(service).to have_received(:call).with(user.account, alice, with_rate_limit: true) - expect(response).to redirect_to(account_path(alice)) + it 'redirects to account path' do + expect(service).to have_received(:call).with(user.account, alice, with_rate_limit: true) + expect(response).to redirect_to(account_path(alice)) + end end end end diff --git a/spec/controllers/account_unfollow_controller_spec.rb b/spec/controllers/account_unfollow_controller_spec.rb index bdebcfa94..a11f7aa68 100644 --- a/spec/controllers/account_unfollow_controller_spec.rb +++ b/spec/controllers/account_unfollow_controller_spec.rb @@ -16,17 +16,49 @@ describe AccountUnfollowController do allow(service).to receive(:call) end - it 'does not create for user who is not signed in' do - subject - expect(UnfollowService).not_to receive(:new) + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + subject + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + subject + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + context 'when signed out' do + before do + subject + end + + it 'does not unfollow' do + expect(UnfollowService).not_to receive(:new) + end end - it 'redirects to account path' do - sign_in(user) - subject + context 'when signed in' do + before do + sign_in(user) + subject + end - expect(service).to have_received(:call).with(user.account, alice) - expect(response).to redirect_to(account_path(alice)) + it 'redirects to account path' do + expect(service).to have_received(:call).with(user.account, alice) + expect(response).to redirect_to(account_path(alice)) + end end end end diff --git a/spec/controllers/accounts_controller_spec.rb b/spec/controllers/accounts_controller_spec.rb index b04f4650b..f7d0b1af5 100644 --- a/spec/controllers/accounts_controller_spec.rb +++ b/spec/controllers/accounts_controller_spec.rb @@ -48,10 +48,17 @@ RSpec.describe AccountsController, type: :controller do expect(response).to have_http_status(404) end end + end + + context 'as HTML' do + let(:format) { 'html' } - context 'when account is suspended' do + it_behaves_like 'preliminary checks' + + context 'when account is permanently suspended' do before do account.suspend! + account.deletion_request.destroy end it 'returns http gone' do @@ -59,12 +66,17 @@ RSpec.describe AccountsController, type: :controller do expect(response).to have_http_status(410) end end - end - context 'as HTML' do - let(:format) { 'html' } + context 'when account is temporarily suspended' do + before do + account.suspend! + end - it_behaves_like 'preliminary checks' + it 'returns http forbidden' do + get :show, params: { username: account.username, format: format } + expect(response).to have_http_status(403) + end + end shared_examples 'common response characteristics' do it 'returns http success' do @@ -325,6 +337,29 @@ RSpec.describe AccountsController, type: :controller do it_behaves_like 'preliminary checks' + context 'when account is suspended permanently' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + get :show, params: { username: account.username, format: format } + expect(response).to have_http_status(410) + end + end + + context 'when account is suspended temporarily' do + before do + account.suspend! + end + + it 'returns http success' do + get :show, params: { username: account.username, format: format } + expect(response).to have_http_status(200) + end + end + context do before do get :show, params: { username: account.username, format: format } @@ -435,6 +470,29 @@ RSpec.describe AccountsController, type: :controller do it_behaves_like 'preliminary checks' + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + get :show, params: { username: account.username, format: format } + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http forbidden' do + get :show, params: { username: account.username, format: format } + expect(response).to have_http_status(403) + end + end + shared_examples 'common response characteristics' do it 'returns http success' do expect(response).to have_http_status(200) diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb index 89939d1d2..ac661e5e1 100644 --- a/spec/controllers/activitypub/collections_controller_spec.rb +++ b/spec/controllers/activitypub/collections_controller_spec.rb @@ -13,6 +13,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do end it 'does not set sessions' do + response expect(session).to be_empty end @@ -34,9 +35,8 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do context 'without signature' do let(:remote_account) { nil } - before do - get :show, params: { id: 'featured', account_username: account.username } - end + subject(:response) { get :show, params: { id: 'featured', account_username: account.username } } + subject(:body) { body_as_json } it 'returns http success' do expect(response).to have_http_status(200) @@ -49,9 +49,29 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do it_behaves_like 'cachable response' it 'returns orderedItems with pinned statuses' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].size).to eq 2 + expect(body[:orderedItems]).to be_an Array + expect(body[:orderedItems].size).to eq 2 + end + + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end end end diff --git a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb index a24d3f8e0..88f4554c2 100644 --- a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb +++ b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb @@ -32,9 +32,8 @@ RSpec.describe ActivityPub::FollowersSynchronizationsController, type: :controll context 'with signature from example.com' do let(:remote_account) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/instance') } - before do - get :show, params: { account_username: account.username } - end + subject(:response) { get :show, params: { account_username: account.username } } + subject(:body) { body_as_json } it 'returns http success' do expect(response).to have_http_status(200) @@ -45,14 +44,34 @@ RSpec.describe ActivityPub::FollowersSynchronizationsController, type: :controll end it 'returns orderedItems with followers from example.com' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].sort).to eq [follower_1.uri, follower_2.uri] + expect(body[:orderedItems]).to be_an Array + expect(body[:orderedItems].sort).to eq [follower_1.uri, follower_2.uri] end it 'returns private Cache-Control header' do expect(response.headers['Cache-Control']).to eq 'max-age=0, private' end + + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end end end diff --git a/spec/controllers/activitypub/inboxes_controller_spec.rb b/spec/controllers/activitypub/inboxes_controller_spec.rb index e5c004611..973ad83bb 100644 --- a/spec/controllers/activitypub/inboxes_controller_spec.rb +++ b/spec/controllers/activitypub/inboxes_controller_spec.rb @@ -20,6 +20,33 @@ RSpec.describe ActivityPub::InboxesController, type: :controller do it 'returns http accepted' do expect(response).to have_http_status(202) end + + context 'for a specific account' do + let(:account) { Fabricate(:account) } + + subject(:response) { post :create, params: { account_username: account.username }, body: '{}' } + + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http accepted' do + expect(response).to have_http_status(202) + end + end + end end context 'with Collection-Synchronization header' do diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index 1baf5a623..84e3a8956 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -10,6 +10,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'does not set sessions' do + response expect(session).to be_empty end @@ -34,9 +35,8 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do context 'without signature' do let(:remote_account) { nil } - before do - get :show, params: { account_username: account.username, page: page } - end + subject(:response) { get :show, params: { account_username: account.username, page: page } } + subject(:body) { body_as_json } context 'with page not requested' do let(:page) { nil } @@ -50,11 +50,31 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns totalItems' do - json = body_as_json - expect(json[:totalItems]).to eq 4 + expect(body[:totalItems]).to eq 4 end it_behaves_like 'cachable response' + + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end context 'with page requested' do @@ -69,13 +89,33 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns orderedItems with public or unlisted statuses' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].size).to eq 2 - expect(json[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true + expect(body[:orderedItems]).to be_an Array + expect(body[:orderedItems].size).to eq 2 + expect(body[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true end it_behaves_like 'cachable response' + + context 'when account is permanently suspended' do + before do + account.suspend! + account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + account.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end end diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index ed383864d..250259752 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -14,6 +14,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do end it 'does not set sessions' do + response expect(session).to be_empty end @@ -36,8 +37,32 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do describe 'GET #index' do context 'with no signature' do - before do - get :index, params: { account_username: status.account.username, status_id: status.id } + subject(:response) { get :index, params: { account_username: status.account.username, status_id: status.id } } + subject(:body) { body_as_json } + + context 'when account is permanently suspended' do + let(:parent_visibility) { :public } + + before do + status.account.suspend! + status.account.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + let(:parent_visibility) { :public } + + before do + status.account.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end end context 'when status is public' do @@ -54,12 +79,10 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do it_behaves_like 'cachable response' it 'returns items with account\'s own replies' do - json = body_as_json - - expect(json[:first]).to be_a Hash - expect(json[:first][:items]).to be_an Array - expect(json[:first][:items].size).to eq 1 - expect(json[:first][:items].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true + expect(body[:first]).to be_a Hash + expect(body[:first][:items]).to be_an Array + expect(body[:first][:items].size).to eq 1 + expect(body[:first][:items].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true end end diff --git a/spec/controllers/api/v1/admin/accounts_controller_spec.rb b/spec/controllers/api/v1/admin/accounts_controller_spec.rb index 89cadb222..f6be35f7f 100644 --- a/spec/controllers/api/v1/admin/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/admin/accounts_controller_spec.rb @@ -111,7 +111,7 @@ RSpec.describe Api::V1::Admin::AccountsController, type: :controller do describe 'POST #unsuspend' do before do - account.touch(:suspended_at) + account.suspend! post :unsuspend, params: { id: account.id } end diff --git a/spec/controllers/follower_accounts_controller_spec.rb b/spec/controllers/follower_accounts_controller_spec.rb index 34a0cf3f4..f6d55f693 100644 --- a/spec/controllers/follower_accounts_controller_spec.rb +++ b/spec/controllers/follower_accounts_controller_spec.rb @@ -14,6 +14,27 @@ describe FollowerAccountsController do context 'when format is html' do subject(:response) { get :index, params: { account_username: alice.username, format: :html } } + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + it 'assigns follows' do expect(response).to have_http_status(200) @@ -48,6 +69,27 @@ describe FollowerAccountsController do expect(body['totalItems']).to eq 2 expect(body['partOf']).to be_present end + + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end context 'without page' do @@ -58,6 +100,27 @@ describe FollowerAccountsController do expect(body['totalItems']).to eq 2 expect(body['partOf']).to be_blank end + + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end end end diff --git a/spec/controllers/following_accounts_controller_spec.rb b/spec/controllers/following_accounts_controller_spec.rb index e9a1f597d..0fc0967a6 100644 --- a/spec/controllers/following_accounts_controller_spec.rb +++ b/spec/controllers/following_accounts_controller_spec.rb @@ -14,6 +14,27 @@ describe FollowingAccountsController do context 'when format is html' do subject(:response) { get :index, params: { account_username: alice.username, format: :html } } + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + it 'assigns follows' do expect(response).to have_http_status(200) @@ -48,6 +69,27 @@ describe FollowingAccountsController do expect(body['totalItems']).to eq 2 expect(body['partOf']).to be_present end + + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end context 'without page' do @@ -58,6 +100,27 @@ describe FollowingAccountsController do expect(body['totalItems']).to eq 2 expect(body['partOf']).to be_blank end + + context 'when account is permanently suspended' do + before do + alice.suspend! + alice.deletion_request.destroy + end + + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when account is temporarily suspended' do + before do + alice.suspend! + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end end end diff --git a/spec/controllers/remote_follow_controller_spec.rb b/spec/controllers/remote_follow_controller_spec.rb index 7312dde58..01d43f48c 100644 --- a/spec/controllers/remote_follow_controller_spec.rb +++ b/spec/controllers/remote_follow_controller_spec.rb @@ -94,21 +94,42 @@ describe RemoteFollowController do end end - describe 'with a suspended account' do + context 'with a permanently suspended account' do before do - @account = Fabricate(:account, suspended: true) + @account = Fabricate(:account) + @account.suspend! + @account.deletion_request.destroy end - it 'returns 410 gone on GET to #new' do + it 'returns http gone on GET to #new' do get :new, params: { account_username: @account.to_param } - expect(response).to have_http_status(:gone) + expect(response).to have_http_status(410) end - it 'returns 410 gone on POST to #create' do + it 'returns http gone on POST to #create' do post :create, params: { account_username: @account.to_param } - expect(response).to have_http_status(:gone) + expect(response).to have_http_status(410) + end + end + + context 'with a temporarily suspended account' do + before do + @account = Fabricate(:account) + @account.suspend! + end + + it 'returns http forbidden on GET to #new' do + get :new, params: { account_username: @account.to_param } + + expect(response).to have_http_status(403) + end + + it 'returns http forbidden on POST to #create' do + post :create, params: { account_username: @account.to_param } + + expect(response).to have_http_status(403) end end end diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index cd6e1e607..9986efa51 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -24,10 +24,11 @@ describe StatusesController do let(:account) { Fabricate(:account) } let(:status) { Fabricate(:status, account: account) } - context 'when account is suspended' do - let(:account) { Fabricate(:account, suspended: true) } - + context 'when account is permanently suspended' do before do + account.suspend! + account.deletion_request.destroy + get :show, params: { account_username: account.username, id: status.id } end @@ -36,6 +37,18 @@ describe StatusesController do end end + context 'when account is temporarily suspended' do + before do + account.suspend! + + get :show, params: { account_username: account.username, id: status.id } + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + context 'when status is a reblog' do let(:original_account) { Fabricate(:account, domain: 'example.com') } let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } @@ -676,10 +689,11 @@ describe StatusesController do let(:account) { Fabricate(:account) } let(:status) { Fabricate(:status, account: account) } - context 'when account is suspended' do - let(:account) { Fabricate(:account, suspended: true) } - + context 'when account is permanently suspended' do before do + account.suspend! + account.deletion_request.destroy + get :activity, params: { account_username: account.username, id: status.id } end @@ -688,6 +702,18 @@ describe StatusesController do end end + context 'when account is temporarily suspended' do + before do + account.suspend! + + get :activity, params: { account_username: account.username, id: status.id } + end + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + context 'when status is public' do pending end diff --git a/spec/controllers/well_known/webfinger_controller_spec.rb b/spec/controllers/well_known/webfinger_controller_spec.rb index 46f63185b..cf7005b0e 100644 --- a/spec/controllers/well_known/webfinger_controller_spec.rb +++ b/spec/controllers/well_known/webfinger_controller_spec.rb @@ -4,95 +4,134 @@ describe WellKnown::WebfingerController, type: :controller do render_views describe 'GET #show' do - let(:alice) do - Fabricate(:account, username: 'alice') + let(:alternate_domains) { [] } + let(:alice) { Fabricate(:account, username: 'alice') } + let(:resource) { nil } + + around(:each) do |example| + tmp = Rails.configuration.x.alternate_domains + Rails.configuration.x.alternate_domains = alternate_domains + example.run + Rails.configuration.x.alternate_domains = tmp end - before do - alice.private_key = <<-PEM ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDHgPoPJlrfMZrVcuF39UbVssa8r4ObLP3dYl9Y17Mgp5K4mSYD -R/Y2ag58tSi6ar2zM3Ze3QYsNfTq0NqN1g89eAu0MbSjWqpOsgntRPJiFuj3hai2 -X2Im8TBrkiM/UyfTRgn8q8WvMoKbXk8Lu6nqv420eyqhhLxfUoCpxuem1QIDAQAB -AoGBAIKsOh2eM7spVI8mdgQKheEG/iEsnPkQ2R8ehfE9JzjmSbXbqghQJDaz9NU+ -G3Uu4R31QT0VbCudE9SSA/UPFl82GeQG4QLjrSE+PSjSkuslgSXelJHfAJ+ycGax -ajtPyiQD0e4c2loagHNHPjqK9OhHx9mFnZWmoagjlZ+mQGEpAkEA8GtqfS65IaRQ -uVhMzpp25rF1RWOwaaa+vBPkd7pGdJEQGFWkaR/a9UkU+2C4ZxGBkJDP9FApKVQI -RANEwN3/hwJBANRuw5+es6BgBv4PD387IJvuruW2oUtYP+Lb2Z5k77J13hZTr0db -Oo9j1UbbR0/4g+vAcsDl4JD9c/9LrGYEpcMCQBon9Yvs+2M3lziy7JhFoc3zXIjS -Ea1M4M9hcqe78lJYPeIH3z04o/+vlcLLgQRlmSz7NESmO/QtGkEcAezhuh0CQHji -pzO4LeO/gXslut3eGcpiYuiZquOjToecMBRwv+5AIKd367Che4uJdh6iPcyGURvh -IewfZFFdyZqnx20ui90CQQC1W2rK5Y30wAunOtSLVA30TLK/tKrTppMC3corjKlB -FTX8IvYBNTbpEttc1VCf/0ccnNpfb0CrFNSPWxRj7t7D ------END RSA PRIVATE KEY----- -PEM - - alice.public_key = <<-PEM ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHgPoPJlrfMZrVcuF39UbVssa8 -r4ObLP3dYl9Y17Mgp5K4mSYDR/Y2ag58tSi6ar2zM3Ze3QYsNfTq0NqN1g89eAu0 -MbSjWqpOsgntRPJiFuj3hai2X2Im8TBrkiM/UyfTRgn8q8WvMoKbXk8Lu6nqv420 -eyqhhLxfUoCpxuem1QIDAQAB ------END PUBLIC KEY----- -PEM - - alice.save! + subject do + get :show, params: { resource: resource }, format: :json end - around(:each) do |example| - before = Rails.configuration.x.alternate_domains - example.run - Rails.configuration.x.alternate_domains = before + shared_examples 'a successful response' do + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns application/jrd+json' do + expect(response.content_type).to eq 'application/jrd+json' + end + + it 'returns links for the account' do + json = body_as_json + expect(json[:subject]).to eq 'acct:alice@cb6e6126.ngrok.io' + expect(json[:aliases]).to include('https://cb6e6126.ngrok.io/@alice', 'https://cb6e6126.ngrok.io/users/alice') + end end - it 'returns JSON when account can be found' do - get :show, params: { resource: alice.to_webfinger_s }, format: :json + context 'when an account exists' do + let(:resource) { alice.to_webfinger_s } - json = body_as_json + before do + subject + end - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/jrd+json' - expect(json[:subject]).to eq 'acct:alice@cb6e6126.ngrok.io' - expect(json[:aliases]).to include('https://cb6e6126.ngrok.io/@alice', 'https://cb6e6126.ngrok.io/users/alice') + it_behaves_like 'a successful response' end - it 'returns http not found when account cannot be found' do - get :show, params: { resource: 'acct:not@existing.com' }, format: :json + context 'when an account is temporarily suspended' do + let(:resource) { alice.to_webfinger_s } - expect(response).to have_http_status(:not_found) + before do + alice.suspend! + subject + end + + it_behaves_like 'a successful response' end - it 'returns JSON when account can be found with alternate domains' do - Rails.configuration.x.alternate_domains = ['foo.org'] - username, = alice.to_webfinger_s.split('@') + context 'when an account is permanently suspended or deleted' do + let(:resource) { alice.to_webfinger_s } + + before do + alice.suspend! + alice.deletion_request.destroy + subject + end - get :show, params: { resource: "#{username}@foo.org" }, format: :json + it 'returns http gone' do + expect(response).to have_http_status(410) + end + end + + context 'when an account is not found' do + let(:resource) { 'acct:not@existing.com' } - json = body_as_json + before do + subject + end - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/jrd+json' - expect(json[:subject]).to eq 'acct:alice@cb6e6126.ngrok.io' - expect(json[:aliases]).to include('https://cb6e6126.ngrok.io/@alice', 'https://cb6e6126.ngrok.io/users/alice') + it 'returns http not found' do + expect(response).to have_http_status(404) + end end - it 'returns http not found when account can not be found with alternate domains' do - Rails.configuration.x.alternate_domains = ['foo.org'] - username, = alice.to_webfinger_s.split('@') + context 'with an alternate domain' do + let(:alternate_domains) { ['foo.org'] } + + before do + subject + end + + context 'when an account exists' do + let(:resource) do + username, = alice.to_webfinger_s.split('@') + "#{username}@foo.org" + end + + it_behaves_like 'a successful response' + end - get :show, params: { resource: "#{username}@bar.org" }, format: :json + context 'when the domain is wrong' do + let(:resource) do + username, = alice.to_webfinger_s.split('@') + "#{username}@bar.org" + end - expect(response).to have_http_status(:not_found) + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end end - it 'returns http bad request when not given a resource parameter' do - get :show, params: { }, format: :json - expect(response).to have_http_status(:bad_request) + context 'with no resource parameter' do + let(:resource) { nil } + + before do + subject + end + + it 'returns http bad request' do + expect(response).to have_http_status(400) + end end - it 'returns http bad request when given a nonsense parameter' do - get :show, params: { resource: 'df/:dfkj' } - expect(response).to have_http_status(:bad_request) + context 'with a nonsense parameter' do + let(:resource) { 'df/:dfkj' } + + before do + subject + end + + it 'returns http bad request' do + expect(response).to have_http_status(400) + end end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index d27e9d5b0..1347ca4a0 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -7,8 +7,9 @@ RSpec.describe AccountPolicy do let(:subject) { described_class } let(:admin) { Fabricate(:user, admin: true).account } let(:john) { Fabricate(:user).account } + let(:alice) { Fabricate(:user).account } - permissions :index?, :show?, :unsuspend?, :unsensitive?, :unsilence?, :remove_avatar?, :remove_header? do + permissions :index? do context 'staff' do it 'permits' do expect(subject).to permit(admin) @@ -22,6 +23,38 @@ RSpec.describe AccountPolicy do end end + permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do + context 'staff' do + it 'permits' do + expect(subject).to permit(admin, alice) + end + end + + context 'not staff' do + it 'denies' do + expect(subject).to_not permit(john, alice) + end + end + end + + permissions :unsuspend? do + before do + alice.suspend! + end + + context 'staff' do + it 'permits' do + expect(subject).to permit(admin, alice) + end + end + + context 'not staff' do + it 'denies' do + expect(subject).to_not permit(john, alice) + end + end + end + permissions :redownload?, :subscribe?, :unsubscribe? do context 'admin' do it 'permits' do diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index 5141e3f16..56e7f8321 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -73,4 +73,84 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do expect(ProofProvider::Keybase::Worker).to have_received(:perform_async) end end + + context 'when account is not suspended' do + let!(:account) { Fabricate(:account, username: 'alice', domain: 'example.com') } + + let(:payload) do + { + id: 'https://foo.test', + type: 'Actor', + inbox: 'https://foo.test/inbox', + suspended: true, + }.with_indifferent_access + end + + before do + allow(Admin::SuspensionWorker).to receive(:perform_async) + end + + subject { described_class.new.call('alice', 'example.com', payload) } + + it 'suspends account remotely' do + expect(subject.suspended?).to be true + expect(subject.suspension_origin_remote?).to be true + end + + it 'queues suspension worker' do + subject + expect(Admin::SuspensionWorker).to have_received(:perform_async) + end + end + + context 'when account is suspended' do + let!(:account) { Fabricate(:account, username: 'alice', domain: 'example.com', display_name: '') } + + let(:payload) do + { + id: 'https://foo.test', + type: 'Actor', + inbox: 'https://foo.test/inbox', + suspended: false, + name: 'Hoge', + }.with_indifferent_access + end + + before do + allow(Admin::UnsuspensionWorker).to receive(:perform_async) + + account.suspend!(origin: suspension_origin) + end + + subject { described_class.new.call('alice', 'example.com', payload) } + + context 'locally' do + let(:suspension_origin) { :local } + + it 'does not unsuspend it' do + expect(subject.suspended?).to be true + end + + it 'does not update any attributes' do + expect(subject.display_name).to_not eq 'Hoge' + end + end + + context 'remotely' do + let(:suspension_origin) { :remote } + + it 'unsuspends it' do + expect(subject.suspended?).to be false + end + + it 'queues unsuspension worker' do + subject + expect(Admin::UnsuspensionWorker).to have_received(:perform_async) + end + + it 'updates attributes' do + expect(subject.display_name).to eq 'Hoge' + end + end + end end diff --git a/spec/services/activitypub/process_collection_service_spec.rb b/spec/services/activitypub/process_collection_service_spec.rb index b3baf6b6b..00d71a86a 100644 --- a/spec/services/activitypub/process_collection_service_spec.rb +++ b/spec/services/activitypub/process_collection_service_spec.rb @@ -22,7 +22,48 @@ RSpec.describe ActivityPub::ProcessCollectionService, type: :service do subject { described_class.new } describe '#call' do - context 'when actor is the sender' + context 'when actor is suspended' do + before do + actor.suspend!(origin: :remote) + end + + %w(Accept Add Announce Block Create Flag Follow Like Move Remove).each do |activity_type| + context "with #{activity_type} activity" do + let(:payload) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: activity_type, + actor: ActivityPub::TagManager.instance.uri_for(actor), + } + end + + it 'does not process payload' do + expect(ActivityPub::Activity).not_to receive(:factory) + subject.call(json, actor) + end + end + end + + %w(Delete Reject Undo Update).each do |activity_type| + context "with #{activity_type} activity" do + let(:payload) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: activity_type, + actor: ActivityPub::TagManager.instance.uri_for(actor), + } + end + + it 'processes the payload' do + expect(ActivityPub::Activity).to receive(:factory) + subject.call(json, actor) + end + end + end + end + context 'when actor differs from sender' do let(:forwarder) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/other_account') } diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index cea942e39..76cb9ed8d 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -13,16 +13,41 @@ RSpec.describe ResolveAccountService, type: :service do stub_request(:get, "https://ap.example.com/users/foo").to_return(request_fixture('activitypub-actor.txt')) stub_request(:get, "https://ap.example.com/users/foo.atom").to_return(request_fixture('activitypub-feed.txt')) stub_request(:get, %r{https://ap.example.com/users/foo/\w+}).to_return(status: 404) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:hoge@example.com').to_return(status: 410) end - it 'raises error if no such user can be resolved via webfinger' do + it 'returns nil if no such user can be resolved via webfinger' do expect(subject.call('catsrgr8@quitter.no')).to be_nil end - it 'raises error if the domain does not have webfinger' do + it 'returns nil if the domain does not have webfinger' do expect(subject.call('catsrgr8@example.com')).to be_nil end + context 'when webfinger returns http gone' do + context 'for a previously known account' do + before do + Fabricate(:account, username: 'hoge', domain: 'example.com', last_webfingered_at: nil) + allow(AccountDeletionWorker).to receive(:perform_async) + end + + it 'returns nil' do + expect(subject.call('hoge@example.com')).to be_nil + end + + it 'queues account deletion worker' do + subject.call('hoge@example.com') + expect(AccountDeletionWorker).to have_received(:perform_async) + end + end + + context 'for a previously unknown account' do + it 'returns nil' do + expect(subject.call('hoge@example.com')).to be_nil + end + end + end + context 'with an ActivityPub account' do it 'returns new remote account' do account = subject.call('foo@ap.example.com') From 1e64666662c1ecd8f820941c5901857469c87358 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 8 Nov 2020 18:29:48 +0100 Subject: [PATCH 164/422] Fix crash in SuspendAccountWorker (#15106) * Fix crash in SuspendAccountWorker `follows` is an array thanks to `to_a` * Fix code style issue Co-authored-by: Eugen Rochko --- app/services/suspend_account_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index d7f29963c..7c70a6021 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -38,7 +38,7 @@ class SuspendAccountService < BaseService [Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] end - follows.in_batches.destroy_all + follows.each(&:destroy) end def distribute_update_actor! From cc98f967b13b57c43e2e32e4670c26cd8202fca7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 9 Nov 2020 00:56:52 +0100 Subject: [PATCH 165/422] New Crowdin updates (#14388) * New translations en.yml (Indonesian) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Norwegian) [ci skip] * New translations en.yml (Norwegian) [ci skip] * New translations simple_form.en.yml (Norwegian) [ci skip] * New translations devise.en.yml (Norwegian) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations simple_form.en.yml (Arabic) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations devise.en.yml (Chinese Simplified) [ci skip] * New translations en.json (Danish) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations simple_form.en.yml (Norwegian Nynorsk) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations en.yml (Norwegian Nynorsk) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.json (Czech) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations en.json (Slovenian) [ci skip] * New translations en.json (Ukrainian) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Breton) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (French) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (French) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations simple_form.en.yml (Catalan) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations simple_form.en.yml (Portuguese) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.json (German) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (German) [ci skip] * New translations en.json (German) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations simple_form.en.yml (Italian) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations simple_form.en.yml (Korean) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations simple_form.en.yml (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations simple_form.en.yml (Galician) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations simple_form.en.yml (Persian) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations devise.en.yml (German) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations simple_form.en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations simple_form.en.yml (Albanian) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations simple_form.en.yml (Corsican) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations doorkeeper.en.yml (Corsican) [ci skip] * New translations devise.en.yml (Corsican) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (German) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations simple_form.en.yml (Indonesian) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations devise.en.yml (Occitan) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations simple_form.en.yml (Occitan) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations simple_form.en.yml (Occitan) [ci skip] * New translations simple_form.en.yml (Occitan) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations activerecord.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations devise.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations devise.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations devise.en.yml (Turkish) [ci skip] * New translations activerecord.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * ran `i18n-tasks normalize` * ran `yarn manage:translations` * ran `i18n-tasks normalize` * New translations en.json (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/ar.json | 11 +- app/javascript/mastodon/locales/ast.json | 7 + app/javascript/mastodon/locales/bg.json | 7 + app/javascript/mastodon/locales/bn.json | 83 +- app/javascript/mastodon/locales/br.json | 11 +- app/javascript/mastodon/locales/ca.json | 59 +- app/javascript/mastodon/locales/co.json | 67 +- app/javascript/mastodon/locales/cs.json | 9 +- app/javascript/mastodon/locales/cy.json | 43 +- app/javascript/mastodon/locales/da.json | 83 +- app/javascript/mastodon/locales/de.json | 77 +- .../mastodon/locales/defaultMessages.json | 194 ++++ app/javascript/mastodon/locales/el.json | 51 +- app/javascript/mastodon/locales/en.json | 7 + app/javascript/mastodon/locales/eo.json | 31 +- app/javascript/mastodon/locales/es-AR.json | 181 ++-- app/javascript/mastodon/locales/es.json | 271 ++--- app/javascript/mastodon/locales/et.json | 7 + app/javascript/mastodon/locales/eu.json | 7 + app/javascript/mastodon/locales/fa.json | 65 +- app/javascript/mastodon/locales/fi.json | 7 + app/javascript/mastodon/locales/fr.json | 59 +- app/javascript/mastodon/locales/ga.json | 7 + app/javascript/mastodon/locales/gl.json | 97 +- app/javascript/mastodon/locales/he.json | 7 + app/javascript/mastodon/locales/hi.json | 101 +- app/javascript/mastodon/locales/hr.json | 681 +++++++------ app/javascript/mastodon/locales/hu.json | 61 +- app/javascript/mastodon/locales/hy.json | 29 +- app/javascript/mastodon/locales/id.json | 103 +- app/javascript/mastodon/locales/io.json | 7 + app/javascript/mastodon/locales/is.json | 69 +- app/javascript/mastodon/locales/it.json | 87 +- app/javascript/mastodon/locales/ja.json | 49 +- app/javascript/mastodon/locales/ka.json | 7 + app/javascript/mastodon/locales/kab.json | 33 +- app/javascript/mastodon/locales/kk.json | 49 +- app/javascript/mastodon/locales/kn.json | 15 +- app/javascript/mastodon/locales/ko.json | 63 +- app/javascript/mastodon/locales/ku.json | 961 +++++++++--------- app/javascript/mastodon/locales/lt.json | 7 + app/javascript/mastodon/locales/lv.json | 7 + app/javascript/mastodon/locales/mk.json | 7 + app/javascript/mastodon/locales/ml.json | 55 +- app/javascript/mastodon/locales/mr.json | 7 + app/javascript/mastodon/locales/ms.json | 7 + app/javascript/mastodon/locales/nl.json | 25 +- app/javascript/mastodon/locales/nn.json | 79 +- app/javascript/mastodon/locales/no.json | 71 +- app/javascript/mastodon/locales/oc.json | 75 +- app/javascript/mastodon/locales/pl.json | 75 +- app/javascript/mastodon/locales/pt-BR.json | 59 +- app/javascript/mastodon/locales/pt-PT.json | 85 +- app/javascript/mastodon/locales/ro.json | 7 + app/javascript/mastodon/locales/ru.json | 41 +- app/javascript/mastodon/locales/sa.json | 491 +++++++++ app/javascript/mastodon/locales/sc.json | 23 +- app/javascript/mastodon/locales/sk.json | 19 +- app/javascript/mastodon/locales/sl.json | 9 +- app/javascript/mastodon/locales/sq.json | 55 +- app/javascript/mastodon/locales/sr-Latn.json | 7 + app/javascript/mastodon/locales/sr.json | 7 + app/javascript/mastodon/locales/sv.json | 43 +- app/javascript/mastodon/locales/szl.json | 9 +- app/javascript/mastodon/locales/ta.json | 173 ++-- app/javascript/mastodon/locales/tai.json | 9 +- app/javascript/mastodon/locales/te.json | 7 + app/javascript/mastodon/locales/th.json | 49 +- app/javascript/mastodon/locales/tr.json | 276 ++--- app/javascript/mastodon/locales/ug.json | 9 +- app/javascript/mastodon/locales/uk.json | 29 +- app/javascript/mastodon/locales/ur.json | 7 + app/javascript/mastodon/locales/vi.json | 191 ++-- .../mastodon/locales/whitelist_sa.json | 2 + .../mastodon/locales/whitelist_zgh.json | 2 + app/javascript/mastodon/locales/zgh.json | 491 +++++++++ app/javascript/mastodon/locales/zh-CN.json | 65 +- app/javascript/mastodon/locales/zh-HK.json | 41 +- app/javascript/mastodon/locales/zh-TW.json | 65 +- config/locales/activerecord.es.yml | 18 +- config/locales/activerecord.hi.yml | 16 + config/locales/activerecord.hr.yml | 6 + config/locales/activerecord.ku.yml | 2 +- config/locales/activerecord.sa.yml | 1 + config/locales/activerecord.sv.yml | 4 + config/locales/activerecord.th.yml | 2 +- config/locales/activerecord.tr.yml | 2 +- config/locales/activerecord.zgh.yml | 1 + config/locales/activerecord.zh-HK.yml | 2 +- config/locales/ar.yml | 20 +- config/locales/ast.yml | 5 +- config/locales/bg.yml | 11 - config/locales/bn.yml | 159 ++- config/locales/br.yml | 150 ++- config/locales/ca.yml | 94 +- config/locales/co.yml | 124 ++- config/locales/cs.yml | 7 - config/locales/cy.yml | 34 +- config/locales/da.yml | 246 ++++- config/locales/de.yml | 108 +- config/locales/devise.ca.yml | 23 +- config/locales/devise.co.yml | 21 +- config/locales/devise.da.yml | 11 + config/locales/devise.de.yml | 19 +- config/locales/devise.el.yml | 17 + config/locales/devise.es-AR.yml | 21 +- config/locales/devise.es.yml | 99 +- config/locales/devise.fa.yml | 17 + config/locales/devise.fr.yml | 17 + config/locales/devise.gl.yml | 17 + config/locales/devise.hi.yml | 11 + config/locales/devise.hr.yml | 72 +- config/locales/devise.hu.yml | 17 + config/locales/devise.hy.yml | 89 +- config/locales/devise.id.yml | 17 + config/locales/devise.is.yml | 17 + config/locales/devise.it.yml | 17 + config/locales/devise.ja.yml | 10 + config/locales/devise.ko.yml | 23 +- config/locales/devise.ku.yml | 2 +- config/locales/devise.no.yml | 15 + config/locales/devise.oc.yml | 17 + config/locales/devise.pl.yml | 17 + config/locales/devise.pt-BR.yml | 17 + config/locales/devise.pt-PT.yml | 17 + config/locales/devise.ru.yml | 17 + config/locales/devise.sa.yml | 1 + config/locales/devise.sq.yml | 17 + config/locales/devise.sv.yml | 14 + config/locales/devise.th.yml | 16 +- config/locales/devise.tr.yml | 49 +- config/locales/devise.uk.yml | 17 + config/locales/devise.vi.yml | 23 +- config/locales/devise.zgh.yml | 1 + config/locales/devise.zh-CN.yml | 19 +- config/locales/devise.zh-HK.yml | 26 +- config/locales/doorkeeper.co.yml | 6 +- config/locales/doorkeeper.es-AR.yml | 20 +- config/locales/doorkeeper.es.yml | 152 +-- config/locales/doorkeeper.hi.yml | 29 + config/locales/doorkeeper.hr.yml | 65 +- config/locales/doorkeeper.hy.yml | 143 ++- config/locales/doorkeeper.it.yml | 4 +- config/locales/doorkeeper.ku.yml | 2 +- config/locales/doorkeeper.ml.yml | 1 + config/locales/doorkeeper.oc.yml | 6 +- config/locales/doorkeeper.sa.yml | 1 + config/locales/doorkeeper.sv.yml | 3 + config/locales/doorkeeper.tr.yml | 66 +- config/locales/doorkeeper.vi.yml | 10 +- config/locales/doorkeeper.zgh.yml | 1 + config/locales/doorkeeper.zh-CN.yml | 2 +- config/locales/doorkeeper.zh-HK.yml | 10 +- config/locales/el.yml | 66 +- config/locales/eo.yml | 42 +- config/locales/es-AR.yml | 382 ++++--- config/locales/es.yml | 96 +- config/locales/et.yml | 7 - config/locales/eu.yml | 11 +- config/locales/fa.yml | 82 +- config/locales/fi.yml | 7 - config/locales/fr.yml | 96 +- config/locales/gl.yml | 100 +- config/locales/he.yml | 15 - config/locales/hi.yml | 8 - config/locales/hr.yml | 307 ++++-- config/locales/hu.yml | 98 +- config/locales/hy.yml | 576 ++++++++++- config/locales/id.yml | 260 ++++- config/locales/io.yml | 11 - config/locales/is.yml | 84 +- config/locales/it.yml | 92 +- config/locales/ja.yml | 85 +- config/locales/ka.yml | 7 - config/locales/kab.yml | 94 +- config/locales/kk.yml | 10 +- config/locales/kn.yml | 8 - config/locales/ko.yml | 148 ++- config/locales/lt.yml | 7 - config/locales/lv.yml | 8 - config/locales/mk.yml | 8 - config/locales/ml.yml | 8 - config/locales/mr.yml | 8 - config/locales/ms.yml | 8 - config/locales/nl.yml | 29 +- config/locales/nn.yml | 170 +++- config/locales/no.yml | 100 +- config/locales/oc.yml | 19 +- config/locales/pl.yml | 89 +- config/locales/pt-BR.yml | 92 +- config/locales/pt-PT.yml | 116 ++- config/locales/ro.yml | 7 - config/locales/ru.yml | 80 +- config/locales/sa.yml | 12 + config/locales/sc.yml | 8 - config/locales/simple_form.ar.yml | 4 +- config/locales/simple_form.br.yml | 11 + config/locales/simple_form.ca.yml | 21 + config/locales/simple_form.co.yml | 21 + config/locales/simple_form.cy.yml | 1 + config/locales/simple_form.da.yml | 30 + config/locales/simple_form.de.yml | 31 +- config/locales/simple_form.el.yml | 10 +- config/locales/simple_form.eo.yml | 7 +- config/locales/simple_form.es-AR.yml | 73 +- config/locales/simple_form.es.yml | 21 + config/locales/simple_form.fa.yml | 21 + config/locales/simple_form.fr.yml | 25 +- config/locales/simple_form.gl.yml | 21 + config/locales/simple_form.hr.yml | 60 +- config/locales/simple_form.hu.yml | 21 + config/locales/simple_form.hy.yml | 149 +++ config/locales/simple_form.id.yml | 22 + config/locales/simple_form.is.yml | 20 + config/locales/simple_form.it.yml | 23 +- config/locales/simple_form.ja.yml | 20 +- config/locales/simple_form.kab.yml | 12 + config/locales/simple_form.ko.yml | 21 + config/locales/simple_form.ku.yml | 2 +- config/locales/simple_form.nl.yml | 6 +- config/locales/simple_form.nn.yml | 147 +-- config/locales/simple_form.no.yml | 15 + config/locales/simple_form.oc.yml | 24 +- config/locales/simple_form.pl.yml | 20 + config/locales/simple_form.pt-BR.yml | 26 +- config/locales/simple_form.pt-PT.yml | 21 + config/locales/simple_form.ru.yml | 20 + config/locales/simple_form.sa.yml | 1 + config/locales/simple_form.sq.yml | 21 + config/locales/simple_form.sv.yml | 12 + config/locales/simple_form.ta.yml | 1 + config/locales/simple_form.th.yml | 14 +- config/locales/simple_form.tr.yml | 98 +- config/locales/simple_form.uk.yml | 5 + config/locales/simple_form.vi.yml | 81 +- config/locales/simple_form.zgh.yml | 1 + config/locales/simple_form.zh-CN.yml | 21 + config/locales/simple_form.zh-HK.yml | 23 + config/locales/sk.yml | 12 +- config/locales/sl.yml | 7 - config/locales/sq.yml | 92 +- config/locales/sr-Latn.yml | 7 - config/locales/sr.yml | 7 - config/locales/sv.yml | 87 +- config/locales/szl.yml | 8 - config/locales/ta.yml | 42 +- config/locales/tai.yml | 8 - config/locales/te.yml | 8 - config/locales/th.yml | 92 +- config/locales/tr.yml | 441 +++++--- config/locales/ug.yml | 8 - config/locales/uk.yml | 59 +- config/locales/ur.yml | 8 - config/locales/vi.yml | 364 ++++--- config/locales/zgh.yml | 12 + config/locales/zh-CN.yml | 106 +- config/locales/zh-HK.yml | 40 - config/locales/zh-TW.yml | 33 +- 258 files changed, 10648 insertions(+), 4260 deletions(-) create mode 100644 app/javascript/mastodon/locales/sa.json create mode 100644 app/javascript/mastodon/locales/whitelist_sa.json create mode 100644 app/javascript/mastodon/locales/whitelist_zgh.json create mode 100644 app/javascript/mastodon/locales/zgh.json create mode 100644 config/locales/activerecord.sa.yml create mode 100644 config/locales/activerecord.zgh.yml create mode 100644 config/locales/devise.sa.yml create mode 100644 config/locales/devise.zgh.yml create mode 100644 config/locales/doorkeeper.sa.yml create mode 100644 config/locales/doorkeeper.zgh.yml create mode 100644 config/locales/sa.yml create mode 100644 config/locales/simple_form.sa.yml create mode 100644 config/locales/simple_form.zgh.yml create mode 100644 config/locales/zgh.yml diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index c22fac1fa..5f4160c41 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.direct": "رسالة خاصة إلى @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "النطاق مخفي", "account.edit_profile": "تعديل الملف الشخصي", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.", "account.follows_you": "يتابعك", "account.hide_reblogs": "إخفاء ترقيات @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "إلغاء المتابعة", "account.unmute": "إلغاء الكتم عن @{name}", "account.unmute_notifications": "إلغاء كتم إخطارات @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "انقر لإضافة ملاحظة", "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.", "alert.rate_limited.title": "المعدل محدود", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", "hashtag.column_settings.tag_toggle": "إدراج الوسوم الإضافية لهذا العمود", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "الأساسية", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "اعرض الترقيات", "home.column_settings.show_replies": "اعرض الردود", "home.hide_announcements": "إخفاء الإعلانات", + "home.settings": "Column settings", "home.show_announcements": "إظهار الإعلانات", "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", @@ -326,7 +332,7 @@ "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "اعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "تبويقات جديدة:", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", "notifications.filter.favourites": "المفضلة", @@ -387,6 +393,7 @@ "search_results.statuses": "التبويقات", "search_results.statuses_fts_disabled": "البحث في التبويقات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.", "search_results.total": "{count, number} {count, plural, zero {} one {نتيجة} two {نتيجتين} few {نتائج} many {نتائج} other {نتائج}}", + "standalone.public_title": "A look inside...", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.block": "احجب @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count} مليون", "units.short.thousand": "{count} ألف", "upload_area.title": "اسحب ثم أفلت للرفع", - "upload_button.label": "إضافة وسائط ({formats})", + "upload_button.label": "إضافة وسائط", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index e0b67d6bb..7455c3d46 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Encaboxar la solicitú de siguimientu", "account.direct": "Unviar un mensaxe direutu a @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominiu anubríu", "account.edit_profile": "Editar el perfil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Naide sigue a esti usuariu entá.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Esti usuariu entá nun sigue a naide.", "account.follows_you": "Síguete", "account.hide_reblogs": "Anubrir les comparticiones de @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Dexar de siguir", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes", "hashtag.column_settings.tag_mode.none": "Nenguna d'estes", "hashtag.column_settings.tag_toggle": "Incluyir les etiquetes adicionales d'esta columna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Amosar toots compartíos", "home.column_settings.show_replies": "Amosar rempuestes", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Barritos", "search_results.statuses_fts_disabled": "Esti sirvidor de Mastodon tien activada la gueta de barritos pol so conteníu.", "search_results.total": "{count, number} {count, plural, one {resultáu} other {resultaos}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Bloquiar a @{name}", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 3ffa07a71..c6b5207d1 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Скрит домейн", "account.edit_profile": "Редактирай профила си", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Все още никой не следва този потребител.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Този потребител все още не следва никого.", "account.follows_you": "Твой последовател", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Не следвай", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index ead3d29f1..e4e9de12f 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "নোট", "account.add_or_remove_from_list": "তালিকাতে যুক্ত বা অপসারণ করুন", "account.badges.bot": "বট", - "account.badges.group": "Group", + "account.badges.group": "গ্রুপ", "account.block": "@{name} কে ব্লক করুন", "account.block_domain": "{domain} থেকে সব আড়াল করুন", "account.blocked": "অবরুদ্ধ", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন", "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন", "account.direct": "@{name} কে সরাসরি বার্তা", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ডোমেন গোপন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "অনুসরণ করুন", "account.followers": "অনুসরণকারী", "account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural,one {{counter} জন অনুসরণকারী } other {{counter} জন অনুসরণকারী}}", + "account.following_counter": "{count, plural,one {{counter} জনকে অনুসরণ} other {{counter} জনকে অনুসরণ}}", + "account.follows": "Follows", "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.", "account.follows_you": "আপনাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", @@ -38,19 +40,20 @@ "account.requested": "অনুমতির অপেক্ষা। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন", "account.share": "@{name} র প্রোফাইল অন্যদের দেখান", "account.show_reblogs": "@{name} র সমর্থনগুলো দেখান", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} টুট} other {{counter} টুট}}", "account.unblock": "@{name} র কার্যকলাপ দেখুন", "account.unblock_domain": "{domain} কে আবার দেখুন", "account.unendorse": "আপনার নিজের পাতায় এটা দেখবেন না", "account.unfollow": "অনুসরণ না করতে", "account.unmute": "@{name} র কার্যকলাপ আবার দেখুন", "account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "নোট যোগ করতে ক্লিক করুন", "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", "alert.rate_limited.title": "হার সীমিত", "alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.", "alert.unexpected.title": "ওহো!", - "announcement.announcement": "Announcement", + "announcement.announcement": "ঘোষণা", "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.", @@ -60,7 +63,7 @@ "bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।.", "bundle_modal_error.retry": "আবার চেষ্টা করুন", "column.blocks": "যাদের ব্লক করা হয়েছে", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "বুকমার্ক", "column.community": "স্থানীয় সময়সারি", "column.direct": "সরাসরি লেখা", "column.directory": "প্রোফাইল ব্রাউজ করুন", @@ -81,9 +84,9 @@ "column_header.show_settings": "সেটিং দেখান", "column_header.unpin": "পিন খুলুন", "column_subheading.settings": "সেটিং", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "শুধুমাত্র স্থানীয়", "community.column_settings.media_only": "শুধুমাত্র ছবি বা ভিডিও", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "শুধুমাত্র দূরবর্তী", "compose_form.direct_message_warning": "শুধুমাত্র যাদেরকে উল্লেখ করা হয়েছে তাদেরকেই এই টুটটি পাঠানো হবে ।", "compose_form.direct_message_warning_learn_more": "আরো জানুন", "compose_form.hashtag_warning": "কোনো হ্যাশট্যাগের ভেতরে এই টুটটি থাকবেনা কারণ এটি তালিকাবহির্ভূত। শুধুমাত্র প্রকাশ্য ঠোটগুলো হ্যাশট্যাগের ভেতরে খুঁজে পাওয়া যাবে।", @@ -94,8 +97,8 @@ "compose_form.poll.duration": "ভোটগ্রহনের সময়", "compose_form.poll.option_placeholder": "বিকল্প {number}", "compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "একাধিক পছন্দ অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", + "compose_form.poll.switch_to_single": "একটি একক পছন্দের অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন", "compose_form.publish": "টুট", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে", @@ -152,7 +155,7 @@ "empty_column.account_timeline": "এখানে কোনো টুট নেই!", "empty_column.account_unavailable": "নিজস্ব পাতা নেই", "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "আপনার কাছে এখনও কোনও বুকমার্কড টুট নেই। আপনি যখন একটি বুকমার্ক করেন, এটি এখানে প্রদর্শিত হবে।", "empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!", "empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।", "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।", @@ -175,8 +178,8 @@ "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "follow_request.authorize": "অনুমতি দিন", "follow_request.reject": "প্রত্যাখ্যান করুন", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "আপনার অ্যাকাউন্টটি লক না থাকলেও, {domain} কর্মীরা ভেবেছিলেন যে আপনি এই অ্যাকাউন্টগুলি থেকে ম্যানুয়ালি অনুসরণের অনুরোধগুলি পর্যালোচনা করতে চাইতে পারেন।", + "generic.saved": "সংরক্ষণ হয়েছে", "getting_started.developers": "তৈরিকারকদের জন্য", "getting_started.directory": "নিজস্ব-পাতাগুলির তালিকা", "getting_started.documentation": "নথিপত্র", @@ -194,11 +197,14 @@ "hashtag.column_settings.tag_mode.any": "এর ভেতরে যেকোনোটা", "hashtag.column_settings.tag_mode.none": "এগুলোর একটাও না", "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করতে", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "সাধারণ", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "ঘোষণা লুকান", + "home.settings": "Column settings", + "home.show_announcements": "ঘোষণা দেখান", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}", "intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}", @@ -240,13 +246,13 @@ "keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে", "keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে", "keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "মিডিয়া খলার জন্য", "keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে", "keyboard_shortcuts.profile": "লেখকের পাতা দেখতে", "keyboard_shortcuts.reply": "মতামত দিতে", "keyboard_shortcuts.requests": "অনুসরণ অনুরোধের তালিকা দেখতে", "keyboard_shortcuts.search": "খোঁজার অংশে ফোকাস করতে", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW ক্ষেত্র দেখাবার/লুকবার জন্য", "keyboard_shortcuts.start": "\"প্রথম শুরুর\" কলাম বের করতে", "keyboard_shortcuts.toggle_hidden": "CW লেখা দেখতে বা লুকাতে", "keyboard_shortcuts.toggle_sensitivity": "ভিডিও/ছবি দেখতে বা বন্ধ করতে", @@ -282,7 +288,7 @@ "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "মোবাইলের আপ্প", "navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "বুকমার্ক", "navigation_bar.community_timeline": "স্থানীয় সময়রেখা", "navigation_bar.compose": "নতুন টুট লিখুন", "navigation_bar.direct": "সরাসরি লেখাগুলি", @@ -305,7 +311,7 @@ "navigation_bar.security": "নিরাপত্তা", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", "notification.follow": "{name} আপনাকে অনুসরণ করেছেন", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} আপনাকে অনুসরণ করার জন্য অনুরধ করেছে", "notification.mention": "{name} আপনাকে উল্লেখ করেছেন", "notification.own_poll": "আপনার পোল শেষ হয়েছে", "notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে", @@ -319,7 +325,7 @@ "notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ", "notifications.column_settings.filter_bar.show": "দেখানো", "notifications.column_settings.follow": "নতুন অনুসরণকারীরা:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "অনুসরণের অনুরোধগুলি:", "notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:", "notifications.column_settings.poll": "নির্বাচনের ফলাফল:", "notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি", @@ -367,7 +373,7 @@ "relative_time.just_now": "এখন", "relative_time.minutes": "{number}মিঃ", "relative_time.seconds": "{number} সেকেন্ড", - "relative_time.today": "today", + "relative_time.today": "আজ", "reply_indicator.cancel": "বাতিল করতে", "report.forward": "এটা আরো পাঠান {target} তে", "report.forward_hint": "এই নিবন্ধনটি অন্য একটি সার্ভারে। অপ্রকাশিতনামাভাবে রিপোর্টের কপি সেখানেও কি পাঠাতে চান ?", @@ -387,10 +393,11 @@ "search_results.statuses": "টুট", "search_results.statuses_fts_disabled": "তাদের সামগ্রী দ্বারা টুটগুলি অনুসন্ধান এই মস্তোডন সার্ভারে সক্ষম নয়।", "search_results.total": "{count, number} {count, plural, one {ফলাফল} other {ফলাফল}}", + "standalone.public_title": "A look inside...", "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", "status.block": "@{name} কে ব্লক করুন", - "status.bookmark": "Bookmark", + "status.bookmark": "বুকমার্ক", "status.cancel_reblog_private": "সমর্থন বাতিল করতে", "status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা", "status.copy": "লেখাটির লিংক কপি করতে", @@ -415,7 +422,7 @@ "status.reblogged_by": "{name} সমর্থন দিয়েছে", "status.reblogs.empty": "এখনো কেও এটাতে সমর্থন দেয়নি। যখন কেও দেয়, সেটা তখন এখানে দেখা যাবে।", "status.redraft": "মুছে আবার নতুন করে লিখতে", - "status.remove_bookmark": "Remove bookmark", + "status.remove_bookmark": "বুকমার্ক সরান", "status.reply": "মতামত জানাতে", "status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে", "status.report": "@{name} কে রিপোর্ট করতে", @@ -441,29 +448,29 @@ "time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে", "time_remaining.moments": "সময় বাকি আছে", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "অন্য সার্ভারগুলি থেকে {resource} দেখাচ্ছে না। ", + "timeline_hint.resources.followers": "অনুসরকারীরা", + "timeline_hint.resources.follows": "অনুসরণ করে", + "timeline_hint.resources.statuses": "পুরনো টুটগুলি", + "trends.counter_by_accounts": "{count, plural,one {{counter} জন ব্যক্তি} other {{counter} জন লোক}} কথা বলছে", "trends.trending_now": "বর্তমানে জনপ্রিয়", "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}বিলিয়ন", + "units.short.million": "{count}মিলিওন", + "units.short.thousand": "{count}হাজার", "upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে", "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।", "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "শ্রবণশক্তি লোকদের জন্য বর্ণনা করুন", "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে", "upload_form.edit": "সম্পাদন", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "থাম্বনেল পরিবর্তন করুন", "upload_form.undo": "মুছে ফেলতে", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "শ্রবণশক্তি হ্রাস বা চাক্ষুষ প্রতিবন্ধী ব্যক্তিদের জন্য বর্ণনা করুন", "upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…", "upload_modal.apply": "প্রয়োগ করুন", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "ছবি নির্বাচন করুন", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন", "upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index bb1461354..774296f23 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Nullañ ar bedadenn heuliañ", "account.direct": "Kas ur gemennadenn da @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domani berzet", "account.edit_profile": "Aozañ ar profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Den na heul an implijer-mañ c'hoazh.", "account.followers_counter": "{count, plural, other{{counter} Heulier}}", "account.following_counter": "{count, plural, other {{counter} Heuliañ}}", + "account.follows": "Follows", "account.follows.empty": "An implijer·ez-mañ na heul den ebet.", "account.follows_you": "Ho heul", "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Diheuliañ", "account.unmute": "Diguzhat @{name}", "account.unmute_notifications": "Diguzhat kemennoù a @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikit evit ouzhpenniñ un notenn", "alert.rate_limited.message": "Klaskit en-dro a-benn {retry_time, time, medium}.", "alert.rate_limited.title": "Feur bevennet", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Unan e mesk anezho", "hashtag.column_settings.tag_mode.none": "Hini ebet anezho", "hashtag.column_settings.tag_toggle": "Endelc'her gerioù-alc'hwez ouzhpenn evit ar bannad-mañ", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Diazez", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Diskouez ar skignadennoù", "home.column_settings.show_replies": "Diskouez ar respontoù", "home.hide_announcements": "Kuzhat ar c'hemennoù", + "home.settings": "Column settings", "home.show_announcements": "Diskouez ar c'hemennoù", "intervals.full.days": "{number, plural, one {# devezh} other{# a zevezhioù}}", "intervals.full.hours": "{number, plural, one {# eurvezh} other{# eurvezh}}", @@ -304,7 +310,7 @@ "navigation_bar.public_timeline": "Red-amzer kevreet", "navigation_bar.security": "Diogelroez", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", + "notification.follow": "heuliañ a ra {name} ac'hanoc'h", "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", "notification.own_poll": "Your poll has ended", @@ -387,6 +393,7 @@ "search_results.statuses": "a doudoù", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Berzañ @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Ouzhpennañ ur media ({formats})", + "upload_button.label": "Ouzhpennañ ur media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 9bb17241a..844992938 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "La teva nota per a @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Afegir o Treure de les llistes", "account.badges.bot": "Bot", "account.badges.group": "Grup", @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Navega més en el perfil original", "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.direct": "Missatge directe @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Deixa de notificar-me els tuts de @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domini ocult", "account.edit_profile": "Edita el perfil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Notifica’m els tuts de @{name}", "account.endorse": "Recomana en el teu perfil", "account.follow": "Segueix", "account.followers": "Seguidors", "account.followers.empty": "Encara ningú no segueix aquest usuari.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", "account.following_counter": "{count, plural, other {{counter} Seguint}}", + "account.follows": "Follows", "account.follows.empty": "Aquest usuari encara no segueix a ningú.", "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Deixa de seguir", "account.unmute": "Treure silenci de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Sense comentaris", "alert.rate_limited.message": "Si us plau torna-ho a provar després de {retry_time, time, medium}.", "alert.rate_limited.title": "Límit de freqüència", @@ -168,9 +171,9 @@ "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho", "error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina podria no ser mostrada correctament.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una app nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.explanation_addons": "Aquesta pàgina podria no mostrar-se correctament. Aquest error és possiblement causat per una extensió del navegador o per eienes automàtiques de traducció.", + "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una aplicació nativa.", + "error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls", "errors.unexpected_crash.report_issue": "Informa d'un problema", "follow_request.authorize": "Autoritzar", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", "home.hide_announcements": "Amaga els anuncis", + "home.settings": "Column settings", "home.show_announcements": "Mostra els anuncis", "intervals.full.days": "{number, plural, one {# dia} other {# dies}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "descentrar l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "moure amunt en la llista", "lightbox.close": "Tancar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Quadre de visualització d’imatge comprimida", + "lightbox.expand": "Amplia el quadre de visualització de l’imatge", "lightbox.next": "Següent", "lightbox.previous": "Anterior", "lightbox.view_context": "Veure el context", @@ -266,10 +272,10 @@ "lists.edit.submit": "Canvi de títol", "lists.new.create": "Afegir llista", "lists.new.title_placeholder": "Nova llista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Qualsevol usuari seguit", + "lists.replies_policy.list_replies": "Membres de la llista", + "lists.replies_policy.no_replies": "Ningú", + "lists.replies_policy.title": "Mostra respostes a:", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Alternar visibilitat", "missing_indicator.label": "No trobat", "missing_indicator.sublabel": "Aquest recurs no pot ser trobat", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indefinit", "navigation_bar.apps": "Apps mòbils", "navigation_bar.blocks": "Usuaris bloquejats", "navigation_bar.bookmarks": "Marcadors", @@ -310,7 +316,7 @@ "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en la que has votat", "notification.reblog": "{name} ha impulsat el teu estat", - "notification.status": "{name} just posted", + "notification.status": "ha publicat {name}", "notifications.clear": "Netejar notificacions", "notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?", "notifications.column_settings.alert": "Notificacions d'escriptori", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostra en la columna", "notifications.column_settings.sound": "Reproduir so", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nous tuts:", "notifications.filter.all": "Tots", "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats de l'enquesta", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Actualitzacions de gent que segueixes", "notifications.group": "{count} notificacions", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marca cada notificació com a llegida", + "notifications.permission_denied": "No s’ha pogut activar les notificacions d’escriptori perquè s’ha denegat el permís.", + "notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans", + "notifications_permission_banner.enable": "Activar les notificacions d’escriptori", + "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", + "notifications_permission_banner.title": "Mai et perdis res", + "picture_in_picture.restore": "Retorna’l", "poll.closed": "Finalitzada", "poll.refresh": "Actualitza", "poll.total_people": "{count, plural, one {# persona} other {# persones}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "La cerca de tuts pel seu contingut no està habilitada en aquest servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_status": "Obre aquest tut a la interfície de moderació", "status.block": "Bloqueja @{name}", @@ -464,11 +471,11 @@ "upload_modal.analyzing_picture": "Analitzant imatge…", "upload_modal.apply": "Aplica", "upload_modal.choose_image": "Tria imatge", - "upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul", + "upload_modal.description_placeholder": "Jove xef, porti whisky amb quinze glaçons d’hidrogen, coi!", "upload_modal.detect_text": "Detecta el text de l'imatge", "upload_modal.edit_media": "Editar multimèdia", "upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparant OCR…", "upload_modal.preview_label": "Previsualitza ({ratio})", "upload_progress.label": "Pujant...", "video.close": "Tancar el vídeo", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 4856a2ba3..666f8eb53 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "A vostra nota per @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste", "account.badges.bot": "Bot", "account.badges.group": "Gruppu", @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Vede di più nant'à u prufile uriginale", "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu", "account.direct": "Missaghju direttu @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Duminiu piattatu", "account.edit_profile": "Mudificà u prufile", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Nutificate mi quandu @{name} pubblica qualcosa", "account.endorse": "Fà figurà nant'à u prufilu", "account.follow": "Siguità", "account.followers": "Abbunati", "account.followers.empty": "Nisunu hè abbunatu à st'utilizatore.", "account.followers_counter": "{count, plural, one {{counter} Abbunatu} other {{counter} Abbunati}}", "account.following_counter": "{count, plural, one {{counter} Abbunamentu} other {{counter} Abbunamenti}}", + "account.follows": "Follows", "account.follows.empty": "St'utilizatore ùn seguita nisunu.", "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Ùn siguità più", "account.unmute": "Ùn piattà più @{name}", "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Senza cummentariu", "alert.rate_limited.message": "Pruvate ancu dop'à {retry_time, time, medium}.", "alert.rate_limited.title": "Ghjettu limitatu", @@ -98,9 +101,9 @@ "compose_form.poll.switch_to_single": "Cambià u scandagliu per ùn accittà ch'una scelta", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Indicà u media cum'è sensibile", - "compose_form.sensitive.marked": "Media indicatu cum'è sensibile", - "compose_form.sensitive.unmarked": "Media micca indicatu cum'è sensibile", + "compose_form.sensitive.hide": "{count, plural, one {Indicà u media cum'è sensibile} other {Indicà i media cum'è sensibili}}", + "compose_form.sensitive.marked": "{count, plural, one {Media indicatu cum'è sensibile} other {Media indicati cum'è sensibili}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media micca indicatu cum'è sensibile} other {Media micca indicati cum'è sensibili}}", "compose_form.spoiler.marked": "Testu piattatu daret'à un'avertimentu", "compose_form.spoiler.unmarked": "Testu micca piattatu", "compose_form.spoiler_placeholder": "Scrive u vostr'avertimentu quì", @@ -168,9 +171,9 @@ "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.", "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica", "error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Sta pagina ùn hè micca pussuta esse affissata currettamente, prubabilmente per via d'un'estenzione di navigatore o d'un lugiziale di traduzione.", "error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Pruvate di disattivà quelli è poi attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", "errors.unexpected_crash.report_issue": "Palisà prublemu", "follow_request.authorize": "Auturizà", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Unu di quessi", "hashtag.column_settings.tag_mode.none": "Nisunu di quessi", "hashtag.column_settings.tag_toggle": "Inchjude tag addiziunali per sta colonna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsichi", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_replies": "Vede e risposte", "home.hide_announcements": "Piattà annunzii", + "home.settings": "Column settings", "home.show_announcements": "Vede annunzii", "intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu", "keyboard_shortcuts.up": "cullà indè a lista", "lightbox.close": "Chjudà", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Cumprime a finestra d'affissera di i ritratti", + "lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", "lightbox.view_context": "Vede u cuntestu", @@ -266,20 +272,20 @@ "lists.edit.submit": "Cambià u titulu", "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Tutti i vostri abbunamenti", + "lists.replies_policy.list_replies": "Membri di a lista", + "lists.replies_policy.no_replies": "Nisunu", + "lists.replies_policy.title": "Vede e risposte à:", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}", "loading_indicator.label": "Caricamentu...", - "media_gallery.toggle_visible": "Cambià a visibilità", + "media_gallery.toggle_visible": "Piattà {number, plural, one {ritrattu} other {ritratti}}", "missing_indicator.label": "Micca trovu", "missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durata", "mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indifinita", "navigation_bar.apps": "Applicazione per u telefuninu", "navigation_bar.blocks": "Utilizatori bluccati", "navigation_bar.bookmarks": "Segnalibri", @@ -310,7 +316,7 @@ "notification.own_poll": "U vostru scandagliu hè compiu", "notification.poll": "Un scandagliu induve avete vutatu hè finitu", "notification.reblog": "{name} hà spartutu u vostru statutu", - "notification.status": "{name} just posted", + "notification.status": "{name} hà appena pubblicatu", "notifications.clear": "Purgà e nutificazione", "notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?", "notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.sound": "Sunà", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Statuti novi:", "notifications.filter.all": "Tuttu", "notifications.filter.boosts": "Spartere", "notifications.filter.favourites": "Favuriti", "notifications.filter.follows": "Abbunamenti", "notifications.filter.mentions": "Minzione", "notifications.filter.polls": "Risultati di u scandagliu", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate", "notifications.group": "{count} nutificazione", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette", + "notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè a dumanda d'auturizazione hè stata ricusata", + "notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore", + "notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore", + "notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.", + "notifications_permission_banner.title": "Ùn mancate mai nunda", + "picture_in_picture.restore": "Rimette in piazza", "poll.closed": "Chjosu", "poll.refresh": "Attualizà", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -374,7 +380,7 @@ "report.hint": "U signalamentu sarà mandatu à i muderatori di u servore. Pudete spiegà perchè avete palisatu stu contu quì sottu:", "report.placeholder": "Altri cummenti", "report.submit": "Mandà", - "report.target": "Signalamentu", + "report.target": "Signalamentu di {target}", "search.placeholder": "Circà", "search_popout.search_format": "Ricerca avanzata", "search_popout.tips.full_text": "I testi simplici rimandanu i statuti ch'avete scritti, aghjunti à i vostri favuriti, spartuti o induve quelli site mintuvatu·a, è ancu i cugnomi, nomi pubblichi è hashtag chì currispondenu.", @@ -387,6 +393,7 @@ "search_results.statuses": "Statuti", "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.block": "Bluccà @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & drop per caricà un fugliale", - "upload_button.label": "Aghjunghje un media ({formats})", + "upload_button.label": "Aghjunghje un media", "upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_form.audio_description": "Discrizzione per i ciochi", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Ditettà testu da u ritrattu", "upload_modal.edit_media": "Cambià media", "upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Priparazione di l'OCR…", "upload_modal.preview_label": "Vista ({ratio})", "upload_progress.label": "Caricamentu...", "video.close": "Chjudà a video", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 9f223d724..48abbec37 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Zrušit žádost o sledování", "account.direct": "Poslat uživateli @{name} přímou zprávu", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Přestat sledovat", "account.unmute": "Odkrýt uživatele @{name}", "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Zkuste to prosím znovu za {retry_time, time, medium}.", "alert.rate_limited.title": "Rychlost omezena", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", "hashtag.column_settings.tag_mode.none": "Žádné z těchto", "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci dodatečné tagy", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Základní", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", "home.hide_announcements": "Skrýt oznámení", + "home.settings": "Column settings", "home.show_announcements": "Zobrazit oznámení", "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tooty", "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledků} other {výsledků}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}", "status.admin_status": "Otevřít tento toot v moderátorském rozhraní", "status.block": "Zablokovat uživatele @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Nahrajte přetažením", - "upload_button.label": "Přidat média ({formats})", + "upload_button.label": "Přidat média", "upload_error.limit": "Byl překročen limit nahraných souborů.", "upload_error.poll": "U anket není nahrávání souborů povoleno.", "upload_form.audio_description": "Popis pro sluchově postižené", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 4e961b225..85e968e95 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Nodyn", "account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau", "account.badges.bot": "Bot", "account.badges.group": "Grŵp", "account.block": "Blocio @{name}", "account.block_domain": "Cuddio popeth rhag {domain}", "account.blocked": "Blociwyd", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol", "account.cancel_follow_request": "Canslo cais dilyn", "account.direct": "Neges breifat @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Parth wedi ei guddio", "account.edit_profile": "Golygu proffil", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "Dilyn", "account.followers": "Dilynwyr", "account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}", + "account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}", + "account.follows": "Follows", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", @@ -38,14 +40,15 @@ "account.requested": "Aros am gymeradwyaeth. Cliciwch er mwyn canslo cais dilyn", "account.share": "Rhannwch broffil @{name}", "account.show_reblogs": "Dangos bwstiau o @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Dŵt} other {{counter} o Dŵtiau}}", "account.unblock": "Dadflocio @{name}", "account.unblock_domain": "Dadguddio {domain}", "account.unendorse": "Peidio a'i arddangos ar fy mhroffil", "account.unfollow": "Dad-ddilyn", "account.unmute": "Dad-dawelu @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Clicio i ychwanegu nodyn", "alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.", "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", @@ -176,7 +179,7 @@ "follow_request.authorize": "Caniatau", "follow_request.reject": "Gwrthod", "follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, oedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.", - "generic.saved": "Saved", + "generic.saved": "Wedi'i Gadw", "getting_started.developers": "Datblygwyr", "getting_started.directory": "Cyfeiriadur proffil", "getting_started.documentation": "Dogfennaeth", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Syml", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Dangos bŵstiau", "home.column_settings.show_replies": "Dangos ymatebion", "home.hide_announcements": "Cuddio cyhoeddiadau", + "home.settings": "Column settings", "home.show_announcements": "Dangos cyhoeddiadau", "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}", "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "i ateb", "keyboard_shortcuts.requests": "i agor rhestr ceisiadau dilyn", "keyboard_shortcuts.search": "i ffocysu chwilio", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "i ddangos/cuddio'r maes CW", "keyboard_shortcuts.start": "i agor colofn \"dechrau arni\"", "keyboard_shortcuts.toggle_hidden": "i ddangos/cuddio testun tu ôl i CW", "keyboard_shortcuts.toggle_sensitivity": "i ddangos/gyddio cyfryngau", @@ -387,6 +393,7 @@ "search_results.statuses": "Tŵtiau", "search_results.statuses_fts_disabled": "Nid yw chwilio Tŵtiau yn ôl eu cynnwys wedi'i alluogi ar y gweinydd Mastodon hwn.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}", "status.admin_status": "Agor y tŵt yn y rhyngwyneb goruwchwylio", "status.block": "Blocio @{name}", @@ -441,16 +448,16 @@ "time_remaining.minutes": "{number, plural, one {# funud} other {# o funudau}} ar ôl", "time_remaining.moments": "Munudau ar ôl", "time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "ni chaiff {resource} o gweinyddion eraill ei ddangos.", + "timeline_hint.resources.followers": "Dilynwyr", + "timeline_hint.resources.follows": "Yn dilyn", + "timeline_hint.resources.statuses": "Tŵtiau henach", + "trends.counter_by_accounts": "{count, plural, one {{counter} berson} other {{counter} o bobl}}", "trends.trending_now": "Yn tueddu nawr", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}biliwn", + "units.short.million": "{count}miliwn", + "units.short.thousand": "{count}mil", "upload_area.title": "Llusgwch & gollwing i uwchlwytho", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", @@ -458,12 +465,12 @@ "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", "upload_form.edit": "Golygu", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Newid mân-lun", "upload_form.undo": "Dileu", "upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg", "upload_modal.analyzing_picture": "Dadansoddi llun…", "upload_modal.apply": "Gweithredu", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Dewis delwedd", "upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau", "upload_modal.detect_text": "Canfod testun o'r llun", "upload_modal.edit_media": "Golygu cyfryngau", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index f8319ca18..33a442980 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -6,19 +6,21 @@ "account.block": "Bloker @{name}", "account.block_domain": "Skjul alt fra {domain}", "account.blocked": "Blokeret", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Gennemse mere på den oprindelige profil", "account.cancel_follow_request": "Annullér følgeranmodning", "account.direct": "Send en direkte besked til @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domænet er blevet skjult", "account.edit_profile": "Rediger profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Giv mig besked når @{name} lægger noget op", "account.endorse": "Fremhæv på profil", "account.follow": "Følg", "account.followers": "Følgere", "account.followers.empty": "Der er endnu ingen der følger denne bruger.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}", @@ -45,12 +47,13 @@ "account.unfollow": "Følg ikke længere", "account.unmute": "Fjern dæmpningen af @{name}", "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Prøv venligst igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Gradsbegrænset", "alert.unexpected.message": "Der opstod en uventet fejl.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Bekendtgørelse", "autosuggest_hashtag.per_week": "{count} per uge", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.", @@ -81,9 +84,9 @@ "column_header.show_settings": "Vis indstillinger", "column_header.unpin": "Fastgør ikke længere", "column_subheading.settings": "Indstillinger", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Kun lokalt", "community.column_settings.media_only": "Kun medie", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Kun fjernt", "compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.", "compose_form.direct_message_warning_learn_more": "Lær mere", "compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.", @@ -94,8 +97,8 @@ "compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.option_placeholder": "Valgmulighed {number}", "compose_form.poll.remove_option": "Fjern denne valgmulighed", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "Ændre afstemning for at tillade flere valg", + "compose_form.poll.switch_to_single": "Ændre afstemning for at tillade et enkelt valg", "compose_form.publish": "Trut", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Markér medie som følsomt", @@ -175,8 +178,8 @@ "errors.unexpected_crash.report_issue": "Rapportér problem", "follow_request.authorize": "Godkend", "follow_request.reject": "Afvis", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, troede {domain} -personalet, at du måske vil gennemgå dine anmodninger manuelt.", + "generic.saved": "Gemt", "getting_started.developers": "Udviklere", "getting_started.directory": "Profilliste", "getting_started.documentation": "Dokumentation", @@ -194,11 +197,14 @@ "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Grundlæggende", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "Skjul bekendtgørelser", + "home.settings": "Column settings", + "home.show_announcements": "Vis bekendtgørelser", "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", @@ -240,13 +246,13 @@ "keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere", "keyboard_shortcuts.my_profile": "for at åbne din profil", "keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "for at åbne medier", "keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut", "keyboard_shortcuts.profile": "til profil af åben forfatter", "keyboard_shortcuts.reply": "for at svare", "keyboard_shortcuts.requests": "for at åbne listen over følgeranmodninger", "keyboard_shortcuts.search": "for at fokusere søgningen", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "for at vise/skjule CW-felt", "keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen", "keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW", "keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier", @@ -266,10 +272,10 @@ "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", "lists.new.title_placeholder": "Ny liste titel", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Enhver fulgt bruger", + "lists.replies_policy.list_replies": "Medlemmer af listen", + "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.title": "Vis svar til:", "lists.search": "Søg iblandt folk du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Ændre synlighed", "missing_indicator.label": "Ikke fundet", "missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Varighed", "mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Uendeligt", "navigation_bar.apps": "Mobil apps", "navigation_bar.blocks": "Blokerede brugere", "navigation_bar.bookmarks": "Bogmærker", @@ -305,12 +311,12 @@ "navigation_bar.security": "Sikkerhed", "notification.favourite": "{name} favoriserede din status", "notification.follow": "{name} fulgte dig", - "notification.follow_request": "{name} has requested to follow you", + "notification.follow_request": "{name} har anmodet om at følge dig", "notification.mention": "{name} nævnte dig", "notification.own_poll": "Din afstemning er afsluttet", "notification.poll": "En afstemning, du stemte i, er slut", "notification.reblog": "{name} boostede din status", - "notification.status": "{name} just posted", + "notification.status": "{name} har lige lagt noget op", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?", "notifications.column_settings.alert": "Skrivebordsnotifikationer", @@ -319,29 +325,29 @@ "notifications.column_settings.filter_bar.category": "Hurtigfilter", "notifications.column_settings.filter_bar.show": "Vis", "notifications.column_settings.follow": "Nye følgere:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "Nye følgeranmodninger:", "notifications.column_settings.mention": "Statusser der nævner dig:", "notifications.column_settings.poll": "Afstemningsresultat:", "notifications.column_settings.push": "Pushnotifikationer", "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nye toots:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", "notifications.filter.mentions": "Statusser der nævner dig", "notifications.filter.polls": "Afstemningsresultat", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Opdateringer fra personer, du følger", "notifications.group": "{count} notifikationer", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Markér alle notifikationer som læst", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Gå aldrig glip af noget", + "picture_in_picture.restore": "Sæt den tilbage", "poll.closed": "Lukket", "poll.refresh": "Opdatér", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Trut", "search_results.statuses_fts_disabled": "Denne Mastodonserver har ikke aktiveret for søgning af statusser via deres indhold.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Åben modereringsvisning for @{name}", "status.admin_status": "Åben denne status i modereringsvisningen", "status.block": "Bloker @{name}", @@ -441,10 +448,10 @@ "time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage", "time_remaining.moments": "Få øjeblikke tilbage", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.", + "timeline_hint.resources.followers": "Følgere", + "timeline_hint.resources.follows": "Følger", + "timeline_hint.resources.statuses": "Ældre toots", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Hot lige nu", "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.", @@ -455,20 +462,20 @@ "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Uploadgrænse overskredet.", "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "Beskriv for personer med høretab", "upload_form.description": "Beskriv for svagtseende", "upload_form.edit": "Redigér", "upload_form.thumbnail": "Change thumbnail", "upload_form.undo": "Slet", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Beskriv for personer med høretab eller nedsat syn", "upload_modal.analyzing_picture": "Analyserer billede…", "upload_modal.apply": "Anvend", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Vælg billede", "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", "upload_modal.detect_text": "Find tekst i billede på automatisk vis", "upload_modal.edit_media": "Redigér medie", "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Forbereder OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Uploader...", "video.close": "Luk video", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 6dcb0185e..4ce1b29e6 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -1,24 +1,26 @@ { - "account.account_note_header": "Deine Notiz für @{name}", + "account.account_note_header": "Notiz", "account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen", "account.badges.bot": "Bot", "account.badges.group": "Gruppe", "account.block": "@{name} blockieren", - "account.block_domain": "Alles von {domain} blockieren", + "account.block_domain": "Alles von {domain} verstecken", "account.blocked": "Blockiert", "account.browse_more_on_origin_server": "Mehr auf dem Originalprofil durchsuchen", "account.cancel_follow_request": "Folgeanfrage abbrechen", "account.direct": "Direktnachricht an @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet", "account.endorse": "Auf Profil hervorheben", "account.follow": "Folgen", "account.followers": "Folgende", "account.followers.empty": "Diesem Profil folgt noch niemand.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following_counter": "{count, plural, one {{counter} Folgender} other {{counter} Folgende}}", + "account.follows": "Follows", "account.follows.empty": "Dieses Profil folgt noch niemandem.", "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", @@ -40,12 +42,13 @@ "account.show_reblogs": "Von @{name} geteilte Beiträge anzeigen", "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "account.unblock": "@{name} entblocken", - "account.unblock_domain": "Blockieren von {domain} beenden", + "account.unblock_domain": "{domain} wieder anzeigen", "account.unendorse": "Nicht auf Profil hervorheben", "account.unfollow": "Entfolgen", "account.unmute": "@{name} nicht mehr stummschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", - "account_note.placeholder": "Kein Kommentar angegeben", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Notiz durch Klicken hinzufügen", "alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.", "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", @@ -64,7 +67,7 @@ "column.community": "Lokale Zeitleiste", "column.direct": "Direktnachrichten", "column.directory": "Profile durchsuchen", - "column.domain_blocks": "Versteckte Domains", + "column.domain_blocks": "Blockierte Domains", "column.favourites": "Favoriten", "column.follow_requests": "Folgeanfragen", "column.home": "Startseite", @@ -96,11 +99,11 @@ "compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben", "compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben", - "compose_form.publish": "Beitrag", + "compose_form.publish": "Tröt", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Medien als heikel markieren", - "compose_form.sensitive.marked": "Medien sind als heikel markiert", - "compose_form.sensitive.unmarked": "Medien sind nicht als heikel markiert", + "compose_form.sensitive.hide": "Medien als NSFW markieren", + "compose_form.sensitive.marked": "Medien sind als NSFW markiert", + "compose_form.sensitive.unmarked": "Medien sind nicht als NSFW markiert", "compose_form.spoiler.marked": "Text ist hinter einer Warnung versteckt", "compose_form.spoiler.unmarked": "Text ist nicht versteckt", "compose_form.spoiler_placeholder": "Inhaltswarnung", @@ -167,10 +170,10 @@ "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen", - "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browser-Inkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.explanation_addons": "Diese Seite konnte nicht korrekt angezeigt werden. Dieser Fehler wird wahrscheinlich durch ein Browser-Add-on oder automatische Übersetzungswerkzeuge verursacht.", "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.", "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Problem melden", "follow_request.authorize": "Erlauben", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Eins von diesen", "hashtag.column_settings.tag_mode.none": "Keins von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Einfach", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", "home.hide_announcements": "Verstecke Ankündigungen", + "home.settings": "Column settings", "home.show_announcements": "Zeige Ankündigungen", "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}", "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "sich in der Liste hinauf bewegen", "lightbox.close": "Schließen", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Bildansicht komprimieren", + "lightbox.expand": "Bildansicht erweitern", "lightbox.next": "Weiter", "lightbox.previous": "Zurück", "lightbox.view_context": "Beitrag sehen", @@ -266,10 +272,10 @@ "lists.edit.submit": "Titel ändern", "lists.new.create": "Liste hinzufügen", "lists.new.title_placeholder": "Neuer Titel der Liste", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Jeder gefolgte Benutzer", + "lists.replies_policy.list_replies": "Mitglieder der Liste", + "lists.replies_policy.no_replies": "Niemand", + "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Sichtbarkeit umschalten", "missing_indicator.label": "Nicht gefunden", "missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Dauer", "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Unbestimmt", "navigation_bar.apps": "Mobile Apps", "navigation_bar.blocks": "Blockierte Profile", "navigation_bar.bookmarks": "Lesezeichen", @@ -310,7 +316,7 @@ "notification.own_poll": "Deine Umfrage ist beendet", "notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei", "notification.reblog": "{name} hat deinen Beitrag geteilt", - "notification.status": "{name} just posted", + "notification.status": "{name} hat gerade etwas gepostet", "notifications.clear": "Mitteilungen löschen", "notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Neue Beiträge:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Geteilte Beiträge", "notifications.filter.favourites": "Favorisierungen", "notifications.filter.follows": "Folgt", "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Updates von Personen, denen du folgst", "notifications.group": "{count} Benachrichtigungen", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", + "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", + "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", + "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", + "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", + "notifications_permission_banner.title": "Verpasse nie etwas", + "picture_in_picture.restore": "Zurücksetzen", "poll.closed": "Geschlossen", "poll.refresh": "Aktualisieren", "poll.total_people": "{count, plural, one {# Person} other {# Personen}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Beiträge", "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", "status.block": "Blockiere @{name}", @@ -419,7 +426,7 @@ "status.reply": "Antworten", "status.replyAll": "Allen antworten", "status.report": "@{name} melden", - "status.sensitive_warning": "Heikle Inhalte", + "status.sensitive_warning": "NSFW", "status.share": "Teilen", "status.show_less": "Weniger anzeigen", "status.show_less_all": "Alle Inhaltswarnungen zuklappen", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Zum Hochladen hereinziehen", - "upload_button.label": "Mediendatei hinzufügen ({formats})", + "upload_button.label": "Mediendatei hinzufügen", "upload_error.limit": "Dateiupload-Limit erreicht.", "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.", "upload_form.audio_description": "Beschreibe die Audiodatei für Menschen mit Hörschädigungen", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Text aus Bild erkennen", "upload_modal.edit_media": "Medien bearbeiten", "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Vorbereitung von OCR…", "upload_modal.preview_label": "Vorschau ({ratio})", "upload_progress.label": "Wird hochgeladen …", "video.close": "Video schließen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index c49c6399d..e64832300 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -541,6 +541,19 @@ ], "path": "app/javascript/mastodon/components/status_content.json" }, + { + "descriptors": [ + { + "defaultMessage": "Loading…", + "id": "regeneration_indicator.label" + }, + { + "defaultMessage": "Your home feed is being prepared!", + "id": "regeneration_indicator.sublabel" + } + ], + "path": "app/javascript/mastodon/components/status_list.json" + }, { "descriptors": [ { @@ -740,6 +753,143 @@ ], "path": "app/javascript/mastodon/features/account/components/account_note.json" }, + { + "descriptors": [ + { + "defaultMessage": "Mention @{name}", + "id": "account.mention" + }, + { + "defaultMessage": "Direct message @{name}", + "id": "account.direct" + }, + { + "defaultMessage": "Edit profile", + "id": "account.edit_profile" + }, + { + "defaultMessage": "Unblock @{name}", + "id": "account.unblock" + }, + { + "defaultMessage": "Unfollow", + "id": "account.unfollow" + }, + { + "defaultMessage": "Unmute @{name}", + "id": "account.unmute" + }, + { + "defaultMessage": "Block @{name}", + "id": "account.block" + }, + { + "defaultMessage": "Mute @{name}", + "id": "account.mute" + }, + { + "defaultMessage": "Follow", + "id": "account.follow" + }, + { + "defaultMessage": "Report @{name}", + "id": "account.report" + }, + { + "defaultMessage": "Share @{name}'s profile", + "id": "account.share" + }, + { + "defaultMessage": "Media", + "id": "account.media" + }, + { + "defaultMessage": "Hide everything from {domain}", + "id": "account.block_domain" + }, + { + "defaultMessage": "Unhide {domain}", + "id": "account.unblock_domain" + }, + { + "defaultMessage": "Hide boosts from @{name}", + "id": "account.hide_reblogs" + }, + { + "defaultMessage": "Show boosts from @{name}", + "id": "account.show_reblogs" + }, + { + "defaultMessage": "Pinned toots", + "id": "navigation_bar.pins" + }, + { + "defaultMessage": "Preferences", + "id": "navigation_bar.preferences" + }, + { + "defaultMessage": "Follow requests", + "id": "navigation_bar.follow_requests" + }, + { + "defaultMessage": "Favourites", + "id": "navigation_bar.favourites" + }, + { + "defaultMessage": "Lists", + "id": "navigation_bar.lists" + }, + { + "defaultMessage": "Blocked users", + "id": "navigation_bar.blocks" + }, + { + "defaultMessage": "Hidden domains", + "id": "navigation_bar.domain_blocks" + }, + { + "defaultMessage": "Muted users", + "id": "navigation_bar.mutes" + }, + { + "defaultMessage": "Feature on profile", + "id": "account.endorse" + }, + { + "defaultMessage": "Don't feature on profile", + "id": "account.unendorse" + }, + { + "defaultMessage": "Add or Remove from lists", + "id": "account.add_or_remove_from_list" + }, + { + "defaultMessage": "Open moderation interface for @{name}", + "id": "status.admin_account" + }, + { + "defaultMessage": "Information below may reflect the user's profile incompletely.", + "id": "account.disclaimer_full" + }, + { + "defaultMessage": "View full profile", + "id": "account.view_full_profile" + }, + { + "defaultMessage": "Toots", + "id": "account.posts" + }, + { + "defaultMessage": "Follows", + "id": "account.follows" + }, + { + "defaultMessage": "Followers", + "id": "account.followers" + } + ], + "path": "app/javascript/mastodon/features/account/components/action_bar.json" + }, { "descriptors": [ { @@ -1310,6 +1460,15 @@ ], "path": "app/javascript/mastodon/features/compose/components/upload_form.json" }, + { + "descriptors": [ + { + "defaultMessage": "Uploading...", + "id": "upload_progress.label" + } + ], + "path": "app/javascript/mastodon/features/compose/components/upload_progress.json" + }, { "descriptors": [ { @@ -1436,6 +1595,23 @@ ], "path": "app/javascript/mastodon/features/compose/index.json" }, + { + "descriptors": [ + { + "defaultMessage": "Filter out by regular expressions", + "id": "home.column_settings.filter_regex" + }, + { + "defaultMessage": "Column settings", + "id": "home.settings" + }, + { + "defaultMessage": "Advanced", + "id": "home.column_settings.advanced" + } + ], + "path": "app/javascript/mastodon/features/direct_timeline/components/column_settings.json" + }, { "descriptors": [ { @@ -2526,6 +2702,24 @@ ], "path": "app/javascript/mastodon/features/reblogs/index.json" }, + { + "descriptors": [ + { + "defaultMessage": "A look inside...", + "id": "standalone.public_title" + } + ], + "path": "app/javascript/mastodon/features/standalone/community_timeline/index.json" + }, + { + "descriptors": [ + { + "defaultMessage": "A look inside...", + "id": "standalone.public_title" + } + ], + "path": "app/javascript/mastodon/features/standalone/public_timeline/index.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 750dcf079..20ae60cc4 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ", "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.direct": "Προσωπικό μήνυμα προς @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Κρυμμένος τομέας", "account.edit_profile": "Επεξεργασία προφίλ", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", "account.endorse": "Προβολή στο προφίλ", "account.follow": "Ακολούθησε", "account.followers": "Ακόλουθοι", "account.followers.empty": "Κανείς δεν ακολουθεί αυτό τον χρήστη ακόμα.", "account.followers_counter": "{count, plural, one {{counter} Ακόλουθος} other {{counter} Ακόλουθοι}}", "account.following_counter": "{count, plural, other {{counter} Ακολουθεί}}", + "account.follows": "Follows", "account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.", "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Διακοπή παρακολούθησης", "account.unmute": "Διακοπή αποσιώπησης @{name}", "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Κλικ για να βάλεις σημείωση", "alert.rate_limited.message": "Παρακαλούμε δοκίμασε ξανά αφού περάσει η {retry_time, time, medium}.", "alert.rate_limited.title": "Περιορισμός συχνότητας", @@ -168,9 +171,9 @@ "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.", "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις", "error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Η σελίδα δεν μπόρεσε να εμφανιστεί σωστά. Το πρόβλημα οφείλεται πιθανόν σε κάποια επέκταση του φυλλομετρητή (browser extension) ή σε κάποιο αυτόματο εργαλείο μετάφρασης.", "error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.", "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "follow_request.authorize": "Ενέκρινε", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Βασικές ρυθμίσεις", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", "home.hide_announcements": "Απόκρυψη ανακοινώσεων", + "home.settings": "Column settings", "home.show_announcements": "Εμφάνιση ανακοινώσεων", "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "απο-εστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "κίνηση προς την κορυφή της λίστας", "lightbox.close": "Κλείσιμο", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Συμπίεση πλαισίου εμφάνισης εικόνας", + "lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", "lightbox.view_context": "Εμφάνιση πλαισίου", @@ -266,10 +272,10 @@ "lists.edit.submit": "Αλλαγή τίτλου", "lists.new.create": "Προσθήκη λίστας", "lists.new.title_placeholder": "Τίτλος νέας λίστα", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Οποιοσδήποτε χρήστης που ακολουθείς", + "lists.replies_policy.list_replies": "Μέλη της λίστας", + "lists.replies_policy.no_replies": "Κανείς", + "lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", "load_pending": "{count, plural, one {# νέο} other {# νέα}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Εναλλαγή ορατότητας", "missing_indicator.label": "Δε βρέθηκε", "missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Διάρκεια", "mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Αόριστη", "navigation_bar.apps": "Εφαρμογές φορητών συσκευών", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.bookmarks": "Σελιδοδείκτες", @@ -310,7 +316,7 @@ "notification.own_poll": "Η ψηφοφορία σου έληξε", "notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες", "notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου", - "notification.status": "{name} just posted", + "notification.status": "Ο/Η {name} μόλις έγραψε κάτι", "notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Προωθήσεις:", "notifications.column_settings.show": "Εμφάνισε σε στήλη", "notifications.column_settings.sound": "Ηχητική ειδοποίηση", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Νέα τουτ:", "notifications.filter.all": "Όλες", "notifications.filter.boosts": "Προωθήσεις", "notifications.filter.favourites": "Αγαπημένα", "notifications.filter.follows": "Ακόλουθοι", "notifications.filter.mentions": "Αναφορές", "notifications.filter.polls": "Αποτελέσματα ψηφοφορίας", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς", "notifications.group": "{count} ειδοποιήσεις", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Μη χάσετε τίποτα", + "picture_in_picture.restore": "Επαναφορά", "poll.closed": "Κλειστή", "poll.refresh": "Ανανέωση", "poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Τουτ", "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.", "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", "status.block": "Αποκλεισμός @{name}", @@ -410,7 +417,7 @@ "status.pin": "Καρφίτσωσε στο προφίλ", "status.pinned": "Καρφιτσωμένο τουτ", "status.read_more": "Περισσότερα", - "status.reblog": "Προώθησε", + "status.reblog": "Προώθηση", "status.reblog_private": "Προώθησε στους αρχικούς παραλήπτες", "status.reblogged_by": "{name} προώθησε", "status.reblogs.empty": "Κανείς δεν προώθησε αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.", @@ -452,7 +459,7 @@ "units.short.million": "{count}Ε", "units.short.thousand": "{count}Χ", "upload_area.title": "Drag & drop για να ανεβάσεις", - "upload_button.label": "Πρόσθεσε πολυμέσα ({formats})", + "upload_button.label": "Πρόσθεσε πολυμέσα", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα", "upload_modal.edit_media": "Επεξεργασία Πολυμέσων", "upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Προετοιμασία αναγνώρισης κειμένου…", "upload_modal.preview_label": "Προεπισκόπηση ({ratio})", "upload_progress.label": "Ανεβαίνει...", "video.close": "Κλείσε το βίντεο", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index ccc95db7a..0b3152e68 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this toot in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 47cd7ccf0..8329788d5 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -4,13 +4,14 @@ "account.badges.bot": "Roboto", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", - "account.block_domain": "Kaŝi ĉion de {domain}", + "account.block_domain": "Bloki {domain}", "account.blocked": "Blokita", "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domajno kaŝita", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti profilon", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Montri en profilo", @@ -18,7 +19,8 @@ "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", - "account.following_counter": "{count, plural, other{{counter} Sekvi}}", + "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", + "account.follows": "Follows", "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", @@ -38,14 +40,15 @@ "account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado", "account.share": "Diskonigi la profilon de @{name}", "account.show_reblogs": "Montri diskonigojn de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Tooto} other {{counter} Tootoj}}", + "account.statuses_counter": "{count, plural, one {{counter} Mesaĝo} other {{counter} Mesaĝoj}}", "account.unblock": "Malbloki @{name}", - "account.unblock_domain": "Malkaŝi {domain}", + "account.unblock_domain": "Malbloki {domain}", "account.unendorse": "Ne montri en profilo", "account.unfollow": "Ne plu sekvi", "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Alklaku por aldoni noton", "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", @@ -64,7 +67,7 @@ "column.community": "Loka tempolinio", "column.direct": "Rektaj mesaĝoj", "column.directory": "Trarigardi profilojn", - "column.domain_blocks": "Kaŝitaj domajnoj", + "column.domain_blocks": "Blokitaj domajnoj", "column.favourites": "Stelumoj", "column.follow_requests": "Petoj de sekvado", "column.home": "Hejmo", @@ -112,7 +115,7 @@ "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", - "confirmations.domain_block.confirm": "Kaŝi la tutan domajnon", + "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika tempolinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Elsaluti", "confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?", @@ -175,7 +178,7 @@ "errors.unexpected_crash.report_issue": "Raporti problemon", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", - "follow_requests.unlocked_explanation": "137/5000\nKvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", + "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", "generic.saved": "Konservita", "getting_started.developers": "Programistoj", "getting_started.directory": "Profilujo", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bazaj agordoj", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi anoncojn", + "home.settings": "Column settings", "home.show_announcements": "Montri anoncojn", "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", @@ -287,7 +293,7 @@ "navigation_bar.compose": "Skribi novan mesaĝon", "navigation_bar.direct": "Rektaj mesaĝoj", "navigation_bar.discover": "Esplori", - "navigation_bar.domain_blocks": "Kaŝitaj domajnoj", + "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.edit_profile": "Redakti profilon", "navigation_bar.favourites": "Stelumoj", "navigation_bar.filters": "Silentigitaj vortoj", @@ -387,6 +393,7 @@ "search_results.statuses": "Mesaĝoj", "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.block": "Bloki @{name}", @@ -444,7 +451,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", "timeline_hint.resources.followers": "Sekvantoj", "timeline_hint.resources.follows": "Sekvatoj", - "timeline_hint.resources.statuses": "Pli malnovaj tootoj", + "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj", "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante", "trends.trending_now": "Nunaj furoraĵoj", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", @@ -463,7 +470,7 @@ "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi", "upload_modal.analyzing_picture": "Bilda analizado…", "upload_modal.apply": "Apliki", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Elekti bildon", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.detect_text": "Detekti tekston de la bildo", "upload_modal.edit_media": "Redakti aŭdovidaĵon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index e94df48f9..006f7d530 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -1,24 +1,26 @@ { - "account.account_note_header": "Tu nota para @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Agregar o quitar de las listas", "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear a @{name}", - "account.block_domain": "Ocultar todo de {domain}", + "account.block_domain": "Bloquear dominio {domain}", "account.blocked": "Bloqueado", "account.browse_more_on_origin_server": "Explorar más en el perfil original", "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Dominio oculto", + "account.disable_notifications": "Dejar de notificarme cuando @{name} tootee", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Notificarme cuando @{name} tootee", "account.endorse": "Destacar en el perfil", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", + "account.follows": "Follows", "account.follows.empty": "Todavía este usuario no sigue a nadie.", "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", @@ -27,27 +29,28 @@ "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.", "account.media": "Medios", "account.mention": "Mencionar a @{name}", - "account.moved_to": "{name} se ha muó a:", + "account.moved_to": "{name} se ha mudó a:", "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}", "account.muted": "Silenciado", "account.never_active": "Nunca", "account.posts": "Toots", - "account.posts_with_replies": "Toots con respuestas", + "account.posts_with_replies": "Toots y respuestas", "account.report": "Denunciar a @{name}", - "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento.", + "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar retoots de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Desbloquear a @{name}", - "account.unblock_domain": "Mostrar {domain}", + "account.unblock_domain": "Desbloquear dominio {domain}", "account.unendorse": "No destacar en el perfil", "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", - "account_note.placeholder": "No se ofreció ningún comentario", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Hacé clic par agregar una nota", "alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.", - "alert.rate_limited.title": "Tarifa limitada", + "alert.rate_limited.title": "Acción limitada", "alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.title": "¡Epa!", "announcement.announcement": "Anuncio", @@ -64,7 +67,7 @@ "column.community": "Línea temporal local", "column.direct": "Mensajes directos", "column.directory": "Explorar perfiles", - "column.domain_blocks": "Dominios ocultos", + "column.domain_blocks": "Dominios bloqueados", "column.favourites": "Favoritos", "column.follow_requests": "Solicitudes de seguimiento", "column.home": "Principal", @@ -87,19 +90,19 @@ "compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.", "compose_form.direct_message_warning_learn_more": "Aprendé más", "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", - "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"sólo para seguidores\".", + "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"Sólo para seguidores\".", "compose_form.lock_disclaimer.lock": "bloqueada", "compose_form.placeholder": "¿Qué onda?", "compose_form.poll.add_option": "Agregá una opción", "compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.remove_option": "Quitá esta opción", + "compose_form.poll.remove_option": "Quitar esta opción", "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples", "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción", "compose_form.publish": "Tootear", "compose_form.publish_loud": "¡{publish}!", "compose_form.sensitive.hide": "Marcar medio como sensible", - "compose_form.sensitive.marked": "El medio se marcó como sensible", + "compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}", "compose_form.sensitive.unmarked": "El medio no está marcado como sensible", "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", "compose_form.spoiler.unmarked": "El texto no está oculto", @@ -109,10 +112,10 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro que querés eliminar este estado?", + "confirmations.delete.message": "¿Estás seguro que querés eliminar este toot?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?", - "confirmations.domain_block.confirm": "Ocultar dominio entero", + "confirmations.domain_block.confirm": "Bloquear dominio entero", "confirmations.domain_block.message": "¿Estás completamente seguro que querés bloquear el {domain} entero? En la mayoría de los casos, unos cuantos bloqueos y silenciados puntuales son suficientes y preferibles. No vas a ver contenido de ese dominio en ninguna de tus líneas temporales o en tus notificaciones. Tus seguidores de ese dominio serán quitados.", "confirmations.logout.confirm": "Cerrar sesión", "confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?", @@ -120,19 +123,19 @@ "confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.", "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?", "confirmations.redraft.confirm": "Eliminar toot original y editarlo", - "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.redraft.message": "¿Estás seguro que querés eliminar este toot y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?", "confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?", "conversation.delete": "Eliminar conversación", - "conversation.mark_as_read": "Marcar como leído", + "conversation.mark_as_read": "Marcar como leída", "conversation.open": "Ver conversación", "conversation.with": "Con {names}", "directory.federated": "Desde fediverso conocido", "directory.local": "Sólo de {domain}", "directory.new_arrivals": "Recién llegados", - "directory.recently_active": "Recientemente activo", + "directory.recently_active": "Recientemente activos", "embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.", "embed.preview": "Así es cómo se verá:", "emoji_button.activity": "Actividad", @@ -145,17 +148,17 @@ "emoji_button.objects": "Objetos", "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", - "emoji_button.search": "Buscar…", + "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", - "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_timeline": "¡No hay toots acá!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", - "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en marcadores. Cuando guardés uno en marcadores, se mostrará acá.", + "empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.", "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.", - "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", + "empty_column.domain_blocks": "Todavía no hay dominios bloqueados.", "empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.", "empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.", "empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.", @@ -163,14 +166,14 @@ "empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.", "empty_column.home.public_timeline": "la línea temporal pública", "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.", - "empty_column.lists": "Todavía no tienes ninguna lista. Cuando creés una, se mostrará acá.", + "empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.", "empty_column.mutes": "Todavía no silenciaste a ningún usuario.", "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.", - "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.", + "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente es causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", "errors.unexpected_crash.report_issue": "Informar problema", "follow_request.authorize": "Autorizar", @@ -181,9 +184,9 @@ "getting_started.directory": "Directorio de perfiles", "getting_started.documentation": "Documentación", "getting_started.heading": "Introducción", - "getting_started.invite": "Invitar usuarios", + "getting_started.invite": "Invitar gente", "getting_started.open_source_notice": "Mastodon es software libre. Podés contribuir o informar errores en {github}.", - "getting_started.security": "Seguridad", + "getting_started.security": "Configuración de la cuenta", "getting_started.terms": "Términos del servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", @@ -194,40 +197,43 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", + "home.settings": "Column settings", "home.show_announcements": "Mostrar anuncios", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "introduction.federation.action": "Siguiente", - "introduction.federation.federated.headline": "Federado", + "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.", "introduction.federation.home.headline": "Principal", - "introduction.federation.home.text": "Los toots de las personas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", + "introduction.federation.home.text": "Los toots de las cuentas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.", + "introduction.federation.local.text": "Los toots públicos de las cuentas en el mismo servidor aparecerán en la línea temporal local.", "introduction.interactions.action": "¡Terminar tutorial!", - "introduction.interactions.favourite.headline": "Favorito", + "introduction.interactions.favourite.headline": "Favoritos", "introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.", "introduction.interactions.reblog.headline": "Retootear", - "introduction.interactions.reblog.text": "Podés compartir los toots de otras personas con tus seguidores retooteando los mismos.", + "introduction.interactions.reblog.text": "Podés compartir los toots de otras cuentas con tus seguidores retooteando los mismos.", "introduction.interactions.reply.headline": "Responder", - "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.", + "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras cuentas, que se encadenarán juntos en una conversación.", "introduction.welcome.action": "¡Dale!", "introduction.welcome.headline": "Primeros pasos", "introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.", "keyboard_shortcuts.back": "para volver", "keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados", "keyboard_shortcuts.boost": "para retootear", - "keyboard_shortcuts.column": "para enfocar un estado en una de las columnas", + "keyboard_shortcuts.column": "para enfocar un toot en una de las columnas", "keyboard_shortcuts.compose": "para enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir columna de mensajes directos", "keyboard_shortcuts.down": "para bajar en la lista", - "keyboard_shortcuts.enter": "para abrir el estado", + "keyboard_shortcuts.enter": "para abrir el toot", "keyboard_shortcuts.favourite": "para marcar como favorito", "keyboard_shortcuts.favourites": "para abrir la lista de favoritos", "keyboard_shortcuts.federated": "para abrir la línea temporal federada", @@ -237,11 +243,11 @@ "keyboard_shortcuts.legend": "para mostrar este texto", "keyboard_shortcuts.local": "para abrir la línea temporal local", "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", + "keyboard_shortcuts.muted": "para abrir la lista de usuarios silenciados", "keyboard_shortcuts.my_profile": "para abrir tu perfil", "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos de medios", - "keyboard_shortcuts.pinned": "para abrir lista de toots fijados", + "keyboard_shortcuts.open_media": "para abrir los archivos de medios", + "keyboard_shortcuts.pinned": "para abrir la lista de toots fijados", "keyboard_shortcuts.profile": "para abrir el perfil del autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "para subir en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Comprimir cuadro de vista de imagen", + "lightbox.expand": "Expandir cuadro de vista de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -266,20 +272,20 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", "lists.new.title_placeholder": "Nuevo título de lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Cualquier cuenta seguida", + "lists.replies_policy.list_replies": "Miembros de la lista", + "lists.replies_policy.no_replies": "Nadie", + "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente que seguís", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", - "loading_indicator.label": "Cargando…", - "media_gallery.toggle_visible": "Cambiar visibilidad", + "loading_indicator.label": "Cargando...", + "media_gallery.toggle_visible": "Ocultar {number, plural, one {imagen} other {imágenes}}", "missing_indicator.label": "No se encontró", "missing_indicator.sublabel": "No se encontró este recurso", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Duración", "mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicaciones móviles", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -287,12 +293,12 @@ "navigation_bar.compose": "Redactar un nuevo toot", "navigation_bar.direct": "Mensajes directos", "navigation_bar.discover": "Descubrir", - "navigation_bar.domain_blocks": "Dominios ocultos", + "navigation_bar.domain_blocks": "Dominios bloqueados", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes de seguimiento", - "navigation_bar.follows_and_followers": "Personas seguidas y seguidores", + "navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores", "navigation_bar.info": "Acerca de este servidor", "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", @@ -303,14 +309,14 @@ "navigation_bar.preferences": "Configuración", "navigation_bar.public_timeline": "Línea temporal federada", "navigation_bar.security": "Seguridad", - "notification.favourite": "{name} marcó tu estado como favorito", + "notification.favourite": "{name} marcó tu toot como favorito", "notification.follow": "{name} te empezó a seguir", "notification.follow_request": "{name} solicitó seguirte", "notification.mention": "{name} te mencionó", "notification.own_poll": "Tu encuesta finalizó", "notification.poll": "Finalizó una encuesta en la que votaste", "notification.reblog": "{name} retooteó tu estado", - "notification.status": "{name} just posted", + "notification.status": "{name} acaba de tootear", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nuevos toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", - "notifications.filter.polls": "Resultados de la encuesta", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.polls": "Resultados de encuesta", + "notifications.filter.statuses": "Actualizaciones de cuentas que seguís", "notifications.group": "{count} notificaciones", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar cada notificación como leída", + "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada", + "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes", + "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", + "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", + "notifications_permission_banner.title": "No te pierdas nada", + "picture_in_picture.restore": "Restaurar", "poll.closed": "Cerrada", "poll.refresh": "Refrescar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -350,14 +356,14 @@ "poll.voted": "Votaste esta opción", "poll_button.add_poll": "Agregar una encuesta", "poll_button.remove_poll": "Quitar encuesta", - "privacy.change": "Configurar privacidad de estado", - "privacy.direct.long": "Enviar toot sólo a los usuarios mencionados", + "privacy.change": "Configurar privacidad de toot", + "privacy.direct.long": "Visible sólo a los usuarios mencionados", "privacy.direct.short": "Directo", - "privacy.private.long": "Enviar toot sólo a los seguidores", + "privacy.private.long": "Visible sólo a los seguidores", "privacy.private.short": "Sólo a seguidores", - "privacy.public.long": "Enviar toot a las líneas temporales públicas", + "privacy.public.long": "Visible para todos, mostrado en las líneas temporales públicas", "privacy.public.short": "Público", - "privacy.unlisted.long": "No enviar toot a las líneas temporales públicas", + "privacy.unlisted.long": "Visible para todos, pero no en las líneas temporales públicas", "privacy.unlisted.short": "No listado", "refresh": "Refrescar", "regeneration_indicator.label": "Cargando…", @@ -377,28 +383,29 @@ "report.target": "Denunciando a {target}", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los estados que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres usuarios, nombres mostrados y etiquetas.", + "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los toots que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "estado", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "No se puede buscar toots por contenido en este servidor de Mastodon.", + "search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este estado en la interface de moderación", + "status.admin_status": "Abrir este toot en la interface de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcador", + "status.bookmark": "Marcar", "status.cancel_reblog_private": "Quitar retoot", "status.cannot_reblog": "No se puede retootear este toot", - "status.copy": "Copiar enlace al estado", + "status.copy": "Copiar enlace al toot", "status.delete": "Eliminar", "status.detailed_status": "Vista de conversación detallada", "status.direct": "Mensaje directo a @{name}", "status.embed": "Insertar", - "status.favourite": "Favorito", + "status.favourite": "Marcar como favorito", "status.filtered": "Filtrado", "status.load_more": "Cargar más", "status.media_hidden": "Medios ocultos", @@ -406,10 +413,10 @@ "status.more": "Más", "status.mute": "Silenciar a @{name}", "status.mute_conversation": "Silenciar conversación", - "status.open": "Expandir este estado", + "status.open": "Expandir este toot", "status.pin": "Fijar en el perfil", "status.pinned": "Toot fijado", - "status.read_more": "Leer más", + "status.read_more": "Leé más", "status.reblog": "Retootear", "status.reblog_private": "Retootear a la audiencia original", "status.reblogged_by": "{name} retooteó", @@ -431,7 +438,7 @@ "status.unpin": "Dejar de fijar", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", - "tabs_bar.federated_timeline": "Federado", + "tabs_bar.federated_timeline": "Federada", "tabs_bar.home": "Principal", "tabs_bar.local_timeline": "Local", "tabs_bar.notifications": "Notificaciones", @@ -452,15 +459,15 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}mil", "upload_area.title": "Para subir, arrastrá y soltá", - "upload_button.label": "Agregar medios ({formats})", + "upload_button.label": "Agregá imágenes o un archivo de audio o video", "upload_error.limit": "Se excedió el límite de subida de archivos.", "upload_error.poll": "No se permite la subida de archivos en encuestas.", - "upload_form.audio_description": "Describir para personas con problemas auditivos", - "upload_form.description": "Agregar descripción para los usuarios con dificultades visuales", + "upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas", + "upload_form.description": "Agregá una descripción para personas con dificultades visuales", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.undo": "Eliminar", - "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", + "upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales", "upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.apply": "Aplicar", "upload_modal.choose_image": "Elegir imagen", @@ -468,13 +475,13 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar medio", "upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Previsualización ({ratio})", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "video.close": "Cerrar video", "video.download": "Descargar archivo", "video.exit_fullscreen": "Salir de pantalla completa", - "video.expand": "Expandir vídeo", + "video.expand": "Expandir video", "video.fullscreen": "Pantalla completa", "video.hide": "Ocultar video", "video.mute": "Silenciar sonido", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index c01d9dda5..4e719087f 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -1,131 +1,134 @@ { "account.account_note_header": "Nota", - "account.add_or_remove_from_list": "Agregar o eliminar de listas", + "account.add_or_remove_from_list": "Agregar o quitar de listas", "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear a @{name}", - "account.block_domain": "Ocultar todo de {domain}", - "account.blocked": "Bloqueado", + "account.block_domain": "Bloquear dominio {domain}", + "account.blocked": "Cuenta bloqueada", "account.browse_more_on_origin_server": "Ver más en el perfil original", - "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", + "account.cancel_follow_request": "Cancelar solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Dominio oculto", + "account.disable_notifications": "Dejar de notificarme cuando @{name} publica", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Mostrar en perfil", + "account.enable_notifications": "Notificarme cuando @{name} publica", + "account.endorse": "Recomendar en mi perfil", "account.follow": "Seguir", - "account.followers": "Seguidores", - "account.followers.empty": "Todavía nadie sigue a este usuario.", - "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", + "account.followers": "Seguidorxs", + "account.followers.empty": "Nadie sigue a @{name} aún.", + "account.followers_counter": "{count, plural, one {{counter} Seguidor o Seguidora} other {{counter} Seguidorxs}}", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", - "account.follows.empty": "Este usuario todavía no sigue a nadie.", + "account.follows": "Follows", + "account.follows.empty": "@{name} no sigue a nadie aún.", "account.follows_you": "Te sigue", - "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.hide_reblogs": "Ocultar publicaciones compartidas por @{name}", "account.last_status": "Última actividad", - "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", - "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", - "account.media": "Multimedia", + "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", + "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. @{name} revisa manualmente revisa quién puede seguirle.", + "account.media": "Medios", "account.mention": "Mencionar a @{name}", - "account.moved_to": "{name} se ha mudado a:", + "account.moved_to": "{name} se ha cambiado a:", "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}", - "account.muted": "Silenciado", + "account.muted": "Cuenta silenciada", "account.never_active": "Nunca", - "account.posts": "Toots", - "account.posts_with_replies": "Toots con respuestas", + "account.posts": "Publicaciones", + "account.posts_with_replies": "Publicaciones y respuestas", "account.report": "Reportar a @{name}", - "account.requested": "Esperando aprobación", + "account.requested": "Esperando aprobación. Da clic para cancelar la solicitud de seguimiento", "account.share": "Compartir el perfil de @{name}", - "account.show_reblogs": "Mostrar retoots de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.show_reblogs": "Mostrar publicaciones compartidas por @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}", "account.unblock": "Desbloquear a @{name}", - "account.unblock_domain": "Mostrar a {domain}", - "account.unendorse": "No mostrar en el perfil", + "account.unblock_domain": "Desbloquear dominio {domain}", + "account.unendorse": "No recomendar en mi perfil", "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", - "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", - "account_note.placeholder": "Clic para añadir nota", - "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", - "alert.rate_limited.title": "Tarifa limitada", - "alert.unexpected.message": "Hubo un error inesperado.", - "alert.unexpected.title": "¡Ups!", + "account.unmute_notifications": "Dejar de silenciar notificaciones de @{name}", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Haz clic par agregar una nota", + "alert.rate_limited.message": "Por favor, reintenta después de las {retry_time, time, medium}.", + "alert.rate_limited.title": "Acción limitada", + "alert.unexpected.message": "Ocurrió un error inesperado.", + "alert.unexpected.title": "¡Ay güey!", "announcement.announcement": "Anuncio", "autosuggest_hashtag.per_week": "{count} por semana", - "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", + "boost_modal.combo": "Puedes hacer clic en {combo} para saltar esto la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", - "bundle_column_error.retry": "Inténtalo de nuevo", + "bundle_column_error.retry": "Intentar de nuevo", "bundle_column_error.title": "Error de red", "bundle_modal_error.close": "Cerrar", "bundle_modal_error.message": "Algo salió mal al cargar este componente.", "bundle_modal_error.retry": "Inténtalo de nuevo", - "column.blocks": "Usuarios bloqueados", + "column.blocks": "Personas bloqueadas", "column.bookmarks": "Marcadores", "column.community": "Línea de tiempo local", "column.direct": "Mensajes directos", - "column.directory": "Buscar perfiles", - "column.domain_blocks": "Dominios ocultados", + "column.directory": "Ver perfiles", + "column.domain_blocks": "Dominios bloqueados", "column.favourites": "Favoritos", "column.follow_requests": "Solicitudes de seguimiento", - "column.home": "Inicio", + "column.home": "Principal", "column.lists": "Listas", - "column.mutes": "Usuarios silenciados", + "column.mutes": "Cuentas silenciadas", "column.notifications": "Notificaciones", - "column.pins": "Toots fijados", - "column.public": "Línea de tiempo federada", - "column_back_button.label": "Atrás", + "column.pins": "Publicaciones fijadas", + "column.public": "Línea temporal federada", + "column_back_button.label": "Volver", "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", "column_header.moveRight_settings": "Mover columna a la derecha", "column_header.pin": "Fijar", - "column_header.show_settings": "Mostrar ajustes", - "column_header.unpin": "Dejar de fijar", - "column_subheading.settings": "Ajustes", - "community.column_settings.local_only": "Solo local", - "community.column_settings.media_only": "Solo media", - "community.column_settings.remote_only": "Solo remoto", - "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.", + "column_header.show_settings": "Mostrar configuración", + "column_header.unpin": "Desfijar", + "column_subheading.settings": "Configuración", + "community.column_settings.local_only": "Sólo local", + "community.column_settings.media_only": "Sólo medios", + "community.column_settings.remote_only": "Sólo remoto", + "compose_form.direct_message_warning": "Esta publicación sólo será enviada las personas mencionadas.", "compose_form.direct_message_warning_learn_more": "Aprender mas", - "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", + "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo hashtags porque no es público. Sólo se pueden buscar por hashtag las que son públicas.", "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", - "compose_form.lock_disclaimer.lock": "bloqueado", - "compose_form.placeholder": "¿En qué estás pensando?", + "compose_form.lock_disclaimer.lock": "bloqueada", + "compose_form.placeholder": "¿Qué rollo?", "compose_form.poll.add_option": "Añadir una opción", "compose_form.poll.duration": "Duración de la encuesta", - "compose_form.poll.option_placeholder": "Elección {number}", - "compose_form.poll.remove_option": "Eliminar esta opción", - "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", - "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", - "compose_form.publish": "Tootear", - "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marcar multimedia como sensible", - "compose_form.sensitive.marked": "Material marcado como sensible", - "compose_form.sensitive.unmarked": "Material no marcado como sensible", - "compose_form.spoiler.marked": "Texto oculto tras la advertencia", - "compose_form.spoiler.unmarked": "Texto no oculto", - "compose_form.spoiler_placeholder": "Advertencia de contenido", + "compose_form.poll.option_placeholder": "Opción {number}", + "compose_form.poll.remove_option": "Quitar esta opción", + "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir opciones múltiples", + "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una sola opción", + "compose_form.publish": "Publicar", + "compose_form.publish_loud": "¡{publish}!", + "compose_form.sensitive.hide": "Marcar medio como sensible", + "compose_form.sensitive.marked": "Medio marcado como sensible", + "compose_form.sensitive.unmarked": "Medio no marcado como sensible", + "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", + "compose_form.spoiler.unmarked": "El texto no está oculto", + "compose_form.spoiler_placeholder": "Escribe tu advertencia aquí", "confirmation_modal.cancel": "Cancelar", - "confirmations.block.block_and_report": "Bloquear y Reportar", + "confirmations.block.block_and_report": "Bloquear y denunciar", "confirmations.block.confirm": "Bloquear", - "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?", + "confirmations.block.message": "¿Estás segurx que quieres bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", + "confirmations.delete.message": "¿Estás segurx que quieres eliminar esta publicación?", "confirmations.delete_list.confirm": "Eliminar", - "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", - "confirmations.domain_block.confirm": "Ocultar dominio entero", + "confirmations.delete_list.message": "¿Estás segurx que quieres eliminar esta lista permanentemente?", + "confirmations.domain_block.confirm": "Bloquear dominio entero", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", "confirmations.logout.confirm": "Cerrar sesión", - "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?", + "confirmations.logout.message": "¿Estás segurx que quieres cerrar sesión?", "confirmations.mute.confirm": "Silenciar", "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", - "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", - "confirmations.redraft.confirm": "Borrar y volver a borrador", - "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.", + "confirmations.mute.message": "¿Estás segurx que quieres silenciar a {name}?", + "confirmations.redraft.confirm": "Eliminar y volver a redactar", + "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", "confirmations.unfollow.confirm": "Dejar de seguir", - "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", - "conversation.delete": "Borrar conversación", + "confirmations.unfollow.message": "¿Estás seguro que quieres dejar de seguir a {name}?", + "conversation.delete": "Eliminar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", "conversation.with": "Con {names}", @@ -151,26 +154,26 @@ "emoji_button.travel": "Viajes y lugares", "empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_unavailable": "Perfil no disponible", - "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", - "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.", + "empty_column.blocks": "No has bloqueado a nadie aún.", + "empty_column.bookmarked_statuses": "Todavía no tienes publicaciones guardadas en \"Marcadores\". Cuando guardes una, se mostrará quí.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", - "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", + "empty_column.direct": "Todavía no tienes mensaje directos. Cuando envíes o recibas uno, se mostrará aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", - "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.", + "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques un favorito, se mostrará aquí.", "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.", - "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", + "empty_column.follow_requests": "Todavía no tienes solicitudes de seguimiento. Cuando recibas una, se mostrará aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", - "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", + "empty_column.home": "¡Tu línea de tiempo principal está vacía! Visita {public} o usa la búsqueda para comenzar y encontrar a otras personas.", "empty_column.home.public_timeline": "la línea de tiempo pública", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", - "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", - "empty_column.mutes": "Aún no has silenciado a ningún usuario.", - "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", - "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", + "empty_column.lists": "Todavía no tienes listas. Cuando crees una, se mostrará aquí.", + "empty_column.mutes": "No has silenciado a nadie aún.", + "empty_column.notifications": "Todavía no tienes notificaciones. Interactúa con otras personas para iniciar la conversación.", + "empty_column.public": "¡No hay nada aquí! Escribe algo público, o manualmente sigue a alguien de otros servidores para irlo llenando", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", "follow_request.authorize": "Autorizar", @@ -183,7 +186,7 @@ "getting_started.heading": "Primeros pasos", "getting_started.invite": "Invitar usuarios", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", - "getting_started.security": "Seguridad", + "getting_started.security": "Configuración de cuenta", "getting_started.terms": "Términos de servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", + "home.settings": "Column settings", "home.show_announcements": "Mostrar anuncios", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -220,9 +226,9 @@ "introduction.welcome.headline": "Primeros pasos", "introduction.welcome.text": "¡Bienvenido al fediverso! En unos momentos, podrás transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial, alberga tu perfil, así que recuerda su nombre.", "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.blocked": "abre la lista de personas bloqueadas", "keyboard_shortcuts.boost": "retootear", - "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", + "keyboard_shortcuts.column": "enfoca una publicación un una de las columnas", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "abrir la columna de mensajes directos", @@ -237,11 +243,11 @@ "keyboard_shortcuts.legend": "para mostrar esta leyenda", "keyboard_shortcuts.local": "abrir el timeline local", "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", + "keyboard_shortcuts.muted": "abre la lista de personas silenciadas", "keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.open_media": "para abrir archivos multimedia", - "keyboard_shortcuts.pinned": "abrir la lista de toots destacados", + "keyboard_shortcuts.pinned": "abre la lista de publicaciones fijadas", "keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Comprimir cuadro de visualización de imagen", + "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -266,10 +272,10 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Cualquier persona seguida", + "lists.replies_policy.list_replies": "Miembros de la lista", + "lists.replies_policy.no_replies": "Nadie", + "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", @@ -277,11 +283,11 @@ "media_gallery.toggle_visible": "Cambiar visibilidad", "missing_indicator.label": "No encontrado", "missing_indicator.sublabel": "No se encontró este recurso", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.duration": "Duración", + "mute_modal.hide_notifications": "¿Ocultar notificaciones de esta persona?", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicaciones móviles", - "navigation_bar.blocks": "Usuarios bloqueados", + "navigation_bar.blocks": "Personas bloqueadas", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Historia local", "navigation_bar.compose": "Escribir un nuevo toot", @@ -297,11 +303,11 @@ "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Cerrar sesión", - "navigation_bar.mutes": "Usuarios silenciados", + "navigation_bar.mutes": "Personas silenciadas", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Toots fijados", + "navigation_bar.pins": "Publicaciones fijadas", "navigation_bar.preferences": "Preferencias", - "navigation_bar.public_timeline": "Historia federada", + "navigation_bar.public_timeline": "Línea de tiempo federada", "navigation_bar.security": "Seguridad", "notification.favourite": "{name} marcó tu estado como favorito", "notification.follow": "{name} te empezó a seguir", @@ -310,7 +316,7 @@ "notification.own_poll": "Tu encuesta ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado", "notification.reblog": "{name} ha retooteado tu estado", - "notification.status": "{name} just posted", + "notification.status": "{name} acaba de publicar", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nuevos toots:", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Retoots", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Actualizaciones de gente a la que sigues", "notifications.group": "{count} notificaciones", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", + "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", + "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", + "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", + "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", + "notifications_permission_banner.title": "Nunca te pierdas nada", + "picture_in_picture.restore": "Restaurar", "poll.closed": "Cerrada", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# person} other {# people}}", @@ -351,10 +357,10 @@ "poll_button.add_poll": "Añadir una encuesta", "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", - "privacy.direct.long": "Sólo mostrar a los usuarios mencionados", + "privacy.direct.long": "Sólo visible para las personas mencionadas", "privacy.direct.short": "Directo", "privacy.private.long": "Sólo mostrar a seguidores", - "privacy.private.short": "Privado", + "privacy.private.short": "Sólo a seguidorxs", "privacy.public.long": "Mostrar en la historia federada", "privacy.public.short": "Público", "privacy.unlisted.long": "No mostrar en la historia federada", @@ -377,21 +383,22 @@ "report.target": "Reportando", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", + "search_popout.tips.full_text": "Las búsquedas de texto recuperan publicaciones que hayas escrito, marcado como favoritas, compartido, o en las que te hayan mencionado, así como personas, nombres y hashtags.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "estado", - "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", - "search_popout.tips.user": "usuario", + "search_popout.tips.status": "publicación", + "search_popout.tips.text": "Las búsquedas de texto devuelven los nombres mostrados, nombres de usuarix y hashtags que coincidan", + "search_popout.tips.user": "usuarix", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", - "search_results.statuses": "Toots", + "search_results.statuses": "Publicaciones", "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcador", - "status.cancel_reblog_private": "Des-impulsar", + "status.bookmark": "Marcar", + "status.cancel_reblog_private": "Eliminar retoot", "status.cannot_reblog": "Este toot no puede retootearse", "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", @@ -408,16 +415,16 @@ "status.mute_conversation": "Silenciar conversación", "status.open": "Expandir estado", "status.pin": "Fijar", - "status.pinned": "Toot fijado", + "status.pinned": "Publicación fijada", "status.read_more": "Leer más", "status.reblog": "Retootear", "status.reblog_private": "Implusar a la audiencia original", "status.reblogged_by": "Retooteado por {name}", - "status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.", + "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", - "status.remove_bookmark": "Eliminar marcador", + "status.remove_bookmark": "Quitar marcador", "status.reply": "Responder", - "status.replyAll": "Responder al hilván", + "status.replyAll": "Responder al hilo", "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", @@ -425,10 +432,10 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_thread": "Mostrar hilván", + "status.show_thread": "Mostrar hilo", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", - "status.unpin": "Dejar de fijar", + "status.unpin": "Desfijar", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", @@ -448,9 +455,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", - "units.short.billion": "{count}MM", + "units.short.billion": "{count}B", "units.short.million": "{count}M", - "units.short.thousand": "{count}mil", + "units.short.thousand": "{count}K", "upload_area.title": "Arrastra y suelta para subir", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Límite de subida de archivos excedido.", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Detectar texto de la imagen", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Subiendo…", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 4e42fb999..5aa4cb16d 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Tühista jälgimistaotlus", "account.direct": "Otsesõnum @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeen peidetud", "account.edit_profile": "Muuda profiili", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Keegi ei jälgi seda kasutajat veel.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "See kasutaja ei jälgi veel kedagi.", "account.follows_you": "Jälgib Teid", "account.hide_reblogs": "Peida upitused kasutajalt @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Ära jälgi", "account.unmute": "Ära vaigista @{name}", "account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Palun proovi uuesti pärast {retry_time, time, medium}.", "alert.rate_limited.title": "Piiratud", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Mõni neist", "hashtag.column_settings.tag_mode.none": "Mitte ükski neist", "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Peamine", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Näita upitusi", "home.column_settings.show_replies": "Näita vastuseid", "home.hide_announcements": "Peida teadaanded", + "home.settings": "Column settings", "home.show_announcements": "Kuva teadaandeid", "intervals.full.days": "{number, plural, one {# päev} other {# päevad}}", "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuudid", "search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.", "search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Ava moderaatoriliides kasutajale @{name}", "status.admin_status": "Ava see staatus moderaatoriliites", "status.block": "Blokeeri @{name}", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5139d83aa..67ac492df 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", @@ -45,6 +47,7 @@ "account.unfollow": "Utzi jarraitzeari", "account.unmute": "Desmututu @{name}", "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Saiatu {retry_time, time, medium} barru.", "alert.rate_limited.title": "Abiadura mugatua", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Hautako edozein", "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Oinarrizkoa", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", "home.hide_announcements": "Ezkutatu iragarpenak", + "home.settings": "Column settings", "home.show_announcements": "Erakutsi iragarpenak", "intervals.full.days": "{number, plural, one {egun #} other {# egun}}", "intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tootak", "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du tooten edukiaren bilaketa gaitu.", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_status": "Ireki mezu hau moderazio interfazean", "status.block": "Blokeatu @{name}", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index a8313623c..3e3dc885e 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -4,21 +4,23 @@ "account.badges.bot": "ربات", "account.badges.group": "گروه", "account.block": "مسدودسازی @{name}", - "account.block_domain": "نهفتن همه چیز از {domain}", + "account.block_domain": "بستن دامنه {domain}", "account.blocked": "مسدود", "account.browse_more_on_origin_server": "مرور بیش‌تر روی نمایهٔ اصلی", "account.cancel_follow_request": "لغو درخواست پیگیری", "account.direct": "پیام خصوصی به @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "دامنهٔ نهفته", + "account.disable_notifications": "آگاهی به من هنگام فرستادن‌های @{name} پایان یابد", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "دامنه بسته شد", "account.edit_profile": "ویرایش نمایه", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "آگاهی هنگام ارسال‌های @{name}", "account.endorse": "معرّفی در نمایه", "account.follow": "پی بگیرید", "account.followers": "پی‌گیران", "account.followers.empty": "هنوز کسی پیگیر این کاربر نیست.", "account.followers_counter": "{count, plural, one {{counter} پی‌گیر} other {{counter} پی‌گیر}}", "account.following_counter": "{count, plural, other {{counter} پی می‌گیرد}}", + "account.follows": "Follows", "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.", "account.follows_you": "پیگیر شماست", "account.hide_reblogs": "نهفتن بازبوق‌های @{name}", @@ -40,11 +42,12 @@ "account.show_reblogs": "نمایش بازبوق‌های @{name}", "account.statuses_counter": "{count, plural, one {{counter} بوق} other {{counter} بوق}}", "account.unblock": "رفع انسداد @{name}", - "account.unblock_domain": "رفع نهفتن {domain}", + "account.unblock_domain": "گشودن دامنه {domain}", "account.unendorse": "معرّفی نکردن در نمایه", "account.unfollow": "پایان پیگیری", "account.unmute": "رفع خموشی @{name}", "account.unmute_notifications": "رفع خموشی اعلان‌ها از @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "نظری فراهم نشده", "alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره بیازمایید.", "alert.rate_limited.title": "محدودیت تعداد", @@ -64,7 +67,7 @@ "column.community": "نوشته‌های محلی", "column.direct": "پیام‌های خصوصی", "column.directory": "مرور نمایه‌ها", - "column.domain_blocks": "دامنه‌های نهفته", + "column.domain_blocks": "دامنه‌های بسته", "column.favourites": "پسندیده‌ها", "column.follow_requests": "درخواست‌های پیگیری", "column.home": "خانه", @@ -98,7 +101,7 @@ "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.publish": "بوق", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "علامت‌گذاری به عنوان حساس", + "compose_form.sensitive.hide": "علامت‌گذاری رسانه به عنوان حساس", "compose_form.sensitive.marked": "رسانه به عنوان حساس علامت‌گذاری شده", "compose_form.sensitive.unmarked": "رسانه به عنوان حساس علامت‌گذاری نشده", "compose_form.spoiler.marked": "نوشته پشت هشدار پنهان است", @@ -168,9 +171,9 @@ "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا این‌جا پر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "این صفحه نمی‌تواند درست نشان داده شود. احتمالاً این خطا ناشی از یک افزونهٔ مرورگر یا ابزار ترجمهٔ خودکار است.", "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستودون از راه یک مرورگر دیگر یا با یکی از اپ‌های آن کار کنید.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کاره‌ای بومی از ماستودون استفاده کنید.", "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "follow_request.authorize": "اجازه دهید", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "پایه‌ای", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "نمایش بازبوق‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.hide_announcements": "نهفتن اعلامیه‌ها", + "home.settings": "Column settings", "home.show_announcements": "نمایش اعلامیه‌ها", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", @@ -266,10 +272,10 @@ "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", "lists.new.title_placeholder": "عنوان فهرست تازه", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "هر کاربر پی‌گیری‌شده", + "lists.replies_policy.list_replies": "اعضای فهرست", + "lists.replies_policy.no_replies": "هیچ‌کس", + "lists.replies_policy.title": "نمایش پاسخ‌ها به:", "lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.subheading": "فهرست‌های شما", "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "تغییر وضعیت نمایانی", "missing_indicator.label": "پیدا نشد", "missing_indicator.sublabel": "این منبع پیدا نشد", - "mute_modal.duration": "Duration", + "mute_modal.duration": "مدت زمان", "mute_modal.hide_notifications": "اعلان‌های این کاربر پنهان شود؟", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "نامعلوم", "navigation_bar.apps": "اپ‌های موبایل", "navigation_bar.blocks": "کاربران مسدودشده", "navigation_bar.bookmarks": "نشانک‌ها", @@ -287,7 +293,7 @@ "navigation_bar.compose": "نوشتن بوق تازه", "navigation_bar.direct": "پیام‌های مستقیم", "navigation_bar.discover": "گشت و گذار", - "navigation_bar.domain_blocks": "دامنه‌های نهفته", + "navigation_bar.domain_blocks": "دامنه‌های بسته", "navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.favourites": "پسندیده‌ها", "navigation_bar.filters": "واژگان خموش", @@ -310,7 +316,7 @@ "notification.own_poll": "نظرسنجی شما به پایان رسید", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", "notification.reblog": "‫{name}‬ وضعیتتان را تقویت کرد", - "notification.status": "{name} just posted", + "notification.status": "{name} چیزی فرستاد", "notifications.clear": "پاک‌کردن اعلان‌ها", "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟", "notifications.column_settings.alert": "اعلان‌های میزکار", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "بازبوق‌ها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "بوق‌های جدید:", "notifications.filter.all": "همه", "notifications.filter.boosts": "بازبوق‌ها", "notifications.filter.favourites": "پسندها", "notifications.filter.follows": "پیگیری‌ها", "notifications.filter.mentions": "نام‌بردن‌ها", "notifications.filter.polls": "نتایج نظرسنجی", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", "notifications.group": "{count} اعلان", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications.mark_as_read": "نشانه‌گذاری همهٔ آگاهی‌ها به عنوان خوانده‌شده", + "notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", + "notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند", + "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", + "picture_in_picture.restore": "برگرداندن", "poll.closed": "پایان‌یافته", "poll.refresh": "به‌روزرسانی", "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}", @@ -387,6 +393,7 @@ "search_results.statuses": "بوق‌ها", "search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این کارساز ماستودون فعال نشده است.", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", + "standalone.public_title": "A look inside...", "status.admin_account": "گشودن واسط مدیریت برای @{name}", "status.admin_status": "گشودن این بوق در واسط مدیریت", "status.block": "مسدودسازی @{name}", @@ -411,7 +418,7 @@ "status.pinned": "بوق ثابت", "status.read_more": "بیشتر بخوانید", "status.reblog": "بازبوقیدن", - "status.reblog_private": "بازبوق به مخاطبان اولیه", + "status.reblog_private": "تقویت برای مخاطبان نخستین", "status.reblogged_by": "‫{name}‬ بازبوقید", "status.reblogs.empty": "هنوز هیچ کسی این بوق را بازنبوقیده است. وقتی کسی چنین کاری کند، این‌جا نمایش خواهد یافت.", "status.redraft": "پاک‌کردن و بازنویسی", @@ -420,7 +427,7 @@ "status.replyAll": "پاسخ به رشته", "status.report": "گزارش @{name}", "status.sensitive_warning": "محتوای حساس", - "status.share": "هم‌رسانی", + "status.share": "همرسانی", "status.show_less": "نمایش کمتر", "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش بیشتر", @@ -452,7 +459,7 @@ "units.short.million": "{count}میلیون", "units.short.thousand": "{count}هزار", "upload_area.title": "برای بارگذاری به این‌جا بکشید", - "upload_button.label": "افزودن رسانه ({formats})", + "upload_button.label": "افزودن رسانه", "upload_error.limit": "از حد مجاز باگذاری پرونده فراتر رفتید.", "upload_error.poll": "بارگذاری پرونده در نظرسنجی‌ها مجاز نیست.", "upload_form.audio_description": "برای ناشنوایان توصیفش کنید", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "تشخیص متن درون عکس", "upload_modal.edit_media": "ویرایش رسانه", "upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابه‌جا کردن آن تنظیم کنید.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "در حال آماده سازی OCR…", "upload_modal.preview_label": "پیش‌نمایش ({ratio})", "upload_progress.label": "در حال بارگذاری…", "video.close": "بستن ویدیو", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4a0d4aef1..fe29126ee 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Lakkaa seuraamasta", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.", "alert.rate_limited.title": "Määrää rajoitettu", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Kaikki", "hashtag.column_settings.tag_mode.none": "Ei mikään", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Perusasetukset", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", "home.hide_announcements": "Piilota ilmoitukset", + "home.settings": "Column settings", "home.show_announcements": "Näytä ilmoitukset", "intervals.full.days": "Päivä päiviä", "intervals.full.hours": "Tunti tunteja", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuuttaukset", "search_results.statuses_fts_disabled": "Tuuttausten haku sisällön perusteella ei ole käytössä tällä Mastodon-serverillä.", "search_results.total": "{count, number} {count, plural, one {tulos} other {tulosta}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä", "status.block": "Estä @{name}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 1abaf51b6..b9c91824e 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Arrêter de me notifier quand @{name} publie", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domaine bloqué", "account.edit_profile": "Modifier le profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Me notifier quand @{name} publie", "account.endorse": "Recommander sur le profil", "account.follow": "Suivre", "account.followers": "Abonné·e·s", "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} Abonné·e} other {{counter} Abonné·e·s}}", "account.following_counter": "{count, plural, other {{counter} Abonnements}}", + "account.follows": "Follows", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Ne plus suivre", "account.unmute": "Ne plus masquer @{name}", "account.unmute_notifications": "Ne plus masquer les notifications de @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Cliquez pour ajouter une note", "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", "alert.rate_limited.title": "Débit limité", @@ -155,7 +158,7 @@ "empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", - "empty_column.domain_blocks": "Il n’y a aucun domaine caché pour le moment.", + "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.", "empty_column.favourited_statuses": "Vous n’avez aucun pouet favoris pour le moment. Lorsque vous en mettrez un en favori, il apparaîtra ici.", "empty_column.favourites": "Personne n’a encore mis ce pouet en favori. Lorsque quelqu’un le fera, il apparaîtra ici.", "empty_column.follow_requests": "Vous n’avez pas encore de demande de suivi. Lorsque vous en recevrez une, elle apparaîtra ici.", @@ -168,9 +171,9 @@ "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Cette page n’a pas pu être affichée correctement. Cette erreur est probablement causée par une extension de navigateur ou des outils de traduction automatique.", "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", "errors.unexpected_crash.report_issue": "Signaler le problème", "follow_request.authorize": "Accepter", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basique", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", "home.hide_announcements": "Masquer les annonces", + "home.settings": "Column settings", "home.show_announcements": "Afficher les annonces", "intervals.full.days": "{number, plural, one {# jour} other {# jours}}", "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche", "keyboard_shortcuts.up": "remonter dans la liste", "lightbox.close": "Fermer", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Compresser la fenêtre de visualisation des images", + "lightbox.expand": "Agrandir la fenêtre de visualisation des images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "lightbox.view_context": "Voir le contexte", @@ -266,10 +272,10 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "N’importe quel·le utilisateur·rice suivi·e", + "lists.replies_policy.list_replies": "Membres de la liste", + "lists.replies_policy.no_replies": "Personne", + "lists.replies_policy.title": "Afficher les réponses à :", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Intervertir la visibilité", "missing_indicator.label": "Non trouvé", "missing_indicator.sublabel": "Ressource introuvable", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durée", "mute_modal.hide_notifications": "Masquer les notifications de cette personne ?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indéfinie", "navigation_bar.apps": "Applications mobiles", "navigation_bar.blocks": "Comptes bloqués", "navigation_bar.bookmarks": "Marque-pages", @@ -310,7 +316,7 @@ "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre statut", - "notification.status": "{name} just posted", + "notification.status": "{name} vient de publier", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", "notifications.column_settings.alert": "Notifications du navigateur", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nouveaux pouets :", "notifications.filter.all": "Tout", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favoris", "notifications.filter.follows": "Abonnés", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Mises à jour des personnes que vous suivez", "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marquer toutes les notifications comme lues", + "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", + "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", + "notifications_permission_banner.enable": "Activer les notifications de bureau", + "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", + "notifications_permission_banner.title": "Toujours au courant", + "picture_in_picture.restore": "Remettre en place", "poll.closed": "Fermé", "poll.refresh": "Actualiser", "poll.total_people": "{count, plural, one {# personne} other {# personnes}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Pouets", "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Ouvrir l’interface de modération pour @{name}", "status.admin_status": "Ouvrir ce statut dans l’interface de modération", "status.block": "Bloquer @{name}", @@ -437,7 +444,7 @@ "tabs_bar.notifications": "Notifications", "tabs_bar.search": "Chercher", "time_remaining.days": "{number, plural, one {# day} other {# days}} restants", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} restantes", + "time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes", "time_remaining.moments": "Encore quelques instants", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Glissez et déposez pour envoyer", - "upload_button.label": "Joindre un média ({formats})", + "upload_button.label": "Ajouter des images, une vidéo ou un fichier audio", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Détecter le texte de l’image", "upload_modal.edit_media": "Modifier le média", "upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Préparation de OCR…", "upload_modal.preview_label": "Aperçu ({ratio})", "upload_progress.label": "Envoi en cours…", "video.close": "Fermer la vidéo", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 22230ab73..c7214f90b 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "No comment provided", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 811526acb..7579f82d6 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "A túa nota para @{name}", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Engadir ou eliminar das listaxes", "account.badges.bot": "Bot", "account.badges.group": "Grupo", @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Busca máis no perfil orixinal", "account.cancel_follow_request": "Desbotar solicitude de seguimento", "account.direct": "Mensaxe directa @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Deixar de notificarme cando @{name} publica", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Noficarme cando @{name} publique", "account.endorse": "Amosar no perfil", "account.follow": "Seguir", "account.followers": "Seguidoras", "account.followers.empty": "Aínda ninguén segue esta usuaria.", "account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}", - "account.following_counter": "{count, plural, other {{counter} Seguindo}}", + "account.following_counter": "{count, plural, one {{counter} Seguindo} other {{counter} Seguindo}}", + "account.follows": "Follows", "account.follows.empty": "Esta usuaria aínda non segue a ninguén.", "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", @@ -45,10 +47,11 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Deixar de silenciar a @{name}", "account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}", - "account_note.placeholder": "Sen comentarios", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Preme para engadir nota", "alert.rate_limited.message": "Téntao novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Límite de intentos", - "alert.unexpected.message": "Ocorreu un erro non agardado.", + "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaites!", "announcement.announcement": "Anuncio", "autosuggest_hashtag.per_week": "{count} por semana", @@ -98,9 +101,9 @@ "compose_form.poll.switch_to_single": "Mudar a enquisa para permitir unha soa escolla", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marcar coma contido multimedia sensíbel", - "compose_form.sensitive.marked": "Contido multimedia marcado coma sensíbel", - "compose_form.sensitive.unmarked": "Contido multimedia non marcado coma sensíbel", + "compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}", + "compose_form.sensitive.marked": "{count, plural, one {Multimedia marcado como sensible} other {Multimedia marcados como sensibles}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", "compose_form.spoiler.marked": "O texto está agochado tras un aviso", "compose_form.spoiler.unmarked": "O texto non está agochado", "compose_form.spoiler_placeholder": "Escribe o teu aviso aquí", @@ -109,7 +112,7 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "Tes a certeza de querer bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "Tes a certeza de querer eliminar este estado?", + "confirmations.delete.message": "Tes a certeza de querer eliminar este toot?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?", "confirmations.domain_block.confirm": "Agochar dominio enteiro", @@ -120,7 +123,7 @@ "confirmations.mute.explanation": "Isto agochará as publicacións delas ou nas que as mencionen, mais permitirá que vexan as túas publicacións e sexan seguidoras túas.", "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", - "confirmations.redraft.message": "Tes a certeza de querer eliminar este estado e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", + "confirmations.redraft.message": "Tes a certeza de querer eliminar este toot e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -133,7 +136,7 @@ "directory.local": "Só de {domain}", "directory.new_arrivals": "Recén chegadas", "directory.recently_active": "Activas recentemente", - "embed.instructions": "Engade este estado ó teu sitio web copiando o seguinte código.", + "embed.instructions": "Engade este toot ó teu sitio web copiando o seguinte código.", "embed.preview": "Así será mostrado:", "emoji_button.activity": "Actividade", "emoji_button.custom": "Personalizado", @@ -162,15 +165,15 @@ "empty_column.hashtag": "Aínda non hai nada con este cancelo.", "empty_column.home": "A túa cronoloxía inicial está baleira! Visita {public} ou emprega a procura para atopar outras usuarias.", "empty_column.home.public_timeline": "a cronoloxía pública", - "empty_column.list": "Aínda non hai nada nesta listaxe. Cando os usuarios incluídas na listaxe publiquen mensaxes, amosaranse aquí.", + "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.", "empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.", "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo", "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Non se puido mostrar correctamente a páxina. Habitualmente este erro está causado por algún engadido do navegador ou ferramentas de tradución automática.", "error.unexpected_crash.next_steps": "Tenta actualizar a páxina. Se esto non axuda podes tamén empregar Mastodon noutro navegador ou aplicación nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis", "errors.unexpected_crash.report_issue": "Informar sobre un problema", "follow_request.authorize": "Autorizar", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Calquera destes", "hashtag.column_settings.tag_mode.none": "Ningún destes", "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", "home.hide_announcements": "Agochar anuncios", + "home.settings": "Column settings", "home.show_announcements": "Amosar anuncios", "intervals.full.days": "{number, plural,one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -222,12 +228,12 @@ "keyboard_shortcuts.back": "para voltar atrás", "keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas", "keyboard_shortcuts.boost": "promover", - "keyboard_shortcuts.column": "para destacar un estado nunha das columnas", + "keyboard_shortcuts.column": "para destacar un toot nunha das columnas", "keyboard_shortcuts.compose": "para destacar a área de escritura", "keyboard_shortcuts.description": "Descrición", "keyboard_shortcuts.direct": "para abrir a columna de mensaxes directas", "keyboard_shortcuts.down": "para mover cara abaixo na listaxe", - "keyboard_shortcuts.enter": "para abrir estado", + "keyboard_shortcuts.enter": "para abrir toot", "keyboard_shortcuts.favourite": "para engadir a favoritos", "keyboard_shortcuts.favourites": "para abrir a listaxe dos favoritos", "keyboard_shortcuts.federated": "para abrir a cronoloxía federada", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "para mover cara arriba na listaxe", "lightbox.close": "Fechar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Comprimir a caixa de vista da imaxe", + "lightbox.expand": "Expandir a caixa de vista da imaxe", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", "lightbox.view_context": "Ollar contexto", @@ -266,20 +272,20 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Calquera usuaria á que segues", + "lists.replies_policy.list_replies": "Membros da lista", + "lists.replies_policy.no_replies": "Ninguén", + "lists.replies_policy.title": "Mostrar respostas a:", "lists.search": "Procurar entre as persoas que segues", "lists.subheading": "As túas listaxes", "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}", "loading_indicator.label": "Estase a cargar...", - "media_gallery.toggle_visible": "Trocar visibilidade", + "media_gallery.toggle_visible": "Agochar {number, plural, one {imaxe} other {imaxes}}", "missing_indicator.label": "Non atopado", "missing_indicator.sublabel": "Este recurso non foi atopado", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Duración", "mute_modal.hide_notifications": "Agochar notificacións desta usuaria?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicacións móbiles", "navigation_bar.blocks": "Usuarias bloqueadas", "navigation_bar.bookmarks": "Marcadores", @@ -303,14 +309,14 @@ "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Cronoloxía federada", "navigation_bar.security": "Seguranza", - "notification.favourite": "{name} marcou o teu estado coma favorito", + "notification.favourite": "{name} marcou o teu toot coma favorito", "notification.follow": "{name} comezou a seguirte", "notification.follow_request": "{name} solicitou seguirte", "notification.mention": "{name} mencionoute", "notification.own_poll": "A túa enquisa rematou", "notification.poll": "Unha enquisa na que votaches rematou", - "notification.reblog": "{name} compartiu o teu estado", - "notification.status": "{name} just posted", + "notification.reblog": "{name} compartiu o teu toot", + "notification.status": "{name} publicou", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", "notifications.column_settings.alert": "Notificacións de escritorio", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir son", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Todo", "notifications.filter.boosts": "Compartidos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguimentos", "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Actualizacións de xente á que segues", "notifications.group": "{count} notificacións", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar todas as notificacións como lidas", + "notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso.", + "notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente", + "notifications_permission_banner.enable": "Activar notificacións de escritorio", + "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións crean as notificacións de escritorio a través da {icon} superior unha vez activadas.", + "notifications_permission_banner.title": "Non perder nada", + "picture_in_picture.restore": "Devolver", "poll.closed": "Pechado", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural,one {# persoa} other {# persoas}}", @@ -377,9 +383,9 @@ "report.target": "Denunciar a {target}", "search.placeholder": "Procurar", "search_popout.search_format": "Formato de procura avanzada", - "search_popout.tips.full_text": "Texto simple devolve estados que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", + "search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", "search_popout.tips.hashtag": "cancelo", - "search_popout.tips.status": "estado", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e cancelos", "search_popout.tips.user": "usuaria", "search_results.accounts": "Persoas", @@ -387,13 +393,14 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderación para @{name}", - "status.admin_status": "Abrir este estado na interface de moderación", + "status.admin_status": "Abrir este toot na interface de moderación", "status.block": "Bloquear a @{name}", "status.bookmark": "Marcar", "status.cancel_reblog_private": "Desfacer compartido", "status.cannot_reblog": "Esta publicación non pode ser promovida", - "status.copy": "Copiar ligazón ó estado", + "status.copy": "Copiar ligazón ó toot", "status.delete": "Eliminar", "status.detailed_status": "Vista detallada da conversa", "status.direct": "Mensaxe directa a @{name}", @@ -406,7 +413,7 @@ "status.more": "Máis", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversa", - "status.open": "Expandir este estado", + "status.open": "Expandir este toot", "status.pin": "Fixar no perfil", "status.pinned": "Toot fixado", "status.read_more": "Ler máis", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Arrastra e solta para subir", - "upload_button.label": "Engadir multimedia ({formats})", + "upload_button.label": "Engadir imaxes, un vídeo ou ficheiro de audio", "upload_error.limit": "Límite máximo do ficheiro a subir excedido.", "upload_error.poll": "Non se poden subir ficheiros nas enquisas.", "upload_form.audio_description": "Describir para persoas con problemas auditivos", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Detectar texto na imaxe", "upload_modal.edit_media": "Editar multimedia", "upload_modal.hint": "Preme ou arrastra o círculo na vista previa para escoller o punto focal que sempre estará á vista en todas as miniaturas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Estase a subir...", "video.close": "Pechar vídeo", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index cce1f29e7..597819f20 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.", "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "הפסקת מעקב", "account.unmute": "הפסקת השתקת @{name}", "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "ללא הערה", "alert.rate_limited.message": "נא לנסות אחרי {retry_time, time, medium}.", "alert.rate_limited.title": "מגבלות מיכסה", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "למתחילים", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 4670e593b..b747b7534 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "टिप्पणियाँ", "account.add_or_remove_from_list": "सूची में जोड़ें या हटाए", "account.badges.bot": "बॉट", - "account.badges.group": "Group", + "account.badges.group": "समूह", "account.block": "@{name} को ब्लॉक करें", "account.block_domain": "{domain} के सारी चीज़े छुपाएं", "account.blocked": "ब्लॉक", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "मूल प्रोफ़ाइल पर अधिक ब्राउज़ करें", "account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें", "account.direct": "प्रत्यक्ष संदेश @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "छिपा हुआ डोमेन", "account.edit_profile": "प्रोफ़ाइल संपादित करें", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "फॉलो करें", "account.followers": "फॉलोवर", "account.followers.empty": "कोई भी इस यूज़र् को फ़ॉलो नहीं करता है", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} अनुगामी} other {{counter} समर्थक}}", + "account.following_counter": "{count, plural, one {{counter} निम्नलिखित} other {{counter} निम्नलिखित}}", + "account.follows": "Follows", "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।", "account.follows_you": "आपको फॉलो करता है", "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", @@ -38,19 +40,20 @@ "account.requested": "मंजूरी का इंतजार। फॉलो रिक्वेस्ट को रद्द करने के लिए क्लिक करें", "account.share": "@{name} की प्रोफाइल शेयर करे", "account.show_reblogs": "@{name} के बूस्ट दिखाए", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} भोंपू} other {{counter} भोंपू}}", "account.unblock": "@{name} को अनब्लॉक करें", "account.unblock_domain": "{domain} दिखाए", "account.unendorse": "प्रोफ़ाइल पर न दिखाए", "account.unfollow": "अनफॉलो करें", "account.unmute": "अनम्यूट @{name}", "account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "नोट्स जोड़ने के लिए क्लिक करें", "alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें", "alert.rate_limited.title": "सीमित दर", "alert.unexpected.message": "एक अप्रत्याशित त्रुटि हुई है!", "alert.unexpected.title": "उफ़!", - "announcement.announcement": "Announcement", + "announcement.announcement": "घोषणा", "autosuggest_hashtag.per_week": "{count} हर सप्ताह", "boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है", "bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", @@ -60,7 +63,7 @@ "bundle_modal_error.message": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", "bundle_modal_error.retry": "दुबारा कोशिश करें", "column.blocks": "ब्लॉक्ड यूज़र्स", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "पुस्तकचिह्न:", "column.community": "लोकल टाइम्लाइन", "column.direct": "सीधा संदेश", "column.directory": "प्रोफाइल्स खोजें", @@ -81,9 +84,9 @@ "column_header.show_settings": "सेटिंग्स दिखाएँ", "column_header.unpin": "अनपिन", "column_subheading.settings": "सेटिंग्स", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "स्थानीय ही", "community.column_settings.media_only": "सिर्फ़ मीडिया", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "केवल सुदूर", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "और जानें", "compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।", @@ -94,8 +97,8 @@ "compose_form.poll.duration": "चुनाव की अवधि", "compose_form.poll.option_placeholder": "कुल विकल्प {number}", "compose_form.poll.remove_option": "इस विकल्प को हटाएँ", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "कई विकल्पों की अनुमति देने के लिए पोल बदलें", + "compose_form.poll.switch_to_single": "एक ही विकल्प के लिए अनुमति देने के लिए पोल बदलें", "compose_form.publish": "टूट्", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "मीडिया को संवेदनशील के रूप में चिह्नित करें", @@ -152,7 +155,7 @@ "empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!", "empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं", "empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "आपके पास अभी तक कोई बुकमार्क नहीं है। जब आप एक बुकमार्क करते हैं, तो यह यहां दिखाई देगा।", "empty_column.community": "लोकल टाइम्लाइन खाली है, कुछ देखने के लिये सार्वजनिक रूप से कुछ लिखें!", "empty_column.direct": "आपके पास कोई सीधा सन्देश नहीं है, जब आप कोई भेजेंगे प्राप्त करेंगे तो यहाँ दिखेगा।", "empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।", @@ -163,19 +166,19 @@ "empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।", "empty_column.home.public_timeline": "सार्वजनिक कालक्रम", "empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "empty_column.lists": "आपके पास अभी तक कोई सूची नहीं है। जब आप एक बनाते हैं, तो यह यहां दिखाई देगा।", + "empty_column.mutes": "आपने अभी तक किसी भी उपयोगकर्ता को म्यूट नहीं किया है।", + "empty_column.notifications": "आपके पास अभी तक कोई सूचना नहीं है। बातचीत शुरू करने के लिए दूसरों के साथ बातचीत करें।", + "empty_column.public": "यहां कुछ नहीं है! सार्वजनिक रूप से कुछ लिखें, या इसे भरने के लिए अन्य सर्वर से उपयोगकर्ताओं का मैन्युअल रूप से अनुसरण करें", + "error.unexpected_crash.explanation": "हमारे कोड या ब्राउज़र संगतता समस्या में बग के कारण, यह पृष्ठ सही ढंग से प्रदर्शित नहीं हो सका।", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "follow_request.authorize": "अधिकार दें", "follow_request.reject": "अस्वीकार करें", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "follow_requests.unlocked_explanation": "हालाँकि आपका खाता लॉक नहीं है, फिर भी {domain} डोमेन स्टाफ ने सोचा कि आप इन खातों के मैन्युअल अनुरोधों की समीक्षा करना चाहते हैं।", "generic.saved": "Saved", "getting_started.developers": "डेवॅलपर्स", "getting_started.directory": "प्रोफ़ाइल निर्देशिका", @@ -194,34 +197,37 @@ "hashtag.column_settings.tag_mode.any": "इनमें से कोई भी", "hashtag.column_settings.tag_mode.none": "इनमें से कोई भी नहीं", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "बुनियादी", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "बूस्ट दिखाए", "home.column_settings.show_replies": "जवाबों को दिखाए", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", + "home.hide_announcements": "घोषणाएँ छिपाएँ", + "home.settings": "Column settings", + "home.show_announcements": "घोषणाएं दिखाएं", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "introduction.federation.action": "अगला", "introduction.federation.federated.headline": "फ़ेडरेटेड", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.federated.text": "महासंघ के अन्य सर्वरों से सार्वजनिक पद संघटित समय-सीमा में दिखाई देंगे।", "introduction.federation.home.headline": "होम", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.home.text": "आपके द्वारा अनुसरण किए जाने वाले लोगों के पोस्ट आपके होम फीड में दिखाई देंगे। आप किसी भी सर्वर पर किसी को भी फॉलो कर सकते हैं!", "introduction.federation.local.headline": "लोकल", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.interactions.action": "Finish toot-orial!", "introduction.interactions.favourite.headline": "पसंदीदा", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.favourite.text": "आप बाद में इसके लिए एक टोट को बचा सकते हैं, और लेखक को यह बता दें कि आपको यह पसंद आया, इसे फेवर करके।", "introduction.interactions.reblog.headline": "बूस्ट", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", "introduction.interactions.reply.headline": "जवाब", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.welcome.action": "आइए शुरू करते हैं!", "introduction.welcome.headline": "पहले कदम", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "introduction.welcome.text": "फेडवर्स में आपका स्वागत है! कुछ ही क्षणों में, आप संदेशों को प्रसारित करने और अपने दोस्तों से विस्तृत सर्वर पर बात करने में सक्षम होंगे। लेकिन यह सर्वर, {domain}, विशेष है - यह आपकी प्रोफ़ाइल को होस्ट करता है, इसलिए इसका नाम याद रखें।", + "keyboard_shortcuts.back": "वापस जाने के लिए", + "keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए", + "keyboard_shortcuts.boost": "बढ़ावा देने के लिए", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "कंपोज़ टेक्स्ट-एरिया पर ध्यान केंद्रित करने के लिए", "keyboard_shortcuts.description": "विवरण", @@ -253,25 +259,25 @@ "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", + "lightbox.close": "बंद करें", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", + "lightbox.next": "अगला", + "lightbox.previous": "पिछला", "lightbox.view_context": "View context", "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", + "lists.account.remove": "सूची से निकालें", + "lists.delete": "सूची हटाएँ", + "lists.edit": "सूची संपादित करें", "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", + "lists.new.create": "सूची जोड़ें", + "lists.new.title_placeholder": "नये सूची का शीर्षक", "lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.list_replies": "Members of the list", "lists.replies_policy.no_replies": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lists.subheading": "आपकी सूचियाँ", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "लोड हो रहा है...", "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", @@ -282,21 +288,21 @@ "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "मोबाइल एप्लिकेशंस", "navigation_bar.blocks": "ब्लॉक्ड यूज़र्स", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "पुस्तकचिह्न:", "navigation_bar.community_timeline": "लोकल टाइम्लाइन", "navigation_bar.compose": "नया टूट् लिखें", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "navigation_bar.direct": "सीधा संदेश", + "navigation_bar.discover": "खोजें", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.edit_profile": "प्रोफ़ाइल संपादित करें", "navigation_bar.favourites": "Favourites", "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follow_requests": "अनुसरण करने के अनुरोध", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", + "navigation_bar.info": "इस सर्वर के बारे में", "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", + "navigation_bar.lists": "सूचियाँ", + "navigation_bar.logout": "बाहर जाए", "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 3002ca49d..3c07c3389 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -1,281 +1,287 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.account_note_header": "Bilješka", + "account.add_or_remove_from_list": "Dodaj ili ukloni s liste", "account.badges.bot": "Bot", - "account.badges.group": "Group", + "account.badges.group": "Grupa", "account.block": "Blokiraj @{name}", - "account.block_domain": "Sakrij sve sa {domain}", - "account.blocked": "Blocked", - "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Cancel follow request", - "account.direct": "Direct Message @{name}", + "account.block_domain": "Blokiraj domenu {domain}", + "account.blocked": "Blokirano", + "account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu", + "account.cancel_follow_request": "Otkaži zahtjev za praćenje", + "account.direct": "Pošalji poruku @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domain hidden", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Feature on profile", - "account.follow": "Slijedi", - "account.followers": "Sljedbenici", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "te slijedi", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.last_status": "Last active", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", + "account.endorse": "Istakni na profilu", + "account.follow": "Prati", + "account.followers": "Pratitelji", + "account.followers.empty": "Nitko još ne prati korisnika/cu.", + "account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}", + "account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}", + "account.follows": "Follows", + "account.follows.empty": "Korisnik/ca još ne prati nikoga.", + "account.follows_you": "Prati te", + "account.hide_reblogs": "Sakrij boostove od @{name}", + "account.last_status": "Posljednja aktivnost", + "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}", + "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.", + "account.media": "Medijski sadržaj", "account.mention": "Spomeni @{name}", - "account.moved_to": "{name} has moved to:", + "account.moved_to": "Račun {name} je premješten na:", "account.mute": "Utišaj @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", - "account.posts": "Postovi", - "account.posts_with_replies": "Toots with replies", + "account.mute_notifications": "Utišaj obavijesti od @{name}", + "account.muted": "Utišano", + "account.never_active": "Nikad", + "account.posts": "Tootovi", + "account.posts_with_replies": "Tootovi i odgovori", "account.report": "Prijavi @{name}", - "account.requested": "Čeka pristanak", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.requested": "Čekanje na potvrdu. Kliknite za otkazivanje zahtjeva za praćenje", + "account.share": "Podijeli profil @{name}", + "account.show_reblogs": "Prikaži boostove od @{name}", + "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}", "account.unblock": "Deblokiraj @{name}", - "account.unblock_domain": "Poništi sakrivanje {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Prestani slijediti", + "account.unblock_domain": "Deblokiraj domenu {domain}", + "account.unendorse": "Ne ističi na profilu", + "account.unfollow": "Prestani pratiti", "account.unmute": "Poništi utišavanje @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", - "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", + "account.unmute_notifications": "Ne utišavaj obavijesti od @{name}", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Kliknite za dodavanje bilješke", + "alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.", + "alert.rate_limited.title": "Ograničenje učestalosti", + "alert.unexpected.message": "Dogodila se neočekivana greška.", + "alert.unexpected.title": "Ups!", + "announcement.announcement": "Najava", + "autosuggest_hashtag.per_week": "{count} tjedno", + "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put", + "bundle_column_error.body": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", + "bundle_column_error.retry": "Pokušajte ponovno", + "bundle_column_error.title": "Greška mreže", + "bundle_modal_error.close": "Zatvori", + "bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", + "bundle_modal_error.retry": "Pokušajte ponovno", "column.blocks": "Blokirani korisnici", - "column.bookmarks": "Bookmarks", - "column.community": "Lokalni timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", - "column.domain_blocks": "Hidden domains", + "column.bookmarks": "Knjižne oznake", + "column.community": "Lokalna vremenska crta", + "column.direct": "Izravne poruke", + "column.directory": "Pregledavanje profila", + "column.domain_blocks": "Blokirane domene", "column.favourites": "Favoriti", - "column.follow_requests": "Zahtjevi za slijeđenje", - "column.home": "Dom", - "column.lists": "Lists", + "column.follow_requests": "Zahtjevi za praćenje", + "column.home": "Početna", + "column.lists": "Liste", "column.mutes": "Utišani korisnici", - "column.notifications": "Notifikacije", - "column.pins": "Pinned toot", - "column.public": "Federalni timeline", + "column.notifications": "Obavijesti", + "column.pins": "Prikvačeni tootovi", + "column.public": "Federalna vremenska crta", "column_back_button.label": "Natrag", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", + "column_header.hide_settings": "Sakrij postavke", + "column_header.moveLeft_settings": "Pomakni stupac ulijevo", + "column_header.moveRight_settings": "Pomakni stupac udesno", + "column_header.pin": "Prikvači", + "column_header.show_settings": "Prikaži postavke", + "column_header.unpin": "Otkvači", "column_subheading.settings": "Postavke", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Tvoj račun nije {locked}. Svatko te može slijediti kako bi vidio postove namijenjene samo tvojim sljedbenicima.", + "community.column_settings.local_only": "Samo lokalno", + "community.column_settings.media_only": "Samo medijski sadržaj", + "community.column_settings.remote_only": "Samo udaljeno", + "compose_form.direct_message_warning": "Ovaj toot bit će poslan samo spomenutim korisnicima.", + "compose_form.direct_message_warning_learn_more": "Saznajte više", + "compose_form.hashtag_warning": "Ovaj toot neće biti prikazan ni pod jednim hashtagom jer je postavljen kao neprikazan. Samo javni tootovi mogu biti pretraživani pomoći hashtagova.", + "compose_form.lock_disclaimer": "Vaš račun nije {locked}. Svatko Vas može pratiti kako bi vidjeli objave namijenjene Vašim pratiteljima.", "compose_form.lock_disclaimer.lock": "zaključan", "compose_form.placeholder": "Što ti je na umu?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "compose_form.poll.add_option": "Dodaj opciju", + "compose_form.poll.duration": "Trajanje ankete", + "compose_form.poll.option_placeholder": "Opcija {number}", + "compose_form.poll.remove_option": "Ukloni ovu opciju", + "compose_form.poll.switch_to_multiple": "Omogući višestruki odabir opcija ankete", + "compose_form.poll.switch_to_single": "Omogući odabir samo jedne opcije ankete", + "compose_form.publish": "Tootni", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Upozorenje o sadržaju", + "compose_form.sensitive.hide": "Označi medijski sadržaj kao osjetljiv", + "compose_form.sensitive.marked": "Medijski sadržaj označen je kao osjetljiv", + "compose_form.sensitive.unmarked": "Medijski sadržaj nije označen kao osjetljiv", + "compose_form.spoiler.marked": "Tekst je skriven iza upozorenja", + "compose_form.spoiler.unmarked": "Tekst nije skriven", + "compose_form.spoiler_placeholder": "Ovdje upišite upozorenje", "confirmation_modal.cancel": "Otkaži", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokiraj i prijavi", "confirmations.block.confirm": "Blokiraj", - "confirmations.block.message": "Želiš li sigurno blokirati {name}?", + "confirmations.block.message": "Sigurno želite blokirati {name}?", "confirmations.delete.confirm": "Obriši", - "confirmations.delete.message": "Želiš li stvarno obrisati ovaj status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Sakrij cijelu domenu", - "confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.delete.message": "Stvarno želite obrisati ovaj toot?", + "confirmations.delete_list.confirm": "Obriši", + "confirmations.delete_list.message": "Jeste li sigurni da želite trajno obrisati ovu listu?", + "confirmations.domain_block.confirm": "Blokiraj cijelu domenu", + "confirmations.domain_block.message": "Jeste li zaista, zaista sigurni da želite blokirati cijelu domenu {domain}? U većini slučajeva dovoljno je i preferirano nekoliko ciljanih blokiranja ili utišavanja. Nećete vidjeti sadržaj s te domene ni u kojim javnim vremenskim crtama ili Vašim obavijestima. Vaši pratitelji s te domene bit će uklonjeni.", + "confirmations.logout.confirm": "Odjavi se", + "confirmations.logout.message": "Jeste li sigurni da se želite odjaviti?", "confirmations.mute.confirm": "Utišaj", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", + "confirmations.mute.explanation": "Ovo će sakriti njihove objave i objave koje ih spominju, ali i dalje će im dopuštati da vide Vaše objave i da Vas prate.", + "confirmations.mute.message": "Jeste li sigurni da želite utišati {name}?", + "confirmations.redraft.confirm": "Izbriši i ponovno uredi", + "confirmations.redraft.message": "Jeste li sigurni da želite izbrisati ovaj toot i ponovno ga urediti? Favoriti i boostovi bit će izgubljeni, a odgovori na izvornu objavu bit će odvojeni.", + "confirmations.reply.confirm": "Odgovori", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.confirm": "Prestani pratiti", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", + "conversation.delete": "Izbriši razgovor", + "conversation.mark_as_read": "Označi kao pročitano", + "conversation.open": "Prikaži razgovor", + "conversation.with": "S {names}", "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", + "directory.local": "Samo iz {domain}", "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", + "directory.recently_active": "Nedavno aktivni", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Aktivnost", - "emoji_button.custom": "Custom", + "emoji_button.custom": "Prilagođeno", "emoji_button.flags": "Zastave", - "emoji_button.food": "Hrana & Piće", - "emoji_button.label": "Umetni smajlije", + "emoji_button.food": "Hrana i piće", + "emoji_button.label": "Umetni emotikone", "emoji_button.nature": "Priroda", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objekti", + "emoji_button.not_found": "Nema emotikona!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Predmeti", "emoji_button.people": "Ljudi", - "emoji_button.recent": "Frequently used", + "emoji_button.recent": "Često korišteno", "emoji_button.search": "Traži...", - "emoji_button.search_results": "Search results", + "emoji_button.search_results": "Rezultati pretraživanja", "emoji_button.symbols": "Simboli", - "emoji_button.travel": "Putovanja & Mjesta", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", + "emoji_button.travel": "Putovanje i mjesta", + "empty_column.account_timeline": "Ovdje nema tootova!", + "empty_column.account_unavailable": "Profil nije dostupan", + "empty_column.blocks": "Još niste blokirali nikoga.", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!", + "empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "Još nema blokiranih domena.", "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.", - "empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.", - "empty_column.home.public_timeline": "javni timeline", - "empty_column.list": "There is nothing in this list yet.", + "empty_column.home": "Vaša početna vremenska crta je prazna! Posjetite {public} ili koristite tražilicu kako biste započeli i upoznali druge korisnike.", + "empty_column.home.public_timeline": "javnu vremensku crtu", + "empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.", - "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio", + "empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.", + "empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", + "errors.unexpected_crash.report_issue": "Prijavi problem", "follow_request.authorize": "Autoriziraj", "follow_request.reject": "Odbij", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "generic.saved": "Spremljeno", + "getting_started.developers": "Razvijatelji", + "getting_started.directory": "Direktorij profila", + "getting_started.documentation": "Dokumentacija", "getting_started.heading": "Počnimo", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon je softver otvorenog koda. Možeš pridonijeti ili prijaviti probleme na GitHubu {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "getting_started.invite": "Pozovi ljude", + "getting_started.open_source_notice": "Mastodon je softver otvorenog kôda. Možete pridonijeti ili prijaviti probleme na GitHubu na {github}.", + "getting_started.security": "Postavke računa", + "getting_started.terms": "Uvjeti pružanja usluga", + "hashtag.column_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "ili {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.select.no_options_message": "Nisu pronađeni prijedlozi", + "hashtag.column_settings.select.placeholder": "Unesite hashtagove…", + "hashtag.column_settings.tag_mode.all": "Sve navedeno", + "hashtag.column_settings.tag_mode.any": "Bilo koji navedeni", + "hashtag.column_settings.tag_mode.none": "Nijedan navedeni", + "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", + "home.hide_announcements": "Sakrij najave", + "home.settings": "Column settings", + "home.show_announcements": "Prikaži najave", + "intervals.full.days": "{number, plural, one {# dan} other {# dana}}", + "intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}", + "intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}", + "introduction.federation.action": "Sljedeće", + "introduction.federation.federated.headline": "Federalno", + "introduction.federation.federated.text": "Javne objave s drugih poslužitelja fediverzuma prikazat će se u federalnoj vremenskoj crti.", + "introduction.federation.home.headline": "Početna", + "introduction.federation.home.text": "Objave ljudi koje pratite prikazat će se na Vašoj početnoj stranici. Možete pratiti bilo koga na bilo kojem poslužitelju!", + "introduction.federation.local.headline": "Lokalno", + "introduction.federation.local.text": "Javne objave ljudi na istom poslužitelju prikazat će se u lokalnoj vremenskoj crti.", + "introduction.interactions.action": "Dovrši tutorijal!", + "introduction.interactions.favourite.headline": "Favoriti", + "introduction.interactions.favourite.text": "Toot možete spremiti za kasnije i javiti njegovom autoru da Vam se sviđa tako što ga označite kao favorit.", + "introduction.interactions.reblog.headline": "Boostanje", + "introduction.interactions.reblog.text": "Tuđe tootove možete dijeliti sa svojim pratiteljima tako što ih boostate.", + "introduction.interactions.reply.headline": "Odgovaranje", + "introduction.interactions.reply.text": "Možete odgovoriti na tuđe i svoje tootove, čime će se oni povezati u razgovor.", + "introduction.welcome.action": "Krenimo!", + "introduction.welcome.headline": "Prvi koraci", + "introduction.welcome.text": "Dobro došli na fediverzum! Za nekoliko trenutaka moći ćete dijeliti poruke i razgovara sa svojim prijateljima kroz široki raspon poslužitelja. Ali ovaj poslužitelj, {domain}, je poseban — on sadrži Vaš profil, pa zapamtite njegovo ime.", + "keyboard_shortcuts.back": "za vraćanje natrag", + "keyboard_shortcuts.blocked": "za otvaranje liste blokiranih korisnika", + "keyboard_shortcuts.boost": "za boostanje", + "keyboard_shortcuts.column": "za fokusiranje na toot u jednom od stupaca", + "keyboard_shortcuts.compose": "za fokusiranje na tekstualni okvir za stvaranje", + "keyboard_shortcuts.description": "Opis", + "keyboard_shortcuts.direct": "za otvaranje stupca s izravnim porukama", + "keyboard_shortcuts.down": "za pomak dolje na listi", + "keyboard_shortcuts.enter": "za otvaranje toota", + "keyboard_shortcuts.favourite": "za označavanje favoritom", + "keyboard_shortcuts.favourites": "za otvaranje liste favorita", + "keyboard_shortcuts.federated": "za otvaranje federalne vremenske crte", + "keyboard_shortcuts.heading": "Tipkovnički prečaci", + "keyboard_shortcuts.home": "za otvaranje početne vremenske crte", + "keyboard_shortcuts.hotkey": "Tipkovnički prečac", + "keyboard_shortcuts.legend": "za prikaz ove legende", + "keyboard_shortcuts.local": "za otvaranje lokalne vremenske crte", + "keyboard_shortcuts.mention": "za spominjanje autora", + "keyboard_shortcuts.muted": "za otvaranje liste utišanih korisnika", + "keyboard_shortcuts.my_profile": "za otvaranje Vašeg profila", + "keyboard_shortcuts.notifications": "za otvaranje stupca s obavijestima", + "keyboard_shortcuts.open_media": "za otvaranje medijskog sadržaja", + "keyboard_shortcuts.pinned": "za otvaranje liste prikvačenih tootova", + "keyboard_shortcuts.profile": "za otvaranje autorovog profila", + "keyboard_shortcuts.reply": "za odgovaranje", + "keyboard_shortcuts.requests": "za otvaranje liste zahtjeva za praćenje", + "keyboard_shortcuts.search": "za fokusiranje na tražilicu", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "za prikaz/sakrivanje medijskog sadržaja", + "keyboard_shortcuts.toot": "za započinjanje novog toota", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Zatvori", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", + "lightbox.next": "Sljedeće", + "lightbox.previous": "Prethodno", + "lightbox.view_context": "Prikaži kontekst", + "lists.account.add": "Dodaj na listu", + "lists.account.remove": "Ukloni s liste", + "lists.delete": "Izbriši listu", + "lists.edit": "Uredi listu", + "lists.edit.submit": "Promijeni naslov", + "lists.new.create": "Dodaj listu", + "lists.new.title_placeholder": "Naziv nove liste", "lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.list_replies": "Members of the list", "lists.replies_policy.no_replies": "No one", "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lists.search": "Traži među praćenim ljudima", + "lists.subheading": "Vaše liste", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Učitavam...", - "media_gallery.toggle_visible": "Preklopi vidljivost", - "missing_indicator.label": "Nije nađen", + "loading_indicator.label": "Učitavanje...", + "media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}", + "missing_indicator.label": "Nije pronađeno", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -283,58 +289,58 @@ "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Lokalni timeline", + "navigation_bar.community_timeline": "Lokalna vremenska crta", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.direct": "Izravne poruke", + "navigation_bar.discover": "Istraživanje", + "navigation_bar.domain_blocks": "Blokirane domene", "navigation_bar.edit_profile": "Uredi profil", "navigation_bar.favourites": "Favoriti", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Zahtjevi za slijeđenje", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "Više informacija", - "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", + "navigation_bar.filters": "Utišane riječi", + "navigation_bar.follow_requests": "Zahtjevi za praćenje", + "navigation_bar.follows_and_followers": "Praćeni i pratitelji", + "navigation_bar.info": "O ovom poslužitelju", + "navigation_bar.keyboard_shortcuts": "Tipkovnički prečaci", + "navigation_bar.lists": "Liste", "navigation_bar.logout": "Odjavi se", "navigation_bar.mutes": "Utišani korisnici", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.personal": "Osobno", + "navigation_bar.pins": "Prikvačeni tootovi", "navigation_bar.preferences": "Postavke", - "navigation_bar.public_timeline": "Federalni timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} je lajkao tvoj status", - "notification.follow": "{name} te sada slijedi", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} te je spomenuo", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} je podigao tvoj status", + "navigation_bar.public_timeline": "Federalna vremenska crta", + "navigation_bar.security": "Sigurnost", + "notification.favourite": "{name} je favorizirao/la Vaš toot", + "notification.follow": "{name} Vas je počeo/la pratiti", + "notification.follow_request": "{name} zatražio/la je da Vas prati", + "notification.mention": "{name} Vas je spomenuo", + "notification.own_poll": "Vaša anketa je završila", + "notification.poll": "Anketa u kojoj ste glasali je završila", + "notification.reblog": "{name} je boostao/la Vaš status", "notification.status": "{name} just posted", - "notifications.clear": "Očisti notifikacije", - "notifications.clear_confirmation": "Želiš li zaista obrisati sve svoje notifikacije?", - "notifications.column_settings.alert": "Desktop notifikacije", + "notifications.clear": "Očisti obavijesti", + "notifications.clear_confirmation": "Želite li zaista trajno očistiti sve Vaše obavijesti?", + "notifications.column_settings.alert": "Obavijesti radne površine", "notifications.column_settings.favourite": "Favoriti:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "Novi sljedbenici:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije", + "notifications.column_settings.filter_bar.category": "Brza traka filtera", + "notifications.column_settings.filter_bar.show": "Prikaži", + "notifications.column_settings.follow": "Novi pratitelji:", + "notifications.column_settings.follow_request": "Novi zahtjevi za praćenje:", "notifications.column_settings.mention": "Spominjanja:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.poll": "Rezultati anketa:", + "notifications.column_settings.push": "Push obavijesti", "notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.sound": "Sviraj zvuk", "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.all": "Sve", + "notifications.filter.boosts": "Boostovi", + "notifications.filter.favourites": "Favoriti", + "notifications.filter.follows": "Praćenja", + "notifications.filter.mentions": "Spominjanja", + "notifications.filter.polls": "Rezultati anketa", "notifications.filter.statuses": "Updates from people you follow", - "notifications.group": "{count} notifications", + "notifications.group": "{count} obavijesti", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", @@ -342,143 +348,144 @@ "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Podesi status privatnosti", - "privacy.direct.long": "Prikaži samo spomenutim korisnicima", - "privacy.direct.short": "Direktno", - "privacy.private.long": "Prikaži samo sljedbenicima", - "privacy.private.short": "Privatno", - "privacy.public.long": "Postaj na javne timeline", + "poll.closed": "Završeno", + "poll.refresh": "Osvježi", + "poll.total_people": "{count, plural, one {# osoba} few {# osobe} other {# osoba}}", + "poll.total_votes": "{count, plural, one {# glas} few {# glasa} other {# glasova}}", + "poll.vote": "Glasaj", + "poll.voted": "Vi ste glasali za ovaj odgovor", + "poll_button.add_poll": "Dodaj anketu", + "poll_button.remove_poll": "Ukloni anketu", + "privacy.change": "Podesi privatnost toota", + "privacy.direct.long": "Vidljivo samo spomenutim korisnicima", + "privacy.direct.short": "Izravno", + "privacy.private.long": "Vidljivo samo pratiteljima", + "privacy.private.short": "Samo pratitelji", + "privacy.public.long": "Vidljivo svima, prikazano u javim vremenskim crtama", "privacy.public.short": "Javno", - "privacy.unlisted.long": "Ne prikazuj u javnim timelineovima", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "privacy.unlisted.long": "Vidljivo svima, ali se ne prikazuje u javnim vremenskim crtama", + "privacy.unlisted.short": "Neprikazano", + "refresh": "Osvježi", + "regeneration_indicator.label": "Učitavanje…", + "regeneration_indicator.sublabel": "Priprema se Vaša početna stranica!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "sada", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", + "relative_time.today": "danas", "reply_indicator.cancel": "Otkaži", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.forward": "Proslijedi {target}", + "report.forward_hint": "Račun je s drugog poslužitelja. Poslati anonimiziranu kopiju prijave i tamo?", + "report.hint": "Prijava bit će poslana moderatorima poslužitelja. Ispod možete dati objašnjenje zašto prijavljujete ovaj račun:", "report.placeholder": "Dodatni komentari", "report.submit": "Pošalji", - "report.target": "Prijavljivanje", + "report.target": "Prijavljivanje korisnika {target}", "search.placeholder": "Traži", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Format naprednog pretraživanja", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", + "search_popout.tips.user": "korisnik", "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "Ovaj post ne može biti boostan", + "status.cannot_reblog": "Ova objava ne može biti boostana", "status.copy": "Copy link to status", "status.delete": "Obriši", "status.detailed_status": "Detailed conversation view", "status.direct": "Direct message @{name}", "status.embed": "Embed", - "status.favourite": "Označi omiljenim", + "status.favourite": "Označi favoritom", "status.filtered": "Filtered", "status.load_more": "Učitaj više", - "status.media_hidden": "Sakriven media sadržaj", + "status.media_hidden": "Sakriven medijski sadržaj", "status.mention": "Spomeni @{name}", "status.more": "More", "status.mute": "Mute @{name}", "status.mute_conversation": "Utišaj razgovor", - "status.open": "Proširi ovaj status", + "status.open": "Proširi ovaj toot", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Podigni", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} je podigao", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", + "status.read_more": "Pročitajte više", + "status.reblog": "Boostaj", + "status.reblog_private": "Boostaj s izvornom vidljivošću", + "status.reblogged_by": "{name} je boostao/la", + "status.reblogs.empty": "Nitko još nije boostao ovaj toot. Kada netko to učini, ovdje će biti prikazani.", + "status.redraft": "Izbriši i ponovno uredi", + "status.remove_bookmark": "Ukloni knjižnu oznaku", "status.reply": "Odgovori", - "status.replyAll": "Odgovori na temu", + "status.replyAll": "Odgovori na niz", "status.report": "Prijavi @{name}", "status.sensitive_warning": "Osjetljiv sadržaj", - "status.share": "Share", + "status.share": "Podijeli", "status.show_less": "Pokaži manje", "status.show_less_all": "Show less for all", "status.show_more": "Pokaži više", "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", + "status.show_thread": "Prikaži nit", + "status.uncached_media_warning": "Nije dostupno", "status.unmute_conversation": "Poništi utišavanje razgovora", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federalni", - "tabs_bar.home": "Dom", + "status.unpin": "Otkvači s profila", + "suggestions.dismiss": "Odbaci prijedlog", + "suggestions.header": "Možda Vas zanima…", + "tabs_bar.federated_timeline": "Federalno", + "tabs_bar.home": "Početna", "tabs_bar.local_timeline": "Lokalno", - "tabs_bar.notifications": "Notifikacije", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "tabs_bar.notifications": "Obavijesti", + "tabs_bar.search": "Traži", + "time_remaining.days": "{number, plural, one {preostao # dan} other {preostalo # dana}}", + "time_remaining.hours": "{number, plural, one {preostao # sat} few {preostalo # sata} other {preostalo # sati}}", + "time_remaining.minutes": "{number, plural, one {preostala # minuta} few {preostale # minute} other {preostalo # minuta}}", "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "time_remaining.seconds": "{number, plural, one {preostala # sekunda} few {preostale # sekunde} other {preostalo # sekundi}}", + "timeline_hint.remote_resource_not_displayed": "{resource} s drugih poslužitelja nisu prikazani.", + "timeline_hint.resources.followers": "Pratitelji", + "timeline_hint.resources.follows": "Praćenja", + "timeline_hint.resources.statuses": "Stariji tootovi", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Povuci i spusti kako bi uploadao", - "upload_button.label": "Dodaj media", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Poništi", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "trends.trending_now": "Popularno", + "ui.beforeunload": "Vaša skica bit će izgubljena ako napustite Mastodon.", + "units.short.billion": "{count} mlrd.", + "units.short.million": "{count} mil.", + "units.short.thousand": "{count} tis.", + "upload_area.title": "Povucite i ispustite za prijenos", + "upload_button.label": "Dodajte slike, video ili audio datoteku", + "upload_error.limit": "Ograničenje prijenosa datoteka je prekoračeno.", + "upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.", + "upload_form.audio_description": "Opišite za ljude sa slabim sluhom", + "upload_form.description": "Opišite za ljude sa slabim vidom", + "upload_form.edit": "Uredi", + "upload_form.thumbnail": "Promijeni pretpregled", + "upload_form.undo": "Obriši", + "upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom", + "upload_modal.analyzing_picture": "Analiza slike…", + "upload_modal.apply": "Primijeni", + "upload_modal.choose_image": "Odaberite sliku", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", + "upload_modal.detect_text": "Detektiraj tekst sa slike", + "upload_modal.edit_media": "Uređivanje medija", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploadam...", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "upload_progress.label": "Prenošenje...", + "video.close": "Zatvori video", + "video.download": "Preuzmi datoteku", + "video.exit_fullscreen": "Izađi iz cijelog zaslona", + "video.expand": "Proširi video", + "video.fullscreen": "Cijeli zaslon", + "video.hide": "Sakrij video", + "video.mute": "Utišaj zvuk", + "video.pause": "Pauziraj", + "video.play": "Reproduciraj", + "video.unmute": "Uključi zvuk" } diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 77fdfb3c7..e79975d8f 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Megjegyzés @{name} fiókhoz", + "account.account_note_header": "Feljegyzés", "account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listáról", "account.badges.bot": "Bot", "account.badges.group": "Csoport", @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "További böngészés az eredeti profilon", "account.cancel_follow_request": "Követési kérelem törlése", "account.direct": "Közvetlen üzenet @{name} számára", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Figyelmeztess, ha @{name} tülköl", "account.endorse": "Kiemelés a profilodon", "account.follow": "Követés", "account.followers": "Követő", "account.followers.empty": "Ezt a felhasználót még senki sem követi.", "account.followers_counter": "{count, plural, one {{counter} Követő} other {{counter} Követő}}", "account.following_counter": "{count, plural, other {{counter} Követett}}", + "account.follows": "Follows", "account.follows.empty": "Ez a felhasználó még senkit sem követ.", "account.follows_you": "Követ téged", "account.hide_reblogs": "@{name} megtolásainak némítása", @@ -45,7 +47,8 @@ "account.unfollow": "Követés vége", "account.unmute": "@{name} némítás feloldása", "account.unmute_notifications": "@{name} némított értesítéseinek feloldása", - "account_note.placeholder": "Nincs megjegyzés", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klikk a feljegyzéshez", "alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.", "alert.rate_limited.title": "Forgalomkorlátozás", "alert.unexpected.message": "Váratlan hiba történt.", @@ -168,9 +171,9 @@ "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.", "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd", "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző beépülő vagy egy automatikus fordító okozza.", "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", "errors.unexpected_crash.report_issue": "Probléma jelentése", "follow_request.authorize": "Engedélyezés", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Alapvető", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_replies": "Válaszok mutatása", "home.hide_announcements": "Közlemények elrejtése", + "home.settings": "Column settings", "home.show_announcements": "Közlemények mutatása", "intervals.full.days": "{number, plural, one {# nap} other {# nap}}", "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}", @@ -254,11 +260,11 @@ "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele", "keyboard_shortcuts.up": "felfelé mozdítás a listában", "lightbox.close": "Bezárás", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Képnézet összecsukása", + "lightbox.expand": "Képnézet kinagyítása", "lightbox.next": "Következő", "lightbox.previous": "Előző", - "lightbox.view_context": "Kontextus megtekintése", + "lightbox.view_context": "Környezet megtekintése", "lists.account.add": "Hozzáadás a listához", "lists.account.remove": "Eltávolítás a listából", "lists.delete": "Lista törlése", @@ -266,10 +272,10 @@ "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", "lists.new.title_placeholder": "Új lista címe", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Bármely követett felhasználó", + "lists.replies_policy.list_replies": "A lista tagjai", + "lists.replies_policy.no_replies": "Senki", + "lists.replies_policy.title": "Nekik mutassuk a válaszokat:", "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", "load_pending": "{count, plural, one {# új elem} other {# új elem}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Láthatóság állítása", "missing_indicator.label": "Nincs találat", "missing_indicator.sublabel": "Ez az erőforrás nem található", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Időtartam", "mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Határozatlan", "navigation_bar.apps": "Mobil appok", "navigation_bar.blocks": "Letiltott felhasználók", "navigation_bar.bookmarks": "Könyvjelzők", @@ -310,7 +316,7 @@ "notification.own_poll": "A szavazásod véget ért", "notification.poll": "Egy szavazás, melyben részt vettél, véget ért", "notification.reblog": "{name} megtolta a tülködet", - "notification.status": "{name} just posted", + "notification.status": "{name} tülkölt egyet", "notifications.clear": "Értesítések törlése", "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", "notifications.column_settings.alert": "Asztali értesítések", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Megtolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Új tülkök:", "notifications.filter.all": "Mind", "notifications.filter.boosts": "Megtolások", "notifications.filter.favourites": "Kedvencnek jelölések", "notifications.filter.follows": "Követések", "notifications.filter.mentions": "Megemlítések", "notifications.filter.polls": "Szavazások eredményei", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Frissítések azoktól, akiket követsz", "notifications.group": "{count} értesítés", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Minden értesítés olvasottnak jelölése", + "notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.", + "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben", + "notifications_permission_banner.enable": "Asztali értesítések engedélyezése", + "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", + "notifications_permission_banner.title": "Soha ne mulassz el semmit", + "picture_in_picture.restore": "Visszarakás", "poll.closed": "Lezárva", "poll.refresh": "Frissítés", "poll.total_people": "{count, plural, one {# személy} other {# személy}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tülkök", "search_results.statuses_fts_disabled": "Ezen a szerveren nem engedélyezett a tülkök tartalom szerinti keresése.", "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz", "status.admin_status": "Tülk megnyitása moderációra", "status.block": "@{name} letiltása", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Húzd ide a feltöltéshez", - "upload_button.label": "Média hozzáadása ({formats})", + "upload_button.label": "Média hozzáadása", "upload_error.limit": "Túllépted a fájlfeltöltési korlátot.", "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_form.audio_description": "Írja le a hallássérültek számára", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Szöveg felismerése a képről", "upload_modal.edit_media": "Média szerkesztése", "upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR előkészítése…", "upload_modal.preview_label": "Előnézet ({ratio})", "upload_progress.label": "Feltöltés...", "video.close": "Videó bezárása", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index af2873410..470645244 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -6,10 +6,11 @@ "account.block": "Արգելափակել @{name}֊ին", "account.block_domain": "Թաքցնել ամէնը հետեւեալ տիրոյթից՝ {domain}", "account.blocked": "Արգելափակուած է", - "account.browse_more_on_origin_server": "Դիտել ավելին իրական պրոֆիլում", + "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.cancel_follow_request": "չեղարկել հետեւելու հայցը", "account.direct": "Նամակ գրել @{name} -ին", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել անձնական էջը", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։", "account.followers_counter": "{count, plural, one {{counter} Հետևորդ} other {{counter} Հետևորդներ}}", "account.following_counter": "{count, plural, other {{counter} Հետևում են}}", + "account.follows": "Follows", "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", @@ -45,6 +47,7 @@ "account.unfollow": "Ապահետեւել", "account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Սեղմեք գրառելու համար", "alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։", "alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին", @@ -85,7 +88,7 @@ "community.column_settings.media_only": "Media only", "community.column_settings.remote_only": "Միայն հեռակա", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Իմանալ ավելին", + "compose_form.direct_message_warning_learn_more": "Իմանալ աւելին", "compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։", "compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։", "compose_form.lock_disclaimer.lock": "փակ", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Ցանկացածը", "hashtag.column_settings.tag_mode.none": "Ոչ մեկը", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Հիմնական", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", + "home.settings": "Column settings", "home.show_announcements": "Ցուցադրել յայտարարութիւնները", "intervals.full.days": "{number, plural, one {# օր} other {# օր}}", "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}", @@ -312,8 +318,8 @@ "notification.reblog": "{name} տարածեց թութդ", "notification.status": "{name} just posted", "notifications.clear": "Մաքրել ծանուցումները", - "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապես մաքրել քո բոլոր ծանուցումները։", - "notifications.column_settings.alert": "Աշխատատիրույթի ծանուցումներ", + "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։", + "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", "notifications.column_settings.favourite": "Հաւանածներից՝", "notifications.column_settings.filter_bar.advanced": "Ցուցադրել բոլոր կատեգորիաները", "notifications.column_settings.filter_bar.category": "Արագ զտման վահանակ", @@ -371,7 +377,7 @@ "reply_indicator.cancel": "Չեղարկել", "report.forward": "Փոխանցել {target}֊ին", "report.forward_hint": "Այս հաշիւ այլ հանգոյցից է։ Ուղարկե՞մ այնտեղ էլ այս բողոքի անոնիմ պատճէնը։", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.hint": "Այս զեկոյցը կուղարկուի հանգոյցի մոդերատորներին։ Ներքեւում կարող ես տրամադրել բացատրութիւն, թէ ինչու ես զեկուցում այս հաշուի մասին․", "report.placeholder": "Լրացուցիչ մեկնաբանութիւններ", "report.submit": "Ուղարկել", "report.target": "Բողոքել {target}֊ի մասին", @@ -387,6 +393,7 @@ "search_results.statuses": "Թթեր", "search_results.statuses_fts_disabled": "Այս հանգոյցում միացուած չէ ըստ բովանդակութեան թթեր փնտրելու հնարաւորութիւնը։", "search_results.total": "{count, number} {count, plural, one {արդիւնք} other {արդիւնք}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Բացել @{name} օգտատիրոջ մոդերացիայի դիմերէսը։", "status.admin_status": "Բացել այս գրառումը մոդերատորի դիմերէսի մէջ", "status.block": "Արգելափակել @{name}֊ին", @@ -400,16 +407,16 @@ "status.embed": "Ներդնել", "status.favourite": "Հավանել", "status.filtered": "Զտված", - "status.load_more": "Բեռնել ավելին", + "status.load_more": "Բեռնել աւելին", "status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է", "status.mention": "Նշել @{name}֊ին", - "status.more": "Ավելին", + "status.more": "Աւելին", "status.mute": "Լռեցնել @{name}֊ին", "status.mute_conversation": "Լռեցնել խօսակցութիւնը", "status.open": "Ընդարձակել այս թութը", "status.pin": "Ամրացնել անձնական էջում", "status.pinned": "Ամրացված թութ", - "status.read_more": "Կարդալ ավելին", + "status.read_more": "Կարդալ աւելին", "status.reblog": "Տարածել", "status.reblog_private": "Տարածել սեփական լսարանին", "status.reblogged_by": "{name} տարածել է", @@ -423,7 +430,7 @@ "status.share": "Կիսվել", "status.show_less": "Պակաս", "status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները", - "status.show_more": "Ավելին", + "status.show_more": "Աւելին", "status.show_more_all": "Ցուցադրել բոլոր նախազգուշացնումները", "status.show_thread": "Բացել շղթան", "status.uncached_media_warning": "Անհասանելի", @@ -445,7 +452,7 @@ "timeline_hint.resources.followers": "Հետևորդներ", "timeline_hint.resources.follows": "Հետևել", "timeline_hint.resources.statuses": "Հին թութեր", - "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խոսում են", + "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են", "trends.trending_now": "Այժմ արդիական", "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։", "units.short.billion": "{count}մլրդ", @@ -479,6 +486,6 @@ "video.hide": "Թաքցնել տեսագրութիւնը", "video.mute": "Լռեցնել ձայնը", "video.pause": "Դադար տալ", - "video.play": "Նվագել", + "video.play": "Նուագել", "video.unmute": "Միացնել ձայնը" } diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 310a2cb67..0849a3f3f 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -1,24 +1,26 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Catatan", "account.add_or_remove_from_list": "Tambah atau Hapus dari daftar", "account.badges.bot": "Bot", "account.badges.group": "Grup", "account.block": "Blokir @{name}", "account.block_domain": "Sembunyikan segalanya dari {domain}", "account.blocked": "Terblokir", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Lihat lebih lanjut diprofil asli", "account.cancel_follow_request": "Batalkan permintaan ikuti", "account.direct": "Direct Message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain disembunyikan", "account.edit_profile": "Ubah profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Beritahu saya saat @{name} memposting", "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", "account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, other {{counter} Pengikut}}", + "account.following_counter": "{count, plural, other {{counter} Mengikuti}}", + "account.follows": "Follows", "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", @@ -38,14 +40,15 @@ "account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan", "account.share": "Bagikan profil @{name}", "account.show_reblogs": "Tampilkan boost dari @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, other {{counter} Toot}}", "account.unblock": "Hapus blokir @{name}", - "account.unblock_domain": "Tampilkan {domain}", + "account.unblock_domain": "Buka blokir domain {domain}", "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Berhenti mengikuti", "account.unmute": "Berhenti membisukan @{name}", "account.unmute_notifications": "Munculkan notifikasi dari @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klik untuk menambah catatan", "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", "alert.rate_limited.title": "Batasan tingkat", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", @@ -81,9 +84,9 @@ "column_header.show_settings": "Tampilkan pengaturan", "column_header.unpin": "Lepaskan", "column_subheading.settings": "Pengaturan", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Hanya lokal", "community.column_settings.media_only": "Hanya media", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Hanya jarak jauh", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya", "compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.", @@ -98,9 +101,9 @@ "compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Tandai sebagai media sensitif", - "compose_form.sensitive.marked": "Sumber ini telah ditandai sebagai sumber sensitif.", - "compose_form.sensitive.unmarked": "Sumber ini tidak ditandai sebagai sumber sensitif", + "compose_form.sensitive.hide": "{count, plural, other {Tandai media sebagai sensitif}}", + "compose_form.sensitive.marked": "{count, plural, other {Media ini ditandai sebagai sensitif}}", + "compose_form.sensitive.unmarked": "{count, plural, other {Media ini tidak ditandai sebagai sensitif}}", "compose_form.spoiler.marked": "Teks disembunyikan dibalik peringatan", "compose_form.spoiler.unmarked": "Teks tidak tersembunyi", "compose_form.spoiler_placeholder": "Peringatan konten", @@ -168,15 +171,15 @@ "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.", "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini", "error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Halaman ini tidak dapat ditampilkan dengan benar. Kesalahan ini mungkin disebabkan pengaya peramban atau alat terjemahan otomatis.", "error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi murni.", "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", "errors.unexpected_crash.report_issue": "Laporkan masalah", "follow_request.authorize": "Izinkan", "follow_request.reject": "Tolak", "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", - "generic.saved": "Saved", + "generic.saved": "Disimpan", "getting_started.developers": "Pengembang", "getting_started.directory": "Direktori profil", "getting_started.documentation": "Dokumentasi", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Semua ini", "hashtag.column_settings.tag_mode.none": "Tak satu pun", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Dasar", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", "home.hide_announcements": "Sembunyikan pengumuman", + "home.settings": "Column settings", "home.show_announcements": "Tampilkan pengumuman", "intervals.full.days": "{number, plural, other {# hari}}", "intervals.full.hours": "{number, plural, other {# jam}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "balas", "keyboard_shortcuts.requests": "buka daftar permintaan ikuti", "keyboard_shortcuts.search": "untuk fokus mencari", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "untuk menampilkan/menyembunyikan bidang CW", "keyboard_shortcuts.start": "buka kolom \"memulai\"", "keyboard_shortcuts.toggle_hidden": "tampilkan/sembunyikan teks di belakang CW", "keyboard_shortcuts.toggle_sensitivity": "tampilkan/sembunyikan media", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Kompres kotak tampilan gambar", + "lightbox.expand": "Besarkan kotak tampilan gambar", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", "lightbox.view_context": "Lihat konteks", @@ -266,10 +272,10 @@ "lists.edit.submit": "Ubah judul", "lists.new.create": "Tambah daftar", "lists.new.title_placeholder": "Judul daftar baru", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Siapapun pengguna yang diikuti", + "lists.replies_policy.list_replies": "Anggota di daftar tersebut", + "lists.replies_policy.no_replies": "Tidak ada satu pun", + "lists.replies_policy.title": "Tampilkan balasan ke:", "lists.search": "Cari di antara orang yang Anda ikuti", "lists.subheading": "Daftar Anda", "load_pending": "{count, plural, other {# item baru}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Tampil/Sembunyikan", "missing_indicator.label": "Tidak ditemukan", "missing_indicator.sublabel": "Sumber daya tak bisa ditemukan", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durasi", "mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Tak terbatas", "navigation_bar.apps": "Aplikasi mobile", "navigation_bar.blocks": "Pengguna diblokir", "navigation_bar.bookmarks": "Markah", @@ -310,7 +316,7 @@ "notification.own_poll": "Japat Anda telah berakhir", "notification.poll": "Japat yang Anda ikuti telah berakhir", "notification.reblog": "{name} mem-boost status anda", - "notification.status": "{name} just posted", + "notification.status": "{name} baru saja memposting", "notifications.clear": "Hapus notifikasi", "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?", "notifications.column_settings.alert": "Notifikasi desktop", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Toot baru:", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Boost", "notifications.filter.favourites": "Favorit", "notifications.filter.follows": "Diikuti", "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Hasil japat", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti", "notifications.group": "{count} notifikasi", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca", + "notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.", + "notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya", + "notifications_permission_banner.enable": "Aktifkan notifikasi desktop", + "notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.", + "notifications_permission_banner.title": "Jangan lewatkan apapun", + "picture_in_picture.restore": "Taruh kembali", "poll.closed": "Ditutup", "poll.refresh": "Segarkan", "poll.total_people": "{count, plural, other {# orang}}", @@ -365,7 +371,7 @@ "relative_time.days": "{number}h", "relative_time.hours": "{number}j", "relative_time.just_now": "sekarang", - "relative_time.minutes": "{number}b", + "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}d", "relative_time.today": "hari ini", "reply_indicator.cancel": "Batal", @@ -387,6 +393,7 @@ "search_results.statuses": "Toot", "search_results.statuses_fts_disabled": "Pencarian toot berdasarkan konten tidak diaktifkan di server Mastadon ini.", "search_results.total": "{count, number} {count, plural, one {hasil} other {hasil}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Buka antar muka moderasi untuk @{name}", "status.admin_status": "Buka status ini dalam antar muka moderasi", "status.block": "Blokir @{name}", @@ -441,16 +448,16 @@ "time_remaining.minutes": "{number, plural, other {# menit}} tersisa", "time_remaining.moments": "Momen tersisa", "time_remaining.seconds": "{number, plural, other {# detik}} tersisa", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} dari server lain tidak ditampilkan.", + "timeline_hint.resources.followers": "Pengikut", + "timeline_hint.resources.follows": "Ikuti", + "timeline_hint.resources.statuses": "Toot lama", + "trends.counter_by_accounts": "{count, plural, other {{counter} orang}} berbicara", "trends.trending_now": "Sedang tren sekarang", "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}M", + "units.short.million": "{count}Jt", + "units.short.thousand": "{count}Rb", "upload_area.title": "Seret & lepaskan untuk mengunggah", "upload_button.label": "Tambahkan media", "upload_error.limit": "Batas unggah berkas terlampaui.", @@ -458,17 +465,17 @@ "upload_form.audio_description": "Penjelasan untuk orang dengan gangguan pendengaran", "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas", "upload_form.edit": "Sunting", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Ubah gambar kecil", "upload_form.undo": "Undo", "upload_form.video_description": "Penjelasan untuk orang dengan gangguan pendengaran atau penglihatan", "upload_modal.analyzing_picture": "Analisis gambar…", "upload_modal.apply": "Terapkan", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Pilih gambar", "upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar", "upload_modal.detect_text": "Deteksi teks pada gambar", "upload_modal.edit_media": "Sunting media", "upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Menyiapkan OCR…", "upload_modal.preview_label": "Pratinjau ({ratio})", "upload_progress.label": "Mengunggah...", "video.close": "Tutup video", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 1528dec69..3cebdcb03 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Modifikar profilo", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Sequas tu", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Ne plus sequar", "account.unmute": "Ne plus celar @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Simpla", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 6b6263893..32b8b96f8 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Skoða nánari upplýsingar á notandasniðinu", "account.cancel_follow_request": "Hætta við beiðni um að fylgjast með", "account.direct": "Bein skilaboð til @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Lén falið", "account.edit_profile": "Breyta notandasniði", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Láta mig vita þegar @{name} sendir inn", "account.endorse": "Birta á notandasniði", "account.follow": "Fylgjast með", "account.followers": "Fylgjendur", "account.followers.empty": "Ennþá fylgist enginn með þessum notanda.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} fylgjandi} other {{counter} fylgjendur}}", + "account.following_counter": "{count, plural, one {{counter} fylgist með} other {{counter} fylgjast með}}", + "account.follows": "Follows", "account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.", "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", @@ -38,13 +40,14 @@ "account.requested": "Bíður eftir samþykki. Smelltu til að hætta við beiðni um að fylgjast með", "account.share": "Deila notandasniði fyrir @{name}", "account.show_reblogs": "Sýna endurbirtingar frá @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tíst} other {{counter} tíst}}", "account.unblock": "Aflétta útilokun af @{name}", "account.unblock_domain": "Hætta að fela {domain}", "account.unendorse": "Ekki birta á notandasniði", "account.unfollow": "Hætta að fylgja", "account.unmute": "Hætta að þagga niður í @{name}", "account.unmute_notifications": "Hætta að þagga tilkynningar frá @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Engin athugasemd gefin", "alert.rate_limited.message": "Prófaðu aftur eftir {retry_time, time, medium}.", "alert.rate_limited.title": "Með takmörkum", @@ -168,15 +171,15 @@ "empty_column.notifications": "Þú ert ekki ennþá með neinar tilkynningar. Vertu í samskiptum við aðra til að umræður fari af stað.", "empty_column.public": "Það er ekkert hér! Skrifaðu eitthvað opinberlega, eða fylgstu með notendum á öðrum netþjónum til að fylla upp í þetta", "error.unexpected_crash.explanation": "Vegna villu í kóðanum okkar eða samhæfnivandamála í vafra er ekki hægt að birta þessa síðu svo vel sé.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ekki er hægt að birta þessa síðu rétt. Þetta er líklega af völdum forritsviðbótar í vafranum eða sjálfvirkra þýðainaverkfæra.", "error.unexpected_crash.next_steps": "Prófaðu að endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.", "errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald", "errors.unexpected_crash.report_issue": "Tilkynna vandamál", "follow_request.authorize": "Heimila", "follow_request.reject": "Hafna", "follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.", - "generic.saved": "Saved", + "generic.saved": "Vistað", "getting_started.developers": "Forritarar", "getting_started.directory": "Notandasniðamappa", "getting_started.documentation": "Hjálparskjöl", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu", "hashtag.column_settings.tag_mode.none": "Ekkert af þessu", "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Einfalt", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", "home.hide_announcements": "Fela auglýsingar", + "home.settings": "Column settings", "home.show_announcements": "Birta auglýsingar", "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "að taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "að fara ofar í listanum", "lightbox.close": "Loka", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Þjappa myndskoðunarreit", + "lightbox.expand": "Fletta út myndskoðunarreit", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", "lightbox.view_context": "Skoða samhengi", @@ -266,10 +272,10 @@ "lists.edit.submit": "Breyta titli", "lists.new.create": "Bæta við lista", "lists.new.title_placeholder": "Titill á nýjum lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Allra notenda sem fylgst er með", + "lists.replies_policy.list_replies": "Meðlima listans", + "lists.replies_policy.no_replies": "Engra", + "lists.replies_policy.title": "Sýna svör til:", "lists.search": "Leita meðal þeirra sem þú fylgist með", "lists.subheading": "Listarnir þínir", "load_pending": "{count, plural, one {# nýtt atriði} other {# ný atriði}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Víxla sýnileika", "missing_indicator.label": "Fannst ekki", "missing_indicator.sublabel": "Tilfangið fannst ekki", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Lengd", "mute_modal.hide_notifications": "Fela tilkynningar frá þessum notanda?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Óendanlegt", "navigation_bar.apps": "Farsímaforrit", "navigation_bar.blocks": "Útilokaðir notendur", "navigation_bar.bookmarks": "Bókamerki", @@ -310,7 +316,7 @@ "notification.own_poll": "Könnuninni þinni er lokið", "notification.poll": "Könnun sem þú tókst þátt í er lokið", "notification.reblog": "{name} endurbirti stöðufærsluna þína", - "notification.status": "{name} just posted", + "notification.status": "{name} sendi inn rétt í þessu", "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", "notifications.column_settings.alert": "Tilkynningar á skjáborði", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Endurbirtingar:", "notifications.column_settings.show": "Sýna í dálki", "notifications.column_settings.sound": "Spila hljóð", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Ný tíst:", "notifications.filter.all": "Allt", "notifications.filter.boosts": "Endurbirtingar", "notifications.filter.favourites": "Eftirlæti", "notifications.filter.follows": "Fylgist með", "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með", "notifications.group": "{count} tilkynningar", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar", + "notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra", + "notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað", + "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði", + "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", + "notifications_permission_banner.title": "Aldrei missa af neinu", + "picture_in_picture.restore": "Setja til baka", "poll.closed": "Lokað", "poll.refresh": "Endurlesa", "poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tíst", "search_results.statuses_fts_disabled": "Að leita í efni tísta er ekki virk á þessum Mastodon-þjóni.", "search_results.total": "{count, number} {count, plural, one {niðurstaða} other {niðurstöður}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Opna umsjónarviðmót fyrir @{name}", "status.admin_status": "Opna þessa stöðufærslu í umsjónarviðmótinu", "status.block": "Útiloka @{name}", @@ -445,30 +452,30 @@ "timeline_hint.resources.followers": "Fylgjendur", "timeline_hint.resources.follows": "Fylgist með", "timeline_hint.resources.statuses": "Eldri tíst", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} aðilar}} tala", "trends.trending_now": "Í umræðunni núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Dragðu-og-slepptu hér til að senda inn", - "upload_button.label": "Bæta við ({formats}) myndskrá", + "upload_button.label": "Bæta við myndum, myndskeiði eða hljóðskrá", "upload_error.limit": "Fór yfir takmörk á innsendingum skráa.", "upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.", "upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta", "upload_form.description": "Lýstu þessu fyrir sjónskerta", "upload_form.edit": "Breyta", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Skipta um smámynd", "upload_form.undo": "Eyða", "upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón", "upload_modal.analyzing_picture": "Greini mynd…", "upload_modal.apply": "Virkja", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Veldu mynd", "upload_modal.description_placeholder": "Öllum dýrunum í skóginum þætti bezt að vera vinir", "upload_modal.detect_text": "Skynja texta úr mynd", "upload_modal.edit_media": "Breyta myndskrá", "upload_modal.hint": "Smelltu eða dragðu til hringinn á forskoðuninni til að velja miðpunktinn sem verður alltaf sýnilegastur á öllum smámyndum.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Undirbý OCR-ljóslestur…", "upload_modal.preview_label": "Forskoðun ({ratio})", "upload_progress.label": "Er að senda inn...", "video.close": "Loka myndskeiði", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 92f8cb805..3581e9562 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -1,27 +1,29 @@ { - "account.account_note_header": "La tua nota per @{name}", - "account.add_or_remove_from_list": "Aggiungi o Rimuovi dagli elenchi", + "account.account_note_header": "Le tue note sull'utente", + "account.add_or_remove_from_list": "Aggiungi o togli dalle liste", "account.badges.bot": "Bot", "account.badges.group": "Gruppo", "account.block": "Blocca @{name}", "account.block_domain": "Blocca dominio {domain}", - "account.blocked": "Bloccato", - "account.browse_more_on_origin_server": "Naviga di più sul profilo originale", + "account.blocked": "Bloccat*", + "account.browse_more_on_origin_server": "Sfoglia ulteriormente sul profilo originale", "account.cancel_follow_request": "Annulla richiesta di seguirti", "account.direct": "Messaggio diretto a @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio bloccato", "account.edit_profile": "Modifica profilo", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Avvisami quando @{name} pubblica un post", "account.endorse": "Mostra sul profilo", "account.follow": "Segui", "account.followers": "Seguaci", "account.followers.empty": "Ancora nessuno segue questo utente.", "account.followers_counter": "{count, plural, one {{counter} Seguace} other {{counter} Seguaci}}", "account.following_counter": "{count, plural, other {{counter} Seguiti}}", + "account.follows": "Follows", "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", - "account.hide_reblogs": "Nascondi incrementi da @{name}", + "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.last_status": "Ultima attività", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Lo stato di privacy del profilo è impostato a bloccato. Il proprietario revisiona manualmente chi lo può seguire.", @@ -30,14 +32,14 @@ "account.moved_to": "{name} si è trasferito su:", "account.mute": "Silenzia @{name}", "account.mute_notifications": "Silenzia notifiche da @{name}", - "account.muted": "Silenziato", + "account.muted": "Silenziat*", "account.never_active": "Mai", "account.posts": "Toot", "account.posts_with_replies": "Toot e risposte", "account.report": "Segnala @{name}", "account.requested": "In attesa di approvazione. Clicca per annullare la richiesta di seguire", "account.share": "Condividi il profilo di @{name}", - "account.show_reblogs": "Mostra incrementi da @{name}", + "account.show_reblogs": "Mostra condivisioni da @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}", "account.unblock": "Sblocca @{name}", "account.unblock_domain": "Sblocca il dominio {domain}", @@ -45,9 +47,10 @@ "account.unfollow": "Smetti di seguire", "account.unmute": "Non silenziare @{name}", "account.unmute_notifications": "Non silenziare le notifiche da @{name}", - "account_note.placeholder": "Nessun commento fornito", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Clicca per aggiungere una nota", "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.", - "alert.rate_limited.title": "Intervallo limitato", + "alert.rate_limited.title": "Limitazione per eccesso di richieste", "alert.unexpected.message": "Si è verificato un errore inatteso.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", @@ -61,9 +64,9 @@ "bundle_modal_error.retry": "Riprova", "column.blocks": "Utenti bloccati", "column.bookmarks": "Segnalibri", - "column.community": "Fuso orario locale", + "column.community": "Timeline locale", "column.direct": "Messaggi diretti", - "column.directory": "Naviga profili", + "column.directory": "Sfoglia profili", "column.domain_blocks": "Domini bloccati", "column.favourites": "Preferiti", "column.follow_requests": "Richieste di seguirti", @@ -72,7 +75,7 @@ "column.mutes": "Utenti silenziati", "column.notifications": "Notifiche", "column.pins": "Toot in evidenza", - "column.public": "Fuso orario federato", + "column.public": "Timeline federata", "column_back_button.label": "Indietro", "column_header.hide_settings": "Nascondi impostazioni", "column_header.moveLeft_settings": "Sposta colonna a sinistra", @@ -113,13 +116,13 @@ "confirmations.delete_list.confirm": "Cancella", "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", "confirmations.domain_block.confirm": "Blocca l'intero dominio", - "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna linea temporale pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.", + "confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna timeline pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.", "confirmations.logout.confirm": "Disconnettiti", "confirmations.logout.message": "Sei sicuro di volerti disconnettere?", "confirmations.mute.confirm": "Silenzia", "confirmations.mute.explanation": "Questo nasconderà i post da loro ed i post che li menzionano, ma consentirà ancora loro di vedere i tuoi post e di seguirti.", "confirmations.mute.message": "Sei sicuro di voler silenziare {name}?", - "confirmations.redraft.confirm": "Cancella e rivali", + "confirmations.redraft.confirm": "Cancella e riscrivi", "confirmations.redraft.message": "Sei sicuro di voler eliminare questo toot e riscriverlo? I preferiti e gli incrementi saranno persi e le risposte al post originale saranno perse.", "confirmations.reply.confirm": "Rispondi", "confirmations.reply.message": "Rispondere ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?", @@ -168,9 +171,9 @@ "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Questa pagina non può essere visualizzata correttamente. Questo errore è probabilmente causato da un componente aggiuntivo del browser o da strumenti di traduzione automatica.", "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e ad aggiornare la pagina. Se questo non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser o un'app diversi.", "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", "errors.unexpected_crash.report_issue": "Segnala il problema", "follow_request.authorize": "Autorizza", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Uno o più di questi", "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Semplice", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostra post condivisi", "home.column_settings.show_replies": "Mostra risposte", "home.hide_announcements": "Nascondi annunci", + "home.settings": "Column settings", "home.show_announcements": "Mostra annunci", "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca", "keyboard_shortcuts.up": "per spostarsi in alto nella lista", "lightbox.close": "Chiudi", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Comprimi casella di visualizzazione immagine", + "lightbox.expand": "Espandi casella di visualizzazione immagine", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", "lightbox.view_context": "Mostra contesto", @@ -266,10 +272,10 @@ "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Qualsiasi utente seguito", + "lists.replies_policy.list_replies": "Iscritti alla lista", + "lists.replies_policy.no_replies": "Nessuno", + "lists.replies_policy.title": "Mostra risposte a:", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Imposta visibilità", "missing_indicator.label": "Non trovato", "missing_indicator.sublabel": "Risorsa non trovata", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durata", "mute_modal.hide_notifications": "Nascondere le notifiche da quest'utente?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Per sempre", "navigation_bar.apps": "App per dispositivi mobili", "navigation_bar.blocks": "Utenti bloccati", "navigation_bar.bookmarks": "Segnalibri", @@ -310,7 +316,7 @@ "notification.own_poll": "Il tuo sondaggio è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha condiviso il tuo post", - "notification.status": "{name} just posted", + "notification.status": "{name} ha appena pubblicato un post", "notifications.clear": "Cancella notifiche", "notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?", "notifications.column_settings.alert": "Notifiche desktop", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.sound": "Riproduci suono", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nuovi toot:", "notifications.filter.all": "Tutti", "notifications.filter.boosts": "Condivisioni", "notifications.filter.favourites": "Apprezzati", "notifications.filter.follows": "Seguaci", "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Aggiornamenti dalle persone che segui", "notifications.group": "{count} notifiche", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Segna tutte le notifiche come lette", + "notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.", + "notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza", + "notifications_permission_banner.enable": "Abilita le notifiche sul desktop", + "notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.", + "notifications_permission_banner.title": "Non perderti mai nulla", + "picture_in_picture.restore": "Riportalo indietro", "poll.closed": "Chiuso", "poll.refresh": "Aggiorna", "poll.total_people": "{count, plural, one {# persona} other {# persone}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toot", "search_results.statuses_fts_disabled": "La ricerca di toot per il loro contenuto non è abilitata su questo server Mastodon.", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_status": "Apri questo status nell'interfaccia di moderazione", "status.block": "Blocca @{name}", @@ -448,7 +455,7 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no", "trends.trending_now": "Di tendenza ora", "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}G", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Trascina per caricare", @@ -468,9 +475,9 @@ "upload_modal.detect_text": "Rileva testo dall'immagine", "upload_modal.edit_media": "Modifica media", "upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparazione OCR…", "upload_modal.preview_label": "Anteprima ({ratio})", - "upload_progress.label": "Sto caricando...", + "upload_progress.label": "Invio in corso...", "video.close": "Chiudi video", "video.download": "Scarica file", "video.exit_fullscreen": "Esci da modalità a schermo intero", @@ -479,6 +486,6 @@ "video.hide": "Nascondi video", "video.mute": "Silenzia suono", "video.pause": "Pausa", - "video.play": "Avvia", + "video.play": "Riproduci", "video.unmute": "Riattiva suono" } diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 8ed634c0b..a20982501 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "リモートで表示", "account.cancel_follow_request": "フォローリクエストを取り消す", "account.direct": "@{name}さんにダイレクトメッセージ", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "@{name} の投稿時の通知を停止", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ドメインブロック中", "account.edit_profile": "プロフィール編集", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "@{name} の投稿時に通知", "account.endorse": "プロフィールで紹介する", "account.follow": "フォロー", "account.followers": "フォロワー", "account.followers.empty": "まだ誰もフォローしていません。", "account.followers_counter": "{counter} フォロワー", "account.following_counter": "{counter} フォロー", + "account.follows": "Follows", "account.follows.empty": "まだ誰もフォローしていません。", "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", @@ -45,6 +47,7 @@ "account.unfollow": "フォロー解除", "account.unmute": "@{name}さんのミュートを解除", "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする", + "account.view_full_profile": "View full profile", "account_note.placeholder": "クリックしてメモを追加", "alert.rate_limited.message": "{retry_time, time, medium} 以降に再度実行してください。", "alert.rate_limited.title": "制限に達しました", @@ -101,8 +104,8 @@ "compose_form.sensitive.hide": "メディアを閲覧注意にする", "compose_form.sensitive.marked": "メディアに閲覧注意が設定されています", "compose_form.sensitive.unmarked": "メディアに閲覧注意が設定されていません", - "compose_form.spoiler.marked": "閲覧注意が設定されています", - "compose_form.spoiler.unmarked": "閲覧注意が設定されていません", + "compose_form.spoiler.marked": "本文は警告の後ろに隠されます", + "compose_form.spoiler.unmarked": "本文は隠されていません", "compose_form.spoiler_placeholder": "ここに警告を書いてください", "confirmation_modal.cancel": "キャンセル", "confirmations.block.block_and_report": "ブロックし通報", @@ -168,9 +171,9 @@ "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。", "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のサーバーのユーザーをフォローしたりしていっぱいにしましょう", "error.unexpected_crash.explanation": "不具合かブラウザの互換性問題のため、このページを正しく表示できませんでした。", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "このページは正しく表示できませんでした。このエラーはブラウザのアドオンや自動翻訳ツールによって引き起こされることがあります。", "error.unexpected_crash.next_steps": "ページの再読み込みをお試しください。それでも解決しない場合、別のブラウザかアプリを使えば使用できることがあります。", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。", "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", "errors.unexpected_crash.report_issue": "問題を報告", "follow_request.authorize": "許可", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "いずれかを含む", "hashtag.column_settings.tag_mode.none": "これらを除く", "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本設定", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", "home.hide_announcements": "お知らせを隠す", + "home.settings": "Column settings", "home.show_announcements": "お知らせを表示", "intervals.full.days": "{number}日", "intervals.full.hours": "{number}時間", @@ -266,10 +272,10 @@ "lists.edit.submit": "タイトルを変更", "lists.new.create": "リストを作成", "lists.new.title_placeholder": "新規リスト名", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "フォロー中のユーザー全員", + "lists.replies_policy.list_replies": "リストのメンバー", + "lists.replies_policy.no_replies": "表示しない", + "lists.replies_policy.title": "リプライを表示:", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", "load_pending": "{count} 件の新着", @@ -310,7 +316,7 @@ "notification.own_poll": "アンケートが終了しました", "notification.poll": "アンケートが終了しました", "notification.reblog": "{name}さんがあなたのトゥートをブーストしました", - "notification.status": "{name} just posted", + "notification.status": "{name}さんがトゥートしました", "notifications.clear": "通知を消去", "notifications.clear_confirmation": "本当に通知を消去しますか?", "notifications.column_settings.alert": "デスクトップ通知", @@ -326,7 +332,7 @@ "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムに表示", "notifications.column_settings.sound": "通知音を再生", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "新しいトゥート:", "notifications.filter.all": "すべて", "notifications.filter.boosts": "ブースト", "notifications.filter.favourites": "お気に入り", @@ -335,13 +341,13 @@ "notifications.filter.polls": "アンケート結果", "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} 件の通知", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "すべて既読にする", + "notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません", + "notifications.permission_denied_alert": "ブラウザの通知が拒否されているためデスクトップ通知を有効にできません", + "notifications_permission_banner.enable": "デスクトップ通知を有効にする", + "notifications_permission_banner.how_to_control": "Mastodon を閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", + "notifications_permission_banner.title": "お見逃しなく", + "picture_in_picture.restore": "元に戻す", "poll.closed": "終了", "poll.refresh": "更新", "poll.total_people": "{count}人", @@ -357,7 +363,7 @@ "privacy.private.short": "フォロワー限定", "privacy.public.long": "誰でも閲覧可、公開TLに表示", "privacy.public.short": "公開", - "privacy.unlisted.long": "誰でも閲覧可、公開TLに非表示", + "privacy.unlisted.long": "誰でも閲覧可、公開タイムラインに非表示", "privacy.unlisted.short": "未収載", "refresh": "更新", "regeneration_indicator.label": "読み込み中…", @@ -387,6 +393,7 @@ "search_results.statuses": "トゥート", "search_results.statuses_fts_disabled": "このサーバーではトゥート本文の検索は利用できません。", "search_results.total": "{count, number}件の結果", + "standalone.public_title": "A look inside...", "status.admin_account": "@{name} のモデレーション画面を開く", "status.admin_status": "このトゥートをモデレーション画面で開く", "status.block": "@{name}さんをブロック", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "画像からテキストを検出", "upload_modal.edit_media": "メディアを編集", "upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR の準備中…", "upload_modal.preview_label": "プレビュー ({ratio})", "upload_progress.label": "アップロード中...", "video.close": "動画を閉じる", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 6a0b47fdc..61af910f5 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "პირდაპირი წერილი @{name}-ს", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", @@ -45,6 +47,7 @@ "account.unfollow": "ნუღარ მიჰყვები", "account.unmute": "ნუღარ აჩუმებ @{name}-ს", "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "ძირითადი", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ბუსტების ჩვენება", "home.column_settings.show_replies": "პასუხების ჩვენება", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "ტუტები", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "დაბლოკე @{name}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 3e64f2eb3..bd8ac2816 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Sefsex asuter n uḍfar", "account.direct": "Izen usrid i @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", "account.enable_notifications": "Notify me when @{name} posts", @@ -18,7 +19,8 @@ "account.followers": "Imeḍfaren", "account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.", "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.following_counter": "{count, plural, one {{counter} yeṭṭafaren} aḍfar {{counter} wayeḍ}}", + "account.follows": "Follows", "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", @@ -38,13 +40,14 @@ "account.requested": "Di laɛḍil ad yettwaqbel. Ssit i wakken ad yefsex usuter n uḍfar", "account.share": "Bḍu amaɣnu n @{name}", "account.show_reblogs": "Ssken-d inebḍa n @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} ajewwaq} other {{counter} ijewwaqen}}", "account.unblock": "Serreḥ i @{name}", "account.unblock_domain": "Ssken-d {domain}", "account.unendorse": "Ur ttwellih ara fell-as deg umaɣnu-inek", "account.unfollow": "Ur ṭṭafaṛ ara", "account.unmute": "Kkes asgugem ɣef @{name}", "account.unmute_notifications": "Serreḥ ilɣa sɣur @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Ulac iwenniten", "alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.", "alert.rate_limited.title": "Aktum s talast", @@ -171,7 +174,7 @@ "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", "error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", "follow_request.authorize": "Ssireg", "follow_request.reject": "Agi", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Yiwen seg-sen", "hashtag.column_settings.tag_mode.none": "Yiwen ala seg-sen", "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Igejdanen", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", + "home.settings": "Column settings", "home.show_announcements": "Ssken-d ulɣuyen", "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}", "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "lightbox.close": "Mdel", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Ḥemmeẓ tamnaḍt n uskan n tugna", + "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Γer zdat", "lightbox.previous": "Γer deffir", "lightbox.view_context": "Ẓer amnaḍ", @@ -268,8 +274,8 @@ "lists.new.title_placeholder": "Azwel amaynut n tebdart", "lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.no_replies": "Ula yiwen", + "lists.replies_policy.title": "Ssken-d tiririyin i:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", @@ -326,7 +332,7 @@ "notifications.column_settings.reblog": "Seǧhed:", "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu", "notifications.column_settings.sound": "Rmed imesli", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Tiẓenẓunin timaynutin:", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", "notifications.filter.favourites": "Ismenyifen", @@ -336,7 +342,7 @@ "notifications.filter.statuses": "Updates from people you follow", "notifications.group": "{count} n tilɣa", "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", @@ -350,7 +356,7 @@ "poll.voted": "Tdeɣṛeḍ ɣef tririt-ayi", "poll_button.add_poll": "Rnu asenqed", "poll_button.remove_poll": "Kkes asenqed", - "privacy.change": "Adjust status privacy", + "privacy.change": "Seggem tabaḍnit n yizen", "privacy.direct.long": "Bḍu gar yimseqdacen i tbedreḍ kan", "privacy.direct.short": "Usrid", "privacy.private.long": "Bḍu i yimeḍfaṛen-ik kan", @@ -387,6 +393,7 @@ "search_results.statuses": "Tibeṛṛaniyin", "search_results.statuses_fts_disabled": "Anadi ɣef tjewwiqin s ugbur-nsent ur yermid ara deg uqeddac-agi n Maṣṭudun.", "search_results.total": "{count, number} {count, plural, one {n ugemmuḍ} other {n yigemmuḍen}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Seḥbes @{name}", @@ -439,20 +446,20 @@ "time_remaining.days": "Mazal {number, plural, one {# n wass} other {# n wussan}}", "time_remaining.hours": "Mazal {number, plural, one {# n usrag} other {# n yesragen}}", "time_remaining.minutes": "Mazal {number, plural, one {# n tesdat} other {# n tesdatin}}", - "time_remaining.moments": "Moments remaining", + "time_remaining.moments": "Akuden i d-yeqqimen", "time_remaining.seconds": "Mazal {number, plural, one {# n tasint} other {# n tsinin}} id yugran", "timeline_hint.remote_resource_not_displayed": "{resource} seg yiqeddacen-nniḍen ur d-ttwaskanent ara.", "timeline_hint.resources.followers": "Imeḍfaṛen", "timeline_hint.resources.follows": "T·Yeṭafaṛ", "timeline_hint.resources.statuses": "Tijewwaqin tiqdimin", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} amdan} imdanen {{counter} wiyaḍ}} yettmeslayen", "trends.trending_now": "Trending now", "ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Zuḥeb rnu sers i tasalyt", - "upload_button.label": "Rnu taɣwalt ({formats})", + "upload_button.label": "Rnu taɣwalt", "upload_error.limit": "Asali n ufaylu iεedda talast.", "upload_error.poll": "Ur ittusireg ara usali n ufaylu s tefranin.", "upload_form.audio_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 2b5b7a9e7..40ac63381 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Жазба", "account.add_or_remove_from_list": "Тізімге қосу немесе жою", "account.badges.bot": "Бот", - "account.badges.group": "Group", + "account.badges.group": "Топ", "account.block": "Бұғаттау @{name}", "account.block_domain": "Домендегі барлығын бұғатта {domain}", "account.blocked": "Бұғатталды", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Толығырақ оригинал профилінде қара", "account.cancel_follow_request": "Жазылуға сұранымды қайтару", "account.direct": "Жеке хат @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен жабық", "account.edit_profile": "Профильді өңдеу", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "Жазылу", "account.followers": "Оқырмандар", "account.followers.empty": "Әлі ешкім жазылмаған.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Оқырман} other {{counter} Оқырман}}", + "account.following_counter": "{count, plural, one {{counter} Жазылым} other {{counter} Жазылым}}", + "account.follows": "Follows", "account.follows.empty": "Ешкімге жазылмапты.", "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", @@ -38,19 +40,20 @@ "account.requested": "Растауын күтіңіз. Жазылудан бас тарту үшін басыңыз", "account.share": "@{name} профилін бөлісу\"", "account.show_reblogs": "@{name} бөліскендерін көрсету", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Пост} other {{counter} Пост}}", "account.unblock": "Бұғаттан шығару @{name}", "account.unblock_domain": "Бұғаттан шығару {domain}", "account.unendorse": "Профильде рекомендемеу", "account.unfollow": "Оқымау", "account.unmute": "@{name} ескертпелерін қосу", "account.unmute_notifications": "@{name} ескертпелерін көрсету", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Жазба қалдыру үшін бас", "alert.rate_limited.message": "Қайтадан көріңіз {retry_time, time, medium} кейін.", "alert.rate_limited.title": "Бағалау шектеулі", "alert.unexpected.message": "Бір нәрсе дұрыс болмады.", "alert.unexpected.title": "Өй!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Хабарландыру", "autosuggest_hashtag.per_week": "{count} аптасына", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", @@ -81,9 +84,9 @@ "column_header.show_settings": "Баптауларды көрсет", "column_header.unpin": "Алып тастау", "column_subheading.settings": "Баптаулар", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Тек жергілікті", "community.column_settings.media_only": "Тек медиа", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Тек сыртқы", "compose_form.direct_message_warning": "Тек аталған қолданушыларға.", "compose_form.direct_message_warning_learn_more": "Көбірек білу", "compose_form.hashtag_warning": "Бұл пост іздеуде хэштегпен шықпайды, өйткені ол бәріне ашық емес. Тек ашық жазбаларды ғана хэштег арқылы іздеп табуға болады.", @@ -94,8 +97,8 @@ "compose_form.poll.duration": "Сауалнама мерзімі", "compose_form.poll.option_placeholder": "Жауап {number}", "compose_form.poll.remove_option": "Бұл жауапты өшір", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "Бірнеше жауап таңдайтындай қылу", + "compose_form.poll.switch_to_single": "Тек бір жауап таңдайтындай қылу", "compose_form.publish": "Түрт", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Сезімтал ретінде белгіле", @@ -176,7 +179,7 @@ "follow_request.authorize": "Авторизация", "follow_request.reject": "Қабылдамау", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "Сақталды", "getting_started.developers": "Жасаушылар тобы", "getting_started.directory": "Профильдер каталогы", "getting_started.documentation": "Құжаттама", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Осылардың біреуін", "hashtag.column_settings.tag_mode.none": "Бұлардың ешқайсысын", "hashtag.column_settings.tag_toggle": "Осы бағанға қосымша тегтерді қосыңыз", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Негізгі", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Бөлісулерді көрсету", "home.column_settings.show_replies": "Жауаптарды көрсету", "home.hide_announcements": "Анонстарды жасыр", + "home.settings": "Column settings", "home.show_announcements": "Анонстарды көрсет", "intervals.full.days": "{number, plural, one {# күн} other {# күн}}", "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "жауап жазу", "keyboard_shortcuts.requests": "жазылу сұранымдарын қарау", "keyboard_shortcuts.search": "іздеу", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW көрсету/жабу", "keyboard_shortcuts.start": "бастапқы бағанға бару", "keyboard_shortcuts.toggle_hidden": "жабық мәтінді CW ашу/жабу", "keyboard_shortcuts.toggle_sensitivity": "көрсет/жап", @@ -387,6 +393,7 @@ "search_results.statuses": "Жазбалар", "search_results.statuses_fts_disabled": "Mastodon серверінде постты толық мәтінмен іздей алмайсыз.", "search_results.total": "{count, number} {count, plural, one {нәтиже} other {нәтиже}}", + "standalone.public_title": "A look inside...", "status.admin_account": "@{name} үшін модерация интерфейсін аш", "status.admin_status": "Бұл жазбаны модерация интерфейсінде аш", "status.block": "Бұғаттау @{name}", @@ -441,11 +448,11 @@ "time_remaining.minutes": "{number, plural, one {# минут} other {# минут}}", "time_remaining.moments": "Қалған уақыт", "time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} басқа серверлерде көрсетілмейді.", + "timeline_hint.resources.followers": "Оқырман", + "timeline_hint.resources.follows": "Жазылым", + "timeline_hint.resources.statuses": "Ескі посттары", + "trends.counter_by_accounts": "{count, plural, one {{counter} адам} other {{counter} адам}} айтып жатыр", "trends.trending_now": "Тренд тақырыптар", "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.", "units.short.billion": "{count}B", @@ -458,12 +465,12 @@ "upload_form.audio_description": "Есту қабілеті нашар адамдарға сипаттама беріңіз", "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз", "upload_form.edit": "Түзету", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Суретті өзгерту", "upload_form.undo": "Өшіру", "upload_form.video_description": "Есту немесе көру қабілеті нашар адамдарға сипаттама беріңіз", "upload_modal.analyzing_picture": "Суретті анализ жасау…", "upload_modal.apply": "Қолдану", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Сурет таңдау", "upload_modal.description_placeholder": "Щучинск съезіндегі өрт пе? Вагон-үй, аэромобиль һәм ұшақ фюзеляжы цехінен ғой", "upload_modal.detect_text": "Суреттен мәтін анықтау", "upload_modal.edit_media": "Медиафайлды өңдеу", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 6141f321e..ced6bc2e4 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -1,8 +1,8 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.account_note_header": "ಟಿಪ್ಪಣಿ", + "account.add_or_remove_from_list": "ಪಟ್ಟಿಗೆ ಸೇರಿಸು ಅಥವ ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು", "account.badges.bot": "Bot", - "account.badges.group": "Group", + "account.badges.group": "ಗುಂಪು", "account.block": "Block @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,11 +47,12 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "ಅಯ್ಯೋ!", "announcement.announcement": "Announcement", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 161f43c4f..6d414d1d1 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "원본 프로필에서 더 탐색하기", "account.cancel_follow_request": "팔로우 요청 취소", "account.direct": "@{name}의 다이렉트 메시지", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "@{name} 의 게시물 알림 끄기", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "도메인 숨겨짐", "account.edit_profile": "프로필 편집", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "@{name} 의 게시물 알림 켜기", "account.endorse": "프로필에 보이기", "account.follow": "팔로우", "account.followers": "팔로워", "account.followers.empty": "아직 아무도 이 유저를 팔로우하고 있지 않습니다.", "account.followers_counter": "{counter} 팔로워", "account.following_counter": "{counter} 팔로잉", + "account.follows": "Follows", "account.follows.empty": "이 유저는 아직 아무도 팔로우하고 있지 않습니다.", "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", @@ -45,6 +47,7 @@ "account.unfollow": "팔로우 해제", "account.unmute": "뮤트 해제", "account.unmute_notifications": "@{name}의 알림 뮤트 해제", + "account.view_full_profile": "View full profile", "account_note.placeholder": "클릭해서 노트 추가", "alert.rate_limited.message": "{retry_time, time, medium}에 다시 시도해 주세요.", "alert.rate_limited.title": "빈도 제한", @@ -168,9 +171,9 @@ "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 유저를 팔로우 해서 채워보세요", "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 올바르게 표시할 수 없습니다.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "이 페이지는 올바르게 보여질 수 없습니다. 브라우저 애드온이나 자동 번역 도구 등으로 인해 발생된 에러일 수 있습니다.", "error.unexpected_crash.next_steps": "페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "그것들을 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", "errors.unexpected_crash.report_issue": "문제 신고", "follow_request.authorize": "허가", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "아무것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "기본 설정", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", "home.hide_announcements": "공지사항 숨기기", + "home.settings": "Column settings", "home.show_announcements": "공지사항 보기", "intervals.full.days": "{number} 일", "intervals.full.hours": "{number} 시간", @@ -266,10 +272,10 @@ "lists.edit.submit": "제목 수정", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "팔로우 한 사용자 누구나", + "lists.replies_policy.list_replies": "목록의 멤버들", + "lists.replies_policy.no_replies": "아무도 없음", + "lists.replies_policy.title": "답글 표시:", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", "load_pending": "{count}개의 새 항목", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "표시 전환", "missing_indicator.label": "찾을 수 없습니다", "missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다", - "mute_modal.duration": "Duration", + "mute_modal.duration": "기간", "mute_modal.hide_notifications": "이 사용자로부터의 알림을 숨기시겠습니까?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "무기한", "navigation_bar.apps": "모바일 앱", "navigation_bar.blocks": "차단한 사용자", "navigation_bar.bookmarks": "보관함", @@ -303,14 +309,14 @@ "navigation_bar.preferences": "사용자 설정", "navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.security": "보안", - "notification.favourite": "{name}님이 즐겨찾기 했습니다", - "notification.follow": "{name}님이 나를 팔로우 했습니다", - "notification.follow_request": "{name}님이 팔로우 요청을 보냈습니다", - "notification.mention": "{name}님이 답글을 보냈습니다", + "notification.favourite": "{name} 님이 즐겨찾기 했습니다", + "notification.follow": "{name} 님이 나를 팔로우 했습니다", + "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", + "notification.mention": "{name} 님이 답글을 보냈습니다", "notification.own_poll": "내 투표가 끝났습니다", "notification.poll": "당신이 참여 한 투표가 종료되었습니다", - "notification.reblog": "{name}님이 부스트 했습니다", - "notification.status": "{name} just posted", + "notification.reblog": "{name} 님이 부스트 했습니다", + "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notifications.clear": "알림 지우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", "notifications.column_settings.alert": "데스크탑 알림", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "새 툿:", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", "notifications.filter.favourites": "즐겨찾기", "notifications.filter.follows": "팔로우", "notifications.filter.mentions": "멘션", "notifications.filter.polls": "투표 결과", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물", "notifications.group": "{count} 개의 알림", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "모든 알림을 읽은 상태로 표시", + "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", + "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", + "notifications_permission_banner.enable": "데스크탑 알림 활성화", + "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", + "notifications_permission_banner.title": "아무것도 놓치지 마세요", + "picture_in_picture.restore": "다시 넣기", "poll.closed": "마감됨", "poll.refresh": "새로고침", "poll.total_people": "{count}명", @@ -387,6 +393,7 @@ "search_results.statuses": "툿", "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 툿의 내용을 통한 검색이 활성화 되어 있지 않습니다.", "search_results.total": "{count, number}건의 결과", + "standalone.public_title": "A look inside...", "status.admin_account": "@{name}에 대한 중재 화면 열기", "status.admin_status": "중재 화면에서 이 게시물 열기", "status.block": "@{name} 차단", @@ -412,7 +419,7 @@ "status.read_more": "더 보기", "status.reblog": "부스트", "status.reblog_private": "원래의 수신자들에게 부스트", - "status.reblogged_by": "{name}님이 부스트 했습니다", + "status.reblogged_by": "{name} 님이 부스트 했습니다", "status.reblogs.empty": "아직 아무도 이 툿을 부스트하지 않았습니다. 부스트 한 사람들이 여기에 표시 됩니다.", "status.redraft": "지우고 다시 쓰기", "status.remove_bookmark": "보관한 툿 삭제", @@ -441,7 +448,7 @@ "time_remaining.minutes": "{number} 분 남음", "time_remaining.moments": "남은 시간", "time_remaining.seconds": "{number} 초 남음", - "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource}는 보여지지 않습니다.", + "timeline_hint.remote_resource_not_displayed": "다른 서버의 {resource} 표시는 할 수 없습니다.", "timeline_hint.resources.followers": "팔로워", "timeline_hint.resources.follows": "팔로우", "timeline_hint.resources.statuses": "이전 툿", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "이미지에서 텍스트 추출", "upload_modal.edit_media": "미디어 편집", "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR 준비 중…", "upload_modal.preview_label": "미리보기 ({ratio})", "upload_progress.label": "업로드 중...", "video.close": "동영상 닫기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 17ffe5519..cf8fe6325 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -1,484 +1,491 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", - "account.badges.group": "Group", - "account.block": "Block @{name}", - "account.block_domain": "Block domain {domain}", - "account.blocked": "Blocked", - "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Cancel follow request", - "account.direct": "Direct message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domain blocked", - "account.edit_profile": "Edit profile", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Feature on profile", - "account.follow": "Follow", - "account.followers": "Followers", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.account_note_header": "تێبینیتێبینی", + "account.add_or_remove_from_list": "زیادکردن یان سڕینەوە لە پێرستەکان", + "account.badges.bot": "بوت", + "account.badges.group": "گرووپ", + "account.block": "بلۆکی @{name}", + "account.block_domain": "بلۆکی هەموو شتێک لە {domain}", + "account.blocked": "بلۆککرا", + "account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی", + "account.cancel_follow_request": "بەتاڵکردنی داوای شوێنکەوتن", + "account.direct": "پەیامی تایبەت بە @{name}", + "account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "دۆمەین قەپاتکرا", + "account.edit_profile": "دەستکاری پرۆفایل", + "account.enable_notifications": "ئاگادارم بکەوە کاتێک @{name} بابەتەکان", + "account.endorse": "ناساندن لە پرۆفایل", + "account.follow": "شوێنکەوتن", + "account.followers": "شوێنکەوتووان", + "account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە", + "account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.last_status": "Last active", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", - "account.mention": "Mention @{name}", - "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.never_active": "Never", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.report": "Report @{name}", - "account.requested": "Awaiting approval", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", - "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unblock domain {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "account_note.placeholder": "Click to add a note", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "You can press {combo} to skip this next time", - "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", - "column.bookmarks": "Bookmarks", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.directory": "Browse profiles", - "column.domain_blocks": "Blocked domains", - "column.favourites": "Favourites", - "column.follow_requests": "Follow requests", - "column.home": "Home", - "column.lists": "Lists", - "column.mutes": "Muted users", - "column.notifications": "Notifications", - "column.pins": "Pinned toot", - "column.public": "Federated timeline", - "column_back_button.label": "Back", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "Remote only", - "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", - "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Toot", + "account.follows": "Follows", + "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.", + "account.follows_you": "شوێنکەوتووەکانت", + "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", + "account.last_status": "دوایین چالاکی", + "account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە", + "account.locked_info": "تایبەتمەندی ئەم هەژمارەیە ڕیکخراوە بۆ قوفڵدراوە. خاوەنەکە بە دەستی پێداچوونەوە دەکات کە کێ دەتوانێت شوێنیان بکەوێت.", + "account.media": "میدیا", + "account.mention": "ئاماژە @{name}", + "account.moved_to": "{name} گواسترایەوە بۆ:", + "account.mute": "بێدەنگکردن @{name}", + "account.mute_notifications": "هۆشیارکەرەوەکان لاببە لە @{name}", + "account.muted": "بێ دەنگ", + "account.never_active": "هەرگیز", + "account.posts": "توتس", + "account.posts_with_replies": "توتس و وەڵامەکان", + "account.report": "گوزارشت @{name}", + "account.requested": "چاوەڕێی ڕەزامەندین. کرتە بکە بۆ هەڵوەشاندنەوەی داواکاری شوێنکەوتن", + "account.share": "پرۆفایلی @{name} هاوبەش بکە", + "account.show_reblogs": "پیشاندانی بەرزکردنەوەکان لە @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.unblock": "@{name} لاببە", + "account.unblock_domain": "کردنەوەی دۆمەینی {domain}", + "account.unendorse": "تایبەتمەندی لەسەر پرۆفایلەکە نیە", + "account.unfollow": "بەدوادانەچو", + "account.unmute": "بێدەنگکردنی @{name}", + "account.unmute_notifications": "بێدەنگکردنی هۆشیارییەکان لە @{name}", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "کرتەبکە بۆ زیادکردنی تێبینی", + "alert.rate_limited.message": "تکایە هەوڵبدەرەوە دوای {retry_time, time, medium}.", + "alert.rate_limited.title": "ڕێژەی سنووردار", + "alert.unexpected.message": "هەڵەیەکی چاوەڕوان نەکراو ڕوویدا.", + "alert.unexpected.title": "تەححح!", + "announcement.announcement": "بانگەواز", + "autosuggest_hashtag.per_week": "{count} هەرهەفتە", + "boost_modal.combo": "دەتوانیت دەست بنێی بە سەر {combo} بۆ بازدان لە جاری داهاتوو", + "bundle_column_error.body": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", + "bundle_column_error.retry": "دووبارە هەوڵبدە", + "bundle_column_error.title": "هەڵيی تۆڕ", + "bundle_modal_error.close": "داخستن", + "bundle_modal_error.message": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", + "bundle_modal_error.retry": "دووبارە تاقی بکەوە", + "column.blocks": "بەکارهێنەرە بلۆککراوەکان", + "column.bookmarks": "نیشانەکان", + "column.community": "هێڵی کاتی ناوخۆیی", + "column.direct": "نامە ڕاستەوخۆکان", + "column.directory": "گەڕان لە پرۆفایلەکان", + "column.domain_blocks": "دۆمەینە داخراوەکان", + "column.favourites": "دڵخوازترینەکان", + "column.follow_requests": "بەدواداچوی داواکاریەکان بکە", + "column.home": "سەرەتا", + "column.lists": "پێرست", + "column.mutes": "بێدەنگکردنی بەکارهێنەران", + "column.notifications": "ئاگادارییەکان", + "column.pins": "تووتسی چەسپاو", + "column.public": "نووسراوەکانی هەمووشوێنێک", + "column_back_button.label": "دواوە", + "column_header.hide_settings": "شاردنەوەی ڕێکخستنەکان", + "column_header.moveLeft_settings": "ستوون بگوێزەرەوە بۆ لای چەپ", + "column_header.moveRight_settings": "جوولاندنی ئەستوون بۆ لای ڕاست", + "column_header.pin": "سنجاق", + "column_header.show_settings": "نیشاندانی رێکخستنەکان", + "column_header.unpin": "سنجاق نەکردن", + "column_subheading.settings": "رێکخستنەکان", + "community.column_settings.local_only": "تەنها خۆماڵی", + "community.column_settings.media_only": "تەنها میدیا", + "community.column_settings.remote_only": "تەنها بۆ دوور", + "compose_form.direct_message_warning": "ئەم توتە تەنیا بۆ بەکارهێنەرانی ناوبراو دەنێردرێت.", + "compose_form.direct_message_warning_learn_more": "زیاتر فێربه", + "compose_form.hashtag_warning": "ئەم توتە لە ژێر هیچ هاشتاگییەک دا ناکرێت وەک ئەوەی لە لیستەکەدا نەریزراوە. تەنها توتی گشتی دەتوانرێت بە هاشتاگی بگەڕێت.", + "compose_form.lock_disclaimer": "هەژمێرەکەی لە حاڵەتی {locked}. هەر کەسێک دەتوانێت شوێنت بکەوێت بۆ پیشاندانی بابەتەکانی تەنها دوایخۆی.", + "compose_form.lock_disclaimer.lock": "قفڵ دراوە", + "compose_form.placeholder": "چی لە مێشکتدایە?", + "compose_form.poll.add_option": "زیادکردنی هەڵبژاردەیەک", + "compose_form.poll.duration": "ماوەی ڕاپرسی", + "compose_form.poll.option_placeholder": "هەڵبژاردن {number}", + "compose_form.poll.remove_option": "لابردنی ئەم هەڵبژاردەیە", + "compose_form.poll.switch_to_multiple": "ڕاپرسی بگۆڕە بۆ ڕێگەدان بە چەند هەڵبژاردنێک", + "compose_form.poll.switch_to_single": "گۆڕینی ڕاپرسی بۆ ڕێگەدان بە تاکە هەڵبژاردنێک", + "compose_form.publish": "توت", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", - "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objects", - "emoji_button.people": "People", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", - "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", - "emoji_button.travel": "Travel & Places", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no blocked domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", - "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Getting started", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", + "compose_form.sensitive.hide": "نیشانکردنی میدیا وەک هەستیار", + "compose_form.sensitive.marked": "وادەی کۆتایی", + "compose_form.sensitive.unmarked": "میدیا وەک هەستیار نیشان نەکراوە", + "compose_form.spoiler.marked": "دەق لە پشت ئاگاداریدا شاراوەتەوە", + "compose_form.spoiler.unmarked": "دەق شاراوە نییە", + "compose_form.spoiler_placeholder": "ئاگاداریەکەت لێرە بنووسە", + "confirmation_modal.cancel": "هەڵوەشاندنەوه", + "confirmations.block.block_and_report": "بلۆک & گوزارشت", + "confirmations.block.confirm": "بلۆک", + "confirmations.block.message": "ئایا دڵنیایت لەوەی دەتەوێت {name} بلۆک بکەیت?", + "confirmations.delete.confirm": "سڕینەوە", + "confirmations.delete.message": "ئایا دڵنیایت لەوەی دەتەوێت ئەم توتە بسڕیتەوە?", + "confirmations.delete_list.confirm": "سڕینەوە", + "confirmations.delete_list.message": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی ئەم لیستە بسڕیتەوە?", + "confirmations.domain_block.confirm": "بلۆککردنی هەموو دۆمەینەکە", + "confirmations.domain_block.message": "ئایا بەڕاستی، بەڕاستی تۆ دەتەوێت هەموو {domain} بلۆک بکەیت؟ لە زۆربەی حاڵەتەکاندا چەند بلۆکێکی ئامانجدار یان بێدەنگەکان پێویست و پەسەندن. تۆ ناوەڕۆک ێک نابینیت لە دۆمەینەکە لە هیچ هێڵی کاتی گشتی یان ئاگانامەکانت. شوێنکەوتوانی تۆ لەو دۆمەینەوە لادەبرێن.", + "confirmations.logout.confirm": "چوونە دەرەوە", + "confirmations.logout.message": "ئایا دڵنیایت لەوەی دەتەوێت بچیتە دەرەوە?", + "confirmations.mute.confirm": "بێدەنگ", + "confirmations.mute.explanation": "ئەمەش دەبێتە هۆی شاردنەوەی پۆستەکان یان ئەو بابەتانەی کە ئاماژەیان پێ دەکات ، بەڵام هێشتا ڕێگەیان پێ دەدات کە پۆستەکانتان ببینن و شوێنتان بکەون.", + "confirmations.mute.message": "ئایا دڵنیایت لەوەی دەتەوێت بیلێیت {name}?", + "confirmations.redraft.confirm": "سڕینەوە & دووبارە ڕەشکردنەوە", + "confirmations.redraft.message": "ئایا دڵنیایت لەوەی دەتەوێت ئەم توتە بسڕیتەوە و دووبارە دایبنووسیتەوە؟ دڵخوازەکان و بەرزکردنەوەکان وون دەبن، و وەڵامەکان بۆ پۆستە ڕەسەنەکە هەتیو دەبن.", + "confirmations.reply.confirm": "وەڵام", + "confirmations.reply.message": "وەڵامدانەوە ئێستا ئەو نامەیە ی کە تۆ ئێستا دایڕشتووە، دەنووسێتەوە. ئایا دڵنیایت کە دەتەوێت بەردەوام بیت?", + "confirmations.unfollow.confirm": "بەدوادانەچو", + "confirmations.unfollow.message": "ئایا دڵنیایت لەوەی دەتەوێت پەیڕەوی {name}?", + "conversation.delete": "سڕینەوەی گفتوگۆ", + "conversation.mark_as_read": "نیشانەکردن وەک خوێندراوە", + "conversation.open": "نیشاندان گفتوگۆ", + "conversation.with": "لەگەڵ{names}", + "directory.federated": "لە ڕاژەکانی ناسراو", + "directory.local": "تەنها لە {domain}", + "directory.new_arrivals": "تازە گەیشتنەکان", + "directory.recently_active": "بەم دواییانە چالاکە", + "embed.instructions": "ئەم توتە بنچین بکە لەسەر وێب سایتەکەت بە کۆپیکردنی کۆدەکەی خوارەوە.", + "embed.preview": "ئەمە ئەو شتەیە کە لە شێوەی خۆی دەچێت:", + "emoji_button.activity": "چالاکی", + "emoji_button.custom": "ئاسایی", + "emoji_button.flags": "ئاڵاکان", + "emoji_button.food": "خواردن& خواردنەوە", + "emoji_button.label": "ئیمۆجی بکەنێو", + "emoji_button.nature": "سروشت", + "emoji_button.not_found": "بێ ئیمۆجی! (╯°□°)╯( ┻━┻", + "emoji_button.objects": "ئامانجەکان", + "emoji_button.people": "خەڵک", + "emoji_button.recent": "زۆرجار بەکارهێنراوە", + "emoji_button.search": "گەڕان...", + "emoji_button.search_results": "ئەنجامەکانی گەڕان", + "emoji_button.symbols": "هێماکان", + "emoji_button.travel": "گەشت & شوێنەکان", + "empty_column.account_timeline": "لێرە هیچ توتەک نییە!", + "empty_column.account_unavailable": "پرۆفایل بەردەست نیە", + "empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.", + "empty_column.bookmarked_statuses": "تۆ هێشتا هیچ توتێکی دیاریکراوت نیە کاتێک نیشانەیەک نیشان دەکەیت، لێرە دەرئەکەویت.", + "empty_column.community": "هێڵی کاتی ناوخۆیی بەتاڵە. شتێک بە ئاشکرا بنووسە بۆ ئەوەی تۆپەکە بسووڕێت!", + "empty_column.direct": "تۆ هیچ نامەی ڕاستەوخۆت نیە تا ئێستا. کاتێک دانەیەک دەنێریت یان وەرت دەگرێت، لێرە پیشان دەدات.", + "empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.", + "empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.", + "empty_column.favourites": "کەس ئەم توتەی دڵخواز نەکردووە،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.", + "empty_column.follow_requests": "تۆ هێشتا هیچ داواکارییەکی بەدواداچووت نیە. کاتێک یەکێکت بۆ هات، لێرە دەرئەکەویت.", + "empty_column.hashtag": "هێشتا هیچ شتێک لەم هاشتاگەدا نییە.", + "empty_column.home": "تایم لاینی ماڵەوەت بەتاڵە! سەردانی {public} بکە یان گەڕان بەکاربێنە بۆ دەستپێکردن و بینینی بەکارهێنەرانی تر.", + "empty_column.home.public_timeline": "هێڵی کاتی گشتی", + "empty_column.list": "هێشتا هیچ شتێک لەم لیستەدا نییە. کاتێک ئەندامانی ئەم لیستە دەنگی نوێ بڵاودەکەن، لێرە دەردەکەون.", + "empty_column.lists": "تۆ هێشتا هیچ لیستت دروست نەکردووە، کاتێک دانەیەک دروست دەکەیت، لێرە پیشان دەدرێت.", + "empty_column.mutes": "تۆ هێشتا هیچ بەکارهێنەرێکت بێدەنگ نەکردووە.", + "empty_column.notifications": "تۆ هێشتا هیچ ئاگانامێکت نیە. چالاکی لەگەڵ کەسانی دیکە بکە بۆ دەستپێکردنی گفتوگۆکە.", + "empty_column.public": "لێرە هیچ نییە! شتێک بە ئاشکرا بنووسە(بەگشتی)، یان بە دەستی شوێن بەکارهێنەران بکەوە لە ڕاژەکانی ترەوە بۆ پڕکردنەوەی", + "error.unexpected_crash.explanation": "بەهۆی بوونی کێشە لە کۆدەکەمان یان کێشەی گونجانی وێبگەڕەکە، ئەم لاپەڕەیە بە دروستی پیشان نادرێت.", + "error.unexpected_crash.explanation_addons": "ئەم لاپەڕەیە ناتوانرێت بە دروستی پیشان بدرێت. ئەم هەڵەیە لەوانەیە بەهۆی ئامێری وەرگێڕانی خۆکار یان زیادکراوی وێبگەڕەوە بێت.", + "error.unexpected_crash.next_steps": "هەوڵدە لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکەیان کاربەرنامەی ڕەسەن.", + "error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.", + "errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد", + "errors.unexpected_crash.report_issue": "کێشەی گوزارشت", + "follow_request.authorize": "ده‌سه‌ڵاتپێدراو", + "follow_request.reject": "ڕەتکردنەوە", + "follow_requests.unlocked_explanation": "هەرچەندە هەژمارەکەت داخراو نییە، ستافی {domain} وا بیریان کردەوە کە لەوانەیە بتانەوێت پێداچوونەوە بە داواکاریەکانی ئەم هەژمارەدا بکەن بە دەستی.", + "generic.saved": "پاشکەوتکرا", + "getting_started.developers": "پەرەپێدەران", + "getting_started.directory": "پەڕەی پرۆفایل", + "getting_started.documentation": "بەڵگەنامە", + "getting_started.heading": "دەست پێکردن", + "getting_started.invite": "بانگهێشتکردنی خەڵک", + "getting_started.open_source_notice": "ماستۆدۆن نەرمەکالایەکی سەرچاوەی کراوەیە. دەتوانیت بەشداری بکەیت یان گوزارشت بکەیت لەسەر کێشەکانی لە پەڕەی گیتهاب {github}.", + "getting_started.security": "ڕێکخستنەکانی هەژمارە", + "getting_started.terms": "مەرجەکانی خزمەتگوزاری", + "hashtag.column_header.tag_mode.all": "و {additional}", + "hashtag.column_header.tag_mode.any": "یا {additional}", + "hashtag.column_header.tag_mode.none": "بەبێ {additional}", + "hashtag.column_settings.select.no_options_message": "هیچ پێشنیارێک نەدۆزرایەوە", + "hashtag.column_settings.select.placeholder": "هاشتاگی تێبنووسە…", + "hashtag.column_settings.tag_mode.all": "هەموو ئەمانە", + "hashtag.column_settings.tag_mode.any": "هەر کام لەمانە", + "hashtag.column_settings.tag_mode.none": "هیچ کام لەمانە", + "hashtag.column_settings.tag_toggle": "تاگی زیادە ی ئەم ستوونە لەخۆ بنووسە", + "home.column_settings.advanced": "Advanced", + "home.column_settings.basic": "بنەڕەتی", + "home.column_settings.filter_regex": "Filter out by regular expressions", + "home.column_settings.show_reblogs": "پیشاندانی بەهێزکردن", + "home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە", + "home.hide_announcements": "شاردنەوەی راگەیەنراوەکان", + "home.settings": "Column settings", + "home.show_announcements": "پیشاندانی راگەیەنراوەکان", + "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}", + "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}", + "intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}", + "introduction.federation.action": "داهاتوو", + "introduction.federation.federated.headline": "گشتی", + "introduction.federation.federated.text": "نووسراوە گشتیەکان لە خزمەتگوزاریەکانی تری جیهانی دەرئەکەون لە هێڵی گشتی.", + "introduction.federation.home.headline": "سەرەتا", + "introduction.federation.home.text": "ئەو بابەتانەی کە بەشوێنیان دەکەویت لە پەڕەی ژوورەکەت دەردەکەوێت. دەتوانیت شوێن هەموو کەسێک بکەویت لەسەر هەر ڕاژەیەک!", + "introduction.federation.local.headline": "ناوخۆیی", + "introduction.federation.local.text": "نووسراوە گشتیەکان لە خەڵک لەسەر هەمان ڕاژە وەک تۆ دەردەکەون لە هێڵی کاتی ناوخۆیی.", + "introduction.interactions.action": "خوێندنی تەواوبکە!", + "introduction.interactions.favourite.headline": "دڵخواز", + "introduction.interactions.favourite.text": "دەتوانیت پاشترتوتێک پاشەکەوت بکەیت، با نووسەر بزانێت کە تۆ حەزت لێ بوو، بە ئارەزووی خۆت.", + "introduction.interactions.reblog.headline": "بەهێزکردن", + "introduction.interactions.reblog.text": "دەتوانیت دەنگی کەسانی تر هاوبەش بکەیت لەگەڵ شوێنکەوتوانی خۆت بە بەهێزکردنیان.", + "introduction.interactions.reply.headline": "وەڵام", + "introduction.interactions.reply.text": "دەتوانیت وەڵامی کەسانی تر و توتەکانی خۆت بدەوە، کە لە گفتوگۆیەکدا بە یەکەوە زنجیریان دەکات.", + "introduction.welcome.action": "با بڕۆین!", + "introduction.welcome.headline": "هەنگاوی یەکەم", + "introduction.welcome.text": "بەخێربێیت بۆتۆڕەکۆمەڵەییەکانی چربووە! لە چەند ساتێکی کەمدا دەتوانیت پەیامەکان پەخش بکەیت و لەگەڵ هاوڕێکانت لە ناو چەندین جۆر لە ڕاژەکان قسە بکەیت.. بەڵام ئەم ڕاژانە، {domain}، جیاوزە لەگەڵ ئەوانی دیکە بۆ ئەوە کە میوانداری پرۆفایلەکەت دەکان، بۆیە ناوەکەیت لەبیربێت.", + "keyboard_shortcuts.back": "بۆ گەڕانەوە", + "keyboard_shortcuts.blocked": "بۆ کردنەوەی لیستی بەکارهێنەرە بلۆککراوەکان", + "keyboard_shortcuts.boost": "بۆ بەهێزکردن", + "keyboard_shortcuts.column": "بۆ ئەوەی تیشک بخاتە سەر توتێک لە یەکێک لە ستوونەکان", + "keyboard_shortcuts.compose": "بۆ سەرنجدان بە نووسینی ناوچەی دەق", + "keyboard_shortcuts.description": "وه‌سف", + "keyboard_shortcuts.direct": "بۆ کردنەوەی ستوونی نامە ڕاستەوخۆکان", + "keyboard_shortcuts.down": "بۆ چوونە خوارەوە لە لیستەکەدا", + "keyboard_shortcuts.enter": "بۆ کردنەوەی توت", + "keyboard_shortcuts.favourite": "بۆ دڵخواز", + "keyboard_shortcuts.favourites": "بۆ کردنەوەی لیستی دڵخوازەکان", + "keyboard_shortcuts.federated": "بۆ کردنەوەی نووسراوەکانی هەمووشوێن", + "keyboard_shortcuts.heading": "قه‌دبڕەکانی تەختەکلیل", + "keyboard_shortcuts.home": "بۆ کردنەوەی هێڵی کاتی ماڵەوە", + "keyboard_shortcuts.hotkey": "هۆتکەی", + "keyboard_shortcuts.legend": "بۆ نیشاندانی ئەم نیشانە", + "keyboard_shortcuts.local": "بۆ کردنەوەی نووسراوەکانی خۆماڵی", + "keyboard_shortcuts.mention": "نۆ ناوبردن لە نووسەر", + "keyboard_shortcuts.muted": "بۆ کردنەوەی پێرستی بەکارهێنەرانی بێدەنگ", + "keyboard_shortcuts.my_profile": "بۆ کردنەوەی پرۆفایڵ", + "keyboard_shortcuts.notifications": "بۆ کردنەوەی ستوونی ئاگانامەکان", + "keyboard_shortcuts.open_media": "بۆ کردنەوەی میدیا", + "keyboard_shortcuts.pinned": "بۆ کردنەوەی لیستی توتەکانی چەسپێنراو", + "keyboard_shortcuts.profile": "بۆ کردنەوەی پرۆفایڵی نووسەر", + "keyboard_shortcuts.reply": "بۆ وەڵامدانەوە", + "keyboard_shortcuts.requests": "بۆ کردنەوەی لیستی داواکاریەکانی بەدوادا", + "keyboard_shortcuts.search": "بۆ جەختکردن لەسەر گەڕان", + "keyboard_shortcuts.spoilers": "بۆ پیشاندان/شاردنەوەی خانەی CW", + "keyboard_shortcuts.start": "بۆ کردنەوەی ستوونی \"دەست پێبکە\"", + "keyboard_shortcuts.toggle_hidden": "بۆ پیشاندان/شاردنەوەی دەق لە پشت CW", + "keyboard_shortcuts.toggle_sensitivity": "بۆ پیشاندان/شاردنەوەی میدیا", + "keyboard_shortcuts.toot": "بۆ دەست کردن بە براندێکی تازە", + "keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان", + "keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت", + "lightbox.close": "دابخە", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lightbox.next": "داهاتوو", + "lightbox.previous": "پێشوو", + "lightbox.view_context": "پێشاندانی دەق", + "lists.account.add": "زیادکردن بۆ لیست", + "lists.account.remove": "لابردن لە لیست", + "lists.delete": "سڕینەوەی لیست", + "lists.edit": "دەستکاری لیست", + "lists.edit.submit": "گۆڕینی ناونیشان", + "lists.new.create": "زیادکردنی لیست", + "lists.new.title_placeholder": "ناونیشانی لیستی نوێ", + "lists.replies_policy.all_replies": "هەربەکارهێنەرێکی شوێنکەوتوو", + "lists.replies_policy.list_replies": "ئەندامانی لیستەکە", + "lists.replies_policy.no_replies": "هیچکەس", + "lists.replies_policy.title": "پیشاندانی وەڵامەکان بۆ:", + "lists.search": "بگەڕێ لەناو ئەو کەسانەی کە شوێنیان کەوتویت", + "lists.subheading": "لیستەکانت", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", - "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", - "privacy.private.long": "Visible for followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all, shown in public timelines", - "privacy.public.short": "Public", - "privacy.unlisted.long": "Visible for all, but not in public timelines", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", - "report.target": "Report {target}", - "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", - "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", - "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", - "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", - "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", - "upload_modal.preparing_ocr": "Preparing OCR…", - "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "loading_indicator.label": "بارکردن...", + "media_gallery.toggle_visible": "شاردنەوەی {number, plural, one {image} other {images}}", + "missing_indicator.label": "نەدۆزرایەوە", + "missing_indicator.sublabel": "ئەو سەرچاوەیە نادۆزرێتەوە", + "mute_modal.duration": "ماوە", + "mute_modal.hide_notifications": "شاردنەوەی ئاگانامەکان لەم بەکارهێنەرە؟ ", + "mute_modal.indefinite": "نادیار", + "navigation_bar.apps": "بەرنامەی مۆبایل", + "navigation_bar.blocks": "بەکارهێنەرە بلۆککراوەکان", + "navigation_bar.bookmarks": "نیشانکراوەکان", + "navigation_bar.community_timeline": "دەمنامەی ناوخۆیی", + "navigation_bar.compose": "نووسینی توتی نوێ", + "navigation_bar.direct": "نامە ڕاستەوخۆکان", + "navigation_bar.discover": "دۆزینەوە", + "navigation_bar.domain_blocks": "دۆمەینە بلۆک کراوەکان", + "navigation_bar.edit_profile": "دەستکاری پرۆفایل بکە", + "navigation_bar.favourites": "دڵخوازەکان", + "navigation_bar.filters": "وشە کپەکان", + "navigation_bar.follow_requests": "بەدواداچوی داواکاریەکان بکە", + "navigation_bar.follows_and_followers": "شوێنکەوتوو و شوێنکەوتوان", + "navigation_bar.info": "دەربارەی ئەم ڕاژە", + "navigation_bar.keyboard_shortcuts": "هۆتکەی", + "navigation_bar.lists": "لیستەکان", + "navigation_bar.logout": "دەرچوون", + "navigation_bar.mutes": "کپکردنی بەکارهێنەران", + "navigation_bar.personal": "کەسی", + "navigation_bar.pins": "توتی چەسپاو", + "navigation_bar.preferences": "پەسەندەکان", + "navigation_bar.public_timeline": "نووسراوەکانی هەمووشوێنێک", + "navigation_bar.security": "ئاسایش", + "notification.favourite": "{name} نووسراوەکەتی پەسەند کرد", + "notification.follow": "{name} دوای تۆ کەوت", + "notification.follow_request": "{name} داوای کردووە کە شوێنت بکەوێت", + "notification.mention": "{name} باسی ئێوەی کرد", + "notification.own_poll": "ڕاپرسیەکەت کۆتایی هات", + "notification.poll": "ڕاپرسییەک کە دەنگی پێداویت کۆتایی هات", + "notification.reblog": "{name} نووسراوەکەتی دووبارە توتاند", + "notification.status": "{name} تازە بڵاوکرایەوە", + "notifications.clear": "ئاگانامەکان بسڕیەوە", + "notifications.clear_confirmation": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی هەموو ئاگانامەکانت بسڕیتەوە?", + "notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی", + "notifications.column_settings.favourite": "دڵخوازترین:", + "notifications.column_settings.filter_bar.advanced": "هەموو پۆلەکان پیشان بدە", + "notifications.column_settings.filter_bar.category": "شریتی پاڵێوەری خێرا", + "notifications.column_settings.filter_bar.show": "نیشاندان", + "notifications.column_settings.follow": "شوێنکەوتوانی نوێ:", + "notifications.column_settings.follow_request": "شوینکەوتنی داواکاری نوێ:", + "notifications.column_settings.mention": "ئاماژەکان:", + "notifications.column_settings.poll": "ئەنجامەکانی ڕاپرسی:", + "notifications.column_settings.push": "ئاگانامەکان پاڵ بنێ", + "notifications.column_settings.reblog": "دووبارەتوتەکان:", + "notifications.column_settings.show": "لە ستووندا پیشان بدە", + "notifications.column_settings.sound": "لێدانی دەنگ", + "notifications.column_settings.status": "توتەکانی نوێ:", + "notifications.filter.all": "هەموو", + "notifications.filter.boosts": "دووبارەتوتەکان", + "notifications.filter.favourites": "دڵخوازەکان", + "notifications.filter.follows": "شوێنکەوتن", + "notifications.filter.mentions": "ئاماژەکان", + "notifications.filter.polls": "ئەنجامەکانی ڕاپرسی", + "notifications.filter.statuses": "نوێکردنەوەکان ئەو کەسانەی کە پەیڕەوی دەکەیت", + "notifications.group": "{count} ئاگانامە", + "notifications.mark_as_read": "هەموو ئاگانامەکان وەک خوێندراوەتەوە نیشان بکە", + "notifications.permission_denied": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت وەک ڕێپێدان ڕەتکرایەوە.", + "notifications.permission_denied_alert": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت، چونکە پێشتر مۆڵەتی وێبگەڕ ڕەتکرایەوە", + "notifications_permission_banner.enable": "چالاککردنی ئاگانامەکانی دێسکتۆپ", + "notifications_permission_banner.how_to_control": "بۆ وەرگرتنی ئاگانامەکان کاتێک ماستۆدۆن نەکراوەیە، ئاگانامەکانی دێسکتۆپ چالاک بکە. دەتوانیت بە وردی کۆنترۆڵی جۆری کارلێکەکان بکەیت کە ئاگانامەکانی دێسکتۆپ دروست دەکەن لە ڕێگەی دوگمەی {icon} لەسەرەوە کاتێک چالاک دەکرێن.", + "notifications_permission_banner.title": "هەرگیز شتێک لە دەست مەدە", + "picture_in_picture.restore": "بیگەڕێنەوە", + "poll.closed": "دابخە", + "poll.refresh": "نوێکردنەوە", + "poll.total_people": "{count, plural, one {# خەڵک} other {# خەڵک}}", + "poll.total_votes": "{count, plural, one {# دەنگ} other {# دەنگ}}\n", + "poll.vote": "دەنگ", + "poll.voted": "تۆ دەنگت بەو وەڵامە دا", + "poll_button.add_poll": "ڕاپرسییەک زیاد بکە", + "poll_button.remove_poll": "ده‌نگدان بسڕه‌وه‌‌", + "privacy.change": "ڕێکخستنی تایبەتمەندی توت", + "privacy.direct.long": "تەنیا بۆ بەکارهێنەرانی ناوبراو", + "privacy.direct.short": "ڕاستەوخۆ", + "privacy.private.long": "بینراو تەنها بۆ شوێنکەوتوان", + "privacy.private.short": "تەنها بۆ شوێنکەوتوان", + "privacy.public.long": "بۆ هەمووان دیاربێت، لە هێڵی کاتی گشتی دا نیشان دەدرێت", + "privacy.public.short": "گشتی", + "privacy.unlisted.long": "بۆ هەمووان دیارە، بەڵام لە هێڵی کاتی گشتیدا نا", + "privacy.unlisted.short": "لە لیست نەکراو", + "refresh": "نوێکردنەوە", + "regeneration_indicator.label": "بارکردن…", + "regeneration_indicator.sublabel": "ڕاگەیەنەری ماڵەوەت ئامادە دەکرێت!", + "relative_time.days": "{number}ڕۆژ", + "relative_time.hours": "{number}کات", + "relative_time.just_now": "ئێستا", + "relative_time.minutes": "{number}کات", + "relative_time.seconds": "{number}کات", + "relative_time.today": "ئیمڕۆ", + "reply_indicator.cancel": "هەڵوەشاندنەوه", + "report.forward": "ناردن بۆ {target}", + "report.forward_hint": "هەژمارەکە لە ڕاژەیەکی ترە. ڕونووسێکی نەناسراو بنێرە بۆ گوزارشت لەوێ?", + "report.hint": "گوزارشتەکە دەنێردرێت بۆ بەرپرسانی ڕاژەکەت. دەتوانیت ڕوونکردنەوەیەک پێشکەش بکەیت کە بۆچی ئەم هەژمارە لە خوارەوە گوزارش دەکەیت:", + "report.placeholder": "سەرنجەکانی زیاتر", + "report.submit": "ناردن", + "report.target": "گوزارشتکردنی{target}", + "search.placeholder": "گەڕان", + "search_popout.search_format": "شێوەی گەڕانی پێشکەوتوو", + "search_popout.tips.full_text": "گەڕانێکی دەقی سادە دەتوانێت توتەکانی ئێوە کە، نووسیوتانە،پەسەنتان کردووە، دووبارەتانکردووە، یان ئەو توتانە کە باسی ئێوەی تێدا کراوە پەیدا دەکا. هەروەها ناوی بەکارهێنەران، ناوی پیشاندراو و هەشتەگەکانیش لە خۆ دەگرێت.", + "search_popout.tips.hashtag": "هەشتاگ", + "search_popout.tips.status": "توت", + "search_popout.tips.text": "دەقی سادە هەڵدەسێ بە گەڕاندنەوەی هاوتایی ناوی پیشاندان، ناوی بەکارهێنەر و هاشتاگەکان", + "search_popout.tips.user": "بەکارهێنەر", + "search_results.accounts": "خەڵک", + "search_results.hashtags": "هەشتاگ", + "search_results.statuses": "توتەکان", + "search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.", + "search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}", + "standalone.public_title": "A look inside...", + "status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}", + "status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر", + "status.block": "بلۆکی @{name}", + "status.bookmark": "نیشانه", + "status.cancel_reblog_private": "بێبەهێزکردن", + "status.cannot_reblog": "ئەم بابەتە ناتوانرێت بەرزبکرێتەوە", + "status.copy": "ڕوونووسی بەستەر بۆ توت", + "status.delete": "سڕینەوە", + "status.detailed_status": "ڕوانگەی گفتوگۆ بە وردەکاری", + "status.direct": "پەیامی ڕاستەوخۆ @{name}", + "status.embed": "نیشتەجێ بکە", + "status.favourite": "دڵخواز", + "status.filtered": "پاڵاوتن", + "status.load_more": "بارکردنی زیاتر", + "status.media_hidden": "میدیای شاراوە", + "status.mention": "ناوبنێ @{name}", + "status.more": "زیاتر", + "status.mute": "بێدەنگکردن @{name}", + "status.mute_conversation": "گفتوگۆی بێدەنگ", + "status.open": "ئەم توتە فراوان بکە", + "status.pin": "لکاندن لەسەر پرۆفایل", + "status.pinned": "توتی چەسپکراو", + "status.read_more": "زیاتر بخوێنەوە", + "status.reblog": "بەهێزکردن", + "status.reblog_private": "بەهێزکردن بۆ بینەرانی سەرەتایی", + "status.reblogged_by": "{name} توتی کردەوە", + "status.reblogs.empty": "کەس ئەم توتەی دووبارە نەتوتاندوە ،کاتێک کەسێک وا بکات، لێرە دەرئەکەون.", + "status.redraft": "سڕینەوەی و دووبارە ڕەشنووس", + "status.remove_bookmark": "لابردنی نیشانه", + "status.reply": "وەڵام", + "status.replyAll": "بە نووسراوە وەڵام بدەوە", + "status.report": "گوزارشت @{name}", + "status.sensitive_warning": "ناوەڕۆکی هەستیار", + "status.share": "هاوبەش کردن", + "status.show_less": "کەمتر نیشان بدە", + "status.show_less_all": "کەمتر نیشان بدە بۆ هەمووی", + "status.show_more": "زیاتر پیشان بدە", + "status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی", + "status.show_thread": "نیشاندانی گفتوگۆ", + "status.uncached_media_warning": "بەردەست نیە", + "status.unmute_conversation": "گفتوگۆی بێدەنگ", + "status.unpin": "لابردن لە پرۆفایل", + "suggestions.dismiss": "ڕەتکردنەوەی پێشنیار", + "suggestions.header": "لەوانەیە حەزت لەمەش بێت…", + "tabs_bar.federated_timeline": "گشتی", + "tabs_bar.home": "سەرەتا", + "tabs_bar.local_timeline": "ناوخۆیی", + "tabs_bar.notifications": "ئاگادارییەکان", + "tabs_bar.search": "گەڕان", + "time_remaining.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژ}} ماوە", + "time_remaining.hours": "{number, plural, one {# کات} other {# کات}} ماوە", + "time_remaining.minutes": "{number, plural, one {# خۆلەک} other {# خولەک}} ماوە", + "time_remaining.moments": "ئەو ساتانەی ماونەتەوە", + "time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە", + "timeline_hint.remote_resource_not_displayed": "{resource} لە ڕاژەکانی ترەوە پیشان نادرێت.", + "timeline_hint.resources.followers": "شوێنکەوتووان", + "timeline_hint.resources.follows": "شوێنکەوتن", + "timeline_hint.resources.statuses": "توتی کۆن", + "trends.counter_by_accounts": "{count, plural, one {{counter} کەس} other {{counter} کەس}} گفتوگۆ دەکا", + "trends.trending_now": "گۆگران", + "ui.beforeunload": "ڕەشنووسەکەت لە دەست دەچێت ئەگەر لە ماستۆدۆن بڕۆیت.", + "units.short.billion": "{count}ملیار", + "units.short.million": "{count}ملیۆن", + "units.short.thousand": "{count}هەزار", + "upload_area.title": "ڕاکێشان & دانان بۆ بارکردن", + "upload_button.label": "زیادکردنی وێنەکان، ڤیدیۆیەک یان فایلێکی دەنگی", + "upload_error.limit": "سنووری بارکردنی فایل تێپەڕیوە.", + "upload_error.poll": "پەڕگەکە ڕێی پێنەدراوە بە ڕاپرسی باربکرێت.", + "upload_form.audio_description": "بۆ ئەو کەسانەی کە گوێ بیستیان هەیە وەسف دەکات", + "upload_form.description": "وەسف بکە بۆ کەمبینایان", + "upload_form.edit": "دەستکاری", + "upload_form.thumbnail": "گۆڕانی وینۆچکە", + "upload_form.undo": "سڕینەوە", + "upload_form.video_description": "بۆ کەم بینایان و کەم بیستان وەسفی بکە", + "upload_modal.analyzing_picture": "شیکردنەوەی وێنە…", + "upload_modal.apply": "جێبەجێ کردن", + "upload_modal.choose_image": "وێنە هەڵبژێرە", + "upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا", + "upload_modal.detect_text": "دەقی وێنەکە بدۆزیەوە", + "upload_modal.edit_media": "دەستکاریکردنی میدیا", + "upload_modal.hint": "گەر وێنە چکۆلە یان بڕاوەبێت، خاڵی ناوەندی دیار دەکەوێت. خاڵی ناوەندی وێنە بە کرتە یان جێبەجیکردنی رێکبخەن.", + "upload_modal.preparing_ocr": "ئامادەکردنی OCR…", + "upload_modal.preview_label": "پێشبینی ({ratio})", + "upload_progress.label": "بارکردن...", + "video.close": "داخستنی ڤیدیۆ", + "video.download": "داگرتنی فایل", + "video.exit_fullscreen": "دەرچوون لە پڕ شاشە", + "video.expand": "ڤیدیۆفراوان بکە", + "video.fullscreen": "پڕپیشانگەر", + "video.hide": "شاردنەوەی ڤیدیۆ", + "video.mute": "دەنگی کپ", + "video.pause": "وەستان", + "video.play": "پەخشکردن", + "video.unmute": "دەنگ لابدە" } diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 6141f321e..bd23c586f 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 061ab2a83..3634d1201 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Atcelt pieprasījumu", "account.direct": "Privātā ziņa @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Šim lietotājam nav sekotāju.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Nesekot", "account.unmute": "Noņemt apklusinājumu no lietotāja @{name}", "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Noklikšķiniet, lai pievienotu piezīmi", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index b640b8c66..7ae757c19 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Одкажи барање за следење", "account.direct": "Директна порана @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Скриен домен", "account.edit_profile": "Измени профил", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Никој не го следи овој корисник сеуште.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Корисникот не следи никој сеуште.", "account.follows_you": "Те следи тебе", "account.hide_reblogs": "Сокриј буст од @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Одследи", "account.unmute": "Зачути го @{name}", "account.unmute_notifications": "Исклучи известувања од @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Обидете се повторно после {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Било кои", "hashtag.column_settings.tag_mode.none": "Никои", "hashtag.column_settings.tag_toggle": "Стави додатни тагови за оваа колона", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основно", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Прикажи бустирања", "home.column_settings.show_replies": "Прикажи одговори", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# ден} other {# дена}}", "intervals.full.hours": "{number, plural, one {# час} other {# часа}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index c03e5c81a..b92ee3342 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -6,10 +6,11 @@ "account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക", "account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക", "account.blocked": "തടഞ്ഞു", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക", "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു", "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക", @@ -45,6 +47,7 @@ "account.unfollow": "പിന്തുടരുന്നത് നിര്‍ത്തുക", "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}", "account.unmute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രസിദ്ധപ്പെടുത്തുക", + "account.view_full_profile": "View full profile", "account_note.placeholder": "കുറിപ്പ് ചേർക്കാൻ ക്ലിക്കുചെയ്യുക", "alert.rate_limited.message": "{retry_time, time, medium} നു ശേഷം വീണ്ടും ശ്രമിക്കുക.", "alert.rate_limited.title": "തോത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു", @@ -94,10 +97,10 @@ "compose_form.poll.duration": "തിരഞ്ഞെടുപ്പിന്റെ സമയദൈർഖ്യം", "compose_form.poll.option_placeholder": "ചോയ്‌സ് {number}", "compose_form.poll.remove_option": "ഈ ഡിവൈസ് മാറ്റുക", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്‌സുകൾ ഉൾപ്പെടുതുക", + "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്‌സ്‌ മാത്രം ആക്കുക", "compose_form.publish": "ടൂട്ട്", - "compose_form.publish_loud": "{publish}!", + "compose_form.publish_loud": "{പ്രസിദ്ധീകരിക്കുക}!", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", @@ -141,7 +144,7 @@ "emoji_button.food": "ഭക്ഷണവും പാനീയവും", "emoji_button.label": "ഇമോജി ചേർക്കുക", "emoji_button.nature": "പ്രകൃതി", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "എമോജി പാടില്ല (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "വസ്തുക്കൾ", "emoji_button.people": "ആളുകൾ", "emoji_button.recent": "അടിക്കടി ഉപയോഗിക്കുന്നവ", @@ -152,7 +155,7 @@ "empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!", "empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല", "empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "നിങ്ങൾക് ഇതുവരെ അടയാളപ്പെടുത്തിയ ടൂട്ടുകൾ ഇല്ല. അടയാളപ്പെടുത്തിയാൽ അത് ഇവിടെ വരും.", "empty_column.community": "പ്രാദേശികമായ സമയരേഖ ശൂന്യമാണ്. എന്തെങ്കിലും പരസ്യമായി എഴുതി തുടക്കം കുറിക്കു!", "empty_column.direct": "നിങ്ങൾക്ക് ഇതുവരെ നേരിട്ടുള്ള സന്ദേശങ്ങൾ ഒന്നുമില്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് അയക്കുകയോ, നിങ്ങൾക്ക് ലഭിക്കുകയോ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.domain_blocks": "മറയ്ക്കപ്പെട്ടിരിക്കുന്ന മേഖലകൾ ഇതുവരെ ഇല്ല.", @@ -161,7 +164,7 @@ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", + "empty_column.home.public_timeline": "പൊതു സമയരേഖ", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "അടിസ്ഥാനം", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", + "home.settings": "Column settings", "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -221,13 +227,13 @@ "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "വിവരണം", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.enter": "ടൂട്ട് എടുക്കാൻ", "keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.federated": "to open federated timeline", @@ -243,7 +249,7 @@ "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", @@ -253,38 +259,38 @@ "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", + "lightbox.close": "അടയ്ക്കുക", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", + "lightbox.next": "അടുത്തത്", + "lightbox.previous": "പുറകോട്ട്", "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", + "lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക", + "lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക", + "lists.delete": "പട്ടിക ഒഴിവാക്കുക", + "lists.edit": "പട്ടിക തിരുത്തുക", + "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", + "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", "lists.new.title_placeholder": "New list title", "lists.replies_policy.all_replies": "Any followed user", "lists.replies_policy.list_replies": "Members of the list", "lists.replies_policy.no_replies": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lists.subheading": "എന്റെ പട്ടികകൾ", "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", + "loading_indicator.label": "ലോഡിംഗ്...", "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", - "missing_indicator.label": "Not found", + "missing_indicator.label": "കാണാനില്ല", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.bookmarks": "അടയാളങ്ങൾ", "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 33f8cfd84..02a88e560 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "अनुयायी होण्याची विनंती रद्द करा", "account.direct": "थेट संदेश @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "प्रोफाइल एडिट करा", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "ह्या वापरकर्त्याचा आतापर्यंत कोणी अनुयायी नाही.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "हा वापरकर्ता अजूनपर्यंत कोणाचा अनुयायी नाही.", "account.follows_you": "तुमचा अनुयायी आहे", "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा", @@ -45,6 +47,7 @@ "account.unfollow": "अनुयायी असणे थांबवा", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index a4006a745..f143e000f 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 8b437e66b..2c0fd1da0 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Server verborgen", "account.edit_profile": "Profiel bewerken", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Niemand volgt nog deze gebruiker.", "account.followers_counter": "{count, plural, one {{counter} volger} other {{counter} volgers}}", "account.following_counter": "{count, plural, one {{counter} volgend} other {{counter} volgend}}", + "account.follows": "Follows", "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", "account.hide_reblogs": "Verberg boosts van @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Ontvolgen", "account.unmute": "@{name} niet langer negeren", "account.unmute_notifications": "@{name} meldingen niet langer negeren", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Klik om een opmerking toe te voegen", "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", "alert.rate_limited.title": "Beperkt te gebruiken", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Algemeen", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", "home.hide_announcements": "Mededelingen verbergen", + "home.settings": "Column settings", "home.show_announcements": "Mededelingen tonen", "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}", "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "om het tekst- en zoekvak te ontfocussen", "keyboard_shortcuts.up": "om omhoog te bewegen in de lijst", "lightbox.close": "Sluiten", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Afbeelding passend weergeven", + "lightbox.expand": "Afbeelding groot weergeven", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", "lightbox.view_context": "Context tonen", @@ -279,7 +285,7 @@ "missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden", "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Verberg meldingen van deze persoon?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Voor onbepaalde tijd", "navigation_bar.apps": "Mobiele apps", "navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.bookmarks": "Bladwijzers", @@ -338,8 +344,8 @@ "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.enable": "Notificatie meldingen inschakelen", + "notifications_permission_banner.how_to_control": "Gebruikt notificaties om ook meldingen te ontvangen wanneer Mastodon niet open is. U kunt precies bepalen welke soort meldingen wel of geen notificaties afgeven via de bovenstaande knop {icon}.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", "poll.closed": "Gesloten", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodonserver niet ingeschakeld.", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_status": "Deze toot in de moderatie-omgeving openen", "status.block": "@{name} blokkeren", @@ -448,9 +455,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten", "trends.trending_now": "Trends", "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} miljard", + "units.short.million": "{count} miljoen", + "units.short.thousand": "{count} duizend", "upload_area.title": "Hiernaar toe slepen om te uploaden", "upload_button.label": "Afbeeldingen, een video- of een geluidsbestand toevoegen", "upload_error.limit": "Uploadlimiet van bestand overschreden.", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Tekst in een afbeelding detecteren", "upload_modal.edit_media": "Media bewerken", "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR voorbereiden…", "upload_modal.preview_label": "Voorvertoning ({ratio})", "upload_progress.label": "Uploaden...", "video.close": "Video sluiten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 56df4624c..1650bd0aa 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -1,24 +1,26 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Merknad", "account.add_or_remove_from_list": "Legg til eller tak vekk frå listene", "account.badges.bot": "Robot", "account.badges.group": "Gruppe", "account.block": "Blokker @{name}", "account.block_domain": "Skjul alt frå {domain}", "account.blocked": "Blokkert", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Sjå gjennom meir på den opphavlege profilen", "account.cancel_follow_request": "Fjern fylgjeførespurnad", "account.direct": "Send melding til @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domenet er gøymt", "account.edit_profile": "Rediger profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", "account.endorse": "Framhev på profil", "account.follow": "Fylg", "account.followers": "Fylgjarar", "account.followers.empty": "Ingen fylgjer denne brukaren enno.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}", + "account.following_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjar}}", + "account.follows": "Follows", "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", @@ -38,14 +40,15 @@ "account.requested": "Ventar på samtykke. Klikk for å avbryta fylgjeførespurnaden", "account.share": "Del @{name} sin profil", "account.show_reblogs": "Vis framhevingar frå @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tut}}", "account.unblock": "Slutt å blokera @{name}", "account.unblock_domain": "Vis {domain}", "account.unendorse": "Ikkje framhev på profil", "account.unfollow": "Slutt å fylgja", "account.unmute": "Av-demp @{name}", "account.unmute_notifications": "Vis varsel frå @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klikk for å leggja til merknad", "alert.rate_limited.message": "Ver venleg å prøva igjen etter {retry_time, time, medium}.", "alert.rate_limited.title": "Begrensa rate", "alert.unexpected.message": "Eit uventa problem oppstod.", @@ -56,7 +59,7 @@ "bundle_column_error.body": "Noko gjekk gale mens denne komponenten vart lasta ned.", "bundle_column_error.retry": "Prøv igjen", "bundle_column_error.title": "Nettverksfeil", - "bundle_modal_error.close": "Lukk", + "bundle_modal_error.close": "Lat att", "bundle_modal_error.message": "Noko gjekk gale under lastinga av denne komponenten.", "bundle_modal_error.retry": "Prøv igjen", "column.blocks": "Blokkerte brukarar", @@ -81,9 +84,9 @@ "column_header.show_settings": "Vis innstillingar", "column_header.unpin": "Løys", "column_subheading.settings": "Innstillingar", - "community.column_settings.local_only": "Kun lokalt", + "community.column_settings.local_only": "Berre lokalt", "community.column_settings.media_only": "Berre media", - "community.column_settings.remote_only": "Kun eksternt", + "community.column_settings.remote_only": "Berre eksternt", "compose_form.direct_message_warning": "Dette tutet vert berre synleg for nemnde brukarar.", "compose_form.direct_message_warning_learn_more": "Lær meir", "compose_form.hashtag_warning": "Dette tutet vert ikkje oppført under nokon emneknagg sidan det ikkje er oppført. Berre offentlege tut kan verta søkt etter med emneknagg.", @@ -168,15 +171,15 @@ "empty_column.notifications": "Du har ingen varsel ennå. Kommuniser med andre for å starte samtalen.", "empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller følg brukarar frå andre tenarar manuelt for å fylle det opp", "error.unexpected_crash.explanation": "På grunn av ein feil i vår kode eller eit nettlesarkompatibilitetsproblem, kunne ikkje denne sida verte vist korrekt.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Om det ikkje hjelper så kan du framleis nytta Mastodon i ein annan nettlesar eller app.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", - "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte {domain} tilsette at du ville gå gjennom førespurnadar frå desse kontoane manuelt.", + "generic.saved": "Lagra", "getting_started.developers": "Utviklarar", "getting_started.directory": "Profilkatalog", "getting_started.documentation": "Dokumentasjon", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ikkje nokon av disse", "hashtag.column_settings.tag_toggle": "Inkluder ekstra emneknaggar for denne kolonna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Enkelt", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjeringar", + "home.settings": "Column settings", "home.show_announcements": "Vis kunngjeringar", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# time} other {# timar}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "for å svara", "keyboard_shortcuts.requests": "for å opna lista med fylgjeførespurnader", "keyboard_shortcuts.search": "for å fokusera søket", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "for å visa/gøyma CW-felt", "keyboard_shortcuts.start": "for å opna \"kom i gang\"-feltet", "keyboard_shortcuts.toggle_hidden": "for å visa/gøyma tekst bak innhaldsvarsel", "keyboard_shortcuts.toggle_sensitivity": "for å visa/gøyma media", @@ -266,10 +272,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Enhver fulgt bruker", + "lists.replies_policy.list_replies": "Medlemmer i listen", + "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk gjennom folk du følgjer", "lists.subheading": "Dine lister", "load_pending": "{count, plural, one {# nytt element} other {# nye element}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Gjer synleg/usynleg", "missing_indicator.label": "Ikkje funne", "missing_indicator.sublabel": "Fann ikkje ressursen", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Varighet", "mute_modal.hide_notifications": "Gøyme varsel frå denne brukaren?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blokkerte brukarar", "navigation_bar.bookmarks": "Bokmerke", @@ -310,7 +316,7 @@ "notification.own_poll": "Rundspørjinga di er ferdig", "notification.poll": "Ei rundspørjing du har røysta i er ferdig", "notification.reblog": "{name} framheva statusen din", - "notification.status": "{name} just posted", + "notification.status": "{name} la nettopp ut", "notifications.clear": "Tøm varsel", "notifications.clear_confirmation": "Er du sikker på at du vil fjerna alle varsla dine for alltid?", "notifications.column_settings.alert": "Skrivebordsvarsel", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Framhevingar:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nye tuter:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", "notifications.filter.follows": "Fylgjer", "notifications.filter.mentions": "Nemningar", "notifications.filter.polls": "Røysteresultat", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Oppdateringer fra folk du følger", "notifications.group": "{count} varsel", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Merk alle varsler som lest", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Aldri gå glipp av noe", + "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukka", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# folk}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tut", "search_results.statuses_fts_disabled": "På denne Matsodon-tenaren kan du ikkje søkja på tut etter innhaldet deira.", "search_results.total": "{count, number} {count, plural, one {treff} other {treff}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}", "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet", "status.block": "Blokker @{name}", @@ -441,29 +448,29 @@ "time_remaining.minutes": "{number, plural, one {# minutt} other {# minutt}} igjen", "time_remaining.moments": "Kort tid igjen", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekund}} igjen", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} frå andre tenarar synest ikkje.", + "timeline_hint.resources.followers": "Fylgjarar", + "timeline_hint.resources.follows": "Fylgjer", + "timeline_hint.resources.statuses": "Eldre tut", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} folk}} pratar", "trends.trending_now": "Populært no", "ui.beforeunload": "Kladden din forsvinn om du forlèt Mastodon no.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Drag & slepp for å lasta opp", - "upload_button.label": "Legg til medium ({formats})", + "upload_button.label": "Legg til medium", "upload_error.limit": "Du har gått over opplastingsgrensa.", "upload_error.poll": "Filopplasting ikkje tillate med meiningsmålingar.", "upload_form.audio_description": "Grei ut for folk med nedsett høyrsel", "upload_form.description": "Skildr for synshemja", "upload_form.edit": "Rediger", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Bytt miniatyrbilete", "upload_form.undo": "Slett", "upload_form.video_description": "Greit ut for folk med nedsett høyrsel eller syn", "upload_modal.analyzing_picture": "Analyserer bilete…", "upload_modal.apply": "Bruk", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Vel bilete", "upload_modal.description_placeholder": "Ein rask brun rev hoppar over den late hunden", "upload_modal.detect_text": "Gjenkjenn tekst i biletet", "upload_modal.edit_media": "Rediger medium", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index cd5dd1971..19e96c29a 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -1,24 +1,26 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Notis", "account.add_or_remove_from_list": "Legg til eller fjern fra lister", "account.badges.bot": "Bot", "account.badges.group": "Gruppe", "account.block": "Blokkér @{name}", "account.block_domain": "Skjul alt fra {domain}", "account.blocked": "Blokkert", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Bla mer på den opprinnelige profilen", "account.cancel_follow_request": "Avbryt følge forespørsel", "account.direct": "Direct Message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domenet skjult", "account.edit_profile": "Rediger profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", "account.endorse": "Vis frem på profilen", "account.follow": "Følg", "account.followers": "Følgere", "account.followers.empty": "Ingen følger denne brukeren ennå.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} følger} other {{counter} følgere}}", + "account.following_counter": "{count, plural, one {{counter} som følges} other {{counter} som følges}}", + "account.follows": "Follows", "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", @@ -38,14 +40,15 @@ "account.requested": "Venter på godkjennelse", "account.share": "Del @{name}s profil", "account.show_reblogs": "Vis boosts fra @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuter}}", "account.unblock": "Avblokker @{name}", "account.unblock_domain": "Vis {domain}", "account.unendorse": "Ikke vis frem på profilen", "account.unfollow": "Avfølg", "account.unmute": "Avdemp @{name}", "account.unmute_notifications": "Vis varsler fra @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klikk for å legge til et notat", "alert.rate_limited.message": "Vennligst prøv igjen etter kl. {retry_time, time, medium}.", "alert.rate_limited.title": "Hastighetsbegrenset", "alert.unexpected.message": "En uventet feil oppstod.", @@ -168,7 +171,7 @@ "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.", "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp", "error.unexpected_crash.explanation": "På grunn av en bug i koden vår eller et nettleserkompatibilitetsproblem, kunne denne siden ikke vises riktig.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å oppfriske siden. Dersom det ikke hjelper, vil du kanskje fortsatt kunne bruke Mastodon gjennom en annen nettleser eller app.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", @@ -176,7 +179,7 @@ "follow_request.authorize": "Autorisér", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", - "generic.saved": "Saved", + "generic.saved": "Lagret", "getting_started.developers": "Utviklere", "getting_started.directory": "Profilmappe", "getting_started.documentation": "Dokumentasjon", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Enhver av disse", "hashtag.column_settings.tag_mode.none": "Ingen av disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Enkelt", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjøring", + "home.settings": "Column settings", "home.show_announcements": "Vis kunngjøring", "intervals.full.days": "{number, plural,one {# dag} other {# dager}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", @@ -266,10 +272,10 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Ligg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Enhver fulgt bruker", + "lists.replies_policy.list_replies": "Medlemmer i listen", + "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", "load_pending": "{count, plural,one {# ny gjenstand} other {# nye gjenstander}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Veksle synlighet", "missing_indicator.label": "Ikke funnet", "missing_indicator.sublabel": "Denne ressursen ble ikke funnet", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Varighet", "mute_modal.hide_notifications": "Skjul varslinger fra denne brukeren?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.apps": "Mobilapper", "navigation_bar.blocks": "Blokkerte brukere", "navigation_bar.bookmarks": "Bokmerker", @@ -310,7 +316,7 @@ "notification.own_poll": "Avstemningen din er ferdig", "notification.poll": "En avstemning du har stemt på har avsluttet", "notification.reblog": "{name} fremhevde din status", - "notification.status": "{name} just posted", + "notification.status": "{name} la nettopp ut", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", "notifications.column_settings.alert": "Skrivebordsvarslinger", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nye tuter:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følginger", "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Oppdateringer fra folk du følger", "notifications.group": "{count} varslinger", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Merk alle varsler som lest", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Aldri gå glipp av noe", + "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukket", "poll.refresh": "Oppdater", "poll.total_people": "{count, plural, one {# person} other {# personer}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuter", "search_results.statuses_fts_disabled": "Å søke i tuter etter innhold er ikke skrudd på i denne Mastodon-tjeneren.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Åpne moderatorgrensesnittet for @{name}", "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet", "status.block": "Blokkér @{name}", @@ -442,15 +449,15 @@ "time_remaining.moments": "Gjenværende øyeblikk", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} igjen", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.resources.followers": "Følgere", + "timeline_hint.resources.follows": "Følger", + "timeline_hint.resources.statuses": "Eldre tuter", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} snakker", "trends.trending_now": "Trender nå", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}m.ard", + "units.short.million": "{count}mill", + "units.short.thousand": "{count}T", "upload_area.title": "Dra og slipp for å laste opp", "upload_button.label": "Legg til media", "upload_error.limit": "Filopplastingsgrensen er oversteget.", @@ -458,12 +465,12 @@ "upload_form.audio_description": "Beskriv det for folk med hørselstap", "upload_form.description": "Beskriv for synshemmede", "upload_form.edit": "Rediger", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Endre miniatyrbilde", "upload_form.undo": "Angre", "upload_form.video_description": "Beskriv det for folk med hørselstap eller synshemminger", "upload_modal.analyzing_picture": "Analyserer bildet …", "upload_modal.apply": "Bruk", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Velg et bilde", "upload_modal.description_placeholder": "Når du en gang kommer, neste sommer, skal vi atter drikke vin", "upload_modal.detect_text": "Oppdag tekst i bildet", "upload_modal.edit_media": "Rediger media", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 4ec1643ee..3ab920621 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Navigar sul perfil original", "account.cancel_follow_request": "Anullar la demanda de seguiment", "account.direct": "Escriure un MP a @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Quitar de m’avisar quand @{name} publica quicòm", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeni amagat", "account.edit_profile": "Modificar lo perfil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "M’avisar quand @{name} publica quicòm", "account.endorse": "Mostrar pel perfil", "account.follow": "Sègre", "account.followers": "Seguidors", "account.followers.empty": "Degun sèc pas aqueste utilizaire pel moment.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", + "account.following_counter": "{count, plural, one {{counter} Abonaments} other {{counter} Abonaments}}", + "account.follows": "Follows", "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", @@ -38,13 +40,14 @@ "account.requested": "Invitacion mandada. Clicatz per anullar", "account.share": "Partejar lo perfil a @{name}", "account.show_reblogs": "Mostrar los partatges de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}", "account.unblock": "Desblocar @{name}", "account.unblock_domain": "Desblocar {domain}", "account.unendorse": "Mostrar pas pel perfil", "account.unfollow": "Quitar de sègre", "account.unmute": "Quitar de rescondre @{name}", "account.unmute_notifications": "Mostrar las notificacions de @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Clicar per ajustar una nòta", "alert.rate_limited.message": "Mercés de tornar ensajar aprèp {retry_time, time, medium}.", "alert.rate_limited.title": "Taus limitat", @@ -87,7 +90,7 @@ "compose_form.direct_message_warning": "Sols los mencionats poiràn veire aqueste tut.", "compose_form.direct_message_warning_learn_more": "Ne saber mai", "compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap d’etiqueta estant qu’es pas listat. Òm pòt pas cercar que los tuts publics per etiqueta.", - "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo monde pòt vos sègre e veire los estatuts reservats als seguidors.", + "compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.", "compose_form.lock_disclaimer.lock": "clavat", "compose_form.placeholder": "A de qué pensatz ?", "compose_form.poll.add_option": "Ajustar una causida", @@ -168,9 +171,9 @@ "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.", "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autres servidors per garnir lo flux public", "error.unexpected_crash.explanation": "A causa d’una avaria dins nòstre còdi o d’un problèma de compatibilitat de navegador, aquesta pagina se pòt pas afichar corrèctament.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Aquesta pagina podiá pas s’afichar corrèctament. Aquesta error arriba sovent a causa d’un modul complementari de navigador o una aisina de traduccion automatica.", "error.unexpected_crash.next_steps": "Ensajatz d’actualizar la pagina. S’aquò càmbia pas res, podètz provar d’utilizar Mastodon via un navegador diferent o d’una aplicacion nativa estant.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "follow_request.authorize": "Acceptar", @@ -181,7 +184,7 @@ "getting_started.directory": "Annuari de perfils", "getting_started.documentation": "Documentacion", "getting_started.heading": "Per començar", - "getting_started.invite": "Convidar de monde", + "getting_started.invite": "Convidar de mond", "getting_started.open_source_notice": "Mastodon es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {github} sus GitHub.", "getting_started.security": "Seguretat", "getting_started.terms": "Condicions d’utilizacion", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Un d’aquestes", "hashtag.column_settings.tag_mode.none": "Cap d’aquestes", "hashtag.column_settings.tag_toggle": "Inclure las etiquetas suplementàrias dins aquesta colomna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", "home.hide_announcements": "Rescondre las anóncias", + "home.settings": "Column settings", "home.show_announcements": "Mostrar las anóncias", "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", @@ -206,9 +212,9 @@ "introduction.federation.federated.headline": "Federat", "introduction.federation.federated.text": "Los tuts publics d’autres servidors del fediverse apareisseràn dins lo flux d’actualitats.", "introduction.federation.home.headline": "Acuèlh", - "introduction.federation.home.text": "Los tuts del monde que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de monde ont que siasquen !", + "introduction.federation.home.text": "Los tuts del mond que seguètz apareisseràn dins vòstre flux d’acuèlh. Podètz sègre de mond ont que siasquen !", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Los tuts publics del monde del meteis servidor que vosautres apareisseràn dins lo flux local.", + "introduction.federation.local.text": "Los tuts publics del mond del meteis servidor que vosautres apareisseràn dins lo flux local.", "introduction.interactions.action": "Acabar la leiçon !", "introduction.interactions.favourite.headline": "Favorit", "introduction.interactions.favourite.text": "Podètz enregistrar un tut per mai tard, e avisar l’autor que l’avètz aimat, en l’ajustant als favorits.", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Fenèstra de visualizacion dels imatges compressats", + "lightbox.expand": "Espandir la fenèstra de visualizacion d’imatge", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", "lightbox.view_context": "Veire lo contèxt", @@ -266,20 +272,20 @@ "lists.edit.submit": "Cambiar lo títol", "lists.new.create": "Ajustar una lista", "lists.new.title_placeholder": "Títol de la nòva lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Cercar demest lo monde que seguètz", + "lists.replies_policy.all_replies": "Los que sègui", + "lists.replies_policy.list_replies": "Membres d’aquesta lista", + "lists.replies_policy.no_replies": "Degun", + "lists.replies_policy.title": "Mostrar las responsas a :", + "lists.search": "Cercar demest lo mond que seguètz", "lists.subheading": "Vòstras listas", "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}", "loading_indicator.label": "Cargament…", "media_gallery.toggle_visible": "Modificar la visibilitat", "missing_indicator.label": "Pas trobat", "missing_indicator.sublabel": "Aquesta ressorsa es pas estada trobada", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Cap de data de fin", "navigation_bar.apps": "Aplicacions mobil", "navigation_bar.blocks": "Personas blocadas", "navigation_bar.bookmarks": "Marcadors", @@ -310,7 +316,7 @@ "notification.own_poll": "Vòstre sondatge es acabat", "notification.poll": "Avètz participat a un sondatge que ven de s’acabar", "notification.reblog": "{name} a partejat vòstre estatut", - "notification.status": "{name} just posted", + "notification.status": "{name} ven de publicar", "notifications.clear": "Escafar", "notifications.clear_confirmation": "Volètz vertadièrament escafar totas vòstras las notificacions ?", "notifications.column_settings.alert": "Notificacions localas", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.sound": "Emetre un son", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Tuts novèls :", "notifications.filter.all": "Totas", "notifications.filter.boosts": "Partages", "notifications.filter.favourites": "Favorits", "notifications.filter.follows": "Seguiments", "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats del sondatge", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Mesas a jorn del monde que seguissètz", "notifications.group": "{count} notificacions", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar totas las notificacions coma legidas", + "notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas d’autorizacion navigador", + "notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans", + "notifications_permission_banner.enable": "Activar las notificacions burèu", + "notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.", + "notifications_permission_banner.title": "Manquetz pas jamai res", + "picture_in_picture.restore": "Lo tornar", "poll.closed": "Tampat", "poll.refresh": "Actualizar", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}", "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion", "status.block": "Blocar @{name}", @@ -445,7 +452,7 @@ "timeline_hint.resources.followers": "Seguidors", "timeline_hint.resources.follows": "Abonaments", "timeline_hint.resources.statuses": "Tuts mai ancians", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona ne parla} other {{counter} personas ne parlan}}", "trends.trending_now": "Tendéncia del moment", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", "units.short.billion": "{count}B", @@ -458,17 +465,17 @@ "upload_form.audio_description": "Descriure per las personas amb pèrdas auditivas", "upload_form.description": "Descripcion pels mal vesents", "upload_form.edit": "Modificar", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Cambiar la vinheta", "upload_form.undo": "Suprimir", "upload_form.video_description": "Descriure per las personas amb pèrdas auditivas o mal vesent", "upload_modal.analyzing_picture": "Analisi de l’imatge…", "upload_modal.apply": "Aplicar", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Causir un imatge", "upload_modal.description_placeholder": "Lo dròlle bilingüe manja un yaourt de ròcs exagonals e kiwis verds farà un an mai", "upload_modal.detect_text": "Detectar lo tèxt de l’imatge", "upload_modal.edit_media": "Modificar lo mèdia", "upload_modal.hint": "Clicatz o lisatz lo cercle de l’apercebut per causir lo ponch que serà totjorn visible dins las vinhetas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparacion de la ROC…", "upload_modal.preview_label": "Apercebut ({ratio})", "upload_progress.label": "Mandadís…", "video.close": "Tampar la vidèo", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 6dfb7a832..9b2927b58 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Notatka", "account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.badges.bot": "Bot", "account.badges.group": "Grupa", @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Zobacz więcej na oryginalnym profilu", "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}", "account.endorse": "Polecaj na profilu", "account.follow": "Śledź", "account.followers": "Śledzący", "account.followers.empty": "Nikt jeszcze nie śledzi tego użytkownika.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} śledzący} few {{counter} śledzących} many {{counter} śledzących} other {{counter} śledzących}}", + "account.following_counter": "{count, plural, one {{counter} śledzony} few {{counter} śledzonych} many {{counter} śledzonych} other {{counter} śledzonych}}", + "account.follows": "Follows", "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.", "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", @@ -38,14 +40,15 @@ "account.requested": "Oczekująca prośba, kliknij aby anulować", "account.share": "Udostępnij profil @{name}", "account.show_reblogs": "Pokazuj podbicia od @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Odblokuj domenę {domain}", "account.unendorse": "Przestań polecać", "account.unfollow": "Przestań śledzić", "account.unmute": "Cofnij wyciszenie @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Naciśnij aby dodać notatkę", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczony czasowo", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", @@ -168,15 +171,15 @@ "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Ta strona nie mogła zostać poprawnie wyświetlona. Może to być spowodowane dodatkiem do przeglądarki lub narzędziem do automatycznego tłumaczenia.", "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "follow_request.authorize": "Autoryzuj", "follow_request.reject": "Odrzuć", "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość śledzenia.", - "generic.saved": "Saved", + "generic.saved": "Zapisano", "getting_started.developers": "Dla programistów", "getting_started.directory": "Katalog profilów", "getting_started.documentation": "Dokumentacja", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Podstawowe", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", "home.hide_announcements": "Ukryj ogłoszenia", + "home.settings": "Column settings", "home.show_announcements": "Pokaż ogłoszenia", "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", @@ -266,10 +272,10 @@ "lists.edit.submit": "Zmień tytuł", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Dowolnego obserwowanego użytkownika", + "lists.replies_policy.list_replies": "Członków listy", + "lists.replies_policy.no_replies": "Nikogo", + "lists.replies_policy.title": "Pokazuj odpowiedzi dla:", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", "load_pending": "{count, plural, one {# nowy przedmiot} other {nowe przedmioty}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Przełącz widoczność", "missing_indicator.label": "Nie znaleziono", "missing_indicator.sublabel": "Nie można odnaleźć tego zasobu", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Czas", "mute_modal.hide_notifications": "Chcesz ukryć powiadomienia od tego użytkownika?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Nieokreślony", "navigation_bar.apps": "Aplikacje mobilne", "navigation_bar.blocks": "Zablokowani użytkownicy", "navigation_bar.bookmarks": "Zakładki", @@ -310,7 +316,7 @@ "notification.own_poll": "Twoje głosowanie zakończyło się", "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", "notification.reblog": "{name} podbił(a) Twój wpis", - "notification.status": "{name} just posted", + "notification.status": "{name} właśnie utworzył(a) wpis", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", "notifications.column_settings.alert": "Powiadomienia na pulpicie", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nowe wpisy:", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", "notifications.filter.favourites": "Ulubione", "notifications.filter.follows": "Śledzenia", "notifications.filter.mentions": "Wspomienia", "notifications.filter.polls": "Wyniki głosowania", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", + "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", + "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", + "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", + "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", + "notifications_permission_banner.title": "Nie przegap niczego", + "picture_in_picture.restore": "Odłóż", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Wpisy", "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.", "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", "status.block": "Zablokuj @{name}", @@ -445,12 +452,12 @@ "timeline_hint.resources.followers": "Śledzący", "timeline_hint.resources.follows": "Śledzeni", "timeline_hint.resources.statuses": "Starsze wpisy", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "rozmawiają: {count, plural, one {{counter} osoba} few {{counter} osoby} many {{counter} osób} other {{counter} osoby}}", "trends.trending_now": "Popularne teraz", "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} mld", + "units.short.million": "{count} mln", + "units.short.thousand": "{count} tys.", "upload_area.title": "Przeciągnij i upuść aby wysłać", "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Przekroczono limit plików do wysłania.", @@ -458,17 +465,17 @@ "upload_form.audio_description": "Opisz dla osób niesłyszących i niedosłyszących", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", "upload_form.edit": "Edytuj", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Zmień miniaturę", "upload_form.undo": "Usuń", "upload_form.video_description": "Opisz dla osób niesłyszących, niedosłyszących, niewidomych i niedowidzących", "upload_modal.analyzing_picture": "Analizowanie obrazu…", "upload_modal.apply": "Zastosuj", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Wybierz obraz", "upload_modal.description_placeholder": "Pchnąć w tę łódź jeża lub ośm skrzyń fig", - "upload_modal.detect_text": "Wykryj tekst ze obrazu", + "upload_modal.detect_text": "Wykryj tekst z obrazu", "upload_modal.edit_media": "Edytuj multimedia", "upload_modal.hint": "Kliknij lub przeciągnij kółko na podglądzie by wybrać centralny punkt, który zawsze będzie na widoku na miniaturce.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Przygotowywanie OCR…", "upload_modal.preview_label": "Podgląd ({ratio})", "upload_progress.label": "Wysyłanie…", "video.close": "Zamknij film", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 2d0f85156..9d24ab897 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Encontre mais no perfil original", "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.direct": "Enviar toot direto para @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Parar de me notificar quando @{name} fizer publicações", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Notificar-me quando @{name} fizer publicações", "account.endorse": "Destacar no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Nada aqui.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {{counter} Seguindo}}", + "account.follows": "Follows", "account.follows.empty": "Nada aqui.", "account.follows_you": "Segue você", "account.hide_reblogs": "Ocultar boosts de @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Tirar @{name} do mudo", "account.unmute_notifications": "Mostrar notificações de @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Clique para adicionar nota", "alert.rate_limited.message": "Por favor tente novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Frequência limitada", @@ -168,9 +171,9 @@ "empty_column.notifications": "Nada aqui. Interaja com outros usuários para começar a conversar.", "empty_column.public": "Não há nada aqui! Escreva algo publicamente, ou siga manualmente usuários de outros servidores para enchê-la", "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou um problema de compatibilidade de navegador, esta página não pôde ser exibida corretamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se não resolver, você ainda pode conseguir usar o Mastodon por meio de um navegador ou app nativo diferente.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência", "errors.unexpected_crash.report_issue": "Denunciar problema", "follow_request.authorize": "Aprovar", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Qualquer uma destas", "hashtag.column_settings.tag_mode.none": "Nenhuma destas", "hashtag.column_settings.tag_toggle": "Incluir tags adicionais para esta coluna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Esconder anúncios", + "home.settings": "Column settings", "home.show_announcements": "Mostrar anúncios", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "para desfocar de área de texto de composição/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Compactar caixa de visualização de imagem", + "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -266,10 +272,10 @@ "lists.edit.submit": "Renomear", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Qualquer usuário seguido", + "lists.replies_policy.list_replies": "Membros da lista", + "lists.replies_policy.no_replies": "Ninguém", + "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", "load_pending": "{count, plural, one {# novo item} other {# novos items}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Esconder mídia", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Esse recurso não pôde ser encontrado", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Duração", "mute_modal.hide_notifications": "Ocultar notificações deste usuário?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicativos", "navigation_bar.blocks": "Usuários bloqueados", "navigation_bar.bookmarks": "Salvos", @@ -310,7 +316,7 @@ "notification.own_poll": "Sua enquete terminou", "notification.poll": "Uma enquete que você votou terminou", "notification.reblog": "{name} boostou seu status", - "notification.status": "{name} just posted", + "notification.status": "{name} acabou de postar", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", "notifications.column_settings.alert": "Notificações no computador", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.sound": "Tocar som", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Tudo", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguindo", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados de enquete", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Atualizações de pessoas que você segue", "notifications.group": "{count} notificações", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar todas as notificações como lidas", + "notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.", + "notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes", + "notifications_permission_banner.enable": "Habilitar notificações da área de trabalho", + "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.", + "notifications_permission_banner.title": "Nunca perca nada", + "picture_in_picture.restore": "Colocar de volta", "poll.closed": "Fechou", "poll.refresh": "Atualizar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Pesquisar toots por seu conteúdo não está ativado nesta instância Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderação para @{name}", "status.admin_status": "Abrir este status na interface de moderação", "status.block": "Bloquear @{name}", @@ -452,23 +459,23 @@ "units.short.million": "{count} mi", "units.short.thousand": "{count} mil", "upload_area.title": "Arraste & solte para fazer upload", - "upload_button.label": "Adicionar mídia ({formats})", + "upload_button.label": "Adicionar mídia", "upload_error.limit": "Limite de upload de arquivos excedido.", "upload_error.poll": "Não é possível fazer upload de arquivos com enquetes.", "upload_form.audio_description": "Descrever para pessoas com deficiência auditiva", "upload_form.description": "Descreva para deficientes visuais", "upload_form.edit": "Editar", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Alterar miniatura", "upload_form.undo": "Excluir", "upload_form.video_description": "Descreva para pessoas com deficiência auditiva ou visual", "upload_modal.analyzing_picture": "Analisando imagem…", "upload_modal.apply": "Aplicar", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Escolher imagem", "upload_modal.description_placeholder": "Um pequeno jabuti xereta viu dez cegonhas felizes", "upload_modal.detect_text": "Detectar texto da imagem", "upload_modal.edit_media": "Editar mídia", "upload_modal.hint": "Clique ou arraste o círculo na prévia para escolher o ponto focal que vai estar sempre visível em todas as thumbnails.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Prévia ({ratio})", "upload_progress.label": "Fazendo upload...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 17ab69216..5b794b87e 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -1,38 +1,40 @@ { - "account.account_note_header": "A sua nota para @{name}", + "account.account_note_header": "A tua nota para @{name}", "account.add_or_remove_from_list": "Adicionar ou remover das listas", - "account.badges.bot": "Robô", + "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo do domínio {domain}", - "account.blocked": "Bloqueado", - "account.browse_more_on_origin_server": "Encontre mais no perfil original", - "account.cancel_follow_request": "Cancelar pedido de seguidor", - "account.direct": "Mensagem directa @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domínio escondido", + "account.blocked": "Bloqueado(a)", + "account.browse_more_on_origin_server": "Encontrar mais no perfil original", + "account.cancel_follow_request": "Cancelar pedido para seguir", + "account.direct": "Enviar mensagem directa para @{name}", + "account.disable_notifications": "Parar de me notificar das publicações de @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Atributo no perfil", + "account.enable_notifications": "Notificar-me das publicações de @{name}", + "account.endorse": "Destacar no perfil", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Ainda ninguém segue este utilizador.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {A seguir {counter}}}", - "account.follows.empty": "Este utilizador ainda não segue alguém.", + "account.follows": "Follows", + "account.follows.empty": "Este utilizador ainda não segue ninguém.", "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.last_status": "Última atividade", "account.link_verified_on": "A posse deste link foi verificada em {date}", "account.locked_info": "O estatuto de privacidade desta conta é fechado. O dono revê manualmente quem a pode seguir.", - "account.media": "Media", + "account.media": "Média", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} mudou a sua conta para:", "account.mute": "Silenciar @{name}", "account.mute_notifications": "Silenciar notificações de @{name}", "account.muted": "Silenciada", "account.never_active": "Nunca", - "account.posts": "Publicações", + "account.posts": "Toots", "account.posts_with_replies": "Publicações e respostas", "account.report": "Denunciar @{name}", "account.requested": "A aguardar aprovação. Clique para cancelar o pedido de seguidor", @@ -45,6 +47,7 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Não silenciar @{name}", "account.unmute_notifications": "Deixar de silenciar @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Nenhum comentário fornecido", "alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.", "alert.rate_limited.title": "Limite de tentativas", @@ -168,9 +171,9 @@ "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", "errors.unexpected_crash.report_issue": "Reportar problema", "follow_request.authorize": "Autorizar", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Qualquer destes", "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Ocultar anúncios", + "home.settings": "Column settings", "home.show_announcements": "Exibir anúncios", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -206,9 +212,9 @@ "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Publicações públicas de outras instâncias do fediverso aparecerão na cronologia federada.", "introduction.federation.home.headline": "Início", - "introduction.federation.home.text": "As publicações das pessoas que você segue aparecerão na sua coluna de início. Você pode seguir qualquer pessoa em qualquer instância!", + "introduction.federation.home.text": "As publicações das pessoas que segues aparecerão na tua coluna de início. Podes seguir qualquer pessoa em qualquer instância!", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que você aparecerão na coluna local.", + "introduction.federation.local.text": "Publicações públicas de pessoas na mesma instância que tu aparecerão na coluna local.", "introduction.interactions.action": "Terminar o tutorial!", "introduction.interactions.favourite.headline": "Favorito", "introduction.interactions.favourite.text": "Podes guardar um toot para depois e deixar o autor saber que gostaste dele, marcando-o como favorito.", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Compactar caixa de visualização de imagem", + "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.view_context": "Ver contexto", @@ -266,10 +272,10 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Qualquer utilizador seguido", + "lists.replies_policy.list_replies": "Membros da lista", + "lists.replies_policy.no_replies": "Ninguém", + "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Alternar visibilidade", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Este recurso não foi encontrado", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Duração", "mute_modal.hide_notifications": "Esconder notificações deste utilizador?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Indefinidamente", "navigation_bar.apps": "Aplicações móveis", "navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.bookmarks": "Itens salvos", @@ -310,10 +316,10 @@ "notification.own_poll": "A sua votação terminou", "notification.poll": "Uma votação em que participaste chegou ao fim", "notification.reblog": "{name} partilhou a tua publicação", - "notification.status": "{name} just posted", + "notification.status": "{name} acabou de publicar", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", - "notifications.column_settings.alert": "Notificações no computador", + "notifications.column_settings.alert": "Notificações no ambiente de trabalho", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos", @@ -326,28 +332,28 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Novos toots:", "notifications.filter.all": "Todas", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Votações", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Atualizações de pessoas que você segue", "notifications.group": "{count} notificações", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Marcar todas as notificações como lidas", + "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", + "notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", + "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", + "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", + "notifications_permission_banner.title": "Nunca perca nada", + "picture_in_picture.restore": "Colocá-lo de volta", "poll.closed": "Fechado", "poll.refresh": "Recarregar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}", "poll.vote": "Votar", - "poll.voted": "Você votou nesta resposta", + "poll.voted": "Votaste nesta resposta", "poll_button.add_poll": "Adicionar votação", "poll_button.remove_poll": "Remover votação", "privacy.change": "Ajustar a privacidade da publicação", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "A pesquisa de toots pelo seu conteúdo não está disponível nesta instância Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_status": "Abrir esta publicação na interface de moderação", "status.block": "Bloquear @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}m", "upload_area.title": "Arraste e solte para enviar", - "upload_button.label": "Adicionar media ({formats})", + "upload_button.label": "Adicionar media", "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.", "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.", "upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Detectar texto na imagem", "upload_modal.edit_media": "Editar media", "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "A preparar OCR…", "upload_modal.preview_label": "Pré-visualizar ({ratio})", "upload_progress.label": "A enviar...", "video.close": "Fechar vídeo", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index dc1be7bc1..d3ade28f9 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Anulați cererea de urmărire", "account.direct": "Mesaj direct @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeniu blocat", "account.edit_profile": "Editați profilul", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Acest utilizator nu are încă urmăritori.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Acest utilizator nu urmărește pe nimeni încă.", "account.follows_you": "Te urmărește", "account.hide_reblogs": "Ascunde impulsurile de la @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Nu mai urmări", "account.unmute": "Nu mai ignora pe @{name}", "account.unmute_notifications": "Activează notificările de la @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Vă rugăm să reîncercați după {retry_time, time, medium}.", "alert.rate_limited.title": "Rată limitată", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Oricare din acestea", "hashtag.column_settings.tag_mode.none": "Niciuna din acestea", "hashtag.column_settings.tag_toggle": "Adaugă etichete adiționale pentru această coloană", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "De bază", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Arată impulsurile", "home.column_settings.show_replies": "Arată răspunsurile", "home.hide_announcements": "Ascundeți anunțurile", + "home.settings": "Column settings", "home.show_announcements": "Afișați anunțurile", "intervals.full.days": "{number, plural,one {# zi} other {# zile}}", "intervals.full.hours": "{number, plural, one {# oră} other {# ore}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Postări", "search_results.statuses_fts_disabled": "Căutarea de postări după conținutul lor nu este activată pe acest server.", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultate}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Deschide interfața de moderare pentru @{name}", "status.admin_status": "Deschide această stare în interfața de moderare", "status.block": "Blochează pe @{name}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index b0c5bc4cd..985e84dae 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Посмотреть их можно в оригинальном профиле", "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Отключить уведомления от @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен скрыт", "account.edit_profile": "Изменить профиль", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Включить уведомления для @{name}", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", "account.followers": "Подписаны", "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.followers_counter": "{count, plural, one {{counter} подписчик} many {{counter} подписчиков} other {{counter} подписчика}}", "account.following_counter": "{count, plural, one {{counter} подписка} many {{counter} подписок} other {{counter} подписки}}", + "account.follows": "Follows", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Отписаться", "account.unmute": "Не игнорировать @{name}", "account.unmute_notifications": "Показывать уведомления от @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Текст заметки", "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", "alert.rate_limited.title": "Вы выполняете действие слишком часто", @@ -98,7 +101,7 @@ "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.publish": "Запостить", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Отметить медиафайл как деликатный", + "compose_form.sensitive.hide": "Пометить медиафайл как чувствительный", "compose_form.sensitive.marked": "Медиафайл отмечен как деликатный", "compose_form.sensitive.unmarked": "Медиафайл не отмечен как деликатный", "compose_form.spoiler.marked": "Текст скрыт за предупреждением", @@ -168,9 +171,9 @@ "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Эта страница не может быть корректно отображена. Скорее всего, эта ошибка вызвана расширением браузера или инструментом автоматического перевода.", "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.", "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "follow_request.authorize": "Авторизовать", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основные", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", "home.hide_announcements": "Скрыть объявления", + "home.settings": "Column settings", "home.show_announcements": "Показать объявления", "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", @@ -266,10 +272,10 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Пользователям, на которых вы подписаны", + "lists.replies_policy.list_replies": "Пользователям в списке", + "lists.replies_policy.no_replies": "Никому", + "lists.replies_policy.title": "Показать ответы только:", "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Показать/скрыть", "missing_indicator.label": "Не найдено", "missing_indicator.sublabel": "Запрашиваемый ресурс не найден", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Продолжительность", "mute_modal.hide_notifications": "Скрыть уведомления от этого пользователя?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Не определена", "navigation_bar.apps": "Мобильные приложения", "navigation_bar.blocks": "Список блокировки", "navigation_bar.bookmarks": "Закладки", @@ -310,7 +316,7 @@ "notification.own_poll": "Ваш опрос закончился", "notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.reblog": "{name} продвинул(а) ваш пост", - "notification.status": "{name} just posted", + "notification.status": "{name} только что запостил", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.column_settings.alert": "Уведомления в фоне", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Ваш пост продвинули:", "notifications.column_settings.show": "Отображать в списке", "notifications.column_settings.sound": "Проигрывать звук", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Новые посты:", "notifications.filter.all": "Все", "notifications.filter.boosts": "Продвижения", "notifications.filter.favourites": "Отметки «избранного»", "notifications.filter.follows": "Подписки", "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", "notifications.group": "{count} уведомл.", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Отмечать все уведомления прочитанными", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "picture_in_picture.restore": "Вернуть обратно", "poll.closed": "Завершён", "poll.refresh": "Обновить", "poll.total_people": "{count, plural, one {# человек} few {# человека} many {# человек} other {# человек}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Посты", "search_results.statuses_fts_disabled": "Поиск постов по их содержанию не поддерживается данным узлом Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_status": "Открыть этот пост в интерфейсе модератора", "status.block": "Заблокировать @{name}", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Найти текст на картинке", "upload_modal.edit_media": "Изменить файл", "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Подготовка распознования…", "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "video.close": "Закрыть видео", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json new file mode 100644 index 000000000..9ab3aefd9 --- /dev/null +++ b/app/javascript/mastodon/locales/sa.json @@ -0,0 +1,491 @@ +{ + "account.account_note_header": "टीका", + "account.add_or_remove_from_list": "युज्यतां / नश्यतां सूच्याः", + "account.badges.bot": "यन्त्रम्", + "account.badges.group": "समूहः", + "account.block": "अवरुध्यताम् @{name}", + "account.block_domain": "अवरुध्यतां प्रदेशः {domain}", + "account.blocked": "अवरुद्धम्", + "account.browse_more_on_origin_server": "अधिकं मूलव्यक्तिगतविवरणे दृश्यताम्", + "account.cancel_follow_request": "अनुसरणानुरोधो नश्यताम्", + "account.direct": "प्रत्यक्षसन्देशः @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "प्रदेशो निषिद्धः", + "account.edit_profile": "सम्पाद्यताम्", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "व्यक्तिगतविवरणे वैशिष्ट्यम्", + "account.follow": "अनुस्रियताम्", + "account.followers": "अनुसर्तारः", + "account.followers.empty": "नाऽनुसर्तारो वर्तन्ते", + "account.followers_counter": "{count, plural, one {{counter} अनुसर्ता} two {{counter} अनुसर्तारौ} other {{counter} अनुसर्तारः}}", + "account.following_counter": "{count, plural, one {{counter} अनुसृतः} two {{counter} अनुसृतौ} other {{counter} अनुसृताः}}", + "account.follows": "Follows", + "account.follows.empty": "न कोऽप्यनुसृतो वर्तते", + "account.follows_you": "त्वामनुसरति", + "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्", + "account.last_status": "गतसक्रियता", + "account.link_verified_on": "अन्तर्जालस्थानस्यास्य स्वामित्वं परीक्षितमासीत् {date} दिने", + "account.locked_info": "एतस्या लेखायाः गुह्यता \"निषिद्ध\"इति वर्तते । स्वामी स्वयञ्चिनोति कोऽनुसर्ता भवितुमर्हतीति ।", + "account.media": "सामग्री", + "account.mention": "उल्लिख्यताम् @{name}", + "account.moved_to": "{name} अत्र प्रस्थापितम्:", + "account.mute": "निःशब्दम् @{name}", + "account.mute_notifications": "@{name} सूचनाः निष्क्रियन्ताम्", + "account.muted": "निःशब्दम्", + "account.never_active": "नैव कदापि", + "account.posts": "दौत्यानि", + "account.posts_with_replies": "दौत्यानि प्रत्युत्तराणि च", + "account.report": "आविद्यताम् @{name}", + "account.requested": "स्वीकृतिः प्रतीक्ष्यते । नश्यतामित्यस्मिन्नुद्यतां निराकर्तुम् ।", + "account.share": "@{name} मित्रस्य विवरणं विभाज्यताम्", + "account.show_reblogs": "@{name} मित्रस्य प्रकाशनानि दृश्यन्ताम्", + "account.statuses_counter": "{count, plural, one {{counter} दौत्यम्} two {{counter} दौत्ये} other {{counter} दौत्यानि}}", + "account.unblock": "निषेधता नश्यताम् @{name}", + "account.unblock_domain": "प्रदेशनिषेधता नश्यताम् {domain}", + "account.unendorse": "व्यक्तिगतविवरणे मा प्रकाश्यताम्", + "account.unfollow": "नश्यतामनुसरणम्", + "account.unmute": "सशब्दम् @{name}", + "account.unmute_notifications": "@{name} सूचनाः सक्रियन्ताम्", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "टीकायोजनार्थं नुद्यताम्", + "alert.rate_limited.message": "{retry_time, time, medium}. समयात् पश्चात् प्रयतताम्", + "alert.rate_limited.title": "सीमितगतिः", + "alert.unexpected.message": "अनपेक्षितदोषो जातः ।", + "alert.unexpected.title": "अरे !", + "announcement.announcement": "उद्घोषणा", + "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताहे", + "boost_modal.combo": "{combo} अत्र स्प्रष्टुं शक्यते, त्यक्तुमेतमन्यस्मिन् समये", + "bundle_column_error.body": "विषयस्याऽऽरोपणे कश्चिद्दोषो जातः", + "bundle_column_error.retry": "पुनः यतताम्", + "bundle_column_error.title": "जाले दोषः", + "bundle_modal_error.close": "पिधीयताम्", + "bundle_modal_error.message": "आरोपणे कश्चन दोषो जातः", + "bundle_modal_error.retry": "पुनः यतताम्", + "column.blocks": "निषिद्धभोक्तारः", + "column.bookmarks": "पुटचिह्नानि", + "column.community": "स्थानीयसमयतालिका", + "column.direct": "प्रत्यक्षसन्देशाः", + "column.directory": "व्यक्तित्वानि दृश्यन्ताम्", + "column.domain_blocks": "निषिद्धप्रदेशाः", + "column.favourites": "प्रियाः", + "column.follow_requests": "अनुसरणानुरोधाः", + "column.home": "गृहम्", + "column.lists": "सूचयः", + "column.mutes": "निःशब्दाः भोक्तारः", + "column.notifications": "सूचनाः", + "column.pins": "कीलितदौत्यानि", + "column.public": "सङ्घीयसमयतालिका", + "column_back_button.label": "पूर्वम्", + "column_header.hide_settings": "विन्यासाः छाद्यन्ताम्", + "column_header.moveLeft_settings": "स्तम्भो वामी क्रियताम्", + "column_header.moveRight_settings": "स्तम्भो दक्षिणी क्रियताम्", + "column_header.pin": "कीलयतु", + "column_header.show_settings": "विन्यासाः दृश्यन्ताम्", + "column_header.unpin": "कीलनं नाशय", + "column_subheading.settings": "विन्यासाः", + "community.column_settings.local_only": "केवलं स्थानीयम्", + "community.column_settings.media_only": "सामग्री केवलम्", + "community.column_settings.remote_only": "दर्गमः केवलम्", + "compose_form.direct_message_warning": "दौत्यमेतत्केवलमुल्लेखितजनानां कृते वर्तते", + "compose_form.direct_message_warning_learn_more": "अधिकं ज्ञायताम्", + "compose_form.hashtag_warning": "न कस्मिन्नपि प्रचलितवस्तुषु सूचितमिदं दौत्यम् । केवलं सार्वजनिकदौत्यानि प्रचलितवस्तुचिह्नेन अन्वेषयितुं शक्यते ।", + "compose_form.lock_disclaimer": "तव लेखा न प्रवेष्टुमशक्या {locked} । कोऽप्यनुसर्ता ते केवलमनुसर्तृृणां कृते स्थितानि दौत्यानि द्रष्टुं शक्नोति ।", + "compose_form.lock_disclaimer.lock": "अवरुद्धः", + "compose_form.placeholder": "मनसि ते किमस्ति?", + "compose_form.poll.add_option": "मतमपरं युज्यताम्", + "compose_form.poll.duration": "मतदान-समयावधिः", + "compose_form.poll.option_placeholder": "मतम् {number}", + "compose_form.poll.remove_option": "मतमेतन्नश्यताम्", + "compose_form.poll.switch_to_multiple": "मतदानं परिवर्तयित्वा बहुवैकल्पिकमतदानं क्रियताम्", + "compose_form.poll.switch_to_single": "मतदानं परिवर्तयित्वा निर्विकल्पमतदानं क्रियताम्", + "compose_form.publish": "दौत्यम्", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "संवेदनशीलसामग्रीत्यङ्यताम्", + "compose_form.sensitive.marked": "संवेदनशीलसामग्रीत्यङ्कितम्", + "compose_form.sensitive.unmarked": "संवेदनशीलसामग्रीति नाङ्कितम्", + "compose_form.spoiler.marked": "प्रच्छान्नाक्षरं विद्यते", + "compose_form.spoiler.unmarked": "अप्रच्छन्नाक्षरं विद्यते", + "compose_form.spoiler_placeholder": "प्रत्यादेशस्ते लिख्यताम्", + "confirmation_modal.cancel": "नश्यताम्", + "confirmations.block.block_and_report": "अवरुध्य आविद्यताम्", + "confirmations.block.confirm": "निषेधः", + "confirmations.block.message": "निश्चयेनाऽवरोधो विधेयः {name}?", + "confirmations.delete.confirm": "नश्यताम्", + "confirmations.delete.message": "निश्चयेन दौत्यमिदं नश्यताम्?", + "confirmations.delete_list.confirm": "नश्यताम्", + "confirmations.delete_list.message": "सूचिरियं निश्चयेन स्थायित्वेन च नश्यताम् वा?", + "confirmations.domain_block.confirm": "निषिद्धः प्रदेशः क्रियताम्", + "confirmations.domain_block.message": "नूनं निश्चयेनैव विनष्टुमिच्छति पूर्णप्रदेशमेव {domain} ? अधिकांशसन्दर्भेऽस्थायित्वेन निषेधता निःशब्दत्वञ्च पर्याप्तं चयनीयञ्च । न तस्मात् प्रदेशात्सर्वे विषया द्रष्टुमशक्याः किस्यांश्चिदपि सर्वजनिकसमयतालिकायां वा स्वीयसूचनापटले । सर्वेऽनुसर्तारस्ते प्रदेशात् ये सन्ति ते नश्यन्ते ।", + "confirmations.logout.confirm": "बहिर्गम्यताम्", + "confirmations.logout.message": "निश्चयेनैव बहिर्गमनं वाञ्छितम्?", + "confirmations.mute.confirm": "निःशब्दम्", + "confirmations.mute.explanation": "एतेन तेषां प्रकटनानि तथा च यत्र ते उल्लिखिताः तानि छाद्यन्ते, किन्त्वेवं सत्यपि ते त्वामनुसर्तुं ततश्च प्रकटनानि द्रष्टुं शक्नुवन्ति ।", + "confirmations.mute.message": "किं निश्चयेन निःशब्दं भवेत् {name} मित्रमेतत् ?", + "confirmations.redraft.confirm": "विनश्य पुनः लिख्यताम्", + "confirmations.redraft.message": "किं वा निश्चयेन नष्टुमिच्छसि दौत्यमेतत्तथा च पुनः लेखितुं? प्रकाशनानि प्रीतयश्च विनष्टा भविष्यन्ति, प्रत्युत्तराण्यपि नश्यन्ते ।", + "confirmations.reply.confirm": "उत्तरम्", + "confirmations.reply.message": "प्रत्युत्तरमिदानीं लिख्यते तर्हि पूर्वलिखितसन्देशं विनश्य पुनः लिख्यते । निश्चयेनैवं कर्तव्यम् ?", + "confirmations.unfollow.confirm": "अनुसरणं नश्यताम्", + "confirmations.unfollow.message": "निश्चयेनैवाऽनुसरणं नश्यतां {name} मित्रस्य?", + "conversation.delete": "वार्तालापो नश्यताम्", + "conversation.mark_as_read": "पठितमित्यङ्क्यताम्", + "conversation.open": "वार्तालापो दृश्यताम्", + "conversation.with": "{names} जनैः साकम्", + "directory.federated": "सुपरिचितं Fediverse इति स्थानात्", + "directory.local": "{domain} प्रदेशात्केवलम्", + "directory.new_arrivals": "नवामगमाः", + "directory.recently_active": "नातिपूर्वं सक्रियः", + "embed.instructions": "दौत्यमेतत् स्वीयजालस्थाने स्थापयितुमधो लिखितो विध्यादेशो युज्यताम्", + "embed.preview": "अत्रैवं दृश्यते तत्:", + "emoji_button.activity": "आचरणम्", + "emoji_button.custom": "स्वीयानुकूलम्", + "emoji_button.flags": "ध्वजाः", + "emoji_button.food": "भोजनं पेयञ्च", + "emoji_button.label": "भावचिह्नं युज्यताम्", + "emoji_button.nature": "प्रकृतिः", + "emoji_button.not_found": "न भावचिह्नानि (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "वस्तूनि", + "emoji_button.people": "जनाः", + "emoji_button.recent": "आधिक्येन प्रयुक्तम्", + "emoji_button.search": "अन्विष्यताम्...", + "emoji_button.search_results": "अन्वेषणपरिणामाः", + "emoji_button.symbols": "चिह्नानि", + "emoji_button.travel": "यात्रा च स्थानानि", + "empty_column.account_timeline": "न दौत्यान्यत्र", + "empty_column.account_unavailable": "व्यक्तित्वं न प्राप्यते", + "empty_column.blocks": "नैकोऽप्युपभोक्ता निषिद्धो वर्तते", + "empty_column.bookmarked_statuses": "नैकमपि पुटचिह्नयुक्तदौत्यानि सन्ति । यदा भविष्यति तदत्र दृश्यते ।", + "empty_column.community": "स्थानीयसमयतालिका रिक्ता । सार्वजनिकत्वेनाऽत्र किमपि लिख्यताम् ।", + "empty_column.direct": "नैकोऽपि प्रत्यक्षसन्देशो वर्तते । यदा प्रेष्यते वा प्राप्यतेऽत्र दृश्यते", + "empty_column.domain_blocks": "न निषिद्धप्रदेशाः सन्ति ।", + "empty_column.favourited_statuses": "न प्रियदौत्यानि सन्ति । यदा प्रीतिरित्यङ्क्यतेऽत्र दृश्यते ।", + "empty_column.favourites": "नैतद्दौत्यं प्रियमस्ति कस्मै अपि । यदा कस्मै प्रियं भवति तदाऽत्र दृश्यते ।", + "empty_column.follow_requests": "नाऽनुसरणानुरोधस्ते वर्तते । यदैको प्राप्यतेऽत्र दृश्यते ।", + "empty_column.hashtag": "नाऽस्मिन् प्रचलितवस्तुचिह्ने किमपि ।", + "empty_column.home": "गृहसमयतालिका रिक्ताऽस्ति । गम्यतां {public} वाऽन्वेषणैः प्रारभ्यतां मेलनं क्रियताञ्च ।", + "empty_column.home.public_timeline": "सार्वजनिकसमयतालिका", + "empty_column.list": "न किमपि वर्तते सूच्यामस्याम् । यदा सूच्याः सदस्या नवदौत्यानि प्रकटीकुर्वन्ति तदाऽत्राऽऽयान्ति ।", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", + "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 2e9ad8a8f..277f47ddc 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Agiunghe o boga dae is listas", "account.badges.bot": "Bot", "account.badges.group": "Grupu", @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Annulla rechesta de sighidura", "account.direct": "Messàgiu deretu a @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domìniu blocadu", "account.edit_profile": "Modìfica profilu", "account.enable_notifications": "Notify me when @{name} posts", @@ -18,7 +19,8 @@ "account.followers": "Sighiduras", "account.followers.empty": "Nemos sighit ancora custa persone.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.following_counter": "{count, plural, one {{counter} Sighidu} other {{counter} Sighidos}}", + "account.follows": "Follows", "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Non sigas prus", "account.unmute": "Torra a ativare @{name}", "account.unmute_notifications": "Ativa notìficas pro @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", @@ -60,7 +63,7 @@ "bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.", "bundle_modal_error.retry": "Torra·bi a proare", "column.blocks": "Persones blocadas", - "column.bookmarks": "Marcadores", + "column.bookmarks": "Sinnalibros", "column.community": "Lìnia de tempus locale", "column.direct": "Messàgios diretos", "column.directory": "Nàviga in is profilos", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Cale si siat de custos", "hashtag.column_settings.tag_mode.none": "Perunu de custos", "hashtag.column_settings.tag_toggle": "Include etichetas additzionales pro custa colunna", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsicu", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", + "home.settings": "Column settings", "home.show_announcements": "Ammustra annùntzios", "intervals.full.days": "{number, plural, one {# die} other {# die}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", @@ -248,7 +254,7 @@ "keyboard_shortcuts.search": "pro atzentrare sa chirca", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"", - "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is CW", + "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC", "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare mèdias", "keyboard_shortcuts.toot": "pro cumintzare a iscrìere unu tut nou", "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca", @@ -282,7 +288,7 @@ "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Aplicatziones mòbiles", "navigation_bar.blocks": "Persones blocadas", - "navigation_bar.bookmarks": "Marcadores", + "navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.community_timeline": "Lìnia de tempus locale", "navigation_bar.compose": "Cumpone unu tut nou", "navigation_bar.direct": "Messàgios diretos", @@ -363,7 +369,7 @@ "regeneration_indicator.label": "Carrighende…", "regeneration_indicator.sublabel": "Preparende sa lìnia de tempus printzipale tua.", "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.hours": "{number}o", "relative_time.just_now": "immoe", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", "search_results.total": "{count, number} {count, plurale, one {resurtadu} other {resurtados}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione", "status.block": "Bloca @{name}", @@ -413,7 +420,7 @@ "status.reblog": "Cumpartzi", "status.reblog_private": "Cumpartzi cun is utentes originales", "status.reblogged_by": "{name} at cumpartzidu", - "status.reblogs.empty": "No one has boosted this toot yet. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", + "status.reblogs.empty": "Nemos at ancora cumpartzidu custu tut. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", "status.redraft": "Cantzella e torra a iscrìere", "status.remove_bookmark": "Boga su marcadore", "status.reply": "Risponde", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Traga pro carrigare", - "upload_button.label": "Agiunghe mèdias ({formats})", + "upload_button.label": "Agiunghe mèdias", "upload_error.limit": "Lìmite de càrriga de archìvios barigadu.", "upload_error.poll": "Non si permitit s'imbiu de archìvios in is sondàgios.", "upload_form.audio_description": "Descritzione pro persones cun pèrdida auditiva", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 6e3e2eef5..af4703ee7 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Zruš žiadosť o sledovanie", "account.direct": "Priama správa pre @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Tohto používateľa ešte nikto nenásleduje.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", "account.follows_you": "Nasleduje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", @@ -45,7 +47,8 @@ "account.unfollow": "Prestaň následovať", "account.unmute": "Prestaň ignorovať @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klikni pre vloženie poznámky", "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", @@ -81,7 +84,7 @@ "column_header.show_settings": "Ukáž nastavenia", "column_header.unpin": "Odopni", "column_subheading.settings": "Nastavenia", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "Iba miestna", "community.column_settings.media_only": "Iba médiá", "community.column_settings.remote_only": "Remote only", "compose_form.direct_message_warning": "Tento príspevok bude boslaný iba spomenutým užívateľom.", @@ -176,7 +179,7 @@ "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "Uložené", "getting_started.developers": "Vývojári", "getting_started.directory": "Zoznam profilov", "getting_started.documentation": "Dokumentácia", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Základné", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", "home.hide_announcements": "Skry oboznámenia", + "home.settings": "Column settings", "home.show_announcements": "Ukáž oboznámenia", "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Príspevky", "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", @@ -442,9 +449,9 @@ "time_remaining.moments": "Ostáva už iba chviľka", "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "Sledujúci", + "timeline_hint.resources.follows": "Následuje", + "timeline_hint.resources.statuses": "Staršie príspevky", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", "trends.trending_now": "Teraz populárne", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index b73bfb322..4e011edb6 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Neposredno sporočilo @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Skrita domena", "account.edit_profile": "Uredi profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Nihče ne sledi temu uporabniku.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Ta uporabnik še ne sledi nikomur.", "account.follows_you": "Sledi tebi", "account.hide_reblogs": "Skrij spodbude od @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Prenehaj slediti", "account.unmute": "Odtišaj @{name}", "account.unmute_notifications": "Vklopi obvestila od @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Karkoli od naštetega", "hashtag.column_settings.tag_mode.none": "Nič od naštetega", "hashtag.column_settings.tag_toggle": "Za ta stolpec vključi dodatne oznake", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokaži spodbude", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Tuti", "search_results.statuses_fts_disabled": "Iskanje tutov po njihovi vsebini ni omogočeno na tem strežniku Mastodon.", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultatov}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Odpri vmesnik za moderiranje za @{name}", "status.admin_status": "Odpri status v vmesniku za moderiranje", "status.block": "Blokiraj @{name}", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Za pošiljanje povlecite in spustite", - "upload_button.label": "Dodaj medije ({formats})", + "upload_button.label": "Dodaj medije", "upload_error.limit": "Omejitev prenosa datoteke je presežena.", "upload_error.poll": "Prenos datoteke z anketami ni dovoljen.", "upload_form.audio_description": "Describe for people with hearing loss", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index eae860664..875636ca0 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "Shfletoni më tepër rreth profilit origjinal", "account.cancel_follow_request": "Anulo kërkesën e ndjekjes", "account.direct": "Mesazh i drejtpërdrejtë për @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Përkatësia u bllokua", "account.edit_profile": "Përpunoni profilin", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Njoftomë, kur poston @{name}", "account.endorse": "Pasqyrojeni në profil", "account.follow": "Ndiqeni", "account.followers": "Ndjekës", "account.followers.empty": "Këtë përdorues ende s’e ndjek njeri.", "account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}", "account.following_counter": "{count, plural, other {{counter} të Ndjekur}}", + "account.follows": "Follows", "account.follows.empty": "Ky përdorues ende s’ndjek njeri.", "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", @@ -45,12 +47,13 @@ "account.unfollow": "Resht së ndjekuri", "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "S’u dha koment", "alert.rate_limited.message": "Ju lutemi, riprovoni pas {retry_time, time, medium}.", "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", - "announcement.announcement": "Njoftime", + "announcement.announcement": "Njoftim", "autosuggest_hashtag.per_week": "{count} për javë", "boost_modal.combo": "Mund të shtypni {combo}, që kjo të anashkalohet herës tjetër", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", @@ -168,9 +171,9 @@ "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë", "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Kjo faqe s’u shfaq dot saktë. Ky gabim ka gjasa të jetë shkaktuar nga një shtesë shfletuesi ose një mjet përkthimi të automatizuar.", "error.unexpected_crash.next_steps": "Provoni të freskoni faqen. Nëse kjo s’bën punë, mundeni ende të jeni në gjendje të përdorni Mastodon-in që nga një shfletues tjetër ose nga ndonjë aplikacion origjinal prej projektit.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.", "errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër", "errors.unexpected_crash.report_issue": "Raportoni problemin", "follow_request.authorize": "Autorizoje", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Cilindo prej këtyre", "hashtag.column_settings.tag_mode.none": "Asnjë prej këtyre", "hashtag.column_settings.tag_toggle": "Përfshi etiketa shtesë për këtë shtyllë", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bazë", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", "home.hide_announcements": "Fshihi lajmërimet", + "home.settings": "Column settings", "home.show_announcements": "Shfaqi lajmërimet", "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}", "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Ngjeshe kuadratin e parjes së figurave", + "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", "lightbox.view_context": "Shihni kontekstin", @@ -266,10 +272,10 @@ "lists.edit.submit": "Ndryshoni titullin", "lists.new.create": "Shtoni listë", "lists.new.title_placeholder": "Titull liste të re", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Cilido përdorues i ndjekur", + "lists.replies_policy.list_replies": "Anëtarë të listës", + "lists.replies_policy.no_replies": "Askush", + "lists.replies_policy.title": "Shfaq përgjigje për:", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", "load_pending": "{count, plural,one {# objekt i ri }other {# objekte të rinj }}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "Fshihni {number, plural, one {figurë} other {figura}}", "missing_indicator.label": "S’u gjet", "missing_indicator.sublabel": "Ky burim s’u gjet dot", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Kohëzgjatje", "mute_modal.hide_notifications": "Të kalohen të fshehura njoftimet prej këtij përdoruesi?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "E pacaktuar", "navigation_bar.apps": "Aplikacione për celular", "navigation_bar.blocks": "Përdorues të bllokuar", "navigation_bar.bookmarks": "Faqerojtës", @@ -310,7 +316,7 @@ "notification.own_poll": "Pyetësori juaj ka përfunduar", "notification.poll": "Ka përfunduar një pyetësor ku keni votuar", "notification.reblog": "{name} përforcoi mesazhin tuaj", - "notification.status": "{name} just posted", + "notification.status": "{name} sapo postoi", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", "notifications.column_settings.alert": "Njoftime desktopi", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "Përforcime:", "notifications.column_settings.show": "Shfaq në shtylla", "notifications.column_settings.sound": "Luaj një tingull", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Mesazhe të rinj:", "notifications.filter.all": "Krejt", "notifications.filter.boosts": "Përforcime", "notifications.filter.favourites": "Të parapëlqyer", "notifications.filter.follows": "Ndjekje", "notifications.filter.mentions": "Përmendje", "notifications.filter.polls": "Përfundime pyetësori", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Përditësime prej personash që ndiqni", "notifications.group": "{count}s njoftime", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar", + "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.", + "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", + "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", + "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.", + "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", + "picture_in_picture.restore": "Ktheje ku qe", "poll.closed": "I mbyllur", "poll.refresh": "Rifreskoje", "poll.total_people": "{count, plural,one {# person }other {# vetë }}", @@ -387,6 +393,7 @@ "search_results.statuses": "Mesazhe", "search_results.statuses_fts_disabled": "Kërkimi i mesazheve sipas lëndës së tyre s’është i aktivizuar në këtë shërbyes Mastodon.", "search_results.total": "{count, number} {count, plural, one {përfundim} other {përfundime}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Hap ndërfaqe moderimi për @{name}", "status.admin_status": "Hape këtë mesazh te ndërfaqja e moderimit", "status.block": "Blloko @{name}", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "Pikase tekstin prej fotoje", "upload_modal.edit_media": "Përpunoni media", "upload_modal.hint": "Që të zgjidhni pikën vatrore e cila do të jetë përherë e dukshme në krejt miniaturat, klikojeni ose tërhiqeni rrethin te paraparja.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Po përgatitet OCR-ja…", "upload_modal.preview_label": "Paraparje ({ratio})", "upload_progress.label": "Po ngarkohet…", "video.close": "Mbylle videon", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 38fc9cdce..509a19caf 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Izmeni profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Otprati", "account.unmute": "Ukloni ućutkavanje korisniku @{name}", "account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Prikaži i podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezultat} few {rezultata} other {rezultata}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 8df81fae6..a08f8a7dc 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "Тренутно нико не прати овог корисника.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "Корисник тренутно не прати никога.", "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Отпрати", "account.unmute": "Уклони ућуткавање кориснику @{name}", "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Молимо покушајте поново после {retry_time, time, medium}.", "alert.rate_limited.title": "Ограничена брзина", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Било које од ових", "hashtag.column_settings.tag_mode.none": "Ништа од ових", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основно", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Прикажи и подржавања", "home.column_settings.show_replies": "Прикажи одговоре", "home.hide_announcements": "Сакриј најаве", + "home.settings": "Column settings", "home.show_announcements": "Пријажи најаве", "intervals.full.days": "{number, plural, one {# дан} other {# дана}}", "intervals.full.hours": "{number, plural, one {# сат} other {# сати}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Трубе", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Отвори модераторски интерфејс за @{name}", "status.admin_status": "Отвори овај статус у модераторском интерфејсу", "status.block": "Блокирај @{name}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 5c3f51dbe..bbcff66b0 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Anteckning", "account.add_or_remove_from_list": "Lägg till i eller ta bort från listor", "account.badges.bot": "Robot", "account.badges.group": "Grupp", "account.block": "Blockera @{name}", "account.block_domain": "Dölj allt från {domain}", "account.blocked": "Blockerad", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Läs mer på original profilen", "account.cancel_follow_request": "Avbryt följarförfrågan", "account.direct": "Skicka ett direktmeddelande till @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "Följ", "account.followers": "Följare", "account.followers.empty": "Ingen följer denna användare än.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Följare} other {{counter} Följare}}", + "account.following_counter": "{count, plural, one {{counter} Följer} other {{counter} Följer}}", + "account.follows": "Follows", "account.follows.empty": "Denna användare följer inte någon än.", "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", @@ -45,12 +47,13 @@ "account.unfollow": "Sluta följ", "account.unmute": "Sluta tysta @{name}", "account.unmute_notifications": "Återaktivera aviseringar från @{name}", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Klicka för att lägga till anteckning", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", - "announcement.announcement": "Announcement", + "announcement.announcement": "Meddelande", "autosuggest_hashtag.per_week": "{count} per vecka", "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", @@ -176,7 +179,7 @@ "follow_request.authorize": "Godkänn", "follow_request.reject": "Avvisa", "follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain} personalen att du kanske vill granska dessa följares förfrågningar manuellt.", - "generic.saved": "Saved", + "generic.saved": "Sparad", "getting_started.developers": "Utvecklare", "getting_started.directory": "Profilkatalog", "getting_started.documentation": "Dokumentation", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Någon av dessa", "hashtag.column_settings.tag_mode.none": "Ingen av dessa", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Grundläggande", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Visa knuffar", "home.column_settings.show_replies": "Visa svar", "home.hide_announcements": "Dölj notiser", + "home.settings": "Column settings", "home.show_announcements": "Visa notiser", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# timme} other {# timmar}}", @@ -240,13 +246,13 @@ "keyboard_shortcuts.muted": "för att öppna listan över tystade användare", "keyboard_shortcuts.my_profile": "för att öppna din profil", "keyboard_shortcuts.notifications": "för att öppna Meddelanden", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "öppna media", "keyboard_shortcuts.pinned": "för att öppna Nålade toots", "keyboard_shortcuts.profile": "för att öppna skaparens profil", "keyboard_shortcuts.reply": "för att svara", "keyboard_shortcuts.requests": "för att öppna Följförfrågningar", "keyboard_shortcuts.search": "för att fokusera sökfältet", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "visa/dölja CW-fält", "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen", "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW", "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", "status.admin_status": "Öppna denna status i modereringsgränssnittet", "status.block": "Blockera @{name}", @@ -441,11 +448,11 @@ "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar", "time_remaining.moments": "Återstående tillfällen", "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} från andra servrar visas inte.", + "timeline_hint.resources.followers": "Följare", + "timeline_hint.resources.follows": "Följer", + "timeline_hint.resources.statuses": "Äldre tutningar", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} pratar", "trends.trending_now": "Trendar nu", "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.", "units.short.billion": "{count}B", @@ -455,15 +462,15 @@ "upload_button.label": "Lägg till media", "upload_error.limit": "Filöverföringsgränsen överskriden.", "upload_error.poll": "Filuppladdning tillåts inte med omröstningar.", - "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.audio_description": "Beskriv för personer med hörselnedsättning", "upload_form.description": "Beskriv för synskadade", "upload_form.edit": "Redigera", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Ändra miniatyr", "upload_form.undo": "Ta bort", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", "upload_modal.analyzing_picture": "Analyserar bild…", "upload_modal.apply": "Verkställ", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Välj bild", "upload_modal.description_placeholder": "En snabb brun räv hoppar över den lata hunden", "upload_modal.detect_text": "Upptäck bildens text", "upload_modal.edit_media": "Redigera meida", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 17ffe5519..8e1e6c05b 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", @@ -470,7 +477,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", + "upload_progress.label": "Uploading...", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 8e8c6b9f7..6284895af 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "குறிப்பு", "account.add_or_remove_from_list": "பட்டியல்களில் சேர்/நீக்கு", "account.badges.bot": "பாட்", "account.badges.group": "குழு", "account.block": "@{name} -ஐத் தடு", "account.block_domain": "{domain} யில் இருந்து வரும் எல்லாவற்றையும் மறை", "account.blocked": "முடக்கப்பட்டது", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "மேலும் உலாவ சுயவிவரத்திற்குச் செல்க", "account.cancel_follow_request": "பின்தொடரும் கோரிக்கையை நிராகரி", "account.direct": "நேரடி செய்தி @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", "account.edit_profile": "சுயவிவரத்தை மாற்று", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "பின்தொடர்", "account.followers": "பின்தொடர்பவர்கள்", "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} வாசகர்} other {{counter} வாசகர்கள்}}", + "account.following_counter": "{count, plural,one {{counter} சந்தா} other {{counter} சந்தாக்கள்}}", + "account.follows": "Follows", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", @@ -38,14 +40,15 @@ "account.requested": "ஒப்புதலுக்காகக் காத்திருக்கிறது. பின்தொடரும் கோரிக்கையை நீக்க அழுத்தவும்", "account.share": "@{name} உடைய விவரத்தை பகிர்", "account.show_reblogs": "காட்டு boosts இருந்து @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} டூட்} other {{counter} டூட்டுகள்}}", "account.unblock": "@{name} மீது தடை நீக்குக", "account.unblock_domain": "{domain} ஐ காண்பி", "account.unendorse": "சுயவிவரத்தில் இடம்பெற வேண்டாம்", "account.unfollow": "பின்தொடர்வதை நிறுத்துக", "account.unmute": "@{name} இன் மீது மௌனத் தடையை நீக்குக", "account.unmute_notifications": "@{name} இலிருந்து அறிவிப்புகளின் மீது மௌனத் தடையை நீக்குக", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "குறிப்பு ஒன்றை சேர்க்க சொடுக்கவும்", "alert.rate_limited.message": "{retry_time, time, medium} க்கு பிறகு மீண்டும் முயற்சிக்கவும்.", "alert.rate_limited.title": "பயன்பாடு கட்டுப்படுத்தப்பட்டுள்ளது", "alert.unexpected.message": "எதிர்பாராத பிழை ஏற்பட்டுவிட்டது.", @@ -81,9 +84,9 @@ "column_header.show_settings": "அமைப்புகளைக் காட்டு", "column_header.unpin": "கழட்டு", "column_subheading.settings": "அமைப்புகள்", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "அருகிலிருந்து மட்டுமே", "community.column_settings.media_only": "படங்கள் மட்டுமே", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "தொலைவிலிருந்து மட்டுமே", "compose_form.direct_message_warning": "இந்த டூட் இதில் குறிப்பிடப்பட்டுள்ள பயனர்களுக்கு மட்டுமே அனுப்பப்படும்.", "compose_form.direct_message_warning_learn_more": "மேலும் அறிய", "compose_form.hashtag_warning": "இது ஒரு பட்டியலிடப்படாத டூட் என்பதால் எந்த ஹேஷ்டேகின் கீழும் வராது. ஹேஷ்டேகின் மூலம் பொதுவில் உள்ள டூட்டுகளை மட்டுமே தேட முடியும்.", @@ -129,7 +132,7 @@ "conversation.mark_as_read": "படிக்கபட்டதாகக் குறி", "conversation.open": "உரையாடலைக் காட்டு", "conversation.with": "{names} உடன்", - "directory.federated": "ஆலமரத்தின் அறியப்பட்டப் பகுதியிலிருந்து", + "directory.federated": "அறியப்பட்ட ஃபெடிவெர்சிலிருந்து", "directory.local": "{domain} களத்திலிருந்து மட்டும்", "directory.new_arrivals": "புதிய வரவு", "directory.recently_active": "சற்றுமுன் செயல்பாட்டில் இருந்தவர்கள்", @@ -141,7 +144,7 @@ "emoji_button.food": "உணவு மற்றும் பானம்", "emoji_button.label": "எமோஜியை உள்ளிடு", "emoji_button.nature": "இயற்கை", - "emoji_button.not_found": "வேண்டாம் எமோஜோஸ்! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "எமோஜிக்கள் இல்லை! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "பொருட்கள்", "emoji_button.people": "மக்கள்", "emoji_button.recent": "அடிக்கடி பயன்படுத்தப்படுபவை", @@ -149,90 +152,93 @@ "emoji_button.search_results": "தேடல் முடிவுகள்", "emoji_button.symbols": "குறியீடுகள்", "emoji_button.travel": "சுற்றுலா மற்றும் இடங்கள்", - "empty_column.account_timeline": "இல்லை toots இங்கே!", + "empty_column.account_timeline": "டூட்டுகள் ஏதும் இல்லை!", "empty_column.account_unavailable": "சுயவிவரம் கிடைக்கவில்லை", - "empty_column.blocks": "இதுவரை எந்த பயனர்களும் தடுக்கவில்லை.", + "empty_column.blocks": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", "empty_column.bookmarked_statuses": "உங்களிடம் அடையாளக்குறியிட்ட டூட்டுகள் எவையும் இல்லை. அடையாளக்குறியிட்ட பிறகு அவை இங்கே காட்டப்படும்.", - "empty_column.community": "உள்ளூர் காலக்கெடு காலியாக உள்ளது. பந்தை உருட்டிக்கொள்வதற்கு பகிரங்கமாக ஒன்றை எழுதுங்கள்!", - "empty_column.direct": "உங்களிடம் நேரடியான செய்திகள் எதுவும் இல்லை. நீங்கள் ஒன்றை அனுப்பி அல்லது பெறும் போது, அது இங்கே காண்பிக்கும்.", - "empty_column.domain_blocks": "இன்னும் மறைந்த களங்கள் இல்லை.", - "empty_column.favourited_statuses": "இதுவரை உங்களுக்கு பிடித்த டோட்டுகள் இல்லை. உங்களுக்கு பிடித்த ஒரு போது, அது இங்கே காண்பிக்கும்.", - "empty_column.favourites": "இதுவரை யாரும் இந்தத் தட்டுக்கு ஆதரவில்லை. யாராவது செய்தால், அவர்கள் இங்கே காண்பார்கள்.", - "empty_column.follow_requests": "உங்களுக்கு இன்னும் எந்தவொரு கோரிக்கைகளும் இல்லை. நீங்கள் ஒன்றைப் பெற்றுக்கொண்டால், அது இங்கே காண்பிக்கும்.", - "empty_column.hashtag": "இன்னும் இந்த ஹேஸ்டேக்கில் எதுவும் இல்லை.", - "empty_column.home": "உங்கள் வீட்டுக் காலம் காலியாக உள்ளது! வருகை {public} அல்லது தொடங்குவதற்கு தேடலைப் பயன்படுத்தலாம் மற்றும் பிற பயனர்களை சந்திக்கவும்.", - "empty_column.home.public_timeline": "பொது காலக்கெடு", - "empty_column.list": "இந்த பட்டியலில் இதுவரை எதுவும் இல்லை. இந்த பட்டியலின் உறுப்பினர்கள் புதிய நிலைகளை இடுகையிடுகையில், அவை இங்கே தோன்றும்.", - "empty_column.lists": "உங்களுக்கு இதுவரை எந்த பட்டியலும் இல்லை. நீங்கள் ஒன்றை உருவாக்கினால், அது இங்கே காண்பிக்கும்.", - "empty_column.mutes": "நீங்கள் இதுவரை எந்த பயனர்களையும் முடக்கியிருக்கவில்லை.", - "empty_column.notifications": "உங்களிடம் எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் தொடங்க பிறருடன் தொடர்புகொள்ளவும்.", - "empty_column.public": "இங்கே எதுவும் இல்லை! பகிரங்கமாக ஒன்றை எழுதவும் அல்லது மற்ற நிகழ்வுகளிலிருந்து பயனர்களை அதை நிரப்புவதற்கு கைமுறையாக பின்பற்றவும்", - "error.unexpected_crash.explanation": "மென்பொருள் பழுதுனாலோ அல்லது உங்கள் இணை உலாவியின் பொருந்தாதன்மையினாலோ இந்தப் பக்கத்தை சரியாகக் காண்பிக்க முடியவில்லை.", + "empty_column.community": "உங்கள் மாஸ்டடான் முச்சந்தியில் யாரும் இல்லை. எதையேனும் எழுதி ஆட்டத்தைத் துவக்குங்கள்!", + "empty_column.direct": "உங்கள் தனிப்பெட்டியில் செய்திகள் ஏதும் இல்லை. செய்தியை நீங்கள் அனுப்பும்போதோ அல்லது பெறும்போதோ, அது இங்கே காண்பிக்கப்படும்.", + "empty_column.domain_blocks": "தடுக்கப்பட்டக் களங்கள் இதுவரை இல்லை.", + "empty_column.favourited_statuses": "உங்களுக்குப் பிடித்த டூட்டுகள் இதுவரை இல்லை. ஒரு டூட்டில் நீங்கள் விருப்பக்குறி இட்டால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.favourites": "இந்த டூட்டில் இதுவரை யாரும் விருப்பக்குறி இடவில்லை. யாரேனும் விரும்பினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.follow_requests": "வாசகர் கோரிக்கைகள் இதுவரை ஏதும் இல்லை. யாரேனும் கோரிக்கையை அனுப்பினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.hashtag": "இந்த சிட்டையில் இதுவரை ஏதும் இல்லை.", + "empty_column.home": "உங்கள் மாஸ்டடான் வீட்டில் யாரும் இல்லை. {public} -இல் சென்று பார்க்கவும், அல்லது தேடல் கருவியைப் பயன்படுத்திப் பிற பயனர்களைக் கண்டடையவும்.", + "empty_column.home.public_timeline": "பொது டைம்லைன்", + "empty_column.list": "இந்தப் பட்டியலில் இதுவரை ஏதும் இல்லை. இப்பட்டியலின் உறுப்பினர்கள் புதிய டூட்டுகளை இட்டால். அவை இங்கே காண்பிக்கப்படும்.", + "empty_column.lists": "இதுவரை நீங்கள் எந்தப் பட்டியலையும் உருவாக்கவில்லை. உருவாக்கினால், அது இங்கே காண்பிக்கப்படும்.", + "empty_column.mutes": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", + "empty_column.notifications": "உங்களுக்காக எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் துவங்க பிறரைத் தொடர்புகொள்ளவும்.", + "empty_column.public": "இங்கு எதுவும் இல்லை! இவ்விடத்தை நிரப்ப எதையேனும் எழுதவும், அல்லது வேறு சர்வர்களில் உள்ள பயனர்களைப் பின்தொடரவும்", + "error.unexpected_crash.explanation": "இந்தப் பக்கத்தை சரியாகக் காண்பிக்க இயலவில்லை. மென்பொருளில் உள்ள பிழையோ அல்லது பொருந்தாத உலாவியோ காரணமாக இருக்கலாம்.", "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "பக்கத்தை புதுப்பித்துப் பார்க்கவும். வேலை செய்யவில்லையெனில், வேறு ஒரு உலாவியில் இருந்தோ அல்லது உங்கள் கருவிக்கு பொருத்தமான வேறு செயலியில் இருந்தோ மச்டோடனைப் பயன்படுத்தவும்.", + "error.unexpected_crash.next_steps": "பக்கத்தைப் புதுப்பித்துப் பார்க்கவும். அப்படியும் வேலை செய்யவில்லை எனில், மாஸ்டடானை வேறு ஒரு உலாவியின் மூலமோ, அல்லது பொருத்தமான செயலியின் மூலமோ பயன்படுத்திப் பார்க்கவும்.", "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "பழுசெய்தியை பிடிப்புப் பலகைக்கு நகல் எடு", + "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", - "follow_request.authorize": "அதிகாரமளி", - "follow_request.reject": "விலக்கு", + "follow_request.authorize": "அனுமதியளி", + "follow_request.reject": "நிராகரி", "follow_requests.unlocked_explanation": "உங்கள் கணக்கு பூட்டப்படவில்லை என்றாலும், இந்தக் கணக்குகளிலிருந்து உங்களைப் பின்தொடர விரும்பும் கோரிக்கைகளை நீங்கள் பரீசீலிப்பது நலம் என்று {domain} ஊழியர் எண்ணுகிறார்.", - "generic.saved": "Saved", + "generic.saved": "சேமிக்கப்பட்டது", "getting_started.developers": "உருவாக்குநர்கள்", - "getting_started.directory": "சுயவிவர அடைவு", + "getting_started.directory": "பயனர்கள்", "getting_started.documentation": "ஆவணங்கள்", - "getting_started.heading": "தொடங்குதல்", - "getting_started.invite": "நபர்களை அழைக்கவும்", - "getting_started.open_source_notice": "Mastodon திறந்த மூல மென்பொருள். GitHub இல் நீங்கள் பங்களிக்கவோ அல்லது புகார் அளிக்கவோ முடியும் {github}.", - "getting_started.security": "பத்திரம்", + "getting_started.heading": "முதன்மைப் பக்கம்", + "getting_started.invite": "நண்பர்களை அழைக்க", + "getting_started.open_source_notice": "மாஸ்டடான் ஒரு open source மென்பொருள் ஆகும். {github} -இன் மூலம் உங்களால் இதில் பங்களிக்கவோ, சிக்கல்களைத் தெரியப்படுத்தவோ முடியும்.", + "getting_started.security": "கணக்கு அமைப்புகள்", "getting_started.terms": "சேவை விதிமுறைகள்", "hashtag.column_header.tag_mode.all": "மற்றும் {additional}", "hashtag.column_header.tag_mode.any": "அல்லது {additional}", - "hashtag.column_header.tag_mode.none": "இல்லாமல் {additional}", - "hashtag.column_settings.select.no_options_message": "பரிந்துரைகள் எதுவும் இல்லை", - "hashtag.column_settings.select.placeholder": "ஹாஷ்டேகுகளை உள்ளிடவும் …", + "hashtag.column_header.tag_mode.none": "{additional} தவிர்த்து", + "hashtag.column_settings.select.no_options_message": "பரிந்துரைகள் ஏதும் இல்லை", + "hashtag.column_settings.select.placeholder": "சிட்டைகளை உள்ளிடவும்…", "hashtag.column_settings.tag_mode.all": "இவை அனைத்தும்", - "hashtag.column_settings.tag_mode.any": "இவை எதையும்", + "hashtag.column_settings.tag_mode.any": "இவற்றில் எவையேனும்", "hashtag.column_settings.tag_mode.none": "இவற்றில் ஏதுமில்லை", - "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் குறிச்சொற்களை சேர்க்கவும்", - "home.column_settings.basic": "அடிப்படையான", - "home.column_settings.show_reblogs": "காட்டு boosts", - "home.column_settings.show_replies": "பதில்களைக் காண்பி", + "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் சிட்டைகளைச் சேர்க்கவும்", + "home.column_settings.advanced": "Advanced", + "home.column_settings.basic": "அடிப்படையானவை", + "home.column_settings.filter_regex": "Filter out by regular expressions", + "home.column_settings.show_reblogs": "பகிர்வுகளைக் காண்பி", + "home.column_settings.show_replies": "மறுமொழிகளைக் காண்பி", "home.hide_announcements": "அறிவிப்புகளை மறை", + "home.settings": "Column settings", "home.show_announcements": "அறிவிப்புகளைக் காட்டு", - "intervals.full.days": "{number, plural, one {# day} மற்ற {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} மற்ற {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} மற்ற {# minutes}}", - "introduction.federation.action": "அடுத்த", + "intervals.full.days": "{number, plural, one {# நாள்} other {# நாட்கள்}}", + "intervals.full.hours": "{number, plural, one {# மணிநேரம்} other {# மணிநேரங்கள்}}", + "intervals.full.minutes": "{number, plural, one {# நிமிடம்} other {# நிமிடங்கள்}}", + "introduction.federation.action": "அடுத்து", "introduction.federation.federated.headline": "கூட்டமைந்த", - "introduction.federation.federated.text": "கூட்டமைப்பின் பிற சேவையகங்களிலிருந்து பொது பதிவுகள் கூட்டப்பட்ட காலக்கெடுவில் தோன்றும்.", + "introduction.federation.federated.text": "ஃபெடிவெர்சின் மற்ற சர்வர்களிலிருந்து இடப்படும் பொதுப் பதிவுகள் இந்த மாஸ்டடான் ஆலமரத்தில் தோன்றும்.", "introduction.federation.home.headline": "முகப்பு", - "introduction.federation.home.text": "நீங்கள் பின்பற்றும் நபர்களின் இடுகைகள் உங்கள் வீட்டு ஊட்டத்தில் தோன்றும். நீங்கள் எந்த சர்வரில் யாரையும் பின்பற்ற முடியும்!", + "introduction.federation.home.text": "நீங்கள் பின்தொடரும் நபர்களின் இடுகைகள் உங்கள் மாஸ்டடான் வீட்டில் தோன்றும். உங்களால் எந்த சர்வரில் உள்ள எவரையும் பின்பற்ற முடியும்!", "introduction.federation.local.headline": "அருகாமை", - "introduction.federation.local.text": "உள்ளூர் சேவையகத்தில் தோன்றும் அதே சர்வரில் உள்ளவர்களின் பொது இடுகைகள்.", - "introduction.interactions.action": "பயிற்சி முடிக்க!", - "introduction.interactions.favourite.headline": "விருப்பத்துக்குகந்த", - "introduction.interactions.favourite.text": "நீங்கள் ஒரு காப்பாற்ற முடியும் toot பின்னர், மற்றும் ஆசிரியர் அதை நீங்கள் பிடித்திருக்கிறது என்று, அதை பிடித்திருக்கிறது என்று தெரியப்படுத்துங்கள்.", - "introduction.interactions.reblog.headline": "மதிப்பை உயர்த்து", - "introduction.interactions.reblog.text": "மற்றவர்களின் பகிர்ந்து கொள்ளலாம் toots உங்கள் ஆதரவாளர்களுடன் அவர்களை அதிகரிக்கும்.", - "introduction.interactions.reply.headline": "மறுமொழி கூறு", - "introduction.interactions.reply.text": "நீங்கள் மற்றவர்களுக்கும் உங்கள் சொந்த டோட்ட்களிற்கும் பதிலளிப்பீர்கள், இது ஒரு உரையாடலில் சங்கிலி ஒன்றாகச் சேரும்.", - "introduction.welcome.action": "போகலாம்!", - "introduction.welcome.headline": "முதல் படிகள்", - "introduction.welcome.text": "கூட்டாளிக்கு வருக! ஒரு சில நிமிடங்களில், பலவிதமான சேவையகங்களில் செய்திகளை உரையாட மற்றும் உங்கள் நண்பர்களிடம் பேச முடியும். ஆனால் இந்த சர்வர், {domain}, சிறப்பு - இது உங்கள் சுயவிவரத்தை வழங்குகிறது, எனவே அதன் பெயரை நினைவில் கொள்ளுங்கள்.", - "keyboard_shortcuts.back": "பின் செல்வதற்கு", - "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்களின் பட்டியலைத் திறக்க", - "keyboard_shortcuts.boost": "அதிகரிக்கும்", - "keyboard_shortcuts.column": "நெடுவரிசைகளில் ஒன்றில் நிலைக்கு கவனம் செலுத்த வேண்டும்", - "keyboard_shortcuts.compose": "தொகு உரைப்பகுதியை கவனத்தில் கொள்ளவும்", + "introduction.federation.local.text": "உங்கள் சர்வரில் இருக்கும் மற்ற நபர்களின் பொதுப் பதிவுகள் இந்த மாஸ்டடான் முச்சந்தியில் தோன்றும்.", + "introduction.interactions.action": "பயிற்சியை நிறைவு செய்!", + "introduction.interactions.favourite.headline": "விருப்பம்", + "introduction.interactions.favourite.text": "ஒரு டூட்டில் விருப்பக்குறி இடுவதன் மூலம் உங்கள் விருப்பத்தை அதை எழுதியவருக்குத் தெரியப்படுத்த முடியும், மேலும் அந்த டூட்டை மறுவாசிப்பிற்காக சேமிக்கமுடியும்.", + "introduction.interactions.reblog.headline": "பகிர்", + "introduction.interactions.reblog.text": "மற்றவர்களின் டூட்டுகளைப் பகிர்வதன் மூலம் அவற்றை உங்கள் வாசகர்களுக்குக் காண்பிக்க முடியும்.", + "introduction.interactions.reply.headline": "மறுமொழி", + "introduction.interactions.reply.text": "உங்களால் மற்றவர்களின் டூட்டுகளிலும் உங்கள் டூட்டுகளிலும் மறுமொழி இட முடியும். அவை ஒன்றோடு ஒன்றாக சங்கிலிபோல் பின்னப்பட்டு உரையாடலாக மாறும்.", + "introduction.welcome.action": "வாருங்கள் துவங்கலாம்!", + "introduction.welcome.headline": "முதற்படிகள்", + "introduction.welcome.text": "ஃபெடிவெர்ஸ் உங்களை அன்புடன் வரவேற்கிறது! இன்னும் சில நிமிடங்களில் உங்களால் செய்திகளை உலகிற்குச் சொல்லமுடியும். பல்வேறு சர்வர்களில் இருக்கும் உங்கள் நண்பர்களோடு பேச முடியும். ஆனால், இந்த சர்வர் {domain} மிகவும் தனித்துவமானது, ஏனெனில் உங்கள் பக்கத்தை இதுதான் வழங்குகிறது, எனவே இதன் பெயரை நினைவில் கொள்ளுங்கள்.", + "keyboard_shortcuts.back": "பின் செல்ல", + "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்கள் பட்டியலைத் திறக்க", + "keyboard_shortcuts.boost": "பகிர", + "keyboard_shortcuts.column": "ஏதேனும் ஒரு நெடுவரிசையில் உள்ள டூட்டுல் கவனம் செலுத்த", + "keyboard_shortcuts.compose": "பதிவு எழுதும் பெட்டியில் கவனம் செலுத்த", "keyboard_shortcuts.description": "விவரம்", - "keyboard_shortcuts.direct": "நேரடி செய்திகள் பத்தி திறக்க", - "keyboard_shortcuts.down": "பட்டியலில் கீழே நகர்த்த", - "keyboard_shortcuts.enter": "பதிவைத்திறக்க", - "keyboard_shortcuts.favourite": "பிடித்தது", - "keyboard_shortcuts.favourites": "பிடித்தவை பட்டியலை திறக்க", - "keyboard_shortcuts.federated": "ஒருங்கிணைந்த நேரத்தை திறக்க", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "வீட்டு நேரத்தை திறக்க", + "keyboard_shortcuts.direct": "தனிப்பெட்டியைத் திறக்க", + "keyboard_shortcuts.down": "பட்டியலின் கீழே செல்ல", + "keyboard_shortcuts.enter": "டூட்டைத் திறக்க", + "keyboard_shortcuts.favourite": "விருப்பக்குறி இட", + "keyboard_shortcuts.favourites": "விருப்பப் பட்டியலைத் திறக்க", + "keyboard_shortcuts.federated": "மாஸ்டடான் ஆலமரத்தைத் திறக்க", + "keyboard_shortcuts.heading": "விசைப்பலகை குறுக்குவழிகள்", + "keyboard_shortcuts.home": "மாஸ்டடான் வீட்டைத் திறக்க", "keyboard_shortcuts.hotkey": "ஹாட் கீ", "keyboard_shortcuts.legend": "இந்த புராணத்தை காட்சிப்படுத்த", "keyboard_shortcuts.local": "உள்ளூர் காலவரிசை திறக்க", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "பதிலளிக்க", "keyboard_shortcuts.requests": "கோரிக்கைகள் பட்டியலைத் திறக்க", "keyboard_shortcuts.search": "தேடல் கவனம் செலுத்த", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "உள்ளடக்க எச்சரிக்கை செய்தியைக் காட்ட/மறைக்க", "keyboard_shortcuts.start": "'தொடங்குவதற்கு' நெடுவரிசை திறக்க", "keyboard_shortcuts.toggle_hidden": "CW க்கு பின்னால் உரையை மறைக்க / மறைக்க", "keyboard_shortcuts.toggle_sensitivity": "படிமங்களைக் காட்ட/மறைக்க", @@ -387,6 +393,7 @@ "search_results.statuses": "டூட்டுகள்", "search_results.statuses_fts_disabled": "டூட்டுகளின் வார்த்தைகளைக்கொண்டு தேடுவது இந்த மச்டோடன் வழங்கியில் இயல்விக்கப்படவில்லை.", "search_results.total": "{count, number} {count, plural, one {result} மற்ற {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "மிதமான இடைமுகத்தை திறக்க @{name}", "status.admin_status": "மிதமான இடைமுகத்தில் இந்த நிலையை திறக்கவும்", "status.block": "@{name} -ஐத் தடு", @@ -441,11 +448,11 @@ "time_remaining.minutes": "{number, plural, one {# minute} மற்ற {# minutes}} left", "time_remaining.moments": "தருணங்கள் மீதமுள்ளன", "time_remaining.seconds": "{number, plural, one {# second} மற்ற {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "பிற சர்வர்களிலிருந்து வரும் {resource} காட்டப்படவில்லை.", + "timeline_hint.resources.followers": "வாசகர்கள்", + "timeline_hint.resources.follows": "வாசிக்கிறார்", + "timeline_hint.resources.statuses": "பழைய டூட்டுகள்", + "trends.counter_by_accounts": "{count, plural, one {{counter} நபர்} other {{counter} நபர்கள்}} உரையாடலில்", "trends.trending_now": "இப்போது செல்திசையில் இருப்பவை", "ui.beforeunload": "நீங்கள் வெளியே சென்றால் உங்கள் வரைவு இழக்கப்படும் மஸ்தோடோன்.", "units.short.billion": "{count}B", @@ -458,12 +465,12 @@ "upload_form.audio_description": "செவித்திறன் குறைபாடு உள்ளவர்களுக்காக விளக்குக‌", "upload_form.description": "பார்வையற்ற விவரிக்கவும்", "upload_form.edit": "தொகு", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "சிறுபடத்தை மாற்ற", "upload_form.undo": "நீக்கு", "upload_form.video_description": "செவித்திறன் மற்றும் பார்வைக் குறைபாடு உள்ளவர்களுக்காக விளக்குக‌", "upload_modal.analyzing_picture": "படம் ஆராயப்படுகிறது…", "upload_modal.apply": "உபயோகி", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "படத்தைத் தேர்வுசெய்ய", "upload_modal.description_placeholder": "பொருள் விளக்கம்", "upload_modal.detect_text": "படத்தில் இருக்கும் எழுத்தை கண்டறி", "upload_modal.edit_media": "படத்தைத் தொகு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 17ffe5519..8e1e6c05b 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", @@ -470,7 +477,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", + "upload_progress.label": "Uploading...", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 84e73f7e5..cefd010d1 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "@{name}కు నేరుగా సందేశం పంపు", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది", "account.edit_profile": "ప్రొఫైల్ని సవరించండి", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "ఈ వినియోగదారుడిని ఇంకా ఎవరూ అనుసరించడంలేదు.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.", "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", @@ -45,6 +47,7 @@ "account.unfollow": "అనుసరించవద్దు", "account.unmute": "@{name}పై మ్యూట్ ని తొలగించు", "account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "వీటిలో ఏవైనా", "hashtag.column_settings.tag_mode.none": "ఇవేవీ కావు", "hashtag.column_settings.tag_toggle": "ఈ నిలువు వరుసలో మరికొన్ని ట్యాగులను చేర్చండి", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "ప్రాథమిక", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు", "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "టూట్లు", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు", "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి", "status.block": "@{name} ను బ్లాక్ చేయి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 2715c5faa..615fe7998 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "เรียกดูเพิ่มเติมในโปรไฟล์ดั้งเดิม", "account.cancel_follow_request": "ยกเลิกคำขอติดตาม", "account.direct": "ส่งข้อความโดยตรงถึง @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ปิดกั้นโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์", "account.endorse": "แสดงให้เห็นในโปรไฟล์", "account.follow": "ติดตาม", "account.followers": "ผู้ติดตาม", "account.followers.empty": "ยังไม่มีใครติดตามผู้ใช้นี้", "account.followers_counter": "{count, plural, other {{counter} ผู้ติดตาม}}", "account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}", + "account.follows": "Follows", "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร", "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "เลิกติดตาม", "account.unmute": "เลิกซ่อน @{name}", "account.unmute_notifications": "เลิกซ่อนการแจ้งเตือนจาก @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "คลิกเพื่อเพิ่มหมายเหตุ", "alert.rate_limited.message": "โปรดลองใหม่หลังจาก {retry_time, time, medium}", "alert.rate_limited.title": "มีการจำกัดอัตรา", @@ -168,9 +171,9 @@ "empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา", "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม", "error.unexpected_crash.explanation": "เนื่องจากข้อบกพร่องในโค้ดของเราหรือปัญหาความเข้ากันได้ของเบราว์เซอร์ จึงไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "ไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง ข้อผิดพลาดนี้เป็นไปได้ว่าเกิดจากส่วนเสริมของเบราว์เซอร์หรือเครื่องมือการแปลอัตโนมัติ", "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "follow_request.authorize": "อนุญาต", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "พื้นฐาน", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", "home.hide_announcements": "ซ่อนประกาศ", + "home.settings": "Column settings", "home.show_announcements": "แสดงประกาศ", "intervals.full.days": "{number, plural, other {# วัน}}", "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "เพื่อเลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "เพื่อย้ายขึ้นในรายการ", "lightbox.close": "ปิด", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "บีบอัดกล่องดูภาพ", + "lightbox.expand": "ขยายกล่องดูภาพ", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "lightbox.view_context": "ดูบริบท", @@ -266,10 +272,10 @@ "lists.edit.submit": "เปลี่ยนชื่อเรื่อง", "lists.new.create": "เพิ่มรายการ", "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "ผู้ใช้ใด ๆ ที่ติดตาม", + "lists.replies_policy.list_replies": "สมาชิกของรายการ", + "lists.replies_policy.no_replies": "ไม่มีใคร", + "lists.replies_policy.title": "แสดงการตอบกลับแก่:", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", "load_pending": "{count, plural, other {# รายการใหม่}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "ซ่อน{number, plural, other {ภาพ}}", "missing_indicator.label": "ไม่พบ", "missing_indicator.sublabel": "ไม่พบทรัพยากรนี้", - "mute_modal.duration": "Duration", + "mute_modal.duration": "ระยะเวลา", "mute_modal.hide_notifications": "ซ่อนการแจ้งเตือนจากผู้ใช้นี้?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "ไม่มีกำหนด", "navigation_bar.apps": "แอปมือถือ", "navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "navigation_bar.bookmarks": "ที่คั่นหน้า", @@ -310,7 +316,7 @@ "notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว", "notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.reblog": "{name} ได้ดันโพสต์ของคุณ", - "notification.status": "{name} just posted", + "notification.status": "{name} เพิ่งโพสต์", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "การดัน:", "notifications.column_settings.show": "แสดงในคอลัมน์", "notifications.column_settings.sound": "เล่นเสียง", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "โพสต์ใหม่:", "notifications.filter.all": "ทั้งหมด", "notifications.filter.boosts": "การดัน", "notifications.filter.favourites": "รายการโปรด", "notifications.filter.follows": "การติดตาม", "notifications.filter.mentions": "การกล่าวถึง", "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "การอัปเดตจากผู้คนที่คุณติดตาม", "notifications.group": "{count} การแจ้งเตือน", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "ทำเครื่องหมายทุกการแจ้งเตือนว่าอ่านแล้ว", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "ไม่พลาดสิ่งต่าง ๆ", + "picture_in_picture.restore": "นำกลับมา", "poll.closed": "ปิดแล้ว", "poll.refresh": "รีเฟรช", "poll.total_people": "{count, plural, other {# คน}}", @@ -387,6 +393,7 @@ "search_results.statuses": "โพสต์", "search_results.statuses_fts_disabled": "ไม่มีการเปิดใช้งานการค้นหาโพสต์โดยเนื้อหาของโพสต์ในเซิร์ฟเวอร์ Mastodon นี้", "search_results.total": "{count, number} {count, plural, other {ผลลัพธ์}}", + "standalone.public_title": "A look inside...", "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม", "status.block": "ปิดกั้น @{name}", @@ -411,7 +418,7 @@ "status.pinned": "โพสต์ที่ปักหมุด", "status.read_more": "อ่านเพิ่มเติม", "status.reblog": "ดัน", - "status.reblog_private": "ดันไปยังผู้ชมดั้งเดิม", + "status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม", "status.reblogged_by": "{name} ได้ดัน", "status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่", "status.redraft": "ลบแล้วร่างใหม่", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "ตรวจหาข้อความจากรูปภาพ", "upload_modal.edit_media": "แก้ไขสื่อ", "upload_modal.hint": "คลิกหรือลากวงกลมในตัวอย่างเพื่อเลือกจุดโฟกัส ซึ่งจะอยู่ในมุมมองของภาพขนาดย่อทั้งหมดเสมอ", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "กำลังเตรียม OCR…", "upload_modal.preview_label": "ตัวอย่าง ({ratio})", "upload_progress.label": "กำลังอัปโหลด...", "video.close": "ปิดวิดีโอ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 09dfd3396..47ce6f83f 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -1,32 +1,32 @@ { - "account.account_note_header": "@{name} için notunuz", + "account.account_note_header": "Not", "account.add_or_remove_from_list": "Listelere ekle veya kaldır", "account.badges.bot": "Bot", "account.badges.group": "Grup", "account.block": "@{name} adlı kişiyi engelle", - "account.block_domain": "{domain} alanından her şeyi gizle", - "account.blocked": "Engellenmiş", + "account.block_domain": "{domain} alan adını engelle", + "account.blocked": "Engellendi", "account.browse_more_on_origin_server": "Orijinal profilde daha fazlasına göz atın", "account.cancel_follow_request": "Takip isteğini iptal et", - "account.direct": "Mesaj gönder @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Alan adı gizlendi", + "account.direct": "@{name} adlı kişiye mesaj gönder", + "account.disable_notifications": "@{name} gönderi yaptığında bana bildirmeyi durdur", + "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "@{name} gönderi yaptığında bana bildir", "account.endorse": "Profildeki özellik", "account.follow": "Takip et", "account.followers": "Takipçi", "account.followers.empty": "Henüz kimse bu kullanıcıyı takip etmiyor.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Takipçi} other {{counter} Takipçi}}", + "account.following_counter": "{count, plural, one {{counter} Takip Edilen} other {{counter} Takip Edilen}}", "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", - "account.hide_reblogs": "@{name} kişisinin yinelemelerini gizle", - "account.last_status": "Son aktivite", + "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", + "account.last_status": "Son etkinlik", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceliyor.", "account.media": "Medya", - "account.mention": "@{name} kullanıcısından bahset", + "account.mention": "@{name} kişisinden bahset", "account.moved_to": "{name} şuraya taşındı:", "account.mute": "@{name} adlı kişiyi sessize al", "account.mute_notifications": "@{name} adlı kişinin bildirimlerini kapat", @@ -35,18 +35,18 @@ "account.posts": "Toot", "account.posts_with_replies": "Tootlar ve cevaplar", "account.report": "@{name} adlı kişiyi bildir", - "account.requested": "Onay Bekleniyor. Takip isteğini iptal etmek için tıklayın", - "account.share": "@{name} kullanıcısının profilini paylaş", - "account.show_reblogs": "@{name} kullanıcısının yinelemelerini göster", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın", + "account.share": "@{name} adlı kişinin profilini paylaş", + "account.show_reblogs": "@{name} kişisinin boostlarını göster", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", - "account.unblock_domain": "{domain} göster", - "account.unendorse": "Profilde özellik yok", + "account.unblock_domain": "{domain} alan adının engelini kaldır", + "account.unendorse": "Profilde gösterme", "account.unfollow": "Takibi bırak", "account.unmute": "@{name} adlı kişinin sesini aç", "account.unmute_notifications": "@{name} adlı kişinin bildirimlerini aç", - "account_note.placeholder": "Yorum yapılmamış", - "alert.rate_limited.message": "Lütfen sonra tekrar deneyin {retry_time, time, medium}.", + "account_note.placeholder": "Not eklemek için tıklayın", + "alert.rate_limited.message": "Lütfen {retry_time, time, medium} süresinden sonra tekrar deneyin.", "alert.rate_limited.title": "Oran sınırlıdır", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", @@ -60,16 +60,16 @@ "bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_modal_error.retry": "Tekrar deneyin", "column.blocks": "Engellenen kullanıcılar", - "column.bookmarks": "Yer imleri", + "column.bookmarks": "Yer İmleri", "column.community": "Yerel zaman tüneli", - "column.direct": "Doğrudan mesajlar", + "column.direct": "Direkt Mesajlar", "column.directory": "Profillere göz at", - "column.domain_blocks": "Gizli alan adları", + "column.domain_blocks": "Engellenen alan adları", "column.favourites": "Favoriler", "column.follow_requests": "Takip istekleri", - "column.home": "Anasayfa", + "column.home": "Ana Sayfa", "column.lists": "Listeler", - "column.mutes": "Susturulmuş kullanıcılar", + "column.mutes": "Sessize alınmış kullanıcılar", "column.notifications": "Bildirimler", "column.pins": "Sabitlenmiş tootlar", "column.public": "Federe zaman tüneli", @@ -89,45 +89,45 @@ "compose_form.hashtag_warning": "Bu toot liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık tootlar etiketlerde bulunabilir.", "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", - "compose_form.placeholder": "Aklınızdan ne geçiyor?", + "compose_form.placeholder": "Aklında ne var?", "compose_form.poll.add_option": "Bir seçenek ekleyin", "compose_form.poll.duration": "Anket süresi", - "compose_form.poll.option_placeholder": "Seçim {number}", - "compose_form.poll.remove_option": "Bu seçimi kaldır", + "compose_form.poll.option_placeholder": "{number}.seçenek", + "compose_form.poll.remove_option": "Bu seçeneği kaldır", "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir", "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir", "compose_form.publish": "Tootla", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Medyayı hassas olarak işaretle", - "compose_form.sensitive.marked": "Medya hassas olarak işaretlendi", - "compose_form.sensitive.unmarked": "Medya hassas olarak işaretlenmemiş", + "compose_form.sensitive.hide": "{count, plural, one {Medyayı hassas olarak işaretle} other {Medyayı hassas olarak işaretle}}", + "compose_form.sensitive.marked": "{count, plural, one {Medya hassas olarak işaretlendi} other {Medya hassas olarak işaretlendi}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medya hassas olarak işaretlenmemiş} other {Medya hassas olarak işaretlenmemiş}}", "compose_form.spoiler.marked": "Metin uyarının arkasına gizlenir", "compose_form.spoiler.unmarked": "Metin gizli değil", "compose_form.spoiler_placeholder": "İçerik uyarısı", "confirmation_modal.cancel": "İptal", - "confirmations.block.block_and_report": "Engelle & Bildir", + "confirmations.block.block_and_report": "Engelle ve Bildir", "confirmations.block.confirm": "Engelle", - "confirmations.block.message": "{name} kullanıcısını engellemek istiyor musunuz?", + "confirmations.block.message": "{name} adlı kullanıcıyı engellemek istediğinizden emin misiniz?", "confirmations.delete.confirm": "Sil", - "confirmations.delete.message": "Bu gönderiyi silmek istiyor musunuz?", + "confirmations.delete.message": "Bu tootu silmek istediğinizden emin misiniz?", "confirmations.delete_list.confirm": "Sil", "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?", - "confirmations.domain_block.confirm": "Alan adının tamamını gizle", + "confirmations.domain_block.confirm": "Alanın tamamını engelle", "confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.", - "confirmations.logout.confirm": "Çıkış Yap", - "confirmations.logout.message": "Çıkış yapmak istediğinize emin misiniz?", + "confirmations.logout.confirm": "Oturumu kapat", + "confirmations.logout.message": "Oturumu kapatmak istediğinizden emin misiniz?", "confirmations.mute.confirm": "Sessize al", "confirmations.mute.explanation": "Bu onlardan gelen ve onlardan bahseden gönderileri gizleyecek, fakat yine de onların gönderilerinizi görmelerine ve sizi takip etmelerine izin verecektir.", - "confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?", - "confirmations.redraft.confirm": "Sil ve yeniden tasarla", - "confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.", + "confirmations.mute.message": "{name} kullanıcısını sessize almak istediğinizden emin misiniz?", + "confirmations.redraft.confirm": "Sil ve yeniden taslak yap", + "confirmations.redraft.message": "Bu toot'u silmek ve yeniden taslak yapmak istediğinizden emin misiniz? Favoriler, boostlar kaybolacak ve orijinal gönderiye verilen yanıtlar sahipsiz kalacak.", "confirmations.reply.confirm": "Yanıtla", "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?", - "confirmations.unfollow.confirm": "Takibi kaldır", - "confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?", - "conversation.delete": "Konuşmayı sil", - "conversation.mark_as_read": "Okunmuş olarak işaretle", - "conversation.open": "Konuşmayı görüntüle", + "confirmations.unfollow.confirm": "Takibi bırak", + "confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinizden emin misiniz?", + "conversation.delete": "Sohbeti sil", + "conversation.mark_as_read": "Okundu olarak işaretle", + "conversation.open": "Sohbeti görüntüle", "conversation.with": "{names} ile", "directory.federated": "Bilinen fediverse'lerden", "directory.local": "Yalnızca {domain} adresinden", @@ -139,7 +139,7 @@ "emoji_button.custom": "Özel", "emoji_button.flags": "Bayraklar", "emoji_button.food": "Yiyecek ve İçecek", - "emoji_button.label": "Emoji ekle", + "emoji_button.label": "İfade ekle", "emoji_button.nature": "Doğa", "emoji_button.not_found": "İfade yok!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Nesneler", @@ -152,51 +152,51 @@ "empty_column.account_timeline": "Burada hiç toot yok!", "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", - "empty_column.bookmarked_statuses": "Hiç işaretlediğiniz tootunuz yok. Bir tane olduğunda burada görünecek.", + "empty_column.bookmarked_statuses": "Henüz yer imine eklediğiniz toot yok. Yer imine eklendiğinde burada görünecek.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", "empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", - "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Bir tane olduğunda burada görünecek.", + "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.", "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", "empty_column.home.public_timeline": "herkese açık zaman tüneli", "empty_column.list": "Bu listede henüz hiçbir şey yok.", - "empty_column.lists": "Henüz hiç listeniz yok. Bir tane oluşturduğunuzda burada görünecek.", + "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.", "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.", - "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", + "empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Bu sayfa doğru görüntülenemedi. Bu hata büyük olasılıkla bir tarayıcı eklentisinden veya otomatik çeviri araçlarından kaynaklanır.", "error.unexpected_crash.next_steps": "Sayfayı yenilemeyi deneyin. Eğer bu yardımcı olmazsa, Mastodon'u farklı bir tarayıcı ya da yerel uygulama üzerinden kullanabilirsiniz.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.", "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", "errors.unexpected_crash.report_issue": "Sorun bildir", - "follow_request.authorize": "Yetkilendir", + "follow_request.authorize": "İzin Ver", "follow_request.reject": "Reddet", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa bile, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", + "generic.saved": "Kaydedildi", "getting_started.developers": "Geliştiriciler", - "getting_started.directory": "Profil dizini", + "getting_started.directory": "Profil Dizini", "getting_started.documentation": "Belgeler", - "getting_started.heading": "Başlangıç", - "getting_started.invite": "İnsanları davet edin", - "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.", - "getting_started.security": "Güvenlik", - "getting_started.terms": "Hizmet koşulları", + "getting_started.heading": "Başlarken", + "getting_started.invite": "İnsanları davet et", + "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. GitHub'taki {github} üzerinden katkıda bulunabilir veya sorunları bildirebilirsiniz.", + "getting_started.security": "Hesap ayarları", + "getting_started.terms": "Kullanım şartları", "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", "hashtag.column_header.tag_mode.none": "{additional} olmadan", - "hashtag.column_settings.select.no_options_message": "Hiç öneri bulunamadı", - "hashtag.column_settings.select.placeholder": "Hashtagler girin…", + "hashtag.column_settings.select.no_options_message": "Öneri bulunamadı", + "hashtag.column_settings.select.placeholder": "Etiketler girin…", "hashtag.column_settings.tag_mode.all": "Bunların hepsi", - "hashtag.column_settings.tag_mode.any": "Bunların hiçbiri", + "hashtag.column_settings.tag_mode.any": "Herhangi biri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", "home.column_settings.basic": "Temel", - "home.column_settings.show_reblogs": "Boost edilenleri göster", - "home.column_settings.show_replies": "Cevapları göster", + "home.column_settings.show_reblogs": "Boostları göster", + "home.column_settings.show_replies": "Yanıtları göster", "home.hide_announcements": "Duyuruları gizle", "home.show_announcements": "Duyuruları göster", "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", @@ -205,18 +205,18 @@ "introduction.federation.action": "İleri", "introduction.federation.federated.headline": "Birleşik", "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.", - "introduction.federation.home.headline": "Ana sayfa", + "introduction.federation.home.headline": "Ana Sayfa", "introduction.federation.home.text": "Takip ettiğiniz kişilerin yayınları ana sayfada gösterilecek. Herhangi bir sunucudaki herkesi takip edebilirsiniz!", "introduction.federation.local.headline": "Yerel", "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", - "introduction.interactions.action": "Öğreticiyi bitirin!", + "introduction.interactions.action": "Öğreticiyi bitir!", "introduction.interactions.favourite.headline": "Favori", "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.", - "introduction.interactions.reblog.headline": "Yinele", - "introduction.interactions.reblog.text": "Başkalarının tootlarını yineleyerek onları kendi takipçilerinizle paylaşabillirsiniz.", + "introduction.interactions.reblog.headline": "Boostla", + "introduction.interactions.reblog.text": "Başkalarının tootlarını boostlayarak onları kendi takipçilerinizle paylaşabillirsiniz.", "introduction.interactions.reply.headline": "Yanıt", "introduction.interactions.reply.text": "Başkalarının ve kendinizin tootlarına cevap verebilirsiniz. Bu, onları bir konuşmada zincirli bir şekilde gösterecektir.", - "introduction.welcome.action": "Hadi gidelim!", + "introduction.welcome.action": "Hadi başlayalım!", "introduction.welcome.headline": "İlk adımlar", "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", "keyboard_shortcuts.back": "geriye gitmek için", @@ -225,7 +225,7 @@ "keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", - "keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için", + "keyboard_shortcuts.direct": "doğrudan mesajlar sütununu açmak için", "keyboard_shortcuts.down": "listede aşağıya inmek için", "keyboard_shortcuts.enter": "durumu açmak için", "keyboard_shortcuts.favourite": "favorilere eklemek için", @@ -237,16 +237,16 @@ "keyboard_shortcuts.legend": "bu efsaneyi görüntülemek için", "keyboard_shortcuts.local": "yerel zaman tünelini açmak için", "keyboard_shortcuts.mention": "yazardan bahsetmek için", - "keyboard_shortcuts.muted": "susturulmuş kullanıcı listesini açmak için", + "keyboard_shortcuts.muted": "sessize alınmış kullanıcı listesini açmak için", "keyboard_shortcuts.my_profile": "profilinizi açmak için", "keyboard_shortcuts.notifications": "bildirimler sütununu açmak için", "keyboard_shortcuts.open_media": "medyayı açmak için", "keyboard_shortcuts.pinned": "sabitlenmiş tootların listesini açmak için", "keyboard_shortcuts.profile": "yazarın profilini açmak için", - "keyboard_shortcuts.reply": "cevaplamak için", + "keyboard_shortcuts.reply": "yanıtlamak için", "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", "keyboard_shortcuts.search": "aramaya odaklanmak için", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "CW akışı göster/gizle", "keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için", "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", "keyboard_shortcuts.toggle_sensitivity": "medyayı göstermek/gizlemek için", @@ -254,63 +254,63 @@ "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Resim görüntüleme kutusunu sıkıştır", + "lightbox.expand": "Resim görüntüleme kutusunu genişlet", "lightbox.next": "Sonraki", - "lightbox.previous": "Önceli", - "lightbox.view_context": "İçeriği göster", + "lightbox.previous": "Önceki", + "lightbox.view_context": "İçeriği görüntüle", "lists.account.add": "Listeye ekle", "lists.account.remove": "Listeden kaldır", "lists.delete": "Listeyi sil", - "lists.edit": "listeyi düzenle", + "lists.edit": "Listeleri düzenle", "lists.edit.submit": "Başlığı değiştir", "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Takip edilen herhangi bir kullanıcı", + "lists.replies_policy.list_replies": "Listenin üyeleri", + "lists.replies_policy.no_replies": "Hiç kimse", + "lists.replies_policy.title": "Yanıtları göster:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", "load_pending": "{count, plural, one {# yeni öğe} other {# yeni öğe}}", "loading_indicator.label": "Yükleniyor...", - "media_gallery.toggle_visible": "Görünürlüğü değiştir", + "media_gallery.toggle_visible": "{number, plural, one {Resmi} other {Resimleri}} gizle", "missing_indicator.label": "Bulunamadı", "missing_indicator.sublabel": "Bu kaynak bulunamadı", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Süre", "mute_modal.hide_notifications": "Bu kullanıcıdan bildirimler gizlensin mı?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Belirsiz", "navigation_bar.apps": "Mobil uygulamalar", "navigation_bar.blocks": "Engellenen kullanıcılar", - "navigation_bar.bookmarks": "Yer imleri", - "navigation_bar.community_timeline": "Yerel zaman tüneli", + "navigation_bar.bookmarks": "Yer İmleri", + "navigation_bar.community_timeline": "Yerel Zaman Tüneli", "navigation_bar.compose": "Yeni toot oluştur", "navigation_bar.direct": "Direkt Mesajlar", "navigation_bar.discover": "Keşfet", - "navigation_bar.domain_blocks": "Gizli alan adları", + "navigation_bar.domain_blocks": "Engellenen alan adları", "navigation_bar.edit_profile": "Profili düzenle", "navigation_bar.favourites": "Favoriler", - "navigation_bar.filters": "Susturulmuş kelimeler", + "navigation_bar.filters": "Sessize alınmış kelimeler", "navigation_bar.follow_requests": "Takip istekleri", "navigation_bar.follows_and_followers": "Takip edilenler ve takipçiler", - "navigation_bar.info": "Genişletilmiş bilgi", + "navigation_bar.info": "Bu sunucu hakkında", "navigation_bar.keyboard_shortcuts": "Klavye kısayolları", "navigation_bar.lists": "Listeler", - "navigation_bar.logout": "Çıkış", + "navigation_bar.logout": "Oturumu kapat", "navigation_bar.mutes": "Sessize alınmış kullanıcılar", "navigation_bar.personal": "Kişisel", "navigation_bar.pins": "Sabitlenmiş tootlar", "navigation_bar.preferences": "Tercihler", "navigation_bar.public_timeline": "Federe zaman tüneli", "navigation_bar.security": "Güvenlik", - "notification.favourite": "{name} senin durumunu favorilere ekledi", - "notification.follow": "{name} seni takip ediyor", - "notification.follow_request": "{name} sizi takip etme isteği gönderdi", + "notification.favourite": "{name} tootunu beğendi", + "notification.follow": "{name} seni takip etti", + "notification.follow_request": "{name} size takip isteği gönderdi", "notification.mention": "{name} senden bahsetti", "notification.own_poll": "Anketiniz sona erdi", - "notification.poll": "Oy verdiğiniz bir anket bitti", - "notification.reblog": "{name} senin durumunu boost etti", - "notification.status": "{name} just posted", + "notification.poll": "Oy verdiğiniz bir anket sona erdi", + "notification.reblog": "{name} tootunu boostladı", + "notification.status": "{name} az önce gönderdi", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.alert": "Masaüstü bildirimleri", @@ -320,28 +320,28 @@ "notifications.column_settings.filter_bar.show": "Göster", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", - "notifications.column_settings.mention": "Bahsedilenler:", + "notifications.column_settings.mention": "Bahsetmeler:", "notifications.column_settings.poll": "Anket sonuçları:", - "notifications.column_settings.push": "Push bildirimleri", + "notifications.column_settings.push": "Anlık bildirimler", "notifications.column_settings.reblog": "Boostlar:", "notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.sound": "Ses çal", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Yeni toot'lar:", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", "notifications.filter.favourites": "Favoriler", "notifications.filter.follows": "Takip edilenler", "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler", "notifications.group": "{count} bildirim", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Her bildirimi okundu olarak işaretle", + "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor", + "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez", + "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", + "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", + "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", + "picture_in_picture.restore": "Onu geri koy", "poll.closed": "Kapandı", "poll.refresh": "Yenile", "poll.total_people": "{count, plural, one {# kişi} other {# kişi}}", @@ -352,7 +352,7 @@ "poll_button.remove_poll": "Anket kaldır", "privacy.change": "Gönderi gizliliğini ayarla", "privacy.direct.long": "Sadece bahsedilen kişilere gönder", - "privacy.direct.short": "Direkt", + "privacy.direct.short": "Doğrudan", "privacy.private.long": "Sadece takipçilerime gönder", "privacy.private.short": "Sadece takipçiler", "privacy.public.long": "Herkese açık zaman tüneline gönder", @@ -363,61 +363,61 @@ "regeneration_indicator.label": "Yükleniyor…", "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!", "relative_time.days": "{number}g", - "relative_time.hours": "{number}s", + "relative_time.hours": "{number}sa", "relative_time.just_now": "şimdi", "relative_time.minutes": "{number}dk", "relative_time.seconds": "{number}sn", "relative_time.today": "bugün", "reply_indicator.cancel": "İptal", - "report.forward": "Şu kişiye ilet : {target}", + "report.forward": "{target} ilet", "report.forward_hint": "Bu hesap başka bir sunucudan. Anonimleştirilmiş bir rapor oraya da gönderilsin mi?", "report.hint": "Bu rapor sunucu moderatörlerine gönderilecek. Bu hesabı neden bildirdiğiniz hakkında bilgi verebirsiniz:", "report.placeholder": "Ek yorumlar", "report.submit": "Gönder", - "report.target": "Raporlama", + "report.target": "{target} Bildiriliyor", "search.placeholder": "Ara", - "search_popout.search_format": "Gelişmiş arama formatı", - "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, yinelediğiniz veya bunlardan bahsettiğiniz durumların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren durumları döndürür.", + "search_popout.search_format": "Gelişmiş arama biçimi", + "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, boostladığınız veya bunlardan bahsettiğiniz tootların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren tootları döndürür.", "search_popout.tips.hashtag": "etiketler", - "search_popout.tips.status": "durum", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Basit metin, eşleşen görünen adları, kullanıcı adlarını ve hashtag'leri döndürür", "search_popout.tips.user": "kullanıcı", "search_results.accounts": "İnsanlar", - "search_results.hashtags": "Hashtagler", + "search_results.hashtags": "Etiketler", "search_results.statuses": "Tootlar", "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda toot içeriğine göre arama etkin değil.", - "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}", + "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuç}}", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu durumu açın", - "status.block": "Engelle : @{name}", + "status.block": "@{name} adlı kişiyi engelle", "status.bookmark": "Yer imlerine ekle", - "status.cancel_reblog_private": "Boost'u geri al", + "status.cancel_reblog_private": "Boostu geri al", "status.cannot_reblog": "Bu gönderi boost edilemez", "status.copy": "Bağlantı durumunu kopyala", "status.delete": "Sil", - "status.detailed_status": "Detaylı yazışma dökümü", + "status.detailed_status": "Ayrıntılı sohbet görünümü", "status.direct": "@{name}'e gönder", "status.embed": "Gömülü", - "status.favourite": "Favorilere ekle", + "status.favourite": "Beğen", "status.filtered": "Filtrelenmiş", "status.load_more": "Daha fazla", "status.media_hidden": "Gizli görsel", "status.mention": "Bahset : @{name}", "status.more": "Daha fazla", "status.mute": "Sustur : @{name}", - "status.mute_conversation": "Yazışmayı sustur", + "status.mute_conversation": "Sohbeti sessize al", "status.open": "Bu gönderiyi genişlet", "status.pin": "Profile sabitle", "status.pinned": "Sabitlenmiş toot", "status.read_more": "Daha dazla oku", "status.reblog": "Boostla", - "status.reblog_private": "Orjinal kitleye yinele", - "status.reblogged_by": "{name} boost etti", - "status.reblogs.empty": "Henüz kimse bu tootu yinelemedi. Biri yaptığında burada görünecek.", + "status.reblog_private": "Orijinal görünürlük ile boostla", + "status.reblogged_by": "{name} boostladı", + "status.reblogs.empty": "Henüz kimse bu tootu boostlamadı. Biri yaptığında burada görünecek.", "status.redraft": "Sil & tekrar taslakla", "status.remove_bookmark": "Yer imini kaldır", - "status.reply": "Cevapla", - "status.replyAll": "Mesaj dizisini cevapla", + "status.reply": "Yanıtla", + "status.replyAll": "Konuyu yanıtla", "status.report": "@{name}'i raporla", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", @@ -427,12 +427,12 @@ "status.show_more_all": "Hepsi için daha fazla göster", "status.show_thread": "Mesaj dizisini göster", "status.uncached_media_warning": "Mevcut değil", - "status.unmute_conversation": "Sohbeti aç", + "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", "suggestions.dismiss": "Öneriyi görmezden gel", "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", "tabs_bar.federated_timeline": "Federe", - "tabs_bar.home": "Ana sayfa", + "tabs_bar.home": "Ana Sayfa", "tabs_bar.local_timeline": "Yerel", "tabs_bar.notifications": "Bildirimler", "tabs_bar.search": "Ara", @@ -441,16 +441,16 @@ "time_remaining.minutes": "{number, plural, one {# dakika} other {# dakika}} kaldı", "time_remaining.moments": "Sadece birkaç dakika kaldı", "time_remaining.seconds": "{number, plural, one {# saniye} other {# saniye}} kaldı", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "diğer sunucudaki {resource} gösterilemiyor.", "timeline_hint.resources.followers": "Takipçiler", "timeline_hint.resources.follows": "Takip Edilenler", "timeline_hint.resources.statuses": "Eski tootlar", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} kişi} other {{counter} kişi}} konuşuyor", "trends.trending_now": "Şu an popüler", "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Mia", "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.thousand": "{count}B", "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız", "upload_button.label": "Görsel ekle", "upload_error.limit": "Dosya yükleme sınırı aşıldı.", @@ -458,17 +458,17 @@ "upload_form.audio_description": "İşitme kaybı olan kişiler için tarif edin", "upload_form.description": "Görme engelliler için açıklama", "upload_form.edit": "Düzenle", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Küçük Resimi Değiştir", "upload_form.undo": "Geri al", "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için tarif edin", "upload_modal.analyzing_picture": "Resmi analiz ediyor…", "upload_modal.apply": "Uygula", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Resim seç", "upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi", "upload_modal.detect_text": "Resimdeki metni algıla", "upload_modal.edit_media": "Medyayı düzenle", "upload_modal.hint": "Her zaman tüm küçük resimlerde görüntülenecek odak noktasını seçmek için ön izlemedeki daireyi tıklayın veya sürükleyin.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "OCR hazırlanıyor…", "upload_modal.preview_label": "Ön izleme ({ratio})", "upload_progress.label": "Yükleniyor...", "video.close": "Videoyu kapat", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 17ffe5519..8e1e6c05b 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -45,6 +47,7 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", @@ -470,7 +477,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", + "upload_progress.label": "Uploading...", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index ac69cfc73..4614489dc 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "Підписатися", "account.followers": "Підписники", "account.followers.empty": "Ніхто ще не підписався на цього користувача.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural, one {{counter} Підписник} few {{counter} Підписники} many {{counter} Підписників} other {{counter} Підписники}}", + "account.following_counter": "{count, plural, one {{counter} Підписка} few {{counter} Підписки} many {{counter} Підписок} other {{counter} Підписки}}", + "account.follows": "Follows", "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.follows_you": "Підписаний(-а) на вас", "account.hide_reblogs": "Сховати передмухи від @{name}", @@ -38,13 +40,14 @@ "account.requested": "Очікує підтвердження. Натисніть щоб відмінити запит", "account.share": "Поділитися профілем @{name}", "account.show_reblogs": "Показати передмухи від @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Пост} few {{counter} Пости} many {{counter} Постів} other {{counter} Пости}}", "account.unblock": "Розблокувати @{name}", "account.unblock_domain": "Розблокувати {domain}", "account.unendorse": "Не публікувати у профілі", "account.unfollow": "Відписатися", "account.unmute": "Зняти глушення з @{name}", "account.unmute_notifications": "Показувати сповіщення від @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Коментарі відсутні", "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.", "alert.rate_limited.title": "Швидкість обмежена", @@ -176,7 +179,7 @@ "follow_request.authorize": "Авторизувати", "follow_request.reject": "Відмовити", "follow_requests.unlocked_explanation": "Хоча ваш обліковий запис не заблоковано, працівники {domain} припускають, що, можливо, ви хотіли б переглянути ці запити на підписку.", - "generic.saved": "Saved", + "generic.saved": "Збережено", "getting_started.developers": "Розробникам", "getting_started.directory": "Каталог профілів", "getting_started.documentation": "Документація", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "Який-небудь з цих", "hashtag.column_settings.tag_mode.none": "Жоден з цих", "hashtag.column_settings.tag_toggle": "Додайте додаткові теґи до цього стовпчика", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основні", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Показувати передмухи", "home.column_settings.show_replies": "Показувати відповіді", "home.hide_announcements": "Приховати оголошення", + "home.settings": "Column settings", "home.show_announcements": "Показати оголошення", "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Дмухів", "search_results.statuses_fts_disabled": "Пошук дмухів за вмістом недоступний на цьому сервері Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Відкрити інтерфейс модерації для @{name}", "status.admin_status": "Відкрити цей статус в інтерфейсі модерації", "status.block": "Заблокувати @{name}", @@ -445,25 +452,25 @@ "timeline_hint.resources.followers": "Підписники", "timeline_hint.resources.follows": "Підписки", "timeline_hint.resources.statuses": "Старіші дмухи", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} особа обговорює} few {{counter} особи обговорюють} many {{counter} осіб обговорюють} other {{counter} особи обговорюють}}", "trends.trending_now": "Актуальні", "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count} млрд", + "units.short.million": "{count} млн", + "units.short.thousand": "{count} тис", "upload_area.title": "Перетягніть сюди, щоб завантажити", - "upload_button.label": "Додати медіа ({formats})", + "upload_button.label": "Додати медіа", "upload_error.limit": "Ліміт завантаження файлів перевищено.", "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.audio_description": "Опишіть для людей із вадами слуху", "upload_form.description": "Опишіть для людей з вадами зору", "upload_form.edit": "Змінити", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Змінити мініатюру", "upload_form.undo": "Видалити", "upload_form.video_description": "Опишіть для людей із вадами слуху або зору", "upload_modal.analyzing_picture": "Аналізуємо малюнок…", "upload_modal.apply": "Застосувати", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Вибрати зображення", "upload_modal.description_placeholder": "Щурячий бугай із їжаком-харцизом в'ючись підписали ґешефт у єнах", "upload_modal.detect_text": "Виявити текст на малюнку", "upload_modal.edit_media": "Редагувати медіа", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 3260a33cd..cf6e6c274 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -10,6 +10,7 @@ "account.cancel_follow_request": "درخواستِ پیروی منسوخ کریں", "account.direct": "راست پیغام @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", "account.enable_notifications": "Notify me when @{name} posts", @@ -19,6 +20,7 @@ "account.followers.empty": "\"ہنوز اس صارف کی کوئی پیروی نہیں کرتا\".", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".", "account.follows_you": "آپ کا پیروکار ہے", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", @@ -45,6 +47,7 @@ "account.unfollow": "پیروی ترک کریں", "account.unmute": "@{name} کو با آواز کریں", "account.unmute_notifications": "@{name} سے اطلاعات کو با آواز کریں", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "\"{retry_time, time, medium} کے بعد کوشش کریں\".", "alert.rate_limited.title": "Rate limited", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "ان میں سے کوئی", "hashtag.column_settings.tag_mode.none": "ان میں سے کوئی بھی نہیں", "hashtag.column_settings.tag_toggle": "اس کالم کے لئے مزید ٹیگز شامل کریں", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "بنیادی", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "افزائشات دکھائیں", "home.column_settings.show_replies": "جوابات دکھائیں", "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", @@ -387,6 +393,7 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 25711b869..6fc00e9cb 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -8,21 +8,23 @@ "account.blocked": "Đã chặn", "account.browse_more_on_origin_server": "Tìm những tài khoản có liên quan", "account.cancel_follow_request": "Hủy yêu cầu theo dõi", - "account.direct": "Nhắn tin cho @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.direct": "Nhắn tin @{name}", + "account.disable_notifications": "Không thông báo khi @{name} đăng tút", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Đã chặn người dùng", - "account.edit_profile": "Chỉnh sửa trang cá nhân", - "account.enable_notifications": "Notify me when @{name} posts", + "account.edit_profile": "Giới thiệu bản thân", + "account.enable_notifications": "Thông báo khi @{name} đăng tút", "account.endorse": "Vinh danh người này", "account.follow": "Theo dõi", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", "account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}", "account.following_counter": "{count, plural, one {{counter} Đang theo dõi} other {{counter} Đang theo dõi}}", + "account.follows": "Follows", "account.follows.empty": "Người dùng này chưa theo dõi ai.", "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn chia sẻ từ @{name}", - "account.last_status": "Hoạt động cuối", + "account.last_status": "Trực tuyến", "account.link_verified_on": "Liên kết này đã được xác thực vào {date}", "account.locked_info": "Người dùng này thiết lập trạng thái ẩn. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Bộ sưu tập", @@ -33,7 +35,7 @@ "account.muted": "Đã ẩn", "account.never_active": "Chưa có bất cứ hoạt động nào", "account.posts": "Tút", - "account.posts_with_replies": "Trả lời", + "account.posts_with_replies": "Tương tác", "account.report": "Báo cáo @{name}", "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi", "account.share": "Chia sẻ hồ sơ @{name}", @@ -45,14 +47,15 @@ "account.unfollow": "Ngưng theo dõi", "account.unmute": "Bỏ ẩn @{name}", "account.unmute_notifications": "Hiển lại thông báo từ @{name}", + "account.view_full_profile": "View full profile", "account_note.placeholder": "Bạn có điều gì thú vị muốn nói về người này?", "alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.", "alert.rate_limited.title": "Vượt giới hạn", "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.", "alert.unexpected.title": "Ốiii!", - "announcement.announcement": "Thông báo", + "announcement.announcement": "Thông báo chung", "autosuggest_hashtag.per_week": "{count} mỗi tuần", - "boost_modal.combo": "Bạn có thể nhấn {combo} để bỏ qua", + "boost_modal.combo": "Nhấn {combo} để chia sẻ nhanh hơn", "bundle_column_error.body": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_column_error.retry": "Thử lại", "bundle_column_error.title": "Không có kết nối internet", @@ -60,25 +63,25 @@ "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_modal_error.retry": "Thử lại", "column.blocks": "Người dùng đã chặn", - "column.bookmarks": "Tút đã lưu", + "column.bookmarks": "Những tút bạn đã lưu", "column.community": "Máy chủ của bạn", "column.direct": "Tin nhắn của bạn", - "column.directory": "Tìm một ai đó", + "column.directory": "Tìm người cùng sở thích", "column.domain_blocks": "Máy chủ đã chặn", - "column.favourites": "Thích", + "column.favourites": "Lượt thích của bạn", "column.follow_requests": "Yêu cầu theo dõi", "column.home": "Bảng tin", "column.lists": "Danh sách", "column.mutes": "Người dùng đã ẩn", "column.notifications": "Thông báo", "column.pins": "Tút ghim", - "column.public": "Mạng liên kết", + "column.public": "Từ những máy chủ khác", "column_back_button.label": "Quay lại", - "column_header.hide_settings": "Ẩn cài đặt", + "column_header.hide_settings": "Ẩn bộ lọc", "column_header.moveLeft_settings": "Dời cột sang bên trái", "column_header.moveRight_settings": "Dời cột sang bên phải", "column_header.pin": "Ghim", - "column_header.show_settings": "Hiển thị cài đặt", + "column_header.show_settings": "Hiện bộ lọc", "column_header.unpin": "Không ghim", "column_subheading.settings": "Cài đặt", "community.column_settings.local_only": "Chỉ máy chủ của bạn", @@ -101,8 +104,8 @@ "compose_form.sensitive.hide": "Nội dung nhạy cảm", "compose_form.sensitive.marked": "Nội dung đã đánh dấu nhạy cảm", "compose_form.sensitive.unmarked": "Nội dung không đánh dấu nhạy cảm", - "compose_form.spoiler.marked": "Văn bản bị ẩn", - "compose_form.spoiler.unmarked": "Văn bản không ẩn sau spoil", + "compose_form.spoiler.marked": "Hủy nội dung ẩn", + "compose_form.spoiler.unmarked": "Tạo nội dung ẩn", "compose_form.spoiler_placeholder": "Viết nội dung ẩn của bạn ở đây", "confirmation_modal.cancel": "Hủy bỏ", "confirmations.block.block_and_report": "Chặn & Báo cáo", @@ -117,7 +120,7 @@ "confirmations.logout.confirm": "Đăng xuất", "confirmations.logout.message": "Bạn có thật sự muốn thoát?", "confirmations.mute.confirm": "Ẩn", - "confirmations.mute.explanation": "Điều này sẽ khiến tút của người đó và những tút có đề cập đến họ bị ẩn, tuy nhiên vẫn cho phép họ xem bài đăng của bạn và theo dõi bạn.", + "confirmations.mute.explanation": "Điều này sẽ khiến tút của họ và những tút có nhắc đến họ bị ẩn, tuy nhiên họ vẫn có thể xem tút của bạn và theo dõi bạn.", "confirmations.mute.message": "Bạn có chắc chắn muốn ẩn {name}?", "confirmations.redraft.confirm": "Xóa & viết lại", "confirmations.redraft.message": "Bạn có chắc chắn muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và chia sẻ của tút, cũng như những trả lời sẽ không còn nội dung gốc.", @@ -129,7 +132,7 @@ "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", "conversation.with": "Với {names}", - "directory.federated": "Từ mạng liên kết", + "directory.federated": "Từ mạng liên hợp", "directory.local": "Từ {domain}", "directory.new_arrivals": "Mới tham gia", "directory.recently_active": "Hoạt động gần đây", @@ -162,15 +165,15 @@ "empty_column.hashtag": "Chưa có bài đăng nào sử dụng hashtag này.", "empty_column.home": "Chưa có bất cứ gì! Hãy bắt đầu bằng cách tìm kiếm hoặc truy cập {public} để theo dõi những người bạn quan tâm.", "empty_column.home.public_timeline": "tút công khai", - "empty_column.list": "Chưa có gì trong danh sách. Khi thành viên của danh sách này đăng tút mới, chúng mới xuất hiện ở đây.", - "empty_column.lists": "Bạn không có danh sách nào.", + "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", + "empty_column.lists": "Bạn chưa tạo danh sách nào.", "empty_column.mutes": "Bạn chưa ẩn người dùng nào.", "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn tin cho một ai đó.", "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi người dùng khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Trang này không thể hiển thị do xung khắc với add-on của trình duyệt hoặc công cụ tự động dịch ngôn ngữ.", "error.unexpected_crash.next_steps": "Hãy thử làm mới trang. Nếu vẫn không được, bạn hãy vào Mastodon bằng một ứng dụng di động hoặc trình duyệt khác.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.", "errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard", "errors.unexpected_crash.report_issue": "Báo cáo lỗi", "follow_request.authorize": "Cho phép", @@ -178,9 +181,9 @@ "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "generic.saved": "Đã lưu", "getting_started.developers": "Nhà phát triển", - "getting_started.directory": "Danh sách người dùng", + "getting_started.directory": "Kết bạn", "getting_started.documentation": "Tài liệu", - "getting_started.heading": "Dành cho người mới", + "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", "getting_started.open_source_notice": "Mastodon là phần mềm mã nguồn mở. Bạn có thể đóng góp hoặc báo lỗi trên GitHub tại {github}.", "getting_started.security": "Bảo mật", @@ -194,21 +197,24 @@ "hashtag.column_settings.tag_mode.any": "Một phần", "hashtag.column_settings.tag_mode.none": "Không chọn", "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Tùy chỉnh", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Hiện những lượt chia sẻ", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", "home.hide_announcements": "Ẩn thông báo", + "home.settings": "Column settings", "home.show_announcements": "Hiện thông báo", "intervals.full.days": "{number, plural, other {# ngày}}", "intervals.full.hours": "{number, plural, other {# giờ}}", "intervals.full.minutes": "{number, plural, other {# phút}}", "introduction.federation.action": "Tiếp theo", - "introduction.federation.federated.headline": "Mạng liên kết", - "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Mạng liên kết.", + "introduction.federation.federated.headline": "Mạng liên hợp", + "introduction.federation.federated.text": "Nếu máy chủ của bạn có liên kết với các máy chủ khác, bài đăng công khai từ họ sẽ xuất hiện ở Thế giới.", "introduction.federation.home.headline": "Bảng tin", "introduction.federation.home.text": "Bảng tin là nơi hiển thị bài đăng từ những người bạn theo dõi. Bạn có thể theo dõi bất cứ ai trên bất cứ máy chủ nào!", - "introduction.federation.local.headline": "Máy chủ của bạn", - "introduction.federation.local.text": "Máy chủ của bạn là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.", + "introduction.federation.local.headline": "Cộng đồng", + "introduction.federation.local.text": "Cộng đồng là nơi hiển thị bài đăng công khai từ những người thuộc cùng một máy chủ của bạn.", "introduction.interactions.action": "Tôi đã hiểu rồi!", "introduction.interactions.favourite.headline": "Thích", "introduction.interactions.favourite.text": "Thích một tút có nghĩa là bạn tâm đắc nội dung của tút và muốn lưu giữ để sau này xem lại.", @@ -230,7 +236,7 @@ "keyboard_shortcuts.enter": "viết tút mới", "keyboard_shortcuts.favourite": "thích", "keyboard_shortcuts.favourites": "mở lượt thích", - "keyboard_shortcuts.federated": "mở mạng liên kết", + "keyboard_shortcuts.federated": "mở mạng liên hợp", "keyboard_shortcuts.heading": "Các phím tắt", "keyboard_shortcuts.home": "mở bảng tin", "keyboard_shortcuts.hotkey": "Phím tắt", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Thu gọn khung hình", + "lightbox.expand": "Mở rộng khung hình", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", "lightbox.view_context": "Xem nội dung", @@ -264,31 +270,31 @@ "lists.delete": "Xóa danh sách", "lists.edit": "Sửa danh sách", "lists.edit.submit": "Thay đổi tiêu đề", - "lists.new.create": "Thêm vào danh sách", + "lists.new.create": "Tạo danh sách mới", "lists.new.title_placeholder": "Tên danh sách mới", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "Bất cứ người dùng nào đã theo dõi", + "lists.replies_policy.list_replies": "Thành viên trong danh sách", + "lists.replies_policy.no_replies": "Tắt bình luận", + "lists.replies_policy.title": "Cho phép bình luận với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", "load_pending": "{count, plural, one {# tút} other {# tút}}", - "loading_indicator.label": "Đang tải...", + "loading_indicator.label": "Chờ xíu...", "media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}", "missing_indicator.label": "Không tìm thấy", - "missing_indicator.sublabel": "Không tìm thấy cái này", - "mute_modal.duration": "Duration", + "missing_indicator.sublabel": "Nội dung này không còn tồn tại", + "mute_modal.duration": "Thời hạn", "mute_modal.hide_notifications": "Ẩn thông báo từ người dùng này?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Vĩnh viễn", "navigation_bar.apps": "Apps", "navigation_bar.blocks": "Người dùng đã chặn", "navigation_bar.bookmarks": "Đã lưu", - "navigation_bar.community_timeline": "Máy chủ của bạn", - "navigation_bar.compose": "Soạn tút mới", + "navigation_bar.community_timeline": "Cộng đồng", + "navigation_bar.compose": "Viết tút mới", "navigation_bar.direct": "Tin nhắn", - "navigation_bar.discover": "Cộng đồng", + "navigation_bar.discover": "Khám phá", "navigation_bar.domain_blocks": "Máy chủ đã ẩn", - "navigation_bar.edit_profile": "Chỉnh sửa trang cá nhân", + "navigation_bar.edit_profile": "Giới thiệu bản thân", "navigation_bar.favourites": "Lượt thích", "navigation_bar.filters": "Bộ lọc từ ngữ", "navigation_bar.follow_requests": "Yêu cầu theo dõi", @@ -301,55 +307,55 @@ "navigation_bar.personal": "Cá nhân", "navigation_bar.pins": "Tút ghim", "navigation_bar.preferences": "Cài đặt", - "navigation_bar.public_timeline": "Dòng thời gian liên kết", + "navigation_bar.public_timeline": "Thế giới", "navigation_bar.security": "Bảo mật", - "notification.favourite": "{name} vừa thích tút của bạn", - "notification.follow": "{name} vừa theo dõi bạn", - "notification.follow_request": "{name} vừa yêu cầu theo dõi bạn", + "notification.favourite": "{name} thích tút của bạn", + "notification.follow": "{name} theo dõi bạn", + "notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.mention": "{name} nhắc đến bạn", - "notification.own_poll": "Cuộc thăm dò của bạn đã kết thúc", - "notification.poll": "Một cuộc thăm dò mà bạn tham gia đã kết thúc", + "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", + "notification.poll": "Một cuộc bình chọn mà bạn tham gia đã kết thúc", "notification.reblog": "{name} chia sẻ tút của bạn", - "notification.status": "{name} just posted", + "notification.status": "{name} vừa đăng", "notifications.clear": "Làm trống thông báo", "notifications.clear_confirmation": "Bạn có chắc chắn muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.alert": "Thông báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", - "notifications.column_settings.filter_bar.advanced": "Hiển thị toàn bộ", - "notifications.column_settings.filter_bar.category": "Lọc nhanh", - "notifications.column_settings.filter_bar.show": "Hiện", + "notifications.column_settings.filter_bar.advanced": "Toàn bộ", + "notifications.column_settings.filter_bar.category": "Phân loại", + "notifications.column_settings.filter_bar.show": "Lượt nhắc", "notifications.column_settings.follow": "Người theo dõi mới:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi mới:", - "notifications.column_settings.mention": "Đề cập:", - "notifications.column_settings.poll": "Kết quả cuộc thăm dò:", + "notifications.column_settings.mention": "Lượt nhắc đến:", + "notifications.column_settings.poll": "Kết quả bình chọn:", "notifications.column_settings.push": "Thông báo đẩy", "notifications.column_settings.reblog": "Lượt chia sẻ mới:", "notifications.column_settings.show": "Thông báo trên thanh menu", "notifications.column_settings.sound": "Kèm theo tiếng \"bíp\"", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Tút mới:", "notifications.filter.all": "Toàn bộ", "notifications.filter.boosts": "Chia sẻ", "notifications.filter.favourites": "Thích", "notifications.filter.follows": "Đang theo dõi", "notifications.filter.mentions": "Lượt nhắc đến", - "notifications.filter.polls": "Kết quả cuộc thăm dò", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.polls": "Kết quả bình chọn", + "notifications.filter.statuses": "Cập nhật từ những người bạn theo dõi", "notifications.group": "{count} thông báo", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Cuộc thăm dò đã kết thúc", + "notifications.mark_as_read": "Đánh dấu tất cả thông báo là đã đọc", + "notifications.permission_denied": "Trình duyệt không cho phép hiển thị thông báo trên màn hình.", + "notifications.permission_denied_alert": "Không thể bật thông báo trên màn hình bởi vì trình duyệt đã cấm trước đó", + "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", + "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", + "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", + "picture_in_picture.restore": "Hiển thị bình thường", + "poll.closed": "Kết thúc", "poll.refresh": "Làm mới", "poll.total_people": "{count, plural, one {# người bình chọn} other {# người bình chọn}}", "poll.total_votes": "{count, plural, one {# bình chọn} other {# bình chọn}}", - "poll.vote": "Cuộc thăm dò", + "poll.vote": "Khảo sát", "poll.voted": "Bạn đã bình chọn câu trả lời này", - "poll_button.add_poll": "Tạo thăm dò", - "poll_button.remove_poll": "Hủy thăm dò", + "poll_button.add_poll": "Tạo cuộc bình chọn", + "poll_button.remove_poll": "Hủy cuộc bình chọn", "privacy.change": "Thay đổi quyền riêng tư", "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", "privacy.direct.short": "Tin nhắn", @@ -357,12 +363,12 @@ "privacy.private.short": "Chỉ người theo dõi", "privacy.public.long": "Hiện trên bảng tin máy chủ", "privacy.public.short": "Công khai", - "privacy.unlisted.long": "Ai cũng có thể xem nhưng không hiện trên bảng tin máy chủ", + "privacy.unlisted.long": "Công khai nhưng không hiện trên bảng tin máy chủ", "privacy.unlisted.short": "Mở", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", - "relative_time.days": "{number}d", + "relative_time.days": "{number} ngày", "relative_time.hours": "{number}h", "relative_time.just_now": "vừa xong", "relative_time.minutes": "{number}m", @@ -370,14 +376,14 @@ "relative_time.today": "hôm nay", "reply_indicator.cancel": "Hủy bỏ", "report.forward": "Chuyển đến {target}", - "report.forward_hint": "Người dùng này ở máy chủ khác. Gửi một báo xấu ẩn danh tới máy chủ đó?", - "report.hint": "Hãy cho quản trị viên biết lý do tại sao bạn lại báo xấu tài khoản này:", + "report.forward_hint": "Người dùng này ở máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?", + "report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo tài khoản này:", "report.placeholder": "Bổ sung thêm", "report.submit": "Gửi đi", - "report.target": "Báo xấu {target}", + "report.target": "Báo cáo {target}", "search.placeholder": "Tìm kiếm", - "search_popout.search_format": "Tìm kiếm nâng cao", - "search_popout.tips.full_text": "Nội dung trả về bao gồm các tút do bạn viết, yêu thích, đã chia sẻ hoặc được nhắc đến. Cũng như địa chỉ người dùng, tên hiển thị lẫn hashtag.", + "search_popout.search_format": "Gợi ý", + "search_popout.tips.full_text": "Nội dung trả về bao gồm những tút do bạn viết, yêu thích, đã chia sẻ hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "tút", "search_popout.tips.text": "Nội dung trả về là địa chỉ người dùng, tên hiển thị và hashtag", @@ -387,6 +393,7 @@ "search_results.statuses": "Tút", "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật chức năng tìm kiếm tút.", "search_results.total": "{count, number} {count, plural, one {kết quả} other {kết quả}}", + "standalone.public_title": "A look inside...", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_status": "Mở tút này trong giao diện quản trị", "status.block": "Chặn @{name}", @@ -396,7 +403,7 @@ "status.copy": "Sao chép URL", "status.delete": "Xóa", "status.detailed_status": "Xem chi tiết thêm", - "status.direct": "Nhắn riêng @{name}", + "status.direct": "Nhắn tin @{name}", "status.embed": "Nhúng", "status.favourite": "Thích", "status.filtered": "Bộ lọc", @@ -409,31 +416,31 @@ "status.open": "Xem nguyên văn", "status.pin": "Ghim lên trang cá nhân", "status.pinned": "Tút đã ghim", - "status.read_more": "Đọc thêm", + "status.read_more": "Đọc thêm tút", "status.reblog": "Chia sẻ", - "status.reblog_private": "Chia sẻ với người viết tút gốc", + "status.reblog_private": "Chia sẻ với người có thể xem", "status.reblogged_by": "{name} chia sẻ", "status.reblogs.empty": "Tút này chưa có ai chia sẻ. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Hủy lưu", "status.reply": "Trả lời", "status.replyAll": "Trả lời tất cả", - "status.report": "Báo xấu @{name}", + "status.report": "Báo cáo @{name}", "status.sensitive_warning": "Nội dung nhạy cảm", "status.share": "Chia sẻ", "status.show_less": "Thu gọn", "status.show_less_all": "Thu gọn tất cả", "status.show_more": "Mở rộng", "status.show_more_all": "Hiển thị tất cả", - "status.show_thread": "Hiện thêm", + "status.show_thread": "Xem thêm", "status.uncached_media_warning": "N/A", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên trang cá nhân", "suggestions.dismiss": "Tắt đề xuất", "suggestions.header": "Có thể bạn quan tâm…", - "tabs_bar.federated_timeline": "Mạng liên kết", + "tabs_bar.federated_timeline": "Thế giới", "tabs_bar.home": "Bảng tin", - "tabs_bar.local_timeline": "Máy chủ của bạn", + "tabs_bar.local_timeline": "Cộng đồng", "tabs_bar.notifications": "Thông báo", "tabs_bar.search": "Tìm kiếm", "time_remaining.days": "Kết thúc sau {number, plural, other {# ngày}}", @@ -454,25 +461,25 @@ "upload_area.title": "Kéo và thả để tải lên", "upload_button.label": "Thêm media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Tập tin tải lên vượt quá giới hạn cho phép.", - "upload_error.poll": "Cuộc thăm dò không được tải tập tin.", - "upload_form.audio_description": "Mô tả cho người thính giác kém", + "upload_error.poll": "Cuộc bình chọn không cho phép đính kèm tập tin.", + "upload_form.audio_description": "Mô tả cho người mất thính giác", "upload_form.description": "Mô tả cho người khiếm thị", "upload_form.edit": "Biên tập", "upload_form.thumbnail": "Đổi ảnh thumbnail", "upload_form.undo": "Xóa bỏ", - "upload_form.video_description": "Mô tả cho người có vấn đề về thính giác", + "upload_form.video_description": "Mô tả cho người mất thị lực hoặc không thể nghe", "upload_modal.analyzing_picture": "Phân tích hình ảnh", "upload_modal.apply": "Áp dụng", - "upload_modal.choose_image": "Chọn hình", + "upload_modal.choose_image": "Chọn ảnh", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Phát hiện văn bản trong hình ảnh", - "upload_modal.edit_media": "Chỉnh sửa ảnh/video", + "upload_modal.detect_text": "Trích văn bản từ trong ảnh", + "upload_modal.edit_media": "Biên tập", "upload_modal.hint": "Nhấp hoặc kéo vòng tròn trên bản xem trước để chọn phần hiển thị trên hình thu nhỏ.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Đang nhận dạng ký tự…", "upload_modal.preview_label": "Xem trước ({ratio})", "upload_progress.label": "Đang tải lên...", "video.close": "Đóng video", - "video.download": "Tải tập tin", + "video.download": "Lưu về máy", "video.exit_fullscreen": "Thoát toàn màn hình", "video.expand": "Mở rộng video", "video.fullscreen": "Toàn màn hình", diff --git a/app/javascript/mastodon/locales/whitelist_sa.json b/app/javascript/mastodon/locales/whitelist_sa.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_sa.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_zgh.json b/app/javascript/mastodon/locales/whitelist_zgh.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_zgh.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json new file mode 100644 index 000000000..8e1e6c05b --- /dev/null +++ b/app/javascript/mastodon/locales/zgh.json @@ -0,0 +1,491 @@ +{ + "account.account_note_header": "Note", + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.badges.group": "Group", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", + "home.column_settings.basic": "Basic", + "home.column_settings.filter_regex": "Filter out by regular expressions", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.settings": "Column settings", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.all_replies": "Any followed user", + "lists.replies_policy.list_replies": "Members of the list", + "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 8052cc4f1..16420f849 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -9,16 +9,18 @@ "account.browse_more_on_origin_server": "在原始个人资料页面上浏览详情", "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "当 @{name} 发嘟时不要通知我", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "网站已屏蔽", "account.edit_profile": "修改个人资料", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "当 @{name} 发嘟时通知我", "account.endorse": "在个人资料中推荐此用户", "account.follow": "关注", "account.followers": "关注者", "account.followers.empty": "目前无人关注此用户。", - "account.followers_counter": "被 {count, plural, one {{counter} 人} other {{counter} 人}}关注", - "account.following_counter": "正在关注 {count, plural, other {{counter} 人}}", + "account.followers_counter": "被 {counter} 人关注", + "account.following_counter": "正在关注 {counter} 人", + "account.follows": "Follows", "account.follows.empty": "此用户目前尚未关注任何人。", "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", @@ -38,13 +40,14 @@ "account.requested": "正在等待对方同意。点击以取消发送关注请求", "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", - "account.statuses_counter": "{count, plural, one {{counter} 条} other {{counter} 条}}嘟文", + "account.statuses_counter": "{counter} 条嘟文", "account.unblock": "解除屏蔽 @{name}", "account.unblock_domain": "不再隐藏来自 {domain} 的内容", "account.unendorse": "不在个人资料中推荐此用户", "account.unfollow": "取消关注", "account.unmute": "不再隐藏 @{name}", "account.unmute_notifications": "不再隐藏来自 @{name} 的通知", + "account.view_full_profile": "View full profile", "account_note.placeholder": "点击添加备注", "alert.rate_limited.message": "请在{retry_time, time, medium}后重试。", "alert.rate_limited.title": "频率受限", @@ -168,9 +171,9 @@ "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "此页面无法正确显示,这个错误很可能是由浏览器附加组件或自动翻译工具造成的。", "error.unexpected_crash.next_steps": "刷新一下页面试试。如果没用,您可以换个浏览器或者用本地应用。", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,您仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "follow_request.authorize": "同意", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全都不要", "hashtag.column_settings.tag_toggle": "在此栏加入额外的标签", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本设置", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", "home.hide_announcements": "隐藏公告", + "home.settings": "Column settings", "home.show_announcements": "显示公告", "intervals.full.days": "{number} 天", "intervals.full.hours": "{number} 小时", @@ -254,8 +260,8 @@ "keyboard_shortcuts.unfocus": "取消输入", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "返回图片全览", + "lightbox.expand": "放大查看图片", "lightbox.next": "下一个", "lightbox.previous": "上一个", "lightbox.view_context": "查看上下文", @@ -266,10 +272,10 @@ "lists.edit.submit": "更改标题", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "任何关注的用户", + "lists.replies_policy.list_replies": "列表成员", + "lists.replies_policy.no_replies": "没有人", + "lists.replies_policy.title": "显示回复给:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", "load_pending": "{count} 项", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "隐藏 {number} 张图片", "missing_indicator.label": "找不到内容", "missing_indicator.sublabel": "无法找到此资源", - "mute_modal.duration": "Duration", + "mute_modal.duration": "持续期间", "mute_modal.hide_notifications": "同时隐藏来自这个用户的通知?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "无期限", "navigation_bar.apps": "移动应用", "navigation_bar.blocks": "已屏蔽的用户", "navigation_bar.bookmarks": "书签", @@ -310,7 +316,7 @@ "notification.own_poll": "您的投票已经结束", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转嘟了你的嘟文", - "notification.status": "{name} just posted", + "notification.status": "{name} 刚刚发嘟", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", "notifications.column_settings.alert": "桌面通知", @@ -326,22 +332,22 @@ "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:", "notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.sound": "播放音效", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "转嘟", "notifications.filter.favourites": "喜欢", "notifications.filter.follows": "关注", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "您关注的人的动态", "notifications.group": "{count} 条通知", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "将所有通知标为已读", + "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", + "notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败", + "notifications_permission_banner.enable": "启用桌面通知", + "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。您可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", + "notifications_permission_banner.title": "精彩不容错过", + "picture_in_picture.restore": "恢复", "poll.closed": "已关闭", "poll.refresh": "刷新", "poll.total_people": "{count}人", @@ -350,7 +356,7 @@ "poll.voted": "您已经对这个答案投过票了", "poll_button.add_poll": "发起投票", "poll_button.remove_poll": "移除投票", - "privacy.change": "设置嘟文可见范围", + "privacy.change": "设置嘟文的可见范围", "privacy.direct.long": "只有被提及的用户能看到", "privacy.direct.short": "私信", "privacy.private.long": "只有关注你的用户能看到", @@ -387,6 +393,7 @@ "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "此Mastodon服务器未启用嘟文内容搜索。", "search_results.total": "共 {count, number} 个结果", + "standalone.public_title": "A look inside...", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_status": "打开这条嘟文的管理界面", "status.block": "屏蔽 @{name}", @@ -405,7 +412,7 @@ "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "隐藏 @{name}", - "status.mute_conversation": "隐藏此对话", + "status.mute_conversation": "将此对话静音", "status.open": "展开嘟文", "status.pin": "在个人资料页面置顶", "status.pinned": "置顶嘟文", @@ -452,7 +459,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "将文件拖放到此处开始上传", - "upload_button.label": "上传媒体文件 ({formats})", + "upload_button.label": "上传媒体文件", "upload_error.limit": "文件大小超过限制。", "upload_error.poll": "投票中不允许上传文件。", "upload_form.audio_description": "为听障人士添加文字描述", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "从图片中检测文本", "upload_modal.edit_media": "编辑媒体", "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "正在准备文字识别……", "upload_modal.preview_label": "预览 ({ratio})", "upload_progress.label": "上传中……", "video.close": "关闭视频", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 59b950a82..3c7ac7f9b 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -1,15 +1,16 @@ { - "account.account_note_header": "備註", + "account.account_note_header": "筆記", "account.add_or_remove_from_list": "從名單中新增或移除", "account.badges.bot": "機械人", "account.badges.group": "群組", "account.block": "封鎖 @{name}", "account.block_domain": "隱藏來自 {domain} 的一切文章", "account.blocked": "封鎖", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "在該服務器的個人檔案頁上瀏覽更多", "account.cancel_follow_request": "取消關注請求", "account.direct": "私訊 @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "服務站被隱藏", "account.edit_profile": "修改個人資料", "account.enable_notifications": "Notify me when @{name} posts", @@ -17,8 +18,9 @@ "account.follow": "關注", "account.followers": "關注的人", "account.followers.empty": "尚沒有人關注這位使用者。", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", + "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", + "account.follows": "Follows", "account.follows.empty": "這位使用者尚未關注任何使用者。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", @@ -38,14 +40,15 @@ "account.requested": "等候審批", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示 @{name} 的推文", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", "account.unblock": "解除對 @{name} 的封鎖", "account.unblock_domain": "不再隱藏 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "按此添加備注", "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生不可預期的錯誤。", @@ -81,9 +84,9 @@ "column_header.show_settings": "顯示設定", "column_header.unpin": "取下", "column_subheading.settings": "設定", - "community.column_settings.local_only": "只有本地", + "community.column_settings.local_only": "只顯示本站", "community.column_settings.media_only": "僅媒體", - "community.column_settings.remote_only": "只有遠端", + "community.column_settings.remote_only": "只顯示外站", "compose_form.direct_message_warning": "這文章只有被提及的用戶才可以看到。", "compose_form.direct_message_warning_learn_more": "了解更多", "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。", @@ -175,8 +178,8 @@ "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", - "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。", - "generic.saved": "Saved", + "follow_requests.unlocked_explanation": "即使您的帳戶未上鎖,{domain} 的工作人員認為您可能想手動審核來自這些帳戶的關注請求。", + "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", "getting_started.documentation": "文件", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", "home.hide_announcements": "隱藏公告", + "home.settings": "Column settings", "home.show_announcements": "顯示公告", "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "回覆", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "把標示移動到搜索", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示或隱藏被標為敏感的文字", "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", @@ -387,6 +393,7 @@ "search_results.statuses": "文章", "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", "search_results.total": "{count, number} 項結果", + "standalone.public_title": "A look inside...", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", "status.block": "封鎖 @{name}", @@ -441,11 +448,11 @@ "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服務器的 {resource}", + "timeline_hint.resources.followers": "關注者", + "timeline_hint.resources.follows": "關注中", + "timeline_hint.resources.statuses": "更早的嘟文", + "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", "trends.trending_now": "目前趨勢", "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。", "units.short.billion": "{count}B", @@ -458,7 +465,7 @@ "upload_form.audio_description": "簡單描述內容給聽障人士", "upload_form.description": "為視覺障礙人士添加文字說明", "upload_form.edit": "編輯", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "更改預覽圖", "upload_form.undo": "刪除", "upload_form.video_description": "簡單描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 3e4045c0f..ba5765aaa 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -6,19 +6,21 @@ "account.block": "封鎖 @{name}", "account.block_domain": "隱藏來自 {domain} 的所有內容", "account.blocked": "已封鎖", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "在該服務器的個人檔案頁上瀏覽更多", "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "當 @{name} 嘟文時不要再通知我", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "已隱藏網域", "account.edit_profile": "編輯個人資料", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "當 @{name} 嘟文時通知我", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注者", "account.followers.empty": "尚沒有人關注這位使用者。", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", + "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", + "account.follows": "Follows", "account.follows.empty": "這位使用者尚未關注任何使用者。", "account.follows_you": "關注了你", "account.hide_reblogs": "隱藏來自 @{name} 的轉推", @@ -38,14 +40,15 @@ "account.requested": "正在等待核准。按一下取消關注請求", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示來自 @{name} 的嘟文", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", "account.unblock": "取消封鎖 @{name}", "account.unblock_domain": "取消隱藏 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消靜音 @{name}", "account.unmute_notifications": "重新接收來自 @{name} 的通知", - "account_note.placeholder": "Click to add a note", + "account.view_full_profile": "View full profile", + "account_note.placeholder": "按此添加備注", "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生了非預期的錯誤。", @@ -168,15 +171,15 @@ "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "請嘗試重新整理頁面。如果狀況沒有進展,您可以嘗試使用不同的瀏覽器或 Mastodon 應用程式來檢視。", "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。", - "generic.saved": "Saved", + "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", "getting_started.documentation": "文件", @@ -194,10 +197,13 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", + "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本", + "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", "home.hide_announcements": "隱藏公告", + "home.settings": "Column settings", "home.show_announcements": "顯示公告", "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", @@ -246,7 +252,7 @@ "keyboard_shortcuts.reply": "回覆", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "將焦點移至搜尋框", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示/隱藏在內容警告之後的正文", "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", @@ -266,10 +272,10 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增名單", "lists.new.title_placeholder": "新名單標題", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.all_replies": "任何跟隨的使用者", + "lists.replies_policy.list_replies": "列表成員", + "lists.replies_policy.no_replies": "沒有人", + "lists.replies_policy.title": "顯示回覆", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", "load_pending": "{count, plural, other {# 個新項目}}", @@ -277,9 +283,9 @@ "media_gallery.toggle_visible": "切換可見性", "missing_indicator.label": "找不到", "missing_indicator.sublabel": "找不到此資源", - "mute_modal.duration": "Duration", + "mute_modal.duration": "持續時間", "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "無期限", "navigation_bar.apps": "封鎖的使用者", "navigation_bar.blocks": "封鎖使用者", "navigation_bar.bookmarks": "書籤", @@ -310,7 +316,7 @@ "notification.own_poll": "您的投票已結束", "notification.poll": "您投過的投票已經結束", "notification.reblog": "{name}轉嘟了你的嘟文", - "notification.status": "{name} just posted", + "notification.status": "{name} 剛剛嘟文", "notifications.clear": "清除通知", "notifications.clear_confirmation": "確定要永久清除你的通知嗎?", "notifications.column_settings.alert": "桌面通知", @@ -326,14 +332,14 @@ "notifications.column_settings.reblog": "轉嘟:", "notifications.column_settings.show": "在欄位中顯示", "notifications.column_settings.sound": "播放音效", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "已跟隨使用者的最新動態", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", @@ -341,7 +347,7 @@ "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "picture_in_picture.restore": "還原", "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", @@ -387,13 +393,14 @@ "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", "search_results.total": "{count, number} 項結果", + "standalone.public_title": "A look inside...", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", "status.block": "封鎖 @{name}", "status.bookmark": "書籤", "status.cancel_reblog_private": "取消轉嘟", "status.cannot_reblog": "這篇嘟文無法被轉嘟", - "status.copy": "將連結複製到嘟文中", + "status.copy": "複製嘟文連結", "status.delete": "刪除", "status.detailed_status": "對話的詳細內容", "status.direct": "發送私訊給 @{name}", @@ -441,11 +448,11 @@ "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服務器的 {resource}", + "timeline_hint.resources.followers": "關注者", + "timeline_hint.resources.follows": "正在關注", + "timeline_hint.resources.statuses": "更早的嘟文", + "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", "trends.trending_now": "目前趨勢", "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。", "units.short.billion": "{count}B", @@ -458,7 +465,7 @@ "upload_form.audio_description": "簡單描述內容給聽障人士", "upload_form.description": "為視障人士增加文字說明", "upload_form.edit": "編輯", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "更改預覽圖", "upload_form.undo": "刪除", "upload_form.video_description": "簡單描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", @@ -468,7 +475,7 @@ "upload_modal.detect_text": "從圖片偵測文字", "upload_modal.edit_media": "編輯媒體", "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "準備 OCR 中……", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上傳中...", "video.close": "關閉影片", diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index f40e6c361..2fbf0ffd7 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -1,17 +1 @@ ---- -es: - activerecord: - attributes: - poll: - expires_at: Vencimiento - options: Opciones - errors: - models: - account: - attributes: - username: - invalid: sólo letras, números y guiones bajos - status: - attributes: - reblog: - taken: del estado ya existe +--- {} diff --git a/config/locales/activerecord.hi.yml b/config/locales/activerecord.hi.yml index d758a5b53..b002ab093 100644 --- a/config/locales/activerecord.hi.yml +++ b/config/locales/activerecord.hi.yml @@ -1 +1,17 @@ +--- hi: + activerecord: + attributes: + poll: + expires_at: समयसीमा + options: विकल्प + errors: + models: + account: + attributes: + username: + invalid: केवल अक्षर, संख्या और अंडरस्कोर + status: + attributes: + reblog: + taken: स्थिति पहले से मौजूद है diff --git a/config/locales/activerecord.hr.yml b/config/locales/activerecord.hr.yml index f67f33c7e..98ca8155f 100644 --- a/config/locales/activerecord.hr.yml +++ b/config/locales/activerecord.hr.yml @@ -1 +1,7 @@ +--- hr: + activerecord: + attributes: + poll: + expires_at: Krajnji rok + options: Opcije diff --git a/config/locales/activerecord.ku.yml b/config/locales/activerecord.ku.yml index cc251e86a..2fbf0ffd7 100644 --- a/config/locales/activerecord.ku.yml +++ b/config/locales/activerecord.ku.yml @@ -1 +1 @@ -ckb-IR: +--- {} diff --git a/config/locales/activerecord.sa.yml b/config/locales/activerecord.sa.yml new file mode 100644 index 000000000..07ea4372a --- /dev/null +++ b/config/locales/activerecord.sa.yml @@ -0,0 +1 @@ +sa: diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml index 8d142e7ac..67c160821 100644 --- a/config/locales/activerecord.sv.yml +++ b/config/locales/activerecord.sv.yml @@ -11,3 +11,7 @@ sv: attributes: username: invalid: endast bokstäver, siffror och understrykning + status: + attributes: + reblog: + taken: av status finns redan diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index fd71e36d2..4dea79b88 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -14,4 +14,4 @@ th: status: attributes: reblog: - taken: มีสถานะอยู่แล้ว + taken: ของสถานะมีอยู่แล้ว diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index 8ce55599c..336c83e7b 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -3,7 +3,7 @@ tr: activerecord: attributes: poll: - expires_at: Son Teslim Tarihi + expires_at: Bitiş zamanı options: Seçenekler errors: models: diff --git a/config/locales/activerecord.zgh.yml b/config/locales/activerecord.zgh.yml new file mode 100644 index 000000000..827155466 --- /dev/null +++ b/config/locales/activerecord.zgh.yml @@ -0,0 +1 @@ +zgh: diff --git a/config/locales/activerecord.zh-HK.yml b/config/locales/activerecord.zh-HK.yml index c968e55aa..89c3fa02d 100644 --- a/config/locales/activerecord.zh-HK.yml +++ b/config/locales/activerecord.zh-HK.yml @@ -4,7 +4,7 @@ zh-HK: attributes: poll: expires_at: 截止時間 - options: 選擇 + options: 選項 errors: models: account: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index b82b030a3..44ada75d1 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -45,6 +45,7 @@ ar: silenced: 'سيتم إخفاء المنشورات القادمة من هذه الخوادم في الخيوط الزمنية والمحادثات العامة، ولن يتم إنشاء أي إخطارات من جراء تفاعلات مستخدميها، ما لم تُتَابعهم:' silenced_title: الخوادم المكتومة suspended: 'لن يتم معالجة أي بيانات قادمة من هذه الخوادم أو تخزينها أو تبادلها، مما سيجعل أي تفاعل أو اتصال مع المستخدمين والمستخدمات المنتمين إلى هذه الخوادم مستحيلة:' + suspended_title: الخوادم المعلَّقة unavailable_content_html: يسمح لك ماستدون عموماً بعرض محتوى المستخدمين القادم من أي خادم آخر في الفديفرس والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم بالذات. user_count_after: few: مستخدمين @@ -441,6 +442,14 @@ ar: expired: المنتهي صلاحيتها title: التصفية title: الدعوات + ip_blocks: + expires_in: + '1209600': أسبوعان + '15778476': 6 أشهر + '2629746': شهر واحد + '31556952': سنة واحدة + '86400': يوم واحد + '94670856': 3 سنوات pending_accounts: title: الحسابات المعلقة (%{count}) relationships: @@ -613,6 +622,7 @@ ar: tags: accounts_today: استخدامات هذا اليوم accounts_week: استخدامات هذا الأسبوع + breakdown: توزيع استخدام اليوم حسب المصدر context: السياق directory: في دليل حسابات المستخدمين in_directory: "%{count} في سجل حسابات المستخدمين" @@ -1212,21 +1222,15 @@ ar: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: قم بإدخال الرمز المُوَلّد عبر تطبيق المصادقة للتأكيد - description_html: في حال تفعيل المصادقة بخطوتين ، فتسجيل الدخول يتطلب منك أن يكون بحوزتك هاتفك النقال قصد توليد الرمز الذي سيتم إدخاله. disable: تعطيل - enable: تفعيل enabled: نظام المصادقة بخطوتين مُفعَّل enabled_success: تم تفعيل المصادقة بخطوتين بنجاح generate_recovery_codes: توليد رموز الاسترجاع - instructions_html: "قم بمسح رمز الكيو آر عبر Google Authenticator أو أي تطبيق TOTP على جهازك. من الآن فصاعدا سوف يقوم ذاك التطبيق بتوليد رموز يجب عليك إدخالها عند تسجيل الدخول." lost_recovery_codes: تُمكّنك رموز الاسترجاع الاحتياطية مِن استرجاع النفاذ إلى حسابك في حالة فقدان جهازك المحمول. إن ضاعت منك هذه الرموز فبإمكانك إعادة توليدها مِن هنا و إبطال الرموز القديمة. - manual_instructions: 'في حالة تعذّر مسح رمز الكيو آر أو طُلب منك إدخال يدوي، يُمْكِنك إدخال هذا النص السري على التطبيق:' recovery_codes: النسخ الاحتياطي لرموز الاسترجاع recovery_codes_regenerated: تم إعادة توليد رموز الاسترجاع الاحتياطية بنجاح recovery_instructions_html: إن فقدت الوصول إلى هاتفك، يمكنك استخدام أحد رموز الاسترداد أدناه لاستعادة الوصول إلى حسابك. حافظ على رموز الاسترداد بأمان. يمكنك ، على سبيل المثال ، طباعتها وتخزينها مع مستندات أخرى هامة. - setup: تنشيط - wrong_code: الرمز الذي أدخلته غير صالح! تحقق من صحة الوقت على الخادم و الجهاز؟ + webauthn: مفاتيح الأمان user_mailer: backup_ready: explanation: لقد قمت بطلب نسخة كاملة لحسابك على ماستدون. إنها متوفرة الآن للتنزيل! @@ -1276,9 +1280,11 @@ ar: tips: نصائح title: أهلاً بك، %{name}! users: + blocked_email_provider: مزوّد خدمة البريد الإلكتروني هذا غير مسموح به follow_limit_reached: لا يمكنك متابعة أكثر مِن %{limit} أشخاص generic_access_help_html: صادفت مشكلة في الوصول إلى حسابك؟ اتصل بـ %{email} للحصول على المساعدة invalid_email: عنوان البريد الإلكتروني غير صالح + invalid_email_mx: لا يبدو أن عنوان البريد الإلكتروني موجود invalid_otp_token: رمز المصادقة بخطوتين غير صالح invalid_sign_in_token: رمز الآمان غير صحيح otp_lost_help_html: إن فقدتَهُما ، يمكنك الاتصال بـ %{email} diff --git a/config/locales/ast.yml b/config/locales/ast.yml index d88347f5b..59dd30bed 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -199,6 +199,7 @@ ast: description: suffix: "¡Con una cuenta, vas ser a siguir a persones, espublizar anovamientos ya intercambiar mensaxes con usuarios de cualesquier sirvidor de Mastodon y más!" didnt_get_confirmation: "¿Nun recibiesti les instrucciones de confirmación?" + dont_have_your_security_key: "¿Nun tienes una clave de seguranza?" forgot_password: "¿Escaeciesti la contraseña?" login: Aniciar sesión migrate_account: Mudase a otra cuenta @@ -437,6 +438,7 @@ ast: preferences: Preferencies profile: Perfil two_factor_authentication: Autenticación en dos pasos + webauthn_authentication: Claves d'autenticación spam_check: spam_detected: Esto ye un informe automatizáu. Deteutóse spam. statuses: @@ -483,15 +485,14 @@ ast: default: Mastodon mastodon-light: Claridá two_factor_authentication: - code_hint: Introduz el códigu xeneráu pola aplicación autenticadora pa confirmar disable: Desactivar enabled: L'autenticación en dos pasos ta activada enabled_success: L'autenticación en dos pasos activóse con ésitu generate_recovery_codes: Xenerar códigos de recuperación lost_recovery_codes: Los códigos de recuperación permítente recuperar l'accesu a la cuenta si pierdes el teléfonu. Si tamién pierdes estos códigos, pues rexeneralos equí. Los códigos de recuperación vieyos van invalidase. - manual_instructions: 'Si nun pues escaniar el códigu QR y precises introducilu a mano, equí ta''l secretu en testu planu:' recovery_codes: Códigos de recuperación recovery_codes_regenerated: Los códigos de recuperación rexeneráronse con ésitu + webauthn: Claves d'autenticación user_mailer: warning: explanation: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 4142d439f..9284f25bf 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -70,14 +70,6 @@ bg: blocking: Списък на блокираните following: Списък на последователите upload: Качване - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day media_attachments: validations: images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения @@ -138,10 +130,7 @@ bg: formats: default: "%d %b, %Y, %H:%M" two_factor_authentication: - description_html: При активация на двустепенно удостоверяване, за да влезеш в приложението, ще трябва да използваш телефона си. През него ще се генерира код, който да въвеждаш при влизане. disable: Деактивирай - enable: Активирай - instructions_html: "Сканирай този QR код с Google Authenticator или подобно приложение от своя телефон. Oтсега нататък, това приложение ще генерира код, който ще трябва да въвеждаш при всяко влизане." users: invalid_email: E-mail адресът е невалиден invalid_otp_token: Невалиден код diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 3b575100f..0cf936d68 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -21,7 +21,9 @@ bn: federation_hint_html: "%{instance}তে একটা নিবন্ধন থাকলে আপনি যেকোনো মাস্টাডন বা এধরণের অন্যান্য সার্ভারের মানুষের সাথে যুক্ত হতে পারবেন ।" get_apps: মোবাইল এপ্প একটা ব্যবহার করতে পারেন hosted_on: এই মাস্টাডনটি আছে %{domain} এ - instance_actor_flash: এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। + instance_actor_flash: 'এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। + +' learn_more: বিস্তারিত জানুন privacy_policy: গোপনীয়তা নীতি see_whats_happening: কী কী হচ্ছে দেখুন @@ -38,8 +40,11 @@ bn: domain: সার্ভার reason: কারণ rejecting_media: 'এই সার্ভারগুলি থেকে মিডিয়া ফাইলগুলি প্রক্রিয়া করা বা সংরক্ষণ করা হবে না এবং কোনও থাম্বনেইল প্রদর্শিত হবে না, মূল ফাইলটিতে ম্যানুয়াল ক্লিক-মাধ্যমে প্রয়োজন:' + rejecting_media_title: ফিল্টার করা মিডিয়া silenced: 'এই সার্ভারগুলির পোস্টগুলি জনসাধারণের টাইমলাইন এবং কথোপকথনে লুকানো থাকবে এবং আপনি যদি তাদের অনুসরণ না করেন তবে তাদের ব্যবহারকারীর ইন্টারঅ্যাকশন থেকে কোনও বিজ্ঞপ্তি উত্পন্ন হবে না:' + silenced_title: নীরব করা সার্ভার suspended: 'এই সার্ভারগুলি থেকে কোনও ডেটা প্রক্রিয়াজাতকরণ, সংরক্ষণ বা আদান-প্রদান করা হবে না, এই সার্ভারগুলির ব্যবহারকারীদের সাথে কোনও মিথস্ক্রিয়া বা যোগাযোগকে অসম্ভব করে তুলেছে:' + suspended_title: স্থগিত করা সার্ভার unavailable_content_html: ম্যাস্টোডন সাধারণত আপনাকে ফেদিভার্স এ অন্য কোনও সার্ভারের ব্যবহারকারীদের থেকে সামগ্রী দেখতে এবং তাদের সাথে আলাপচারিতা করার অনুমতি দেয়। এই ব্যতিক্রম যে এই বিশেষ সার্ভারে তৈরি করা হয়েছে। user_count_after: one: ব্যবহারকারী @@ -76,6 +81,7 @@ bn: roles: admin: পরিচালক bot: রোবট + group: গোষ্ঠী moderator: পরিচালক unavailable: প্রোফাইল অনুপলব্ধ unfollow: অনুসরণ বাদ @@ -89,6 +95,7 @@ bn: delete: মুছে ফেলা destroyed_msg: প্রশাসনবস্তুত লেখাটি সঠিকভাবে মুছে ফেলা হয়েছে! accounts: + add_email_domain_block: নিষিদ্ধ করা ই-মেইল ডোমেইন approve: অনুমোদন দিন approve_all: প্রত্যেক কে অনুমতি দিন are_you_sure: আপনি কি নিশ্চিত ? @@ -169,6 +176,7 @@ bn: staff: কর্মী user: ব্যবহারকারী search: অনুসন্ধান + search_same_email_domain: একই ইমেল ডোমেন সহ অন্যান্য ব্যবহারকারীরা search_same_ip: একই IP সহ অন্যান্য ব্যবহারকারীরা shared_inbox_url: ভাগ করা ইনবক্স URL show: @@ -190,8 +198,149 @@ bn: web: ওয়েব whitelisted: সাদাতালিকাযুক্ত action_logs: + action_types: + assigned_to_self_report: রিপোর্ট বরাদ্দ করুন + change_email_user: ব্যবহারকারী জন্য ইমেইল পরিবর্তন করুন + confirm_user: ব্যবহারকারী নিশ্চিত করুন + create_account_warning: সতর্কতা তৈরি করুন + create_announcement: ঘোষণা তৈরি করুন + create_custom_emoji: স্বনির্ধারিত ইমোজি তৈরি করুন + create_domain_allow: ডোমেন অনুমোদন তৈরি করুন + create_domain_block: ডোমেন ব্লক তৈরি করুন + create_email_domain_block: ইমেইল ডোমেন ব্লক তৈরি করুন + demote_user: ব্যবহারকারী কে হীনপদস্থ করুন + destroy_announcement: ঘোষণা মুছুন + destroy_custom_emoji: স্বনির্ধারিত ইমোজি মুছুন + destroy_domain_allow: ডোমেন অনুমোদন মুছুন + destroy_domain_block: ডোমেন ব্লক মুছুন + destroy_email_domain_block: ইমেইল ডোমেন ব্লক মুছুন + destroy_status: স্ট্যাটাস মুছুন + disable_2fa_user: 2FA নিষ্ক্রিয় করুন + disable_custom_emoji: স্বনির্ধারিত ইমোজি নিষ্ক্রিয় করুন + disable_user: ব্যবহারকারী কে নিষ্ক্রিয় করুন + enable_custom_emoji: স্বনির্ধারিত ইমোজি সক্রিয় করুন + enable_user: ব্যবহারকারী কে সক্রিয় করুন + memorialize_account: মেমোরিয়ালাইজ অ্যাকাউন্ট + promote_user: ব্যবহারকারী কে পদোন্নতি করুন + remove_avatar_user: অবতার অপসারণ করুন + reopen_report: প্রতিবেদনটি পুনরায় খুলুন + reset_password_user: পাসওয়ার্ড পুনঃস্থাপন করুন + resolve_report: প্রতিবেদনটি সমাধান করুন + silence_account: অ্যাকাউন্ট নীরব করুন + suspend_account: অ্যাকাউন্ট স্থগিত করুন + unassigned_report: রিপোর্ট বরাদ্দ মুক্ত করুন + unsilence_account: অ্যাকাউন্ট নীরব মুক্ত করুন + unsuspend_account: অ্যাকাউন্ট স্থগিতমুক্ত করুন + update_announcement: ঘোষণা আপডেট করুন + update_custom_emoji: স্বনির্ধারিত ইমোজি আপডেট করুন + update_status: স্থিতি আপডেট করুন actions: assigned_to_self_report: "%{name} তাদের জন্য %{target} রিপোর্ট অর্পণ করেছিলেন" + change_email_user: "%{name} %{target} ব্যবহারকারীর ইমেল ঠিকানা পরিবর্তন করেছেন" + confirm_user: "%{name} %{target} ব্যবহারকারীর ইমেল ঠিকানা নিশ্চিত করেছেন" + create_account_warning: "%{name} %{target} একটি সতর্কতা প্রেরণ করেছেন" + create_announcement: "%{name} একটি নতুন ঘোষণা তৈরি করেছেন %{target}" + create_custom_emoji: "%{name} নতুন ইমোজি আপলোড করেছেন %{target}" + create_domain_allow: "%{name} ডোমেন %{target} এর সঙ্গে ফেডারেশন অনুমোদিত করেছেন" + create_domain_block: "%{name} ডোমেন %{target} কে অবরুদ্ধ করেছেন" + create_email_domain_block: "%{name} ই-মেইল ডোমেন %{target} কে অবরুদ্ধ করেছেন" + demote_user: "%{name} ব্যবহারকারী %{target} কে হীনপদস্থ করেছেন" + custom_emojis: + destroyed_msg: ইমোজো সফলভাবে ধ্বংস হয়েছে! + disable: অক্ষম + disabled: অক্ষমিত + disabled_msg: সফলভাবে সেই ইমোজি অক্ষম করা হয়েছে + emoji: ইমোজি + enable: সক্রিয় + enabled: সক্রিয় + enabled_msg: সফলভাবে সেই ইমোজি সক্ষম করা হয়েছে + image_hint: ৫০কেবি অবধি পিএনজি + list: তালিকা + listed: তালিকাভুক্ত + new: + title: নতুন স্বনির্ধারিত ইমোজি যোগ করুন + not_permitted: আপনার এই ক্রিয়া সম্পাদন করার অনুমতি নেই + overwrite: পুনর্লিখন + shortcode: শর্টকোড + shortcode_hint: কমপক্ষে ২ টি অক্ষর, কেবলমাত্র বর্ণানুক্রমিক অক্ষর এবং আন্ডারস্কোর + title: স্বনির্ধারিত ইমোজিগুলি + uncategorized: শ্রেণীবিহীন + unlist: তালিকামুক্ত + unlisted: তালিকামুক্ত + update_failed_msg: সেই ইমোজি আপডেট করতে পারেনি + updated_msg: ইমোজি সফলভাবে আপডেট হয়েছে! + upload: আপলোড + dashboard: + authorized_fetch_mode: সুরক্ষিত মোড + backlog: ব্যাকলগ জবগুলি + config: কনফিগারেশন + feature_deletions: মোছা অ্যাকাউন্টগুলি + feature_invites: আমন্ত্রণ লিঙ্কগুলি + feature_profile_directory: প্রোফাইল ডিরেক্টরি + feature_registrations: নিবন্ধনগুলি + feature_relay: ফেডারেশন রিলে + feature_spam_check: বিরোধী স্প্যাম + feature_timeline_preview: পূর্বদর্শন সময়রেখা + features: বৈশিষ্ট্যগুলি + hidden_service: লুকানো সেবা সহ ফেডারেশন + open_reports: খোলার রিপোর্টগুলি + pending_tags: যে হ্যাশট্যাগগুলি পুনঃমূল্যায়নার জন্য অপেক্ষা করছে + pending_users: যে ব্যবহারকারী পুনঃমূল্যায়নার জন্য অপেক্ষা করছে + recent_users: সাম্প্রতিক ব্যবহারকারীরা + search: সম্পূর্ণ পাঠ্য অনুসন্ধান + single_user_mode: একক ব্যবহারকারী মোড + software: সফটওয়্যার + space: স্থান ব্যবহার + title: ড্যাশবোর্ড + total_users: মোট ব্যবহারকারী + trends: প্রবণতাগুলি + week_interactions: এই সপ্তাহে মিথষ্ক্রিয়াগুলি + week_users_active: এই সপ্তাহে সক্রিয় ব্যাবহারকারিরা + week_users_new: এই সপ্তাহে ব্যাবহারকারিরা + whitelist_mode: সীমিত ফেডারেশন মোড + instances: + moderation: + limited: সীমিত + title: প্রশাসনা + private_comment: ব্যক্তিগত মন্তব্য + public_comment: জনমত + title: ফেডারেশন + total_blocked_by_us: আমাদের দ্বারা অবরুদ্ধ + total_followed_by_them: তাদের দ্বারা অনুসরণ + total_followed_by_us: আমাদের দ্বারা অনুসরণ + total_reported: তাদের সম্পর্কে রিপোর্ট + total_storage: মিডিয়া সংযুক্তিগুলি + invites: + deactivate_all: সব নিষ্ক্রিয় করুন + filter: + all: সব + available: সহজলভ্য + expired: মেয়াদোত্তীর্ণ + title: ফিল্টার + title: আমন্ত্রণগুলি + pending_accounts: + title: মুলতুবি থাকা অ্যাকাউন্টগুলি (%{count}) + relationships: + title: "%{acct} এর সম্পর্কগুলি" + relays: + add_new: নতুন রিলে যোগ করুন + delete: মুছুন + description_html: একটি ফেডারেশন রিলে একটি মধ্যস্থতাকারী সার্ভার যা সাবস্ক্রাইব করে এটিতে প্রকাশ করে এমন সার্ভারের মধ্যে প্রচুর পরিমাণে সর্বজনীন টটস বিনিময় করে। এটি ক্ষুদ্র ও মাঝারি সার্ভারগুলিকে ফেডাইভার্স থেকে সামগ্রী আবিষ্কার করতে সহায়তা করতে পারে, অন্যথায় স্থানীয় ব্যবহারকারীদের ম্যানুয়ালি অন্য লোককে দূরবর্তী সার্ভারে অনুসরণ করতে হবে। + disable: অক্ষম + disabled: অক্ষমিত + enable: সক্রিয় + enable_hint: একবার সক্ষম হয়ে গেলে, আপনার সার্ভার এই রিলে থেকে সমস্ত পাবলিক টুটগুলিতে সাবস্ক্রাইব করবে এবং এতে এই সার্ভারের সর্বজনীন টটগুলি প্রেরণ শুরু করবে। + enabled: সক্রিয়কৃত + inbox_url: রিলে ইউআরএল + pending: রিলের অনুমোদনের অপেক্ষায় + save_and_enable: সংরক্ষণ করুন এবং সক্ষম করুন + setup: রিলে সংযোগ সেটআপ করুন + signatures_not_enabled: সুরক্ষিত মোড বা সীমিত ফেডারেশন মোড সক্ষম থাকা অবস্থায় রিলেগুলি সঠিকভাবে কাজ করবে না + status: অবস্থা + title: রিলেগুলি + report_notes: + created_msg: রিপোর্ট নোট সফলভাবে তৈরি করা হয়েছে! + destroyed_msg: রিপোর্ট নোট সফলভাবে মোছা হয়েছে! errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -202,13 +351,5 @@ bn: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day verification: verification: সত্যতা নির্ধারণ diff --git a/config/locales/br.yml b/config/locales/br.yml index 5da24d25c..451bbade8 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -11,11 +11,39 @@ br: learn_more: Gouzout hiroc'h privacy_policy: Reolennoù prevezded source_code: Boneg tarzh + status_count_after: + few: toud + many: toud + one: toud + other: toud + two: toud terms: Divizoù gwerzhañ hollek unavailable_content_description: domain: Dafariad + user_count_after: + few: implijer·ez + many: implijer·ez + one: implijer·ez + other: implijer·ez + two: implijer·ez + what_is_mastodon: Petra eo Mastodon? accounts: + follow: Heuliañ + followers: + few: Heulier·ez + many: Heulier·ez + one: Heulier·ez + other: Heulier·ez + two: Heulier·ez + following: O heuliañ media: Media + never_active: Birviken + posts: + few: Toud + many: Toud + one: Toud + other: Toud + two: Toud posts_tab_heading: Toudoù posts_with_replies: Toudoù ha respontoù roles: @@ -29,11 +57,15 @@ br: account_moderation_notes: delete: Dilemel accounts: + by_domain: Domani change_email: current_email: Postel bremanel label: Kemm ar postel new_email: Postel nevez submit: Kemm ar postel + deleted: Dilamet + domain: Domani + email: Postel enable: Gweredekaat enabled: Gweredekaet followers: Heulier·ezed·ien @@ -58,7 +90,14 @@ br: admin: Merour moderator: Habaskaer·ez user: Implijer·ez + search: Klask + suspended: Astalet + title: Kontoù + username: Anv + web: Web action_logs: + action_types: + destroy_status: Dilemel ar statud deleted_status: "(statud dilemet)" announcements: new: @@ -66,15 +105,19 @@ br: title: Kemenn nevez title: Kemennoù custom_emojis: + by_domain: Domani + copy: Eilañ delete: Dilemel disable: Diweredekaat disabled: Diweredekaet emoji: Fromlun enable: Gweredekaat enabled: Gweredekaet + list: Listenn dashboard: config: Kefluniadur software: Meziant + title: Taolenn labour trends: Luskadoù domain_blocks: domain: Domani @@ -100,11 +143,50 @@ br: by_domain: Domani moderation: all: Pep tra + invites: + filter: + available: Hegerzh + relays: + delete: Dilemel + disable: Diweredekaat + disabled: Diweredekaet + enable: Gweredekaat + enabled: Gweredekaet + save_and_enable: Enrollañ ha gweredekaat + status: Toud + reports: + account: + notes: + few: "%{count} a notennoù" + many: "%{count} a notennoù" + one: "%{count} a notennoù" + other: "%{count} a notennoù" + two: "%{count} a notennoù" + are_you_sure: Ha sur oc'h? + notes: + delete: Dilemel + status: Statud + updated_at: Nevesaet settings: domain_blocks: all: D'an holl dud site_title: Anv ar servijer title: Arventennoù al lec'hienn + statuses: + batch: + delete: Dilemel + deleted: Dilamet + media: + title: Media + no_media: Media ebet + tags: + name: Ger-klik + title: Gerioù-klik + warning_presets: + add_new: Ouzhpenniñ unan nevez + delete: Dilemel + application_mailer: + salutation: "%{name}," auth: change_password: Ger-tremen delete_account: Dilemel ar gont @@ -116,18 +198,27 @@ br: security: Diogelroez setup: title: Kefluniañ + status: + account_status: Statud ar gont authorize_follow: + follow: Heuliañ title: Heuliañ %{acct} challenge: confirm: Kenderc' hel invalid_password: Ger-tremen diwiriek + date: + formats: + default: "%d %b %Y" + with_month_name: "%d a viz %B %Y" datetime: distance_in_words: about_x_hours: "%{count}e" about_x_months: "%{count}miz" about_x_years: "%{count}b" almost_x_years: "%{count}b" + half_a_minute: Diouzhtu less_than_x_minutes: "%{count}m" + less_than_x_seconds: Diouzhtu over_x_years: "%{count}b" x_days: "%{count}d" x_minutes: "%{count}m" @@ -147,6 +238,12 @@ br: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. + exports: + archive_takeout: + date: Deiziad + size: Ment + csv: CSV + lists: Listennoù featured_tags: add_new: Ouzhpenniñ unan nevez filters: @@ -155,6 +252,7 @@ br: notifications: Kemennoù index: delete: Dilemel + title: Siloù footer: developers: Diorroerien more: Muioc'h… @@ -163,11 +261,13 @@ br: copy: Eilañ delete: Dilemel order_by: Urzhiañ dre + identity_proofs: + identity: Identelezh invites: expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour + '1800': 30 munutenn + '21600': 6 eur + '3600': 1 eur '43200': 12 eur '604800': 1 sizhun '86400': 1 deiz @@ -178,8 +278,18 @@ br: title: Heulier nevez mention: action: Respont + number: + human: + decimal_units: + format: "%n%u" + otp_authentication: + enable: Gweredekaat + setup: Kefluniañ + pagination: + truncate: "…" relationships: followers: Heulier·ezed·ien + following: O heuliañ sessions: browser: Merdeer browsers: @@ -189,6 +299,7 @@ br: edge: Microsoft Edge electron: Electron firefox: Firefox + generic: Merdeer dianav ie: Internet Explorer micro_messenger: MicroMessenger nokia: Nokia S40 Ovi Browser @@ -199,6 +310,7 @@ br: safari: Safari uc_browser: UCBrowser weibo: Weibo + description: "%{browser} war %{platform}" ip: IP platforms: adobe_air: Adobe Air @@ -209,8 +321,33 @@ br: ios: iOS linux: Linux mac: macOS + other: savenn dianav windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + settings: + account: Kont + account_settings: Arventennoù ar gont + development: Diorren + edit_profile: Aozañ ar profil + import: Enporzhiañ + import_and_export: Enporzhiañ hag ezporzhiañ + preferences: Gwellvezioù + profile: Profil statuses: + attached: + image: + few: "%{count} skeudenn" + many: "%{count} skeudenn" + one: "%{count} skeudenn" + other: "%{count} skeudenn" + two: "%{count} skeudenn" + video: + few: "%{count} video" + many: "%{count} video" + one: "%{count} video" + other: "%{count} video" + two: "%{count} video" show_more: Diskouez muioc'h title: '%{name}: "%{quote}"' visibilities: @@ -225,12 +362,15 @@ br: default: "%He%M, %d %b %Y" month: "%b %Y" two_factor_authentication: + add: Ouzhpennañ disable: Diweredekaat - enable: Gweredekaat - setup: Kefluniañ + edit: Aozañ user_mailer: warning: title: none: Diwall welcome: edit_profile_action: Kefluniañ ar profil + subject: Donemat e Mastodoñ + webauthn_credentials: + delete: Dilemel diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 10bb1269b..1d2d7d910 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -98,6 +98,7 @@ ca: add_email_domain_block: Afegir el domini de correu a la llista negra approve: Aprova approve_all: Aprova'ls tots + approved_msg: L’aplicació del registre de %{username} s’ha aprovat amb èxit are_you_sure: N'estàs segur? avatar: Avatar by_domain: Domini @@ -111,8 +112,10 @@ ca: confirm: Confirma confirmed: Confirmat confirming: Confirmant + delete: Esborra les dades deleted: Esborrats demote: Degrada + destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu disable: Inhabilita disable_two_factor_authentication: Desactiva 2FA disabled: Inhabilitat @@ -123,6 +126,7 @@ ca: email_status: Estat de l'adreça electrònica enable: Habilita enabled: Habilitat + enabled_msg: El compte de %{username} s’ha descongelat amb èxit followers: Seguidors follows: Segueix header: Capçalera @@ -138,6 +142,8 @@ ca: login_status: Estat d'accés media_attachments: Adjunts multimèdia memorialize: Converteix-lo en memorial + memorialized: Memorialitzat + memorialized_msg: S’ha canviat amb èxit a memorialitzat el compte de %{username} moderation: active: Actiu all: Tot @@ -158,10 +164,14 @@ ca: public: Públic push_subscription_expires: La subscripció PuSH expira redownload: Actualitza el perfil + redownloaded_msg: El perfil de %{username} s’ha refrescat des de l’origen amb èxit reject: Rebutja reject_all: Rebutja'ls tots + rejected_msg: L’aplicació de registre de %{username} s’ha rebutjat amb èxit remove_avatar: Eliminar avatar remove_header: Treu la capçalera + removed_avatar_msg: S’ha suprimit amb èxit l’imatge d’acabar de %{username} + removed_header_msg: S’ha suprimit amb èxit l’imatge de capçalera de %{username} resend_confirmation: already_confirmed: Aquest usuari ja està confirmat send: Reenviar el correu electrònic de confirmació @@ -178,6 +188,8 @@ ca: search: Cerca search_same_email_domain: Altres usuaris amb el mateix domini de correu search_same_ip: Altres usuaris amb la mateixa IP + sensitive: Sensible + sensitized: marcar com a sensible shared_inbox_url: URL de la safata d'entrada compartida show: created_reports: Informes creats @@ -187,13 +199,19 @@ ca: statuses: Tuts subscribe: Subscriu suspended: Suspès + suspension_irreversible: Les dades d’aquest compte s’han suprimit irreversiblament. Pots desfer la suspensió del compte per a fer-lo usable però això no recuperarà les dades si és que en tenia. + suspension_reversible_hint_html: El compte ha estat suspès i les dades seran totalment suprimides el %{date}. Fins llavors, el compte pot ser restaurat sense problemes. Si vols suprimir immediatament totes les dades del compte, ho pots fer a continuació. time_in_queue: Esperant en la cua %{time} title: Comptes unconfirmed_email: Correu electrònic sense confirmar + undo_sensitized: Desmarcar com a sensible undo_silenced: Deixa de silenciar undo_suspension: Desfés la suspensió + unsilenced_msg: El compte de %{username} ha estat il·limitat amb èxit unsubscribe: Cancel·la la subscripció + unsuspended_msg: S’ha desfet amb èxit la suspensió del compte de %{username} username: Nom d'usuari + view_domain: Veure el resumen del domini warn: Avís web: Web whitelisted: Llista blanca @@ -208,12 +226,14 @@ ca: create_domain_allow: Crea un domini permès create_domain_block: Crea un bloqueig de domini create_email_domain_block: Crea un bloqueig de domini d'adreça de correu + create_ip_block: Crear regla IP demote_user: Degrada l'usuari destroy_announcement: Esborra l'anunci destroy_custom_emoji: Esborra l'emoji personalitzat destroy_domain_allow: Esborra el domini permès destroy_domain_block: Esborra el bloqueig de domini destroy_email_domain_block: Esborra el bloqueig de domini de l'adreça de correu + destroy_ip_block: Eliminar regla IP destroy_status: Esborra el tut disable_2fa_user: Desactiva 2FA disable_custom_emoji: Desactiva l'emoji personalitzat @@ -226,9 +246,11 @@ ca: reopen_report: Reobre l'informe reset_password_user: Restableix la contrasenya resolve_report: Resolt l'informe + sensitive_account: Marcar els mèdia en el teu compte com a sensibles silence_account: Silencia el compte suspend_account: Suspèn el compte unassigned_report: Des-assigna l'informe + unsensitive_account: Desmarcar els mèdia en el teu compte com a sensibles unsilence_account: Desfés el silenci del compte unsuspend_account: Desfés la suspensió del compte update_announcement: Actualitza l'anunci @@ -244,12 +266,14 @@ ca: create_domain_allow: "%{name} ha afegit a la llista blanca el domini %{target}" create_domain_block: "%{name} ha blocat el domini %{target}" create_email_domain_block: "%{name} ha afegit a la llista negra el domini del correu electrònic %{target}" + create_ip_block: "%{name} ha creat una regla IP per a %{target}" demote_user: "%{name} ha degradat l'usuari %{target}" destroy_announcement: "%{name} ha eliminat l'anunci %{target}" destroy_custom_emoji: "%{name} ha destruït l'emoji %{target}" destroy_domain_allow: "%{name} ha eliminat el domini %{target} de la llista blanca" destroy_domain_block: "%{name} ha desblocat el domini %{target}" destroy_email_domain_block: "%{name} ha afegit a la llista negra el domini de correu electrònic %{target}" + destroy_ip_block: "%{name} ha esborrat la regla IP per a %{target}" destroy_status: "%{name} eliminat l'estat per %{target}" disable_2fa_user: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}" disable_custom_emoji: "%{name} ha desactivat l'emoji %{target}" @@ -262,9 +286,11 @@ ca: reopen_report: "%{name} ha reobert l'informe %{target}" reset_password_user: "%{name} ha restablert la contrasenya de l'usuari %{target}" resolve_report: "%{name} ha resolt l'informe %{target}" + sensitive_account: "%{name} ha marcat els mèdia de %{target} com a sensibles" silence_account: "%{name} ha silenciat el compte de %{target}" suspend_account: "%{name} ha suspès el compte de %{target}" unassigned_report: "%{name} ha des-assignat l'informe %{target}" + unsensitive_account: "%{name} ha desmarcat els mèdia de %{target} com a sensibles" unsilence_account: "%{name} ha silenciat el compte de %{target}" unsuspend_account: "%{name} ha llevat la suspensió del compte de %{target}" update_announcement: "%{name} ha actualitzat l'anunci %{target}" @@ -434,6 +460,21 @@ ca: expired: Caducat title: Filtre title: Convida + ip_blocks: + add_new: Crear regla + created_msg: S’ha afegit amb èxit la nova regla IP + delete: Suprimeix + expires_in: + '1209600': 2 setmanes + '15778476': 6 mesos + '2629746': 1 mes + '31556952': 1 any + '86400': 1 dia + '94670856': 3 anys + new: + title: Crea nova regla IP + no_ip_block_selected: No s’ha canviat cap regla IP perquè no s’han seleccionat + title: Regles IP pending_accounts: title: Comptes pendents (%{count}) relationships: @@ -681,8 +722,11 @@ ca: prefix_sign_up: Registra't avui a Mastodon! suffix: Amb un compte seràs capaç de seguir persones, publicar i intercanviar missatges amb usuaris de qualsevol servidor de Mastodon i més! didnt_get_confirmation: No has rebut el correu de confirmació? + dont_have_your_security_key: No tens la teva clau de seguretat? forgot_password: Has oblidat la contrasenya? invalid_reset_password_token: L'enllaç de restabliment de la contrasenya no és vàlid o ha caducat. Torna-ho a provar. + link_to_otp: Introdueix el teu codi de doble factor des d’el teu mòbil o un codi de recuperació + link_to_webauth: Usa el teu dispositiu de clau de seguretat login: Inicia sessió logout: Surt migrate_account: Mou a un compte diferent @@ -708,6 +752,7 @@ ca: pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan sigui aprovada. redirecting_to: El teu compte és inactiu perquè actualment està redirigint a %{acct}. trouble_logging_in: Problemes per iniciar la sessió? + use_security_key: Usa clau de seguretat authorize_follow: already_following: Ja estàs seguint aquest compte already_requested: Ja has enviat una sol·licitud de seguiment a aquest usuari @@ -732,6 +777,7 @@ ca: date: formats: default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count} h" @@ -992,6 +1038,14 @@ ca: quadrillion: Q thousand: m trillion: T + otp_authentication: + code_hint: Introdueix el codi generat per l’aplicació d’autenticació per a confirmar + description_html: Si actives l’autenticació de factor doble usant l’aplicació d’autenticació, l’inici de sessió et requerirá tenir el teu mòbil, que generarà els tokens per a entrar. + enable: Activa + instructions_html: "Escaneja aquest codi QR en l'Autenticador de Google o una aplicació TOTP similar en el teu mòbil. Des d'ara, aquesta aplicació generarà tokens que hauràs d'introduir quan iniciïs sessió." + manual_instructions: 'Si no pots escanejar el codi QR i necessites introduir-lo manualment, aquí està el secret de text pla:' + setup: Configurar + wrong_code: El codi introduït no és vàlid! És correcta l'hora del servidor i la del dispositiu? pagination: newer: Més recent next: Endavant @@ -1116,6 +1170,7 @@ ca: profile: Perfil relationships: Seguits i seguidors two_factor_authentication: Autenticació de dos factors + webauthn_authentication: Claus de seguretat spam_check: spam_detected: Aquest és un informe automàtic. S'ha detectat spam. statuses: @@ -1154,6 +1209,8 @@ ca: other: "%{count} vots" vote: Vota show_more: Mostra'n més + show_newer: Mostra els més nous + show_older: Mostra els més vells show_thread: Mostra el fil sign_in_to_participate: Inicia la sessió per participar a la conversa title: '%{name}: "%{quote}"' @@ -1262,21 +1319,20 @@ ca: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Introdueix el codi generat per l'aplicació autenticadora per a confirmar - description_html: Si habilites l'autenticació de dos factors, et caldrà tenir el teu telèfon, que generarà tokens per a que puguis iniciar sessió. + add: Afegeix disable: Desactiva - enable: Activa + disabled_success: Autenticació de dos factors desactivada amb èxit + edit: Edita enabled: Autenticació de dos factors activada enabled_success: Autenticació de dos factors activada correctament generate_recovery_codes: Genera codis de recuperació - instructions_html: "Escaneja aquest codi QR desde Google Authenticator o una aplicació similar del teu telèfon. Desde ara, aquesta aplicació generarà tokens que tens que ingresar quan volguis iniciar sessió." lost_recovery_codes: Els codis de recuperació et permeten recuperar l'accés al teu compte si perds el telèfon. Si has perdut els codis de recuperació els pots tornar a generar aquí. S'anul·laran els codis de recuperació anteriors. - manual_instructions: 'Si no pots escanejar el codi QR i necessites introduir-lo manualment, aquí tens el secret en text pla:' + methods: Autenticació de dos factors + otp: Aplicació autenticadora recovery_codes: Codis de recuperació de còpia de seguretat recovery_codes_regenerated: Codis de recuperació regenerats amb èxit recovery_instructions_html: Si mai perds l'accés al teu telèfon pots utilitzar un dels codis de recuperació a continuació per a recuperar l'accés al teu compte. Cal mantenir els codis de recuperació en lloc segur. Per exemple, imprimint-los i guardar-los amb altres documents importants. - setup: Establir - wrong_code: El codi introduït no és vàlid! És correcta l'hora del servidor i del dispositiu? + webauthn: Claus de seguretat user_mailer: backup_ready: explanation: Has sol·licitat una copia completa del teu compte Mastodon. Ara ja està a punt per a descàrrega! @@ -1285,12 +1341,13 @@ ca: sign_in_token: details: 'Aquí es mostren els detalls del intent:' explanation: 'Hem detectat un intent d’inici de sessió al teu compte des d’una IP desconeguda. Si ets tu, si us plau introdueix el codi de seguretat a sota, en la pàgina de desafiament d’inici de sessió:' - further_actions: 'Si no has estat tu, si us plau canvia la contrasenya i activa l’autentificació de dos factors del teu compte. Pots fer-ho aquí:' + further_actions: 'Si no has estat tu, si us plau canvia la contrasenya i activa l’autenticació de dos factors del teu compte. Pots fer-ho aquí:' subject: Si us plau confirma l’intent d’inici de sessió title: Intent d’inici de sessió warning: explanation: disable: Mentre el teu compte estigui congelat les dades romandran intactes però no pots dur a terme cap acció fins que no estigui desbloquejat. + sensitive: Els fitxers multimèdia pujats i els enllaçats seran tractas com a sensibles. silence: Mentre el teu compte estigui limitat només les persones que ja et segueixen veuen les teves dades en aquest servidor i pots ser exclòs de diverses llistes públiques. No obstant això, d'altres encara poden seguir-te manualment. suspend: El teu compte s'ha suspès i tots els teus tuts i fitxers multimèdia penjats s'han eliminat de manera irreversible d'aquest servidor i dels servidors on tenies seguidors. get_in_touch: Pots respondre a aquest correu electrònic per a contactar amb el personal de %{instance}. @@ -1299,11 +1356,13 @@ ca: subject: disable: S'ha congelat el teu compte %{acct} none: Avís per a %{acct} + sensitive: El teu compte %{acct} de publicació de mèdia ha estat marcat com a sensible silence: El teu compte %{acct} ha estat limitat suspend: S'ha suspès el teu compte %{acct} title: disable: Compte congelat none: Avís + sensitive: Els teus mèdia han estat marcats com a sensibles silence: Compte limitat suspend: Compte suspès welcome: @@ -1324,9 +1383,11 @@ ca: tips: Consells title: Benvingut a bord, %{name}! users: + blocked_email_provider: Aquest proveïdor de correu electrònic no és permés follow_limit_reached: No pots seguir més de %{limit} persones generic_access_help_html: Problemes accedint al teu compte? Pots contactar amb %{email} per a demanar assistència invalid_email: L'adreça de correu no és correcta + invalid_email_mx: Sembla que l’adreça de correu electrònic no existeix invalid_otp_token: El codi de dos factors no és correcte invalid_sign_in_token: Codi de seguretat invàlid otp_lost_help_html: Si has perdut l'accés a tots dos pots contactar per %{email} @@ -1336,3 +1397,20 @@ ca: verification: explanation_html: 'Pots verificar-te com a propietari dels enllaços a les metadades del teu perfil. Per això, el lloc web enllaçat ha de contenir un enllaç al teu perfil de Mastodon. El vincle ha de tenir l''atribut rel="me". El contingut del text de l''enllaç no importa. Aquí tens un exemple:' verification: Verificació + webauthn_credentials: + add: Afegir nova clau de seguretat + create: + error: Hi ha hagut un problema en afegir la teva clau de seguretat. Tornau-ho a provar. + success: S'ha afegit correctament la teva clau de seguretat. + delete: Esborra + delete_confirmation: Segur que vols suprimir aquesta clau de seguretat? + description_html: Si actives l'autenticador amb clau de seguretat, l'inici de sessió et requerirà emprar un de les teves claus de seguretat. + destroy: + error: Hi ha hagut un problema al esborrar la teva clau de seguretat. Tornau-ho a provar. + success: La teva clau de seguretat s'ha esborrat correctament. + invalid_credential: Clau de seguretat invàlida + nickname_hint: Introdueix el sobrenom de la teva clau de seguretat nova + not_enabled: Encara no has activat WebAuthn + not_supported: Aquest navegador no suporta claus de seguretat + otp_required: Per emprar claus de seguretat si us plau activa primer l'autenticació de dos factors. + registered_on: Registrat en %{date} diff --git a/config/locales/co.yml b/config/locales/co.yml index b1d68b2d5..9fe3ecb1e 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -32,18 +32,18 @@ co: status_count_after: one: statutu other: statuti - status_count_before: chì anu pubblicatu + status_count_before: Chì anu pubblicatu tagline: Siguità amichi è scopre ancu di più altri terms: Cundizione di u serviziu unavailable_content: Cuntinutu micca dispunibule unavailable_content_description: domain: Servore - reason: 'Ragione:' - rejecting_media: I fugliali media da stu servore ùn saranu micca arregistrati è e vignette ùn saranu micca affissate, duverete cliccà manualmente per accede à l'altru servore è vedeli. + reason: Ragione + rejecting_media: 'I fugliali media da stu servore ùn saranu micca arregistrati è e vignette ùn saranu micca affissate, duverete cliccà manualmente per accede à l''altru servore è vedeli:' rejecting_media_title: Media filtrati - silenced: I statuti da stu servore ùn saranu mai visti tranne nant'a vostra pagina d'accolta s'e voi siguitate l'autore. + silenced: 'I statuti da stu servore ùn saranu mai visti tranne nant''a vostra pagina d''accolta s''e voi siguitate l''autore:' silenced_title: Servori silenzati - suspended: Ùn puderete micca siguità qualsiasi nant'à stu servore, i dati versu o da quallà ùn saranu mai accessi, scambiati o arregistrati. + suspended: 'Ùn puderete micca siguità qualsiasi nant''à stu servore, i dati versu o da quallà ùn saranu mai accessi, scambiati o arregistrati:' suspended_title: Servori suspesi unavailable_content_html: Mastodon vi parmette in generale di vede u cuntinutu è interagisce cù l'utilizatori di tutti l'altri servori di u fediversu. Quessi sò l'eccezzione fatte nant'à stu servore in particulare. user_count_after: @@ -98,6 +98,7 @@ co: add_email_domain_block: Mette u duminiu e-mail in lista nera approve: Appruvà approve_all: Appruvà tuttu + approved_msg: A dumanda d'arregistramente di %{username} hè stata appruvata are_you_sure: Site sicuru·a? avatar: Ritrattu di prufile by_domain: Duminiu @@ -111,8 +112,10 @@ co: confirm: Cunfirmà confirmed: Cunfirmata confirming: Cunfirmazione + delete: Sguassà dati deleted: Sguassatu demote: Ritrugradà + destroyed_msg: I dati di %{username} sò avà in fila d'attesa per esse tolti da quì à pocu disable: Disattivà disable_two_factor_authentication: Disattivà l’identificazione à 2 fattori disabled: Disattivatu @@ -121,11 +124,12 @@ co: edit: Mudificà email: E-mail email_status: Statutu di l’e-mail - enable: Attivà + enable: Riattivà enabled: Attivatu + enabled_msg: U contu di %{username} hè statu riattivatu followers: Abbunati follows: Abbunamenti - header: Intistatura + header: Ritrattu di cuprendula inbox_url: URL di l’inbox invited_by: Invitatu da ip: IP @@ -138,6 +142,8 @@ co: login_status: Statutu di cunnessione media_attachments: Media aghjunti memorialize: Trasfurmà in mimuriale + memorialized: Mimurializatu + memorialized_msg: U contu di %{username} hè statu trasfurmatu in una pagina mimuriale moderation: active: Attivu all: Tutti @@ -158,10 +164,14 @@ co: public: Pubblicu push_subscription_expires: Spirata di l’abbunamentu PuSH redownload: Mette à ghjornu u prufile + redownloaded_msg: U prufile di %{username} hè statu attualizatu da l'urighjine reject: Righjittà reject_all: Righjittà tutti + rejected_msg: A dumanda d'arregistramente di %{username} hè stata righjittata remove_avatar: Toglie l’avatar - remove_header: Toglie l'intistatura + remove_header: Toglie a cuprendula + removed_avatar_msg: U ritrattu di prufile di %{username} hè statu toltu + removed_header_msg: U ritrattu di cuprendula di %{username} hè statu toltu resend_confirmation: already_confirmed: St’utilizatore hè digià cunfirmatu send: Rimandà un’e-mail di cunfirmazione @@ -178,22 +188,30 @@ co: search: Cercà search_same_email_domain: Altri utilizatori cù listessu duminiu d'e-mail search_same_ip: Altri utilizatori cù listessa IP + sensitive: Sensibile + sensitized: indicatu cum’è sensibile shared_inbox_url: URL di l’inbox spartuta show: created_reports: Signalamenti fatti targeted_reports: Signalatu da l'altri silence: Silenzà - silenced: Silenzatu + silenced: Limitatu statuses: Statuti subscribe: Abbunassi suspended: Suspesu + suspension_irreversible: I dati di stu contu sò stati irreversibilamente sguassati. Pudete annullà a suspensione di u contu per u rende utilizabile ma ùn pudete micca ricuperà i dati pricedenti. + suspension_reversible_hint_html: U contu hè statu suspesu, è i so dati saranu sguassati u %{date}. Da quì à là, u contu pò esse ricuperatu senza prublemu. S'e voi vulete toglie tutti i dati di u contu avà, pudete fallu quì sottu. time_in_queue: 'Attesa in fila: %{time}' title: Conti unconfirmed_email: E-mail micca cunfirmatu + undo_sensitized: Annullà sensibile undo_silenced: Ùn silenzà più undo_suspension: Ùn suspende più + unsilenced_msg: A limitazione di u contu di %{username} hè stata annullata unsubscribe: Disabbunassi + unsuspended_msg: A suspensione di u contu di %{username} hè stata annullata username: Cugnome + view_domain: Vede un riassuntu per u duminiu warn: Averte web: Web whitelisted: In a lista bianca @@ -208,12 +226,14 @@ co: create_domain_allow: Creà Auturizazione di Duminiu create_domain_block: Creà Blucchime di Duminiu create_email_domain_block: Creà Blucchime di Duminiu E-mail + create_ip_block: Creà regula IP demote_user: Ritrugadà Utilizatore destroy_announcement: Toglie Annunziu destroy_custom_emoji: Toglie Emoji Persunalizata destroy_domain_allow: Toglie Auturizazione di Duminiu destroy_domain_block: Toglie Blucchime di Duminiu destroy_email_domain_block: Toglie blucchime di duminiu e-mail + destroy_ip_block: Toglie regula IP destroy_status: Toglie u statutu disable_2fa_user: Disattivà l’identificazione à 2 fattori disable_custom_emoji: Disattivà Emoji Persunalizata @@ -226,9 +246,11 @@ co: reopen_report: Riapre Signalamentu reset_password_user: Riinizializà Chjave d'Accessu resolve_report: Chjode Signalamentu + sensitive_account: Marcà i media di u vostru contu cum'è sensibili silence_account: Silenzà Contu suspend_account: Suspende Contu unassigned_report: Disassignà signalamentu + unsensitive_account: Ùn marcà più i media di u vostru contu cum'è sensibili unsilence_account: Ùn Silenzà Più u Contu unsuspend_account: Ùn Suspende Più u Contu update_announcement: Cambià Annunziu @@ -244,12 +266,14 @@ co: create_domain_allow: "%{name} hà messu u duminiu %{target} nant’a lista bianca" create_domain_block: "%{name} hà bluccatu u duminiu %{target}" create_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista nera" + create_ip_block: "%{name} hà creatu a regula IP %{target}" demote_user: "%{name} hà ritrugradatu l’utilizatore %{target}" destroy_announcement: "%{name} hà sguassatu u novu annunziu %{target}" destroy_custom_emoji: "%{name} hà sguassatu l'emoji %{target}" destroy_domain_allow: "%{name} hà sguassatu u duminiu %{target} da a lista bianca" destroy_domain_block: "%{name} hà sbluccatu u duminiu %{target}" destroy_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista bianca" + destroy_ip_block: "%{name} hà toltu a regula IP %{target}" destroy_status: "%{name} hà toltu u statutu di %{target}" disable_2fa_user: "%{name} hà disattivatu l’identificazione à dui fattori per %{target}" disable_custom_emoji: "%{name} hà disattivatu l’emoji %{target}" @@ -262,10 +286,12 @@ co: reopen_report: "%{name} hà riapertu u signalamentu %{target}" reset_password_user: "%{name} hà riinizializatu a chjave d’accessu di %{target}" resolve_report: "%{name} hà chjosu u signalamentu %{target}" - silence_account: "%{name} hà silenzatu u contu di %{target}" + sensitive_account: "%{name} hà marcatu i media di %{target} cum'è sensibili" + silence_account: "%{name} hà limitatu u contu di %{target}" suspend_account: "%{name} hà suspesu u contu di %{target}" unassigned_report: "%{name} hà disassignatu u signalamentu %{target}" - unsilence_account: "%{name} hà fattu che u contu di %{target} ùn hè più silenzatu" + unsensitive_account: "%{name} hà sguassatu a marcatura di i media di %{target} cum'è sensibili" + unsilence_account: "%{name} hà fattu che u contu di %{target} ùn hè più limitatu" unsuspend_account: "%{name} hà fattu che u contu di %{target} ùn hè più suspesu" update_announcement: "%{name} hà cambiatu u novu annunziu %{target}" update_custom_emoji: "%{name} hà messu à ghjornu l’emoji %{target}" @@ -434,6 +460,21 @@ co: expired: Spirati title: Filtrà title: Invitazione + ip_blocks: + add_new: Creà regula + created_msg: Nova regula IP aghjunta + delete: Toglie + expires_in: + '1209600': 2 settimane + '15778476': 6 mesi + '2629746': 1 mese + '31556952': 1 annu + '86400': 1 ghjornu + '94670856': 3 anni + new: + title: Creà una nova regula IP + no_ip_block_selected: E regule ùn sò micca state mudificate perchè manc'un'era selezziunata + title: Regule IP pending_accounts: title: Conti in attesa (%{count}) relationships: @@ -549,7 +590,7 @@ co: open: Tutt'ognunu pò arregistrassi title: Modu d'arregistramenti show_known_fediverse_at_about_page: - desc_html: Quandu ghjè selezziunatu, statuti di tuttu l’istanze cunnisciute saranu affissati indè a vista di e linee. Altrimente soli i statuti lucali saranu mustrati. + desc_html: Quandu ghjè selezziunatu, statuti di tuttu l’istanze cunnisciute saranu affissati indè a vista di e linee. Altrimente soli i statuti lucali saranu mustrati title: Vedde tuttu u fediverse cunnisciutu nant’a vista di e linee show_staff_badge: desc_html: Mustrerà un badge Squadra nant’à un prufile d’utilizatore @@ -681,8 +722,11 @@ co: prefix_sign_up: Arregistratevi nant'à Mastodon oghji! suffix: Cù un contu, puderete siguità l'altri, pustà statuti è scambià missaghji cù l'utilizatori di tutti i servori Mastodon è ancu di più! didnt_get_confirmation: Ùn avete micca ricevutu l’istruzione di cunfirmazione? + dont_have_your_security_key: Ùn avete micca a chjave di sicurità? forgot_password: Chjave scurdata? invalid_reset_password_token: U ligame di riinizializazione di a chjave d’accessu hè spiratu o ùn hè micca validu. Pudete dumandà un'altru ligame. + link_to_otp: Entrate u codice d’I2F da l'applicazione o un codice di ricuperazione + link_to_webauth: Utilizate a vostra chjave di sicurità login: Cunnettassi logout: Scunnettassi migrate_account: Cambià di contu @@ -708,6 +752,7 @@ co: pending: A vostra dumanda hè in attesa di rivista da a squadra di muderazione. Quessa pò piglià un certu tempu. Avete da riceve un'e-mail s'ella hè appruvata. redirecting_to: U vostru contu hè inattivu perchè riindirizza versu %{acct}. trouble_logging_in: Difficultà per cunnettavi? + use_security_key: Utilizà a chjave di sicurità authorize_follow: already_following: Site digià abbunatu·a à stu contu already_requested: Avete digià mandatu una dumanda d'abbunamentu à stu contu @@ -732,6 +777,7 @@ co: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}o" @@ -827,7 +873,7 @@ co: footer: developers: Sviluppatori more: Di più… - resources: Risorze + resources: Risorse trending_now: Tindenze d'avà generic: all: Tuttu @@ -908,7 +954,7 @@ co: not_ready: Ùn si pò micca aghjunghje un fugliale micca ancu trattatu. Ripruvate più tardi! too_many: Ùn si pò micca aghjunghje più di 4 fugliali migrations: - acct: cugnome@duminiu di u novu contu + acct: Spiazzatu nant'à cancel: Annullà ridirezzione cancel_explanation: L'annullazione di a ridirezzione hà da riattivà stu contu, mà ùn si puderà micca ricuperà l'abbunati chì sò digià stati trasferriti à l'altru contu. cancelled_msg: Ridirezzione annullata. @@ -992,6 +1038,14 @@ co: quadrillion: P thousand: K trillion: T + otp_authentication: + code_hint: Entrate u codice generatu da l’applicazione per cunfirmà + description_html: S’ella hè attivata l’identificazione à dui fattori cù un'applicazione d'identificazione, duvete avè u vostru telefuninu pè ottene un codice di cunnezzione. + enable: Attivà + instructions_html: "Scanate stu QR code cù Google Authenticator, Authy o qualcosa cusì nant’à u vostru telefuninu. St’applicazione hà da creà codici da entrà ogni volta chì vi cunnettate." + manual_instructions: 'S’ellu ùn hè micca pussibule scanà u QR code, pudete entre sta chjave sicreta:' + setup: Attivà + wrong_code: U codice ùn hè micca currettu! Site sicuru·a chì l’ora di l'apparechju è di u servore sò esatte? pagination: newer: Più ricente next: Dopu @@ -1087,7 +1141,7 @@ co: firefox_os: Firefox OS ios: iOS linux: Linux - mac: Mac + mac: macOS other: piattaforma scunnisciuta windows: Windows windows_mobile: Windows Mobile @@ -1116,6 +1170,7 @@ co: profile: Prufile relationships: Abbunamenti è abbunati two_factor_authentication: Identificazione à dui fattori + webauthn_authentication: Chjave di sicurità spam_check: spam_detected: Quessu ghjè un riportu automaticu. Un spam hè statu ditettatu. statuses: @@ -1139,7 +1194,7 @@ co: in_reply_not_found: U statutu à quellu avete pruvatu di risponde ùn sembra micca esiste. language_detection: Truvà a lingua autumaticamente open_in_web: Apre nant’à u web - over_character_limit: Site sopr’à a limita di %{max} caratteri + over_character_limit: site sopr’à a limita di %{max} caratteri pin_errors: limit: Avete digià puntarulatu u numeru massimale di statuti ownership: Pudete puntarulà solu unu di i vostri propii statuti @@ -1154,6 +1209,8 @@ co: other: "%{count} voti" vote: Vutà show_more: Vede di più + show_newer: Vede i più ricenti + show_older: Vede i più anziani show_thread: Vede u filu sign_in_to_participate: Cunnettatevi per participà à a cunversazione title: '%{name}: "%{quote}"' @@ -1262,21 +1319,20 @@ co: default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Entrate u codice generatu da l’applicazione per cunfirmà - description_html: S’ella hè attivata l’identificazione à dui fattori, duvete avè u vostru telefuninu pè ottene un codice di cunnezzione. + add: Aghjunghje disable: Disattivà - enable: Attivà + disabled_success: L’identificazione à dui fattori hè stata disattivata + edit: Cambià enabled: Identificazione à dui fattori attivata enabled_success: L’identificazione à dui fattori hè stata attivata generate_recovery_codes: Creà codici di ricuperazione - instructions_html: "Scanate stu QR code cù Google Authenticator, Authy o qualcosa cusì nant’à u vostru telefuninu. St’applicazione hà da creà codici da entrà ogni volta chì vi cunnettate." lost_recovery_codes: I codici di ricuperazione à usu unicu vi permettenu di sempre avè accessu à u vostru contu s’è voi avete persu u vostru telefuninu. S’elli sò ancu persi, pudete creà codici novi quì. I vechji codici ùn marchjeranu più. - manual_instructions: 'S’ellu ùn hè micca pussibule scanà u QR code, pudete entre sta chjave sicreta:' + methods: Manere d'I2F + otp: Applicazione d'identificazione recovery_codes: Codici di ricuperazione recovery_codes_regenerated: Codici di ricuperazione ricreati recovery_instructions_html: Pudete fà usu di i codici quì sottu per sempre avè accessu à u vostru contu s’ellu hè statu persu u vostru telefuninu. Guardateli in una piazza sicura. Per esempiu, stampati è cunservati cù altri ducumenti impurtanti. - setup: Attivà - wrong_code: U codice ùn hè micca currettu! Site sicuru·a chì l’ora di l'apparechju è di u servore sò esatte? + webauthn: Chjave di sicurità user_mailer: backup_ready: explanation: Avete dumandatu un’archiviu cumpletu di u vostru contu Mastodon. Avà hè prontu per scaricà! @@ -1291,6 +1347,7 @@ co: warning: explanation: disable: Quandu u vostru contu hè ghjacciatu, i vostri dati stannu intatti, mà ùn pudete fà nunda fin'à ch'ellu sia sbluccatu. + sensitive: I vostri media caricati è in ligami saranu trattati cum'è sensibili. silence: Quandu u vostru contu hè limitatu, solu quelli chì sò digià abbunati à u vostru contu viderenu i vostri statuti nant'à quessu servore, è puderete esse esclusu·a di parechje liste pubbliche. Però, altri conti puderenu sempre seguitavi. suspend: U vostru contu hè statu suspesu, è tutti i vo statuti è fugliali media caricati sò stati sguassati di manera irreversibile di stu servore, è di i servori induve aviate abbunati. get_in_touch: Pudete risponde à quest'e-mail per cuntattà a squadra di muderazione di %{instance}. @@ -1299,11 +1356,13 @@ co: subject: disable: U vostru contu %{acct} hè statu ghjacciatu none: Avertimentu pè %{acct} + sensitive: I media di u vostru contu %{acct} sò stati marcati cum'è sensibili silence: U vostru contu %{acct} hè statu limitatu suspend: U vostru contu %{acct} hè statu suspesu title: disable: Contu ghjacciatu none: Avertimentu + sensitive: U vostru media hè statu marcatu cum'è sensibile silence: Contu limitatu suspend: Contu suspesu welcome: @@ -1324,9 +1383,11 @@ co: tips: Cunsiglii title: Benvenutu·a, %{name}! users: + blocked_email_provider: Stu serviziu e-mail ùn hè micca auturizatu follow_limit_reached: Ùn pidete seguità più di %{limit} conti generic_access_help_html: Prublemi d'accessu à u vostru contu? Pudete cuntattà %{email} per ottene aiutu invalid_email: L’indirizzu e-mail ùn hè currettu + invalid_email_mx: L'indirizzu e-mail ùn pare micca esiste invalid_otp_token: U codice d’identificazione ùn hè currettu invalid_sign_in_token: Codice di sicurità micca validu otp_lost_help_html: S’è voi avete persu i dui, pudete cuntattà %{email} @@ -1336,3 +1397,20 @@ co: verification: explanation_html: 'Pudete verificavi cum''è u pruprietariu di i ligami in i metadati di u vostru prufile. Per quessa, u vostru situ deve avè un ligame versu a vostra pagina Mastodon. U ligame deve avè un''attributu rel="me". U cuntenutu di u testu di u ligame ùn hè micca impurtante. Eccu un''esempiu:' verification: Verificazione + webauthn_credentials: + add: Aghjunghje una chjave di sicurità + create: + error: C'hè statu un prublemu aghjunghjendu a vostra chjave di sicurità. Duvete ripruvà. + success: A vostra chjave di sicurità hè stata aghjunta. + delete: Sguassà + delete_confirmation: Site sicuru·a che vulete sguassà sta chjave? + description_html: S'e voi attivate l'autentificazione à chjave di sicurità, duverete utilizà una di e vostre chjave ogni volta chì vi cunnettate. + destroy: + error: C'hè statu un prublemu togliendu a vostra chjave di sicurità. Duvete ripruvà. + success: A vostra chjave di sicurità hè stata sguassata. + invalid_credential: Chjave di sicurità I2F micca validu + nickname_hint: Entrate u nome di a vostra nova chjave di sicurità + not_enabled: Ùn avete micca attivatu WebAuthn + not_supported: E chjave di sicurità ùn marchjanu micca cù quessu navigatore + otp_required: Per utilizà una chjave di sicurità duvete attivà l'identificazione à dui fattori prima. + registered_on: Arregistrata %{date} diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 73670dcc9..e54e63517 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1285,21 +1285,14 @@ cs: default: "%d. %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Pro potvrzení zadejte kód vygenerovaný vaší ověřovací aplikací - description_html: Zapnete-li dvoufázové ověřování, budete pro přihlašování potřebovat telefon, který vám vygeneruje přístupové tokeny, které musíte zadat. disable: Vypnout - enable: Zapnout enabled: Dvoufázové ověřování je zapnuto enabled_success: Dvoufázové ověřování bylo úspěšně zapnuto generate_recovery_codes: Vygenerovat záložní kódy - instructions_html: "Naskenujte tento QR kód Google Authenticatorem nebo jinou TOTP aplikací na svém telefonu. Od teď bude tato aplikace generovat tokeny, které budete muset zadat při přihlášení." lost_recovery_codes: Záložní kódy vám dovolí dostat se k vašemu účtu, pokud ztratíte telefon. Ztratíte-li záložní kódy, můžete je zde znovu vygenerovat. Vaše staré záložní kódy budou zneplatněny. - manual_instructions: 'Nemůžete-li QR kód naskenovat a je potřeba ho zadat ručně, zde je secret v prostém textu:' recovery_codes: Záložní kódy pro obnovu recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerovány recovery_instructions_html: Ztratíte-li někdy přístup ke svému telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. Uchovejte tyto kódy v bezpečí. Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty. - setup: Nastavit - wrong_code: Zadaný kód byl neplatný! Je čas na serveru a na zařízení správný? user_mailer: backup_ready: explanation: Vyžádali jste si úplnou zálohu svého účtu Mastodon. Nyní je připravena ke stažení! diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 40d70b838..92ce53fe6 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -44,8 +44,11 @@ cy: domain: Gweinydd reason: 'Rheswm:' rejecting_media: Ni fydd ffeiliau cyfryngau o'r gweinydd hwn yn cael eu prosesu ac ni fydd unrhyw fawd yn cael eu harddangos, sy'n gofyn am glicio â llaw i'r gweinydd arall. + rejecting_media_title: Cyfrwng hidliedig silenced: Ni fydd swyddi o'r gweinydd hwn yn ymddangos yn unman heblaw eich porthiant cartref os dilynwch yr awdur. + silenced_title: Gweinyddion wedi'i tawelu suspended: Ni fyddwch yn gallu dilyn unrhyw un o'r gweinydd hwn, ac ni fydd unrhyw ddata ohono'n cael ei brosesu na'i storio, ac ni chyfnewidir unrhyw ddata. + suspended_title: Gweinyddion wedi'i gwahardd unavailable_content_html: Yn gyffredinol, mae Mastodon yn caniatáu ichi weld cynnwys gan unrhyw weinyddwr arall yn y ffederasiwn a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn. user_count_after: few: defnyddwyr @@ -325,6 +328,7 @@ cy: listed: Rhestredig new: title: Ychwanegu emoji personol newydd + not_permitted: Nid oes gennych caniatâd i gyflawni'r weithred hon overwrite: Trosysgrifio shortcode: Byrgod shortcode_hint: O leiaf 2 nodyn, dim ond nodau alffaniwmerig a tanlinellau @@ -962,6 +966,7 @@ cy: on_cooldown: Rydych wedi mudo eich cyfrif yn diweddar. Bydd y swyddogaeth hon ar gael eto mewn %{count} diwrnod. past_migrations: Ymfudiadau yn y gorffennol proceed_with_move: Symud dilynwyr + redirected_msg: Mae eich cyfrif yn awr yn ailgyfeirio at %{acct}. redirecting_to: Mae eich cyfrif yn ailgyfeirio at %{acct}. set_redirect: Gosod ailgyfeiriad warning: @@ -975,6 +980,10 @@ cy: redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau moderation: title: Goruwchwyliad + move_handler: + carry_blocks_over_text: Wnaeth y defnyddiwr symud o %{acct}, a oeddech chi wedi'i flocio. + carry_mutes_over_text: Wnaeth y defnyddiwr symud o %{acct}, a oeddech chi wedi'i dawelu. + copy_account_note_text: 'Wnaeth y defnyddiwr symud o %{acct}, dyma oedd eich hen nodiadau amdanynt:' notification_mailer: digest: action: Gweld holl hysbysiadau @@ -1161,6 +1170,13 @@ cy: spam_detected: Mae hyn yn adrodd awtomatig. Caiff sbam ei ganfod. statuses: attached: + audio: + few: "%{count} ffeil clywedol" + many: "%{count} ffeil clywedol" + one: "%{count} ffeil clywedol" + other: "%{count} ffeil clywedol" + two: "%{count} ffeil clywedol" + zero: "%{count} ffeil clywedol" description: 'Ynghlwm: %{attached}' image: few: "%{count} o luniau" @@ -1320,26 +1336,25 @@ cy: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Mewnbynwch y côd a grewyd gan eich ap dilysu i gadarnhau - description_html: Os ydych yn galluogi awdurdodi dau-gam, bydd mewngofnodi yn gofyn i chi fod a'ch ffôn gerllaw er mwyn cynhyrchu tocyn i chi gael mewnbynnu. disable: Diffodd - enable: Galluogi enabled: Awdurdodi dau-gam wedi'i alluogi enabled_success: Awdurdodi dau-gam wedi'i alluogi'n llwyddiannus generate_recovery_codes: Cynhyrchu côdau adfer - instructions_html: "Sganiwch y côd QR yn Google Authenticator neu ap TOTP tebyg ar eich ffôn. O hyn ymlaen, bydd yr ap hwnnw yn cynhyrchu tocynnau y bydd rhaid i chi fewnbynnu tra'n mewngofnodi." lost_recovery_codes: Mae côdau adfer yn caniatau i chi gael mynediad i'ch cyfrif eto os ydych yn colli'ch ffôn. Os ydych wedi colli eich côdau adfer, mae modd i chi gynhyrchu nhw eto yma. Bydd eich hen gôdau wedyn yn annilys. - manual_instructions: 'Os nad ydych yn gallu sganio côd QR ac angen ei fewnbynnu a llaw, dyma''r gyfrinach testun-plaen:' recovery_codes: Creu copi wrth gefn o gôdau adfywio recovery_codes_regenerated: Llwyddwyd i ail greu côdau adfywio recovery_instructions_html: Os ydych byth yn colli mynediad i'ch ffôn, mae modd i chi ddefnyddio un o'r côdau adfywio isod i ennill mynediad i'ch cyfrif eto. Cadwch y côdau adfywio yn saff. Er enghraifft, gallwch eu argraffu a'u cadw gyda dogfennau eraill pwysig. - setup: Sefydlu - wrong_code: Roedd y cod y mewnbynnwyd yn annilys! A yw'r amser gweinydd ac amser dyfais yn gywir? user_mailer: backup_ready: explanation: Fe wnaethoch chi gais am gopi wrth gefn llawn o'ch cyfrif Mastodon. Mae nawr yn barod i'w lawrlwytho! subject: Mae eich archif yn barod i'w lawrlwytho title: Allfudo archif + sign_in_token: + details: 'Dyma''r manylion o''r ceisiad:' + explanation: 'Wnaethom ni synhwyro ceisiad i fewngofnodi i''ch cyfrif o gyfeiriad IP anabyddiedig. Os mae hyn yn chi, mewnbynnwch y cod diogelwch isod i fewn i''r dudalen herio mewngofnodiad:' + further_actions: 'Os nad oedd hyn yn chi, newidwch eich cyfrinair ac alluogi awdurdodi dauffactor ar eich cyfrif. Gallwch gwneud hyn fama:' + subject: Cadarnhewch yr ymgais mewngofnodi + title: Ymgais mewngofnodi warning: explanation: disable: Er bod eich cyfrif wedi'i rewi, mae eich data cyfrif yn parhau i fod yn gyfan, ond ni allwch chi berfformio unrhyw gamau nes ei ddatgloi. @@ -1376,12 +1391,17 @@ cy: tips: Awgrymiadau title: Croeso, %{name}! users: + blocked_email_provider: Nid yw'r darparwr ebost hon yn cael ei ganiatâu follow_limit_reached: Nid oes modd i chi ddilyn mwy na %{limit} o bobl + generic_access_help_html: Cael trafferth yn cyrchu eich cyfrif? Efallai hoffwch cysylltu â %{email} am gymorth invalid_email: Mae'r cyfeiriad e-bost hwn yn annilys + invalid_email_mx: Nid yw'r ebost yn edrcyh fel ei bod yn bodoli invalid_otp_token: Côd dau-ffactor annilys + invalid_sign_in_token: Cod diogelwch annilys otp_lost_help_html: Os colloch chi fynediad i'r ddau, mae modd i chi gysylltu a %{email} seamless_external_login: Yr ydych wedi'ch mewngofnodi drwy wasanaeth allanol, felly nid yw gosodiadau cyfrinair ac e-bost ar gael. signed_in_as: 'Wedi mewngofnodi fel:' + suspicious_sign_in_confirmation: Mae'n edrych fel nad ydych wedi mewngofnodi o'r dyfais hyn o'r blaen, a nid ydych wedi mewngofnodi am sbel, felly rydym yn anfon cod diogelwch i'ch cyfeiriad ebost i gadarnhau bod chi yw hi. verification: explanation_html: 'Mae modd i chi ddilysu eich hun fel perchenog y dolenni yn metadata eich proffil. Rhaid i''r wefan a dolen iddi gynnwys dolen yn ôl i''ch proffil Mastodon. Rhaid i''r ddolen yn ôl gael nodwedd rel="fi". Nid oes ots beth yw cynnwys testun y ddolen. Dyma enghraifft:' verification: Dilysu diff --git a/config/locales/da.yml b/config/locales/da.yml index c7189ae34..984bd3cc4 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -40,8 +40,11 @@ da: domain: Server reason: Årsag rejecting_media: 'Medie filer fra disse servere vil ikke blive behandlet eller gemt, og ingen miniaturebilleder vil blive vist, som kræver tilgang til den originale fil:' + rejecting_media_title: Filtrerede medier silenced: 'Posteringer fra disse servere vil være skjulte i den offentlige tidslinje feed eller beskeder og ingen notifikationer vil blive genereret fra brugere du ikke følger:' + silenced_title: Dæmpede servere suspended: 'Ingen date fra disse servere vil blive behandlet, gemt eller udvekslet, at interagere eller kommunikere med brugere fra disse servere er ikke muligt:' + suspended_title: Suspenderede servere unavailable_content_html: Mastodon tillader dig generelt at se indhold og interagere med brugere fra enhver anden server i fediverset. Dette er undtagelser der er foretaget på netop denne server. user_count_after: one: bruger @@ -50,6 +53,7 @@ da: what_is_mastodon: Hvad er Mastodon? accounts: choices_html: "%{name}s valg:" + endorsements_hint: Du kan støtte folk du følger fra web-interface, og de vil dukke op her. featured_tags_hint: Du kan tilføje specifikke hashtags der vil blive vist her. follow: Følg followers: @@ -91,6 +95,7 @@ da: delete: Slet destroyed_msg: Moderator notat succesfuldt destrueret! accounts: + add_email_domain_block: Bloker e-mail domæne approve: Godkend approve_all: Godkend alle are_you_sure: Er du sikker? @@ -106,6 +111,7 @@ da: confirm: Bekræft confirmed: Bekræftet confirming: Bekræfter + delete: Slet data deleted: Slettet demote: Degrader disable: Deaktiver @@ -133,6 +139,7 @@ da: login_status: Status på login media_attachments: Medie bilag memorialize: Omdan til et memoriam + memorialized: Memorialiseret moderation: active: Aktiv all: Alle @@ -172,6 +179,8 @@ da: user: Bruger search: Søg search_same_ip: Andre brugere med den samme IP-adresse + sensitive: Følsomt + sensitized: markeret som følsomt shared_inbox_url: Link til delt indbakke show: created_reports: Anmeldelser oprettet @@ -188,16 +197,37 @@ da: undo_suspension: Fortryd udelukkelse unsubscribe: Abonner ikke længere username: Brugernavn + view_domain: Vis resumé for domæne warn: Advar web: Web whitelisted: Hvidlistet action_logs: action_types: + assigned_to_self_report: Tildel rapport + change_email_user: Ændre e-mail for bruger confirm_user: Bekræft bruger + create_account_warning: Opret advarsel + create_announcement: Opret bekendtgørelse + create_domain_allow: Opret domæne tillad + create_domain_block: Opret domæneblokering + create_ip_block: Opret IP-regel + destroy_announcement: Slet bekendtgørelse + destroy_domain_block: Slet domæneblokering + destroy_email_domain_block: Slet e-mail domæne blokering + destroy_ip_block: Slet IP-regel destroy_status: Slet status disable_2fa_user: Slet 2FA disable_user: Deaktiver brugeren enable_user: Aktiver brugeren + remove_avatar_user: Fjern profilbillede + reopen_report: Genåben rapport + reset_password_user: Nulstil adgangskode + resolve_report: Løs rapport + silence_account: Dæmp konto + suspend_account: Suspendér Konto + unsilence_account: Fjern dæmpelse af konto + update_announcement: Opdater bekendtgørelse + update_status: Opdater status actions: assigned_to_self_report: "%{name} tildelte anmeldelsen %{target} til sig selv" change_email_user: "%{name} ændrede email adressen for brugeren %{target}" @@ -207,11 +237,13 @@ da: create_domain_allow: "%{name} godkendte domænet %{target}" create_domain_block: "%{name} blokerede domænet %{target}" create_email_domain_block: "%{name} sortlistede email domænet %{target}" + create_ip_block: "%{name} oprettede regel for IP %{target}" demote_user: "%{name} degraderede %{target}" destroy_custom_emoji: "%{name} fjernede emoji %{target}" destroy_domain_allow: "%{name} fjernede godkendelsen af domænet %{target}" destroy_domain_block: "%{name} fjernede blokeringen af domænet %{target}" destroy_email_domain_block: "%{name} hvid-listede email domænet %{target}" + destroy_ip_block: "%{name} slettede reglen for IP %{target}" destroy_status: "%{name} fjernede statussen fra %{target}" disable_2fa_user: "%{name} deaktiverede to faktor kravet for brugeren %{target}" disable_custom_emoji: "%{name} deaktiverede humørikonet %{target}" @@ -232,9 +264,23 @@ da: update_custom_emoji: "%{name} opdaterede humørikonet %{target}" update_status: "%{name} opdaterede status for %{target}" deleted_status: "(slettet status)" + empty: Ingen logs fundet. filter_by_action: Filtrer efter handling filter_by_user: Filtrer efter bruger title: Revisionslog + announcements: + destroyed_msg: Bekendtgørelsen blev slettet! + edit: + title: Rediger bekendtgørelse + empty: Ingen bekendtgørelser fundet. + live: Direkte + new: + create: Opret bekendtgørelse + title: Ny bekendtgørelse + published_msg: Bekendtgørelsen blev slettet! + scheduled_for: Planlagt til %{time} + title: Bekendtgørelser + updated_msg: Bekendtgørelsen blev opdateret! custom_emojis: assign_category: Vælg kategori by_domain: Domæne @@ -257,6 +303,7 @@ da: listed: Listet new: title: Tilføj nyt brugerdefineret humørikon + not_permitted: Du har ikke tilladelse til at udføre denne handling overwrite: Overskriv shortcode: Kortkode shortcode_hint: Mindst 2 tegn, kun alfabetiske tegn og understreger @@ -323,6 +370,7 @@ da: rejecting_media: afviser mediefiler rejecting_reports: afviser anmeldelser severity: + silence: dæmpet suspend: suspenderet show: affected_accounts: @@ -341,6 +389,7 @@ da: delete: Slet destroyed_msg: Fjernede succesfuldt email domænet fra sortliste domain: Domæne + empty: Ingen e-mail-domæner er i øjeblikket blokeret. from_html: fra %{domain} new: create: Tilføj domæne @@ -349,15 +398,21 @@ da: instances: by_domain: Domæne delivery_available: Levering er tilgængelig + known_accounts: + one: "%{count} kendt konto" + other: "%{count} kendte konti" moderation: all: Alle limited: Begrænset + title: Moderation private_comment: Privat kommentar public_comment: Offentlig kommentar title: Førderation total_blocked_by_us: Blokeret af os total_followed_by_them: Fulgt af dem total_followed_by_us: Fulgt af os + total_reported: Rapporter om dem + total_storage: Vedhæftede medier invites: deactivate_all: Deaktiver alle filter: @@ -366,6 +421,25 @@ da: expired: Udløbet title: Filtre title: Invitationer + ip_blocks: + add_new: Opret regel + created_msg: Ny IP-regel blev tilføjet + delete: Slet + expires_in: + '1209600': 2 uger + '15778476': 6 måneder + '2629746': 1 måned + '31556952': 1 år + '86400': 1 dag + '94670856': 3 år + new: + title: Opret ny IP-regel + no_ip_block_selected: Ingen IP-regler blev ændret, da ingen blev valgt + title: IP-regler + pending_accounts: + title: Afventende konti (%{count}) + relationships: + title: "%{acct}'s relationer" relays: add_new: Tilføj nyt relay delete: Slet @@ -379,16 +453,22 @@ da: pending: Venter på godkendelse fra relæet save_and_enable: Gem og aktiver setup: Opsæt en videresendelses forbindelse + signatures_not_enabled: Relæer fungerer ikke korrekt, mens sikker tilstand eller begrænset føderationstilstand er aktiveret status: Status title: Videresendelser report_notes: created_msg: Anmeldelse note blev oprettet! destroyed_msg: Anmeldelse note blev slettet! reports: + account: + reports: + one: "%{count} rapport" + other: "%{count} rapporter" action_taken_by: Handling udført af are_you_sure: Er du sikker? assign_to_self: Tildel til mig assigned: Tildelt moderator + by_target_domain: Domæne for rapporteret konto comment: none: Ingen created_at: Anmeldt @@ -428,6 +508,8 @@ da: all: Til alle disabled: Til ingen title: Vis domæne blokeringer + enable_bootstrap_timeline_accounts: + title: Aktiver standard følger for nye brugere hero: desc_html: Vist på forsiden. Mindst 600x100px anbefales. Hvis ikke sat, vil dette falde tilbage til billedet fra serveren title: Billede af helt @@ -437,6 +519,9 @@ da: preview_sensitive_media: desc_html: Forhåndsvisninger af links på andre websider vil vise et miniaturebillede selv hvis mediet er markeret som følsomt title: Vis følsomt medie i OpenGraph forhåndsvisninger + profile_directory: + desc_html: Tillad bruger at kunne blive fundet + title: Aktivér profilmappe registrations: closed_message: desc_html: Vist på forsiden når registreringer er lukkede. Du kan bruge HTML tags @@ -449,8 +534,10 @@ da: title: Tillad invitationer af registrations_mode: modes: + approved: Godkendelse påkrævet for tilmelding none: Ingen kan tilmelde sig open: Alle kan tilmelde sig + title: Tilstand for registreringer show_known_fediverse_at_about_page: desc_html: Når slået til, vil det vise trut fra hele det kendte fedivers på forhåndsvisning. Ellers vil det kun vise lokale trut. title: Vis kendte fedivers på tidslinje forhåndsvisning @@ -470,6 +557,8 @@ da: desc_html: Du kan skrive din egen privatlivpolitik, servicevilkår, eller lignende. Du kan bruge HTML tags title: Brugerdefineret servicevilkår site_title: Navn af serveren + spam_check_enabled: + title: Anti-spam automatisering thumbnail: desc_html: Brugt til forhåndsvisninger via OpenGraph og API. 1200x630px anbefales title: Miniaturebillede for serveren @@ -477,6 +566,10 @@ da: desc_html: Vis offentlig tidslinje på landingssiden title: Tidslinje forhåndsvisning title: Indstillinger for side + trends: + title: Populære hashtags + site_uploads: + delete: Slet oplagt fil statuses: back_to_account: Tilbage til kontosiden batch: @@ -495,10 +588,22 @@ da: accounts_today: Unikke brug i dag accounts_week: Unikke brug denne uge context: Kontekst + directory: I mappe + in_directory: "%{count} i mappe" last_active: Sidst aktiv most_popular: Mest populære most_recent: Seneste + name: Hashtag + review: Gennemgå status + reviewed: Gennemgået + title: Hashtags + trending_right_now: Populære lige nu + unique_uses_today: "%{count} indlæg i dag" + unreviewed: Ikke gennemlæst + updated_msg: Hashtag-indstillinger opdateret + title: Administration warning_presets: + add_new: Tilføj ny delete: Slet admin_mailer: new_report: @@ -507,8 +612,11 @@ da: subject: Ny anmeldelse for %{instance} (#%{id}) aliases: add_new: Opret alias + empty: Du har ingen aliasser. appearance: + advanced_web_interface: Avanceret webgrænseflade animations_and_accessibility: Animationer og tilgængelighed + confirmation_dialogs: Bekræftelsesdialoger discovery: Opdagelse localization: body: Mastodon oversættes af frivillige. @@ -536,8 +644,10 @@ da: delete_account: Slet konto delete_account_html: Hvis du ønsker at slette din konto, kan du gøre det her. Du vil blive bedt om bekræftelse. description: + prefix_invited_by_user: "@%{name} inviterer dig til at deltage i denne Mastodons server!" prefix_sign_up: Tilmeld dig Mastodon i dag! didnt_get_confirmation: Har du endnu ikke modtaget instrukser for bekræftelse? + dont_have_your_security_key: Har du ikke dine sikkerhedsnøgler? forgot_password: Glemt dit kodeord? invalid_reset_password_token: Adgangskode nulstillings token er ugyldig eller udløbet. Anmod venligst om en ny. login: Log ind @@ -545,17 +655,26 @@ da: migrate_account: Flyt til en anden konto migrate_account_html: Hvis du ønsker at omdirigere denne konto til en anden, kan du gøre det her. or_log_in_with: Eller log in med + providers: + cas: CAS + saml: SAML register: Opret dig registration_closed: "%{instance} accepterer ikke nye medlemmer" resend_confirmation: Gensend bekræftelses instrukser reset_password: Nulstil kodeord security: Sikkerhed set_new_password: Sæt et nyt kodeord + setup: + email_settings_hint_html: Bekræftelsesmailen blev sendt til %{email}. Hvis denne e-mailadresse ikke er korrekt, kan du ændre den i kontoindstillinger. + title: Opsætning status: account_status: Kontostatus + confirming: Venter på at e-mail bekræftelsen er fuldført. trouble_logging_in: Har du problemer med at logge på? + use_security_key: Brug sikkerhedsnøgle authorize_follow: already_following: Du følger allerede denne konto + already_requested: Du har allerede sendt en følgeanmodning til denne konto error: Der opstod desværre en fejl under søgningen af denne fjerne konto follow: Følg follow_request: 'Du har anmodet om at følge:' @@ -567,8 +686,17 @@ da: title: Følg %{acct} challenge: confirm: Fortsæt + hint_html: "Tip: We won't ask you for your password again for the next hour." invalid_password: Ugyldig adgangskode prompt: Bekræft din adgangskode for at fortsætte + crypto: + errors: + invalid_key: er ikke en gyldig Ed25519 eller Curve25519 nøgle + invalid_signature: er ikke en gylidig Ed25519 signatur + date: + formats: + default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}t" @@ -576,18 +704,26 @@ da: about_x_years: "%{count}år" almost_x_years: "%{count}år" half_a_minute: Lige nu + less_than_x_minutes: "%{count}m" less_than_x_seconds: Lige nu over_x_years: "%{count}år" + x_days: "%{count}d" + x_minutes: "%{count}m" x_months: "%{count}md" + x_seconds: "%{count}s" deletes: + challenge_not_passed: De oplysninger, du indtastede var ikke korrekte confirm_password: Indtast dit nuværende kodeord for at bekræfte din identitet + confirm_username: Indtast dit brugernavn for at bekræfte proceduren proceed: Slet konto success_msg: Din konto er nu blevet slettet warning: + email_change_html: Du kan ændre din e-mail-adresse uden at slette din konto username_available: Dit brugernavn vil blive tilgængeligt igen username_unavailable: Dit brugernavn vil forblive utilgængeligt directories: directory: Profilliste + explanation: Opdag brugere baseret på deres interesser explore_mastodon: Uforsk %{title} domain_validator: invalid_domain: er ikke et gyldigt domænenavn @@ -604,7 +740,7 @@ da: '500': content: Beklager men der gik noget galt i vores ende. title: Siden er ikke korrekt - '503': The page could not be served due to a temporary server failure. + '503': Siden kunne ikke serveres på grund af en midlertidig serverfejl. noscript_html: For at bruge Mastodon web applikationen, aktiver JavaScript. Alternativt kan du prøve en af disse apps til Mastodon for din platform. existing_username_validator: not_found: kunne ikke finde en lokal bruger med dette brugenavn @@ -623,6 +759,10 @@ da: lists: Lister mutes: Du dæmper storage: Medie lager + featured_tags: + add_new: Tilføj ny + errors: + limit: Du har allerede vist det maksimale antal hashtags filters: contexts: account: Profiler @@ -637,6 +777,7 @@ da: invalid_irreversible: Uigenkaldelig filtrering virker kun med hjem eller notifikations kontekst index: delete: Slet + empty: Du har ingen filtre. title: Filtrer new: title: Tilføj nyt filter @@ -656,15 +797,26 @@ da: one: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende fejl forneden other: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende %{count} fejl forneden identity_proofs: + active: Aktiv + authorize: Ja, tillad i_am_html: Jeg er %{username} på %{service}. identity: Identitet + inactive: Inaktiv + publicize_checkbox: 'Og toot dette:' + publicize_toot: 'Det er bevist! Jeg er %{username} på %{service}: %{url}' + remove: Fjern bevis fra konto + removed: Beviset er fjernet fra kontoen + status: Status for verifikation + view_proof: Se bevis imports: modes: + merge: Sammenflet overwrite: Overskriv preface: Du kan importere data du har eksporteret fra en anden server, så som en liste over folk du følger eller blokerer. success: Dine data blev succesfuldt uploaded og vil nu blive behandlet hurtigst muligt types: blocking: Blokeringsliste + domain_blocking: Domæne blokeringsliste following: Følgningsliste muting: Liste over dæmpninger upload: Læg op @@ -697,12 +849,23 @@ da: media_attachments: validations: images_and_video: Kan ikke vedhæfte en video til en status der allerede har billeder + not_ready: Kan ikke vedhæfte filer, der ikke er færdige med behandlingen. Prøv igen om et øjeblik! too_many: Kan ikke vedhæfte mere en 4 filer migrations: acct: username@domain af den nye konto errors: + missing_also_known_as: er ikke et alias for denne konto + move_to_self: kan ikke være den nuværende konto not_found: kunne ikke bive fundet + on_cooldown: Du er på nedkøling + followers_count: Følgere på tidspunktet for flytningen + incoming_migrations: Flytter fra en anden konto + past_migrations: Tidligere migrationer proceed_with_move: Flyt følgere + redirected_msg: Din konto omdirigerer nu til %{acct}. + redirecting_to: Din konto omdirigerer til %{acct}. + warning: + other_data: Ingen andre data vil blive flyttet automatisk moderation: title: Moderatering notification_mailer: @@ -739,12 +902,19 @@ da: body: 'Din status blev fremhævet af %{name}:' subject: "%{name} fremhævede din status" title: Ny fremhævelse + notifications: + email_events: Begivenheder for e-mail-meddelelser + other_settings: Andre indstillinger for notifikationer number: human: decimal_units: + format: "%n%u" units: billion: mia. million: mio. + otp_authentication: + enable: Aktiver + wrong_code: Den indtastede kode var ugyldig! Er serverens tid og enhedstid korrekt? pagination: newer: Nyere next: Næste @@ -754,22 +924,35 @@ da: polls: errors: already_voted: Du har allerede stemt i denne afstemning + duplicate_options: indeholder dublerede elementer duration_too_long: er for langt ude i fremtiden duration_too_short: er for tidligy expired: Denne afstemning er allerede afsluttet + invalid_choice: Den valgte stemmeindstilling findes ikke + over_character_limit: kan ikke være længere end %{max} tegn hver + too_few_options: skal have mere end et element + too_many_options: kan ikke indeholde flere end %{max} elementer preferences: other: Andet public_timelines: Offentlige tidslinjer + reactions: + errors: + limit_reached: Grænsen for forskellige reaktioner er nået + unrecognized_emoji: er ikke en genkendt emoji relationships: activity: Aktivitet for konto followers: Følgere following: Følger + invited: Inviteret last_active: Sidst aktiv most_recent: Seneste moved: Flyttet mutual: Fælles primary: Primær relationship: Relation + remove_selected_domains: Fjern alle følgere fra de valgte domæner + remove_selected_followers: Fjern valgte følgere + remove_selected_follows: Følg ikke valgte brugere status: Status for konto remote_follow: acct: Indtast dit brugernavn@domæne du vil handle fra @@ -777,6 +960,8 @@ da: no_account_html: Har du ikke en konto? Du kan oprette dig her proceed: Fortsæt for at følge prompt: 'Du er ved at følge:' + scheduled_statuses: + too_soon: Den planlagte dato skal være i fremtiden sessions: activity: Sidste aktivitet browser: Browser @@ -821,6 +1006,7 @@ da: settings: account: Konto account_settings: Kontoindstillinger + aliases: Konto-aliaser appearance: Udseende authorized_apps: Godkendte apps back: Tilbage til Mastodon @@ -828,6 +1014,7 @@ da: development: Udvikling edit_profile: Rediger profil export: Data eksportering + featured_tags: Fremhævede hashtags import: Importer import_and_export: Importer og eksporter migrate: Konto migrering @@ -836,8 +1023,12 @@ da: profile: Profil relationships: Følger og følgere two_factor_authentication: To-faktor godkendelse + webauthn_authentication: Sikkerhedsnøgler statuses: attached: + audio: + one: "%{count} lyd" + other: "%{count} lyd" description: 'Vedhæftede: %{attached}' image: one: "%{count} billede" @@ -859,10 +1050,19 @@ da: private: Ikke offentlige trut kan ikke blive fastgjort reblog: Fremhævede trut kan ikke fastgøres poll: + total_people: + one: "%{count} person" + other: "%{count} personer" + total_votes: + one: "%{count} stemme" + other: "%{count} stemmer" vote: Stem show_more: Vis mere + show_newer: Vis nyere + show_older: Vis ældre show_thread: Vis tråd sign_in_to_participate: Log ind for at deltage i samtalen + title: '%{name}: "%{quote}"' visibilities: private: Kun-følgere private_long: Vis kun til følgere @@ -874,6 +1074,8 @@ da: pinned: Fastgjort trut reblogged: fremhævede sensitive_content: Følsomt indhold + tags: + does_not_match_previous_name: stemmer ikke overens med det forrige navn terms: body_html: "

Privatlivspolitik

\n

Hvilke information indsamler vi?

\n\n
    \n  
  • Grundlæggende kontoinformation : Hvis du registrerer dig på denne server, bliver du måske bedt om at indtaste et brugernavn, en e-mail-adresse og et kodeord. Du kan også indtaste yderligere profiloplysninger, såsom et visningsnavn og biografi, og uploade et profilbillede og headerbillede. Brugernavnet, visningsnavnet, biografien, profilbilledet og hovedbilledet vises altid offentligt.
  • \n  
  • Stillinger, følgende og andre offentlige oplysninger : Listen over personer du følger er offentliggjort, det samme gælder for dine tilhængere. Når du sender en besked, gemmes datoen og klokkeslættet såvel som det program, du sendte beskeden fra. Meddelelser kan indeholde medievedhæftninger, som f.eks. Billeder og videoer. Offentlige og unoterede indlæg er offentligt tilgængelige. Når du har et indlæg på din profil, er det også offentligt tilgængelig information. Dine indlæg leveres til dine tilhængere, i nogle tilfælde betyder det, at de leveres til forskellige servere, og der gemmes kopier der. Når du sletter indlæg, leveres det også til dine tilhængere. Handlingen med reblogging eller favorisering af et andet indlæg er altid offentligt.
  • \n  
  • Direkte og efterfølger-kun indlæg : Alle indlæg gemmes og behandles på serveren. Følgere-kun indlæg leveres til dine tilhængere og brugere, der er nævnt i dem, og direkte indlæg leveres kun til brugere nævnt i dem. I nogle tilfælde betyder det, at de leveres til forskellige servere, og der gemmes kopier der. Vi gør en god tro for at begrænse adgangen til disse stillinger kun til autoriserede personer, men andre servere kan undlade at gøre det. Derfor er det vigtigt at gennemgå de servere, dine tilhængere tilhører. Du kan skifte en mulighed for at godkende og afvise nye følgere manuelt i indstillingerne. Vær opmærksom på, at operatørerne af serveren og enhver modtagende server muligvis kan se sådanne meddelelser , og at modtagere muligvis skærmbilleder, kopierer eller på anden vis deler dem igen. Del ikke nogen farlig information over Mastodon.
  • \n  
  • IP'er og andre metadata : Når du logger ind, registrerer vi den IP-adresse, du logger ind fra, samt navnet på din browser-applikation. Alle indloggede sessioner er tilgængelige til din anmeldelse og tilbagekaldelse i indstillingerne. Den seneste anvendte IP-adresse gemmes i op til 12 måneder. Vi kan også beholde serverlogfiler, som indeholder IP-adressen til hver anmodning til vores server.
  • \n
\n\n
\n\n

Hvad bruger vi dine oplysninger til?

\n\n

Enhver af de oplysninger, vi indsamler fra dig, kan bruges på følgende måder:

\n\n
    \n  
  • At levere kernen funktionalitet Mastodon. Du kan kun interagere med andres indhold og indsende dit eget indhold, når du er logget ind. Du kan f.eks. Følge andre personer for at se deres kombinerede indlæg på din egen personlige tidslinje.
  • \n  
  • For at hjælpe moderering af samfundet, f.eks. sammenligning af din IP-adresse med andre kendte, for at bestemme forbud mod unddragelse eller andre overtrædelser.
  • \n  
  • Den e-mail-adresse, du angiver, kan bruges til at sende dig oplysninger, meddelelser om andre personer, der interagerer med dit indhold eller sender dig beskeder, og for at svare på henvendelser og / eller andre forespørgsler eller spørgsmål.
  • \n
\n\n
\n\n

Hvordan beskytter vi dine oplysninger?

\n\n

Vi implementerer en række sikkerhedsforanstaltninger for at opretholde sikkerheden for dine personlige oplysninger, når du indtaster, indsender eller har adgang til dine personlige oplysninger. Bl.a. er din browsersession samt trafikken mellem dine applikationer og API'en sikret med SSL, og din adgangskode er hashed ved hjælp af en stærk envejsalgoritme. Du kan muligvis aktivere tofaktors godkendelse for yderligere at sikre adgang til din konto.

\n\n
\n\n

Hvad er vores data retention politik?

\n\n

Vi vil gøre en god tro indsats for at:

\n\n
    \n  
  • Behold serverlogfiler, der indeholder IP-adressen på alle anmodninger til denne server, for så vidt som sådanne logfiler holdes, ikke mere end 90 dage.
  • \n  
  • Behold de IP-adresser, der er forbundet med registrerede brugere, ikke mere end 12 måneder.
  • \n
\n\n

Du kan anmode om og downloade et arkiv af dit indhold, herunder dine indlæg, medievedhæftninger, profilbillede og headerbillede.

\n\n

Du kan til enhver tid slette din konto.

\n\n
\n\n

Bruger vi cookies?

\n\n

Ja. Cookies er små filer, som et websted eller dets tjenesteudbyder overfører til din computers harddisk via din webbrowser (hvis du tillader det). Disse cookies gør det muligt for webstedet at genkende din browser og, hvis du har en registreret konto, associerer den med din registrerede konto.

\n\n

Vi bruger cookies til at forstå og gemme dine præferencer til fremtidige besøg.

\n\n
\n\n

Viser vi nogen information til eksterne parter?

\n\n

Vi sælger ikke, handler eller på anden måde overfører dine personlige identificerbare oplysninger til eksterne parter. Dette omfatter ikke tillid til tredjeparter, der hjælper os med at drive vores hjemmeside, udføre vores forretning eller servicere dig, så længe parterne er enige om at holde disse oplysninger fortrolige. Vi kan også frigive dine oplysninger, når vi mener, at udgivelsen er hensigtsmæssig for at overholde loven, håndhæve vores webstedspolitikker eller beskytte vores eller andre rettigheder, ejendom eller sikkerhed.

\n\n

Dit offentlige indhold kan downloades af andre servere i netværket. Dine offentlige og efterfølger-kun indlæg leveres til de servere, hvor dine tilhængere er bosat, og direkte meddelelser leveres til modtagerens servere, for så vidt som disse tilhængere eller modtagere opholder sig på en anden server end dette.

\n\n

Når du autoriserer et program til at bruge din konto, afhænger det af omfanget af tilladelser, du godkender, det kan få adgang til dine offentlige profiloplysninger, din følgende liste, dine tilhængere, dine lister, alle dine indlæg og dine favoritter. Applikationer kan aldrig få adgang til din e-mail-adresse eller adgangskode.

\n\n
\n\n

Bebyggelse af børn

\n\n

Hvis denne server er i EU eller EØS: Vores websted, produkter og tjenester er alle rettet mod personer, der er mindst 16 år gamle. Hvis du er under 16 år, skal du ikke bruge dette websted efter kravene i GDPR ( Generel databeskyttelsesforordning ). .

\n\n

Hvis denne server er i USA: Vores websted, produkter og tjenester er alle rettet mod personer, der er mindst 13 år. Hvis du er under 13 år, skal du ikke bruge kravene i COPPA ( Børns online beskyttelse af personlige oplysninger ) dette websted.

\n\n

Lovkrav kan være anderledes, hvis denne server er i en anden jurisdiktion.

\n\n
\n\n

Ændringer i vores privatlivspolitik

\n\n

Hvis vi beslutter os for at ændre vores privatlivspolitik, vil vi sende disse ændringer på denne side.

\n\n

Dette dokument er CC-BY-SA. Det blev senest opdateret 7. marts 2018.

\n\n

Oprindelig tilpasset fra Discourse privacy policy .

\n" title: Vilkår og privatlivpolitik for %{instance} @@ -881,28 +1083,40 @@ da: contrast: Mastodon (Høj kontrast) default: Mastodont (Mørk) mastodon-light: Mastodon (Lys) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: - code_hint: Indtast koden der er genereret af din app for at bekræfte - description_html: Hvis du aktiverer to-faktor godkendelse, vil du være nødt til at være i besiddelse af din telefon, der genererer tokens som du skal indtaste, når du logger ind. + add: Tilføj disable: Deaktiver - enable: Aktiver + edit: Rediger enabled: To-faktor godkendelse er aktiveret enabled_success: To-faktor godkendelse succesfuldt aktiveret generate_recovery_codes: Generer gendannelseskoder - instructions_html: "Scan denne QR kode i Google Autehnticator eller lignende TOTP app på din telefon. Fra nu af vil den app generere koder som du vil være nødt til at indtaste når du logger ind." lost_recovery_codes: Gendannelseskoder vil lade dig få adgang til din konto hvis du mister din telefon. Hvis du har mistet dine gendannelseskoder, kan du regenerere dem her. Dine gamle gendannelseskoder vil blive ugyldige. - manual_instructions: 'Hvis du ikke kan scanne QR koden er er nødt til at skrive koden ind manuelt, kan er din almindelig tekst secret:' + methods: To-faktor metoder recovery_codes: Reserve koder recovery_codes_regenerated: Reserve koder blev succesfuldt regenereret recovery_instructions_html: Hvis du nogensinde mister adgang til din telefon, kan du bruge en af genoprettelses koderne forneden for at få adgang til din konto. Gem gendannelses koderne et sikkert sted. Foreksempel kan du printe dem ud og gemme dem sammen med andre vigtige dokumenter. - setup: Sæt op - wrong_code: Den indtastede kode var ugyldig! Er serverens tid og enhedens tid korrekte? + webauthn: Sikkerhedsnøgler user_mailer: backup_ready: explanation: Din anmodning for fuld backup af din Mastodon konto. Den er nu klar til at blive hentet! subject: Dit arkiv er klar til at blive hentet ned title: Udpluk af arkiv + sign_in_token: + details: 'Her er detaljer om forsøget:' + subject: Bekræft venligst forsøg på at logge ind + title: Login forsøg warning: + review_server_policies: Gennemgå serverpolitikker + statuses: 'Især for:' + subject: + disable: Din konto %{acct} er blevet frosset + none: Advarsel for %{acct} + silence: Din konto %{acct} er blevet begrænset + suspend: Din konto %{acct} er blevet suspenderet title: disable: Konto frosset none: Advarsel @@ -926,11 +1140,27 @@ da: tips: Råd title: Velkommen ombord, %{name}! users: + blocked_email_provider: Denne e-mail-udbyder er ikke tilladt follow_limit_reached: Du kan ikke følge mere end %{limit} personer + generic_access_help_html: Har du problemer med at få adgang til din konto? Du kan komme i kontakt med %{email} for hjælp invalid_email: E-mail adressen er ugyldig + invalid_email_mx: E-mail-adressen virker ikke til at eksistere invalid_otp_token: Ugyldig to-faktor kode + invalid_sign_in_token: Ugyldig sikkerhedskode otp_lost_help_html: Hvis du har mistet adgang til begge, kan du få kontakt via %{email} seamless_external_login: Du er logget ind via en ekstern service, så er kodeord og e-mail indstillinger ikke tilgængelige. signed_in_as: 'Logget ind som:' verification: verification: Verificering + webauthn_credentials: + add: Tilføj ny sikkerhedsnøgle + create: + success: Din sikkerhedsnøgle blev tilføjet. + delete: Slet + destroy: + success: Din sikkerhedsnøgle blev slettet. + invalid_credential: Ugyldig sikkerhedsnøgle + nickname_hint: Indtast kaldenavnet på din nye sikkerhedsnøgle + not_enabled: Du har endnu ikke aktiveret WebAuthn + not_supported: Denne browser understøtter ikke sikkerhedsnøgler + registered_on: Registreret den %{date} diff --git a/config/locales/de.yml b/config/locales/de.yml index 021c4b2b2..1e3b1dc31 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -98,6 +98,7 @@ de: add_email_domain_block: E-Mail-Domain blacklisten approve: Akzeptieren approve_all: Alle akzeptieren + approved_msg: "%{username}'s Anmeldeantrag erfolgreich genehmigt" are_you_sure: Bist du sicher? avatar: Profilbild by_domain: Domain @@ -111,8 +112,10 @@ de: confirm: Bestätigen confirmed: Bestätigt confirming: Bestätigung + delete: Daten löschen deleted: Gelöscht demote: Degradieren + destroyed_msg: "%{username}'s Daten wurden zum Löschen in die Warteschlange eingereiht" disable: Ausschalten disable_two_factor_authentication: 2FA abschalten disabled: Ausgeschaltet @@ -123,6 +126,7 @@ de: email_status: E-Mail-Status enable: Freischalten enabled: Freigegeben + enabled_msg: "%{username}'s Konto erfolgreich freigegeben" followers: Folgende follows: Folgt header: Titelbild @@ -138,6 +142,8 @@ de: login_status: Loginstatus media_attachments: Dateien memorialize: In Gedenkmal verwandeln + memorialized: Memorialisiert + memorialized_msg: "%{username} wurde erfolgreich in ein memorialisiertes Konto umgewandelt" moderation: active: Aktiv all: Alle @@ -158,10 +164,14 @@ de: public: Öffentlich push_subscription_expires: PuSH-Abonnement läuft aus redownload: Profil neu laden + redownloaded_msg: Profil von %{username} erfolgreich von Ursprung aktualisiert reject: Ablehnen reject_all: Alle ablehnen + rejected_msg: "%{username}'s Anmeldeantrag erfolgreich abgelehnt" remove_avatar: Profilbild entfernen remove_header: Titelbild entfernen + removed_avatar_msg: Profilbild von %{username} erfolgreich entfernt + removed_header_msg: "%{username}'s Titelbild wurde erfolgreich entfernt" resend_confirmation: already_confirmed: Diese_r Benutzer_in wurde bereits bestätigt send: Bestätigungs-E-Mail erneut senden @@ -178,6 +188,8 @@ de: search: Suche search_same_email_domain: Andere Benutzer mit der gleichen E-Mail-Domain search_same_ip: Andere Benutzer mit derselben IP + sensitive: NSFW + sensitized: Als NSFW markieren shared_inbox_url: Geteilte Posteingang-URL show: created_reports: Erstellte Meldungen @@ -187,13 +199,19 @@ de: statuses: Beiträge subscribe: Abonnieren suspended: Verbannt + suspension_irreversible: Die Daten dieses Kontos wurden unwiderruflich gelöscht. Du kannst das Konto aufheben, um es brauchbar zu machen, aber es wird keine Daten wiederherstellen, die es davor schon hatte. + suspension_reversible_hint_html: Das Konto wurde gesperrt und die Daten werden am %{date} vollständig gelöscht. Bis dahin kann das Konto ohne irgendwelche negativen Auswirkungen wiederhergestellt werden. Wenn du alle Daten des Kontos sofort entfernen möchtest, kannst du dies nachfolgend tun. time_in_queue: "%{time} in der Warteschlange" title: Konten unconfirmed_email: Unbestätigte E-Mail-Adresse + undo_sensitized: Nicht mehr als NSFW markieren undo_silenced: Stummschaltung aufheben undo_suspension: Verbannung aufheben + unsilenced_msg: "%{username}'s Konto erfolgreich freigegeben" unsubscribe: Abbestellen + unsuspended_msg: "%{username}'s Konto erfolgreich freigegeben" username: Profilname + view_domain: Übersicht für Domain anzeigen warn: Warnen web: Web whitelisted: Auf der Whitelist @@ -208,27 +226,31 @@ de: create_domain_allow: Domain erlauben create_domain_block: Domain blockieren create_email_domain_block: E-Mail-Domain-Block erstellen + create_ip_block: IP-Regel erstellen demote_user: Benutzer degradieren destroy_announcement: Ankündigung löschen destroy_custom_emoji: Eigene Emoji löschen destroy_domain_allow: Erlaube das Löschen von Domains destroy_domain_block: Domain-Blockade löschen destroy_email_domain_block: E-Mail-Domain-Blockade löschen + destroy_ip_block: IP-Regel löschen destroy_status: Beitrag löschen disable_2fa_user: 2FA deaktivieren disable_custom_emoji: Benutzerdefiniertes Emoji deaktivieren disable_user: Benutzer deaktivieren enable_custom_emoji: Benutzerdefiniertes Emoji aktivieren enable_user: Benutzer aktivieren - memorialize_account: Konto in ein Konto von einer verstorbenen Person umwandeln + memorialize_account: Account deaktivieren promote_user: Benutzer befördern remove_avatar_user: Profilbild entfernen reopen_report: Meldung wieder eröffnen reset_password_user: Passwort zurücksetzen resolve_report: Bericht lösen + sensitive_account: Markiere die Medien in deinem Konto als NSFW silence_account: Konto stummschalten suspend_account: Konto sperren - unassigned_report: Berichtszuweisung entfernen + unassigned_report: Meldung widerrufen + unsensitive_account: Markiere die Medien in deinem Konto nicht mehr als NSFW unsilence_account: Konto nicht mehr stummschalten unsuspend_account: Konto nicht mehr sperren update_announcement: Ankündigung aktualisieren @@ -244,12 +266,14 @@ de: create_domain_allow: "%{name} hat die Domain %{target} gewhitelistet" create_domain_block: "%{name} hat die Domain %{target} blockiert" create_email_domain_block: "%{name} hat die E-Mail-Domain %{target} geblacklistet" + create_ip_block: "%{name} hat eine Regel für IP %{target} erstellt" demote_user: "%{name} stufte Benutzer_in %{target} herunter" destroy_announcement: "%{name} hat die neue Ankündigung %{target} gelöscht" destroy_custom_emoji: "%{name} zerstörte Emoji %{target}" destroy_domain_allow: "%{name} hat die Domain %{target} von der Whitelist entfernt" destroy_domain_block: "%{name} hat die Domain %{target} entblockt" destroy_email_domain_block: "%{name} hat die E-Mail-Domain %{target} gewhitelistet" + destroy_ip_block: "%{name} hat eine Regel für IP %{target} gelöscht" destroy_status: "%{name} hat einen Beitrag von %{target} entfernt" disable_2fa_user: "%{name} hat Zwei-Faktor-Anforderung für Benutzer_in %{target} deaktiviert" disable_custom_emoji: "%{name} hat das %{target} Emoji deaktiviert" @@ -262,9 +286,11 @@ de: reopen_report: "%{name} hat die Meldung %{target} wieder geöffnet" reset_password_user: "%{name} hat das Passwort von %{target} zurückgesetzt" resolve_report: "%{name} hat die Meldung %{target} bearbeitet" + sensitive_account: "%{name} markierte %{target}'s Medien als NSFW" silence_account: "%{name} hat das Konto von %{target} stummgeschaltet" suspend_account: "%{name} hat das Konto von %{target} verbannt" unassigned_report: "%{name} hat die Zuweisung der Meldung %{target} entfernt" + unsensitive_account: "%{name} markierte %{target}'s Medien nicht als NSFW" unsilence_account: "%{name} hat die Stummschaltung von %{target} aufgehoben" unsuspend_account: "%{name} hat die Verbannung von %{target} aufgehoben" update_announcement: "%{name} aktualisierte Ankündigung %{target}" @@ -434,6 +460,21 @@ de: expired: Ausgelaufen title: Filter title: Einladungen + ip_blocks: + add_new: Regel erstellen + created_msg: Neue IP-Regel erfolgreich hinzugefügt + delete: Löschen + expires_in: + '1209600': 2 Wochen + '15778476': 6 Monate + '2629746': 1 Monat + '31556952': 1 Jahr + '86400': 1 Tag + '94670856': 3 Jahre + new: + title: Neue IP-Regel erstellen + no_ip_block_selected: Keine IP-Regeln wurden geändert, weil keine ausgewählt wurden + title: IP-Regeln pending_accounts: title: Ausstehende Konten (%{count}) relationships: @@ -527,8 +568,8 @@ de: desc_html: Domain-Namen, die der Server im Fediversum gefunden hat title: Veröffentliche entdeckte Server durch die API preview_sensitive_media: - desc_html: Linkvorschauen auf anderen Webseiten werden ein Vorschaubild anzeigen, obwohl die Medien als heikel gekennzeichnet sind - title: Heikle Medien im OpenGraph-Vorschau anzeigen + desc_html: Linkvorschauen auf anderen Webseiten werden ein Vorschaubild anzeigen, obwohl die Medien als NSFW markiert sind + title: NSFW-Medien in OpenGraph-Vorschau anzeigen profile_directory: desc_html: Erlaube Benutzer auffindbar zu sein title: Aktiviere Profilverzeichnis @@ -590,8 +631,8 @@ de: back_to_account: Zurück zum Konto batch: delete: Löschen - nsfw_off: Als nicht heikel markieren - nsfw_on: Als heikel markieren + nsfw_off: Als nicht NSFW markieren + nsfw_on: Als NSFW markieren deleted: Gelöscht failed_to_execute: Ausführen fehlgeschlagen media: @@ -652,7 +693,7 @@ de: body: Mastodon wurde von Freiwilligen übersetzt. guide_link: https://de.crowdin.com/project/mastodon guide_link_text: Jeder kann etwas dazu beitragen. - sensitive_content: Heikle Inhalte + sensitive_content: NSFW toot_layout: Beitragslayout application_mailer: notification_preferences: Ändere E-Mail-Einstellungen @@ -681,8 +722,11 @@ de: prefix_sign_up: Melde dich heute bei Mastodon an! suffix: Mit einem Konto kannst du Leuten folgen, Updates veröffentlichen und Nachrichten mit Benutzern von jedem Mastodon-Server austauschen und mehr! didnt_get_confirmation: Keine Bestätigungs-Mail erhalten? + dont_have_your_security_key: Hast du keinen Sicherheitsschlüssel? forgot_password: Passwort vergessen? invalid_reset_password_token: Das Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen. Bitte fordere ein neues an. + link_to_otp: Gib einen Zwei-Faktor-Code von deinem Handy oder einen Wiederherstellungscode ein + link_to_webauth: Verwende deinen Sicherheitsschlüssel login: Anmelden logout: Abmelden migrate_account: Ziehe zu einem anderen Konto um @@ -708,6 +752,7 @@ de: pending: Deine Bewerbung wird von unseren Mitarbeitern noch überprüft. Dies kann einige Zeit dauern. Du erhältst eine E-Mail, wenn deine Bewerbung genehmigt wurde. redirecting_to: Dein Konto ist inaktiv, da es derzeit zu %{acct} umgeleitet wird. trouble_logging_in: Schwierigkeiten beim Anmelden? + use_security_key: Sicherheitsschlüssel verwenden authorize_follow: already_following: Du folgst diesem Konto bereits already_requested: Du hast bereits eine Anfrage zum Folgen diesen Accounts versendet @@ -732,6 +777,7 @@ de: date: formats: default: "%d. %b %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -992,6 +1038,14 @@ de: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: Gib den von deiner Authentifizierungs-App generierten Code ein, um deine Anmeldung zu bestätigen + description_html: Wenn du Zwei-Faktor-Authentifizierung mit einer Authentifizierungs-App aktivierst, musst du, um dich anzumelden, im Besitz deines Handys sein, dass Tokens für dein Konto generiert. + enable: Aktivieren + instructions_html: "Scanne diesen QR-Code in Google Authenticator oder einer ähnlichen TOTP-App auf deinem Handy. Von nun an generiert diese App Tokens, die du beim Anmelden eingeben musst." + manual_instructions: 'Wenn du den QR-Code nicht scannen kannst und ihn manuell eingeben musst, ist hier das Klartext-Geheimnis:' + setup: Einrichten + wrong_code: Der eingegebene Code war ungültig! Sind die Serverzeit und die Gerätezeit korrekt? pagination: newer: Neuer next: Vorwärts @@ -1116,6 +1170,7 @@ de: profile: Profil relationships: Folgende und Gefolgte two_factor_authentication: Zwei-Faktor-Auth + webauthn_authentication: Sicherheitsschlüssel spam_check: spam_detected: Dies ist ein automatisierter Bericht. Es wurde Spam erkannt. statuses: @@ -1154,6 +1209,8 @@ de: other: "%{count} Stimmen" vote: Abstimmen show_more: Mehr anzeigen + show_newer: Neuere anzeigen + show_older: Ältere anzeigen show_thread: Zeige Konversation sign_in_to_participate: Melde dich an, um an der Konversation teilzuhaben title: '%{name}: "%{quote}"' @@ -1167,7 +1224,7 @@ de: stream_entries: pinned: Angehefteter Beitrag reblogged: teilte - sensitive_content: Heikle Inhalte + sensitive_content: NSFW tags: does_not_match_previous_name: entspricht nicht dem vorherigen Namen terms: @@ -1264,21 +1321,20 @@ de: default: "%d.%m.%Y %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Gib zur Bestätigung den Code ein, den deine Authenticator-App generiert hat - description_html: Wenn du Zwei-Faktor-Authentifizierung (2FA) aktivierst, wirst du dein Telefon zum Anmelden benötigen. Darauf werden Sicherheitscodes erzeugt, die du bei der Anmeldung eingeben musst. + add: Hinzufügen disable: Deaktivieren - enable: Aktivieren + disabled_success: Zwei-Faktor-Authentifizierung erfolgreich deaktiviert + edit: Bearbeiten enabled: Zwei-Faktor-Authentisierung ist aktiviert enabled_success: Zwei-Faktor-Authentisierung erfolgreich aktiviert generate_recovery_codes: Wiederherstellungscodes generieren - instructions_html: "Lies diesen QR-Code mit Google Authenticator oder einer ähnlichen TOTP-App auf deinem Telefon ein. Von nun an wird diese App Tokens generieren, die du beim Anmelden eingeben musst." lost_recovery_codes: Wiederherstellungscodes erlauben dir, wieder den Zugang zu deinem Konto zu erlangen, falls du dein Telefon verlieren solltest. Wenn du deine Wiederherstellungscodes verloren hast, kannst du sie hier neu generieren. Deine alten Wiederherstellungscodes werden damit ungültig gemacht. - manual_instructions: 'Wenn du den QR-Code nicht einlesen kannst und ihn manuell eingeben musst, ist hier das Klartext-Geheimnis:' + methods: Zwei-Faktor-Methoden + otp: Authentifizierungs-App recovery_codes: Wiederherstellungs-Codes sichern recovery_codes_regenerated: Wiederherstellungscodes erfolgreich neu generiert recovery_instructions_html: Wenn du den Zugang zu deinem Telefon verlieren solltest, kannst du einen untenstehenden Wiederherstellungscode benutzen, um wieder auf dein Konto zugreifen zu können. Bewahre die Wiederherstellungscodes gut auf. Du könntest sie beispielsweise ausdrucken und bei deinen restlichen wichtigen Dokumenten aufbewahren. - setup: Einrichten - wrong_code: Der eingegebene Code war ungültig! Stimmen Serverzeit und Gerätezeit? + webauthn: Sicherheitsschlüssel user_mailer: backup_ready: explanation: Du hast ein vollständiges Backup von deinem Mastodon-Konto angefragt. Es kann jetzt heruntergeladen werden! @@ -1293,6 +1349,7 @@ de: warning: explanation: disable: Solange dein Konto eingefroren ist, sind deine Benutzerdaten intakt; aber du kannst nichts tun, bis dein Konto entsperrt wurde. + sensitive: Deine hochgeladenen Mediendateien und verknüpften Medien werden als NSFW markiert. silence: Solange dein Konto limitiert ist, können nur die Leute, die dir bereits folgen, deine Beiträge auf dem Server sehen und es könnte sein, dass du von verschiedenen öffentlichen Listungen ausgeschlossen wirst. Andererseits können andere dir manuell folgen. suspend: Dein Konto wurde gesperrt und alle deine Beiträge und hochgeladenen Medien wurden unwiderruflich vom Server und anderen Servern, bei denen du Folgende hattest, gelöscht. get_in_touch: Du kannst auf diese E-Mail antworten, um mit dem Personal von %{instance} in Kontakt zu treten. @@ -1301,11 +1358,13 @@ de: subject: disable: Dein Konto %{acct} wurde eingefroren none: Warnung für %{acct} + sensitive: Die Medien deines Konto %{acct} wurden als NSFW markiert silence: Dein Konto %{acct} wurde limitiert suspend: Dein Konto %{acct} wurde gesperrt title: disable: Konto eingefroren none: Warnung + sensitive: Deine Medien wurden als NSFW markiert silence: Konto limitiert suspend: Konto gesperrt welcome: @@ -1326,9 +1385,11 @@ de: tips: Tipps title: Willkommen an Bord, %{name}! users: + blocked_email_provider: Dieser E-Mail-Anbieter ist nicht erlaubt follow_limit_reached: Du kannst nicht mehr als %{limit} Leuten folgen generic_access_help_html: Probleme beim Zugriff auf dein Konto? Du kannst dich mit %{email} in Verbindung setzen, um Hilfe zu erhalten invalid_email: Ungültige E-Mail-Adresse + invalid_email_mx: Die E-Mail-Adresse scheint nicht vorhanden zu sein invalid_otp_token: Ungültiger Zwei-Faktor-Authentisierungs-Code invalid_sign_in_token: Ungültiger Sicherheitscode otp_lost_help_html: Wenn Du beides nicht mehr weißt, melde Dich bei uns unter der E-Mailadresse %{email} @@ -1338,3 +1399,20 @@ de: verification: explanation_html: 'Du kannst bestätigen, dass die Links in deinen Profil-Metadaten dir gehören. Dafür muss die verlinkte Website einen Link zurück auf dein Mastodon-Profil enthalten. Dieser Link muss ein rel="me"-Attribut enthalten. Der Linktext ist dabei egal. Hier ist ein Beispiel:' verification: Verifizierung + webauthn_credentials: + add: Sicherheitsschlüssel hinzufügen + create: + error: Beim Hinzufügen des Sicherheitsschlüssels ist ein Fehler aufgetreten. Bitte versuche es erneut. + success: Dein Sicherheitsschlüssel wurde erfolgreich hinzugefügt. + delete: Löschen + delete_confirmation: Bist du sicher, dass du diesen Sicherheitsschlüssel löschen möchtest? + description_html: Wenn du die Authentifizierung mit Sicherheitsschlüssel aktivierst, musst du einen deiner Sicherheitsschlüssel verwenden, um dich anmelden zu können. + destroy: + error: Es gab ein Problem beim Löschen deines Sicherheitsschlüssels. Bitte versuche es erneut. + success: Dein Sicherheitsschlüssel wurde erfolgreich gelöscht. + invalid_credential: Ungültiger Sicherheitsschlüssel + nickname_hint: Gib den Spitznamen deines neuen Sicherheitsschlüssels ein + not_enabled: Du hast WebAuthn noch nicht aktiviert + not_supported: Dieser Browser unterstützt keine Sicherheitsschlüssel + otp_required: Um Sicherheitsschlüssel zu verwenden, aktiviere zuerst die Zwei-Faktor-Authentifizierung. + registered_on: Registriert am %{date} diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index cca8764ea..e1600bc6a 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -53,7 +53,7 @@ ca: subject: 'Mastodon: autenticació de dos factors desactivada' title: 2FA desactivat two_factor_enabled: - explanation: L'autenticació de dos factors ha estat habilitada pel teu compte. Un token generat pel emparellat TOTP app serà requerit per a iniciar sessió. + explanation: L'autenticació de dos factors ha estat habilitada pel teu compte. Un token generat per l'aplicació d'emparellat TOTP serà requerit per a iniciar sessió. subject: 'Mastodon: autenticació de dos factors activada' title: 2FA activat two_factor_recovery_codes_changed: @@ -62,9 +62,26 @@ ca: title: 2FA codis de recuperació canviats unlock_instructions: subject: 'Mastodon: Instruccions per a desbloquejar' + webauthn_credential: + added: + explanation: La següent clau de seguretat s'ha afegit al teu compte + subject: 'Mastodon: Nova clau de seguretat' + title: S'ha afegit una nova clau de seguretat + deleted: + explanation: La següent clau de seguretat s'ha esborrat del teu compte + subject: 'Mastodon: clau de seguretat esborrada' + title: Una de les teves claus de seguretat ha estat esborrada + webauthn_disabled: + explanation: S'ha desactivat l'autenticació amb claus de seguretat per al teu compte. L'inici de sessió és ara possible emprant només el token generat per l'aplicació TOTP. + subject: 'Mastodon: S''ha desactivat l''autenticació amb claus de seguretat' + title: Claus de seguretat desactivades + webauthn_enabled: + explanation: S'ha activat l'autenticació amb claus de seguretat. La teva clau de seguretat por ser emprada per a iniciar sessió. + subject: 'Mastodon: Autenticació amb clau de seguretat activada' + title: Claus de seguretat activades omniauth_callbacks: - failure: No podem autentificar-te des de %{kind} degut a "%{reason}". - success: Autentificat amb èxit des del compte %{kind}. + failure: No podem autenticar-te des de %{kind} degut a "%{reason}". + success: Autenticat amb èxit des del compte %{kind}. passwords: no_token: No pots accedir a aquesta pàgina sense provenir des del correu de restabliment de la contrasenya. Si vens des del correu de restabliment de contrasenya, assegura't que estàs emprant l'adreça completa proporcionada. send_instructions: Si el teu correu electrònic existeix en la nostra base de dades, rebràs en pocs minuts un enllaç de restabliment de contrasenya en l'adreça de correu. Si us plau verifica la teva carpeta de correu brossa if no rebut aquest correu. diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml index c9511d14d..8409cfad9 100644 --- a/config/locales/devise.co.yml +++ b/config/locales/devise.co.yml @@ -60,6 +60,23 @@ co: title: Cambiamentu di i codici di ricuperazione d'A2F unlock_instructions: subject: 'Mastodon: Riapre u contu' + webauthn_credential: + added: + explanation: A chjave di sicurità quì sottu hè stata aghjunta à u vostru contu + subject: 'Mastodon: Nova chjave di sicurità' + title: Una nova chjave di sicurità hè stata aghjunta + deleted: + explanation: A chjave di sicurità quì sottu hè stata sguassata di u vostru contu + subject: 'Mastodon: Chjave di sicurità sguassata' + title: Una di e vostre chjave di sicurità hè stata sguassata + webauthn_disabled: + explanation: L'autentificazione cù una chjave di sicurità hè stata disattivata per u vostru contu. Avà pudete solu cunnettavi cù u codice di cunnessione generatu da l'applicazione TOTP appaghjata. + subject: 'Mastodon: Autentificazione cù chjave di sicurità disattivata' + title: Chjave di sicurità disattivate + webauthn_enabled: + explanation: L'autentificazione cù una chjave di sicurità hè stata attivata per u vostru contu. Avà a vostra chjave pò esse utilizata per cunnettavi. + subject: 'Mastodon: Identificazione cù chjave di sicurità attivata' + title: Chjave di sicurità attivate omniauth_callbacks: failure: Ùn pudemu micca cunnettavi da %{kind} perchè "%{reason}". success: Vi site cunnettatu·a da %{kind}. @@ -94,5 +111,5 @@ co: not_found: ùn hè micca statu trovu not_locked: ùn era micca chjosu not_saved: - one: 'Un prublemu hà impeditu a cunservazione di stu (sta) %{resource}:' - other: "%{count} prublemi anu impeditu a cunservazione di stu (sta) %{resource} :" + one: 'Un prublemu hà impeditu a cunservazione di stu/sta %{resource}:' + other: "%{count} prublemi anu impeditu a cunservazione di stu/sta %{resource} :" diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml index 75a035935..c23d2bbbf 100644 --- a/config/locales/devise.da.yml +++ b/config/locales/devise.da.yml @@ -60,6 +60,17 @@ da: title: 2FA gendannelseskoder er ændret unlock_instructions: subject: 'Mastodon: Instruktioner for oplåsning' + webauthn_credential: + added: + subject: 'Mastodon: Ny sikkerhedsnøgle' + title: En ny sikkerhedsnøgle er blevet tilføjet + deleted: + subject: 'Mastodon: Sikkerhedsnøgle slettet' + title: En af dine sikkerhedsnøgler er blevet slettet + webauthn_disabled: + title: Sikkerhedsnøgler deaktiveret + webauthn_enabled: + title: Sikkerhedsnøgler aktiveret omniauth_callbacks: failure: Kunne ikke godkende dig fra %{kind} fordi "%{reason}". success: Godkendelse fra %{kind} konto lykkedes. diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index c2eb057f5..0512ca129 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -20,7 +20,7 @@ de: confirmation_instructions: action: E-Mail-Adresse verifizieren action_with_app: Bestätigen und zu %{app} zurückkehren - explanation: Du hast einen Account auf %{host} mit dieser E-Mail-Adresse erstellt. Du bist nur noch einen Klick weit entfernt von der Aktivierung. Wenn du das nicht warst, kannst du diese E-Mail ignorieren. + explanation: Du hast einen Account auf %{host} mit dieser E-Mail-Adresse erstellt. Du bist nur noch einen Klick weit von der Aktivierung entfernt. Wenn du das nicht warst, kannst du diese E-Mail ignorieren. explanation_when_pending: Du hast dich für eine Einladung bei %{host} mit dieser E-Mailadresse beworben. Sobald du deine E-Mailadresse bestätigst werden wir deine Anfrage überprüfen. Du kannst dich in dieser Zeit nicht anmelden. Wenn deine Anfrage abgelehnt wird, werden deine Daten entfernt, also wird keine weitere Handlung benötigt. Wenn du das nicht warst kannst du diese E-Mail ignorieren. extra_html: Bitte lies auch die Regeln des Servers und unsere Nutzungsbedingungen. subject: 'Mastodon: Bestätigung deines Kontos bei %{instance}' @@ -60,6 +60,23 @@ de: title: 2FA Wiederherstellungscodes geändert unlock_instructions: subject: 'Mastodon: Konto entsperren' + webauthn_credential: + added: + explanation: Der folgende Sicherheitsschlüssel wurde zu deinem Konto hinzugefügt + subject: 'Mastodon: Neuer Sicherheitsschlüssel' + title: Ein neuer Sicherheitsschlüssel wurde hinzugefügt + deleted: + explanation: Der folgende Sicherheitsschlüssel wurde aus deinem Konto gelöscht + subject: 'Mastodon: Sicherheitsschlüssel gelöscht' + title: Einer deiner Sicherheitsschlüssel wurde gelöscht + webauthn_disabled: + explanation: Die Authentifizierung mit Sicherheitsschlüssel wurde für dein Konto deaktiviert. Der Login ist nun nur mit dem Token möglich, der von der eingerichteten TOTP-App generiert wird. + subject: 'Mastodon: Authentifizierung mit Sicherheitsschlüssel deaktiviert' + title: Sicherheitsschlüssel deaktiviert + webauthn_enabled: + explanation: Die Authentifizierung mit einem Sicherheitsschlüssel wurde für dein Konto aktiviert. Dein Sicherheitsschlüssel kann nun für die Anmeldung verwendet werden. + subject: 'Mastodon: Authentifizierung mit Sicherheitsschlüssel aktiviert' + title: Sicherheitsschlüssel aktiviert omniauth_callbacks: failure: Du konntest nicht mit deinem %{kind}-Konto angemeldet werden, weil »%{reason}«. success: Du hast dich erfolgreich mit deinem %{kind}-Konto angemeldet. diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml index 7eb064e5d..ba3ee59fa 100644 --- a/config/locales/devise.el.yml +++ b/config/locales/devise.el.yml @@ -60,6 +60,23 @@ el: title: Οι κωδικοί ανάκτησης επαλήθευσης 2 βημάτων (2FA) άλλαξαν unlock_instructions: subject: 'Mastodon: Οδηγίες ξεκλειδώματος' + webauthn_credential: + added: + explanation: Προστέθηκε το ακόλουθο κλειδί ασφαλείας στο λογαριασμό σου + subject: 'Mastodon: Νέο κλειδί ασφαλείας' + title: Προστέθηκε νέο κλειδί ασφαλείας + deleted: + explanation: Διαγράφηκε το ακόλουθο κλειδί ασφαλείας από το λογαριασμό σου + subject: 'Mastodon: Διαγράφηκε ένα κλειδί ασφαλείας' + title: Ένα από τα κλειδιά ασφαλείας σου διαγράφηκε + webauthn_disabled: + explanation: Η επαλήθευση με κλειδί ασφαλείας έχει απενεργοποιηθεί για τον λογαριασμό σας. Η σύνδεση είναι τώρα εφικτή μόνο με τη χρήση κλειδιού που δημιουργημένου με την συνδεδεμένη εφαρμογή TOTP. + subject: 'Mastodon: Η αυθεντικοποίηση με χρήση κλειδιών ασφαλείας απενεργοποιήθηκε' + title: Τα κλειδιά ασφαλείας απενεργοποιήθηκαν + webauthn_enabled: + explanation: Η επαλήθευση με κλειδί ασφαλείας έχει ενεργοποιηθεί για τον λογαριασμό σας. Μπορείτε να το χρησιμοποιήσετε για να συνδεθείτε. + subject: 'Mastodon: Ενεργοποιήθηκε η επαλήθευση με κλειδί ασφαλείας' + title: Τα κλειδιά ασφαλείας ενεργοποιήθηκαν omniauth_callbacks: failure: Δεν μπόρεσαμε να σε πιστοποιήσουμε μέσω %{kind} γιατί "%{reason}". success: Επιτυχημένη πιστοποίηση μέσω %{kind} λογαριασμού. diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml index bb229e8f5..d4dc4b7a7 100644 --- a/config/locales/devise.es-AR.yml +++ b/config/locales/devise.es-AR.yml @@ -39,7 +39,7 @@ es-AR: explanation: Confirmá la nueva dirección para cambiar tu correo electrónico. extra: Si no pediste este cambio, por favor, ignorá este mensaje. No se cambiará la dirección de correo electrónico de tu cuenta de Mastodon hasta que no accedas al enlace de arriba. subject: 'Mastodon: confirmar correo electrónico para %{instance}' - title: Verifique dirección de correo electrónico + title: Verificar dirección de correo electrónico reset_password_instructions: action: Cambiar contraseña explanation: Pediste una nueva contraseña para tu cuenta. @@ -60,6 +60,23 @@ es-AR: title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: instrucciones de desbloqueo' + webauthn_credential: + added: + explanation: Se agregó la siguiente llave de seguridad a tu cuenta + subject: 'Mastodon: nueva llave de seguridad' + title: Se agregó una nueva llave de seguridad + deleted: + explanation: Se eliminó la siguiente llave de seguridad de tu cuenta + subject: 'Mastodon: llave de seguridad eliminada' + title: Se eliminó una de tus llaves de seguridad + webauthn_disabled: + explanation: Se deshabilitó la autenticación con llaves de seguridad en tu cuenta. El inicio de sesión ahora es posible usando sólo la clave generada por la aplicación TOTP asociada. + subject: 'Mastodon: autenticación con llaves de seguridad, deshabilitada' + title: Llaves de seguridad deshabilitadas + webauthn_enabled: + explanation: Se habilitó la autenticación de llave de seguridad en tu cuenta. Ahora tu llave de seguridad se puede usar para iniciar sesión. + subject: 'Mastodon: autenticación con llaves de seguridad, habilitada' + title: Llaves de seguridad habilitadas omniauth_callbacks: failure: 'No se te pudo autenticar desde %{kind} debido a esto: "%{reason}".' success: Se autenticó exitosamente para la cuenta %{kind}. @@ -67,7 +84,7 @@ es-AR: no_token: No podés acceder a esta página sin venir desde un correo electrónico destinado al cambio de contraseña. Si venís desde dicho mensaje, por favor, asegurate que usaste toda la dirección web ofrecida. send_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, en unos minutos, vas a recibir un correo electrónico con un enlace para cambiar tu contraseña. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. send_paranoid_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, en unos minutos, vas a recibir un correo electrónico con un enlace para cambiar tu contraseña. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. - updated: Se cambió existosamente tu contraseña. Ya iniciaste sesión. + updated: Se cambió exitosamente tu contraseña. Ya iniciaste sesión. updated_not_active: Se cambió exitosamente tu contraseña. registrations: destroyed: "¡Chauchas! Se canceló exitosamente tu cuenta. Esperamos verte pronto de nuevo." diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml index 80d438092..2fbf0ffd7 100644 --- a/config/locales/devise.es.yml +++ b/config/locales/devise.es.yml @@ -1,98 +1 @@ ---- -es: - devise: - confirmations: - confirmed: Su direccion de email ha sido confirmada con exito. - send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos. - send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo en pocos minutos. - failure: - already_authenticated: Usted ya está registrado. - inactive: Su cuenta todavía no está activa. - invalid: Inválido %{authentication_keys} o contraseña. - last_attempt: Tiene un intento más antes de que su cuenta sea bloqueada. - locked: Su cuenta está bloqueada. - not_found_in_database: Inválido %{authentication_keys} o contraseña. - pending: Su cuenta aun se encuentra bajo revisión. - timeout: Su sesión ha expirado. Por favor inicie sesión de nuevo para continuar. - unauthenticated: Necesita iniciar sesión o registrarse antes de continuar. - unconfirmed: Tiene que confirmar su dirección de correo electrónico antes de continuar. - mailer: - confirmation_instructions: - action: Verificar dirección de correo electrónico - action_with_app: Confirmar y regresar a %{app} - explanation: Has creado una cuenta en %{host} con esta dirección de correo electrónico. Estas a un clic de activarla. Si no fue usted, por favor ignore este correo electrónico. - explanation_when_pending: Usted ha solicitado una invitación a %{host} con esta dirección de correo electrónico. Una vez que confirme su dirección de correo electrónico, revisaremos su aplicación. No puede iniciar sesión hasta que su aplicación sea revisada. Si su solicitud está rechazada, sus datos serán eliminados, así que no será necesaria ninguna acción adicional por ti. Si no fuera usted, por favor ignore este correo electrónico. - extra_html: Por favor revise las reglas de la instancia y nuestros términos de servicio. - subject: 'Mastodon: Instrucciones de confirmación para %{instance}' - title: Verificar dirección de correo electrónico - email_changed: - explanation: 'El correo electrónico para su cuenta esta siendo cambiada a:' - extra: Si usted no ha cambiado su correo electrónico, es probable que alguien haya conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte al administrador de la instancia si usted no puede iniciar sesión. - subject: 'Mastodon: Correo electrónico cambiado' - title: Nueva dirección de correo electrónico - password_change: - explanation: La contraseña de su cuenta a sido cambiada. - extra: Si usted no a cambiado su contraseña. es probable que alguien a conseguido acceso a su cuenta. Por favor cambie su contraseña inmediatamente o contacte a el administrador de la instancia si usted esta bloqueado de su cuenta. - subject: 'Mastodon: Contraseña cambiada' - title: Contraseña cambiada - reconfirmation_instructions: - explanation: Confirme la nueva dirección para cambiar su coreo electrónico. - extra: Si no iniciaste este cambio, por favor ignora este correo. Esta dirección de correo para la cuenta de Mastodon no cambiará hasta que accedas al vinculo arriba. - subject: 'Mastodon: Confirme correo electrónico para %{instance}' - title: Verifique dirección de correo electrónico - reset_password_instructions: - action: Cambiar contraseña - explanation: Solicitaste una nueva contraseña para tu cuenta. - extra: Si no solicitaste esto, por favor ignora este correo. Tu contraseña no cambiará hasta que tu accedas al vinculo arriba y crees una nueva. - subject: 'Mastodon: Instrucciones para reiniciar contraseña' - title: Reiniciar contraseña - two_factor_disabled: - explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña. - subject: 'Mastodon: La autenticación de dos factores está deshabilitada' - title: 2FA desactivada - two_factor_enabled: - explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar. - subject: 'Mastodon: La autenticación de dos factores está habilitada' - title: 2FA activada - two_factor_recovery_codes_changed: - explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos. - subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados' - title: Códigos de recuperación 2FA cambiados - unlock_instructions: - subject: 'Mastodon: Instrucciones para desbloquear' - omniauth_callbacks: - failure: No podemos autentificarle desde %{kind} debido a "%{reason}". - success: Autentificado con éxito desde la cuenta %{kind} . - passwords: - no_token: No puede acceder a esta página sin provenir desde el correo de reinicio de contraseña. Si viene desde el correo de reinicio de contraseña, por favor asegúrese que está utilizando la dirección completa proporcionada. - send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo reiniciar su contraseña en pocos minutos. - send_paranoid_instructions: Si su correo electrónico existe en nuestra base de datos, recibirá un enlace de recuperación de contraseña en su dirección de correo en pocos minutos. - updated: Su contraseña ha sido cambiada con éxito. Ahora ya está registrado. - updated_not_active: Su contraseña ha sido cambiada con éxito. - registrations: - destroyed: "¡Adios! Su cuenta ha sido cancelada con éxito. Esperamos verle pronto de nuevo." - signed_up: "¡Bienvenido! Se ha registrado con éxito." - signed_up_but_inactive: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta no ha sido activada todavía. - signed_up_but_locked: Se ha registrado con éxito. Sin embargo, no podemos identificarle porque su cuenta está bloqueada. - signed_up_but_pending: Un mensaje con un enlace de confirmacion ha sido enviado a su direccion de email. Luego de clickear el link revisaremos su aplicacion. Seras notificado si es aprovada. - signed_up_but_unconfirmed: Un mensaje con un enlace de confirmación ha sido enviado a su correo electrónico. Por favor siga el enlace para activar su cuenta. - update_needs_confirmation: Ha actualizado su cuenta con éxito, pero necesitamos verificar su nueva dirección de correo. Por favor compruebe su correo y siga el enlace para confirmar su nueva dirección de correo. - updated: su cuenta ha sido actualizada con éxito. - sessions: - already_signed_out: Cerró sesión con éxito. - signed_in: Se registró con éxito. - signed_out: Cerró sesión con éxito. - unlocks: - send_instructions: Recibirá un correo electrónico con instrucciones sobre cómo desbloquear su cuenta en pocos minutos. - send_paranoid_instructions: Si su cuenta existe, recibirá un correo electrónico con instrucciones sobre cómo desbloquearla en pocos minutos. - unlocked: Su cuenta ha sido desbloqueada con éxito. Por favor inicie sesión para continuar. - errors: - messages: - already_confirmed: ya fue confirmado, por favor intente iniciar sesión - confirmation_period_expired: necesita ser confirmado dentro de %{period}, por favor pida una nueva - expired: ha expirado, por favor pida una nueva - not_found: no encontrado - not_locked: no fue bloqueada - not_saved: - one: '1 error prohibió este %{resource} de ser guardado:' - other: "%{count} errores prohibieron este %{resource} de ser guardado:" +--- {} diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index 753da6b9c..c13df9989 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -60,6 +60,23 @@ fa: title: کدهای بازیابی تأیید هویت دو مرحله‌ای عوض شده‌اند unlock_instructions: subject: 'ماستودون: دستورالعمل‌های قفل‌گشایی' + webauthn_credential: + added: + explanation: کلید امنیتی زیر به حسابتان افزوده شد + subject: 'ماستودون: کلید امنیتی جدید' + title: کلید امنیتی جدیدی افزوده شد + deleted: + explanation: کلید امنیتی زیر از حسابتان حذف شد + subject: 'ماستودون: کلید امنیتی حذف شد' + title: یکی از کلیدهای امنیتیتان حذف شد + webauthn_disabled: + explanation: تأیید هویت با کلیدهای امنیتی برای حسابتان از کار افتاده است. ورود اکنون فقط با ژتون ایجاد شده با کارهٔ TOTP جفت‌شده امکان‌پذیر است. + subject: 'ماستودون: تأیید هویت با کلیدهای امنیتی از کار افتاد' + title: کلیدهای امنیتی از کار افتادند + webauthn_enabled: + explanation: تأیید هویت با کلید امنیتی برای حسابتان به کار افتاده است. اکنون کلید امنیتیتان می‌تواند برای ورود استفاده شود. + subject: 'ماستودون: تأیید هویت با کلید امنیتی به کار افتاد' + title: کلیدهای امنیتی به کار افتادند omniauth_callbacks: failure: تآیید هویتتان از %{kind} نتوانست انجام شود چرا که «%{reason}». success: تأیید هویت از حساب %{kind} با موفقیت انجام شد. diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 3edd348e6..b918b7fb2 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -60,6 +60,23 @@ fr: title: Codes de récupération 2FA modifiés unlock_instructions: subject: 'Mastodon : Instructions pour déverrouiller votre compte' + webauthn_credential: + added: + explanation: La clé de sécurité suivante a été ajoutée à votre compte + subject: 'Mastodon: Nouvelle clé de sécurité' + title: Une nouvelle clé de sécurité a été ajoutée + deleted: + explanation: La clé de sécurité suivante a été supprimée de votre compte + subject: 'Mastodon: Clé de sécurité supprimée' + title: Une de vos clés de sécurité a été supprimée + webauthn_disabled: + explanation: L'authentification avec les clés de sécurité a été désactivée pour votre compte. La connexion est maintenant possible en utilisant uniquement le jeton généré par l'application TOTP appairée. + subject: 'Mastodon: Authentification avec clés de sécurité désactivée' + title: Clés de sécurité désactivées + webauthn_enabled: + explanation: L'authentification par clé de sécurité a été activée pour votre compte. Votre clé de sécurité peut maintenant être utilisée pour vous connecter. + subject: 'Mastodon: Authentification de la clé de sécurité activée' + title: Clés de sécurité activées omniauth_callbacks: failure: 'Nous n’avons pas pu vous authentifier via %{kind} : ''%{reason}''.' success: Authentifié avec succès via %{kind}. diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index f2eb2b77b..07ab2557a 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -60,6 +60,23 @@ gl: title: Códigos de recuperación 2FA mudados unlock_instructions: subject: 'Mastodon: Instrucións para desbloquear' + webauthn_credential: + added: + explanation: Engadeuse a seguinte chave de seguridade á túa conta + subject: 'Mastodon: Nova chave de seguridade' + title: Engadeuse unha nova chave de seguridade + deleted: + explanation: Eliminouse a seguinte chave de seguridade da túa conta + subject: 'Mastodon: Chave de seguridade eliminada' + title: Eliminouse unha das túas chaves de seguridade + webauthn_disabled: + explanation: Desactivouse para a túa conta a autenticación con chaves de seguridade. Agora a conexión é posible usando só o token creado pola app TOTP emparellada. + subject: 'Mastodon: Desactivouse a autenticación con chave de seguridade' + title: Chaves de seguridade desactivadas + webauthn_enabled: + explanation: Activouse para a conta a autenticación con chave de seguridade. Xa podes usar a chave de seguridade para contectar. + subject: 'Mastodon: Autenticación con chave de seguridade activada' + title: Chaves de seguridade activas omniauth_callbacks: failure: Non foi posíbel autenticar %{kind} porque "%{reason}". success: Autenticado con éxito na conta %{kind}. diff --git a/config/locales/devise.hi.yml b/config/locales/devise.hi.yml index d758a5b53..62048c9f5 100644 --- a/config/locales/devise.hi.yml +++ b/config/locales/devise.hi.yml @@ -1 +1,12 @@ +--- hi: + devise: + confirmations: + confirmed: आपका ईमेल पता का सफलतापूर्वक पुष्टि कर लिया गया था + failure: + already_authenticated: आप पहले से ही साइन इन है| + inactive: आपका खाता सक्रिय नहीं है! + locked: आपके अकाउंट को ब्लॉक किया गया है। + mailer: + email_changed: + title: नया ईमेल पता diff --git a/config/locales/devise.hr.yml b/config/locales/devise.hr.yml index e0c569cee..235e35414 100644 --- a/config/locales/devise.hr.yml +++ b/config/locales/devise.hr.yml @@ -2,50 +2,56 @@ hr: devise: confirmations: - confirmed: Tvoja email adresa je uspješno potvrđena. - send_instructions: Primit ćeš email sa uputama kako potvrditi svoju email adresu za nekoliko minuta. - send_paranoid_instructions: Ako tvoja email adresa postoji u našoj bazi podataka, primit ćeš email sa uputama kako ju potvrditi za nekoliko minuta. + confirmed: Vaša adresa e-pošte uspješno je potvrđena. + send_instructions: Za nekoliko minuta primit ćete e-poštu s uputama kako potvrditi Vašu adresu e-pošte. Molimo pogledajte Vašu mapu s neželjenom poštom, ako niste primili ovu e-poštu. + send_paranoid_instructions: Ako Vaša adresa e-pošte postoji u našoj bazi podataka, za nekoliko minuta primit ćete e-poštu s uputama kako ju potvrditi. Molimo provjerite mapu s neželjenom poštom, ako niste primili ovu e-poštu. mailer: confirmation_instructions: - subject: 'Mastodon: Upute za potvrđivanje %{instance}' + action: Potvrdi adresu e-pošte + action_with_app: Potvrdi i vrati se na %{app} + subject: 'Mastodon: upute za potvrđivanje za %{instance}' + title: Potvrdi adresu e-pošte email_changed: - subject: 'Mastodon: Email adresa je promijenjena' - title: Nova email adresa + subject: 'Mastodon: adresa e-pošte je promijenjena' + title: Nova adresa e-pošte password_change: - subject: 'Mastodon: Lozinka je promijenjena' + subject: 'Mastodon: lozinka je promijenjena' reset_password_instructions: - subject: 'Mastodon: Upute za resetiranje lozinke' + subject: 'Mastodon: upute za ponovno postavljanje lozinke' + title: Ponovno postavljanje lozinke + two_factor_disabled: + title: 2FA je onemogućen unlock_instructions: - subject: 'Mastodon: Upute za otključavanje' + subject: 'Mastodon: upute za otključavanje' omniauth_callbacks: - failure: Ne možemo te autentificirati sa %{kind} zbog "%{reason}". - success: Uspješno autentificiran sa %{kind} računa. + failure: Ne možemo Vas autentificirati s %{kind} zbog "%{reason}". + success: Uspješno ste autentificirani s računom na %{kind}. passwords: - no_token: Ne možeš pristupiti ovoj stranici bez dolaženja sa emaila za resetiranje lozinke. Ako dolaziš sa tog emaila, pazi da koristiš potpuni link koji ti je dan. - send_instructions: Primit ćeš email sa uputama kako resetirati svoju lozinku za nekoliko minuta. - send_paranoid_instructions: Ako tvoja email adresa postoji u našoj bazi podataka, primit ćeš link za povrat lozinke na svoju email adresu za nekoliko minuta. - updated: Tvoja lozinka je uspješno izmijenjena. Sada si prijavljen. - updated_not_active: Toja lozinka je uspješno izmijenjena. + no_token: Ovoj stranici ne možete pristupiti, ako ne stižete iz e-pošte za ponovno postavljanje lozinke. Ako dolazite iz e-pošte za ponovno postavljanje lozinke, molimo budite sigurni da koristite puni URL koji ste primili. + send_instructions: Ako Vaša adresa e-pošte postoji u našoj bazi podataka, za nekoliko minuta primit ćete poveznicu za oporavak lozinke. Molimo provjerite mapu s neželjenom poštom, ako niste primili ovu e-poštu. + send_paranoid_instructions: Ako Vaša adresa e-pošte postoji u našoj bazi podataka, za nekoliko minuta primit ćete e-poštu s poveznicom za oporavak lozinke. Molimo provjerite mapu s neželjenom poštom, ako niste primili ovu e-poštu. + updated: Vaša lozinka uspješno je promijenjena. Sada ste prijavljeni. + updated_not_active: Vaša lozinka uspješno je promijenjena. registrations: - destroyed: Zbogom! Tvoj račun je uspješno otkazan. Nadamo se da ćemo te vidjeti ponovo. - signed_up: Dobro došao! Uspješno si se prijavio. - signed_up_but_inactive: Uspješno si se registrirao. No, ne možeš se prijaviti, jer ti račun još nije aktiviran. - signed_up_but_locked: Uspješno si se registrirao. No, ne možeš se prijaviti jer je tvoj račun zaključan. - signed_up_but_unconfirmed: Poruka sa linkom za potvrđivanje je poslana na tvoju email adresu. Molimo, slijedi link kako bi tvoj račun bio aktiviran. - update_needs_confirmation: Tvoj račun je uspješno ažuriran, ali trebamo provjeriti tvoju novu email adresu. Molimo, provjeri svoj email i slijedi link za potvrđivanje kako bi tvoja nova email adresa bila potvrđena. - updated: Tvoj račun je uspješno ažuriran. + destroyed: Zbogom! Vaš je račun uspješno otkazan. Nadamo se da ćemo Vas uskoro ponovno vidjeti. + signed_up: Dobro došli! Uspješno ste se prijavili. + signed_up_but_inactive: Uspješno ste se registrirali. No, ne možemo Vas prijaviti jer Vaš račun još nije aktiviran. + signed_up_but_locked: Uspješno ste se registrirali. No, ne možemo Vas prijaviti jer je Vaš račun zaključan. + signed_up_but_unconfirmed: Poruka s poveznicom za potvrđivanje poslana je na Vašu adresu e-pošte. Molimo slijedite poveznicu za aktivaciju Vašeg računa. Molimo provjerite mapu neželjene pošte, ako niste primili ovu e-poštu. + update_needs_confirmation: Vaš račun uspješno je ažuriran, ali moramo potvrditi Vašu novu adresu e-pošte. Molimo provjerite Vašu e-poštu i slijedite poveznicu za potvrđivanje Vaše nove adrese e-pošte. Molimo provjerite mapu neželjene pošte, ako niste primili ovu e-poštu. + updated: Vaš je račun uspješno ažuriran. sessions: - already_signed_out: Uspješno si odjavljen. - signed_in: Uspješno si prijavljen. - signed_out: Uspješno si odjavljen. + already_signed_out: Uspješno ste odjavljeni. + signed_in: Uspješno ste prijavljeni. + signed_out: Uspješno ste odjavljeni. unlocks: - send_instructions: Primit ćeš email sa uputama kako otključati svoj račun za nekoliko minuta. - send_paranoid_instructions: Ako tvoj račun postoji, primit ćeš email sa uputama kako ga otključati za nekoliko minuta. - unlocked: Tvoj račun je uspješno otključan. Prijavi se kako bi nastavio. + send_instructions: Primit ćete e-poštu s uputama kako otključati Vaš račun za nekoliko minuta. Molimo provjerite neželjenu poštu, ako niste primili ovu e-poštu. + send_paranoid_instructions: Ako Vaš račun postoji, za nekoliko minuta primit ćete e-poštu s uputama kako ga otključati. Molimo provjerite mapu neželjene pošte, ako niste primili ovu e-poštu. + unlocked: Vaš je račun uspješno otključan. Molimo prijavite se za nastavak. errors: messages: - already_confirmed: je već potvrđen, pokušaj se prijaviti - confirmation_period_expired: mora biti potvrđen u roku od %{period}, molimo zatraži novi - expired: je istekao, zatraži novu - not_found: nije nađen + already_confirmed: je već potvrđen, pokušajte se prijaviti + confirmation_period_expired: mora biti potvrđen unutar %{period}, molimo zatražite novi + expired: je istekao, zatražite novi + not_found: nije pronađen not_locked: nije zaključan diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 62888be74..7b1aa3874 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -60,6 +60,23 @@ hu: title: A kétlépcsős kódok megváltozott unlock_instructions: subject: 'Mastodon: Feloldási lépések' + webauthn_credential: + added: + explanation: A következő biztonsági kulcsot hozzáadtuk a fiókodhoz + subject: 'Mastodon: Új biztonsági kulcs' + title: Új biztonsági kulcsot vettünk fel + deleted: + explanation: A következő biztonsági kulcsot töröltük a fiókodból + subject: 'Mastodon: Biztonsági kulcs törölve' + title: Az egyik biztonsági kulcsodat törölték + webauthn_disabled: + explanation: A biztonsági kulccsal történő hitelesítést letiltottuk a fiókodon. Bejelentkezni csak a párosított TOTP app által generált tokennel lehet. + subject: 'Mastodon: Biztonsági kulccsal történő hitelesítés letiltva' + title: Biztonsági kulcsok letiltva + webauthn_enabled: + explanation: A biztonsági kulccsal történő hitelesítést engedélyeztük a fiókodon. A biztonsági kulcsodat mostantól használhatod bejelentkezésre. + subject: 'Mastodon: Biztonsági kulcsos hitelesítés engedélyezve' + title: Biztonsági kulcsok engedélyezve omniauth_callbacks: failure: Sikertelen hitelesítés %{kind} fiókról, mert "%{reason}". success: Sikeres hitelesítés %{kind} fiókról. diff --git a/config/locales/devise.hy.yml b/config/locales/devise.hy.yml index 885408947..26b91a609 100644 --- a/config/locales/devise.hy.yml +++ b/config/locales/devise.hy.yml @@ -2,12 +2,12 @@ hy: devise: confirmations: - confirmed: Ձեր էլփոստի հասցեն հաջողությամբ հաստատվեց։ - send_instructions: Մենք ուղարկել ենք Ձեզ էլ․նամակ՝ նկարագրությունով, թե ինչպես հաստատեք էլ․փոստը մի քանի վայրկյանում։ Ստուգե ձեր թափոն թղթապանակը, եթե նամակ չեք ստացել։ + confirmed: Ձեր էլ․ փոստի հասցէն յաջողութեամբ հաստատուեց։ + send_instructions: Մի քանի րոպէից դու կը ստանաս իմակ՝ նկարագրութիւններով, թէ ինչպէս հաստատես էլ․ հասցէդ։ Խնդրում ենք, ստուգիր սպամ պանակդ, եթէ չստանաս իմակ։ send_paranoid_instructions: Եթե ձեր էլ․փոստի հասցեն արդեն կա մեր տվյալների բազայում, ապա մենք ուղարկել ենք Ձեզ էլ․նամակ՝ նկարագրությունով, թե ինչպես հաստատեք էլ․փոստը մի քանի վայրկյանում։ Ստուգե ձեր թափոն թղթապանակը, եթե նամակ չեք ստացել։ failure: - already_authenticated: Դուք արդեն մուտք եք գործել։ - inactive: Ձեր հաշիվը դեռ ակտիվացված չէ։ + already_authenticated: Արդէն մուտք ես գործել + inactive: Հաշիւդ դեռ ակտիւ չէ invalid: Սխալ %{authentication_keys} կամ գաղտնաբառ։ last_attempt: Դուք ունեք վերջին հնարավորությունը, որից հետո հաշիվը կարգեալափակվի։ locked: Ձեր հաշիվը արգելափակված է։ @@ -20,30 +20,79 @@ hy: confirmation_instructions: action: Հաստատել էլ․ հասցեն action_with_app: Հաստատեք և ետ անցեք %{app} - title: Հաստատել էլ․ հասցեն + explanation: Դու արդէն ստեղծել ես հաշիւ %{host}ում այս էլ․ փոստով։ Դու այն ակտիւացնելուց հեռու ես մէկ կտտոցով։ Եթէ դու չես եղել, ապա անտեսիր այս իմակը։ + explanation_when_pending: Դու արդէն այս էլ․ փոստով դիմել ես %{host}ում հրաւէրի համար։ Երբ հաստատես էլ․ հասցէն, մենք կը վերանայենք քո դիմումը։ Կարող ես մուտք գործել տուեալներդ փոփոխելու կամ հաշիւդ ջնջելու համար, բայց այլ գործողութիւնների հասանելիութիւն չունես՝ նախքան հաշուիդ հաստատումը։ Եթէ դիմումդ մերժուի, քո տուեալները կը վերացուեն, եւ քեզնից այլ գործողութիւն չի սպասուի։ Եթէ դու չես եղել, խնդրում ենք, անտեսիր այս իմակը։ + extra_html: Խնդրում ենք, տես նաեւ սերուերի կանոնները եւ ծառայութեան պայմանները։ + subject: Մաստոդոն․ հաստատման գործողութիւններ %{instance}ի համար + title: Հաստատել էլ․ հասցէն email_changed: - subject: Մաստոդոն․ Էլ․փոստը փոփոխվեց - title: Նոր էլ․ հասցե + explanation: Քո հաշուի էլ․ հասցէն փոխուել է․ + extra: Եթէ դու չես փոխել քո էլ․ հասցէն՝ նշանակում է, որ որեւէ մէկը հասանելիութիւն ունի քո հաշուին։ Խնդրում ենք, շտապ փոխիր գաղտնաբառդ կամ կապուիր սերուէրի ադմինի հետ, որ արգելափակի հաշիւդ։ + subject: Մաստոդոն․ Էլ․ փոստը փոփոխուեց + title: Նոր էլ․ հասցէ password_change: - subject: Մաստոդոն․ Գաղտնաբառը փոփոխվեց - title: Գաղտնաբառը փոփոխվեց + explanation: Հաշուիդ գաղտնաբառը փոփոխուեց։ + extra: Եթէ դու չես փոխել քո գաղտնաբառը՝ նշանակում է, որ որեւէ մէկը հասանելիութիւն ունի քո հաշուին։ Խնդրում ենք, շտապ փոխիր գաղտնաբառդ կամ կապուիր սերուէրի ադմինի հետ, որ արգելափակի հաշիւդ։ + subject: Մաստոդոն․ Գաղտնաբառը փոփոխուեց + title: Գաղտնաբառը փոփոխուեց reconfirmation_instructions: - explanation: Հաստատեք նոր էլ․հասցեն, ձեր էլ․թոստը փոխելու համար։ - title: Հաստատել էլ․ հասցեն + explanation: Հաստատիր քո էլ․ հասցէն այն փոխելու համար։ + extra: Եթէ այս փոփոխութիւնը դու չես նախաձեռնել՝ անտեսիր այս իմակը։ Էլ․ հասցէն Մաստոդոն հաշուի համար չի փոփոխուի, քանի դեռ դու չես հաստատել վերեւի յղումը։ + subject: Մաստոդոն․ հաստատիր էլ․ հասցէն %{instance}ի համար + title: Հաստատել էլ․ հասցէն reset_password_instructions: action: Փոխել գաղտնաբառը - title: Վերակայել գաղտնաբառը + explanation: Դու պահանջել ես նոր գաղտնաբառ այս հաշուի համար։ + extra: Եթէ դու չես պահանջել այն, խնդրում ենք անտեսիր այս իմակը։ Քո գաղտնաբառը չի փոխուի, քանի դեռ դու չես հաստատել վերեւի յղումը եւ ստեղծել նորը։ + subject: Մաստոդոն․ Գաղտնաբառի վերականգնման նկարագրութիւններ + title: Վերականգնել գաղտնաբառը two_factor_disabled: - title: 2FA անջատված է + explanation: 2FA֊ն քո հաշուի համար անջատուեց։ Մուտքն այժմ հնարաւոր է միայն էլ․ փոտի եւ գաղտնաբառի միջոցով։ + subject: Մաստոդոն․ 2FA֊ն անջատուեց + title: 2FA անջատուած է two_factor_enabled: - title: 2FA միացված է + explanation: 2FA֊ն քո հաշուի համար միացուած է։ TOTP ծրագրի միջոցով գեներացուած token֊ը պէտք է օգտագործես մուտք գործելու համար։ + subject: Մաստոդոն․ 2FA-ն միացուեց + title: 2FA միացուած է + two_factor_recovery_codes_changed: + explanation: Նախորդ վերականգնման կոդերն անվաւեր են, պէտք է նորը գեներացուի։ + subject: Մաստոդոն․ 2FA վերականգնման կոդերը կրկին գեներացուել են + title: 2FA վերականգնման կոդերը փոփոխուել են unlock_instructions: - subject: Մաստոդոն․ Ապակողպելու նկարագրությունը + subject: Մաստոդոն․ Ապակողպելու նկարագրութիւնները + omniauth_callbacks: + failure: Նոյնականացնել հնարաւոր չեղաւ %{kind}ից քանի որ %{reason}։ + success: Յաջողութեամբ նոյնականացուեց %{kind} հաշուից։ + passwords: + no_token: Դու հասանելիութիւն չունես այս էջին, առանց գաղտնաբառի փոփոխման իմակի յղման։ Եթէ եկել ես գաղտնաբառի վերականգման իմակի միջոցով, ապա խնդրում ենք, համոզուիր, որ տրամադրուած URL֊ն փակցրել ես ամբողջութեամբ։ + send_instructions: Եթէ քո էլ․ փոստի հասցէն արդէն կայ մեր տուեալների բազայում, դու մի քանի րոպէից էլ․ փոստիդ կը ստանաս գաղտնաբառի վերականգնման յղումը։ Խնդրում ենք, ստուգիր սպամ պանակդ, եթէ չստանաս իմակը։ + send_paranoid_instructions: Եթէ քո էլ․ փոստի հասցէն արդէն կայ մեր տուեալների բազայում, դու մի քանի րոպէից էլ․ փոստիդ կը ստանաս գաղտնաբառի վերականգնման յղումը։ Խնդրում ենք, ստուգիր սպամ պանակդ, եթէ չստանաս իմակը։ + updated: Գաղտաբառդ փոփոխուեց յաջողութեամբ։ Այժմ մուտք գործած ես։ + updated_not_active: Գաղտնաբառդ փոփոխուեց յաջողութեամբ։ + registrations: + destroyed: Ցը՜․ Քո հաշիւը յաջողութեամբ չեղարկուեց։ Յոյս ունենք քեզ կրկին տեսնել։ + signed_up: Ողջո՜յն։ Բարեյաջող գրանցուեցիր։ + signed_up_but_inactive: Բարեյաջող գրանցուեցիր։ Սակայն, դեռ չես կարող մուտք գործել, քանի որ հաշիւդ դեռ ակտիւ չէ։ + signed_up_but_locked: Բարեյաջող գրանցուեցիր։ Սակայն, դեռ չես կարող մուտք գործել, քանի որ հաշիւդ փակ է։ + signed_up_but_pending: Հաղորդագրութիւնը՝ հաստատման յղումով ուղարկուել է քո էլ․ փոստին։ Յղմանը կտտացնելուց յետոյ մենք կը վերանայենք քո դիմումը։ Հաստատումից յետոյ քեզ կը տեղեկացնենք։ + signed_up_but_unconfirmed: Հաղորդագրութիւնը՝ հաստատման յղումով ուղարկուել է քո էլ․ փոստին։ Խնդրում ենք հետեւիր յղմանը հաշիւդ ակտիւացնելու համար։ Խնդրում ենք, ստուգիր սպամ պանակը, եթէ չստանաս իմակ։ + update_needs_confirmation: Բարեյաջող թարմացրիր հաշիւդ, բայց մենք պէտք է հաստատենք քո էլ․ հասցէն։ Խնդրում ենք, ստուգիր փոստդ եւ հետեւիր հաստատման յղմանը՝ նոր էլ․ հասցէդ հաստատելու համար։ Ստուգիր սպամ պանակը, իմակ չստանալու դէպքում։ + updated: Հաշիւդ բարեյաջող թարմացուեց։ sessions: - already_signed_out: Մուտքը հաջողվեց։ - signed_in: Մուտքը հաջողվեց։ - signed_out: Մուտքը հաջողվեց։ + already_signed_out: Բարեյաջող դուրս եկար։ + signed_in: Մուտքը յաջողուեց։ + signed_out: Բարեյաջող դուրս եկար։ + unlocks: + send_instructions: Մի քանի րոպէից դու կը ստանաս իմակ՝ նկարագրութիւններով, թէ ինչպէս բացես հաշիւդ։ Իմակ չստանալու դէպքում, խնդրում ենք, ստուգիր սպամ պանակը։ + send_paranoid_instructions: Եթէ հաշիւդ գոյութիւն ունի՝ մի քանի րոպէից դու կը ստանաս իմակ՝ նկարագրութիւններով, թէ ինչպէս բացես այն։ Իմակ չստանալու դէպքում, խնդրում ենք, ստուգիր սպամ պանակը։ + unlocked: Հաշիւդ բարեյաջող բացուեց։ Շարունակելու համար խնդրում ենք մուտք գործիր։ errors: messages: - not_found: չգտնվեց - not_locked: արգելափակված չէ + already_confirmed: արդէն հաստատուած է, խնդրում ենք մուտք գործիր + confirmation_period_expired: պէտք է հաստատուէր %{period} ընթացքում, խնդրում ենք պահանջիր նորը + expired: սպառուել է, խնդրում ենք նորը պահանջիր + not_found: չգտնուեց + not_locked: արգելափակուած չէ + not_saved: + one: 1 սխալ թոյլ չտուեց պահպանել այս %{resource}ը․ + other: "%{count} սխալներ թոյլ չտուեցին պահպանել այս %{resource}ը․" diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml index 5b4e8af43..6fe6c257d 100644 --- a/config/locales/devise.id.yml +++ b/config/locales/devise.id.yml @@ -60,6 +60,23 @@ id: title: Kode pemulihan 2FA diubah unlock_instructions: subject: 'Mastodon: Petunjuk membuka' + webauthn_credential: + added: + explanation: Kunci keamanan berikut telah ditambahkan ke akun Anda + subject: 'Mastodon: Kunci keamanan baru' + title: Kunci keamanan baru telah ditambahkan + deleted: + explanation: Kunci keamanan berikut telah dihapus dari akun Anda + subject: 'Mastodon: Kunci keamanan dihapus' + title: Salah satu dari kunci keamanan Anda telah dihapus + webauthn_disabled: + explanation: Autentikasi dengan kunci keamanan telah dinonaktifkan untuk akun ini. Proses masuk akun hanya mungkin menggunakan token yang dibuat dengan aplikasi TOTP. + subject: 'Mastodon: Autentikasi dengan kunci keamanan dinoaktifkan' + title: Kunci keamanan dinonaktifkan + webauthn_enabled: + explanation: Autentikasi kunci keamanan telah diaktifkan untuk akun Anda. Kunci keamanan Anda kini dapat dipakai untuk masuk. + subject: 'Mastodon: Autentikasi kunci keamanan aktif' + title: Kunci keamanan aktif omniauth_callbacks: failure: Tidak dapat mengautentikasi anda dari %{kind} karena "%{reason}". success: Autentikasi dari akun %{kind} berhasil dilakukan. diff --git a/config/locales/devise.is.yml b/config/locales/devise.is.yml index 4d6fb3902..e595f77af 100644 --- a/config/locales/devise.is.yml +++ b/config/locales/devise.is.yml @@ -60,6 +60,23 @@ is: title: Endurheimtukóðar tveggja-þátta auðkenningar breyttust unlock_instructions: subject: 'Mastodon: Leiðbeiningar til að aflæsa' + webauthn_credential: + added: + explanation: Eftirfarandi öryggislykli hefur verið bætt við notandaaðganginn þinn + subject: 'Mastodon: Nýr öryggislykill' + title: Nýjum öryggislykli hefur verið bætt við + deleted: + explanation: Eftirfarandi öryggislykli hefur verið eytt úr notandaaðgangnum þínum + subject: 'Mastodon: Öryggislykli eytt' + title: Einum af öryggilyklunum þínum hefur verið eytt + webauthn_disabled: + explanation: Auðkenning með öryggislyklum hefur verið gerð óvirk fyrir aðganginn þinn. Innskráning er núna einungis möguleg með teikni útbúnu af paraða TOTP-forritinu. + subject: 'Mastodon: Auðkenning með öryggislyklum er óvirk' + title: Öryggislyklar eru óvirkir + webauthn_enabled: + explanation: Auðkenning með öryggislykli hefur verið gerð virk fyrir aðganginn þinn. Nú er hægt að nota öryggislykilinn þinn til að skrá inn. + subject: 'Mastodon: Auðkenning með öryggislykli er virk' + title: Öryggislyklar eru virkir omniauth_callbacks: failure: Gat ekki auðkennt þig frá %{kind} vegna "%{reason}". success: Tókst að auðkenna frá %{kind} notandaaðgangnum. diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml index 714684924..31e3c7f94 100644 --- a/config/locales/devise.it.yml +++ b/config/locales/devise.it.yml @@ -60,6 +60,23 @@ it: title: Codici di recupero 2FA modificati unlock_instructions: subject: 'Mastodon: Istruzioni di sblocco' + webauthn_credential: + added: + explanation: La seguente chiave di sicurezza è stata aggiunta al tuo account + subject: 'Mastodon: Nuova chiave di sicurezza' + title: È stata aggiunta una nuova chiave di sicurezza + deleted: + explanation: La seguente chiave di sicurezza è stata cancellata dal tuo account + subject: 'Mastodon: Chiave di sicurezza cancellata' + title: Una delle tue chiavi di sicurezza è stata cancellata + webauthn_disabled: + explanation: L'autenticazione con le chiavi di sicurezza è stata disabilitata per il tuo account. L'accesso è ora possibile utilizzando solo il codice generato dall'app TOTP abbinata. + subject: 'Mastodon: Autenticazione con chiavi di sicurezza disabilitata' + title: Chiavi di sicurezza disattivate + webauthn_enabled: + explanation: L'autenticazione con chiave di sicurezza è stata attivata per il tuo account. La chiave di sicurezza può ora essere utilizzata per l'accesso. + subject: 'Mastodon: Autenticazione della chiave di sicurezza abilitata' + title: Chiave di sicurezza abilitata omniauth_callbacks: failure: Impossibile autenticarti da %{kind} perché "%{reason}". success: Autenticato con successo con account %{kind}. diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index e697e290d..66b0d7fe1 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -60,6 +60,16 @@ ja: title: 二段階認証のリカバリーコードが変更されました unlock_instructions: subject: 'Mastodon: アカウントのロックの解除' + webauthn_credential: + added: + subject: 'Mastodon: セキュリティキーが追加されました' + deleted: + subject: 'Mastodon: セキュリティキーが削除されました' + title: セキュリティキーが削除されました + webauthn_disabled: + subject: 'Mastodon: セキュリティキー認証が無効になりました' + webauthn_enabled: + subject: 'Mastodon: セキュリティキー認証が有効になりました' omniauth_callbacks: failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。" success: "%{kind}からのアクセスは正常に認証されました。" diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index fbe036875..3916d92b1 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -60,6 +60,23 @@ ko: title: 2FA 복구 코드 변경됨 unlock_instructions: subject: '마스토돈: 잠금 해제 방법' + webauthn_credential: + added: + explanation: 계정에 다음 보안 키가 등록되었습니다 + subject: '마스토돈: 새로운 보안 키' + title: 새 보안 키가 추가되었습니다 + deleted: + explanation: 계정에서 다음 보안 키가 삭제되었습니다 + subject: '마스토돈: 보안 키 삭제' + title: 보안 키가 삭제되었습니다 + webauthn_disabled: + explanation: 보안 키를 이용한 인증이 당신의 계정에 대해 비활성화 되어 있습니다. TOTP 앱의 토큰만으로 로그인 할 수 있습니다. + subject: '마스토돈: 보안 키를 이용한 인증이 비활성화 됨' + title: 보안 키 비활성화 됨 + webauthn_enabled: + explanation: 보안 키 인증이 당신의 계정에 대해 활성화 되어 있습니다. 보안 키를 통해 로그인 할 수 있습니다. + subject: '마스토돈: 보안 키 인증 활성화 됨' + title: 보안 키 활성화 됨 omniauth_callbacks: failure: '"%{reason}" 때문에 당신을 %{kind}에서 인증할 수 없습니다.' success: 성공적으로 %{kind} 계정을 인증 했습니다. @@ -79,9 +96,9 @@ ko: update_needs_confirmation: 계정 정보를 업데이트 했습니다. 하지만 새 이메일 주소에 대한 확인이 필요합니다. 이메일을 확인 한 후 링크를 통해 새 이메일을 확인 하세요. 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. updated: 계정 정보가 성공적으로 업데이트 되었습니다. sessions: - already_signed_out: 로그아웃 되었습니다. - signed_in: 로그인 되었습니다. - signed_out: 로그아웃 되었습니다. + already_signed_out: 성공적으로 로그아웃 되었습니다. + signed_in: 성공적으로 로그인 되었습니다. + signed_out: 성공적으로 로그아웃 되었습니다. unlocks: send_instructions: 몇 분 이내로 계정 잠금 해제에 대한 안내 메일이 발송 됩니다. 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. send_paranoid_instructions: 계정이 존재한다면 몇 분 이내로 계정 잠금 해제에 대한 안내 메일이 발송 됩니다. 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. diff --git a/config/locales/devise.ku.yml b/config/locales/devise.ku.yml index cc251e86a..2fbf0ffd7 100644 --- a/config/locales/devise.ku.yml +++ b/config/locales/devise.ku.yml @@ -1 +1 @@ -ckb-IR: +--- {} diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index de651f6ca..4fdc1276b 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -60,6 +60,21 @@ title: 2FA-gjenopprettingskodene ble endret unlock_instructions: subject: 'Mastodon: Instruksjoner for å gjenåpne konto' + webauthn_credential: + added: + explanation: Følgende sikkerhetsnøkkel har blitt lagt til i kontoen din + subject: 'Mastodon: Ny sikkerhetsnøkkel' + title: En ny sikkerhetsnøkkel har blitt lagt til + deleted: + explanation: Følgende sikkerhetsnøkkel har blitt slettet fra kontoen din + subject: 'Mastodon: Sikkerhetsnøkkel slettet' + title: En av sikkerhetsnøklene dine har blitt slettet + webauthn_disabled: + subject: 'Mastodon: Autentisering med sikkerhetsnøkler ble skrudd av' + title: Sikkerhetsnøkler deaktivert + webauthn_enabled: + subject: 'Mastodon: Sikkerhetsnøkkelsautentisering ble skrudd på' + title: Sikkerhetsnøkler aktivert omniauth_callbacks: failure: Kunne ikke autentisere deg fra %{kind} fordi "%{reason}". success: Vellykket autentisering fra %{kind}. diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml index 0fb259429..16419cd1e 100644 --- a/config/locales/devise.oc.yml +++ b/config/locales/devise.oc.yml @@ -60,6 +60,23 @@ oc: title: Còdis 2FA de recuperacion cambiats unlock_instructions: subject: Mastodon : consignas de desblocatge + webauthn_credential: + added: + explanation: La clau de seguretat seguenta foguèt ajustada a vòstre compte + subject: 'Mastodon : nòva clau de seguretat' + title: Una nòva clau de seguretat es estada ajustada + deleted: + explanation: La clau de seguretat seguenta foguèt suprimida a vòstre compte + subject: 'Mastodon : clau de seguretat suprimida' + title: Una de vòstras claus de seguretats es estada suprimida + webauthn_disabled: + explanation: L’autentificacion amb de claus de seguretat foguèt estada desactivada per vòstre compte. L’identificacion es ara possible en utilizan un geton generat per una aplicacion TOTP associada. + subject: 'Mastodon : autentificacion amb claus de seguretat desactivada' + title: Claus de seguretat desactivadas + webauthn_enabled: + explanation: L’autentificacion amb de claus de seguretat foguèt estada activada per vòstre compte. Vòstra clau de seguretat pòt ara èsser utilizada per l’identificacion. + subject: 'Mastodon : autentificacion via clau de seguretat activada' + title: Claus de seguretat activadas omniauth_callbacks: failure: Fracàs al moment de vos autentificar de %{kind} perque "%{reason}". success: Sètz ben autentificat dempuèi lo compte %{kind}. diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml index 6336a5794..cc1b670bb 100644 --- a/config/locales/devise.pl.yml +++ b/config/locales/devise.pl.yml @@ -60,6 +60,23 @@ pl: title: Zmieniono kody odzyskiwania 2FA unlock_instructions: subject: 'Mastodon: Instrukcje odblokowania konta' + webauthn_credential: + added: + explanation: Następujący klucz bezpieczeństwa został dodany do twojego konta + subject: 'Mastodon: Nowy klucz bezpieczeństwa' + title: Dodano nowy klucz bezpieczeństwa + deleted: + explanation: Następujący klucz bezpieczeństwa został usunięty z Twojego konta + subject: 'Mastodon: Klucz bezpieczeństwa usunięty' + title: Usunięto jeden z twoich kluczy bezpieczeństwa + webauthn_disabled: + explanation: Uwierzytelnianie kluczem bezpieczeństwa zostało wyłączone dla Twojego konta. Logowanie jest teraz możliwe tylko przy użyciu tokenu generowanego przez sparowaną aplikację TOTP. + subject: 'Mastodon: Wyłączono uwierzytelnianie z kluczami bezpieczeństwa' + title: Wyłączono klucze bezpieczeństwa + webauthn_enabled: + explanation: Uwierzytelnianie klucza bezpieczeństwa zostało włączone dla Twojego konta. Klucz bezpieczeństwa może być teraz wykorzystywany do logowania. + subject: 'Mastodon: Włączono uwierzytelnianie z kluczami bezpieczeństwa' + title: Włączono klucze bezpieczeństwa omniauth_callbacks: failure: 'Uwierzytelnienie przez %{kind} nie powiodło się, ponieważ: "%{reason}".' success: Uwierzytelnienie przez %{kind} powiodło się. diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index bb5d5d34b..6fecaecdf 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -60,6 +60,23 @@ pt-BR: title: Códigos de recuperação de dois fatores alterados unlock_instructions: subject: 'Mastodon: Instruções de desbloqueio' + webauthn_credential: + added: + explanation: A seguinte chave de segurança foi adicionada à sua conta + subject: 'Mastodon: Nova chave de segurança' + title: Uma nova chave de segurança foi adicionada + deleted: + explanation: A seguinte chave de segurança foi excluída da sua conta + subject: 'Mastodon: Chave de segurança excluída' + title: Uma das suas chaves de segurança foi excluída + webauthn_disabled: + explanation: A autenticação por chaves de segurança foi desabilitada para a sua conta. O login agora é possível usando apenas o token gerado pelo aplicativo TOTP pareado. + subject: 'Mastodon: Autenticação por chaves de segurança desabilitada' + title: Chaves de segurança desabilitadas + webauthn_enabled: + explanation: A autenticação por chave de segurança foi habilitada para a sua conta. Sua chave de segurança agora pode ser usada para fazer login. + subject: 'Mastodon: Autenticação por chave de segurança habilitada' + title: Chaves de segurança habilitadas omniauth_callbacks: failure: Não foi possível entrar como %{kind} porque "%{reason}". success: Entrou como %{kind}. diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index 935189a16..496ce7b1d 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -60,6 +60,23 @@ pt-PT: title: Códigos de recuperação 2FA alterados unlock_instructions: subject: 'Mastodon: Instruções para desbloquear a tua conta' + webauthn_credential: + added: + explanation: A seguinte chave de segurança foi adicionada à sua conta + subject: 'Mastodon: Nova chave de segurança' + title: Foi adicionada uma nova chave de segurança + deleted: + explanation: A seguinte chave de segurança foi removida da sua conta + subject: 'Mastodon: Chave de segurança removida' + title: Uma das suas chaves de segurança foi removida + webauthn_disabled: + explanation: A autenticação com chave de segurança foi desativada para sua conta. É agora possível aceder à sua conta utilizando apenas o token gerado pelo aplicativo TOTP pareado. + subject: 'Mastodon: Autenticação com chave de segurança desativada' + title: Chaves de segurança desativadas + webauthn_enabled: + explanation: A autenticação com chave de segurança foi ativada para sua conta. A sua chave de segurança pode agora ser utilizada para aceder à sua conta. + subject: 'Mastodon: Autenticação com chave de segurança ativada' + title: Chaves de segurança ativadas omniauth_callbacks: failure: Não foi possível autenticar %{kind} porque "%{reason}". success: Autenticado com sucesso na conta %{kind}. diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index f1f6cb365..ada7867f2 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -60,6 +60,23 @@ ru: title: Резервные коды 2ФА изменены unlock_instructions: subject: 'Mastodon: Инструкция по разблокировке' + webauthn_credential: + added: + explanation: Следующий ключ безопасности был добавлен в вашу учётную запись + subject: 'Мастодон: Новый ключ безопасности' + title: Был добавлен новый ключ безопасности + deleted: + explanation: Следующий ключ безопасности был удален из вашей учётной записи + subject: 'Мастодон: Ключ Безопасности удален' + title: Один из ваших защитных ключей был удален + webauthn_disabled: + explanation: Аутентификация с помощью ключей безопасности отключена для вашей учётной записи. Теперь вход возможен с использованием только токена, сгенерированного в приложении TOTP. + subject: 'Мастодон: Аутентификация с ключами безопасности отключена' + title: Ключи безопасности отключены + webauthn_enabled: + explanation: Для вашей учётной записи включена аутентификация по ключу безопасности. Теперь ваш ключ безопасности может быть использован для входа. + subject: 'Мастодон: Включена аутентификация по ключу безопасности' + title: Ключи безопасности включены omniauth_callbacks: failure: Не получилось аутентифицировать вас с помощью %{kind} по следующей причине - "%{reason}". success: Аутентификация с помощью учётной записи %{kind} прошла успешно. diff --git a/config/locales/devise.sa.yml b/config/locales/devise.sa.yml new file mode 100644 index 000000000..07ea4372a --- /dev/null +++ b/config/locales/devise.sa.yml @@ -0,0 +1 @@ +sa: diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml index 5dc8aa043..97b97ce48 100644 --- a/config/locales/devise.sq.yml +++ b/config/locales/devise.sq.yml @@ -60,6 +60,23 @@ sq: title: Kodet e rikthimit 2FA u ndryshuan unlock_instructions: subject: 'Mastodon: Udhëzime shkyçjeje' + webauthn_credential: + added: + explanation: Kyçi vijues i sigurisë është shtuar te llogaria juaj + subject: 'Mastodon: Kyç i ri sigurie' + title: U shtua një kyç i ri sigurie + deleted: + explanation: Kyçi vijues i sigurisë është fshirë prej llogarisë tuaj + subject: 'Mastodon: Fshirje kyçi sigurie' + title: Një nga kyçet tuaj të sigurisë është fshirë + webauthn_disabled: + explanation: Mirëfilltësimi me kyçe sigurie është çaktivizuar për llogarinë tuaj. Hyrja tani është e mundshme vetëm duke përdorur token-in e prodhuar nga aplikacioni TOTP i çiftuar. + subject: 'Mastodon: U çaktivizua mirëfilltësimi me kyçe sigurie' + title: U çaktivizuan kyçe sigurie + webauthn_enabled: + explanation: Mirëfilltësimi përmes kyçesh sigurie është aktivizuar për llogarinë tuaj. Tani, për hyrje mund të përdoren kyçet tuaj të sigurisë. + subject: 'Mastodon: U aktivizua mirëfilltësim me kyçe sigurie' + title: U aktivizuan kyçe sigurie omniauth_callbacks: failure: S’u bë dot mirëfilltësimi juaj nga %{kind}, sepse "%{reason}". success: Mirëfilltësimi nga llogaria %{kind} u bë me sukses. diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml index 9dfdde8e5..071f00878 100644 --- a/config/locales/devise.sv.yml +++ b/config/locales/devise.sv.yml @@ -21,6 +21,7 @@ sv: action: Verifiera e-postadress action_with_app: Bekräfta och återgå till %{app} explanation: Du har skapat ett konto på %{host} med den här e-postadressen. Du är ett klick bort från att aktivera det. Om det inte var du ignorerar det här e-postmeddelandet. + explanation_when_pending: Du ansökte om en inbjudan till %{host} med denna e-postadress. När du har bekräftat din e-postadress kommer vi att granska din ansökan. Du kan logga in för att ändra dina uppgifter eller ta bort ditt konto, men du kan inte komma åt de flesta funktionerna förrän ditt konto har godkänts. Om din ansökan avvisas kommer dina uppgifter att tas bort, så ingen ytterligare åtgärd kommer att krävas av dig. Om detta inte var du, vänligen ignorera detta mail. extra_html: Kolla gärna också instansens regler och våra användarvillkor. subject: 'Mastodon: Bekräftelsesinstruktioner för %{instance}' title: Verifiera e-postadress @@ -59,6 +60,18 @@ sv: title: 2FA-återställningskoder ändrades unlock_instructions: subject: 'Mastodon: Lås upp instruktioner' + webauthn_credential: + added: + subject: 'Mastodon: Ny säkerhetsnyckel' + title: En ny säkerhetsnyckel har lagts till + deleted: + explanation: Följande säkerhetsnyckel har tagits bort från ditt konto + subject: 'Mastodon: Säkerhetsnyckeln borttagen' + title: En av dina säkerhetsnycklar har tagits bort + webauthn_disabled: + title: Säkerhetsnycklar inaktiverade + webauthn_enabled: + title: Säkerhetsnycklar aktiverade omniauth_callbacks: failure: Det gick inte att autentisera dig från %{kind} för "%{reason}". success: Autentiserad från %{kind} konto. @@ -73,6 +86,7 @@ sv: signed_up: Välkommen! Du har nu registrerat dig. signed_up_but_inactive: Du har nu registrerat dig. Vi kunde dock inte logga in dig eftersom ditt konto ännu inte är aktiverat. signed_up_but_locked: Du har nu registrerat dig. Vi kunde dock inte logga in eftersom ditt konto är låst. + signed_up_but_pending: Ett meddelande med en bekräftelselänk har skickats till din e-postadress. När du klickar på länken kommer vi att granska din ansökan. Du kommer att meddelas om den godkänns. signed_up_but_unconfirmed: Ett meddelande med en bekräftelselänk har skickats till din e-postadress. Vänligen följ länken för att aktivera ditt konto. Kontrollera din skräppostmapp om du inte fick det här e-postmeddelandet. update_needs_confirmation: Du har uppdaterat ditt konto med framgång, men vi måste verifiera din nya e-postadress. Vänligen kolla din email och följ bekräfta länken för att bekräfta din nya e-postadress. Kontrollera din spammapp om du inte fick det här e-postmeddelandet. updated: Ditt konto har uppdaterats utan problem. diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index c88577a97..371a497ad 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -60,6 +60,20 @@ th: title: เปลี่ยนรหัสกู้คืน 2FA แล้ว unlock_instructions: subject: 'Mastodon: คำแนะนำการปลดล็อค' + webauthn_credential: + added: + explanation: เพิ่มกุญแจความปลอดภัยดังต่อไปนี้ไปยังบัญชีของคุณแล้ว + subject: 'Mastodon: กุญแจความปลอดภัยใหม่' + title: เพิ่มกุญแจความปลอดภัยใหม่แล้ว + deleted: + explanation: ลบกุญแจความปลอดภัยดังต่อไปนี้ออกจากบัญชีของคุณแล้ว + subject: 'Mastodon: ลบกุญแจความปลอดภัยแล้ว' + webauthn_disabled: + subject: 'Mastodon: ปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว' + title: ปิดใช้งานกุญแจความปลอดภัยแล้ว + webauthn_enabled: + subject: 'Mastodon: เปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว' + title: เปิดใช้งานกุญแจความปลอดภัยแล้ว omniauth_callbacks: failure: ไม่สามารถรับรองความถูกต้องของคุณจาก %{kind} เนื่องจาก "%{reason}" success: รับรองความถูกต้องจากบัญชี %{kind} สำเร็จ @@ -88,7 +102,7 @@ th: unlocked: ปลดล็อคบัญชีของคุณสำเร็จ โปรดลงชื่อเข้าเพื่อดำเนินการต่อ errors: messages: - already_confirmed: ยืนยันอยู่แล้ว โปรดลองลงชื่อเข้า + already_confirmed: ได้รับการยืนยันไปแล้ว โปรดลองลงชื่อเข้า confirmation_period_expired: ต้องได้รับการยืนยันภายใน %{period} โปรดขออีเมลใหม่ expired: หมดอายุแล้ว โปรดขออีเมลใหม่ not_found: ไม่พบ diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 30cedc1fc..1255d173e 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -10,7 +10,7 @@ tr: inactive: Hesabınız henüz etkinleştirilmedi. invalid: Geçersiz %{authentication_keys} ya da şifre. last_attempt: Hesabınız kilitlenmeden önce bir kez daha denemeniz gerekir. - locked: Hesabınız kilitli. + locked: Hesabınız kilitlendi. not_found_in_database: Geçersiz %{authentication_keys} ya da şifre. pending: Hesabınız hala inceleniyor. timeout: Oturum süreniz sona erdi. Lütfen devam etmek için tekrar giriş yapınız. @@ -19,7 +19,7 @@ tr: mailer: confirmation_instructions: action: E-posta adresinizi doğrulayın - action_with_app: Onayla ve %{app}'a dön + action_with_app: Onayla ve %{app} uygulamasına geri dön explanation: Bu e-posta adresiyle %{host} bir hesap oluşturdunuz. Etkinleştirmekten bir tık uzaktasınız. Bu siz değilseniz, lütfen bu e-postayı dikkate almayın. explanation_when_pending: Bu e-posta adresiyle %{host} adresine bir davetiye için başvuru yaptınız. E-posta adresinizi onayladıktan sonra başvurunuzu inceleyeceğiz. O zamana kadar giriş yapamazsınız. Başvurunuz reddedilirse, verileriniz silinecek, başka bir işlem yapmanız gerekmeyecek. Bu siz değilseniz, lütfen bu e-postayı dikkate almayın. extra_html: Lütfen ayrıca sunucu kurallarını ve hizmet şartlarımızı inceleyin. @@ -28,38 +28,55 @@ tr: email_changed: explanation: 'Hesabınızın e-posta adresi şu şekilde değiştirildi:' extra: E-posta adresinizi değiştirmediyseniz, büyük olasılıkla birileri hesabınıza erişti. Lütfen derhal parolanızı değiştirin veya hesabınız kilitlendiyse sunucu yöneticisine başvurun. - subject: 'Mastodon: E-posta değişti' + subject: 'Mastodon: E-posta adresi değişti' title: Yeni e-posta adresi password_change: - explanation: Hesabınızın parolası değiştirildi. + explanation: Hesabınızın şifresi değiştirildi. extra: Parolanızı değiştirmediyseniz, büyük olasılıkla birileri hesabınıza erişmiş olabilir. Lütfen derhal parolanızı değiştirin veya hesabınız kilitlendiyse sunucu yöneticisine başvurun. - subject: 'Mastodon: Parola değiştirildi' - title: Parola değiştirildi + subject: 'Mastodon: Şifre değiştirildi' + title: Şifre değiştirildi reconfirmation_instructions: explanation: E-postanızı değiştirmek için yeni adresi onaylayın. extra: Bu değişiklik sizin tarafınızdan başlatılmadıysa, lütfen bu e-postayı dikkate almayın. Mastodon hesabının e-posta adresi, yukarıdaki bağlantıya erişene kadar değişmez. subject: 'Mastodon: %{instance} için e-postayı onayla' title: E-posta adresinizi doğrulayın reset_password_instructions: - action: Parolayı değiştir - explanation: Hesabınız için yeni bir parola istediniz. + action: Şifreyi değiştir + explanation: Hesabınız için yeni bir şifre istediniz. extra: Bunu siz yapmadıysanız, lütfen bu e-postayı dikkate almayın. Parolanız yukarıdaki bağlantıya erişene ve yeni bir tane oluşturuncaya kadar değişmez. - subject: 'Mastodon: Parola sıfırlama talimatları' - title: Parola sıfırlama + subject: 'Mastodon: Şifre sıfırlama talimatları' + title: Şifre sıfırlama two_factor_disabled: explanation: Hesabınız için iki-adımlı kimlik doğrulama devre dışı bırakıldı. Şimdi sadece e-posta adresi ve parola kullanarak giriş yapabilirsiniz. subject: 'Mastodon: İki-adımlı kimlik doğrulama devre dışı bırakıldı' title: 2FA devre dışı bırakıldı two_factor_enabled: explanation: Hesabınız için iki-adımlı kimlik doğrulama etkinleştirildi. Giriş yapmak için eşleştirilmiş TOTP uygulaması tarafından oluşturulan bir belirteç gereklidir. - subject: 'Mastodon: İki-adımlı kimlik doğrulama etkinleştirildi' + subject: 'Mastodon: İki adımlı kimlik doğrulama etkinleştirildi' title: 2FA etkinleştirildi two_factor_recovery_codes_changed: explanation: Önceki kurtarma kodları geçersiz kılındı ve yenileri oluşturuldu. - subject: 'Mastodon: İki-adımlı kurtarma kodları yeniden oluşturuldu' + subject: 'Mastodon: İki adımlı kurtarma kodları yeniden oluşturuldu' title: 2FA kurtarma kodları değiştirildi unlock_instructions: - subject: 'Mastodon: Engel kaldırma talimatları' + subject: 'Mastodon: Kilit açma talimatları' + webauthn_credential: + added: + explanation: Aşağıdaki güvenlik anahtarı hesabınıza eklendi + subject: 'Mastodon: Yeni güvenlik anahtarı' + title: Yeni bir güvenlik anahtarı eklendi + deleted: + explanation: Aşağıdaki güvenlik anahtarı hesabınızdan silindi + subject: 'Mastodon: Güvenlik anahtarı silindi' + title: Güvenlik anahtarlarınızdan biri silindi + webauthn_disabled: + explanation: Hesabınız için güvenlik anahtarlarıyla kimlik doğrulama devre dışı bırakıldı. Artık yalnızca eşleştirilmiş TOTP uygulaması tarafından oluşturulan kodu kullanarak giriş yapmak mümkündür. + subject: 'Mastodon: Güvenlik anahtarlarıyla kimlik doğrulama devre dışı' + title: Güvenlik anahtarları devre dışı + webauthn_enabled: + explanation: Hesabınız için güvenlik anahtarı doğrulaması etkinleştirildi. Güvenlik anahtarınız artık giriş yapmak için kullanılabilir. + subject: 'Mastodon: Güvenlik anahtarı doğrulaması etkinleştirildi' + title: Güvenlik anahtarları etkin omniauth_callbacks: failure: '%{kind}''den kimliğiniz doğrulanamadı çünkü "%{reason}".' success: "%{kind} hesabından başarıyla kimlik doğrulaması yapıldı." @@ -79,9 +96,9 @@ tr: update_needs_confirmation: Hesabınızı başarıyla güncellediniz, ancak yeni e-posta adresinizi doğrulamamız gerekiyor. Lütfen e-postanızı kontrol edin ve yeni e-posta adresinizi onaylamak için onay bağlantısını izleyin. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. updated: Hesabınız başarıyla güncellendi. sessions: - already_signed_out: Başarıyla çıkış yapıldı. - signed_in: Başarıyla giriş yapıldı. - signed_out: Başarıyla çıkış yapıldı. + already_signed_out: Başarılı bir şekilde oturum kapatıldı. + signed_in: Başarılı bir şekilde oturum açıldı. + signed_out: Başarılı bir şekilde oturum kapatıldı. unlocks: send_instructions: Hesabınızı birkaç dakika içinde nasıl açacağınıza ilişkin talimatları içeren bir e-posta alacaksınız. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. send_paranoid_instructions: Hesabınız varsa, birkaç dakika içinde nasıl kilidini açacağınıza ilişkin talimatları içeren bir e-posta alacaksınız. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml index eebeb106c..afd83861c 100644 --- a/config/locales/devise.uk.yml +++ b/config/locales/devise.uk.yml @@ -60,6 +60,23 @@ uk: title: Коди двофакторного відновлення змінено unlock_instructions: subject: 'Mastodon: Інструкції для розблокування' + webauthn_credential: + added: + explanation: Наступний ключ безпеки був доданий до вашого облікового запису + subject: 'Mastodon: Новий ключ безпеки' + title: Новий ключ безпеки додано + deleted: + explanation: Наступний ключ безпеки було видалено з вашого облікового запису + subject: 'Mastodon: Ключ безпеки видалено' + title: Один з ваших ключів безпеки було видалено + webauthn_disabled: + explanation: Авторизацію з ключами безпеки було відключено для вашого облікового запису. Вхід тепер можливий лише через токен, згенерований додатком TOTP. + subject: 'Mastodon: Аутентифікація за допомогою ключів безпеки вимкнена' + title: Ключі безпеки вимкнуто + webauthn_enabled: + explanation: Авторизація ключа безпеки була увімкнена для вашого облікового запису. Ваш ключ безпеки тепер можна використовувати для входу. + subject: 'Mastodon: Авторизація ключа безпеки увімкнена' + title: Ключі безпеки увімкнено omniauth_callbacks: failure: Нам не вдалося аутентифікувати Вас з %{kind} через те, що "%{reason}". success: Успішно аутентифіковано з облікового запису %{kind}. diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index 9a156be9d..0718a63fc 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -8,7 +8,7 @@ vi: failure: already_authenticated: Bạn đã đăng nhập rồi. inactive: Tài khoản của bạn chưa được kich hoạt. - invalid: Nhập sai %{authentication_keys} hoặc mật khẩu. + invalid: "%{authentication_keys} hoặc mật khẩu không khớp." last_attempt: Nếu thử sai lần nữa, tài khoản của bạn sẽ bị khóa. locked: Tài khoản của bạn bị khóa. not_found_in_database: "%{authentication_keys} không có trong dữ liệu." @@ -22,7 +22,7 @@ vi: action_with_app: Xác nhận và quay lại %{app} explanation: Bạn đã tạo một tài khoản trên %{host} với địa chỉ email này. Chỉ cần một cú nhấp chuột nữa để kích hoạt nó. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này. explanation_when_pending: Bạn đã đăng ký %{host} với địa chỉ email này. Chúng tôi chỉ xem xét đơn đăng ký sau khi bạn xác thực địa chỉ email. Bạn có thể đăng nhập để thay đổi chi tiết hoặc xóa tài khoản của mình, nhưng bạn không thể truy cập hầu hết các chức năng cho đến khi tài khoản của bạn được chấp thuận. Nếu bạn bị từ chối, dữ liệu của bạn sẽ bị xóa, do đó bạn sẽ không cần phải thực hiện thêm hành động nào nữa. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này. - extra_html: Xin đọc kỹ nội quy máy chủđiều khoản dịch vụ của chúng tôi. + extra_html: Xin đọc kỹ quy tắc máy chủchính sách riêng tư của chúng tôi. subject: 'Mastodon: Xác thực email cho %{instance}' title: Xác thực địa chỉ email email_changed: @@ -60,6 +60,23 @@ vi: title: Mã khôi phục xác thực hai yếu tố đã thay đổi unlock_instructions: subject: 'Mastodon: Hướng dẫn mở khóa' + webauthn_credential: + added: + explanation: Khóa bảo mật này đã được thêm vào tài khoản của bạn + subject: 'Mastodon: Khóa bảo mật mới' + title: Vừa thêm một khóa bảo mật mới + deleted: + explanation: Khóa bảo mật này đã bị xóa khỏi tài khoản của bạn + subject: 'Mastodon: Xóa khóa bảo mật' + title: Một trong những khóa bảo mật của bạn vừa bị xóa + webauthn_disabled: + explanation: Bạn vừa vô hiệu hóa xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, bạn sẽ dùng ứng dụng TOTP để tạo token đăng nhập. + subject: 'Mastodon: Vô hiệu hóa xác thực bằng khóa bảo mật' + title: Đã vô hiệu hóa khóa bảo mật + webauthn_enabled: + explanation: Bạn vừa kích hoạt xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, khóa bảo mật của bạn sẽ được dùng để đăng nhập. + subject: 'Mastodon: Kích hoạt xác thực bằng khóa bảo mật' + title: Đã kích hoạt khóa bảo mật omniauth_callbacks: failure: Không thể xác thực bạn từ %{kind} bởi vì "%{reason}". success: Xác thực thành công từ tài khoản %{kind}. @@ -72,7 +89,7 @@ vi: registrations: destroyed: Tạm biệt! Tài khoản của bạn đã hủy thành công. Hi vọng chúng tôi sẽ sớm gặp lại bạn. signed_up: Chúc mừng! Bạn đã đăng ký thành công. - signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn chưa được kích hoạt. + signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, bạn cần phải kích hoạt tài khoản mới có thể đăng nhập. signed_up_but_locked: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn bị khóa. signed_up_but_pending: Một email xác thực đã được gửi đến địa chỉ email của bạn. Sau khi bạn nhấp vào liên kết, chúng tôi sẽ xem xét đơn đăng ký của bạn và thông báo nếu đơn được chấp thuận. signed_up_but_unconfirmed: Một email xác thực đã được gửi đến địa chỉ email của bạn. Hãy nhấp vào liên kết trong email để kích hoạt tài khoản của bạn. Nếu không thấy, hãy kiểm tra mục thư rác. diff --git a/config/locales/devise.zgh.yml b/config/locales/devise.zgh.yml new file mode 100644 index 000000000..827155466 --- /dev/null +++ b/config/locales/devise.zgh.yml @@ -0,0 +1 @@ +zgh: diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index 085f51e24..ad1f78613 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -60,6 +60,23 @@ zh-CN: title: 双重验证的恢复码已更改 unlock_instructions: subject: Mastodon:帐户解锁信息 + webauthn_credential: + added: + explanation: 以下安全密钥已添加到您的帐户 + subject: Mastodon:新的安全密钥 + title: 已添加一个新的安全密钥 + deleted: + explanation: 以下安全密钥已从您的账户中删除 + subject: Mastodon:安全密钥已删除 + title: 您的安全密钥之一已被删除 + webauthn_disabled: + explanation: 您的帐户已禁用安全密钥认证。现在只能使用配对的 TOTP 应用程序生成的令牌登录。 + subject: Mastodon:安全密钥认证已禁用 + title: 安全密钥已禁用 + webauthn_enabled: + explanation: 您的帐户已启用安全密钥身份验证。您的安全密钥现在可以用于登录。 + subject: Mastodon:安全密钥认证已启用 + title: 已启用安全密钥 omniauth_callbacks: failure: 由于%{reason},无法从%{kind}获得授权。 success: 成功地从%{kind}获得授权。 @@ -89,7 +106,7 @@ zh-CN: errors: messages: already_confirmed: 已经确认成功,请尝试登录 - confirmation_period_expired: 必须在 %{period}以内确认。请重新发起请求 + confirmation_period_expired: 必须在 %{period} 以内确认。请重新发起请求 expired: 已过期。请重新发起请求 not_found: 未找到 not_locked: 未被锁定 diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml index f72fd55a3..01a6a7382 100644 --- a/config/locales/devise.zh-HK.yml +++ b/config/locales/devise.zh-HK.yml @@ -12,16 +12,16 @@ zh-HK: last_attempt: 若你再一次嘗試失敗,我們將鎖定你的帳號,以策安全。 locked: 你的帳號已被鎖定。 not_found_in_database: 不正確的 %{authentication_keys} 或密碼。 - pending: 您的帳戶仍在審核中。 + pending: 你的帳號仍在審核中 timeout: 你的登入階段已經過期,請重新登入以繼續使用。 unauthenticated: 你必須先登入或登記,以繼續使用。 unconfirmed: 你必須先確認電郵地址,繼續使用。 mailer: confirmation_instructions: action: 驗證電子郵件地址 - action_with_app: 確認並返回 %{app} + action_with_app: 確認並回到%{app} explanation: 你在 %{host} 上使用這個電子郵件地址建立了一個帳戶。只需點擊下面的連結,即可啟用帳戶。如果你並沒有建立過帳戶,請忽略此郵件。 - explanation_when_pending: 您使用此電子信箱位址申請了 %{host} 的邀請。當您確認電子信箱後我們將審核您的申請,而直到核准前您都無法登入。當您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您,請忽略此信件。 + explanation_when_pending: 您使用此電郵地址申請了%{host} 帳戶。確認電郵地址後,我們將審核您的申請。您可以登錄更改詳細信息或刪除帳戶,但在帳戶獲得批准之前,您無法訪問大部份功能。如果您的申請被拒絕,您的數據會被刪除,因此您無需採取進一步的措施。如果申請人不是您,請忽略此電郵。 extra_html: 請記得閱讀本服務站的相關規定使用條款。 subject: 'Mastodon: 確認電郵地址 %{instance}' title: 驗證電子郵件地址 @@ -47,17 +47,17 @@ zh-HK: subject: 'Mastodon: 重設密碼' title: 重設密碼 two_factor_disabled: - explanation: 您帳戶的兩步驟驗證已停用。現在只能使用電子信箱及密碼登入。 - subject: Mastodon:已停用兩步驟驗證 - title: 已停用 2FA + explanation: 帳號的雙重認證已禁用。現在僅使用郵箱和密碼即可登錄。 + subject: 長毛象:已關閉雙重認證 + title: 已關閉雙重認證 two_factor_enabled: - explanation: 已對您的帳戶啟用兩步驟驗證。登入時將需要配對之 TOTP 應用程式所產生的 Token。 - subject: Mastodon:已啟用兩步驟驗證 - title: 已啟用 2FA + explanation: 賬號的雙重認證已啟用。登錄時將需要用已配對的 TOTP 應用生成驗證碼。 + subject: 長毛象:已啟用雙重認證 + title: 已啟用雙重認證 two_factor_recovery_codes_changed: - explanation: 上一次的復原碼已經失效,且已產生新的。 - subject: Mastodon:兩步驟驗證復原碼已經重新產生 - title: 2FA 復原碼已變更 + explanation: 之前的恢復碼失效了,新的已生成。 + subject: 長毛象:已產生新的雙重認證恢復碼 + title: 雙重認證恢復碼已更改 unlock_instructions: subject: 'Mastodon: 解除用戶鎖定' omniauth_callbacks: @@ -74,7 +74,7 @@ zh-HK: signed_up: 歡迎你!你的登記已經成功。 signed_up_but_inactive: 你的登記已經成功,可是由於你的用戶還被被啟用,暫時還不能讓你登入。 signed_up_but_locked: 你的登記已經成功,可是由於你的用戶已被鎖定,我們無法讓你登入。 - signed_up_but_pending: 包含確認連結的訊息已寄到您的電子信箱。按下此連結後我們將審核您的申請。核准後將通知您。 + signed_up_but_pending: 確認連結已發送到您的電郵地址。點擊連結後我們會審核您的申請,一旦通過您將會收到通知。 signed_up_but_unconfirmed: 一條確認連結已經電郵到你的郵址。請使用讓連結啟用你的用戶。 update_needs_confirmation: 你的用戶已經更新,但我們需要確認你的電郵地址。請打開你的郵箱,使用確認電郵的連結來確認的地郵址。 updated: 你的用戶已經成功更新。 diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml index 4f03c0c32..a4c8cd4fc 100644 --- a/config/locales/doorkeeper.co.yml +++ b/config/locales/doorkeeper.co.yml @@ -121,10 +121,10 @@ co: admin:write: mudificà tutti i dati nant'à u servore admin:write:accounts: realizà azzione di muderazione nant'à i conti admin:write:reports: realizà azzione di muderazione nant'à i rapporti - follow: Mudificà rilazione trà i conti - push: Riceve e vostre nutificazione push + follow: mudificà rilazione trà i conti + push: riceve e vostre nutificazione push read: leghje tutte l’infurmazioni di u vostru contu - read:accounts: Vede l'infurmazione di i conti + read:accounts: vede l'infurmazione di i conti read:blocks: vede i vostri blucchimi read:bookmarks: vede i vostri segnalibri read:favourites: vede i vostri favuriti diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 85ab7729d..29ce9b4c1 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -79,12 +79,12 @@ es-AR: errors: messages: access_denied: El propietario del recurso o servidor de autorización denegó la petición. - credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar. + credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso fallaron debido a que "Doorkeeper.configure.resource_owner_from_credentials" está sin configurar. invalid_client: La autenticación del cliente falló debido a que es un cliente desconocido, o no está incluída la autenticación del cliente, o el método de autenticación no está soportado. invalid_grant: La concesión de autorización ofrecida no es válida, venció, se revocó, no coincide con la dirección web de redireccionamiento usada en la petición de autorización, o fue emitida para otro cliente. invalid_redirect_uri: La dirección web de redireccionamiento incluida no es válida. invalid_request: En la solicitud falta un parámetro requerido, o incluye un valor de parámetro no soportado, o está corrompida. - invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o no se puede encontrar al propietario del recurso. + invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o no se puede encontrar al propietario del recurso invalid_scope: El ámbito solicitado no es válido, o conocido, o está corrompido. invalid_token: expired: Venció la clave de acceso @@ -122,30 +122,30 @@ es-AR: admin:write:accounts: ejecutar acciones de moderación en cuentas admin:write:reports: ejecutar acciones de moderación en informes follow: modificar relaciones de cuenta - push: recibir tus notificaciones PuSH + push: recibir tus notificaciones push read: leer todos los datos de tu cuenta read:accounts: ver información de cuentas read:blocks: ver qué cuentas bloqueaste - read:bookmarks: mirá tus marcadores + read:bookmarks: ver tus marcadores read:favourites: ver tus favoritos read:filters: ver tus filtros read:follows: ver qué cuentas seguís read:lists: ver tus listas read:mutes: ver qué cuentas silenciaste read:notifications: ver tus notificaciones - read:reports: ver tus informes + read:reports: ver tus denuncias read:search: buscar en tu nombre - read:statuses: ver todos los estados + read:statuses: ver todos los toots write: modificar todos los datos de tu cuenta write:accounts: modificar tu perfil write:blocks: bloquear cuentas y dominios - write:bookmarks: estados del marcador - write:favourites: toots favoritos + write:bookmarks: marcar toots + write:favourites: marcar toots como favoritos write:filters: crear filtros write:follows: seguir cuentas write:lists: crear listas write:media: subir archivos de medios write:mutes: silenciar usuarios y conversaciones - write:notifications: limpiá tus notificaciones + write:notifications: limpiar tus notificaciones write:reports: denunciar otras cuentas - write:statuses: publicar estados + write:statuses: publicar toots diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 61e6cb6a1..2fbf0ffd7 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -1,151 +1 @@ ---- -es: - activerecord: - attributes: - doorkeeper/application: - name: Nombre de aplicación - redirect_uri: URI para redirección - scopes: Ámbitos - website: Sitio web - errors: - models: - doorkeeper/application: - attributes: - redirect_uri: - fragment_present: no puede contener un fragmento. - invalid_uri: debe ser un URI válido. - relative_uri: debe ser una URI absoluta. - secured_uri: debe ser un URI HTTPS/SSL. - doorkeeper: - applications: - buttons: - authorize: Autorizar - cancel: Cancelar - destroy: Destruir - edit: Editar - submit: Enviar - confirmations: - destroy: "¿Está seguro?" - edit: - title: Editar aplicación - form: - error: "¡Uuups! Compruebe su formulario" - help: - native_redirect_uri: Utilice %{native_redirect_uri} para pruebas locales - redirect_uri: Utilice una línea por URI - scopes: Separe los ámbitos con espacios. Déjelo en blanco para utilizar los ámbitos por defecto. - index: - application: Aplicación - callback_url: URL de callback - delete: Eliminar - empty: No tienes aplicaciones. - name: Nombre - new: Nueva aplicación - scopes: Ámbitos - show: Mostrar - title: Sus aplicaciones - new: - title: Nueva aplicación - show: - actions: Acciones - application_id: Id de la aplicación - callback_urls: URLs de callback - scopes: Ámbitos - secret: Secreto - title: 'Aplicación: %{name}' - authorizations: - buttons: - authorize: Autorizar - deny: Desautorizar - error: - title: Ha ocurrido un error - new: - able_to: Será capaz de - prompt: La aplicación %{client_name} solicita tener acceso a su cuenta - title: Se requiere autorización - show: - title: Copia este código de autorización y pégalo en la aplicación. - authorized_applications: - buttons: - revoke: Revocar - confirmations: - revoke: "¿Está seguro?" - index: - application: Aplicación - created_at: Creado el - date_format: "%A-%m-%d %H:%M:%S" - scopes: Ámbitos - title: Sus aplicaciones autorizadas - errors: - messages: - access_denied: El propietario del recurso o servidor de autorización denegó la petición. - credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar. - invalid_client: La autentificación del cliente falló debido o a que es un cliente desconocido o no está incluída la autentificación del cliente o el método de autentificación no está confirmado. - invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente. - invalid_redirect_uri: La URI de redirección incluida no es válida. - invalid_request: En la petición falta un parámetro necesario o incluye un valor de parámetro no soportado o tiene otro tipo de formato incorrecto. - invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o el propietario del recurso no puede ser encontrado - invalid_scope: El ámbito pedido es inválido, desconocido o erróneo. - invalid_token: - expired: El autentificador de acceso expiró - revoked: El autentificador de acceso fue revocado - unknown: El autentificador de acceso es inválido - resource_owner_authenticator_not_configured: El propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_authenticator está sin configurar. - server_error: El servidor de la autorización entontró una condición inesperada que le impidió cumplir con la solicitud. - temporarily_unavailable: El servidor de la autorización es actualmente incapaz de manejar la petición debido a una sobrecarga temporal o un trabajo de mantenimiento del servidor. - unauthorized_client: El cliente no está autorizado a realizar esta petición utilizando este método. - unsupported_grant_type: El tipo de concesión de autorización no está soportado por el servidor de autorización. - unsupported_response_type: El servidor de autorización no soporta este tipo de respuesta. - flash: - applications: - create: - notice: Aplicación creada. - destroy: - notice: Aplicación eliminada. - update: - notice: Aplicación actualizada. - authorized_applications: - destroy: - notice: Aplicación revocada. - layouts: - admin: - nav: - applications: Aplicaciones - oauth2_provider: Proveedor OAuth2 - application: - title: OAuth autorización requerida - scopes: - admin:read: leer todos los datos en el servidor - admin:read:accounts: leer información sensible de todas las cuentas - admin:read:reports: leer información sensible de todos los informes y cuentas reportadas - admin:write: modificar todos los datos en el servidor - admin:write:accounts: realizar acciones de moderación en cuentas - admin:write:reports: realizar acciones de moderación en informes - follow: seguir, bloquear, desbloquear y dejar de seguir cuentas - push: recibir tus notificaciones push - read: leer los datos de tu cuenta - read:accounts: ver información de cuentas - read:blocks: ver a quién has bloqueado - read:bookmarks: ver tus marcadores - read:favourites: ver tus favoritos - read:filters: ver tus filtros - read:follows: ver a quién sigues - read:lists: ver tus listas - read:mutes: ver a quién has silenciado - read:notifications: ver tus notificaciones - read:reports: ver tus informes - read:search: buscar en su nombre - read:statuses: ver todos los estados - write: publicar en tu nombre - write:accounts: modifica tu perfil - write:blocks: bloquear cuentas y dominios - write:bookmarks: guardar estados como marcadores - write:favourites: toots favoritos - write:filters: crear filtros - write:follows: seguir usuarios - write:lists: crear listas - write:media: subir archivos multimedia - write:mutes: silenciar usuarios y conversaciones - write:notifications: limpia tus notificaciones - write:reports: reportar a otras personas - write:statuses: publicar estados +--- {} diff --git a/config/locales/doorkeeper.hi.yml b/config/locales/doorkeeper.hi.yml index d758a5b53..d7a933d14 100644 --- a/config/locales/doorkeeper.hi.yml +++ b/config/locales/doorkeeper.hi.yml @@ -1 +1,30 @@ +--- hi: + activerecord: + attributes: + doorkeeper/application: + name: आवेदन का नाम + redirect_uri: अनुप्रेषित URI + scopes: कार्यक्षेत्र + website: आवेदन वेबसाइट + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: एक टुकड़ा नहीं हो सकता। + invalid_uri: एक वैध यूआरआई होना चाहिए। + relative_uri: एक पूर्ण URI होना चाहिए। + secured_uri: hTTPS/SSL URI होना चाहिए। + doorkeeper: + applications: + buttons: + authorize: अधिकार दें + cancel: रद्द करें + destroy: हटाएं + edit: संपादित करें + submit: सबमिट करें + confirmations: + destroy: क्या आप सुनिश्चित हैं? + edit: + title: आवेदन संपादित करें diff --git a/config/locales/doorkeeper.hr.yml b/config/locales/doorkeeper.hr.yml index 221ec27e9..d2cde038b 100644 --- a/config/locales/doorkeeper.hr.yml +++ b/config/locales/doorkeeper.hr.yml @@ -3,7 +3,9 @@ hr: activerecord: attributes: doorkeeper/application: - name: Ime + name: Ime aplikacije + scopes: Opsezi + website: Web-stranica aplikacije errors: models: doorkeeper/application: @@ -22,26 +24,27 @@ hr: edit: Uredi submit: Pošalji confirmations: - destroy: Jesi li siguran? + destroy: Jeste li sigurni? edit: title: Uredi aplikaciju form: - error: Ups! Provjeri svoju formu za moguće greške + error: Ups! Provjerite svoj obrazac za moguće greške help: native_redirect_uri: Koristi %{native_redirect_uri} za lokalne testove - redirect_uri: Koristi jednu liniju po URI - scopes: Odvoji scopes sa razmacima. Ostavi prazninu kako bi koristio zadane scopes. + redirect_uri: Koristi jednu liniju po URI-u + scopes: Odvojite opsege razmacima. Za korištenje zadanih opsega, ostavite prazno. index: + application: Aplikacija name: Ime - new: Nova Aplikacija - title: Tvoje aplikacije + new: Nova aplikacija + title: Vaše aplikacije new: - title: Nova Aplikacija + title: Nova aplikacija show: - actions: Akcije - application_id: Id Aplikacije - callback_urls: Callback urls - secret: Tajna + actions: Radnje + application_id: Ključ klijenta + callback_urls: URL-ovi povratnih poziva + secret: Tajna klijenta title: 'Aplikacija: %{name}' authorizations: buttons: @@ -51,34 +54,34 @@ hr: title: Došlo je do greške new: able_to: Moći će - prompt: Aplikacija %{client_name} je zatražila pristup tvom računu - title: Traži se autorizacija + prompt: Aplikacija %{client_name} zatražila je pristup Vašem računu + title: Potrebna je autorizacija authorized_applications: buttons: revoke: Odbij confirmations: - revoke: Jesi li siguran? + revoke: Jeste li sigurni? index: application: Aplikacija created_at: Ovlašeno - title: Tvoje autorizirane aplikacije + title: Vaše autorizirane aplikacije errors: messages: - access_denied: Vlasnik resursa / autorizacijski server je odbio zahtjev. - invalid_client: Autentifikacija klijenta nije uspjela zbog nepoznatog klijenta, neuključene autentifikacije od strane klijenta, ili nepodržane metode autentifikacije. - invalid_redirect_uri: The redirect uri included nije valjan. - invalid_request: Zahtjevu nedostaje traženi parametar, uključuje nepodržanu vrijednost parametra, ili je na neki drugi način neispravno formiran. - invalid_resource_owner: The provided resource owner credentials nisu valjani, ili vlasnik resursa ne može biti nađen - invalid_scope: Traženi scope nije valjan, znan, ili je neispravno oblikovan. + access_denied: Vlasnik resursa ili autorizacijski poslužitelj odbili su zahtjev. + invalid_client: Autentifikacija klijenta nije uspjela zbog nepoznatog klijenta, nedostatka autentifikacije klijenta ili nepodržane metode autentifikacije. + invalid_redirect_uri: Sadržani uri preusmjerenja nije valjan. + invalid_request: Zahtjevu nedostaje traženi parametar, uključuje nepodržanu vrijednost parametra ili je na neki drugi način neispravno formatiran. + invalid_resource_owner: Pružene vjerodajnice vlasnika resursa nisu valjane ili nije moguće pronaći vlasnika resursa + invalid_scope: Traženi opseg nije valjan, znan ili je neispravno oblikovan. invalid_token: expired: Pristupni token je istekao - revoked: Pristupni token je odbijen + revoked: Pristupni token je opozvan unknown: Pristupni token nije valjan - server_error: Autorizacijski server naišao je na neočekivani uvjet, što ga je onemogućilo da ispuni zahtjev. - temporarily_unavailable: Autorizacijski server trenutno nije u mogućnosti izvesti zahtjev zbog privremenog preopterećenja ili održavanja servera. + server_error: Autorizacijski poslužitelj naišao je na neočekivani uvjet koji sprječava provođenje zahtjeva. + temporarily_unavailable: Autorizacijski poslužitelj trenutno nije u mogućnosti obraditi zahtjev zbog privremenog preopterećenja ili njegovog održavanja. unauthorized_client: Klijent nije ovlašten izvesti zahtjev koristeći ovu metodu. - unsupported_grant_type: The authorization grant tip nije podržan od autorizacijskog servera. - unsupported_response_type: Autorizacijski server ne podržava ovaj tip odgovora. + unsupported_grant_type: Autorizacijski poslužitelj ne podržava ovu vrstu autorizacijskog odobrenja. + unsupported_response_type: Autorizacijski poslužitelj ne podržava ovu vrstu odgovora. flash: applications: create: @@ -89,7 +92,7 @@ hr: notice: Aplikacija je ažurirana. authorized_applications: destroy: - notice: Aplikacija je odbijena. + notice: Aplikacija je opozvana. layouts: admin: nav: @@ -97,6 +100,6 @@ hr: application: title: Traži se OAuth autorizacija scopes: - follow: slijediti, blokirati, deblokirati i prestati slijediti račune - read: čitati podatke tvog računa - write: slati poruke u tvoje ime + follow: mijenjati odnose između računa + read: čitati sve podatke Vašeg računa + write: mijenjati sve podatke Vašeg računa diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml index 0a39ce30f..ba3f4e124 100644 --- a/config/locales/doorkeeper.hy.yml +++ b/config/locales/doorkeeper.hy.yml @@ -1,16 +1,157 @@ --- hy: + activerecord: + attributes: + doorkeeper/application: + name: Յաւելուածի անուն + redirect_uri: վերաղյել URI + scopes: Դաշտեր + website: 'Յաւելուածի վէբկայք + +' + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: չի կարող մաս պարունակել + invalid_uri: պէտք է լինի վաւէր URI։ + relative_uri: պէտք է լինի բացարձակ URI։ + secured_uri: պէտք է լինի HTTPS/SSL URI։ doorkeeper: applications: buttons: + authorize: Նոյնականացնել cancel: Չեղարկել + destroy: Վերացնել edit: Խմբագրել + submit: Ուղարկել + confirmations: + destroy: Վստա՞հ ես + edit: + title: Խմբագրել յաւելուածը + form: + error: Վա՜յ․ Ստուգիր ձեւանմուշում եղած հնարաւոր սխալները + help: + native_redirect_uri: Օգտագործիր %{native_redirect_uri} լոկալ փորձարկման համար + redirect_uri: Օգտագործիր մէկ տող իւրաքանչիւր URI համար + scopes: Բաժանիր դաշտերը բացատներով։ Դատարկ թող՝ լռելեայն դաշտերն օգտագործելու համար։ index: + application: Յաւելուած + callback_url: URL ետկանչ delete: Ջնջել + empty: Դու չունես յաւելուածներ։ name: Անուն + new: Նոր յաւելուած + scopes: Դաշտեր show: Ցուցադրել + title: Քո յաւելուածները + new: + title: Նոր յաւելուած show: - actions: Գործողություններ + actions: Գործողութիւններ + application_id: 'Կլիենտի բանալի + +' + callback_urls: URL֊ների ետկանչ + scopes: Դաշտեր + secret: Կլիենտի գաղտնիք + title: Յաւելուած․ %{name} + authorizations: + buttons: + authorize: Լիազօրել + deny: Մերժել + error: + title: Առաջացել է սխալ։ + new: + able_to: Նա կարողանալու է + prompt: "%{client_name} յաւելուածը խնդրում է հասանելիութիւն քո հաշուին" + title: Անհրաժեշտ է նոյնականացում + show: + title: Պատճէնիր այս նոյնականացման կոդը եւ փակցրու յաւելուածում։ authorized_applications: + buttons: + revoke: Չեղարկել + confirmations: + revoke: Վստա՞հ ես index: + application: Յաւելուած + created_at: Նոյնականացրած date_format: "%Y-%m-%d %H:%M:%S" + scopes: Դաշտեր + title: Քո նոյնականացրած ծրագրերը + errors: + messages: + access_denied: Ռեսուրսի տէրը կամ նոյնականացնող սպասարկիչը մերժել է դիմումը։ + credential_flow_not_configured: Ռեսուրսի տէր գաղտնաբառի լիազօրագրերը ձախողուեցին Doorkeeper.configure.resource_owner_from_credentials֊ի չկարգաւորուած լինելու պատճառով։ + invalid_client: Կլիենտի նոյնականացումը ձախողուեց անյայտ կլիենտի, կլիենտի նոյնականացման, կամ նոյնականացման չաջակցուող ձեւի պատճառով։ + invalid_grant: Տրամադրուած նոյնականացման թոյլտուութիւնն անվաւեր է, սպառուած, չեղարկուած, չի համապատասխանում վերայղուած URI֊ի նոյնականացման յայտին, կամ յղուել է այլ կլիենտի։ + invalid_redirect_uri: Վերայղուած uri֊ի անվաւեր է։ + invalid_request: Յայտից բացակայում է պահանջուող պարամետրը, ներառում է չաջակցուող արժէք կամ այլ անսարքութիւն։ + invalid_resource_owner: Տրամադրուած ռեսուրսի տիրոջ տուեալները անվաւեր են կամ ռեսուրսի տէրը չի գտնուել + invalid_scope: Յայտի դաշտն անվաւեր, անյայտ կամ անսարք։ + invalid_token: + expired: Հասանելիութեան կտրոնը սպառուած է + revoked: Հասանելիութեան կտրոնը չեղարկուած է + unknown: Հասանելիութեան կտրոնը անվաւեր է + resource_owner_authenticator_not_configured: Ռեսուրսի տէրը չգտնուեց Doorkeeper.configure.resource_owner_authenticator֊ի չկարգաւորուած լինելու պատճառով։ + server_error: Նոյնականացման սպասարկիչը բախուել է չնախատեսուած պայմանի, որը խոչընդոտում է յայտի լրացմանը։ + temporarily_unavailable: Նոյնականացման սպասարկիչն այժմ չի կարող գործարկել յայտը՝ սպասարկիչի ժամանակաւոր ծանրաբեռնման կամ պահպանման պատճառով։ + unauthorized_client: Կլիենտը լիազօրուած չէ իրագործել յայտն այս մեթոդով։ + unsupported_grant_type: Նոյնականացման լիազօրումը չի աջակցուում նոյնականացման սպասարկչի կողմից։ + unsupported_response_type: Նոյնականացման սերուերը չի աջակցում այս պատասխանը։ + flash: + applications: + create: + notice: Ստեղծուել է յաւելուած։ + destroy: + notice: Յաւելուածը ջնջուել է։ + update: + notice: Յաւելուածը թարմացուել է։ + authorized_applications: + destroy: + notice: Յաւելուածը չեղարկուել է։ + layouts: + admin: + nav: + applications: Յաւելուածներ + oauth2_provider: OAuth2 մատակարար + application: + title: Անհրաժեշտ է OAuth նոյնականացում + scopes: + admin:read: կարդալ սպասարկչի ողջ տուեալները + admin:read:accounts: կարդալ բոլոր հաշիւների զգայուն ինֆորմացիան + admin:read:reports: կարդալ բոլոր բողոքների եւ յաղորդուած հաշիւների զգայուն ինֆորմացիան + admin:write: փոփոխել սպասարկչի ողջ տուեալները + admin:write:accounts: իրականացնել մոդերատորական գործողութիւններ հաշիւների վրայ + admin:write:reports: իրականացնել մոդերատորական գործողութիւններ բողոքների վրայ + follow: փոփոխել հաշուի յարաբերութիւնները + push: ստանալ ծանուցումները + read: կարդալ քո հաշուի բոլոր տուեալները + read:accounts: տեսնել հաշիւների ինֆորմացիան + read:blocks: տեսնել արգելափակումները + read:bookmarks: տեսնել էջանիշները + read:favourites: տեսնել հաւանումները + read:filters: տեսնել ֆիլտրերը + read:follows: տեսնել հետեւորդներին + read:lists: տեսնել ցանկերը + read:mutes: տեսնել լռեցուածներին + read:notifications: տեսնել ծանուցումները + read:reports: տեսնել բողոքները + read:search: որոնիր քո անունից + read:statuses: տեսնել գրառումները + write: փոփոխել քո հաշուի բոլոր տուեալները + write:accounts: փոփոխել հաշիւը + write:blocks: արգելափակել հաշիւները եւ դոմէյնները + write:bookmarks: էջանշել գրառումները + write:favourites: հաւանել գրառումները + write:filters: 'ստեղծել ֆիլտրեր + +' + write:follows: հետեւել + write:lists: ստեղծել ցանկեր + write:media: բեռնել մեդիա ֆայլեր + write:mutes: լռեցնել մարդկանց եւ զրոյցները + write:notifications: մաքրել ծանուցումները + write:reports: բողոքել այլոցից + write:statuses: թթել diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index 68e2b57f3..607abb2b3 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -25,7 +25,7 @@ it: edit: Modifica submit: Invia confirmations: - destroy: Sei sicuro? + destroy: Sei sicur*? edit: title: Modifica applicazione form: @@ -69,7 +69,7 @@ it: buttons: revoke: Disabilita confirmations: - revoke: Sei sicuro? + revoke: Sei sicur*? index: application: Applicazione created_at: Autorizzato diff --git a/config/locales/doorkeeper.ku.yml b/config/locales/doorkeeper.ku.yml index cc251e86a..2fbf0ffd7 100644 --- a/config/locales/doorkeeper.ku.yml +++ b/config/locales/doorkeeper.ku.yml @@ -1 +1 @@ -ckb-IR: +--- {} diff --git a/config/locales/doorkeeper.ml.yml b/config/locales/doorkeeper.ml.yml index 5dfaa61ae..21540b976 100644 --- a/config/locales/doorkeeper.ml.yml +++ b/config/locales/doorkeeper.ml.yml @@ -4,6 +4,7 @@ ml: attributes: doorkeeper/application: name: അപ്ലിക്കേഷന്റെ പേര് + redirect_uri: യു ആർ എൽ വഴിതിരിച്ചു വിടുക website: അപ്ലിക്കേഷന്റെ വെബ്സൈറ്റ് errors: models: diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml index f92b7cd22..d84b5e7d9 100644 --- a/config/locales/doorkeeper.oc.yml +++ b/config/locales/doorkeeper.oc.yml @@ -142,10 +142,10 @@ oc: write:bookmarks: ajustar als marcadors write:favourites: metre en favorit write:filters: crear de filtres - write:follows: sègre de monde + write:follows: sègre de mond write:lists: crear de listas write:media: mandar de fichièrs mèdias - write:mutes: rescondre de monde e de conversacions + write:mutes: rescondre de mond e de conversacions write:notifications: escafar vòstras notificacions - write:reports: senhalar de monde + write:reports: senhalar de mond write:statuses: publicar d’estatuts diff --git a/config/locales/doorkeeper.sa.yml b/config/locales/doorkeeper.sa.yml new file mode 100644 index 000000000..07ea4372a --- /dev/null +++ b/config/locales/doorkeeper.sa.yml @@ -0,0 +1 @@ +sa: diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index d9367ce5e..015f0702f 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -73,6 +73,7 @@ sv: index: application: Applikation created_at: Auktoriserad + date_format: "%Y-%m-%d %H:%M:%S" scopes: Omfattning title: Dina behöriga ansökningar errors: @@ -125,6 +126,7 @@ sv: read: läsa dina kontodata read:accounts: se kontoinformation read:blocks: se dina blockeringar + read:bookmarks: se dina bokmärken read:favourites: se dina favoriter read:filters: se dina filter read:follows: se vem du följer @@ -137,6 +139,7 @@ sv: write: posta åt dig write:accounts: ändra din profil write:blocks: blockera konton och domäner + write:bookmarks: bokmärkesstatusar write:favourites: favoritmarkera statusar write:filters: skapa filter write:follows: följ människor diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index a218e3157..0e2d8d2a8 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -4,7 +4,7 @@ tr: attributes: doorkeeper/application: name: Uygulama adı - redirect_uri: Yönlendirme URI'si + redirect_uri: Yönlendirme URL'si scopes: Kapsamlar website: Uygulama web sitesi errors: @@ -19,9 +19,9 @@ tr: doorkeeper: applications: buttons: - authorize: Yetki ver - cancel: İptal et - destroy: Yok et + authorize: İzin Ver + cancel: İptal Et + destroy: Yok Et edit: Düzenle submit: Gönder confirmations: @@ -32,11 +32,11 @@ tr: error: Tüh! Muhtemel hatalar için formunuzu kontrol edin help: native_redirect_uri: Yerel testler için %{native_redirect_uri} kullanın - redirect_uri: URl başına bir satır kullanın + redirect_uri: URL başına bir satır kullanın scopes: Kapsamları boşluklarla ayırın. Varsayılan kapsamları kullanmak için boş bırakın. index: application: Uygulama - callback_url: Geri Dönüş URL + callback_url: Callback URL delete: Sil empty: Hiç uygulamanız yok. name: İsim @@ -48,26 +48,26 @@ tr: title: Yeni uygulama show: actions: Eylemler - application_id: İstemci anahtarı - callback_urls: Callback URL'si + application_id: Client key + callback_urls: Callback URL scopes: Kapsamlar - secret: İstemci anahtarı + secret: Client secret title: 'Uygulama: %{name}' authorizations: buttons: - authorize: Yetkilendir + authorize: İzin Ver deny: Reddet error: title: Bir hata oluştu new: - able_to: Şunları yapabilecek + able_to: 'Şunları yapabilecek:' prompt: "%{client_name} uygulaması hesabınıza erişim istiyor" - title: Yetkilendirme gerekli + title: İzin gerekli show: - title: Bu yetki kodunu kopyalayın ve uygulamaya yapıştırın. + title: Bu yetkilendirme kodunu kopyalayın ve uygulamaya yapıştırın. authorized_applications: buttons: - revoke: İptal + revoke: İptal Et confirmations: revoke: Emin misiniz? index: @@ -115,37 +115,37 @@ tr: application: title: OAuth yetkilendirme gerekli scopes: - admin:read: sunucudaki tüm verileri oku - admin:read:accounts: tüm hesapların hassas bilgilerini oku - admin:read:reports: tüm raporların ve raporlanan hesapların hassas bilgilerini oku + admin:read: sunucudaki tüm verileri okuma + admin:read:accounts: tüm hesapların hassas bilgilerini okuma + admin:read:reports: tüm raporların ve raporlanan hesapların hassas bilgilerini okuma admin:write: sunucudaki tüm verileri değiştirin - admin:write:accounts: hesaplar üzerinde denetleme eylemleri gerçekleştirin - admin:write:reports: raporlar üzerinde denetleme eylemleri gerçekleştirin + admin:write:accounts: hesaplarda denetleme eylemleri gerçekleştirin + admin:write:reports: raporlarda denetleme eylemleri gerçekleştirin follow: hesap ilişkilerini değiştirin push: anlık bildirimlerizi alın read: hesabınızın tüm verilerini okuyun - read:accounts: hesap bilgilerini gör + read:accounts: hesap bilgilerini görün read:blocks: engellemelerinizi görün read:bookmarks: yer imlerinizi görün - read:favourites: favorilerini gör + read:favourites: beğenilerinizi görün read:filters: filtrelerinizi görün - read:follows: izlerini gör + read:follows: takip ettiklerinizi görün read:lists: listelerinizi görün read:mutes: sessize aldıklarınızı görün read:notifications: bildirimlerinizi görün - read:reports: şikayetlerinizi görün - read:search: kendi adınıza arayın + read:reports: raporlarınızı görün + read:search: kendi adınıza arama yapın read:statuses: tüm durumları görün write: hesabınızın tüm verilerini değiştirin - write:accounts: profilini değiştir + write:accounts: profilinizi değiştirin write:blocks: hesapları ve alan adlarını engelleyin - write:bookmarks: durumları yer imlerine ekle - write:favourites: favori durumlar - write:filters: filtre oluştur - write:follows: insanları takip et - write:lists: liste oluştur - write:media: medya dosyalarını yükle - write:mutes: insanları ve konuşmaları sustur + write:bookmarks: durumları yer imleyin + write:favourites: durumları beğenin + write:filters: filtreler oluşturun + write:follows: insanları takip edin + write:lists: listeler oluşturun + write:media: medya dosyaları yükleyin + write:mutes: insanları ve sohbetleri sessize al write:notifications: bildirimlerinizi temizleyin - write:reports: diğer insanları bildir + write:reports: diğer insanları raporlayın write:statuses: durumları yayınlayın diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 82f601790..28be7fd40 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -5,7 +5,7 @@ vi: doorkeeper/application: name: Tên ứng dụng redirect_uri: URL chuyển hướng - scopes: Phạm vi + scopes: Quyền hạn website: Trang web ứng dụng errors: models: @@ -41,7 +41,7 @@ vi: empty: Bạn không có ứng dụng nào. name: Tên new: Ứng dụng mới - scopes: Phạm vi + scopes: Quyền hạn show: Xem title: Ứng dụng của bạn new: @@ -50,7 +50,7 @@ vi: actions: Hành động application_id: Mã Client callback_urls: Gọi lại URLs - scopes: Phạm vi + scopes: Quyền hạn secret: Bí ẩn của Client title: 'Ứng dụng: %{name}' authorizations: @@ -74,7 +74,7 @@ vi: application: Ứng dụng created_at: Đã cho phép date_format: "%Y-%m-%d %H:%M:%S" - scopes: Phạm vi + scopes: Quyền hạn title: Các ứng dụng mà bạn cho phép errors: messages: @@ -85,7 +85,7 @@ vi: invalid_redirect_uri: URL chuyển hướng không hợp lệ. invalid_request: Yêu cầu thiếu tham số bắt buộc, bao gồm giá trị tham số không được hỗ trợ hoặc không đúng định dạng. invalid_resource_owner: Thông tin xác thực chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên - invalid_scope: Phạm vi yêu cầu không hợp lệ, không xác định hoặc không đúng định dạng. + invalid_scope: Quyền yêu cầu không hợp lệ, không có thật hoặc sai định dạng. invalid_token: expired: Mã thông báo truy cập đã hết hạn revoked: Mã thông báo truy cập đã bị thu hồi diff --git a/config/locales/doorkeeper.zgh.yml b/config/locales/doorkeeper.zgh.yml new file mode 100644 index 000000000..827155466 --- /dev/null +++ b/config/locales/doorkeeper.zgh.yml @@ -0,0 +1 @@ +zgh: diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index d30fae50e..3e0d88c82 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -73,7 +73,7 @@ zh-CN: index: application: 应用 created_at: 授权时间 - date_format: "%Y年%m月%d日 %H时%M分%S秒" + date_format: "%Y年%m月%d日 %H:%M:%S" scopes: 权限范围 title: 已授权的应用列表 errors: diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml index 38f07b021..83c552427 100644 --- a/config/locales/doorkeeper.zh-HK.yml +++ b/config/locales/doorkeeper.zh-HK.yml @@ -3,7 +3,7 @@ zh-HK: activerecord: attributes: doorkeeper/application: - name: 名稱 + name: 應用名稱 redirect_uri: 轉接 URI scopes: 權限範圍 website: 應用網站 @@ -38,7 +38,7 @@ zh-HK: application: 應用 callback_url: 回傳網址 delete: 刪除 - empty: 您沒有安裝 App。 + empty: 您沒有申請 name: 名稱 new: 新增應用程式 scopes: 權限範圍 @@ -79,9 +79,9 @@ zh-HK: errors: messages: access_denied: 資源擁有者或授權伺服器不接受請求。 - credential_flow_not_configured: 資源擁有者密碼認證程序 (Resource Owner Password Credentials flow) 失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 - invalid_client: 用戶程式認證 (Client authentication) 失敗,原因是用戶程式未有登記、沒有指定用戶程式 (client)、或者使用了不支援的認證方法 (method)。 - invalid_grant: 授權申請 (authorization grant) 不正確、過期、已被取消,或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。 + credential_flow_not_configured: 資源擁有者密碼認證程序失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 + invalid_client: 用戶程式認證失敗,原因是用戶程式未有登記、沒有指定用戶程式、或者使用了不支援的認證方法。 + invalid_grant: 授權申請不正確、過期、已被取消,或者無法對應授權請求內的轉接 URI,或者屬於別的用戶程式。 invalid_redirect_uri: 不正確的轉接網址。 invalid_request: 請求缺少了必要的參數、包含了不支援的參數、或者其他輸入錯誤。 invalid_resource_owner: 資源擁有者的登入資訊錯誤、或者無法找到該資源擁有者 diff --git a/config/locales/el.yml b/config/locales/el.yml index cf6622f10..9b9eeaa8d 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -98,6 +98,7 @@ el: add_email_domain_block: Εγγραφή τομέα email σε μαύρη λίστα approve: Έγκριση approve_all: Έγκριση όλων + approved_msg: Επιτυχής έγκριση αίτησης εγγραφής του/της %{username} are_you_sure: Σίγουρα; avatar: Αβατάρ by_domain: Τομέας @@ -111,8 +112,10 @@ el: confirm: Επιβεβαίωση confirmed: Επιβεβαιώθηκε confirming: Προς επιβεβαίωση + delete: Διαγραφή δεδομένων deleted: Διαγραμμένοι demote: Υποβίβαση + destroyed_msg: Τα δεδομένα του/της %{username} εκκρεμούν για άμεση διαγραφή disable: Απενεργοποίηση disable_two_factor_authentication: Απενεργοποίηση 2FA disabled: Απενεργοποιημένο @@ -123,6 +126,7 @@ el: email_status: Κατάσταση email enable: Ενεργοποίηση enabled: Ενεργοποιημένο + enabled_msg: Επιτυχές ξεπάγωμα λογαριασμού του/της %{username} followers: Ακόλουθοι follows: Ακολουθεί header: Επικεφαλίδα @@ -138,6 +142,8 @@ el: login_status: Κατάσταση σύνδεσης media_attachments: Συνημμένα πολυμέσα memorialize: Μετατροπή σε νεκρολογία + memorialized: Μετατροπή σε αναμνηστικό + memorialized_msg: Επιτυχής μετατροπή λογαριασμού του/της %{username} σε αναμνηστικό moderation: active: Ενεργός/ή all: Όλα @@ -158,10 +164,14 @@ el: public: Δημόσιο push_subscription_expires: Η εγγραφή PuSH λήγει redownload: Ανανέωση αβατάρ + redownloaded_msg: Επιτυχής ανανέωη προφίλ του/της %{username} από την πηγή reject: Απόρριψη reject_all: Απόρριψη όλων + rejected_msg: Επιτυχής απόρριψη αίτησης εγγραφής του/της %{username} remove_avatar: Απομακρυσμένο αβατάρ remove_header: Αφαίρεση επικεφαλίδας + removed_avatar_msg: Επιτυχής αφαίρεση εικόνας προφίλ του/της%{username} + removed_header_msg: Επιτυχής αφαίρεση εικόνας κεφαλίδας του/της %{username} resend_confirmation: already_confirmed: Ήδη επιβεβαιωμένος χρήστης send: Επανάληψη αποστολής email επιβεβαίωσης @@ -187,13 +197,18 @@ el: statuses: Καταστάσεις subscribe: Εγγραφή suspended: Σε αναστολή + suspension_irreversible: Τα δεδομένα αυτού του λογαριασμού έχουν διαγραφεί οριστικά. Μπορείς να άρεις την αναστολή του λογαριασμού για να μπορέσει να χρησιμοποιηθεί αλλά αυτό δεν θα επαναφέρει όσα δεδομένα είχε προηγουμένως. + suspension_reversible_hint_html: Ο λογαριασμός έχει ανασταλλεί και τα δεδομένα του θα διαγραφούν πλήρως στις %{date}. Μέχρι τότε ο λογαριασμός μπορεί να επανέλθει κανονικά. Αν θέλεις να διαγράψεις όλα τα δεδομένα του λογαριασμού, μπορείς να το κάνεις παρακάτω. time_in_queue: Σε αναμονή για %{time} title: Λογαριασμοί unconfirmed_email: Ανεπιβεβαίωτο email undo_silenced: Αναίρεση αποσιώπησης undo_suspension: Αναίρεση παύσης + unsilenced_msg: Επιτυχής άρση περιορισμών λογαριασμού του/της %{username} unsubscribe: Κατάργηση εγγραφής + unsuspended_msg: Επιτυχής άρση αναστολής λογαριασμού του/της %{username} username: Όνομα χρήστη + view_domain: Προβολή περίληψης για τομέα warn: Προειδοποίηση web: Διαδίκτυο whitelisted: Εγκεκριμένοι @@ -208,12 +223,14 @@ el: create_domain_allow: Δημιουργία Επιτρεπτού Τομέα create_domain_block: Δημιουργία Αποκλεισμένου Τομέα create_email_domain_block: Δημουργία Αποκλεισμένου Τομέα email + create_ip_block: Δημιουργία κανόνα IP demote_user: Υποβιβασμός Χρήστη destroy_announcement: Διαγραφή Ανακοίνωσης destroy_custom_emoji: Διαγραφή Προσαρμοσμένου Emoji destroy_domain_allow: Διαγραφή Επιτρεπτού Τομέα destroy_domain_block: Διαγραφή Αποκλεισμού Τομέα destroy_email_domain_block: Διαγραφή Αποκλεισμένου Τομέα email + destroy_ip_block: Διαγραφή κανόνα IP destroy_status: Διαγραφή Κατάστασης disable_2fa_user: Απενεργοποίηση 2FA disable_custom_emoji: Απενεργοποίηση Προσαρμοσμένων Emoji @@ -244,12 +261,14 @@ el: create_domain_allow: Ο/Η %{name} έβαλε τον τομέα %{target} σε λευκή λίστα create_domain_block: Ο/Η %{name} μπλόκαρε τον τομέα %{target} create_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε μαύρη λίστα + create_ip_block: Ο/Η %{name} δημιούργησε κανόνα για την IP %{target} demote_user: Ο/Η %{name} υποβίβασε το χρήστη %{target} destroy_announcement: Διαγραφή ανακοίνωσης %{target} από %{name} destroy_custom_emoji: Ο/Η %{name} κατέστρεψε το emoji %{target} destroy_domain_allow: Ο/Η %{name} αφαίρεσε τον τομέα %{target} από λίστα εγκρίσεων destroy_domain_block: Ο/Η %{name} ξεμπλόκαρε τον τομέα %{target} destroy_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε λευκή λίστα + destroy_ip_block: Ο/Η %{name} διέγραψε κανόνα για την IP %{target} destroy_status: Ο/Η %{name} αφαίρεσε την κατάσταση του/της %{target} disable_2fa_user: Ο/Η %{name} απενεργοποίησε την απαίτηση δύο παραγόντων για το χρήστη %{target} disable_custom_emoji: Ο/Η %{name} απενεργοποίησε το emoji %{target} @@ -434,6 +453,20 @@ el: expired: Ληγμένες title: Φίλτρο title: Προσκλήσεις + ip_blocks: + add_new: Δημιουργία κανόνα + created_msg: Επιτυχής προσθήκη νέου κανόνα IP + delete: Διαγραφή + expires_in: + '1209600': 2 εβδομάδες + '15778476': 6 μήνες + '2629746': 1 μήνας + '31556952': 1 έτος + '86400': 1 ημέρα + '94670856': 3 έτη + new: + title: Δημιουργία νέου κανόνα IP + title: Κανόνες IP pending_accounts: title: Λογαριασμοί σε αναμονή (%{count}) relationships: @@ -681,8 +714,11 @@ el: prefix_sign_up: Άνοιξε λογαριασμό στο Mastodon σήμερα! suffix: Ανοίγοντας λογαριασμό θα μπορείς να ακολουθείς άλλους, να ανεβάζεις ενημερώσεις και να ανταλλάζεις μηνύματα με χρήστες σε οποιοδήποτε διακομιστή Mastodon, καθώς και άλλα! didnt_get_confirmation: Δεν έλαβες τις οδηγίες επιβεβαίωσης; + dont_have_your_security_key: Δεν έχετε κλειδί ασφαλείας; forgot_password: Ξέχασες το συνθηματικό σου; invalid_reset_password_token: Το διακριτικό επαναφοράς συνθηματικού είναι άκυρο ή ληγμένο. Παρακαλώ αιτήσου νέο. + link_to_otp: Γράψε τον κωδικό πιστοποίησης 2 παραγόντων (2FA) από το τηλέφωνό σου ή τον κωδικό επαναφοράς + link_to_webauth: Χρήση συσκευής κλειδιού ασφαλείας login: Σύνδεση logout: Αποσύνδεση migrate_account: Μετακόμιση σε διαφορετικό λογαριασμό @@ -708,6 +744,7 @@ el: pending: Η εφαρμογή σας εκκρεμεί έγκρισης, πιθανόν θα διαρκέσει κάποιο χρόνο. Θα λάβετε email αν εγκριθεί. redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}. trouble_logging_in: Πρόβλημα σύνδεσης; + use_security_key: Χρήση κλειδιού ασφαλείας authorize_follow: already_following: Ήδη ακολουθείς αυτό το λογαριασμό already_requested: Έχετε ήδη στείλει ένα αίτημα ακολούθησης σε αυτόν τον λογαριασμό @@ -732,6 +769,7 @@ el: date: formats: default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}ω" @@ -992,6 +1030,10 @@ el: quadrillion: τετράκις. thousand: χ. trillion: τρις. + otp_authentication: + code_hint: Για να συνεχίσεις, γράψε τον κωδικό που δημιούργησε η εφαρμογή πιστοποίησης + enable: Ενεργοποίηση + setup: Ρύθμιση pagination: newer: Νεότερο next: Επόμενο @@ -1154,6 +1196,8 @@ el: other: "%{count} ψήφοι" vote: Ψήφισε show_more: Δείξε περισσότερα + show_newer: Εμφάνιση νεότερων + show_older: Εμφάνιση παλαιότερων show_thread: Εμφάνιση νήματος sign_in_to_participate: Συνδέσου για να συμμετάσχεις στη συζήτηση title: '%{name}: "%{quote}"' @@ -1262,21 +1306,17 @@ el: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Βάλε τον κωδικό που δημιούργησε η εφαρμογή πιστοποίησής σου για επιβεβαίωση - description_html: Αν ενεργοποιήσεις την πιστοποίηση 2 παραγόντων (2FA), για να συνδεθείς θα πρέπει να έχεις το τηλέφωνό σου, που θα σου δημιουργήσει κλειδιά εισόδου. + add: Προσθήκη disable: Απενεργοποίησε - enable: Ενεργοποίησε + edit: Επεξεργασία enabled: Η πιστοποίηση 2 παραγόντων (2FA) είναι ενεργοποιημένη enabled_success: Η πιστοποίηση 2 παραγόντων (2FA) ενεργοποιήθηκε επιτυχώς generate_recovery_codes: Δημιούργησε κωδικούς ανάκτησης - instructions_html: "Σάρωσε αυτόν τον κωδικό QR με την εφαρμογή Google Authenticator ή κάποια άλλη αντίστοιχη στο τηλέφωνό σου. Από εδώ και στο εξής, η εφαρμογή αυτή θα δημιουργεί κλειδιά που θα πρέπει να εισάγεις όταν συνδέεσαι." lost_recovery_codes: Οι κωδικοί ανάκτησης σου επιτρέπουν να ανακτήσεις ξανά πρόσβαση στον λογαριασμό σου αν χάσεις το τηλέφωνό σου. Αν έχεις χάσει τους κωδικούς ανάκτησης, μπορείς να τους δημιουργήσεις ξανά εδώ. Οι παλιοί κωδικοί σου θα ακυρωθούν. - manual_instructions: 'Αν δεν μπορείς να σαρώσεις τον κωδικό QR και χρειάζεσαι να τον εισάγεις χειροκίνητα, ορίστε η μυστική φράση σε μορφή κειμένου:' + otp: Εφαρμογή επαλήθευσης recovery_codes: Εφεδρικοί κωδικοί ανάκτησης recovery_codes_regenerated: Οι εφεδρικοί κωδικοί ανάκτησης δημιουργήθηκαν επιτυχώς recovery_instructions_html: Αν ποτέ δεν έχεις πρόσβαση στο κινητό σου, μπορείς να χρησιμοποιήσεις έναν από τους παρακάτω κωδικούς ανάκτησης για να αποκτήσεις πρόσβαση στο λογαριασμό σου. Διαφύλαξε τους κωδικούς ανάκτησης. Για παράδειγμα, μπορείς να τους εκτυπώσεις και να τους φυλάξεις μαζί με άλλα σημαντικά σου έγγραφα. - setup: Στήσιμο - wrong_code: Ο κωδικός που έβαλες ήταν άκυρος! Τα ρολόγια στον διακομιστή και τη συσκευή είναι σωστά; user_mailer: backup_ready: explanation: Είχες ζητήσει εφεδρικό αντίγραφο του λογαριασμού σου στο Mastodon. Είναι έτοιμο για κατέβασμα! @@ -1324,9 +1364,11 @@ el: tips: Συμβουλές title: Καλώς όρισες, %{name}! users: + blocked_email_provider: Δεν είναι επιτρεπτός αυτός ο πάροχος email follow_limit_reached: Δεν μπορείς να ακολουθήσεις περισσότερα από %{limit} άτομα generic_access_help_html: Δυσκολεύεσαι να μπεις στο λογαριασμό σου; Μπορείς να επικοινωνήσεις στο %{email} για βοήθεια invalid_email: Η διεύθυνση email είναι άκυρη + invalid_email_mx: Αυτή η διεύθυνση email δεν φαίνεται να υπάρχει invalid_otp_token: Άκυρος κωδικός πιστοποίησης 2 παραγόντων (2FA) invalid_sign_in_token: Άκυρος κωδικός ασφάλειας otp_lost_help_html: Αν χάσεις και τα δύο, μπορείς να επικοινωνήσεις με τον/την %{email} @@ -1336,3 +1378,13 @@ el: verification: explanation_html: 'Μπορείς να πιστοποιήσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής πρέπει περιέχει την ιδιότητα (attribute) rel="me". Το περιεχόμενο του κειμένου δεν έχει σημασία. Για παράδειγμα:' verification: Πιστοποίηση + webauthn_credentials: + add: Προσθήκη νέου κλειδιού ασφαλείας + create: + success: Το κλειδί ασφαλείας σας προστέθηκε με επιτυχία. + delete: Διαγραφή + delete_confirmation: Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το κλειδί ασφαλείας; + destroy: + success: Το κλειδί ασφαλείας σας διαγράφηκε με επιτυχία. + invalid_credential: Άκυρο κλειδί ασφαλείας + registered_on: Εγγραφή στις %{date} diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 5c11fa6fc..4ac565448 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -154,7 +154,7 @@ eo: remove_header: Forigi kapan bildon resend_confirmation: already_confirmed: Ĉi tiu uzanto jam estas konfirmita - send: Esend konfirmi retpoŝton + send: Resendi konfirman retmesaĝon success: Konfirma retmesaĝo sukcese sendita! reset: Restarigi reset_password: Restarigi pasvorton @@ -193,14 +193,14 @@ eo: create_announcement: Krei Anoncon create_custom_emoji: Krei Propran emoĝion create_domain_allow: Krei Domajnan Permeson - create_domain_block: Krei Domajnan Blokadon - create_email_domain_block: Krei Retpoŝtmesaĝan Domajnan Blokadon + create_domain_block: Krei blokadon de domajno + create_email_domain_block: Krei blokadon de retpoŝta domajno demote_user: Malpromocii uzanton destroy_announcement: Forigi Anoncon destroy_custom_emoji: Forigi Propran emoĝion destroy_domain_allow: Forigi Domajnan Permeson - destroy_domain_block: Forigi Domajnan Blokadon - destroy_email_domain_block: Forigi retpoŝtmesaĝan domajnan blokadon + destroy_domain_block: Forigi blokadon de domajno + destroy_email_domain_block: Forigi blokadon de retpoŝta domajno destroy_status: Forigi mesaĝon disable_2fa_user: Malebligi 2FA disable_custom_emoji: Malebligi Propran Emoĝion @@ -223,13 +223,13 @@ eo: create_custom_emoji: "%{name} alŝutis novan emoĝion %{target}" create_domain_allow: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_block: "%{name} blokis domajnon %{target}" - create_email_domain_block: "%{name} aldonis retadresan domajnon %{target} al la nigra listo" + create_email_domain_block: "%{name} blokis retpoŝtan domajnon %{target}" demote_user: "%{name} degradis uzanton %{target}" destroy_announcement: "%{name} forigis anoncon %{target}" destroy_custom_emoji: "%{name} neniigis la emoĝion %{target}" destroy_domain_allow: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block: "%{name} malblokis domajnon %{target}" - destroy_email_domain_block: "%{name} aldonis retadresan domajnon %{target} al la blanka listo" + destroy_email_domain_block: "%{name} malblokis retpoŝtan domajnon %{target}" destroy_status: "%{name} forigis mesaĝojn de %{target}" disable_2fa_user: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}" disable_custom_emoji: "%{name} malebligis emoĝion %{target}" @@ -333,7 +333,7 @@ eo: destroyed_msg: Domajno estis forigita el la blanka listo undo: Forigi el la blanka listo domain_blocks: - add_new: Aldoni novan + add_new: Aldoni novan blokadon de domajno created_msg: Domajna blokado en traktado destroyed_msg: Domajna blokado malfarita domain: Domajno @@ -366,7 +366,7 @@ eo: retroactive: silence: Malkaŝi ĉiujn kontojn, kiuj ekzistas en ĉi tiu domajno suspend: Malhaltigi ĉiujn kontojn, kiuj ekzistas en ĉi tiu domajno - title: Malfari domajnan blokadon por %{domain} + title: Malfari blokadon de domajno %{domain} undo: Malfari undo: Malfari view: Vidi domajna blokado @@ -408,6 +408,14 @@ eo: expired: Eksvalida title: Filtri title: Invitoj + ip_blocks: + expires_in: + '1209600': 2 semajnoj + '15778476': 6 monatoj + '2629746': 1 monato + '31556952': 1 jaro + '86400': 1 tago + '94670856': 3 jaroj pending_accounts: title: Pritraktataj kontoj (%{count}) relationships: @@ -1048,6 +1056,9 @@ eo: two_factor_authentication: Dufaktora aŭtentigo statuses: attached: + audio: + one: "%{count} aŭdaĵo" + other: "%{count} aŭdaĵoj" description: 'Ligita: %{attached}' image: one: "%{count} bildo" @@ -1077,6 +1088,8 @@ eo: other: "%{count} voĉdonoj" vote: Voĉdoni show_more: Malfoldi + show_newer: Neniam montru + show_older: Montru pli malnova show_thread: Montri la fadenon sign_in_to_participate: Ensaluti por partopreni en la konversacio title: "%{name}: “%{quote}”" @@ -1104,21 +1117,16 @@ eo: default: "%Y-%m-%d %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Enmetu la kodon kreitan de via aŭtentiga aplikaĵo por konfirmi - description_html: Se vi ebligas dufaktoran aŭtentigon, vi bezonos vian poŝtelefonon por ensaluti, ĉar ĝi kreos nombrojn, kiujn vi devos enmeti. + add: Aldoni disable: Malebligi - enable: Ebligi + edit: Redakti enabled: Dufaktora aŭtentigo ebligita enabled_success: Dufaktora aŭtentigo sukcese ebligita generate_recovery_codes: Krei realirajn kodojn - instructions_html: "Skanu ĉi tiun QR-kodon per Google Authenticator aŭ per simila aplikaĵo en via poŝtelefono. De tiam, la aplikaĵo kreos nombrojn, kiujn vi devos enmeti." lost_recovery_codes: Realiraj kodoj permesas rehavi aliron al via konto se vi perdis vian telefonon. Se vi perdis viajn realirajn kodojn, vi povas rekrei ilin ĉi tie. Viaj malnovaj realiraj kodoj iĝos eksvalidaj. - manual_instructions: 'Se vi ne povas skani la QR-kodon kaj bezonas enmeti ĝin mane, jen la tut-teksta sekreto:' recovery_codes: Realiraj kodoj recovery_codes_regenerated: Realiraj kodoj sukcese rekreitaj recovery_instructions_html: Se vi perdas aliron al via telefono, vi povas uzi unu el la subaj realiraj kodoj por rehavi aliron al via konto. Konservu realirajn kodojn sekure. Ekzemple, vi povas printi ilin kaj konservi ilin kun aliaj gravaj dokumentoj. - setup: Agordi - wrong_code: La enmetita kodo estis nevalida! Ĉu la servila tempo kaj la aparata tempo ĝustas? user_mailer: backup_ready: explanation: Vi petis kompletan arkivon de via Mastodon-konto. Ĝi nun pretas por elŝutado! @@ -1168,3 +1176,5 @@ eo: verification: explanation_html: 'Vi povas pruvi, ke vi estas la posedanto de la ligiloj en viaj profilaj metadatumoj. Por fari tion, la alligita retejo devas enhavi ligilon reen al via Mastodon-profilo. La religilo devas havi la atributon rel="me". Ne gravas la teksta enhavo de la religilo. Jen ekzemplo:' verification: Kontrolo + webauthn_credentials: + delete: Forigi diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 0a3c6e4ec..d9c4171a7 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -2,7 +2,7 @@ es-AR: about: about_hashtag_html: Estos son toots públicos etiquetados con #%{hashtag}. Si tenés una cuenta en cualquier parte del fediverso, podés interactuar con ellos. - about_mastodon_html: Mastodon es una red social basada en protocolos abiertos de la web y es software libre y de código abierto. Es descentralizada, como el correo electrónico. + about_mastodon_html: 'La red social del futuro: ¡sin publicidad, sin vigilancia corporativa, con diseño ético y descentralización! ¡Con Mastodon vos sos el dueño de tus datos!' about_this: Acerca de Mastodon active_count_after: activo active_footnote: Usuarios activos mensualmente (MAU) @@ -18,7 +18,7 @@ es-AR: contact_unavailable: No disponible discover_users: Descubrir usuarios documentation: Documentación - federation_hint_html: Con una cuenta en %{instance} vas a poder seguir a gente de cualquier servidor de Mastodon y más allá. + federation_hint_html: Con una cuenta en %{instance} vas a poder seguir a cuentas de cualquier servidor de Mastodon y más allá. get_apps: Probá una aplicación móvil hosted_on: Mastodon alojado en %{domain} instance_actor_flash: | @@ -30,12 +30,12 @@ es-AR: server_stats: 'Estadísticas del servidor:' source_code: Código fuente status_count_after: - one: estado - other: estados + one: toot + other: toots status_count_before: Que enviaron tagline: Seguí a tus amigos y descubrí nueva gente terms: Términos del servicio - unavailable_content: Contenido no disponible + unavailable_content: Servidores moderados unavailable_content_description: domain: Servidor reason: Razón @@ -53,14 +53,14 @@ es-AR: what_is_mastodon: "¿Qué es Mastodon?" accounts: choices_html: 'Recomendados de %{name}:' - endorsements_hint: Podés recomendar a gente que seguís desde la interface web, y va aparecer acá. + endorsements_hint: Podés recomendar a cuentas que seguís desde la interface web, y van a aparecer acá. featured_tags_hint: Podés destacar etiquetas específicas que se mostrarán acá. follow: Seguir followers: one: Seguidor other: Seguidores following: Siguiendo - joined: Se unió en %{date} + joined: En este servidor desde %{date} last_active: última actividad link_verified_on: La propiedad de este enlace fue verificada el %{date} media: Medios @@ -71,12 +71,12 @@ es-AR: people_followed_by: "%{name} sigue a estas personas" people_who_follow: Estas personas siguen a %{name} pin_errors: - following: Ya tenés que estar siguiendo a la persona que querés recomendar + following: Ya tenés que estar siguiendo a la cuenta que querés recomendar posts: one: Toot other: Toots posts_tab_heading: Toots - posts_with_replies: Toots con respuestas + posts_with_replies: Toots y respuestas reserved_username: El nombre de usuario está reservado roles: admin: Administrador @@ -95,9 +95,10 @@ es-AR: delete: Eliminar destroyed_msg: "¡Nota de moderación destruída exitosamente!" accounts: - add_email_domain_block: Desaprobar el dominio del correo electrónico + add_email_domain_block: Bloquear el dominio del correo electrónico approve: Aprobar approve_all: Aprobar todas + approved_msg: Se aprobó exitosamente la solicitud de registro de %{username} are_you_sure: "¿Estás seguro?" avatar: Avatar by_domain: Dominio @@ -110,19 +111,22 @@ es-AR: title: Cambiar correo electrónico para %{username} confirm: Confirmar confirmed: Confirmado - confirming: Confirmando + confirming: Confirmación + delete: Eliminar datos deleted: Eliminado demote: Bajar de nivel - disable: Deshabilitar + destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente + disable: Congelar disable_two_factor_authentication: Deshabilitar 2FA - disabled: Deshabilitada + disabled: Congelada display_name: Nombre para mostrar domain: Dominio edit: Editar email: Correo electrónico email_status: Estado del correo - enable: Habilitar + enable: Descongelar enabled: Habilitada + enabled_msg: Se descongeló exitosamente la cuenta de %{username} followers: Seguidores follows: Seguidores header: Cabecera @@ -132,18 +136,20 @@ es-AR: joined: Se unió en location: all: Todas - local: Local - remote: Remota + local: Locales + remote: Remotas title: Ubicación login_status: Estado del inicio de sesión media_attachments: Adjuntos - memorialize: Convertir en recordatorio + memorialize: Convertir en cuenta conmemorativa + memorialized: Cuenta conmemorativa + memorialized_msg: "%{username} se convirtió exitosamente en una cuenta conmemorativa" moderation: active: Activa all: Todas pending: Pendiente - silenced: Silenciados - suspended: Suspendidos + silenced: Silenciadas + suspended: Suspendidas title: Moderación moderation_notes: Notas de moderación most_recent_activity: Actividad más reciente @@ -153,15 +159,19 @@ es-AR: not_subscribed: No suscripto pending: Revisión pendiente perform_full_suspension: Suspender - promote: Promocionar + promote: Promover protocol: Protocolo public: Pública - push_subscription_expires: La suscripción PuSH vence + push_subscription_expires: La suscripción push vence redownload: Recargar perfil + redownloaded_msg: Se actualizó exitosamente el perfil de %{username} desde el origen reject: Rechazar reject_all: Rechazar todas + rejected_msg: Se rechazó exitosamente la solicitud de registro de %{username} remove_avatar: Quitar avatar remove_header: Quitar cabecera + removed_avatar_msg: Se quitó exitosamente el avatar de %{username} + removed_header_msg: Se quitó exitosamente el encabezado de %{username} resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar correo electrónico de confirmación @@ -173,30 +183,38 @@ es-AR: roles: admin: Administrador moderator: Moderador - staff: Equipo + staff: Administración user: Usuario search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo electrónico search_same_ip: Otros usuarios con la misma dirección IP + sensitive: Sensible + sensitized: marcado como sensible shared_inbox_url: Dirección web de la bandeja de entrada compartida show: - created_reports: Informes hechos + created_reports: Denuncias hechas targeted_reports: Denunciado por otros - silence: Silenciar - silenced: Silenciadas - statuses: Estados + silence: Limitar + silenced: Limitadas + statuses: Toots subscribe: Suscribirse suspended: Suspendidas + suspension_irreversible: Se eliminaron irreversiblemente los datos de esta cuenta. Podés dejar de suspenderla para hacerla utilizable, pero no se recuperarán los datos que tenía anteriormente. + suspension_reversible_hint_html: La cuenta fue suspendida y los datos se eliminarán completamente el %{date}. Hasta entonces, la cuenta puede ser restaurada sin ningún efecto perjudicial. Si querés eliminar todos los datos de la cuenta inmediatamente, podés hacerlo abajo. time_in_queue: Esperando en cola %{time} title: Cuentas unconfirmed_email: Correo electrónico sin confirmar + undo_sensitized: Deshacer marcado como sensible undo_silenced: Deshacer silenciado undo_suspension: Deshacer suspensión + unsilenced_msg: Se quitó exitosamente el límite de la cuenta de %{username} unsubscribe: Desuscribirse + unsuspended_msg: Se quitó exitosamente la suspensión de la cuenta de %{username} username: Nombre de usuario + view_domain: Ver resumen del dominio warn: Advertir web: Web - whitelisted: Aprobadas + whitelisted: Permitidas para federación action_logs: action_types: assigned_to_self_report: Asignar denuncia @@ -208,32 +226,36 @@ es-AR: create_domain_allow: Crear permiso de dominio create_domain_block: Crear bloqueo de dominio create_email_domain_block: Crear bloqueo de dominio de correo electrónico + create_ip_block: Crear regla de dirección IP demote_user: Descender usuario destroy_announcement: Eliminar anuncio destroy_custom_emoji: Eliminar emoji personalizado destroy_domain_allow: Eliminar permiso de dominio destroy_domain_block: Eliminar bloqueo de dominio destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico - destroy_status: Eliminar estado + destroy_ip_block: Eliminar regla de dirección IP + destroy_status: Eliminar toot disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar emoji personalizado disable_user: Deshabilitar usuario enable_custom_emoji: Habilitar emoji personalizado enable_user: Habilitar usuario - memorialize_account: Volver cuenta conmemorativa + memorialize_account: Convertir en cuenta conmemorativa promote_user: Promover usuario remove_avatar_user: Quitar avatar reopen_report: Reabrir denuncia reset_password_user: Cambiar contraseña resolve_report: Resolver denuncia + sensitive_account: Marcar los medios en tu cuenta como sensibles silence_account: Silenciar cuenta suspend_account: Suspender cuenta unassigned_report: Desasignar denuncia + unsensitive_account: Desmarcar los medios en tu cuenta como sensibles unsilence_account: Dejar de silenciar cuenta unsuspend_account: Dejar de suspender cuenta update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoji personalizado - update_status: Actualizar estado + update_status: Actualizar toot actions: assigned_to_self_report: "%{name} se asignó la denuncia %{target} a sí" change_email_user: "%{name} cambió la dirección de correo electrónico del usuario %{target}" @@ -241,36 +263,40 @@ es-AR: create_account_warning: "%{name} envió una advertencia a %{target}" create_announcement: "%{name} creó el nuevo anuncio %{target}" create_custom_emoji: "%{name} subió nuevo emoji %{target}" - create_domain_allow: "%{name} aprobó el dominio %{target}" + create_domain_allow: "%{name} permitió la federación con el dominio %{target}" create_domain_block: "%{name} bloqueó el dominio %{target}" - create_email_domain_block: "%{name} desaprobó el dominio de correo electrónico %{target}" + create_email_domain_block: "%{name} bloqueó el dominio de correo electrónico %{target}" + create_ip_block: "%{name} creó la regla para la dirección IP %{target}" demote_user: "%{name} bajó de nivel al usuario %{target}" destroy_announcement: "%{name} eliminó el anuncio %{target}" destroy_custom_emoji: "%{name} destruyó el emoji %{target}" - destroy_domain_allow: "%{name} quitó el dominio %{target} de los permitidos" + destroy_domain_allow: "%{name} no permitió la federación con el dominio %{target}" destroy_domain_block: "%{name} desbloqueó el dominio %{target}" - destroy_email_domain_block: "%{name} aprobó el dominio de correo electrónico %{target}" - destroy_status: "%{name} eliminó el estado de %{target}" + destroy_email_domain_block: "%{name} desbloqueó el dominio de correo electrónico %{target}" + destroy_ip_block: "%{name} eliminó la regla para la dirección IP %{target}" + destroy_status: "%{name} eliminó el toot de %{target}" disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}" disable_custom_emoji: "%{name} deshabilitó el emoji %{target}" disable_user: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji: "%{name} habilitó el emoji %{target}" enable_user: "%{name} habilitó el inicio de sesión para el usuario %{target}" - memorialize_account: "%{name} convirtió la cuenta de %{target} en una página de recordatorio" + memorialize_account: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa" promote_user: "%{name} promovió al usuario %{target}" remove_avatar_user: "%{name} quitó el avatar de %{target}" reopen_report: "%{name} reabrió la denuncia %{target}" reset_password_user: "%{name} cambió la contraseña del usuario %{target}" resolve_report: "%{name} resolvió la denuncia %{target}" + sensitive_account: "%{name} marcó los medios de %{target} como sensibles" silence_account: "%{name} silenció la cuenta de %{target}" suspend_account: "%{name} suspendió la cuenta de %{target}" unassigned_report: "%{name} desasignó la denuncia %{target}" + unsensitive_account: "%{name} desmarcó los medios de %{target} como sensibles" unsilence_account: "%{name} quitó el silenciado de la cuenta de %{target}" unsuspend_account: "%{name} quitó la suspensión de la cuenta de %{target}" update_announcement: "%{name} actualizó el anuncio %{target}" update_custom_emoji: "%{name} actualizó el emoji %{target}" - update_status: "%{name} actualizó el estado de %{target}" - deleted_status: "(estado borrado)" + update_status: "%{name} actualizó el toot de %{target}" + deleted_status: "[toot eliminado]" empty: No se encontraron registros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuario @@ -288,7 +314,7 @@ es-AR: scheduled_for: Programado para %{time} scheduled_msg: "¡Anuncio programado para su publicación!" title: Anuncios - unpublished_msg: "¡Anuncio dejado de publicar exitosamente!" + unpublished_msg: "¡Se dejó de publicar el anuncio exitosamente!" updated_msg: "¡Anuncio actualizado exitosamente!" custom_emojis: assign_category: Asignar categoría @@ -308,7 +334,7 @@ es-AR: enabled: Habilitado enabled_msg: Se habilitó ese emoji exitosamente image_hint: PNG de hasta 50KB - list: Lista + list: Listar listed: Listados new: title: Agregar nuevo emoji personalizado @@ -318,7 +344,7 @@ es-AR: shortcode_hint: Al menos 2 caracteres, sólo caracteres alfanuméricos y subguiones ("_") title: Emojis personalizados uncategorized: Sin categoría - unlist: No agregar a lista + unlist: No listar unlisted: No listado update_failed_msg: No se pudo actualizar ese emoji updated_msg: "¡Emoji actualizado exitosamente!" @@ -336,26 +362,26 @@ es-AR: feature_timeline_preview: Previsualización de la línea temporal features: Funciones hidden_service: Federación con servicios ocultos - open_reports: abrir denuncias + open_reports: denuncias abiertas pending_tags: etiquetas esperando revisión pending_users: usuarios esperando revisión recent_users: Usuarios recientes search: Búsqueda de texto completo single_user_mode: Modo de usuario único software: Software - space: Uso del espacio + space: Uso de almacenamiento title: Panel total_users: usuarios en total trends: Tendencias week_interactions: interacciones esta semana week_users_active: activos esta semana week_users_new: usuarios esta semana - whitelist_mode: Modo de aprobación + whitelist_mode: Modo de federación limitada domain_allows: - add_new: Aprobar dominio - created_msg: El dominio se aprobó exitosamente - destroyed_msg: El dominio no se aprobó - undo: No aprobado + add_new: Permitir federación con el dominio + created_msg: El dominio fue exitosamente permitido para la federación + destroyed_msg: El dominio no fue permitido para la federación + undo: No permitir federación con el dominio domain_blocks: add_new: Agregar nuevo bloqueo de dominio created_msg: Ahora se está procesando el bloqueo de dominio @@ -376,15 +402,15 @@ es-AR: private_comment_hint: Comentario sobre la limitación de este dominio, para uso interno de los moderadores. public_comment: Comentario público public_comment_hint: Comentario sobre la limitación de este dominio para el público en general, si está habilitada la publicación de lista de limitaciones de dominio. - reject_media: Rechazar archivos de medio - reject_media_hint: Quita los archivos de medio almacenados e impide la descarga en el futuro. Irrelevante para suspensiones. + reject_media: Rechazar archivos de medios + reject_media_hint: Quita los archivos de medios almacenados e impide la descarga en el futuro. Irrelevante para suspensiones reject_reports: Rechazar denuncias - reject_reports_hint: Ignora todas las denuncias que vengan de este dominio. Irrelevante para suspensiones. - rejecting_media: rechazando archivos de medio - rejecting_reports: rechazando denuncias + reject_reports_hint: Ignora todas las denuncias que vengan de este dominio. Irrelevante para suspensiones + rejecting_media: rechazo de archivos de medios + rejecting_reports: rechazo de denuncias severity: - silence: silenciado - suspend: suspendido + silence: silenciados + suspend: suspendidos show: affected_accounts: one: Una cuenta afectada en la base de datos @@ -398,16 +424,16 @@ es-AR: view: Ver bloqueo de dominio email_domain_blocks: add_new: Agregar nuevo - created_msg: Se desaprobó dominio de correo electrónico exitosamente + created_msg: Se bloqueó el dominio de correo electrónico exitosamente delete: Eliminar - destroyed_msg: Se aprobó dominio de correo electrónico exitosamente + destroyed_msg: Se desbloqueó el dominio de correo electrónico exitosamente domain: Dominio - empty: Actualmente no hay dominios de correo electrónico desaprobados. + empty: Actualmente no hay dominios de correo electrónico bloqueados. from_html: de %{domain} new: create: Agregar dominio - title: Nueva desaprobación de correo electrónico - title: Desaprobación de correo electrónico + title: Bloquear nuevo dominio de correo electrónico + title: Dominios bloqueados de correo electrónico instances: by_domain: Dominio delivery_available: La entrega está disponible @@ -422,8 +448,8 @@ es-AR: public_comment: Comentario público title: Federación total_blocked_by_us: Bloqueada por nosotros - total_followed_by_them: Seguidos por ellos - total_followed_by_us: Seguidos por nosotros + total_followed_by_them: Seguidas por ellos + total_followed_by_us: Seguidas por nosotros total_reported: Denuncias sobre ellos total_storage: Adjuntos invites: @@ -434,6 +460,21 @@ es-AR: expired: Vencidas title: Filtrar title: Invitaciones + ip_blocks: + add_new: Crear regla + created_msg: Se agregó exitosamente la nueva regla de dirección IP + delete: Eliminar + expires_in: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 año + '86400': 1 día + '94670856': 3 años + new: + title: Crear nueva regla de dirección IP + no_ip_block_selected: No se cambió ninguna regla de dirección IP, ya que no se seleccionó ninguna + title: Reglas de dirección IP pending_accounts: title: Cuentas pendientes (%{count}) relationships: @@ -441,7 +482,7 @@ es-AR: relays: add_new: Agregar nuevo relé delete: Eliminar - description_html: Un relé de federación es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos. + description_html: Un relé de federación es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso, que de otra manera requeriría que los usuarios locales siguiesen manualmente a cuentas de servidores remotos. disable: Deshabilitar disabled: Deshabilitado enable: Habilitar @@ -451,7 +492,7 @@ es-AR: pending: Esperando aprobación del relé save_and_enable: Guardar y habilitar setup: Configurar una conexión de relé - signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el de aprobación estén habilitados + signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el de federación limitada estén habilitados status: Estado title: Relés report_notes: @@ -480,9 +521,9 @@ es-AR: create_and_resolve: Resolver con nota create_and_unresolve: Reabrir con nota delete: Eliminar - placeholder: Describí qué acciones se tomaron, o cualquier otra actualización relacionada… + placeholder: Describí qué acciones se tomaron, o cualquier otra actualización relacionada... reopen: Reabrir denuncia - report: 'Denunciar #%{id}' + report: 'Denuncia #%{id}' reported_account: Cuenta denunciada reported_by: Denunciada por resolved: Resueltas @@ -494,7 +535,7 @@ es-AR: updated_at: Actualizada settings: activity_api_enabled: - desc_html: Conteos de estados publicados localmente, usuarios activos y nuevos registros en tandas semanales + desc_html: Conteos de toots publicados localmente, usuarios activos y nuevos registros en tandas semanales title: Publicar estadísticas agregadas sobre la actividad del usuario bootstrap_timeline_accounts: desc_html: Separar múltiples nombres de usuario con coma. Sólo funcionarán las cuentas locales y desbloqueadas. Predeterminadamente, cuando está vacío todos los administradores locales. @@ -518,26 +559,26 @@ es-AR: enable_bootstrap_timeline_accounts: title: Habilitar seguimientos predeterminados para nuevas cuentas hero: - desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor. + desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor title: Imagen de portada mascot: - desc_html: Mostrado en múltiples páginas. Se recomienda un tamaño mínimo de 293x205 píxeles. Cuando no se especifica, se muestra la mascota predeterminada. + desc_html: Mostrado en múltiples páginas. Se recomienda un tamaño mínimo de 293x205 píxeles. Cuando no se especifica, se muestra la mascota predeterminada title: Imagen de la mascota peers_api_enabled: desc_html: Nombres de dominio que este servidor encontró en el fediverso title: Publicar lista de servidores descubiertos preview_sensitive_media: - desc_html: Los enlaces de previsualizaciones en otros sitios web mostrarán una miniatura incluso si el medio está marcado como contenido sensible + desc_html: Las previsualizaciones de enlaces en otros sitios web mostrarán una miniatura incluso si el medio está marcado como contenido sensible title: Mostrar medios sensibles en previsualizaciones de OpenGraph profile_directory: desc_html: Permitir que los usuarios puedan ser descubiertos title: Habilitar directorio de perfiles registrations: closed_message: - desc_html: Mostrado en la portada cuando los registros están cerrados. Podés usar etiquetas HTML. - title: Mensaje de registro cerrado + desc_html: Mostrado en la página principal cuando los registros de nuevas cuentas están cerrados. Podés usar etiquetas HTML + title: Mensaje de registro de nuevas cuentas cerrado deletion: - desc_html: Permitor que cualquiera elimine su cuenta + desc_html: Permitir que cualquiera elimine su cuenta title: Abrir eliminación de cuenta min_invite_role: disabled: Nadie @@ -552,26 +593,26 @@ es-AR: desc_html: Cuando está deshabilitado, restringe la línea temporal pública enlazada desde la página de inicio para mostrar sólo contenido local title: Incluir contenido federado en la página de línea temporal pública no autenticada show_staff_badge: - desc_html: Mostrar una insignia de equipo en la página de un usuario - title: Mostrar insignia de equipo + desc_html: Mostrar una insignia de administración en la página de un usuario + title: Mostrar insignia de administración site_description: desc_html: Párrafo introductorio en la API. Describe qué hace especial a este servidor de Mastodon y todo lo demás que sea importante. Podés usar etiquetas HTML, en particular <a> y <em>. title: Descripción del servidor site_description_extended: - desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que definen tu servidor. Podés usar etiquets HTML. + desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que definen tu servidor. Podés usar etiquets HTML title: Información extendida personalizada site_short_description: desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. title: Descripción corta del servidor site_terms: - desc_html: Podés escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Podés usar etiquetas HTML. + desc_html: Podés escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Podés usar etiquetas HTML title: Términos de servicio personalizados site_title: Nombre del servidor spam_check_enabled: desc_html: Mastodon puede denunciar automáticamente cuentas que envían mensajes no solicitados de forma repetida. Podrían haber falsos positivos. title: Automatización antispam thumbnail: - desc_html: Usado para previsualizaciones vía OpenGraph y APIs. Se recomienda 1200x630 píxeles. + desc_html: Usado para previsualizaciones vía OpenGraph y APIs. Se recomienda 1200x630 píxeles title: Miniatura del servidor timeline_preview: desc_html: Mostrar enlace a la línea temporal pública en la página de inicio y permitir el acceso a la API a la línea temporal pública sin autenticación @@ -582,7 +623,7 @@ es-AR: title: Permitir que las etiquetas sean tendencia sin revisión previa trends: desc_html: Mostrar públicamente etiquetas previamente revisadas que son tendencia actualmente - title: Etiquetas tendencias + title: Etiquetas en tendencia site_uploads: delete: Eliminar archivo subido destroyed_msg: "¡Subida al sitio eliminada exitosamente!" @@ -597,8 +638,8 @@ es-AR: media: title: Medios no_media: Sin medios - no_status_selected: No se cambió ningún estado ya que ninguno fue seleccionado - title: Estados de la cuenta + no_status_selected: No se cambió ningún toot ya que ninguno fue seleccionado + title: Toots de la cuenta with_media: Con medios tags: accounts_today: Usos únicos de hoy @@ -617,7 +658,7 @@ es-AR: trending_right_now: En tendencia ahora mismo unique_uses_today: "%{count} toots hoy" unreviewed: No revisado - updated_msg: La configuración de la etiqueta se actualizó exitosamente + updated_msg: La configuración de letiqueta se actualizó exitosamente title: Administración warning_presets: add_new: Agregar nuevo @@ -641,13 +682,13 @@ es-AR: deleted_msg: Eliminaste el alias exitosamente. La mudanza de esa cuenta a esta ya no será posible. empty: No tenés alias. hint_html: Si querés mudarte desde otra cuenta a esta, acá podés crear un alias, el cual es necesario antes de empezar a mudar seguidores de la cuenta vieja a esta. Esta acción por sí misma es inofensiva y reversible. La migración de la cuenta se inicia desde la cuenta anterior. - remove: Desenlazar alias + remove: Desvincular alias appearance: advanced_web_interface: Interface web avanzada advanced_web_interface_hint: 'Si querés hacer uso de todo el ancho de tu pantalla, la interface web avanzada te permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quieras: "Principal", "Notificaciones", "Línea temporal federada", y cualquier número de listas y etiquetas.' animations_and_accessibility: Animaciones y accesibilidad confirmation_dialogs: Diálogos de confirmación - discovery: Descubrimiento + discovery: Descubrí localization: body: Mastodon es localizado por voluntarios. guide_link: https://es.crowdin.com/project/mastodon @@ -663,7 +704,7 @@ es-AR: view_status: Ver estado applications: created: Aplicación creada exitosamente - destroyed: Apicación eliminada exitosamente + destroyed: Aplicación eliminada exitosamente invalid_url: La dirección web ofrecida no es válida regenerate_token: Regenerar clave de acceso token_regenerated: Clave de acceso regenerada exitosamente @@ -675,14 +716,17 @@ es-AR: checkbox_agreement_html: Acepto las reglas del servidor y los términos del servicio checkbox_agreement_without_rules_html: Acepto los términos del servicio delete_account: Eliminar cuenta - delete_account_html: Si querés eliminar tu cuenta, podés seguí por acá. Se te va a pedir una confirmación. + delete_account_html: Si querés eliminar tu cuenta, podés seguir por acá. Se te va a pedir una confirmación. description: prefix_invited_by_user: "¡@%{name} te invita para que te unás a este servidor de Mastodon!" prefix_sign_up: "¡Unite a Mastodon hoy!" - suffix: Con una cuenta vas a poder seguir gente, escribir estados e intercambiar mensajes ¡con usuarios de cualquier servidor de Mastodon y más! + suffix: Con una cuenta vas a poder seguir gente, escribir toots e intercambiar mensajes ¡con usuarios de cualquier servidor de Mastodon y más! didnt_get_confirmation: "¿No recibiste el correo electrónico de confirmación?" + dont_have_your_security_key: "¿No tenés tu llave de seguridad?" forgot_password: "¿Te olvidaste la contraseña?" invalid_reset_password_token: La clave para cambiar la contraseña no es válida o venció. Por favor, solicitá una nueva. + link_to_otp: Ingresá un código de dos factores desde tu dispositivo o un código de recuperación + link_to_webauth: Usá tu dispositivo de llave de seguridad login: Iniciar sesión logout: Cerrar sesión migrate_account: Mudarse a otra cuenta @@ -705,9 +749,10 @@ es-AR: account_status: Estado de la cuenta confirming: Esperando confirmación de correo electrónico. functional: Tu cuenta está totalmente operativa. - pending: Tu solicitud está pendiente de revisión por nuestro equipo. Eso puede tardar algún tiempo. Si se aprueba tu solicitud, vas a recibir un correo electrónico. + pending: Tu solicitud está pendiente de revisión por nuestra administración. Eso puede tardar algún tiempo. Si se aprueba tu solicitud, vas a recibir un correo electrónico. redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. trouble_logging_in: "¿Tenés problemas para iniciar sesión?" + use_security_key: Usar la llave de seguridad authorize_follow: already_following: Ya estás siguiendo a esta cuenta already_requested: Ya enviaste una solicitud de seguimiento a esa cuenta @@ -732,19 +777,20 @@ es-AR: date: formats: default: "%Y.%b.%d" + with_month_name: "%Y.%B.%d" datetime: distance_in_words: about_x_hours: "%{count}h" - about_x_months: "%{count}m" - about_x_years: "%{count}a" - almost_x_years: "%{count}a" + about_x_months: "%{count}M" + about_x_years: "%{count}A" + almost_x_years: "%{count}A" half_a_minute: Recién - less_than_x_minutes: "%{count}m" + less_than_x_minutes: "%{count}min" less_than_x_seconds: Recién - over_x_years: "%{count}a" - x_days: "%{count}d" - x_minutes: "%{count}m" - x_months: "%{count}m" + over_x_years: "%{count}A" + x_days: "%{count}D" + x_minutes: "%{count}min" + x_months: "%{count}M" x_seconds: "%{count}s" deletes: challenge_not_passed: La información que ingresaste no es correcta @@ -778,7 +824,7 @@ es-AR: '422': content: Falló la verificación de seguridad. ¿Estás bloqueando cookies? title: Falló la verificación de seguridad - '429': Asfixiado + '429': Demasiadas solicitudes '500': content: Lo sentimos, pero algo salió mal en nuestro lado. title: Esta página no es correcta @@ -792,14 +838,14 @@ es-AR: date: Fecha download: Descargá tu archivo historial hint_html: Podés solicitar un archivo historial de tus toots y medios subidos. Los datos exportados estarán en formato "ActivityPub", legibles por cualquier software compatible. Podés solicitar un archivo historial cada 7 días. - in_progress: Compilando tu archivo historial… + in_progress: Compilando tu archivo historial... request: Solicitá tu archivo historial size: Tamaño - blocks: Tus bloqueos + blocks: Cuentas que bloqueaste csv: CSV domain_blocks: Dominios bloqueados lists: Listas - mutes: Quienes silenciaste + mutes: Cuentas que silenciaste storage: Almacenamiento de medios featured_tags: add_new: Agregar nueva @@ -817,7 +863,7 @@ es-AR: title: Editar filtro errors: invalid_context: Se suministró un contexto no válido o vacío - invalid_irreversible: El filtrado irreversible sólo funciona con los contextos de "Principal" o de notificaciones + invalid_irreversible: El filtrado irreversible sólo funciona con los contextos de "Principal" o de "Notificaciones" index: delete: Eliminar empty: No tenés filtros. @@ -868,7 +914,7 @@ es-AR: merge_long: Mantener registros existentes y agregar nuevos overwrite: Sobrescribir overwrite_long: Reemplazar registros actuales con los nuevos - preface: Podés importar ciertos datos que exportaste desde otro servidor, como una lista de las personas que estás siguiendo o bloqueando. + preface: Podés importar ciertos datos que exportaste desde otro servidor, como una lista de las cuentas que estás siguiendo o bloqueando. success: Tus datos se subieron exitosamente y serán procesados en brevedad types: blocking: Lista de bloqueados @@ -876,7 +922,7 @@ es-AR: following: Lista de seguidos muting: Lista de silenciados upload: Subir - in_memoriam_html: Como recordatorio. + in_memoriam_html: Cuenta conmemorativa. invites: delete: Desactivar expired: Vencidas @@ -904,8 +950,8 @@ es-AR: limit: Alcanzaste el máximo de listas media_attachments: validations: - images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes - not_ready: No se pueden adjuntar archivos que no terminaron de procesarse. ¡Intentá de nuevo en un rato! + images_and_video: No se puede adjuntar un video a un toot que ya contenga imágenes + not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Intentá de nuevo en un rato! too_many: No se pueden adjuntar más de 4 archivos migrations: acct: Mudada a @@ -955,10 +1001,10 @@ es-AR: subject: one: "1 nueva notificación desde tu última visita \U0001F418" other: "%{count} nuevas notificaciones desde tu última visita \U0001F418" - title: En tu ausencia… + title: En tu ausencia... favourite: - body: 'Tu estado fue marcado como favorito por %{name}:' - subject: "%{name} marcó como favorito tu estado" + body: 'Tu toot fue marcado como favorito por %{name}:' + subject: "%{name} marcó tu toot como favorito" title: Nuevo favorito follow: body: "¡%{name} te está siguiendo!" @@ -975,8 +1021,8 @@ es-AR: subject: Fuiste mencionado por %{name} title: Nueva mención reblog: - body: "%{name} retooteó tu estado:" - subject: "%{name} retooteó tu estado" + body: "%{name} retooteó tu toot:" + subject: "%{name} retooteó tu toot" title: Nuevo retoot notifications: email_events: Eventos para notificaciones por correo electrónico @@ -987,11 +1033,19 @@ es-AR: decimal_units: format: "%n%u" units: - billion: B + billion: MM million: M - quadrillion: Q + quadrillion: C thousand: m trillion: T + otp_authentication: + code_hint: Ingresá el código generado por tu aplicación de autenticación para confirmar + description_html: Si habilitás la autenticación de dos factores usando una aplicación de autenticación, entonces en el inicio de sesión se te pedirá que estés con tu dispositivo, el cual generará un código numérico ("token") para que lo ingresés. + enable: Habilitar + instructions_html: Escaneá este código QR en Authy, Google Authenticator o en otra aplicación TOTP en tu dispositivo. A partir de ahora, esa aplicación generará un código numérico ("token") para que lo ingresés. + manual_instructions: 'Si no podés escanear el código QR y necesitás ingresarlo manualmente, acá está el secreto en texto plano:' + setup: Configurar + wrong_code: "¡El código ingresado no es válido! ¿La hora del servidor y del dispositivo son correctas?" pagination: newer: Más recientes next: Siguiente @@ -1010,7 +1064,7 @@ es-AR: too_few_options: debe tener más de un elemento too_many_options: no puede contener más de %{max} elementos preferences: - other: Otros + other: Otras opciones posting_defaults: Configuración predeterminada de publicaciones public_timelines: Líneas temporales públicas reactions: @@ -1026,7 +1080,7 @@ es-AR: last_active: Última actividad most_recent: Más reciente moved: Mudada - mutual: Mutuo + mutual: Mutua primary: Principal relationship: Relación remove_selected_domains: Quitar todos los seguidores de los dominios seleccionados @@ -1036,10 +1090,10 @@ es-AR: remote_follow: acct: Ingresá tu usuario@dominio desde el que querés seguir missing_resource: No se pudo encontrar la dirección web de redireccionamiento requerida para tu cuenta - no_account_html: "¿No tenés cuenta? Podés registrarte acá." + no_account_html: "¿No tenés cuenta? Podés registrarte acá" proceed: Proceder para seguir prompt: 'Vas a seguir a:' - reason_html: "¿¿Por qué es necesario este paso? %{instance} puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen." + reason_html: "¿Por qué es necesario este paso? %{instance} puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen." remote_interaction: favourite: proceed: Proceder para marcar como favorito @@ -1063,15 +1117,15 @@ es-AR: chrome: Chrome edge: Edge electron: Electron - firefox: Firefox - generic: Navegador web desconocido + firefox: Mozilla Firefox + generic: "[Navegador web desconocido]" ie: Internet Explorer micro_messenger: MicroMessenger nokia: Navegador web de Nokia S40 Ovi opera: Opera otter: Otter phantom_js: PhantomJS - qq: Navegador QQ + qq: QQ Browser safari: Safari uc_browser: UC Browser weibo: Weibo @@ -1083,12 +1137,12 @@ es-AR: adobe_air: Adobe Air android: Android blackberry: BlackBerry - chrome_os: ChromeOS + chrome_os: Chrome OS firefox_os: Firefox OS ios: iOS linux: GNU/Linux mac: macOS - other: plataforma desconocida + other: "[Plataforma desconocida]" windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone @@ -1105,7 +1159,7 @@ es-AR: delete: Eliminación de la cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportar datos + export: Exportación de datos featured_tags: Etiquetas destacadas identity_proofs: Pruebas de identidad import: Importar @@ -1116,6 +1170,7 @@ es-AR: profile: Perfil relationships: Seguimientos two_factor_authentication: Autenticación de dos factores + webauthn_authentication: Llaves de seguridad spam_check: spam_detected: Este es un informe automatizado. Se detectó spam. statuses: @@ -1136,7 +1191,7 @@ es-AR: one: 'contenía una etiqueta no permitida: %{tags}' other: 'contenía las etiquetas no permitidas: %{tags}' errors: - in_reply_not_found: El estado al que intentás responder no existe. + in_reply_not_found: El toot al que intentás responder no existe. language_detection: Detectar idioma automáticamente open_in_web: Abrir en web over_character_limit: se excedió el límite de %{max} caracteres @@ -1154,13 +1209,15 @@ es-AR: other: "%{count} votos" vote: Votar show_more: Mostrar más + show_newer: Mostrar más recientes + show_older: Mostrar más antiguos show_thread: Mostrar hilo sign_in_to_participate: Iniciá sesión para participar en la conversación title: '%{name}: "%{quote}"' visibilities: private: Sólo a seguidores private_long: Sólo mostrar a seguidores - public: Pública + public: Público public_long: Todos pueden ver unlisted: No listado unlisted_long: Todos pueden ver, pero no está listado en las líneas temporales públicas @@ -1177,7 +1234,7 @@ es-AR:
  • Información básica de la cuenta: Si te registrás en este servidor, se te va a pedir un nombre de usuario, una dirección de correo electrónico y una contraseña. También podés ingresar información adicional de perfil como un nombre para mostrar y una biografía, y subir un avatar y una imagen de cabecera. El nombre de usuario, nombre para mostrar, biografía, avatar e imagen de cabecera siempre son visibles públicamente.
  • -
  • Toots, seguimiento y otra información pública: La lista de gente a la que seguís es mostrada públicamente, al igual que la de tus seguidores. Cuando enviás un mensaje, se almacenan la fecha y hora, así como la aplicación desde la cual enviaste el mensaje. Los mensajes pueden contener archivos adjuntos de medios, como imágenes y videos. Los toots públicos y no listados están técnicamente disponibles para todos. Cuando destacás un toot en tu perfil, eso también se considera información disponible públicamente. Tus toots son entregados a tus seguidores, en algunos casos significa que son entregados a diferentes servidores y las copias son almacenadas allí. Cuando eliminás toots, esto también afecta a tus seguidores. La acción de retootear o marcar como favorito otro toot es siempre pública.
  • +
  • Toots, seguimiento y otra información pública: La lista de gente a la que seguís es mostrada públicamente, al igual que la de tus seguidores. Cuando enviás un mensaje, se almacenan la fecha y hora, así como la aplicación desde la cual enviaste el mensaje. Los mensajes pueden contener archivos adjuntos de medios, como imágenes y videos. Los toots públicos y no listados están técnicamente disponibles para todos. Cuando destacás un toot en tu perfil, eso también se considera información disponible públicamente. Tus toots son entregados a tus seguidores; en algunos casos significa que son entregados a diferentes servidores y las copias son almacenadas allí. Cuando eliminás toots, esto también afecta a tus seguidores. La acción de retootear o marcar como favorito otro toot es siempre pública.
  • Toots directos y sólo para seguidores: Todos los toots se almacenan y procesan en el servidor. Los toots sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esos toots sólo a las personas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen tus seguidores. Podés cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración. Por favor, tené en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes, y que los destinatarios pueden tomar capturas de pantalla, copiarlos o volver a compartirlos de alguna otra manera. No compartas ninguna información peligrosa en Mastodon.
  • Direcciones IP y otros metadatos: Cuando iniciás sesión, registramos la dirección IP desde dónde lo estás haciendo, así como el nombre de tu navegador web. Todos los inicios de sesiones están disponibles para tu revisión y revocación en la configuración. La última dirección IP usada se almacena hasta por 12 meses. También podemos conservar los registros del servidor que incluyen la dirección IP de cada solicitud a nuestro servidor.
@@ -1189,7 +1246,7 @@ es-AR:

Toda la información que recolectamos de vos puede ser usada de las siguientes maneras:

    -
  • Para proporcionar la funcionalidad principal de Mastodon. Sólo puedes interactuar con el contenido de otras personas y publicar tu propio contenido cuando hayás iniciado sesión. Por ejemplo, podés seguir a otras personas para ver sus mensajes combinados en tu propia línea temporal personalizada.
  • +
  • Para proporcionar la funcionalidad principal de Mastodon. Sólo podés interactuar con el contenido de otras personas y publicar tu propio contenido cuando hayás iniciado sesión. Por ejemplo, podés seguir a otras personas para ver sus mensajes combinados en tu propia línea temporal personalizada.
  • Para ayudar a la moderación de la comunidad, por ejemplo, comparando tu dirección IP con otras conocidas para determinar la evasión de prohibiciones u otras violaciones.
  • La dirección de correo electrónico que nos proporcionés podría usarse para enviarte información, notificaciones sobre otras personas que interactúen con tu contenido o para enviarte mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.
@@ -1198,20 +1255,20 @@ es-AR:

¿Cómo protegemos tu información?

-

Implementamos una variedad de medidas de seguridad para mantener la seguridad de tu información personal cuando ingresás, enviás o accedés a tu información personal. Entre otras cosas, la sesión de tu navegador web, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL; y tu contraseña está protegida mediante un algoritmo unidireccional fuerte. Podés habilitar la autenticación de dos factores para un acceso más seguro a tu cuenta.

+

Implementamos una variedad de medidas de seguridad para mantener la seguridad de tu información personal cuando ingresás, enviás o accedés a tu información personal. Entre otras cosas, la sesión de tu navegador web, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL; y tu contraseña está protegida mediante un algoritmo unidireccional fuerte. Podés habilitar la autenticación de dos factores para obtener un acceso más seguro a tu cuenta.


¿Cuál es nuestra política de retención de datos?

-

Haremos un esfuerzo de buena fe para:

+

Hacemos un esfuerzo de buena fe para:

  • Conservar los registros del servidor que contengan la dirección IP de todas las solicitudes a este servidor, en la medida en que se mantengan dichos registros, por no más de 90 días.
  • Conservar las direcciones IP asociadas a los usuarios registrados, por no más de 12 meses.
-

Podé solicitar y descargar un archivo historial de tu contenido, incluyendo tus toots, archivos adjuntos de medios, avatar e imagen de cabecera.

+

Podés solicitar y descargar un archivo historial de tu contenido, incluyendo tus toots, archivos adjuntos de medios, avatar e imagen de cabecera.

Podés eliminar tu cuenta de forma irreversible en cualquier momento.

@@ -1219,7 +1276,7 @@ es-AR:

¿Usamos cookies?

-

Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere a la unidad de almacenamiento de tu computadora a través de tu navegador web (si lo permitís). Estas cookies permiten al sitio reconocer tu navegador web y, si tenés una cuenta registrada, asociarla con la misma.

+

Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere a la unidad de almacenamiento de tu computadora a través de tu navegador web (si así lo permitís). Estas cookies permiten al sitio reconocer tu navegador web y, si tenés una cuenta registrada, asociarla con la misma.

Usamos cookies para entender y guardar tu configuración para futuras visitas.

@@ -1229,7 +1286,7 @@ es-AR:

No vendemos, comercializamos ni transferimos de ninguna otra manera a terceros tu información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podríamos liberar tu información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio web, o proteger derechos, propiedad o seguridad, nuestros o de otros.

-

Tu contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.

+

Tu contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y tus mensajes sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.

Cuando autorizás a una aplicación a usar tu cuenta, dependiendo del alcance de los permisos que aprobés, puede acceder a la información de tu perfil público, tu lista de seguimiento, tus seguidores, tus listas, todos tus mensajes y tus favoritos. Las aplicaciones nunca podrán acceder a tu dirección de correo electrónico o contraseña.

@@ -1237,9 +1294,9 @@ es-AR:

Uso del sitio web por parte de niños

-

Si este servidor está en la UE o en el EEE: Nuestro sitio web, productos y servicios están dirigidos a personas mayores de 16 años. Si tenés menos de 16 años, según los requisitos de la GDPR (Reglamento General de Protección de Datos) no usés este sitio.

+

Si este servidor está en la UE o en el EEE: Nuestro sitio web, productos y servicios están dirigidos a personas mayores de 16 años. Si tenés menos de 16 años, según los requisitos de la GDPR (Reglamento General de Protección de Datos) entonces, por favor, no usés este sitio web.

-

Si este servidor está en los EE.UU.: Nuestro sitio web, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si tenés menos de 13 años, según los requisitos de COPPA (Acta de Protección de la Privacidad en Línea de Niños [en inglés]) no usés este sitio.

+

Si este servidor está en los EE.UU.: Nuestro sitio web, productos y servicios están dirigidos a personas que tienen al menos 13 años de edad. Si tenés menos de 13 años, según los requisitos de COPPA (Acta de Protección de la Privacidad en Línea de Niños [en inglés]) entonces, por favor, no usés este sitio web.

Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.

@@ -1260,23 +1317,22 @@ es-AR: time: formats: default: "%Y.%b.%d, %H:%M" - month: "%b %Y" + month: "%b de %Y" two_factor_authentication: - code_hint: Ingresá el código generado por tu aplicación de autenticación para confirmar - description_html: Si habilitás la autenticación de dos factores, se requerirá estar en posesión de tu dispositivo móvil, lo que generará claves para que las ingresés. - disable: Deshabilitar - enable: Habilitar + add: Agregar + disable: Deshabilitar 2FA + disabled_success: Autenticación de dos factores exitosamente deshabilitada + edit: Editar enabled: La autenticación de dos factores está activada enabled_success: Se habilitó exitosamente la autenticación de dos factores generate_recovery_codes: Generar códigos de recuperación - instructions_html: Escaneá este código QR con Authy, FreeOTP, Google Authenticator, Microsoft Authenticator o cualquier otra aplicación de generación de contraseñas por única vez basada en el tiempo ("TOTP") en tu dispositivo móvil. Desde ahora, esta aplicación va a generar claves que tenés que ingresar cuando quieras iniciar sesión. - lost_recovery_codes: Los códigos de recuperación te permiten recuperar el acceso a tu cuenta, si perdés tu dispositivo móvil. Si perdiste tus códigos de recuperación, podés regenerarlos acá. Tus antiguos códigos de recuperación serán invalidados. - manual_instructions: 'Si no podés escanear el código QR y necesitás introducirlo manualmente, este es el secreto en texto plano:' + lost_recovery_codes: Los códigos de recuperación te permiten recuperar el acceso a tu cuenta, si no tenés acceso a la aplicación de 2FA. Si perdiste tus códigos de recuperación, podés regenerarlos acá. Tus antiguos códigos de recuperación serán invalidados. + methods: Métodos de dos factores + otp: Aplicación de autenticación recovery_codes: Resguardar códigos de recuperación recovery_codes_regenerated: Los códigos de recuperación se regeneraron exitosamente - recovery_instructions_html: Si alguna vez perdés el acceso a tu dispositivo móvil, podés usar uno de los siguientes códigos de recuperación para recuperar el acceso a tu cuenta. Mantenelos a salvo. Por ejemplo, podés imprimirlos y guardarlos con otros documentos importantes. - setup: Configurar - wrong_code: "¡El código ingresado no es válido! ¿La hora en el dispositivo y en el servidor es correcta?" + recovery_instructions_html: Si alguna vez perdés el acceso a tu aplicación de 2FA, podés usar uno de los siguientes códigos de recuperación para recuperar el acceso a tu cuenta. Mantenelos a salvo. Por ejemplo, podés imprimirlos y guardarlos con otros documentos importantes. + webauthn: Llaves de seguridad user_mailer: backup_ready: explanation: Solicitado un resguardo completo de tu cuenta de Mastodon. ¡Ya está listo para descargar! @@ -1290,25 +1346,28 @@ es-AR: title: Intento de inicio de sesión warning: explanation: - disable: Mientras tu cuenta esté congelada, la información de la misma permanecerá intacta, pero no podés realizar ninguna acción hasta que se desbloquee. - silence: Mientras tu cuenta esté limitada, sólo las personas que ya te estén siguiendo verán tus toots en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otras personas pueden seguirte manualmente. - suspend: Tu cuenta fue suspendida, y todos tus toots y tus archivos de medios subidos fueron irreversiblemente eliminados de este servidor, y de los servidores en donde tenías seguidores. - get_in_touch: Podés responder a esta dirección de correo electrónico para ponerte en contacto con el equipo de %{instance}. + disable: Ya no podés iniciar sesión en tu cuenta o usarla de alguna manera, pero tu perfil y otros datos permanecen intactos. + sensitive: Tus archivos de medios subidos y enlaces de medios serán tratados como sensibles. + silence: Todavía podés usar tu cuenta, pero sólo las personas que ya te estén siguiendo verán tus toots en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otras personas pueden seguirte manualmente. + suspend: Ya no podés usar tu cuenta; tu perfil y otros datos ya no son accesibles. Todavía podés iniciar sesión para solicitar un resguardo de tus datos hasta que los mismos sean totalmente quitados, pero retendremos ciertos datos para prevenirte de evadir la suspensión. + get_in_touch: Podés responder a esta dirección de correo electrónico para ponerte en contacto con la administración de %{instance}. review_server_policies: Revisar las políticas del servidor statuses: 'Específicamente, para:' subject: disable: Tu cuenta %{acct} fue congelada none: Advertencia para %{acct} + sensitive: Los toots con medios de tu cuenta %{acct} fueron marcados como sensibles silence: Tu cuenta %{acct} fue limitada suspend: Tu cuenta %{acct} fue suspendida title: disable: Cuenta congelada none: Advertencia + sensitive: Tus medios fueron marcados como sensibles silence: Cuenta limitada suspend: Cuenta suspendida welcome: edit_profile_action: Configurar perfil - edit_profile_step: Podés personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre para mostrar y más cosas. Si querés revisar a tus nuevos seguidores antes de que se les permita seguirte, podés bloquear tu cuenta. + edit_profile_step: Podés personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre para mostrar y más cosas. Si querés revisar a tus nuevos seguidores antes de que se les permita seguirte, podés bloquear tu cuenta (esto es, hacerla privada). explanation: Aquí hay algunos consejos para empezar final_action: Empezar a tootear final_step: ¡Empezá a tootear! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local y con etiquetas. Capaz que quieras presentarte al mundo con la etiqueta "#presentación". @@ -1320,13 +1379,15 @@ es-AR: tip_federated_timeline: La línea temporal federada es una línea contínua global de la red de Mastodon. Pero sólo incluye gente que tus vecinos están siguiendo, así que no es completa. tip_following: Predeterminadamente seguís al / a los administrador/es de tu servidor. Para encontrar más gente interesante, revisá las lineas temporales local y federada. tip_local_timeline: La línea temporal local es una línea contínua global de cuentas en %{instance}. ¡Estos son tus vecinos inmediatos! - tip_mobile_webapp: Si tu navegador web móvil te ofrece agregar Mastodon a tu página de inicio, podés recibir notificaciones PuSH. ¡Actúa como una aplicación nativa de muchas maneras! + tip_mobile_webapp: Si tu navegador web móvil te ofrece agregar Mastodon a tu página de inicio, podés recibir notificaciones push. ¡Actúa como una aplicación nativa de muchas maneras! tips: Consejos title: "¡Bienvenido a bordo, %{name}!" users: - follow_limit_reached: No podés seguir a más de %{limit} personas + blocked_email_provider: No está permitido este proveedor de correo electrónico + follow_limit_reached: No podés seguir a más de %{limit} cuentas generic_access_help_html: "¿Tenés problemas para acceder a tu cuenta? Podés ponerte en contacto con %{email} para obtener ayuda" - invalid_email: La dirección de correo electrónico no es correcta + invalid_email: La dirección de correo electrónico no es válida + invalid_email_mx: Parece que esta dirección de correo electrónico no existe invalid_otp_token: Código de dos factores no válido invalid_sign_in_token: Código de seguridad no válido otp_lost_help_html: Si perdiste al acceso a ambos, podés ponerte en contacto con %{email} @@ -1336,3 +1397,20 @@ es-AR: verification: explanation_html: 'Podés verificarte a vos mismo como el propietario de los enlaces en los metadatos de tu perfil. Para eso, el sitio web del enlace debe contener un enlace de vuelta a tu perfil de Mastodon. El enlace en tu sitio debe tener un atributo rel="me". El contenido del texto del enlace no importa. Acá tenés un ejemplo:' verification: Verificación + webauthn_credentials: + add: Agregar nueva llave de seguridad + create: + error: Hubo un problema al agregar tu llave de seguridad. Por favor, intentá de nuevo. + success: Se agregó exitosamente tu llave de seguridad. + delete: Eliminar + delete_confirmation: "¿Estás seguro que querés eliminar esta llave de seguridad?" + description_html: Si habilitás la autenticación de llave de seguridad, entonces en el inicio de sesión se te pedirá que usés una de tus llaves de seguridad. + destroy: + error: Hubo un problema al eliminar tu llave de seguridad. Por favor, intentá de nuevo. + success: Se eliminó exitosamente tu llave de seguridad. + invalid_credential: Llave de seguridad no válida + nickname_hint: Ingresá el apodo de tu nueva llave de seguridad + not_enabled: Todavía no habilitaste WebAuthn + not_supported: Este navegador web no soporta llaves de seguridad + otp_required: Para usar llaves de seguridad, por favor, primero habilitá la autenticación de dos factores. + registered_on: Registrado el %{date} diff --git a/config/locales/es.yml b/config/locales/es.yml index aec8db984..532835e39 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -98,6 +98,7 @@ es: add_email_domain_block: Poner en lista negra el dominio del correo approve: Aprobar approve_all: Aprobar todos + approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente are_you_sure: "¿Estás seguro?" avatar: Avatar by_domain: Dominio @@ -111,8 +112,10 @@ es: confirm: Confirmar confirmed: Confirmado confirming: Confirmando + delete: Eliminar datos deleted: Borrado demote: Degradar + destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar disable_two_factor_authentication: Desactivar autenticación de dos factores disabled: Deshabilitada @@ -123,6 +126,7 @@ es: email_status: E-mail Status enable: Habilitar enabled: Habilitada + enabled_msg: Se ha descongelado correctamente la cuenta de %{username} followers: Seguidores follows: Sigue header: Cabecera @@ -138,6 +142,8 @@ es: login_status: Estado del login media_attachments: Multimedia memorialize: Convertir en memorial + memorialized: Cuenta conmemorativa + memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa" moderation: active: Activo all: Todos @@ -158,10 +164,14 @@ es: public: Público push_subscription_expires: Expiración de la suscripción PuSH redownload: Refrescar avatar + redownloaded_msg: Se actualizó correctamente el perfil de %{username} desde el origen reject: Rechazar reject_all: Rechazar todos + rejected_msg: La solicitud de registro de %{username} ha sido rechazada con éxito remove_avatar: Eliminar el avatar remove_header: Eliminar cabecera + removed_avatar_msg: Se ha eliminado exitosamente la imagen del avatar de %{username} + removed_header_msg: Se ha eliminado con éxito la imagen de cabecera de %{username} resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar el correo electrónico de confirmación @@ -178,6 +188,8 @@ es: search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP + sensitive: Sensible + sensitized: marcado como sensible shared_inbox_url: URL de bandeja compartida show: created_reports: Reportes hechos por esta cuenta @@ -187,13 +199,19 @@ es: statuses: Estados subscribe: Suscribir suspended: Suspendido + suspension_irreversible: Los datos de esta cuenta han sido irreversiblemente eliminados. Puedes deshacer la suspensión de la cuenta para hacerla utilizable, pero no recuperará los datos que tenías anteriormente. + suspension_reversible_hint_html: La cuenta ha sido suspendida y los datos se eliminarán completamente el %{date}. Hasta entonces, la cuenta puede ser restaurada sin ningún efecto perjudicial. Si desea eliminar todos los datos de la cuenta inmediatamente, puede hacerlo a continuación. time_in_queue: Esperando en cola %{time} title: Cuentas unconfirmed_email: Correo electrónico sin confirmar + undo_sensitized: Desmarcar como sensible undo_silenced: Des-silenciar undo_suspension: Des-suspender + unsilenced_msg: Se quitó con éxito el límite de la cuenta %{username} unsubscribe: Desuscribir + unsuspended_msg: Se quitó con éxito la suspensión de la cuenta de %{username} username: Nombre de usuario + view_domain: Ver resumen del dominio warn: Adevertir web: Web whitelisted: Añadido a la lista blanca @@ -208,12 +226,14 @@ es: create_domain_allow: Crear Permiso de Dominio create_domain_block: Crear Bloqueo de Dominio create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico + create_ip_block: Crear regla IP demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permiso de Dominio destroy_domain_block: Eliminar Bloqueo de Dominio destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico + destroy_ip_block: Eliminar regla IP destroy_status: Eliminar Estado disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado @@ -226,9 +246,11 @@ es: reopen_report: Reabrir Reporte reset_password_user: Restablecer Contraseña resolve_report: Resolver Reporte + sensitive_account: Marcar multimedia en tu cuenta como sensible silence_account: Silenciar Cuenta suspend_account: Suspender Cuenta unassigned_report: Desasignar Reporte + unsensitive_account: Desmarcar multimedia en tu cuenta como sensible unsilence_account: Dejar de Silenciar Cuenta unsuspend_account: Dejar de Suspender Cuenta update_announcement: Actualizar Anuncio @@ -244,12 +266,14 @@ es: create_domain_allow: "%{name} ha añadido a la lista blanca el dominio %{target}" create_domain_block: "%{name} bloqueó el dominio %{target}" create_email_domain_block: "%{name} puso en lista negra el dominio de correos %{target}" + create_ip_block: "%{name} creó la regla para la IP %{target}" demote_user: "%{name} degradó al usuario %{target}" destroy_announcement: "%{name} eliminó el anuncio %{target}" destroy_custom_emoji: "%{name} destruyó el emoji %{target}" destroy_domain_allow: "%{name} ha eliminado el dominio %{target} de la lista blanca" destroy_domain_block: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block: "%{name} puso en lista blanca el dominio de correos %{target}" + destroy_ip_block: "%{name} eliminó la regla para la IP %{target}" destroy_status: "%{name} eliminó el estado de %{target}" disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}" disable_custom_emoji: "%{name} deshabilitó el emoji %{target}" @@ -262,9 +286,11 @@ es: reopen_report: "%{name} ha reabierto la denuncia %{target}" reset_password_user: "%{name} restauró la contraseña del usuario %{target}" resolve_report: "%{name} ha resuelto la denuncia %{target}" + sensitive_account: "%{name} marcó multimedia de %{target} como sensible" silence_account: "%{name} silenció la cuenta de %{target}" suspend_account: "%{name} suspendió la cuenta de %{target}" unassigned_report: "%{name} ha desasignado la denuncia %{target}" + unsensitive_account: "%{name} desmarcó multimedia de %{target} como sensible" unsilence_account: "%{name} desactivó el silenciado de la cuenta de %{target}" unsuspend_account: "%{name} desactivó la suspensión de la cuenta de %{target}" update_announcement: "%{name} actualizó el anuncio %{target}" @@ -434,6 +460,21 @@ es: expired: Expiradas title: Filtrar title: Invitaciones + ip_blocks: + add_new: Crear regla + created_msg: Nueva regla IP añadida con éxito + delete: Eliminar + expires_in: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 año + '86400': 1 día + '94670856': 3 años + new: + title: Crear nueva regla IP + no_ip_block_selected: No se han cambiado reglas IP ya que no se ha seleccionado ninguna + title: Reglas IP pending_accounts: title: Cuentas pendientes (%{count}) relationships: @@ -681,8 +722,11 @@ es: prefix_sign_up: "¡Únete a Mastodon hoy!" suffix: "¡Con una cuenta podrás seguir a gente, publicar novedades e intercambiar mensajes con usuarios de cualquier servidor de Mastodon y más!" didnt_get_confirmation: "¿No recibió el correo de confirmación?" + dont_have_your_security_key: "¿No tienes tu clave de seguridad?" forgot_password: "¿Olvidaste tu contraseña?" invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo. + link_to_otp: Introduce un código de dos factores desde tu teléfono o un código de recuperación + link_to_webauth: Utilice su dispositivo de clave de seguridad login: Iniciar sesión logout: Cerrar sesión migrate_account: Mudarse a otra cuenta @@ -708,6 +752,7 @@ es: pending: Su solicitud está pendiente de revisión por nuestros administradores. Eso puede tardar algún tiempo. Usted recibirá un correo electrónico si el solicitud sea aprobada. redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. trouble_logging_in: "¿Problemas para iniciar sesión?" + use_security_key: Usar la clave de seguridad authorize_follow: already_following: Ya estás siguiendo a esta cuenta already_requested: Ya has enviado una solicitud de seguimiento a esa cuenta @@ -732,6 +777,7 @@ es: date: formats: default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -992,6 +1038,14 @@ es: quadrillion: Q thousand: m trillion: T + otp_authentication: + code_hint: Introduce el código generado por tu aplicación de autentificación para confirmar + description_html: Si habilitas autenticación de dos factores a través de una aplicación de autenticación, el ingreso requerirá que estés en posesión de tu teléfono, que generará códigos para que ingreses. + enable: Activar + instructions_html: "Escanea este código QR desde Google Authenticator o una aplicación similar en tu teléfono. A partir de ahora, esta aplicación generará códigos que tendrásque ingresar cuando quieras iniciar sesión." + manual_instructions: 'Si no puedes escanear el código QR y necesitas introducirlo manualmente, este es el secreto en texto plano:' + setup: Configurar + wrong_code: "¡El código ingresado es inválido! ¿Es correcta la hora del dispositivo y el servidor?" pagination: newer: Más nuevo next: Próximo @@ -1034,7 +1088,7 @@ es: remove_selected_follows: Dejar de seguir a los usuarios seleccionados status: Estado de la cuenta remote_follow: - acct: Ingesa tu usuario@dominio desde el que quieres seguir + acct: Ingresa tu usuario@dominio desde el que quieres seguir missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta no_account_html: "¿No tienes una cuenta? Puedes registrarte aqui" proceed: Proceder a seguir @@ -1116,6 +1170,7 @@ es: profile: Perfil relationships: Siguiendo y seguidores two_factor_authentication: Autenticación de dos factores + webauthn_authentication: Claves de seguridad spam_check: spam_detected: Este es un informe automatizado. Se ha detectado correo no deseado. statuses: @@ -1154,7 +1209,9 @@ es: other: "%{count} votos" vote: Vota show_more: Mostrar más - show_thread: Mostrar hilván + show_newer: Mostrar más recientes + show_older: Mostrar más antiguos + show_thread: Mostrar discusión sign_in_to_participate: Regístrate para participar en la conversación title: '%{name}: "%{quote}"' visibilities: @@ -1262,21 +1319,20 @@ es: default: "%d de %b del %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Ingresa el código generado por tu aplicación de autenticación para confirmar - description_html: Si habilitas la autenticación de dos factores, se requerirá estar en posesión de su teléfono, lo que generará tokens para que usted pueda iniciar sesión. + add: Añadir disable: Deshabilitar - enable: Habilitar + disabled_success: Autenticación de doble factor desactivada correctamente + edit: Editar enabled: La autenticación de dos factores está activada enabled_success: Verificación de dos factores activada exitosamente generate_recovery_codes: generar códigos de recuperación - instructions_html: "Escanea este código QR desde Google Authenticator o una aplicación similar en su teléfono. Desde ahora, esta aplicación va a generar tokens que tienes que ingresar cuando quieras iniciar sesión." lost_recovery_codes: Los códigos de recuperación te permiten obtener acceso a tu cuenta si pierdes tu teléfono. Si has perdido tus códigos de recuperación, puedes regenerarlos aquí. Tus viejos códigos de recuperación se harán inválidos. - manual_instructions: 'Si no puedes escanear el código QR y necesitas introducirlo manualmente, este es el secreto en texto plano:' + methods: Métodos de autenticación de doble factor + otp: Aplicación de autenticación recovery_codes: Hacer copias de seguridad de tus códigos de recuperación recovery_codes_regenerated: Códigos de recuperación regenerados con éxito recovery_instructions_html: Si pierdes acceso a tu teléfono, puedes usar uno de los siguientes códigos de recuperación para obtener acceso a tu cuenta. Mantenlos a salvo. Por ejemplo, puedes imprimirlos y guardarlos con otros documentos importantes. - setup: Configurar - wrong_code: "¡El código ingresado es inválido! ¿El dispositivo y tiempo del servidor están correctos?" + webauthn: Claves de seguridad user_mailer: backup_ready: explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar! @@ -1291,6 +1347,7 @@ es: warning: explanation: disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee. + sensitive: Los archivos multimedia subidos y vinculados serán tratados como sensibles. silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente. suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores. get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}. @@ -1299,11 +1356,13 @@ es: subject: disable: Su cuenta %{acct} ha sido congelada none: Advertencia para %{acct} + sensitive: Tu cuenta %{acct} ha sido marcada como sensible silence: Su cuenta %{acct} ha sido limitada suspend: Su cuenta %{acct} ha sido suspendida title: disable: Cuenta congelada none: Advertencia + sensitive: Tu multimedia ha sido marcado como sensible silence: Cuenta limitada suspend: Cuenta suspendida welcome: @@ -1324,9 +1383,11 @@ es: tips: Consejos title: Te damos la bienvenida a bordo, %{name}! users: + blocked_email_provider: Este proveedor de correo electrónico no está permitido follow_limit_reached: No puedes seguir a más de %{limit} personas generic_access_help_html: "¿Tienes problemas para acceder a tu cuenta? Puedes ponerte en contacto con %{email} para conseguir ayuda" invalid_email: La dirección de correo es incorrecta + invalid_email_mx: La dirección de correo electrónico parece inexistente invalid_otp_token: Código de dos factores incorrecto invalid_sign_in_token: Código de seguridad no válido otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email} @@ -1336,3 +1397,20 @@ es: verification: explanation_html: 'Puedes verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil . Para eso, el sitio vinculado debe contener un vínculo a tu perfil de Mastodon. El vínculo en tu sitio debe tener un atributo rel="me". El texto del vínculo no importa. Aquí un ejemplo:' verification: Verificación + webauthn_credentials: + add: Agregar nueva clave de seguridad + create: + error: Hubo un problema al añadir su clave de seguridad. Por favor, inténtalo de nuevo. + success: Su clave de seguridad se ha añadido correctamente. + delete: Eliminar + delete_confirmation: "¿Estás seguro de que quieres eliminar esta clave de seguridad?" + description_html: Si habilita la autenticación de clave de seguridad, iniciar sesión requerirá que utilice una de sus claves de seguridad. + destroy: + error: Hubo un problema al añadir su clave de seguridad. Por favor, inténtalo de nuevo. + success: Su clave de seguridad se ha eliminado correctamente. + invalid_credential: Clave de seguridad no válida + nickname_hint: Introduzca el apodo de su nueva clave de seguridad + not_enabled: Aún no has activado WebAuthn + not_supported: Este navegador no soporta claves de seguridad + otp_required: Para usar claves de seguridad, por favor habilite primero la autenticación de doble factor. + registered_on: Registrado el %{date} diff --git a/config/locales/et.yml b/config/locales/et.yml index d611059cc..17f462da1 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1176,21 +1176,14 @@ et: default: "%d. %B, %Y. aastal, kell %H:%M" month: "%B %Y" two_factor_authentication: - code_hint: Sisesta kaheastmelise autentimise kood, mille lõi Teie autentimisrakendus, et jätkata - description_html: Kui Te aktiveerite kaheastmelise autentimise, siis sisselogimisel peab teil olema telefon, mis loob Teile koode sisenemiseks. disable: Lülita välja - enable: Lülita sisse enabled: Kaheastmeline autentimine on sisse lülitatud enabled_success: Kaheastmeline autentimine on edukalt sisse lülitatud generate_recovery_codes: Loo taastuskoodid - instructions_html: "Skaneeri see QR kood kasutades rakendust Google Authenticator või muu TOTP rakendus Teie telefonis. Nüüdsest alates loob see rakendus Teile koode, mida peate sisestama sisselogimisel." lost_recovery_codes: Taastuskoodide abil on Teil võimalik sisse logida kontosse, kui Te kaotate oma telefoni. Kui Te kaotate oma taastuskoodid, saate need uuesti luua siin. Teie vanad taastuskoodid tehakse kehtetuks. - manual_instructions: 'Kui Te ei saa seda QR koodi skaneerida ning peate sisestama selle käsitsi, on siin tekstiline salavõti:' recovery_codes: Tagavara taastuskoodid recovery_codes_regenerated: Taastuskoodid edukalt taasloodud recovery_instructions_html: Kui Te juhtute kunagi kaotama oma telefoni, saate kasutada ühte allpool olevatest taastuskoodidest, et saada ligipääsu oma kontole. Hoidke taastuskoodid turvaliselt. Näiteks võite Te need välja printida ning hoida need koos teiste tähtsate dokumentidega. - setup: Sätesta - wrong_code: Sisestatud kood on vale! Kas serveri aeg ja seadme aeg on õiged? user_mailer: backup_ready: explanation: Te taotlesite varukoopia oma Mastodoni kontost. See on nüüd valmis allalaadimiseks! diff --git a/config/locales/eu.yml b/config/locales/eu.yml index fde1a820e..cd82a5d9a 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -21,7 +21,9 @@ eu: federation_hint_html: "%{instance} instantzian kontu bat izanda edozein Mastodon zerbitzariko jendea jarraitu ahal izango duzu, eta harago ere." get_apps: Probatu mugikorrerako aplikazio bat hosted_on: Mastodon %{domain} domeinuan ostatatua - instance_actor_flash: Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. + instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. + +' learn_more: Ikasi gehiago privacy_policy: Pribatutasun politika see_whats_happening: Ikusi zer gertatzen ari den @@ -1230,21 +1232,14 @@ eu: default: "%Y(e)ko %b %d, %H:%M" month: "%Y(e)ko %b" two_factor_authentication: - code_hint: Sartu zure autentifikazio aplikazioak sortutako kodea berresteko - description_html: "Bi faktoreetako autentifikazioa gaitzen baduzu, saioa hasteko telefonoa eskura izan beharko duzu, honek zuk sartu behar dituzun kodeak sortuko dituelako." disable: Desgaitu - enable: Gaitu enabled: Bi faktoreetako autentifikazioa gaituta dago enabled_success: Bi faktoreetako autentifikazioa ongi gaitu da generate_recovery_codes: Sortu berreskuratze kodeak - instructions_html: "Eskaneatu QR kode hau Google Authentiocator edo antzeko TOTTP aplikazio batekin zure telefonoan. Hortik aurrera, aplikazio horrek saioa hasteko sartu behar dituzun kodeak sortuko ditu." lost_recovery_codes: Berreskuratze kodeek telefonoa galtzen baduzu kontura sarbidea berreskuratzea ahalbideko dizute. Berreskuratze kodeak galdu badituzu, hemen birsortu ditzakezu. Zure berreskuratze kode zaharrak indargabetuko dira,. - manual_instructions: 'Ezin baduzu QR kodea eskaneatu eta eskuz sartu behar baduzu, hona sekretua testu hutsean:' recovery_codes: Berreskuratze kodeen babes-kopia recovery_codes_regenerated: Berreskuratze kodeak ongi sortu dira recovery_instructions_html: Zure telefonora sarbidea galtzen baduzu, beheko berreskuratze kode bat erabili dezakezu kontura berriro sartu ahal izateko. Gore barreskuratze kodeak toki seguruan. Adibidez inprimatu eta dokumentu garrantzitsuekin batera gorde. - setup: Ezarri - wrong_code: Sartutako kodea baliogabea da! Zerbitzariaren eta gailuaren erlojuak ondo ezarrita daude? user_mailer: backup_ready: explanation: Zure Mastodon kontuaren babes-kopia osoa eskatu duzu. Deskargatzeko prest dago! diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 25e66f328..7435576a2 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -100,6 +100,7 @@ fa: add_email_domain_block: مسدود کردن دامنهٔ رایانامه approve: پذیرفتن approve_all: پذیرفتن همه + approved_msg: کارهٔ ثبت‌نام %{username} با موفقیت تأیید شد are_you_sure: مطمئنید؟ avatar: تصویر نمایه by_domain: دامین @@ -113,8 +114,10 @@ fa: confirm: تأیید confirmed: تأیید شد confirming: تأیید + delete: حذف داده‌ها deleted: حذف شده demote: تنزل‌دادن + destroyed_msg: داده‌های %{username} در صف حدف قرار گرفتند disable: از کار انداختن disable_two_factor_authentication: از کار انداختن ورود دومرحله‌ای disabled: از کار افتاده @@ -160,10 +163,14 @@ fa: public: عمومی push_subscription_expires: عضویت از راه PuSH منقضی شد redownload: نوسازی نمایه + redownloaded_msg: حساب %{username} با موفقیت از ابتدا نوسازی شد reject: نپذیرفتن reject_all: نپذیرفتن هیچکدام + rejected_msg: کارهٔ ثبت‌نام %{username} با موفقیت رد شد remove_avatar: حذف تصویر نمایه remove_header: برداشتن تصویر زمینه + removed_avatar_msg: تصویر آواتار %{username} با موفّقیت برداشته شد + removed_header_msg: تصویر سرایند %{username} با موفّقیت برداشته شد resend_confirmation: already_confirmed: این کاربر قبلا تایید شده است send: ایمیل تایید را دوباره بفرستید @@ -180,6 +187,8 @@ fa: search: جستجو search_same_email_domain: دیگر کاربران با دامنهٔ رایانامهٔ یکسان search_same_ip: دیگر کاربران با IP یکسان + sensitive: حساس + sensitized: علامت‌زده به عنوان حساس shared_inbox_url: نشانی صندوق ورودی مشترک show: created_reports: گزارش‌های ثبت کرده @@ -189,13 +198,19 @@ fa: statuses: نوشته‌ها subscribe: اشتراک suspended: تعلیق‌شده + suspension_irreversible: داده‌های این حساب به صورت بی‌بازگشت حذف شد. می‌توانید برای قابل استفاده کردنش، آن را نامعلّق کنید، ولی این کار هیچ داده‌ای را که از پیش داده، برنخواهد گرداند. + suspension_reversible_hint_html: حساب معلّق شد و داده‌ها به صورت کامل در %{date} برداشته خواهند شد. تا آن زمان، حساب می‌تواند بی هیچ عوارضی بازگردانده شود. اگر می‌خواهید فوراً همهٔ داده‌های حساب را بردارید، می‌توانید در پایین این کار را بکنید. time_in_queue: در حال انتظار %{time} title: حساب‌ها unconfirmed_email: ایمیل تأییدنشده + undo_sensitized: بازگردانی حساس undo_silenced: واگردانی بی‌صداکردن undo_suspension: واگردانی تعلیق + unsilenced_msg: حساب %{username} با موفّقیت نامحدود شد unsubscribe: لغو اشتراک + unsuspended_msg: حساب %{username} با موفّقیت نامعلّق شد username: نام کاربری + view_domain: نمایش خلاصهٔ دامنه warn: هشدار web: وب whitelisted: فهرست مجاز @@ -210,12 +225,14 @@ fa: create_domain_allow: ایجاد اجازهٔ دامنه create_domain_block: ایجاد انسداد دامنه create_email_domain_block: ایجاد انسداد دامنهٔ رایانامه + create_ip_block: ایجاد قاعدهٔ آی‌پی demote_user: تنزل کاربر destroy_announcement: حذف اعلامیه destroy_custom_emoji: حذف اموجی سفارشی destroy_domain_allow: حذف اجازهٔ دامنه destroy_domain_block: حذف انسداد دامنه destroy_email_domain_block: حذف انسداد دامنهٔ رایانامه + destroy_ip_block: حذف قاعدهٔ آی‌پی destroy_status: حذف وضعیت disable_2fa_user: از کار انداختن ورود دومرحله‌ای disable_custom_emoji: از کار انداختن اموجی سفارشی @@ -228,9 +245,11 @@ fa: reopen_report: بازگشایی گزارش reset_password_user: بازنشانی گذرواژه resolve_report: رفع گزارش + sensitive_account: علامت‌گذاری رسانه در حسابتان به عنوان حساس silence_account: خموشی حساب suspend_account: تعلیق حساب unassigned_report: رفع واگذاری گزارش + unsensitive_account: برداشتن علامت رسانه در حسابتان به عنوان حساس unsilence_account: رفع خموشی حساب unsuspend_account: رفع تعلیق حساب update_announcement: به‌روز رسانی اعلامیه @@ -246,12 +265,14 @@ fa: create_domain_allow: "%{name} دامنهٔ %{target} را مجاز کرد" create_domain_block: "%{name} دامین %{target} را مسدود کرد" create_email_domain_block: "%{name} دامین ایمیل %{target} را مسدود کرد" + create_ip_block: "%{name} برای آی‌پی %{target} قاعده‌ای ایجاد کرد" demote_user: "%{name} مقام کاربر %{target} را تنزل داد" destroy_announcement: "%{name} اعلامیهٔ %{target} را حذف کرد" destroy_custom_emoji: "%{name} اموجی %{target} را نابود کرد" destroy_domain_allow: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت" destroy_domain_block: "%{name} انسداد دامنهٔ %{target} را رفع کرد" destroy_email_domain_block: "%{name} دامنهٔ ایمیل %{target} را به فهرست مجاز افزود" + destroy_ip_block: "%{name} قاعده‌ای را از آی‌پی %{target} حذف کرد" destroy_status: "%{name} نوشتهٔ %{target} را پاک کرد" disable_2fa_user: "%{name} اجبار ورود دومرحله‌ای را برای کاربر %{target} غیرفعال کرد" disable_custom_emoji: "%{name} شکلک %{target} را غیرفعال کرد" @@ -436,6 +457,21 @@ fa: expired: منقضی‌شده title: فیلتر title: دعوت‌ها + ip_blocks: + add_new: ایجاد قانون + created_msg: قانون IP جدید با موفقیت افزوده شد + delete: پاک کردن + expires_in: + '1209600': ۲ هفته + '15778476': ۶ ماه + '2629746': ۱ ماه + '31556952': ۱ سال + '86400': ۱ روز + '94670856': ۳ سال + new: + title: ایجاد قانون جدید IP + no_ip_block_selected: هیچ قاعدهٔ آی‌پی‌ای تغییری نکرد زیرا هیچ‌کدام گزیده نشده بودند + title: قوانین IP pending_accounts: title: حساب‌های منتظر (%{count}) relationships: @@ -683,8 +719,11 @@ fa: prefix_sign_up: همین امروز عضو ماستودون شوید! suffix: با داشتن حساب می‌توانید دیگران را پی بگیرید، نوشته‌های تازه منتشر کنید، و با کاربران دیگر از هر سرور ماستودون دیگری و حتی سرورهای دیگر در ارتباط باشید! didnt_get_confirmation: راهنمایی برای تأیید را دریافت نکردید؟ + dont_have_your_security_key: کلید امنیتیتان را ندارید؟ forgot_password: رمزتان را گم کرده‌اید؟ invalid_reset_password_token: کد بازنشانی رمز نامعتبر یا منقضی شده است. لطفاً کد دیگری درخواست کنید. + link_to_otp: رمز بازگردانی یا رمز دوعاملی را از تلفنتان وارد کنید + link_to_webauth: استفاده از افزارهٔ امنیتیتان login: ورود logout: خروج migrate_account: نقل مکان به یک حساب دیگر @@ -710,6 +749,7 @@ fa: pending: درخواست شما منتظر تأیید مسئولان سایت است و این فرایند ممکن است کمی طول بکشد. اگر درخواست شما پذیرفته شود به شما ایمیلی فرستاده خواهد شد. redirecting_to: حساب شما غیرفعال است زیرا هم‌اکنون به %{acct} منتقل شده است. trouble_logging_in: برای ورود مشکلی دارید؟ + use_security_key: استفاده از کلید امنیتی authorize_follow: already_following: شما همین الان هم این حساب را پی‌می‌گیرید already_requested: درخواست پی‌گیری‌ای برای آن حساب فرستاده‌ بودید @@ -734,6 +774,7 @@ fa: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count} ساعت" @@ -994,6 +1035,13 @@ fa: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید + description_html: اگر ورود دومرحله‌ای را با استفاده از از یک کارهٔ تأییدکننده به کار بیندازید، لازم است برای ورود، به تلفن خود که برایتان یک ژتون خواهد ساخت دسترسی داشته باشید. + enable: به کار انداختن + manual_instructions: 'اگر نمی‌توانید رمز QR را بپویید و باید دستی واردظ کنید، متن رمز این‌جاست:' + setup: برپا سازی + wrong_code: رمز وارد شده نامعتبر بود! آیا زمان کارساز و زمان افزاره درستند؟ pagination: newer: تازه‌تر next: بعدی @@ -1118,6 +1166,7 @@ fa: profile: نمایه relationships: پیگیری‌ها و پیگیران two_factor_authentication: ورود دومرحله‌ای + webauthn_authentication: کلیدهای امنیتی spam_check: spam_detected: این یک گزارش خودکار برای تشخیص هرزنامه است. statuses: @@ -1264,21 +1313,20 @@ fa: default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید - description_html: اگر ورود دومرحله‌ای را فعال کنید، برای ورود به سیستم به تلفن خود نیاز خواهید داشت تا برایتان یک کد موقتی بسازد. + add: افزودن disable: غیرفعال‌کردن - enable: فعال‌کردن + disabled_success: ورود دومرحله‌ای با موفقیت از کار افتاد + edit: ویرایش enabled: ورود دومرحله‌ای فعال است enabled_success: ورود دومرحله‌ای با موفقیت فعال شد generate_recovery_codes: ساخت کدهای بازیابی - instructions_html: "این کد QR را با برنامهٔ Google Authenticator یا برنامه‌های TOTP مشابه اسکن کنید. از این به بعد، آن برنامه کدهایی موقتی خواهد ساخت که برای ورود باید آن‌ها را وارد کنید." lost_recovery_codes: با کدهای بازیابی می‌توانید اگر تلفن خود را گم کردید به حساب خود دسترسی داشته باشید. اگر کدهای بازیابی خود را گم کردید، آن‌ها را این‌جا دوباره بسازید. کدهای بازیابی قبلی شما نامعتبر خواهند شد. - manual_instructions: 'اگر نمی‌توانید کدها را اسکن کنید و باید آن‌ها را دستی وارد کنید، متن کد امنیتی این‌جاست:' + methods: روش‌های ورود دومرحله‌ای + otp: کارهٔ تأیید کننده recovery_codes: پشتیبان‌گیری از کدهای بازیابی recovery_codes_regenerated: کدهای بازیابی با موفقیت ساخته شدند recovery_instructions_html: اگر تلفن خود را گم کردید، می‌توانید با یکی از کدهای بازیابی زیر کنترل حساب خود را به دست بگیرید. این کدها را در جای امنی نگه دارید. مثلاً آن‌ها را چاپ کنید و کنار سایر مدارک مهم خود قرار دهید. - setup: راه اندازی - wrong_code: کدی که وارد کردید نامعتبر بود! آیا ساعت کارساز و ساعت دستگاه شما درست تنظیم شده‌اند؟ + webauthn: کلیدهای امنیتی user_mailer: backup_ready: explanation: شما یک نسخهٔ پشتیبان کامل از حساب خود را درخواست کردید. این پشتیبان الان آمادهٔ بارگیری است! @@ -1293,6 +1341,7 @@ fa: warning: explanation: disable: تا وقتی حساب شما متوقف باشد، داده‌های شما دست‌نخورده باقی می‌مانند، ولی تا وقتی که حسابتان باز نشده، نمی‌توانید هیچ کاری با آن بکنید. + sensitive: پرونده‌های رسانهٔ بارگذاری‌شده و رسانه‌های پیوسته به عنوان حساس در نظر گرفته خواهند شد. silence: تا وقتی حساب شما محدود باشد، تنها کسانی که از قبل پیگیر شما بودند نوشته‌های شما در این کارساز را می‌بینند و شاید شما در برخی از فهرست‌های عمومی دیده نشوید. ولی دیگران همچنان می‌توانند به دلخواه خودشان پیگیر شما شوند. suspend: حسابتان معلق شده و تمام بوق‌ها و رسانه‌های بارگذاشته‌تان، از روی این کارساز و کارسازهایی که پیگیرانی رویشان داشتید، به طور بازگشت‌ناپذیری برداشته شده‌اند. get_in_touch: با پاسخ به این ایمیل می‌توانید با دست‌اندرکاران %{instance} در تماس باشید. @@ -1306,6 +1355,7 @@ fa: title: disable: حساب متوقف شده است none: هشدار + sensitive: رسانه‌تان به عنوان حساس در نظر گرفته شد silence: حساب محدود شده است suspend: حساب معلق شده است welcome: @@ -1326,9 +1376,11 @@ fa: tips: نکته‌ها title: خوش آمدید، کاربر %{name}! users: + blocked_email_provider: فراهم‌کنندهٔ رایانامه مجاز نیست follow_limit_reached: شما نمی‌توانید بیش از %{limit} نفر را پی بگیرید generic_access_help_html: مشکل در دسترسی به حسابتان؟ می‌توانید برای کمک با %{email} تکاس بگیرید invalid_email: نشانی ایمیل نامعتبر است + invalid_email_mx: به نظر نمی‌رسد نشانی رایانامه وجود داشته باشد invalid_otp_token: کد ورود دومرحله‌ای نامعتبر است invalid_sign_in_token: کد امنیتی نادرست otp_lost_help_html: اگر شما دسترسی به هیچ‌کدامشان ندارید، باید با ایمیل %{email} تماس بگیرید @@ -1338,3 +1390,19 @@ fa: verification: explanation_html: 'شما می‌توانید خود را به عنوان مالک صفحه‌ای که در نمایه‌تان به آن پیوند داده‌اید تأیید کنید. برای این کار، صفحه‌ای که به آن پیوند داده‌اید، خودش باید پیوندی به نمایهٔ ماستودون شما داشته باشد. پیوند در آن صفحه باید عبارت rel="me"‎ را به عنوان مشخّصهٔ (attribute) در خود داشته باشد. محتوای متن پیوند اهمتی ندارد. یک نمونه از چنین پیوندی:' verification: تأیید + webauthn_credentials: + add: افزودن کلید امنیتی + create: + error: افزودن کلید امنیتیتان با مشکل مواجه شد. لطفاً دوباره تلاش کنید. + success: کلید امنیتیتان با موفّقیت افزوده شد. + delete: حذف + delete_confirmation: مطمئنید که می‌خواهید این کلید امنیتی را حذف کنید؟ + destroy: + error: حذف کلید امنیتیتان با مشکل مواجه شد. لطفاً دوباره تلاش کنید. + success: کلید امنیتیتان با موفّقیت حذف شد. + invalid_credential: کلید امنیتی نامعتبر + nickname_hint: نام مستعار کلید امنیتی جدیدتان را وارد کنید + not_enabled: شما هنوز WebAuthn را فعال نکرده‌اید + not_supported: این مرورگر از کلیدهای امنیتی پشتیبانی نمی‌کند + otp_required: برای استفاده از کلیدهای امنیتی، لطفاً ابتدا تأیید هویت دو عاملی را به کار بیندازید. + registered_on: ثبت‌شده در %{date} diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 9d248a6a8..9eb0d9397 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -875,21 +875,14 @@ fi: formats: default: "%d.%m.%Y klo %H.%M" two_factor_authentication: - code_hint: Vahvista syöttämällä todentamissovelluksen generoima koodi - description_html: Jos otat käyttöön kaksivaiheisen todentamisen, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. disable: Poista käytöstä - enable: Ota käyttöön enabled: Kaksivaiheinen todentaminen käytössä enabled_success: Kaksivaiheisen todentamisen käyttöönotto onnistui generate_recovery_codes: Luo palautuskoodit - instructions_html: "Lue tämä QR-koodi puhelimen Google Authenticator- tai vastaavalla TOTP-sovelluksella. Sen jälkeen sovellus luo tunnuksia, joita tarvitset sisäänkirjautuessasi." lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodit, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. - manual_instructions: 'Jos et voi lukea QR-koodia ja haluat syöttää sen käsin, tässä on salainen koodi tekstinä:' recovery_codes: Varapalautuskoodit recovery_codes_regenerated: Uusien palautuskoodien luonti onnistui recovery_instructions_html: Jos menetät puhelimesi, voit kirjautua tilillesi jollakin alla olevista palautuskoodeista. Pidä palautuskoodit hyvässä tallessa. Voit esimerkiksi tulostaa ne ja säilyttää muiden tärkeiden papereiden joukossa. - setup: Ota käyttöön - wrong_code: Annettu koodi oli virheellinen! Ovatko palvelimen aika ja laitteen aika oikein? user_mailer: backup_ready: explanation: Pyysit täydellistä varmuuskopiota Mastodon-tilistäsi. Voit nyt ladata sen! diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 224fefd9e..90d9f6c78 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -40,7 +40,7 @@ fr: domain: Serveur reason: Motif rejecting_media: 'Les fichiers média de ces serveurs ne seront pas traités ou stockés et aucune miniature ne sera affichée, nécessitant un clic vers le fichier d’origine :' - rejecting_media_title: Média filtré + rejecting_media_title: Médias filtrés silenced: 'Les messages de ces serveurs seront cachés des flux publics et conversations, et les interactions de leurs utilisateur·rice·s ne donneront lieu à aucune notification, à moins que vous ne les suiviez :' silenced_title: Serveurs masqués suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant toute interaction ou communication avec les utilisateur·rice·s de ces serveurs impossible :' @@ -98,6 +98,7 @@ fr: add_email_domain_block: Mettre le domaine du courriel sur liste noire approve: Approuver approve_all: Tout approuver + approved_msg: La demande d’inscription de %{username} a été approuvée avec succès are_you_sure: Voulez-vous vraiment faire ça ? avatar: Avatar by_domain: Domaine @@ -111,8 +112,10 @@ fr: confirm: Confirmer confirmed: Confirmé confirming: Confirmation + delete: Supprimer les données deleted: Supprimé demote: Rétrograder + destroyed_msg: Les données de %{username} sont maintenant en file d’attente pour être supprimées imminemment disable: Désactiver disable_two_factor_authentication: Désactiver l’authentification à deux facteurs disabled: Désactivé @@ -123,6 +126,7 @@ fr: email_status: État du courriel enable: Activer enabled: Activé + enabled_msg: Le compte de %{username} a été débloqué avec succès followers: Abonné·e·s follows: Abonnements header: Entête @@ -138,6 +142,8 @@ fr: login_status: Statut de connexion media_attachments: Fichiers médias memorialize: Convertir en mémorial + memorialized: Mémorialisé + memorialized_msg: Transformation réussie de %{username} en un compte mémorial moderation: active: Actif·ve·s all: Tous @@ -158,10 +164,14 @@ fr: public: Publique push_subscription_expires: Expiration de l’abonnement PuSH redownload: Rafraîchir le profil + redownloaded_msg: Le profil de %{username} a été actualisé avec succès depuis l’origine reject: Rejeter reject_all: Tout rejeter + rejected_msg: La demande d’inscription de %{username} a été rejetée avec succès remove_avatar: Supprimer l’avatar remove_header: Supprimer l’entête + removed_avatar_msg: L’avatar de %{username} a été supprimé avec succès + removed_header_msg: L’image d’en-tête de %{username} a été supprimée avec succès resend_confirmation: already_confirmed: Cet·te utilisateur·rice est déjà confirmé·e send: Renvoyer un courriel de confirmation @@ -178,6 +188,8 @@ fr: search: Rechercher search_same_email_domain: Autres utilisateurs·trices avec le même domaine de courriel search_same_ip: Autres utilisateur·rice·s avec la même IP + sensitive: Sensible + sensitized: marqué comme sensible shared_inbox_url: URL de la boite de réception partagée show: created_reports: Signalements faits @@ -187,13 +199,19 @@ fr: statuses: Statuts subscribe: S’abonner suspended: Suspendu + suspension_irreversible: Les données de ce compte ont été irréversiblement supprimées. Vous pouvez annuler la suspension du compte pour le rendre utilisable, mais il ne récupérera aucune donnée qu’il avait auparavant. + suspension_reversible_hint_html: Le compte a été suspendu et les données seront complètement supprimées le %{date}. D’ici là, le compte peut être restauré sans aucun effet néfaste. Si vous souhaitez supprimer toutes les données du compte immédiatement, vous pouvez le faire ci-dessous. time_in_queue: En file d’attente %{time} title: Comptes unconfirmed_email: Courriel non confirmé + undo_sensitized: Annuler sensible undo_silenced: Ne plus masquer undo_suspension: Annuler la suspension + unsilenced_msg: Le compte de %{username} a été illimité avec succès unsubscribe: Se désabonner + unsuspended_msg: Le compte de %{username} a été désuspendu avec succès username: Nom d’utilisateur·ice + view_domain: Voir le résumé du domaine warn: Avertissement web: Web whitelisted: Sur liste blanche @@ -208,12 +226,14 @@ fr: create_domain_allow: Créer un domaine autorisé create_domain_block: Créer un blocage de domaine create_email_domain_block: Créer un blocage de domaine de courriel + create_ip_block: Créer une règle IP demote_user: Rétrograder l’utilisateur·ice destroy_announcement: Supprimer l’annonce destroy_custom_emoji: Supprimer des émojis personnalisés destroy_domain_allow: Supprimer le domaine autorisé destroy_domain_block: Supprimer le blocage de domaine destroy_email_domain_block: Supprimer le blocage de domaine de courriel + destroy_ip_block: Supprimer la règle IP destroy_status: Supprimer le statut disable_2fa_user: Désactiver l’A2F disable_custom_emoji: Désactiver les émojis personnalisés @@ -226,9 +246,11 @@ fr: reopen_report: Rouvrir le signalement reset_password_user: Réinitialiser le mot de passe resolve_report: Résoudre le signalement + sensitive_account: Marquer les médias de votre compte comme sensibles silence_account: Masque le compte suspend_account: Suspendre le compte unassigned_report: Ne plus assigner le signalement + unsensitive_account: Ne pas marquer les médias de votre compte comme sensibles unsilence_account: Ne plus masquer le compte unsuspend_account: Annuler la suspension du compte update_announcement: Modifier l’annonce @@ -244,12 +266,14 @@ fr: create_domain_allow: "%{name} a inscrit le domaine %{target} sur liste blanche" create_domain_block: "%{name} a bloqué le domaine %{target}" create_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste noire" + create_ip_block: "%{name} a créé une règle pour l’IP %{target}" demote_user: "%{name} a rétrogradé l’utilisateur·rice %{target}" destroy_announcement: "%{name} a supprimé l’annonce %{target}" destroy_custom_emoji: "%{name} a détruit l’émoticône %{target}" destroy_domain_allow: "%{name} a supprimé le domaine %{target} de la liste blanche" destroy_domain_block: "%{name} a débloqué le domaine %{target}" destroy_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste blanche" + destroy_ip_block: "%{name} a supprimé la règle pour l’IP %{target}" destroy_status: "%{name} a enlevé le statut de %{target}" disable_2fa_user: "%{name} a désactivé l’authentification à deux facteurs pour l’utilisateur·rice %{target}" disable_custom_emoji: "%{name} a désactivé l’émoji %{target}" @@ -262,9 +286,11 @@ fr: reopen_report: "%{name} a rouvert le signalement %{target}" reset_password_user: "%{name} a réinitialisé le mot de passe de %{target}" resolve_report: "%{name} a résolu le signalement %{target}" + sensitive_account: "%{name} a marqué le média de %{target} comme sensible" silence_account: "%{name} a masqué le compte de %{target}" suspend_account: "%{name} a suspendu le compte %{target}" unassigned_report: "%{name} a désassigné le signalement %{target}" + unsensitive_account: "%{name} a enlevé le marquage du média de %{target} comme sensible" unsilence_account: "%{name} ne masque plus le compte de %{target}" unsuspend_account: "%{name} a réactivé le compte de %{target}" update_announcement: "%{name} a actualisé l’annonce %{target}" @@ -434,6 +460,21 @@ fr: expired: Expiré title: Filtre title: Invitations + ip_blocks: + add_new: Créer une règle + created_msg: Nouvelle règle IP ajoutée avec succès + delete: Supprimer + expires_in: + '1209600': 2 semaines + '15778476': 6 mois + '2629746': 1 mois + '31556952': 1 an + '86400': 1 jour + '94670856': 3 ans + new: + title: Créer une nouvelle règle IP + no_ip_block_selected: Aucune règle IP n’a été modifiée car aucune n’a été sélectionnée + title: Règles IP pending_accounts: title: Comptes en attente (%{count}) relationships: @@ -599,7 +640,7 @@ fr: no_media: Aucun média no_status_selected: Aucun statut n’a été modifié car aucun n’a été sélectionné title: Statuts du compte - with_media: avec médias + with_media: Avec médias tags: accounts_today: Utilisations uniques aujourd'hui accounts_week: Utilisation unique cette semaine @@ -681,8 +722,11 @@ fr: prefix_sign_up: Inscrivez-vous aujourd’hui sur Mastodon ! suffix: Avec un compte, vous pourrez suivre des gens, publier des statuts et échanger des messages avec les utilisateur·rice·s de n'importe quel serveur Mastodon et bien plus ! didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ? + dont_have_your_security_key: Vous n'avez pas votre clé de sécurité? forgot_password: Mot de passe oublié ? invalid_reset_password_token: Le lien de réinitialisation du mot de passe est invalide ou a expiré. Merci de réessayer. + link_to_otp: Entrez un code à deux facteurs de votre téléphone ou un code de récupération + link_to_webauth: Utilisez votre appareil de clé de sécurité login: Se connecter logout: Se déconnecter migrate_account: Déménager vers un compte différent @@ -708,6 +752,7 @@ fr: pending: Votre demande est en attente d'examen par notre personnel. Cela peut prendre un certain temps. Vous recevrez un courriel si votre demande est approuvée. redirecting_to: Votre compte est inactif car il est actuellement redirigé vers %{acct}. trouble_logging_in: Vous avez un problème pour vous connecter ? + use_security_key: Utiliser la clé de sécurité authorize_follow: already_following: Vous suivez déjà ce compte already_requested: Vous avez déjà envoyé une demande d’abonnement à ce compte @@ -732,6 +777,7 @@ fr: date: formats: default: "%d %b %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count} h" @@ -992,6 +1038,14 @@ fr: quadrillion: P thousand: K trillion: T + otp_authentication: + code_hint: Entrez le code généré par votre application d'authentification pour confirmer + description_html: Si vous activez l’authentification à deux facteurs en utilisant une application d'authentification, votre connexion vous imposera d'être en possession de votre téléphone, ce qui génèrera des jetons que vous devrez saisir. + enable: Activer + instructions_html: "Scannez ce code QR dans Google Authenticator ou une application TOTP similiaire sur votre téléphone. À partir de maintenant, cette application générera des jetons que vous devrez entrer lorsque vous vous connecterez." + manual_instructions: 'Si vous ne pouvez pas scanner le QR code et que vous devez le saisir manuellement, voici le texte secret en brut :' + setup: Mise en place + wrong_code: Le code saisi est invalide. L'heure du serveur et l'heure de l'appareil sont-ils corrects ? pagination: newer: Plus récent next: Suivant @@ -1116,6 +1170,7 @@ fr: profile: Profil relationships: Abonnements et abonné·e·s two_factor_authentication: Identification à deux facteurs + webauthn_authentication: Clés de sécurité spam_check: spam_detected: Ceci est un rapport automatisé. Des pollupostages ont été détectés. statuses: @@ -1154,6 +1209,8 @@ fr: other: "%{count} votes" vote: Voter show_more: Déplier + show_newer: Afficher les plus récents + show_older: Afficher les plus ancien show_thread: Afficher le fil de discussion sign_in_to_participate: Inscrivez-vous pour prendre part à la conversation title: '%{name} : "%{quote}"' @@ -1262,21 +1319,20 @@ fr: default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Entrez le code généré par votre application pour confirmer - description_html: Si vous activez l’identification à deux facteurs, vous devrez être en possession de votre téléphone afin de générer un code de connexion. + add: Ajouter disable: Désactiver - enable: Activer + disabled_success: L'authentification à deux facteurs a été désactivée avec succès + edit: Modifier enabled: L’authentification à deux facteurs est activée enabled_success: Identification à deux facteurs activée avec succès generate_recovery_codes: Générer les codes de récupération - instructions_html: "Scannez ce QR code grâce à Google Authenticator, Authy ou une application similaire sur votre téléphone. Désormais, cette application génèrera des jetons que vous devrez saisir à chaque connexion." lost_recovery_codes: Les codes de récupération vous permettent de retrouver les accès à votre compte si vous perdez votre téléphone. Si vous perdez vos codes de récupération, vous pouvez les générer à nouveau ici. Vos anciens codes de récupération seront invalidés. - manual_instructions: 'Si vous ne pouvez pas scanner le code QR et devez l’entrer manuellement, voici le secret en texte-plein :' + methods: Méthodes à deux facteurs + otp: Application d'authentification recovery_codes: Codes de récupération recovery_codes_regenerated: Codes de récupération régénérés avec succès recovery_instructions_html: Si vous perdez l’accès à votre téléphone, vous pouvez utiliser un des codes de récupération ci-dessous pour retrouver l’accès à votre compte. Conservez les codes de récupération en sécurité. Par exemple, en les imprimant et en les stockant avec vos autres documents importants. - setup: Installer - wrong_code: Les codes entrés sont incorrects ! L’heure du serveur et celle de votre appareil sont-elles correctes ? + webauthn: Clés de sécurité user_mailer: backup_ready: explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. Elle est maintenant prête à être téléchargée ! @@ -1291,6 +1347,7 @@ fr: warning: explanation: disable: Lorsque votre compte est gelé, les données de votre compte demeurent intactes, mais vous ne pouvez effectuer aucune action jusqu’à ce qu’il soit débloqué. + sensitive: Vos fichiers médias téléversés et vos médias liés seront traités comme sensibles. silence: Lorsque votre compte est limité, seul·e·s les utilisateur·rice·s qui vous suivent déjà verront vos pouets sur ce serveur, et vous pourriez être exclu de plusieurs listes publiques. Néanmoins, d’autres utilisateur·rice·s peuvent vous suivre manuellement. suspend: Votre compte a été suspendu, et tous vos pouets et vos fichiers multimédia téléversés ont été supprimés irréversiblement de ce serveur, et des serveurs où vous aviez des abonné·e·s. get_in_touch: Vous pouvez répondre à cette adresse pour entrer en contact avec l’équipe de %{instance}. @@ -1299,11 +1356,13 @@ fr: subject: disable: Votre compte %{acct} a été gelé none: Avertissement pour %{acct} + sensitive: Les médias publiés depuis votre compte %{acct} ont été marqués comme étant sensibles silence: Votre compte %{acct} a été limité suspend: Votre compte %{acct} a été suspendu title: disable: Compte gelé none: Avertissement + sensitive: Votre média a été marqué comme sensible silence: Compte limité suspend: Compte suspendu welcome: @@ -1324,9 +1383,11 @@ fr: tips: Astuces title: Bienvenue à bord, %{name} ! users: + blocked_email_provider: Ce fournisseur de courriel n'est pas autorisé follow_limit_reached: Vous ne pouvez pas suivre plus de %{limit} personnes generic_access_help_html: Rencontrez-vous des difficultés d’accès à votre compte ? Vous pouvez contacter %{email} pour obtenir de l’aide invalid_email: L’adresse courriel est invalide + invalid_email_mx: L’adresse courriel n’existe pas invalid_otp_token: Le code d’authentification à deux facteurs est invalide invalid_sign_in_token: Code de sécurité non valide otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email} @@ -1336,3 +1397,20 @@ fr: verification: explanation_html: 'Vous pouvez vous vérifier en tant que propriétaire des liens dans les métadonnées de votre profil. Pour cela, le site web lié doit contenir un lien vers votre profil Mastodon. Le lien de retour doit avoir un attribut rel="me" . Le texte du lien n’a pas d’importance. Voici un exemple :' verification: Vérification + webauthn_credentials: + add: Ajouter une nouvelle clé de sécurité + create: + error: Il y a eu un problème en ajoutant votre clé de sécurité. Veuillez réessayer. + success: Votre clé de sécurité a été ajoutée avec succès. + delete: Supprimer + delete_confirmation: Êtes-vous sûr de vouloir supprimer cette clé de sécurité ? + description_html: Si vous activez l' authentification de la clé de sécurité, la connexion vous demandera d'utiliser l'une de vos clés de sécurité. + destroy: + error: Il y a eu un problème en supprimant votre clé de sécurité. Veuillez réessayer. + success: Votre clé de sécurité a été supprimée avec succès. + invalid_credential: Clé de sécurité invalide + nickname_hint: Entrez le surnom de votre nouvelle clé de sécurité + not_enabled: Vous n'avez pas encore activé WebAuthn + not_supported: Ce navigateur ne prend pas en charge les clés de sécurité + otp_required: Pour utiliser les clés de sécurité, veuillez d'abord activer l'authentification à deux facteurs. + registered_on: Inscrit le %{date} diff --git a/config/locales/gl.yml b/config/locales/gl.yml index c2fb18d57..d106e4409 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -21,7 +21,9 @@ gl: federation_hint_html: Cunha conta en %{instance} poderás seguir ás persoas en calquera servidor do Mastodon e alén. get_apps: Probar unha aplicación móbil hosted_on: Mastodon aloxado en %{domain} - instance_actor_flash: Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. + instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. + +' learn_more: Saber máis privacy_policy: Política de privacidade see_whats_happening: Ver o que está a acontecer @@ -96,6 +98,7 @@ gl: add_email_domain_block: Bloquear o dominio do email approve: Aprobar approve_all: Aprobar todos + approved_msg: Aprobada a solicitude da aplicación de conexión de %{username} are_you_sure: Está segura? avatar: Imaxe de perfil by_domain: Dominio @@ -109,8 +112,10 @@ gl: confirm: Confirmar confirmed: Confirmado confirming: Estase a confirmar + delete: Eliminar datos deleted: Eliminado demote: Rebaixar + destroyed_msg: Os datos de %{username} están na cola para ser eliminados axiña disable: Desactivar disable_two_factor_authentication: Desactivar 2FA disabled: Desactivado @@ -121,6 +126,7 @@ gl: email_status: Estado do email enable: Activar enabled: Activado + enabled_msg: Desbloqueada a conta de %{username} followers: Seguidoras follows: Seguindo header: Cabeceira @@ -136,6 +142,8 @@ gl: login_status: Estado da sesión media_attachments: Multimedia adxunta memorialize: Converter en lembranza + memorialized: Na lembranza + memorialized_msg: Convertiuse %{username} nunha conta para a lembranza moderation: active: Activa all: Todo @@ -156,10 +164,14 @@ gl: public: Público push_subscription_expires: A subscrición PuSH expira redownload: Actualizar perfil + redownloaded_msg: Actualizado o perfil de %{username} desde a orixe reject: Rexeitar reject_all: Rexeitar todo + rejected_msg: Rexeitada a solicitude da aplicación de conexión de %{username} remove_avatar: Eliminar imaxe de perfil remove_header: Eliminar cabeceira + removed_avatar_msg: Eliminado a imaxe de avatar de %{username} + removed_header_msg: Eliminada a imaxe de cabeceira de %{username} resend_confirmation: already_confirmed: Esta usuaria xa está confirmada send: Reenviar o email de confirmación @@ -176,22 +188,30 @@ gl: search: Procurar search_same_email_domain: Outras usuarias co mesmo dominio de email search_same_ip: Outras usuarias co mesmo IP + sensitive: Sensible + sensitized: marcado como sensible shared_inbox_url: URL da caixa de entrada compartida show: created_reports: Denuncias feitas targeted_reports: Denuncias feitas por outros - silence: Acalar - silenced: Acalada + silence: Silenciar + silenced: Silenciado statuses: Estados subscribe: Subscribirse suspended: Suspendida + suspension_irreversible: Elimináronse de xeito irreversible os datos desta conta. Podes reactivar a conta para facela usable novamente pero non recuperará os datos eliminados. + suspension_reversible_hint_html: Esta conta foi suspendida, e os datos serán totalmente eliminados o %{date}. Ata entón, a conta pode ser restaurada sen danos. Se desexas eliminar agora mesmo todos os datos da conta, podes facelo aquí embaixo. time_in_queue: Agardando na cola %{time} title: Contas unconfirmed_email: Email non confirmado + undo_sensitized: Desmarcar sensible undo_silenced: Desfacer acalar undo_suspension: Desfacer suspensión + unsilenced_msg: Retirado o límite da conta %{username} unsubscribe: Desbotar a subscrición + unsuspended_msg: Desbloqueada a conta de %{username} username: Nome de usuaria + view_domain: Ver resumo para o dominio warn: Aviso web: Web whitelisted: Listaxe branca @@ -206,12 +226,14 @@ gl: create_domain_allow: Crear permiso de dominio create_domain_block: Crear bloqueo de dominio create_email_domain_block: Crear bloqueo de dominio de correo electrónico + create_ip_block: Crear regra IP demote_user: Degradar usuaria destroy_announcement: Eliminar anuncio destroy_custom_emoji: Eliminar emoticona personalizada destroy_domain_allow: Eliminar permiso de dominio destroy_domain_block: Eliminar bloqueo de dominio destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico + destroy_ip_block: Eliminar regra IP destroy_status: Eliminar estado disable_2fa_user: Desactivar 2FA disable_custom_emoji: Desactivar emoticona personalizada @@ -224,9 +246,11 @@ gl: reopen_report: Reabrir denuncia reset_password_user: Restabelecer contrasinal resolve_report: Resolver denuncia + sensitive_account: Marca o multimedia da túa conta como sensible silence_account: Silenciar conta suspend_account: Suspender conta unassigned_report: Desasignar denuncia + unsensitive_account: Retira a marca de sensible do multimedia da conta unsilence_account: Deixar de silenciar conta unsuspend_account: Retirar suspensión de conta update_announcement: Actualizar anuncio @@ -242,12 +266,14 @@ gl: create_domain_allow: "%{name} engadiu á listaxe branca o dominio %{target}" create_domain_block: "%{name} bloqueou o dominio %{target}" create_email_domain_block: "%{name} engadiu á listaxe negra o dominio de email %{target}" + create_ip_block: "%{name} creou regra para IP %{target}" demote_user: "%{name} degradou a usuaria %{target}" destroy_announcement: "%{name} eliminou o anuncio %{target}" destroy_custom_emoji: "%{name} eliminou a emoticona %{target}" destroy_domain_allow: "%{name} eliminou o dominio %{target} da listaxe branca" destroy_domain_block: "%{name} desbloqueou o dominio %{target}" destroy_email_domain_block: "%{name} engadiu á lista branca o dominio de email %{target}" + destroy_ip_block: "%{name} eliminou regra para IP %{target}" destroy_status: "%{name} eliminou o estado de %{target}" disable_2fa_user: "%{name} desactivou o requirimento de dobre factor para a usuaria %{target}" disable_custom_emoji: "%{name} desactivou a emoticona %{target}" @@ -260,9 +286,11 @@ gl: reopen_report: "%{name} reabriu a denuncia %{target}" reset_password_user: "%{name} restableceu o contrasinal da usuaria %{target}" resolve_report: "%{name} resolveu a denuncia %{target}" + sensitive_account: "%{name} marcou o multimedia de %{target} como sensible" silence_account: "%{name} silenciou a conta de %{target}" suspend_account: "%{name} suspendeu a conta de %{target}" unassigned_report: "%{name} deixou de atribuír a denuncia %{target}" + unsensitive_account: "%{name} desmarcou o multimedia de %{target} como sensible" unsilence_account: "%{name} deixou de silenciar a conta de %{target}" unsuspend_account: "%{name} desactivou a suspensión da conta de %{target}" update_announcement: "%{name} actualizou o anuncio %{target}" @@ -432,6 +460,21 @@ gl: expired: Expirado title: Filtro title: Convites + ip_blocks: + add_new: Crear regra + created_msg: Engadeuse a nova regra IP + delete: Eliminar + expires_in: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 ano + '86400': 1 día + '94670856': 3 anos + new: + title: Crear nova regra IP + no_ip_block_selected: Non se cambiou ningunha regra iP porque non seleccionaches ningunha + title: Regras IP pending_accounts: title: Contas pendentes (%{count}) relationships: @@ -679,8 +722,11 @@ gl: prefix_sign_up: Rexístrate agora en Mastodon! suffix: Ao abrir unha conta, poderás seguir a xente, actualizacións das publicacións e intercambiar mensaxes coas usuarias de calquera servidor de Mastodon e moito máis! didnt_get_confirmation: Non recibeu as instruccións de confirmación? + dont_have_your_security_key: "¿Non tes a túa chave de seguridade?" forgot_password: Esqueceu o contrasinal? invalid_reset_password_token: O testemuño para restablecer o contrasinal non é válido ou caducou. Por favor solicite un novo. + link_to_otp: Escribe o código do segundo factor do móbil ou un código de recuperación + link_to_webauth: Usa o teu dispositivo de chave de seguridade login: Conectar logout: Desconectar migrate_account: Mover a unha conta diferente @@ -706,6 +752,7 @@ gl: pending: A túa aplicación está pendente de revisión. Poderíanos levar algún tempo. Recibirás un correo se a aplicación está aprobada. redirecting_to: A túa conta está inactiva porque está redirixida a %{acct}. trouble_logging_in: Problemas para conectar? + use_security_key: Usa chave de seguridade authorize_follow: already_following: Xa está a seguir esta conta already_requested: Xa tes enviada unha solicitude de seguimento a esa conta @@ -730,6 +777,7 @@ gl: date: formats: default: "%d %b, %Y" + with_month_name: "%d %B, %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -990,6 +1038,14 @@ gl: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: Escribe o código creado pola app de autenticación para confirmar + description_html: Se activas a autenticación con dous factores utilizando unha app de autenticación, ó conectarte pedirémosche que teñas o móbil á man, para crear o código que precisas para conectarte. + enable: Activar + instructions_html: "Escanea este código QR na túa app TOTP no móbil ou Google Authenticator. A partir de agora, a app creará códigos que terás que escribir cando te conectes." + manual_instructions: 'Se non podes escanear o código QR e tes que escribilo á man, aquí tes o código en texto plano:' + setup: Configurar + wrong_code: O código escrito non é válido! ¿é correcta a hora no dispositivo e no servidor? pagination: newer: Máis novo next: Seguinte @@ -1114,6 +1170,7 @@ gl: profile: Perfil relationships: Seguindo e seguidoras two_factor_authentication: Validar Dobre Factor + webauthn_authentication: Chaves de seguridade spam_check: spam_detected: Esto é un informe automatizado. Detectouse Spam. statuses: @@ -1152,6 +1209,8 @@ gl: other: "%{count} votos" vote: Votar show_more: Mostrar máis + show_newer: Mostrar o máis novo + show_older: Mostrar o máis vello show_thread: Amosar fío sign_in_to_participate: Conéctese para participar na conversa title: '%{name}: "%{quote}"' @@ -1260,21 +1319,20 @@ gl: default: "%d %b, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Introducir o código xerado polo seu aplicativo de autenticación para confirmar - description_html: Se activa a autenticación de dobre factor, a conexión pediralle estar en posesión do seu teléfono, que creará testemuños para poder entrar. + add: Engadir disable: Deshabilitar - enable: Habilitar + disabled_success: Autenticación con doble factor desactivada + edit: Editar enabled: A autenticación de dobre-factor está activada enabled_success: Activouse con éxito a autenticación de dobre-factor generate_recovery_codes: Xerar códigos de recuperación - instructions_html: "Escanea este código QR en Google Authenticator ou aplicación TOTP no teu teléfono. Desde agora, esta aplicación proporcionará testemuños que debes introducir ao conectarte." lost_recovery_codes: Os códigos de recuperación permítenlle recuperar o acceso a súa conta si perde o teléfono. Si perde os códigos de recuperación, pode restauralos aquí. Os seus códigos de recuperación anteriores serán invalidados. - manual_instructions: 'Si non pode escanear o código QR e precisa introducilo manualmente, aquí está o testemuño secreto en texto plano:' + methods: Métodos para o segundo factor + otp: App autenticadora recovery_codes: Códigos de recuperación do respaldo recovery_codes_regenerated: Códigos de recuperación xerados correctamente recovery_instructions_html: Si perdese o acceso ao seu teléfono, pode utilizar un dos códigos inferiores de recuperación para recuperar o acceso a súa conta. Garde os códigos en lugar seguro. Por exemplo, pode imprimilos e gardalos xunto con outros documentos importantes. - setup: Configurar - wrong_code: O código introducido non é válido! Son correctas as horas no dispositivo e o servidor? + webauthn: Chaves de seguridade user_mailer: backup_ready: explanation: Solicitou un respaldo completo da súa conta de Mastodon. Xa está listo para descargar! @@ -1289,6 +1347,7 @@ gl: warning: explanation: disable: Cando a súa conta está conxelada, os datos permanecen intactos, pero non pode levar a fin accións ate que se desbloquea. + sensitive: Os teus ficheiros e ligazóns a multimedia serán tratados como sensibles. silence: Mentras a conta está limitada, só a xente que actualmente te segue verá os teus toots en este servidor, e poderías estar excluída de varias listaxes públicas. Porén, outras persoas poderíante seguir de xeito manual. suspend: A súa conta foi suspendida, e todos os seus toots e medios subidos foron eliminados de este servidor de xeito irreversible, e dos servidores onde tivese seguidoras. get_in_touch: Pode responder a este correo para contactar coa administración de %{instance}. @@ -1297,11 +1356,13 @@ gl: subject: disable: A súa conta %{acct} foi conxelada none: Aviso para %{acct} + sensitive: Ó publicar multimedia a túa conta %{acct} foi marcada como sensible silence: A súa conta %{acct} foi limitada suspend: A súa conta %{acct} foi suspendida title: disable: Conta conxelada none: Aviso + sensitive: O teu multimedia foi marcado como sensible silence: Conta limitada suspend: Conta suspendida welcome: @@ -1322,9 +1383,11 @@ gl: tips: Consellos title: Benvida, %{name}! users: + blocked_email_provider: Este provedor de email non está permitido follow_limit_reached: Non pode seguir a máis de %{limit} persoas generic_access_help_html: Problemas para acceder a conta? Podes contactar con %{email} para obter axuda invalid_email: O enderezo de correo non é válido + invalid_email_mx: Semella que o enderezo de email non existe invalid_otp_token: O código do segundo factor non é válido invalid_sign_in_token: Código de seguridade non válido otp_lost_help_html: Si perde o acceso a ambos, pode contactar con %{email} @@ -1334,3 +1397,20 @@ gl: verification: explanation_html: 'Podes validarte a ti mesma como a dona das ligazóns nos metadatos do teu perfil. Para esto, o sitio web ligado debe conter unha ligazón de retorno ao perfil de Mastodon. Esta ligazón de retorno ten que ter un atributo rel="me". O texto da ligazón non importa. Aquí tes un exemplo:' verification: Validación + webauthn_credentials: + add: Engadir nova chave de seguridade + create: + error: Houbo un problema ó engadir a chave de seguridade, inténtao outra vez. + success: Engadeuse correctamente a chave de seguridade. + delete: Eliminar + delete_confirmation: "¿Tes a certeza de que queres eliminar a chave de seguridade?" + description_html: Se activas a autenticación con chave de seguridade, ó conectarte pediráseche que uses unha das túas chaves. + destroy: + error: Houbo un problema ó eliminar a túa chave de seguridade, inténtao outra vez. + success: Eliminouse correctamente a chave de seguridade. + invalid_credential: Chave de seguridade non válida + nickname_hint: Escribe un alcume para a túa nova chave de seguridade + not_enabled: Aínda non tes activado WebAuthn + not_supported: Este navegador non ten soporte para chaves de seguridade + otp_required: Para usar chaves de seguridade tes que activar primeiro o segundo factor. + registered_on: Rexistrado o %{date} diff --git a/config/locales/he.yml b/config/locales/he.yml index 2bdc816f3..7fa884cb3 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -229,14 +229,6 @@ he: following: רשימת נעקבים muting: רשימת השתקות upload: יבוא - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day media_attachments: validations: images_and_video: לא ניתן להוסיף וידאו לחצרוץ שכבר מכיל תמונות @@ -294,19 +286,12 @@ he: formats: default: "%d %b %Y, %H:%M" two_factor_authentication: - code_hint: לאישור, יש להקליד את הקוד שיוצר על ידי ישום האימות - description_html: לאחר הפעלת אימות דו-שלבי, ניתן יהיה להכנס רק כל עוד ברשותך טלפון, שייצר עבורך קודים שיאפשרו כניסה. disable: כיבוי - enable: הפעלה enabled_success: אימות דו-שלבי הופעל בהצלחה generate_recovery_codes: ייצור קודי אחזור - instructions_html: "יש לסרוק קוד QR זה בעזרת Google Authenticator או ישום TOTP דומה על טלפונך. מעתה ואילך, ישום זה יוכל ליצר קודים לשימוש לצורך כניסה." lost_recovery_codes: קודי האחזור מאפשרים אחזור גישה לחשבון במידה ומכשירך אבד. במידה וקודי האחזור אבדו, ניתן לייצרם מחדש כאן. תוקף קודי האחזור הישנים יפוג. - manual_instructions: 'במידה ולא ניתן לסרוק את קוד ה-QR אלא יש צורך להקליד אותו ידנית, להלן סוד כמוס בלתי מוצפן:' recovery_codes_regenerated: קודי האחזור יוצרו בהצלחה recovery_instructions_html: במידה והגישה למכשירך תאבד, ניתן לייצר קודי אחזור למטה על מנת לאחזר גישה לחשבונך בכל עת. נא לשמור על קודי הגישה במקום בטוח. לדוגמא על ידי הדפסתם ושמירתם עם מסמכים חשובים אחרים, או שימוש בתוכנה ייעודית לניהול סיסמאות וסודות. - setup: הכנה - wrong_code: הקוד שהוזן שגוי! האם הזמן בשרת והזמן במכשירך נכונים? users: invalid_email: כתובת הדוא"ל אינה חוקית invalid_otp_token: קוד דו-שלבי שגוי diff --git a/config/locales/hi.yml b/config/locales/hi.yml index fc4805625..d0b1082fc 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -22,11 +22,3 @@ hi: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/hr.yml b/config/locales/hr.yml index d7bd91c7a..f8a659ac2 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -1,48 +1,124 @@ --- hr: about: - about_mastodon_html: Mastodon je besplatna, open-source socijalna mreža. Decentralizirana alternativa komercijalnim platformama, izbjegava rizik toga da jedna tvrtka monopolizira vašu komunikaciju. Izaberite server kojem ćete vjerovati — koji god odabrali, moći ćete komunicirati sa svima ostalima. Bilo tko može imati svoju vlastitu Mastodon instancu i sudjelovati u socijalnoj mreži bez problema. - about_this: O ovoj instanci + about_hashtag_html: Ovo su javni tootovi označeni s #%{hashtag}. Možete biti u interakciji s njima, ako imate račun bilo gdje u fediverzumu. + about_mastodon_html: 'Društvena mreža budućnosti: bez oglasa, bez korporativnog nadzora, etički dizajn i decentralizacija! Budite u vlasništvu svojih podataka pomoću Mastodona!' + about_this: Dodatne informacije + active_count_after: aktivnih + active_footnote: Mjesečno aktivnih korisnika (MAU) + api: API + apps: Mobilne aplikacije + apps_platforms: Koristite Mastodon na iOS-u, Androidu i drugim platformama contact: Kontakt - source_code: Izvorni kod - status_count_before: Tko je autor + contact_missing: Nije postavljeno + discover_users: Otkrijte korisnike + documentation: Dokumentacija + get_apps: Isprobajte mobilnu aplikaciju + learn_more: Saznajte više + privacy_policy: Politika privatnosti + server_stats: 'Statistika poslužitelja:' + source_code: Izvorni kôd + status_count_before: Koji su objavili + terms: Uvjeti pružanja usluga + unavailable_content: Moderirani poslužitelji accounts: - follow: Slijedi - following: Slijedim + follow: Prati + following: Praćenih + last_active: posljednja aktivnost + media: Medijski sadržaj + never_active: Nikad nothing_here: Ovdje nema ničeg! - people_followed_by: Ljudi koje %{name} slijedi - people_who_follow: Ljudi koji slijede %{name} - unfollow: Prestani slijediti + people_followed_by: Ljudi koje %{name} prati + people_who_follow: Ljudi koji prate %{name} + posts: + few: Toota + one: Toot + other: Tootova + posts_tab_heading: Tootovi + posts_with_replies: Tootovi i odgovori + reserved_username: Korisničko ime je rezervirano + roles: + admin: Admin + bot: Bot + group: Grupa + moderator: Mod + unavailable: Profil nije dostupan + unfollow: Prestani pratiti + admin: + account_actions: + action: Izvrši radnju + account_moderation_notes: + create: Ostavi bilješku + accounts: + approve: Odobri + approve_all: Odobri sve + are_you_sure: Jeste li sigurni? + avatar: Avatar + by_domain: Domena + change_email: + changed_msg: E-pošta računa uspješno je promijenjena! + current_email: Trenutna e-pošta + label: Promijeni e-poštu + new_email: Nova e-pošta + submit: Promijeni e-poštu + title: Promjena e-pošte za %{username} + confirm: Potvrdi + confirmed: Potvrđeno + confirming: Potvrđivanje + delete: Izbriši podatke + deleted: Izbrisano + display_name: Prikazano ime + domain: Domena + edit: Uredi + email: E-pošta + email_status: Status e-pošte + enabled: Omogućeno + followers: Pratitelji + follows: Praćeni + header: Zaglavlje + ip: IP + location: + all: Sve + local: Lokalno + remote: Udaljeno + title: Lokacija + moderation: + all: Sve + action_logs: + deleted_status: "(izbrisani status)" + empty: Nema pronađenih izvješća. + filter_by_action: Filtriraj prema radnji + filter_by_user: Filtriraj prema korisniku application_mailer: - settings: 'Promijeni e-mail postavke: %{link}' + settings: 'Promijeni postavke e-pošte: %{link}' view: 'Vidi:' applications: - invalid_url: Uneseni link nije valjan + invalid_url: Unesena poveznica nije valjana auth: - didnt_get_confirmation: Niste primili instrukcije za potvrđivanje? + didnt_get_confirmation: Niste primili upute za potvrđivanje? forgot_password: Zaboravljena lozinka? login: Prijavi se logout: Odjavi se register: Registriraj se - resend_confirmation: Ponovo pošalji instrukcije za potvrđivanje - reset_password: Resetiraj lozinku - security: Vjerodajnica + resend_confirmation: Ponovo pošalji upute za potvrđivanje + reset_password: Ponovno postavi lozinku + security: Sigurnost set_new_password: Postavi novu lozinku authorize_follow: - error: Nažalost, došlo je do greške looking up the remote račun - follow: Slijedi - title: Slijedi %{acct} + error: Nažalost, došlo je do greške tijekom traženja udaljenog računa + follow: Prati + title: Prati %{acct} datetime: distance_in_words: - about_x_hours: "%{count}s" + about_x_hours: "%{count}h" about_x_months: "%{count}mj" - about_x_years: "%{count}g" - almost_x_years: "%{count}g" - half_a_minute: upravo - less_than_x_seconds: upravo - over_x_years: "%{count}g" + about_x_years: "%{count}god" + almost_x_years: "%{count}god" + half_a_minute: Upravo sada + less_than_x_seconds: Upravo sada + over_x_years: "%{count}god" x_months: "%{count}mj" - x_seconds: "%{count}sek" + x_seconds: "%{count}s" errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -54,77 +130,178 @@ hr: '500': '503': The page could not be served due to a temporary server failure. exports: - blocks: Blokirao si - storage: Pohrana media zapisa + archive_takeout: + date: Datum + download: Preuzmite svoju arhivu + size: Veličina + blocks: Blokirali ste + csv: CSV + lists: Liste + storage: Pohrana medijskih sadržaja + filters: + contexts: + notifications: Obavijesti + index: + empty: Nemate filtera. + title: Filteri + new: + title: Dodaj novi filter + footer: + developers: Razvijatelji + more: Više… + resources: Resursi + trending_now: Popularno generic: + all: Sve changes_saved_msg: Izmjene su uspješno sačuvane! + copy: Kopiraj + delete: Obriši save_changes: Sačuvaj izmjene + identity_proofs: + authorize: Da, autoriziraj + identity: Identitet imports: - preface: Možeš uvesti određene podatke kao što su svi ljudi koje slijediš ili blokiraš u svoj račun na ovoj instanci, sa fajlova kreiranih izvozom sa druge instance. - success: Tvoji podaci su uspješno uploadani i bit će obrađeni u dogledno vrijeme + preface: Možete uvesti podatke koje ste izveli s drugog poslužitelja, kao što su liste ljudi koje pratite ili blokirate. + success: Vaši podatci uspješno su preneseni i bit će obrađeni u dogledno vrijeme types: blocking: Lista blokiranih - following: Lista onih koje slijedim + following: Lista praćenih muting: Lista utišanih invites: + expired: Isteklo expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + '1800': 30 minuta + '21600': 6 sati + '3600': 1 sat + '43200': 12 sati + '604800': 1 tjedan + '86400': 1 dan + expires_in_prompt: Nikad + generate: Generiraj poveznicu za pozivanje + invited_by: 'Poziva Vas:' + max_uses: + few: "%{count} korištenja" + one: 1 korištenje + other: "%{count} korištenja" notification_mailer: digest: - body: Ovo je kratak sažetak propuštenog od tvog prošlog posjeta %{since} - mention: "%{name} te je spomenuo:" + body: Ovo je kratak sažetak propuštenih poruka od Vašeg prošlog posjeta %{since} + mention: "%{name} Vas je spomenuo/la:" favourite: - body: 'Tvoj status je %{name} označio kao omiljen:' - subject: "%{name} je označio kao omiljen tvoj status" + body: "%{name} je označio/la Vaš status favoritom:" + subject: "%{name} je označio/la Vaš status favoritom" follow: - body: "%{name} te sada slijedi!" - subject: "%{name} te sada slijedi" + body: "%{name} Vas sada prati!" + subject: "%{name} Vas sada prati" follow_request: - body: "%{name} je zatražio da te slijedi" - subject: 'Sljedbenik na čekanju: %{name}' + body: "%{name} je zatražio/la da Vas prati" + subject: 'Pratitelj na čekanju: %{name}' mention: - body: 'Spomenuo te je %{name} u:' - subject: Spomenuo te je %{name} + body: 'Spomenuo/la Vas je %{name} u:' + subject: Spomenuo/la Vas je %{name} reblog: - body: 'Tvoj status je potaknut od %{name}:' - subject: "%{name} je potakao tvoj status" + body: 'Vaš status boostao/la je %{name}:' + subject: "%{name} boostao/la je Vaš status" + number: + human: + decimal_units: + units: + billion: mrd + million: mil + thousand: tis + trillion: bil + otp_authentication: + setup: Postavi pagination: - next: Sljedeći - prev: Prošli + newer: Novije + next: Sljedeće + older: Starije + prev: Prethodno + truncate: "…" + polls: + errors: + already_voted: Već ste glasali u ovoj anketi remote_follow: - acct: Unesi svoje username@domain sa koje želiš slijediti - missing_resource: Traženi redirect link za tvoj račun nije mogao biti nađen - proceed: Nastavi slijediti - prompt: 'Slijediti ćeš:' + acct: Unesite Vaše KorisničkoIme@domena s kojim želite izvršiti radnju + missing_resource: Nije moguće pronaći traženi URL preusmjeravanja za Vaš račun + proceed: Dalje + prompt: 'Pratit ćete:' + sessions: + platforms: + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS + other: nepoznata platforma + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Opozovi + revoke_success: Sesija je uspješno opozvana + title: Sesije settings: + account: Račun + account_settings: Postavke računa + aliases: Pseudonimi računa + appearance: Izgled authorized_apps: Autorizirane aplikacije back: Natrag na Mastodon + delete: Brisanje računa + development: Razvijanje edit_profile: Uredi profil export: Izvoz podataka + featured_tags: Istaknuti hashtagovi import: Uvezi + notifications: Obavijesti preferences: Postavke - two_factor_authentication: Dvo-faktorska Autentifikacija + profile: Profil + two_factor_authentication: Dvofaktorska autentifikacija statuses: open_in_web: Otvori na webu - over_character_limit: prijeđen je limit od %{max} znakova + over_character_limit: prijeđeno je ograničenje od %{max} znakova + poll: + total_people: + few: "%{count} osobe" + one: "%{count} osoba" + other: "%{count} ljudi" + total_votes: + few: "%{count} glasa" + one: "%{count} glas" + other: "%{count} glasova" + vote: Glasaj show_more: Prikaži više + show_thread: Prikaži nit visibilities: - private: Pokaži samo sljedbenicima + private: Samo pratitelji public: Javno - unlisted: Javno, no nemoj prikazati na javnom timelineu + unlisted: Neprikazano stream_entries: - reblogged: potaknut + reblogged: boostano sensitive_content: Osjetljivi sadržaj two_factor_authentication: - description_html: Ako omogućiš dvo-faktorsku autentifikaciju, prijavljivanje će zahtjevati da kod sebe imaš svoj mobitel, koji će generirati tokene koje ćeš unijeti. - disable: Onemogući - enable: Omogući - instructions_html: "Skeniraj ovaj QR kod u Google Authenticator ili sličnu aplikaciju na svom telefonu. Od sada, ta aplikacija će generirati tokene koje ćeš unijeti pri prijavljivanju." + disable: Onemogući 2FA + user_mailer: + warning: + title: + disable: Račun je zamrznut + none: Upozorenje + silence: Račun je ograničen + suspend: Račun je suspendiran + welcome: + edit_profile_action: Postavi profil + review_preferences_action: Promijeni postavke + subject: Dobro došli na Mastodon + tips: Savjeti users: - invalid_email: E-mail adresa nije valjana - invalid_otp_token: Nevaljani dvo-faktorski kod + invalid_email: Adresa e-pošte nije valjana + invalid_otp_token: Nevažeći dvo-faktorski kôd + invalid_sign_in_token: Nevažeći sigurnosni kôd + signed_in_as: 'Prijavljeni kao:' + verification: + verification: Verifikacija + webauthn_credentials: + add: Dodaj novi sigurnosni ključ + delete: Obriši diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 9ae551a34..fb17b24bc 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -21,7 +21,9 @@ hu: federation_hint_html: Egy %{instance} fiókkal bármely más Mastodon szerveren vagy a föderációban lévő felhasználót követni tudsz. get_apps: Próbálj ki egy mobil appot hosted_on: "%{domain} Mastodon szerver" - instance_actor_flash: Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. + instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. + +' learn_more: Tudj meg többet privacy_policy: Adatvédelmi szabályzat see_whats_happening: Nézd, mi történik @@ -51,7 +53,7 @@ hu: what_is_mastodon: Mi a Mastodon? accounts: choices_html: "%{name} választásai:" - endorsements_hint: A webes felületen jóváhagyhatod a követett embereket, és itt jelennek meg. + endorsements_hint: A webes felületen promózhatsz általad követett embereket, akik itt fognak megjelenni. featured_tags_hint: Szerepeltethetsz bizonyos hashtageket, melyek itt jelennek majd meg. follow: Követés followers: @@ -96,6 +98,7 @@ hu: add_email_domain_block: Email domain tiltólistára vétele approve: Jóváhagyás approve_all: Mindet jóváhagy + approved_msg: A %{username} fiók regisztrációs kérelmét sikeresen elfogadtuk are_you_sure: Biztos vagy benne? avatar: Profilkép by_domain: Domain @@ -109,8 +112,10 @@ hu: confirm: Megerősítés confirmed: Megerősítve confirming: Megerősítés alatt + delete: Adatok törlése deleted: Törölve demote: Lefokozás + destroyed_msg: A %{username} fiók adatai bekerültek a végleges törlése váró sorba disable: Kikapcsolás disable_two_factor_authentication: Kétlépcsős hitelesítés kikapcsolása disabled: Kikapcsolva @@ -121,6 +126,7 @@ hu: email_status: E-mail állapot enable: Bekapcsolás enabled: Bekapcsolva + enabled_msg: A %{username} fiók fagyasztását sikeresen visszavontuk followers: Követő follows: Követett header: Fejléc @@ -136,6 +142,8 @@ hu: login_status: Bejelentkezési állapot media_attachments: Média-csatolmányok memorialize: Emlékállítás + memorialized: Emlékezetünkben + memorialized_msg: A %{username} fiókot sikeresen emlékké nyilvánítottuk moderation: active: Aktív all: Összes @@ -156,10 +164,14 @@ hu: public: Nyilvános push_subscription_expires: A PuSH feliratkozás elévül redownload: Profilkép frissítése + redownloaded_msg: "%{username} profilját sikeresen frissítettük az eredetiből" reject: Elutasítás reject_all: Összes elutasítása + rejected_msg: A %{username} fiók regisztrációs kérelmét sikeresen elutasítottuk remove_avatar: Profilkép eltávolítása remove_header: Fejléc törlése + removed_avatar_msg: A %{username} fiók avatárját sikeresen töröltük + removed_header_msg: A %{username} fiók fejlécét sikeresen töröltük resend_confirmation: already_confirmed: Ezt a felhasználót már megerősítették send: Küldd újra a megerősítő e-mailt @@ -176,6 +188,8 @@ hu: search: Keresés search_same_email_domain: Felhasználók ugyanezzel az email domainnel search_same_ip: Más felhasználók ugyanezzel az IP-vel + sensitive: Szenzitív + sensitized: szenzitívnek jelölve shared_inbox_url: Megosztott bejövő üzenetek URL show: created_reports: Létrehozott jelentések @@ -185,13 +199,19 @@ hu: statuses: Tülkök subscribe: Feliratkozás suspended: Felfüggesztett + suspension_irreversible: Ennek a fióknak az adatait visszaállíthatatlanul törölték. Visszavonhatod a fiók felfüggesztését, hogy újra használható legyen, de a régi adatok ettől még nem fognak visszatérni. + suspension_reversible_hint_html: A fiókot felfüggesztettük, az adatait %{date}-n teljesen eltávolítjuk. Eddig az időpontig a fiók probléma nélkül visszaállítható. Ha mégis azonnal törölni szeretnéd a fiókot, alább megteheted. time_in_queue: Várakozás a sorban %{time} title: Fiókok unconfirmed_email: Nem megerősített e-mail + undo_sensitized: Szenzitív jelölés levétele undo_silenced: Némítás visszavonása undo_suspension: Felfüggesztés visszavonása + unsilenced_msg: A %{username} fiók korlátozásait sikeresen levettük unsubscribe: Leiratkozás + unsuspended_msg: A %{username} fiók felfüggesztését sikeresen visszavontuk username: Felhasználónév + view_domain: Domain összefoglalójának megtekintése warn: Figyelmeztetés web: Web whitelisted: Engedélyező-listán @@ -206,12 +226,14 @@ hu: create_domain_allow: Domain engedélyezés létrehozása create_domain_block: Domain blokkolás létrehozása create_email_domain_block: E-mail domain blokkolás létrehozása + create_ip_block: IP szabály létrehozása demote_user: Felhasználó lefokozása destroy_announcement: Közlemény törlése destroy_custom_emoji: Egyéni emodzsi törlése destroy_domain_allow: Domain engedélyezés törlése destroy_domain_block: Domain blokkolás törlése destroy_email_domain_block: E-mail domain blokkolás törlése + destroy_ip_block: IP szabály törlése destroy_status: Állapot törlése disable_2fa_user: Kétlépcsős hitelesítés letiltása disable_custom_emoji: Egyéni emodzsi letiltása @@ -224,9 +246,11 @@ hu: reopen_report: Jelentés újranyitása reset_password_user: Jelszó visszaállítása resolve_report: Jelentés megoldása + sensitive_account: A fiókodban minden média szenzitívnek jelölése silence_account: Fiók némítása suspend_account: Fiók felfüggesztése unassigned_report: Jelentés hozzárendelésének megszüntetése + unsensitive_account: A fiókodban minden média szenzitív állapotának törlése unsilence_account: Fiók némításának feloldása unsuspend_account: Fiók felfüggesztésének feloldása update_announcement: Közlemény frissítése @@ -242,12 +266,14 @@ hu: create_domain_allow: "%{name} engedélyező listára vette %{target} domaint" create_domain_block: "%{name} letiltotta az alábbi domaint: %{target}" create_email_domain_block: "%{name} feketelistára tette az alábbi e-mail domaint: %{target}" + create_ip_block: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban" demote_user: "%{name} lefokozta az alábbi felhasználót: %{target}" destroy_announcement: "%{name} törölte a közleményt %{target}" destroy_custom_emoji: "%{name} törölte az emodzsit: %{target}" destroy_domain_allow: "%{name} leszedte %{target} domaint az engedélyező listáról" destroy_domain_block: "%{name} engedélyezte az alábbi domaint: %{target}" destroy_email_domain_block: "%{name} fehérlistára tette az alábbi e-mail domaint: %{target}" + destroy_ip_block: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban" destroy_status: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}" disable_2fa_user: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján" disable_custom_emoji: "%{name} letiltotta az alábbi emodzsit: %{target}" @@ -260,9 +286,11 @@ hu: reopen_report: "%{name} újranyitotta a bejelentést: %{target}" reset_password_user: "%{name} visszaállította az alábbi felhasználó jelszavát: %{target}" resolve_report: "%{name} megoldotta alábbi bejelentést: %{target}" + sensitive_account: "%{name} szenzitívnek jelölte %{target} médiatartalmát" silence_account: "%{name} lenémította %{target} felhasználói fiókját" suspend_account: "%{name} felfüggesztette %{target} felhasználói fiókját" unassigned_report: "%{name} törölte a %{target} bejelentés hozzárendelését" + unsensitive_account: "%{name} levette a szenzitív jelölést %{target} médiatartalmáról" unsilence_account: "%{name} feloldotta a némítást %{target} felhasználói fiókján" unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését" update_announcement: "%{name} frissítette a közleményt %{target}" @@ -432,6 +460,21 @@ hu: expired: Elévült title: Szűrő title: Meghívások + ip_blocks: + add_new: Szabály létrehozása + created_msg: Az új IP szabályt sikeresen felvettük + delete: Törlés + expires_in: + '1209600': 2 hét + '15778476': 6 hónap + '2629746': 1 hónap + '31556952': 1 év + '86400': 1 nap + '94670856': 3 év + new: + title: Új IP szabály létrehozása + no_ip_block_selected: Nem változtattunk egy IP szabályon sem, mivel egy sem volt kiválasztva + title: IP szabály pending_accounts: title: Függőben lévő fiókok (%{count}) relationships: @@ -679,8 +722,11 @@ hu: prefix_sign_up: Regisztrláj még ma a Mastodonra! suffix: Egy fiókkal követhetsz másokat, tülkölhetsz, eszmét cserélhetsz más Mastodon szerverek felhasználóival! didnt_get_confirmation: Nem kaptad meg a megerősítési lépéseket? + dont_have_your_security_key: Nincs biztonsági kulcsod? forgot_password: Elfelejtetted a jelszavad? invalid_reset_password_token: A jelszó-visszaállítási kulcs nem megfelelő vagy lejárt. Kérlek generálj egy újat. + link_to_otp: Írj be egy kétlépcsős azonosító kódot a telefonodról vagy egy visszaállító kódot + link_to_webauth: Használd a biztonsági kulcs eszközödet login: Bejelentkezés logout: Kijelentkezés migrate_account: Felhasználói fiók költöztetése @@ -706,6 +752,7 @@ hu: pending: A jelentkezésed engedélyezésre vár. Ez eltarthat egy ideig. Kapsz egy e-mailt, ha az elbírálás megtörtént. redirecting_to: A fiókod inaktív, mert jelenleg ide %{acct} van átirányítva. trouble_logging_in: Problémád van a bejelentkezéssel? + use_security_key: Biztonsági kulcs használata authorize_follow: already_following: Már követed ezt a felhasználót already_requested: Már küldtél követési kérelmet ennek a fióknak @@ -730,6 +777,7 @@ hu: date: formats: default: "%Y.%b.%d." + with_month_name: "%Y. %B %d" datetime: distance_in_words: about_x_hours: "%{count}ó" @@ -990,6 +1038,14 @@ hu: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: Jóváhagyáshoz írd be a hitelesítő alkalmazás által generált kódot + description_html: Ha engedélyezed a kétlépcsős azonosítást, a bejelentkezéshez szükséged lesz a telefonodra és egy alkalmazásra, amely hozzáférési kódot generál számodra. + enable: Engedélyezés + instructions_html: "Olvasd be ezt a QR-kódot a telefonodon futó Google Authenticator vagy egyéb TOTP alkalmazással. A jövőben ez az alkalmazás fog számodra hozzáférési kódot generálni a belépéshez." + manual_instructions: 'Ha nem sikerült a QR-kód beolvasása, itt a szöveges kulcs, amelyet manuálisan kell begépelned:' + setup: Beállítás + wrong_code: A beírt kód nem érvényes! A szerver órája és az eszközöd órája szinkronban jár? pagination: newer: Újabb next: Következő @@ -1114,6 +1170,7 @@ hu: profile: Profil relationships: Követések és követők two_factor_authentication: Kétlépcsős azonosítás + webauthn_authentication: Biztonsági kulcsok spam_check: spam_detected: Ez egy automatikus jelentés. Spamet érzékeltünk. statuses: @@ -1152,6 +1209,8 @@ hu: other: "%{count} szavazat" vote: Szavazás show_more: Mutass többet + show_newer: Újabbak mutatása + show_older: Régebbiek mutatása show_thread: Szál mutatása sign_in_to_participate: Jelentkezz be, hogy részt vehess a beszélgetésben title: '%{name}: "%{quote}"' @@ -1260,21 +1319,20 @@ hu: default: "%Y. %b %d., %H:%M" month: "%Y %b" two_factor_authentication: - code_hint: Megerősítéshez írd be az alkalmazás által generált kódot - description_html: He engedélyezed a kétlépcsős azonosítást, a bejelentkezéshez szükséged lesz a telefonodra és egy alkalmazásra, amely hozzáférési kódot generál számodra. + add: Hozzáadás disable: Kikapcsolás - enable: Engedélyezés + disabled_success: A kétlépcsős azonosítást sikeresen letiltottuk + edit: Szerkesztés enabled: Kétlépcsős azonosítás engedélyezve enabled_success: A kétlépcsős azonosítást sikeresen engedélyezted generate_recovery_codes: Visszaállítási kódok generálása - instructions_html: "Olvasd be ezt a QR-kódot a telefonodon futó Google Authenticator vagy egyéb TOTP alkalmazással. A jövőben ez az alkalmazás fog számodra hozzáférési kódot generálni a belépéshez." lost_recovery_codes: A visszaállítási kódok segítségével tudsz belépni, ha elveszítenéd a telefonod. Ha a visszaállítási kódjaidat hagytad el, itt generálhatsz újakat. A régi kódokat ebben az esetben érvénytelenítjük. - manual_instructions: 'Ha nem sikerült a QR-kód beolvasása, itt a szöveges kulcs, amelyet manuálisan kell begépelned:' + methods: Kétlépcsős eljárások + otp: Hitelesítő alkalmazás recovery_codes: Visszaállítási kódok biztonsági mentése recovery_codes_regenerated: A visszaállítási kódokat sikeresen újrageneráltuk recovery_instructions_html: A visszaállítási kódok egyikének segítségével tudsz majd belépni, ha elveszítenéd a telefonod. Tartsd biztos helyen a visszaállítási kódjaid! Például nyomtasd ki őket és tárold a többi fontos iratoddal együtt. - setup: Beállítás - wrong_code: A beírt kód nem érvényes! A szerver órája és az eszközöd órája szinkronban jár? + webauthn: Biztonsági kulcsok user_mailer: backup_ready: explanation: A Mastodon fiókod teljes mentését kérted. A mentés kész ás letölthető! @@ -1289,6 +1347,7 @@ hu: warning: explanation: disable: A fiókod befagyasztott állapotban megtartja minden adatát, de feloldásig nem csinálhatsz vele semmit. + sensitive: A feltöltött és hivatkozott médiatartalmaidat szenzitívként kezeljük. silence: A fiókod korlátozott állapotában csak a követőid láthatják a tülkjeidet, valamint nem kerülsz rá nyilvános idővonalakra. Ugyanakkor mások manuálisan még követhetnek. suspend: A fiókodat felfüggesztették, így minden tülköd és feltöltött fájlod menthetetlenül elveszett erről a szerverről és minden olyanról is, ahol voltak követőid. get_in_touch: Válaszolhatsz erre az emailre, hogy kapcsolatba lépj a %{instance} csapatával. @@ -1297,11 +1356,13 @@ hu: subject: disable: A fiókodat %{acct} befagyasztották none: Figyelmeztetés a %{acct} fióknak + sensitive: A %{acct} fiókod médiatartalmait szenzitívnek jelölték silence: A fiókodat %{acct} korlátozták suspend: A fiókodat %{acct} felfüggesztették title: disable: Befagyasztott fiók none: Figyelem + sensitive: Médiatartalmadat szenzitívnek jelölték silence: Lekorlátozott fiók suspend: Felfüggesztett fiók welcome: @@ -1322,9 +1383,11 @@ hu: tips: Tippek title: Üdv a fedélzeten, %{name}! users: + blocked_email_provider: Ez az email szolgáltató nem engedélyezett follow_limit_reached: Nem követhetsz több, mint %{limit} embert generic_access_help_html: Nem tudod elérni a fiókodat? Segítségért lépj kapcsolatba velünk ezen %{email} invalid_email: A megadott e-mail cím helytelen + invalid_email_mx: Az email cím nem tűnik létezőnek invalid_otp_token: Érvénytelen ellenőrző kód invalid_sign_in_token: Érvénytelen biztonsági kód otp_lost_help_html: Ha mindkettőt elvesztetted, kérhetsz segítséget itt %{email} @@ -1334,3 +1397,20 @@ hu: verification: explanation_html: 'A profilodon hitelesítheted magad, mint az itt található linkek tulajdonosa. Ehhez a linkelt weboldalnak tartalmaznia kell egy linket vissza a Mastodon profilodra. Ennek tartalmaznia kell a rel="me" attribútumot. A link szövege bármi lehet. Itt egy példa:' verification: Hitelesítés + webauthn_credentials: + add: Biztonsági kulcs hozzáadása + create: + error: A biztonsági kulcs hozzáadása közben hiba történt. Kérlek, próbáld újra. + success: A biztonsági kulcsodat sikeresen felvettük. + delete: Törlés + delete_confirmation: Biztos, hogy le akarod törölni ezt a biztonsági kulcsot? + description_html: Ha engedélyezed a biztonsági kulcsos hitelesítést, a bejelentkezéshez szükséged lesz az egyik kulcsodra. + destroy: + error: A biztonsági kulcs törlése közben hiba történt. Kérlek, próbáld újra. + success: A biztonsági kulcsodat sikeresen töröltük. + invalid_credential: Érvénytelen biztonsági kulcs + nickname_hint: Írd be az új biztonsági kulcsod becenevét + not_enabled: Még nem engedélyezted a WebAuthn-t + not_supported: Ez a böngésző nem támogatja a biztonsági kulcsokat + otp_required: A biztonsági kulcsok használatához először engedélyezd a kétlépcsős azonosítást. + registered_on: 'Regisztrált ekkor: %{date}' diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 477b0fda2..d56aa0b9c 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -1,17 +1,29 @@ --- hy: about: + about_hashtag_html: Սրանք #%{hashtag} հեշթեգով հանրային թթերն են։ Կարող եք փոխգործակցել դրանց հետ եթե ունեք որեւէ հաշիու դաշտեզերքում։ + about_mastodon_html: Ապագայի սոցցանցը։ Ոչ մի գովազդ, ոչ մի կորպորատիվ վերահսկողութիւն, էթիկական դիզայն, եւ ապակենտրոնացում։ Մաստադոնում դու ես քո տուեալների տէրը։ about_this: Մեր մասին active_count_after: ակտիվ + active_footnote: Ամսեկան ակտիւ օգտատէրեր (MAU) administered_by: Ադմինիստրատոր՝ api: API apps: Բջջային հավելվածներ + apps_platforms: Մաստադոնը հասանելի է iOS, Android եւ այլ տարբեր հենքերում + browse_directory: Պրպտիր օգտատէրերի շտեմարանը եւ գտիր հետաքրքիր մարդկանց + browse_local_posts: Տես այս հանգոյցի հանրային գրառումների հոսքը + browse_public_posts: Դիտիր Մաստադոնի հանրային գրառումների հոսքը contact: Կոնտակտ contact_missing: Սահմանված չէ contact_unavailable: Ոչինչ չկա discover_users: Գտնել օգտատերներ documentation: Փաստաթղթեր + federation_hint_html: "%{instance} հանգոյցում հաշիւ բացելով կարող ես հետեւել այլ մարդկանց Մաստադոնի ցանկացած հանգոյցից և ոչ միայն։" get_apps: Փորձեք բջջային հավելվածը + hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում + instance_actor_flash: 'Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ + +' learn_more: Իմանալ ավելին privacy_policy: Գաղտնիության քաղաքականություն see_whats_happening: Տես ինչ ա կատարվում @@ -20,14 +32,26 @@ hy: status_count_after: one: ստատուս other: ստատուս + status_count_before: Ովքեր գրել են՝ + tagline: Հետեւիր ընկերներիդ եւ գտիր նորերին + terms: Ծառայութեան պայմանները + unavailable_content: Մոդերացուող սպասարկիչներ unavailable_content_description: domain: Սպասարկիչ + reason: Պատճառը՝ + rejecting_media: Այս հանգոյցների նիւթերը չեն մշակուի կամ պահուի։ Չեն ցուցադրուի նաև մանրապատկերները, պահանջելով ինքնուրոյն անցում դէպի բնօրինակ նիւթը։ + rejecting_media_title: Զտուած մեդիա + silenced: Այս սպասարկչի հրապարակումները թաքցուած են հանրային հոսքից եւ զրոյցներից, եւ ոչ մի ծանուցում չի գեներացուում նրանց օգտատէրերի գործողութիւններից, եթէ նրանց չէք հետեւում․ + silenced_title: Լռեցուած սպասարկիչներ + suspended: Ոչ մի տուեալ այս սպասարկիչներից չի գործարկուում, պահուում կամ փոխանակուում, կատարել որեւէ գործողութիւն կամ հաղորդակցութիւն այս սպասարկիչի օգտատէրերի հետ անհնար է․ + suspended_title: Կասեցուած սպասարկիչներ user_count_after: one: օգտատեր other: օգտատերեր user_count_before: Այստեղ են what_is_mastodon: Ի՞նչ է Մաստոդոնը accounts: + choices_html: "%{name}-ի ընտրանի՝" follow: Հետևել followers: one: Հետևորդ @@ -35,13 +59,20 @@ hy: following: Հետևում եք joined: Միացել են %{date} last_active: վերջին թութը + link_verified_on: Սոյն յղման տիրապետումը ստուգուած է՝ %{date}֊ին media: Մեդիա + moved_html: "%{name} տեղափոխուել է %{new_profile_link}" + network_hidden: Այս տուեալը հասանելի չէ never_active: Երբեք + nothing_here: Այստեղ բան չկայ + people_followed_by: Մարդիկ, որոնց %{name}ը հետեւում է + people_who_follow: Մարդիկ, որոնք հետեւում են %{name}ին posts: one: Թութ other: Թութերից posts_tab_heading: Թթեր posts_with_replies: Թթեր եւ պատասխաններ + reserved_username: Ծածկանունն արդէն վերցուած է roles: admin: Ադմինիստրատոր bot: Բոտ @@ -50,13 +81,32 @@ hy: unavailable: Պրոֆիլը հասանելի չի unfollow: Չհետևել admin: + account_actions: + action: Կատարել գործողութիւն account_moderation_notes: create: Թողնել նշում + created_msg: Մոդերացիոն նոթը բարեյաջող ստեղծուեց delete: Ջնջել + destroyed_msg: Մոդերացիոն նոթը բարեյաջող վերացուեց accounts: + add_email_domain_block: Արգելափակել էլ․ փոստի տիրոյթը + approve: Ընդունել + approve_all: Ընդունել բոլորը + are_you_sure: Վստա՞հ ես + avatar: Աւատար + by_domain: Դոմէն + change_email: + changed_msg: Հաշուի էլ․ հասցէն բարեյաջող փոփոխուեց + current_email: Ներկայիս էլ․ հասցէ + label: Փոխել էլ. հասցէն + new_email: Նոր էլ․ փոստ + submit: Փոխել էլ. հասցէն + title: Փոխել էլ․ փոստը %{username}ի համար + confirm: Հաստատել confirmed: Հաստատված է confirming: Հաստատում deleted: Ջնջված է + demote: Աստիճանազրկել disable: Անջատել disable_two_factor_authentication: Անջատել 2FA disabled: Անջատված է @@ -64,12 +114,14 @@ hy: domain: Դոմեն edit: Խմբագրել email: Էլ. փոստ + email_status: Էլ․ փոստի կարգավիճակ enable: Միացնել enabled: Միացված է followers: Հետևորդներ follows: Հետևողներ header: Վերնագիր inbox_url: Մուտքային URL + invited_by: Հրաւիրուել է ip: IP joined: Միացած է location: @@ -77,89 +129,408 @@ hy: local: Տեղային remote: Հեռակա title: Տեղադրությունը + login_status: Մուտքի կարգավիճակ + media_attachments: Մեդիա կցորդներ + memorialize: Դարձնել հիշատակարան moderation: active: Ակտիվ all: Բոլորը pending: Սպասում + silenced: Լռեցուած + suspended: Կասեցուած + title: Մոդերացիա + moderation_notes: Մոդերացիայի նշումներ + most_recent_activity: Վերջին ակտիւութիւնը + most_recent_ip: Վերջին IP + no_limits_imposed: Սահմանափակումներ չկան + not_subscribed: Բաժանորդագրուած չէ + pending: Սպասում է վերանայման + perform_full_suspension: Կասեցում + promote: Աջակցել + protocol: Հաղորդակարգ public: Հրապարակային + redownload: Թարմացնել հաշիւը + reject: Մերժել + reject_all: Մերժել բոլորը + remove_avatar: Հեռացնել աւատարը + remove_header: Հեռացնել գլխագիրը + resend_confirmation: + already_confirmed: Օգտատէրն արդէն հաստատուած է + send: Հաստատման իմակն ուղարկել կրկին + success: Հաստատման իմակը բարեյաջող ուղարկուեց + reset: Վերականգնել + reset_password: Վերականգնել գաղտանաբառը + resubscribe: Կրկին բաժանորդագրուել + role: Թոյլտուութիւններ + roles: + admin: Ադմինիստրատոր + moderator: Մոդերատոր + user: Oգտատէր + search: Որոնել + search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով + search_same_ip: Այլ օգտատէրեր նոյն IP֊ով + show: + created_reports: Կազմել բողոքներ + targeted_reports: Այլոց կողմից բողոքարկուած + silence: Լռութիւն + silenced: Լռեցուած + statuses: Գրառումներ + subscribe: Բաժանորդագրուել + suspended: Կասեցուած + time_in_queue: Հերթում է %{time} + title: Հաշիւներ + unconfirmed_email: Չհաստատուած էլ․ հասցէ + undo_silenced: Ետարկել լռեցումը + undo_suspension: Ետարկել կասեցումը + unsubscribe: Ապաբաժանորդագրուել username: Մուտքանուն warn: Նախազգուշացում web: Վեբ action_logs: action_types: + assigned_to_self_report: Բողոքել + change_email_user: Փոխել օգտատիրոջ էլ․ հասցէն + confirm_user: Հաստատել օգտատիրոջը + create_account_warning: Ստեղծել զգուշացում + create_announcement: Ստեղծել յայտարարութիւն + create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում + destroy_announcement: Ջնջել յայտարարութիւնը + destroy_domain_allow: Ջնջել դոմէնի թոյլտուութիւնը + destroy_domain_block: Ապաարգելափակել դոմէնը + destroy_email_domain_block: Ապաարգելափակել էլ․ հասցէի դոմէնը + destroy_status: Ջնջել գրառումը disable_2fa_user: Անջատել 2FA + disable_user: Ապաակտիւացնել օգտատիրոջը + enable_user: Ակտիւացնել օգտատիրոջը + memorialize_account: Յիշել հաշիւը + promote_user: Աջակցել օգտատիրոջը + remove_avatar_user: Հեռացնել աւատարը + reopen_report: Վերաբացել բողոքը + reset_password_user: Վերականգնել գաղտանաբառը + resolve_report: Լուծարել զեկոյցը + silence_account: Լռեցնել հաշիւը + suspend_account: Կասեցնել հաշիւը + unassigned_report: Հանել բողոքը + unsilence_account: Լսել հաշուին + unsuspend_account: Ապակասեցնել հաշիւը + update_announcement: Թարմացնել յայտարարութիւնը + update_status: Թարմացնել գրառումը + actions: + assigned_to_self_report: "%{name} բողոքել է %{target} իրենց համար" + change_email_user: "%{name} փոփոխել է %{target} օգտատիրոջ էլ․ հասցէն" + confirm_user: "%{name} հաստատել է %{target} օգտատիրոջ էլ․ հասցէն" + create_account_warning: "%{name} զգուշացրել է %{target}ին" + create_announcement: "%{name} ստեղծեց նոր յայտարարութիւն %{target}" + create_email_domain_block: "%{name} արգելափակեց էլ․ փոստի տիրոյթ %{target}" + demote_user: "%{name} աստիճանազրկեց օգտատիրոջ %{target}" + destroy_announcement: "%{name} ջնջեց յայտարարութիւն %{target}" + destroy_domain_block: "%{name} ապաարգելափակեց տիրոյթ %{target}" + destroy_email_domain_block: "%{name} ապաարգելափակեց էլ․ փոստի տիրոյթ %{target}" + destroy_status: "%{name} ջնջեց %{target}ի գրառում" + disable_user: "%{name} անջատել է մուտքը %{target} օգտատիրոջ համար" + enable_user: "%{name} թոյլատրեց մուտք %{target} օգտատիրոջ համար" + memorialize_account: "%{name} դարձրեց %{target}ի հաշիւը յիշատակի էջ" + promote_user: "%{name} աջակցեց օգտատիրոջը %{target}" + remove_avatar_user: "%{name} հեռացրեց %{target}ի աւատարը" + reopen_report: "%{name} վերաբացեց բողոք %{target}" + reset_password_user: "%{name} վերականգնեց օգտատիրոջ գաղտնաբառը %{target}" + resolve_report: "%{name} լուծարեց բողոքը %{target}" + silence_account: "%{name} լռեցրեց %{target}ի հաշիւը" + suspend_account: "%{name} լռեցրեց %{target}ի հաշիւը" + unassigned_report: "%{name} չսահմանուած բողոք %{target}" + deleted_status: "(ջնջուած գրառում)" + empty: Ոչ մի գրառում չկայ։ + filter_by_action: Զտել ըստ գործողութեան + filter_by_user: Զտել ըստ օգտատիրոջ announcements: + destroyed_msg: Յայտարարութիւնը բարեյաջող ջնջուեց + edit: + title: Խմբագրել յայտարարութիւնը + empty: Ոչ մի յայտարարութիւն չգտնուեց live: Ուղիղ + new: + create: Ստեղծել յայտարարութիւն + title: Նոր յայտարարութիւն + published_msg: Յայտարարութիւնը բարեյաջող հրապարակուեց + scheduled_for: Պլանաւորուած է %{time}ին + scheduled_msg: Յայտարարութիւնը նախապատրաստուեց հրապարակման + title: Յայտարարութիւններ + unpublished_msg: Յայտարարութիւնը բարեյաջող ապահրապարակուեց + updated_msg: Յայտարարութիւնը բարեյաջող թարմացուեց custom_emojis: + assign_category: Կցել կատեգորիա + by_domain: Տիրոյթ copy: Պատճենել + create_new_category: Ստեղծել նոր կատեգորիա delete: Ջնջել disable: Անջատել + disabled: Անջատուած + emoji: Զմայլիկ + enable: Միացնել + enabled: Միացուած + image_hint: PNG մինչեւ 50KB list: Ցանկ + listed: Ցուցակագրուած overwrite: Վերագրել + uncategorized: Չդասակարգուած + unlist: Ապացուցակագրում + unlisted: Ծածուկ upload: Վերբեռնել + dashboard: + config: Կարգաւորում + feature_deletions: Հաշուի հեռացումներ + feature_invites: Հրաւէրի յղումներ + feature_profile_directory: Օգտատիրոջ մատեան + feature_registrations: Գրանցումներ + feature_timeline_preview: Հոսքի նախադիտում + features: Յատկանիշներ + open_reports: բաց բողոքներ + pending_tags: պիտակներն սպասում են վերանայման + pending_users: օգտատէրերն սպասում են վերանայման + recent_users: Վերջին օգտատէրերը + search: Տեքստային որոնում + single_user_mode: Մէկ օգտատիրոջ ռեժիմ + software: Ծրագրային ապահովում + space: Տարածքի օգտագործում + title: Գործիքների վահանակ + total_users: ընդհանուր օգտատէրեր + trends: Թրենդներ + week_interactions: շաբաթուայ գործողութիւններ + week_users_active: շաբաթուայ ակտիւութիւն + week_users_new: շաբաթուայ օգտատէրեր + whitelist_mode: Սահմանափակ ֆեդերացիայի ռեժիմ + domain_allows: + add_new: Թոյլատրել ֆեդերացիա տիրոյթի հետ domain_blocks: + domain: Տիրոյթ + edit: Խմբագրել տիրոյթի արգելափակումը new: + create: Ստեղծել արգելափակում severity: noop: Ոչ մի silence: Լուռ + suspend: Կասեցում + title: Նոր տիրոյթի արգելափակում + private_comment: Փակ մեկնաբանութիւն + public_comment: Հրապարակային մեկնաբանութիւն + reject_media: Մերժել մեդիա ֆայլերը + reject_reports: Մերժել բողոքները + rejecting_media: մերժուում են մեդիա ֆայլեր + rejecting_reports: մերժուում են բողոքներ + severity: + silence: լռեցուած + suspend: կասեցուած show: undo: Ետարկել + undo: Ետարկել տիրոյթի արգելափակումը + view: Տեսնել տիրոյթի արգելափակումը email_domain_blocks: add_new: Ավելացնել նորը + created_msg: Բարեյաջող արգելափակուեց էլ․ փոստի տիրոյթ delete: Ջնջել + destroyed_msg: Բարեյաջող ապաարգելափակուեց էլ․ փոստի տիրոյթ domain: Դոմեն + empty: Ոչ մի էլ․ փոստի տիրոյթ այժմ արգելափակուած չէ։ + from_html: "%{domain}ից" new: create: Ավելացնել դոմեն + title: Արգելափակել էլ․ փոստի նոր տիրոյթ + title: էլ․ փոստի արգելափակուած տիրոյթներ instances: by_domain: Դոմեն + known_accounts: + one: "%{count} յայտնի հաշիւ" + other: "%{count} յայտնի հաշիւներ" moderation: all: Բոլորը limited: Սահամանփակ + title: Մոդերացիա + private_comment: Փակ մեկնաբանութիւն + public_comment: Հրապարակային մեկնաբանութիւն + total_blocked_by_us: Մենք արգելափակել ենք + total_followed_by_them: Նրանք հետեւում են + total_followed_by_us: Մենք հետեւում ենք + total_reported: Բողոքներ նրանց մասին + total_storage: Մեդիա կցորդներ + invites: + deactivate_all: Ապաակտիւացնել բոլորին + filter: + all: Բոլորը + available: Հասանելի + expired: Սպառուած + title: Զտիչ + title: Հրաւէրներ + pending_accounts: + title: Սպասող հաշիւներ (%{count}) + relationships: + title: "%{acct}ի յարաբերութիւններ" relays: + delete: Ջնջել disable: Անջատել disabled: Անջատված է enable: Միացնել enabled: Միացված է + save_and_enable: Պահպանել եւ միացնել status: Կարգավիճակ reports: + account: + notes: + one: "%{count} նոթ" + other: "%{count} նոթեր" + action_taken_by: Գործողութիւնը կատարել է + are_you_sure: Վստա՞հ ես + assign_to_self: Ինձ յանձնարարուած + assigned: Նշանակել մոդերատոր comment: none: Ոչ մի + created_at: Բողոքարկուած + mark_as_resolved: Նշել որպէս լուծուած + mark_as_unresolved: Նշել որպէս չլուծուած notes: create: Ավելացնել նշում delete: Ջնջել + reopen: Վերաբացել բողոքը + report: 'Բողոք #%{id}' + reported_account: Բողոքարկուած հաշիւ + reported_by: Բողոքարկուած է + resolved: Լուծուած status: Կարգավիճակ + title: Բողոքներ + unassign: Չնշանակել + unresolved: Չլուծուած + updated_at: Թարմացուած settings: + contact_information: + username: Կոնտակտի ծածկանուն + domain_blocks: + all: Բոլորին + disabled: Ոչ մէկին + title: Ցուցադրել տիրոյթը արգելափակումները + profile_directory: + desc_html: Թոյլատրել օգտատէրերին բացայայտուել + title: Միացնել հաշուի մատեանը registrations: + closed_message: + desc_html: Ցուցադրուում է արտաքին էջում, երբ գրանցումները փակ են։ Կարող ես օգտագործել նաեւ HTML թէգեր + title: Փակ գրանցման հաղորդագրութիւն + deletion: + desc_html: Բոլորին թոյլատրել ջնջել իրենց հաշիւը + title: Բացել հաշուի ջնջումը min_invite_role: disabled: Ոչ ոք + title: Թոյլատրել հրաւէրներ + registrations_mode: + modes: + approved: Գրանցման համար անհրաժեշտ է հաստատում + none: Ոչ ոք չի կարող գրանցուել + open: Բոլորը կարող են գրանցուել + site_description: + title: Կայքի նկարագրութիւն + site_short_description: + title: Կայքի հակիրճ նկարագրութիւն + site_terms: + desc_html: Դու կարող ես գրել քո սեփական գաղտնիութեան քաղաքականութիւնը, օգտագործման պայմանները եւ այլ կանոններ։ Կարող ես օգտագործել HTML թեգեր + site_title: Սպասարկչի անուն + thumbnail: + title: Հանգոյցի նկարը + title: Կայքի կարգաւորումներ + trends: + title: Թրենդային պիտակներ + site_uploads: + delete: Ջնջել վերբեռնուած ֆայլը + destroyed_msg: Կայքի վերբեռնումը բարեյաջող ջնջուեց statuses: + back_to_account: Վերադառնալ անձնական էջ batch: delete: Ջնջել deleted: Ջնջված է + media: + title: Մեդիա + no_media: Մեդիա չկայ + with_media: Մեդիայի հետ tags: context: Համատեքստ + last_active: Վերջին ակտիւութիւնը + most_popular: Ամէնայայտնի + most_recent: Վերջին + name: Պիտակ + review: Վերանայել գրառումը + reviewed: Վերանայուած + title: Պիտակներ + trending_right_now: Այժմ թրենդի մէջ է + unique_uses_today: "%{count} հրապարակուել է այսօր" + unreviewed: Վերանայուած չէ title: Ադմինիստարցիա warning_presets: add_new: Ավելացնել նորը delete: Ջնջել + admin_mailer: + new_report: + subject: Նոր բողոք %{instance}ի համար(#%{id}) + appearance: + animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն + discovery: Բացայայտում + localization: + body: Մաստոդոնը թարգմանուում է կամաւորների կողմից։ + guide_link: https://crowdin.com/project/mastodon + guide_link_text: Աջակցել կարող են բոլորը։ + sensitive_content: Զգայուն բովանդակութիւն + application_mailer: + salutation: "%{name}," + view: Նայել․ + view_profile: Նայել անձնական էջը + view_status: Նայել գրառումը + applications: + invalid_url: Տրամադրուած URL անվաւեր է auth: + apply_for_account: Հրաւէրի հարցում change_password: Գաղտնաբառ checkbox_agreement_html: Ես համաձայն եմ սպասարկչի կայանքներին և ծառայությունների պայմաններին checkbox_agreement_without_rules_html: Ես համաձայն եմ ծառայությունների պայմաններին delete_account: Ջնջել հաշիվը + forgot_password: Մոռացե՞լ ես գաղտնաբառդ login: Մտնել logout: Դուրս գալ + migrate_account: Տեղափոխուել այլ հաշիւ providers: cas: CAS saml: SAML register: Գրանցվել + registration_closed: "%{instance}ը չի ընդունում նոր անդամներ" + reset_password: Վերականգնել գաղտանաբառը security: Անվտանգություն + set_new_password: Սահմանել նոր գաղտնաբառ setup: title: Կարգավորում + status: + account_status: Հաշուի կարգավիճակ authorize_follow: follow: Հետևել + following: Յաջողութի՜ւն։ Դու այժմ հետեւում ես․ + post_follow: + close: Կամ, կարող ես պարզապէս փակել այս պատուհանը։ + return: Ցուցադրել օգտատիրոջ էջը + web: Անցնել վէբին + title: Հետեւել %{acct} + challenge: + confirm: Շարունակել + invalid_password: Անվաւեր ծածկագիր + prompt: Շարունակելու համար մուտքագրիր ծածկագիրդ + crypto: + errors: + invalid_key: անվաւեր Ed25519 կամ Curve25519 բանալի + invalid_signature: անվաւեր Ed25519 բանալի + date: + formats: + default: "%b %d, %Y" datetime: distance_in_words: + about_x_hours: "%{count}ժ" + about_x_months: "%{count}ամ" + about_x_years: "%{count}տ" + almost_x_years: "%{count}տ" + half_a_minute: Հէնց հիմա + less_than_x_minutes: "%{count}ա" less_than_x_seconds: Հենց հիմա over_x_years: "%{count}տ" x_days: "%{count}օ" @@ -167,7 +538,15 @@ hy: x_months: "%{count}ա" x_seconds: "%{count}վրկ" deletes: + challenge_not_passed: Մուտքագրուած տեղեկութիւնը ստոյգ չէ + confirm_password: Նոյնականացման համար մուտքագրիր ծածկագիրդ proceed: Ջնջել հաշիվը + success_msg: Հաշիւդ բարեյաջող ջնջուեց + directories: + directory: Հաշուի մատեան + explore_mastodon: Բացայայտել %{title} + domain_validator: + invalid_domain: անվաւէր տիրոյթի անուն errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -175,17 +554,35 @@ hy: '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': - '429': Too many requests - '500': + '429': Չափազանց շատ հարցումներ + '500': + title: Էջը ճիշտ չէ '503': The page could not be served due to a temporary server failure. + existing_username_validator: + not_found: չյաջողուեց գտնել այս ծածկագրով լոկալ օգտատիրոջ + not_found_multiple: չյաջողուեց գտնել %{usernames} exports: archive_takeout: date: Ամսաթիվ download: Ներբեռնեք Ձեր արխիվը + request: Պահանջել քո արքիւը size: Չափը + blocks: Արգելափակել csv: CSV + domain_blocks: Տիրոյթի արգելափակումներ lists: Ցանկեր + mutes: Լռեցրել ես + storage: Մեդիա պահոց + featured_tags: + add_new: Աւելացնել նորը filters: + contexts: + account: Պրոֆիլներ + home: Տեղական հոսք + notifications: Ծանուցումներ + thread: Զրոյցներ + edit: + title: Խմբագրել զտիչը index: delete: Ջնջել title: Ֆիլտրեր @@ -200,21 +597,61 @@ hy: all: Բոլորը copy: Պատճենել delete: Ջնջել + order_by: Դասաւորել ըստ + save_changes: Պահպանել փոփոխութիւնները identity_proofs: active: Ակտիվ + authorize: Այո, նոյնականացնել + i_am_html: Ես %{username}ն եմ %{service}ում։ + identity: Ինքնութիւն + inactive: Ոչ ակտիւ + publicize_checkbox: Թթել սա․ + publicize_toot: 'Ապացուցուա՜ծ է․ Ես%{username} եմ %{service}ում․ %{url} ' + remove: Հաշուից հեռացնել ապացոյցը + removed: Ապացոյցը բարեյաջող հեռացուեց հաշուից + status: Հաստատման կարգավիճակ + view_proof: Նայել ապացոյցը imports: modes: + merge: Միաւորել overwrite: Վերագրել + types: + blocking: Արգելափակումների ցուցակ + domain_blocking: Տիրոյթի արգելափակումների ցուցակ upload: Վերբեռնել invites: expires_in: '1800': 30 րոպե '21600': 6 ժամ - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + '3600': 1 ժամ + '43200': 12 ժամ + '604800': 1 շաբաթ + '86400': 1 օր + expires_in_prompt: Երբեք + generate: Գեներացնել հրաւէրի յղում + max_uses_prompt: Սահմանափակում չկայ + title: Հրաւիրել մարդկանց + media_attachments: + validations: + too_many: 4-ից աւել ֆայլ չի կարող կցուել + migrations: + acct: Տեղափոխել դեպի + errors: + not_found: չգտնուեց + past_migrations: Նախոդ միգրացիաները + warning: + followers: Այս քայլով քո բոլոր հետեւորդներին այս հաշուից կը տեղափոխես դէպի նորը + moderation: + title: Մոդերացիա notification_mailer: + favourite: + title: Նոր հաւանում + follow: + body: "%{name}ը հետեւում է քեզ!" + subject: "%{name}ը հետեւում է քեզ" + title: Նոր հետևորդներ + follow_request: + title: Նոր հետեւելու հայցեր mention: action: Պատասխանել number: @@ -234,6 +671,17 @@ hy: truncate: "…" preferences: other: Այլ + public_timelines: Հանրային հոսք + relationships: + activity: Հաշուի ակտիւութիւնը + followers: Հետեւորդներ + following: Հետեւում ես + invited: Հրաւիրուած է + last_active: Վերջին ակտիւութիւնը + most_recent: Վերջին + moved: Տեղափոխուած + primary: Հիմնական + status: Հաշուի կարգավիճակ sessions: browser: Դիտարկիչ browsers: @@ -274,8 +722,113 @@ hy: edit_profile: Խմբագրել պրոֆիլը import: Ներմուծել import_and_export: Ներմուծել և արտահանել + notifications: Ծանուցումներ + profile: Հաշիւ + two_factor_authentication: Երկքայլ նոյնականացում + statuses: + open_in_web: Բացել վէբում + poll: + total_people: + one: "%{count} մարդ" + other: "%{count} մարդիկ" + total_votes: + one: "%{count} ձայն" + other: "%{count} ձայներ" + vote: Քուէարկել + show_more: Աւելին + title: '%{name}: "%{quote}"' + visibilities: + private: Միայն հետեւողներին + public: Հրապարակային stream_entries: + pinned: Ամրացուած թութ + reblogged: տարածուած sensitive_content: Կասկածելի բովանդակութիւն + terms: + body_html: | +

Գաղտնիութեան քաղաքականութիւն

+

Ոչ պաշտօնական, ոչ իրաւական թարգմանութիւն

+

Ինչ անձնական տեղեկութիւններ ենք մենք հաւաքում

+ +
    +
  • Առաջնային հաւաքվող տւալներ: Եթե դուք գրանցվեք էք այս սերւերում, ձեզանից կարող են պահանջել մուտքագրել օգտուողի անուն, էլփոստի հասցէ և գաղտնաբառ։ Դուք կարող էք նաև մուտքագրել հավելյալ տվյալներ, ինչպիսիք են օրինակ՝ ցուցադրուող անունը եւ կենսագրութիւնը, նաև վերբեռնել գլխանկար և ետնանակար։ Օգտուողի անունը, կենսագրութիւնը, գլխանկարը և ետնանկարը համարվում են հանրային տեղեկատուութիւն։
  • +
  • Գրառումները, հետեւումները և այլ հանրային տեղեկատուութիւնը։ : Ձեր հետևած մարդկանց ցուցակը ներկայացուած է հանրայնորեն, նոյնը ճշմարիտ է նաև հետևորդների համար։ Երբ դուք ուղարկում եք հաղորդագրութիւն, հաղորդագրութեան ուղարկման ամսաթիւը և ժամանակը, ինչպէս նաև հավելվածը որից այն ուղարկուել է, պահւում է։ Հաղորդագրութիւնները կարող են պարունակել մեդիա կցումներ, ինչպիսիք են նկարները և տեսանիւթերը։ Հանրային և ծածուկ գրառումները հանրայնորեն հասանելի են։ Անձնական էջում կցուած գրառումները նույնպես հանրայնորեն հասանելի տեղեկատուութիւն է։ Ձեր գրառումները ուղարկւում են ձեր հետևորդներին, ինչը նշանակում է, որ որոշ դէպքերում դրանք ուղարկւում են այլ սերվերներ և պատճեները պահւում են այնտեղ։ Երբ դուք ջնջում էք ձեր գրառումները, սա նույնպես ուղարկւում է ձեր հետևորդներին։ Մեկ այլ գրառման տարածումը կամ հաւանումը միշտ հանրային է։
  • +
  • Հասցէագրած և միայն հետևորդներին գրառումները: Բոլոր գրառումները պահւում և մշակւում են սերվերի վրայ։ Միայն հետևորդներին գրառումները ուղարկւում են միայն ձեր հետևորդներին և այն օգտատերերին ովքեր նշուած են գրառման մէջ, իսկ հասցէագրեցուած գրառումները ուղարկւում են միայն դրանում նշուած օգտատերերին։ Որոշ դէպքերում դա նշանակում է, որ այդ գրառումները ուղարկւում են այլ սերվերներ և պատճեները պահւում այնտեղ։ Մենք բարեխիղճ ջանք են գործադրում սահմանափակելու այդ գրառումների մուտքը միայն լիազօրուած անձանց, բայց այլ սերվերներ կարող են ձախողել դրա կատարումը։ Այդ պատճառով կարևոր է վերանայել այն սերվերները որին ձեր հետևորդները պատկանում են։ Դուք կարող էք կարգաւորումներից միացնել նոր հետևորդներին ինքնուրոյն ընդունելու և մերժելու ընտրանքը։ Խնդրում ենք յիշել, որ սերվերի գործարկուն և ցանկացած ստացող սերվեր կարող է դիտել այդ տեսակ հաղորդագրութիւնները, իսկ ստացողները կարող են էկրանահանել, պատճէնել և այլ կերպ վերատարածել դրանք։Մաստադոնով մի կիսվեք որևէ վտանգաւոր տեղեկատուութեամբ։
  • +
  • IP հասցէներ և այլ մետատվյալներ: Երբ դուք մուտք էք գործում, մենք պահում են ձեր մուտք գործելու IP հասցէն, ինչպէս նաև զննարկիչի տեսակը։ Կարգավորումենում հասանելի է մուտքի բոլոր սեսսիաների վերանայման և մարման հնարաւորութիւնը։ Վերջին օգտագործուած IP հասցէն պահւում է մինչև 12 ամիս ժամկէտով։ Մենք կարող ենք նաև պահել սերվերի մատեանի նիշքերը, որը պարունակում է սերվերին արուած իւրաքանչիւր հարցման IP հասցէն։
  • +
+ +
+ +

Ինչպէս ենք օգտագործում ձեր անձնական տեղեկութիւնները

+ +

Ցանկացած տուեալ, որը մենք հաւաքում ենք ձեզնից կարող է օգտագործուել հետևայլ նպատակներով՝

+ +
    +
  • Մատուցելու Մաստադոնի հիմնական գործառութիւնները։ Դուք կարող եք փոխգործակցել այլ մարդկանց բովանդակութեան հետ և տեղադրել ձեր սեփական բովանդակութիւնը միայն մուտք գործելուց յետոյ։ Օրինակ՝ դուք կարող էք հետեւել այլ մարդկանց նրանց համակցուած գրառումները ձեր անձնական հոսքում տեսնելու համար ։
  • +
  • Նպաստելու համայնքի մոդերացիային։ Օրինակ՝ համեմատելու ձեր IP հասցէն այլ արդեն յայտնի հասցէի հետ՝ բացայայտելու արգելափակումից խուսափելու կամ այլ խախտումների դեպքերը ։
  • +
  • Ձեր տրամադրած էլփոստի հասցէն կարող է օգտագործուել ձեզ տեղեկատուութիւն տրամադրելու, այլ մարդկանց՝ ձեր բովանդակութեան հետ փոխգործակցութեան կամ ձեզ հասցէագրած նամակի մասին ծանուցելու, ինչպէս նաև հայցումներին կամ այլ յայտերին ու հարցերին պատասխանելու համար։
  • +
+ +
+ +

Ինչպես ենք պաշտպանում ձեր անձնական

+ +

Մենք կիրառում ենք տարբեր անվտանգութեան միջոցների պահպանելու ձեր անձնական տվյալների անվտանգութիւնը, երբ դուք մուտքագրում, ուղարկում կամ դիտում էգ ձեր անձնական տեղեկութիւնները։ Ի թիւս մնացած բաների, ձեր դիտարկչի սեսսիան, ինչպէս նաև ձեր հավելվածի և API միջև տրաֆիկը պաշտպանուած են SSL-ով, իսկ ձեր գաղտնաբառը պատահականացված է միակողմանի ալգորիթմով։ Դուք կարող էք միացնել երկաստիճան ինքնորոշումը, ձեր հաշուի մուտքը աւելի պաշտպանուած դարձնելու համար։

+ +
+ +

Տվյալներ պահպանման քաղաքականութիւնը

+ +

Մենք գործադրում ենք բարեխիղճ ջանք՝

+ +
    +
  • պահպանելու սերվերի մատեանի նիշքերը՝ այս սերվերին արուած բոլոր հարցումների IP հասցէներով, այնքանով որքանով նման նիշքերը պահւում են, ոչ աւել քան 90 օր ժամկէտով։
  • +
  • պահպանելու գրանցուած օգտատերի հաշուի հետ կապակցուած IP հասցէները, ոչ աւել քան 12 ամիս ժամկէտով։
  • +
+ +

Դուք կարող էք ուղարկել հայց ներբեռնելու ձեր բովանդակութեան պատճէն՝ ներառեալ ձեր գրառումները, մեդիա կցումները, գլխանկարը և ետնանկարը։

+ +

Դուք կարող էք ընդմիշտ ջնջել ձեր հաշիւը ցանկացած ժամանակ

+ +
+ +

Օգտագործում էք արդյո՞ք թխուկներ

+ +

Այո։ Թխուկները փոքր ֆայլեր են որը կայքը կամ նրան ծառայութեան մատուցողը փոխանցում է ձեր համակարգչի կոշտ սկաւառակին դիտարկչի միջոցով (ձեր թոյլատուութիւն)։ Թխուկները հնարաւորութիւն են տալիս կայքին ճանաչելու ձեր դիտարկիչը, և գրանցուած հաշուի դէպքում՝ նոյնացնելու այն ձեր հաշուի հետ։ + + Մենք օգտագործում ենք թխուկները հասկանալու և պահպանելու ձեր նախընտրանքները ապագայ այցերի համար։

+ +
+ +

Բացայայտում երրորդ կողմերին

+ +

Մենք չենք վաճառում, փոխանակում, կամ այլ կերպ փոխանցում անձնական նոյնացնող տեղեկատուութիւն երրորդ կողմերին։ Սա չի ներառում վստահելի երրորդ կողմերին որոնք օգտնում են կայքի գործարկման, մեր գործունեության ծավալման, կամ ձեզ ծառայելու համար, այնքան ժամանակ որքան այդ երրորդ կողմերը համաձայն են գաղտնի պահել այդ տվյալները։ Մենք կարող ենք նաև հանրայնացնել ձեր տեղեկատուութիւնը երբ հաւատացած ենք որ դրա հանրայնացումը անհրաժեշտ է օրէնքի պահանջների կատարման, կամ կայքի քաղաքականութեան կիրառման համար, կամ պաշտպանելու մեր կամ այլոց իրաւունքները, սեփականութիւնը կամ անվտանգութիւնը։

+ +

Ձեր հանրային բովանդակութիւնը կարող է բեռնուել ցանցի միւս սերվերների կողմից։ Ձեր հանրային և միայն հետևորդներին գրառումները ուղարկւում են այն սերվերներին որտեղ գրանցած են ձեր հետևորդները, և հասցեական հաղորդագրութիւնները ուղարկւում են հասցէատէրերի սերվերներին, այն դէպքում երբ այդ հետևորդները կամ հասցէատէրերը գտնւում են այս սերվերից տարբեր սերվերի վրայ։

+ +

Երբ դուք թոյլատրում էք հավելվածի օգտագործել ձեր հաշիւը, կախուած թույլտվությունների շրջանակից, այն կարող է մուտք ունենալ ձեր հաշիւ հանրային տեղեկատվությանը, ձեր հետևողների ցանկին, ձեր հետևորդներից ցանկին, ցանկերին, ձեր բոլոր գրառումներին, և ձեր հաւանումներին։ Հավելվածները երբեք չենք կարող մուտք ունենալ ձեր էլփոստի հասցէին կամ գաղտնաբառին։

+ +
+ +

Կայքի օգտագործումը երեխաների կողմից

+ +

Եթէ այս սերվերը գտնում է ԵՄ-ում կամ ԵՏԳ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 16 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով GDPR (General Data Protection Regulation) պահանջներին՝ մի օգտագործէք այս կայքը։

+ +

Եթէ այս սերվերը գտնւում է ԱՄՆ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 13 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով COPPA (Children's Online Privacy Protection Act) պահանջներին՝ մի օգտագործէք այս կայքը։ + +

Այլ երկրների իրաւասութիւն շրջաններում օրէնքի պահանջները կարող են տարբերուել։

+ +
+ +

Գաղտնիութեան քաղաքականութեան փոփոխութիւնները

+ +

Եթէ մենք որոշենք փոփոխել մեր գաղտնիութեան քաղաքականութիւնը, ապա այդ փոփոխութիւնները կհրապարակենք այս էջում։

+ +

Այս փաստաթուղթը լիազօրուած է CC-BY-SA լիցենզիայով։ Վերջին թարմացումը՝ 7-ը մարտի 2018

+ +

Փոխառնուած է Discourse-ի գաղտնիութեան քաղաքականութիւնից.

+ +

Ոչ պաշտօնական, ոչ իրաւական թարգմանութիւն

themes: default: Mastodon (Մուգ) mastodon-light: Mastodon (Լուսավոր) @@ -285,13 +838,20 @@ hy: month: "%b %Y" two_factor_authentication: disable: Անջատել - enable: Միացնել - setup: Կարգավորել + enabled: Երկքայլ նոյնականացումը միացուած է user_mailer: warning: title: none: Զգուշացում welcome: tips: Հուշումներ + users: + blocked_email_provider: Սույն էլփոստի տրամադրողը արգելված է + invalid_email: Էլ․ հասցէն անվաւեր է + invalid_email_mx: Այս հասցէն կարծես թէ գոյութիւն չունի + invalid_otp_token: Անվաւեր 2F կոդ + invalid_sign_in_token: Անվաւեր անվտանգութեան կոդ + signed_in_as: Մոտք գործել որպէս․ verification: + explanation_html: Պիտակների յղումների հեղինակութիւնը կարելի է վաւերացնել։ Անհրաժեշտ է որ յղուած կայքը պարունակի յետադարձ յղում ձեր մաստադոնի էջին, որը պէտք է ունենայ rel="me" նիշքը։ Յղման բովանդակութիւնը կարևոր չէ։ Օրինակ՝ verification: Ստուգում diff --git a/config/locales/id.yml b/config/locales/id.yml index ad18cefb7..f73f2afbd 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1,7 +1,7 @@ --- id: about: - about_hashtag_html: Ini adalah toot public yang ditandai dengan #%{hashtag}. Anda bisa berinteraksi dengan mereka jika anda memiliki akun dimanapun di fediverse. + about_hashtag_html: Ini adalah toot publik yang ditandai dengan #%{hashtag}. Anda bisa berinteraksi dengan mereka jika anda memiliki akun dimanapun di fediverse. about_mastodon_html: Mastodon adalah sebuah jejaring sosial terbuka, open-sourcedesentralisasi dari platform komersial, menjauhkan anda resiko dari sebuah perusahaan yang memonopoli komunikasi anda. Pilih server yang anda percayai — apapun yang anda pilih, anda tetap dapat berinteraksi dengan semua orang. Semua orang dapat menjalankan server Mastodon sendiri dan berpartisipasi dalam jejaring sosial dengan mudah. about_this: Tentang server ini active_count_after: aktif @@ -21,7 +21,9 @@ id: federation_hint_html: Dengan akun di %{instance} Anda dapat mengikuti orang di server Mastodon mana pun dan di luarnya. get_apps: Coba aplikasi mobile hosted_on: Mastodon dihosting di %{domain} - instance_actor_flash: Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. + instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. + +' learn_more: Pelajari selengkapnya privacy_policy: Kebijakan Privasi see_whats_happening: Lihat apa yang sedang terjadi @@ -37,8 +39,11 @@ id: domain: Server reason: Alasan rejecting_media: 'Berkas media dari server ini tak akan diproses dan disimpan, dan tak akan ada gambar kecil yang ditampilkan, perlu klik manual utk menuju berkas asli:' + rejecting_media_title: Media yang disaring silenced: 'Pos dari server ini akan disembunyikan dari linimasa publik dan percakapan, dan takkan ada notifikasi yang dibuat dari interaksi pengguna mereka, kecuali Anda mengikuti mereka:' + silenced_title: Server yang dibisukan suspended: 'Takkan ada data yang diproses, disimpan, dan ditukarkan dari server ini, sehingga interaksi atau komunikasi dengan pengguna dari server ini tak mungkin dilakukan:' + suspended_title: Server yang ditangguhkan unavailable_content_html: Mastodon umumnya mengizinkan Anda untuk melihat konten dan berinteraksi dengan pengguna dari server lain di fediverse. Ini adalah pengecualian yang dibuat untuk beberapa server. user_count_after: other: pengguna @@ -86,9 +91,10 @@ id: delete: Hapus destroyed_msg: Catatan moderasi berhasil dihapus! accounts: - add_email_domain_block: Masukkan domain surel ke daftar hitam + add_email_domain_block: Masukkan domain email ke daftar hitam approve: Terima approve_all: Terima semua + approved_msg: Berhasil menerima pendaftaran %{username} are_you_sure: Anda yakin? avatar: Avatar by_domain: Domian @@ -102,8 +108,10 @@ id: confirm: Konfirmasi confirmed: Dikonfirmasi confirming: Mengkonfirmasi + delete: Hapus data deleted: Terhapus demote: Turunkan + destroyed_msg: Data %{username} masuk antrean untuk dihapus segera disable: Nonaktifkan disable_two_factor_authentication: Nonaktifkan 2FA disabled: Dinonaktifkan @@ -114,6 +122,7 @@ id: email_status: Status Email enable: Aktifkan enabled: Diaktifkan + enabled_msg: Berhasil mencairkan akun %{username} followers: Pengikut follows: Mengikut header: Tajuk @@ -129,6 +138,8 @@ id: login_status: Status login media_attachments: Lampiran media memorialize: Ubah menjadi memoriam + memorialized: Dikenang + memorialized_msg: Berhasil mengubah akun %{username} menjadi akun memorial moderation: active: Aktif all: Semua @@ -149,10 +160,14 @@ id: public: Publik push_subscription_expires: Langganan PuSH telah kadaluarsa redownload: Muat ulang profil + redownloaded_msg: Berhasil menyegarkan profil %{username} dari asal reject: Tolak reject_all: Tolak semua + rejected_msg: Berhasil menolak permintaan pendaftaran %{username} remove_avatar: Hapus avatar remove_header: Hapus header + removed_avatar_msg: Berhasil menghapus gambar avatar %{username} + removed_header_msg: Berhasil menghapus gambar header %{username} resend_confirmation: already_confirmed: Pengguna ini sudah dikonfirmasi send: Kirim ulang email konfirmasi @@ -167,8 +182,10 @@ id: staff: Staf user: Pengguna search: Cari - search_same_email_domain: Pengguna lain dengan domain surel yang sama + search_same_email_domain: Pengguna lain dengan domain email yang sama search_same_ip: Pengguna lain dengan IP yang sama + sensitive: Sensitif + sensitized: ditandai sebagai sensitif shared_inbox_url: URL kotak masuk bersama show: created_reports: Laporan yang dibuat oleh akun ini @@ -178,44 +195,58 @@ id: statuses: Status subscribe: Langganan suspended: Disuspen + suspension_irreversible: Data akun ini telah dihapus secara permanen. Anda dapat mengaktifkan akun agar tetap bisa dipakai lagi tapi data sebelumnya tidak dapat dikembalikan. + suspension_reversible_hint_html: Akun telah ditangguhkan, dan data akan dihapus total pada %{date}. Sebelum tanggal tersebut, akun dapat dikembalikan tanpa efek apapun. Jika Anda ingin menghapus segera semua data, Anda dapat melakukan sesuai keterangan di bawah. time_in_queue: Menunggu dalam antrean %{time} title: Akun unconfirmed_email: Email belum dikonfirmasi + undo_sensitized: Batalkan sensitif undo_silenced: Undo mendiamkan undo_suspension: Undo suspen + unsilenced_msg: Berhasil membuka batasan akun %{username} unsubscribe: Berhenti langganan + unsuspended_msg: Berhasil membuka penangguhan akun %{username} username: Nama pengguna + view_domain: Tampilkan ringkasan domain warn: Beri Peringatan web: Web whitelisted: Masuk daftar putih action_logs: action_types: - change_email_user: Ubah Surel untuk Pengguna + assigned_to_self_report: Berikan laporan + change_email_user: Ubah Email untuk Pengguna confirm_user: Konfirmasi Pengguna create_account_warning: Buat Peringatan create_announcement: Buat Pengumuman create_custom_emoji: Buat Emoji Khusus create_domain_allow: Buat Izin Domain create_domain_block: Buat Blokir Domain - create_email_domain_block: Buat Surel Blokir Domain + create_email_domain_block: Buat Email Blokir Domain + create_ip_block: Buat aturan IP demote_user: Turunkan Pengguna destroy_announcement: Hapus Pengumuman destroy_custom_emoji: Hapus Emoji Khusus destroy_domain_allow: Hapus Izin Domain destroy_domain_block: Hapus Blokir Domain - destroy_email_domain_block: Hapus surel blokir domain + destroy_email_domain_block: Hapus email blokir domain + destroy_ip_block: Hapus aturan IP destroy_status: Hapus Status disable_2fa_user: Nonaktifkan 2FA disable_custom_emoji: Nonaktifkan Emoji Khusus disable_user: Nonaktifkan Pengguna enable_custom_emoji: Aktifkan Emoji Khusus enable_user: Aktifkan Pengguna + memorialize_account: Kenang Akun promote_user: Promosikan Pengguna remove_avatar_user: Hapus Avatar reopen_report: Buka Lagi Laporan reset_password_user: Atur Ulang Kata sandi + resolve_report: Selesaikan Laporan + sensitive_account: Tandai media di akun Anda sebagai sensitif silence_account: Bisukan Akun suspend_account: Tangguhkan Akun + unassigned_report: Batalkan Pemberian Laporan + unsensitive_account: Batalkan tanda media di akun Anda dari sensitif unsilence_account: Lepas Status Bisu Akun unsuspend_account: Lepas Status Tangguh Akun update_announcement: Perbarui Pengumuman @@ -223,20 +254,22 @@ id: update_status: Perbarui Status actions: assigned_to_self_report: "%{name} menugaskan laporan %{target} kpd dirinya sendiri" - change_email_user: "%{name} mengubah alamat surel pengguna %{target}" - confirm_user: "%{name} mengonfirmasi alamat surel pengguna %{target}" + change_email_user: "%{name} mengubah alamat email pengguna %{target}" + confirm_user: "%{name} mengonfirmasi alamat email pengguna %{target}" create_account_warning: "%{name} mengirim peringatan untuk %{target}" create_announcement: "%{name} membuat pengumuman baru %{target}" create_custom_emoji: "%{name} mengunggah emoji baru %{target}" create_domain_allow: "%{name} memasukkan ke daftar putih domain %{target}" create_domain_block: "%{name} memblokir domain %{target}" - create_email_domain_block: "%{name} memasukkan ke daftar hitam domain surel %{target}" + create_email_domain_block: "%{name} memblokir domain email %{target}" + create_ip_block: "%{name} membuat aturan untuk IP %{target}" demote_user: "%{name} menurunkan pengguna %{target}" destroy_announcement: "%{name} menghapus pengumuman %{target}" destroy_custom_emoji: "%{name} menghapus emoji %{target}" destroy_domain_allow: "%{name} menghapus domain %{target} dari daftar putih" destroy_domain_block: "%{name} membuka blokir domain %{target}" - destroy_email_domain_block: "%{name} memasukkan ke daftar putih surel domain %{target}" + destroy_email_domain_block: "%{name} membuka blokir domain email %{target}" + destroy_ip_block: "%{name} menghapus aturan untuk IP %{target}" destroy_status: "%{name} menghapus status %{target}" disable_2fa_user: "%{name} mematikan syarat dua faktor utk pengguna %{target}" disable_custom_emoji: "%{name} mematikan emoji %{target}" @@ -249,9 +282,11 @@ id: reopen_report: "%{name} membuka ulang laporan %{target}" reset_password_user: "%{name} mereset kata sandi pengguna %{target}" resolve_report: "%{name} menyelesaikan laporan %{target}" + sensitive_account: "%{name} menandai media %{target} sebagai sensitif" silence_account: "%{name} membungkam akun %{target}" suspend_account: "%{name} menangguhkan akun %{target}" unassigned_report: "%{name} tidak menugaskan laporan %{target}" + unsensitive_account: "%{name} membatalkan tanda media %{target} sebagai sensitif" unsilence_account: "%{name} menghapus bungkaman akun %{target}" unsuspend_account: "%{name} menghapus penangguhan akun %{target}" update_announcement: "%{name} memperbarui pengumuman %{target}" @@ -299,6 +334,7 @@ id: listed: Terdaftar new: title: Tambah emoji kustom baru + not_permitted: Anda tidak diizinkan untuk melakukan tindakan ini overwrite: Timpa shortcode: Kode pendek shortcode_hint: Sedikitnya 2 karakter, hanya karakter alfanumerik dan garis bawah @@ -383,16 +419,16 @@ id: view: Lihat blokir domain email_domain_blocks: add_new: Tambah baru - created_msg: Berhasil menambahkan domain surel ke daftar hitam + created_msg: Berhasil memblokir domain email delete: Hapus - destroyed_msg: Berhasil menghapus domain surel dari daftar hitam + destroyed_msg: Berhasil membuka blokiran domain email domain: Domain - empty: Tidak ada domain surel yang masuk daftar hitam. + empty: Tidak ada domain email yang diblokir. from_html: dari %{domain} new: create: Tambah domain - title: Entri daftar hitam surel baru - title: Daftar hitam surel + title: Blokir domain email baru + title: Domain email terblokir instances: by_domain: Domain delivery_available: Pengiriman tersedia @@ -418,6 +454,21 @@ id: expired: Kedaluwarsa title: Saring title: Undang + ip_blocks: + add_new: Buat aturan + created_msg: Berhasil menambah aturan IP baru + delete: Hapus + expires_in: + '1209600': 2 minggu + '15778476': 6 bulan + '2629746': 1 bulan + '31556952': 1 tahun + '86400': 1 hari + '94670856': 3 tahun + new: + title: Buat aturan IP baru + no_ip_block_selected: Tak ada aturan IP yang berubah karena tak ada yang dipilih + title: Aturan IP pending_accounts: title: Akun tertunda (%{count}) relationships: @@ -621,6 +672,7 @@ id: add_new: Buat alias created_msg: Berhasil membuat alias baru. Sekarang Anda dapat memulai pindah dari akun lama. deleted_msg: Berhasil menghapus alias. Pindah dari akun tersebut ke sini tidak akan lagi bisa dilakukan. + empty: Anda tidak memiliki alias. hint_html: Jika Anda ingin pindah dari akun lain ke sini, Anda dapat membuat alias, yang dilakukan sebelum Anda setuju dengan memindah pengikut dari akun lama ke akun sini. Aksi ini tidak berbahaya dan tidak bisa dikembalikan. Pemindahan akun dimulai dari akun lama. remove: Hapus tautan alias appearance: @@ -662,8 +714,11 @@ id: prefix_sign_up: Daftar ke Mastodon hari ini! suffix: Dengan sebuah akun, Anda dapat mengikuti orang, mengirim pembaruan, dan bertukar pesan dengan pengguna dari server Mastodon mana pun dan lainnya! didnt_get_confirmation: Tidak menerima petunjuk konfirmasi? + dont_have_your_security_key: Tidak memiliki kunci keamanan? forgot_password: Lupa kata sandi? invalid_reset_password_token: Token reset kata sandi tidak valid atau kedaluwarsa. Silakan minta yang baru. + link_to_otp: Masukkan kode dua-faktor dari ponsel Anda atau dari kode pemulihan + link_to_webauth: Gunakan perangkat kunci keamanan Anda login: Masuk logout: Keluar migrate_account: Pindah ke akun berbeda @@ -679,16 +734,17 @@ id: security: Identitas set_new_password: Tentukan kata sandi baru setup: - email_below_hint_html: Jika alamat surel di bawah tidak benar, Anda dapat menggantinya di sini dan menerima konfirmasi surel baru. - email_settings_hint_html: Konfirmasi surel telah dikirim ke %{email}. Jika alamat surel tidak benar, Anda dapat mengubahnya di setelan akun. + email_below_hint_html: Jika alamat email di bawah tidak benar, Anda dapat menggantinya di sini dan menerima email konfirmasi baru. + email_settings_hint_html: Email konfirmasi telah dikirim ke %{email}. Jika alamat email tidak benar, Anda dapat mengubahnya di pengaturan akun. title: Atur status: account_status: Status akun - confirming: Menunggu konfirmasi surel diselesaikan. + confirming: Menunggu konfirmasi email diselesaikan. functional: Akun Anda kini beroperasi penuh. - pending: Lamaran Anda sedang ditinjau oleh staf kami. Ini mungkin butuh beberapa waktu. Anda akan menerima sebuah surel jika lamaran Anda diterima. + pending: Permintaan Anda sedang ditinjau oleh staf kami. Ini mungkin butuh beberapa waktu. Anda akan menerima email jika permintaan Anda diterima. redirecting_to: Akun Anda tidak aktif karena sekarang dialihkan ke %{acct}. trouble_logging_in: Kesulitan masuk? + use_security_key: Gunakan kunci keamanan authorize_follow: already_following: Anda sudah mengikuti akun ini already_requested: Anda sudah mengirimkan permintaan untuk mengikuti akun tersebut @@ -706,9 +762,14 @@ id: hint_html: "Tip: Kami tidak akan meminta kata sandi Anda lagi untuk beberapa jam ke depan." invalid_password: Kata sandi tidak valid prompt: Konfirmasi kata sandi untuk melanjutkan + crypto: + errors: + invalid_key: bukan kunci Ed25519 atau Curve25519 yang valid + invalid_signature: bukan tanda tangan Ed25519 yang valid date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}j" @@ -733,9 +794,9 @@ id: before: 'Sebelum melanjutkan, silakan baca catatan ini dengan hati-hati:' caches: Konten yang telah tersimpan di server lain mungkin akan tetap di sana data_removal: Kiriman Anda dan data lainnya akan dihapus secara permanen - email_change_html: Anda dapat mengubah alamat surel Anda tanpa perlu menghapus akun - email_contact_html: Jika pesan belum diterima, Anda dapat mengirim surel %{email} sebagai bantuan - email_reconfirmation_html: Jika Anda tidak menerima konfirmasi surel, Anda dapat memintanya lagi + email_change_html: Anda dapat mengubah alamat email Anda tanpa perlu menghapus akun + email_contact_html: Jika pesan belum diterima, Anda dapat mengirim email ke %{email} untuk mencari bantuan + email_reconfirmation_html: Jika Anda tidak menerima email konfirmasi, Anda dapat memintanya lagi irreversible: Anda tidak akan bisa lagi mengembalikan atau mengaktifkan kembali akun Anda more_details_html: Lebih detailnya, lihat kebijakan privasi. username_available: Nama pengguna Anda akan tersedia lagi @@ -834,6 +895,8 @@ id: inactive: Tidak aktif publicize_checkbox: 'Dan toot ini:' publicize_toot: 'Terbukti! Saya adalah %{username} di %{service}: %{url}' + remove: Hapus bukti dari akun + removed: Berhasil menghapus bukti dari akun status: Status verifikasi view_proof: Lihat bukti imports: @@ -899,6 +962,7 @@ id: on_cooldown: Anda baru saja memindahkan akun Anda. Fungsi ini akan tersedia kembali %{count} hari lagi. past_migrations: Migrasi lampau proceed_with_move: Pindahkan pengikut + redirected_msg: Akun Anda sedang dialihkan ke %{acct}. redirecting_to: Akun Anda dialihkan ke %{acct}. set_redirect: Atur peralihan warning: @@ -912,6 +976,10 @@ id: redirect: Pemberitahuan peralihan akan dimunculkan pada akun profil Anda dan akun akan dikecualikan dari pencarian moderation: title: Moderasi + move_handler: + carry_blocks_over_text: Pengguna ini pindah dari %{acct}, yang telah Anda blokir sebelumnya. + carry_mutes_over_text: Pengguna ini pindah dari %{acct}, yang telah Anda bisukan sebelumnya. + copy_account_note_text: 'Pengguna ini pindah dari %{acct}, ini dia pesan Anda sebelumnya tentang mereka:' notification_mailer: digest: action: Lihat semua notifikasi @@ -945,7 +1013,7 @@ id: subject: "%{name} mem-boost status anda" title: Boost baru notifications: - email_events: Event untuk notifikasi surel + email_events: Event untuk notifikasi email email_events_hint: 'Pilih event yang ingin Anda terima notifikasinya:' other_settings: Pengaturan notifikasi lain number: @@ -958,6 +1026,14 @@ id: quadrillion: Kdt thousand: Rb trillion: T + otp_authentication: + code_hint: Masukkan kode yang dibuat oleh aplikasi autentikator sebagai konfirmasi + description_html: Jika Anda mengaktifkan autentikasi dua-faktor menggunakan aplikasi autentikator, Anda membutuhkan ponsel untuk masuk akun, yang akan membuat token untuk dimasukkan. + enable: Aktifkan + instructions_html: "Pindai kode QR ini dengan Google Authenticator anda atau aplikasi TOTP lainnya di ponsel anda. Mulai sekarang, aplikasi tersebut akan membuat token yang bisa anda gunakan untuk masuk akun." + manual_instructions: 'Jika anda tidak bisa memindai kode QR dan harus memasukkannya secara manual, ini dia kode rahasia yang harus dimasukkan:' + setup: Persiapan + wrong_code: Kode yang dimasukkan tidak cocok! Apakah waktu server dan waktu di ponsel sudah benar? pagination: newer: Lebih baru next: Selanjutnya @@ -1082,10 +1158,13 @@ id: profile: Profil relationships: Ikuti dan pengikut two_factor_authentication: Autentikasi Two-factor + webauthn_authentication: Kunci keamanan spam_check: spam_detected: Ini adalah laporan otomatis. Spam terdeteksi. statuses: attached: + audio: + other: "%{count} audio" description: 'Terlampir: %{attached}' image: other: "%{count} gambar" @@ -1112,6 +1191,8 @@ id: other: "%{count} memilih" vote: Memilih show_more: Tampilkan selengkapnya + show_newer: Tampilkan lebih baru + show_older: Tampilkan lebih lama show_thread: Tampilkan utas sign_in_to_participate: Masuk untuk mengikuti percakapan title: '%{name}: "%{quote}"' @@ -1129,6 +1210,87 @@ id: tags: does_not_match_previous_name: tidak cocok dengan nama sebelumnya terms: + body_html: | +

Privacy Policy

+

What information do we collect?

+ +
    +
  • Basic account information: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.
  • +
  • Posts, following and other public information: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.
  • +
  • Direct and followers-only posts: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. Please keep in mind that the operators of the server and any receiving server may view such messages, and that recipients may screenshot, copy or otherwise re-share them. Do not share any dangerous information over Mastodon.
  • +
  • IPs and other metadata: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.
  • +
+ +
+ +

What do we use your information for?

+ +

Any of the information we collect from you may be used in the following ways:

+ +
    +
  • To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.
  • +
  • To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.
  • +
  • The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.
  • +
+ +
+ +

How do we protect your information?

+ +

We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

+ +
+ +

What is our data retention policy?

+ +

We will make a good faith effort to:

+ +
    +
  • Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.
  • +
  • Retain the IP addresses associated with registered users no more than 12 months.
  • +
+ +

You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

+ +

You may irreversibly delete your account at any time.

+ +
+ +

Do we use cookies?

+ +

Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

+ +

We use cookies to understand and save your preferences for future visits.

+ +
+ +

Do we disclose any information to outside parties?

+ +

We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

+ +

Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

+ +

When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.

+ +
+ +

Site usage by children

+ +

If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

+ +

If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

+ +

Law requirements can be different if this server is in another jurisdiction.

+ +
+ +

Changes to our Privacy Policy

+ +

If we decide to change our privacy policy, we will post those changes on this page.

+ +

This document is CC-BY-SA. It was last updated March 7, 2018.

+ +

Originally adapted from the Discourse privacy policy.

title: "%{instance} Ketentuan Layanan dan Kebijakan Privasi" themes: contrast: Mastodon (Kontras tinggi) @@ -1139,42 +1301,50 @@ id: default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Masukkan kode yang dibuat oleh app autentikator sebagai konfirmasi - description_html: Jika anda menaktifkan ototentikasi dua faktor, saat login anda harus menggunakan telepon anda untuk membuat token supaya anda bisa masuk. + add: Tambah disable: Matikan - enable: Aktifkan + disabled_success: Autentikasi dua-faktor berhasil dinonaktifkan + edit: Edit enabled: Otentifikasi dua faktor aktif enabled_success: Ototentikasi dua faktor telah diaktifkan generate_recovery_codes: Buat Kode Pemulihan - instructions_html: "Pindai kode QR ini pada Otentikator Google anda atau aplikasi TOTP lainnya di telepon anda. Mulai sekarang, aplikasi tersebut akan membuat token yang bisa anda gunakan untuk login." lost_recovery_codes: Kode pemulihan bisa anda gunakan untuk mendapatkan kembali akses pada akun anda jika anda kehilangan handphone anda. Jika anda kehilangan kode pemulihan, anda bisa membuatnya ulang disini. Kode pemulihan anda yang lama tidak akan bisa digunakan lagi. - manual_instructions: 'Jika anda tidak bisa memindai kode QR dan harus memasukkannya secara manual, ini dia kode yang harus dimasukkan:' + methods: Metode dua-faktor + otp: Aplikasi autentikator recovery_codes: Kode pemulihan cadangan recovery_codes_regenerated: Kode Pemulihan berhasil dibuat ulang recovery_instructions_html: Jika anda kehilangan akses pada handphone anda, anda bisa menggunakan kode pemulihan dibawah ini untuk mendapatkan kembali akses pada akun anda. Simpan kode pemulihan anda baik-baik, misalnya dengan mencetaknya atau menyimpannya bersama dokumen penting lainnya. - setup: Persiapan - wrong_code: Kode yang dimasukkan tidak cocok! Apa waktu server dan waktu di handphone sudah cocok? + webauthn: Kunci keamanan user_mailer: backup_ready: explanation: Cadangan penuh akun Mastodon Anda sudah dapat diunduh! subject: Arsip Anda sudah siap diunduh title: Ambil arsip + sign_in_token: + details: 'Ini dia rincian usaha masuk akun:' + explanation: 'Kami mendeteksi usaha masuk ke akun Anda dari alamat IP tak dikenal. Jika ini Anda, mohon masukkan kode keamanan di bawah pada halaman masuk:' + further_actions: 'Jika ini bukan Anda, mohon ganti kata sandi dan aktifkan autentikasi dua-faktor pada akun Anda. Anda bisa melakukannya di sini:' + subject: Harap konfirmasi usaha masuk akun + title: Usaha masuk akun warning: explanation: disable: Saat akun Anda beku, data Anda tetap utuh. Anda tidak akan dapat melakukan apa-apa sampai akun Anda tidak lagi dikunci. + sensitive: Berkas media dan media tertaut yang Anda unggah akan dianggap sebagai sensitif. silence: Saat akun Anda dibatasi, hanya akun yang Anda ikuti yang dapat melihat toot Anda di server ini. Akun Anda mungkin akan dikecualikan dari daftar publik. Akun lain dapat mengikuti akun Anda secara manual. suspend: Akun Anda telah ditangguhkan. Semua toot dan media yang Anda unggah dihapus secara permanen dari server ini, dan server tempat Anda memiliki pengikut. - get_in_touch: Anda dapat membalas surel ini untuk menghubungi pengurus %{instance}. + get_in_touch: Anda dapat membalas email ini untuk menghubungi pengurus %{instance}. review_server_policies: Tinjau kebijakan server statuses: 'Khususnya untuk:' subject: disable: Akun Anda %{acct} telah dibekukan none: Peringatan untuk %{acct} + sensitive: Postingan media akun Anda %{acct} telah ditandai sebagai sensitif silence: Akun Anda %{acct} telah dibatasi suspend: Akun Anda %{acct} telah ditangguhkan title: disable: Akun dibekukan none: Peringatan + sensitive: Media Anda telah ditandai sebagai sensitif silence: Akun dibatasi suspend: Akun ditangguhkan welcome: @@ -1186,7 +1356,7 @@ id: full_handle: Penanganan penuh Anda full_handle_hint: Ini yang dapat Anda sampaikan kepada teman agar mereka dapat mengirim pesan atau mengikuti Anda dari server lain. review_preferences_action: Ubah preferensi - review_preferences_step: Pastikan Anda telah mengatur preferensi Anda, seperti surel untuk menerima pesan, atau tingkat privasi bawaan untuk kiriman Anda. Jika Anda tidak alergi dengan gerakan gambar, Anda dapat mengaktifkan opsi mainkan otomatis GIF. + review_preferences_step: Pastikan Anda telah mengatur preferensi Anda, seperti email untuk menerima pesan, atau tingkat privasi bawaan untuk postingan Anda. Jika Anda tidak alergi dengan gerakan gambar, Anda dapat mengaktifkan opsi mainkan otomatis GIF. subject: Selamat datang di Mastodon tip_federated_timeline: Linimasa gabungan adalah ruang yang menampilkan jaringan Mastodon. Tapi ini hanya berisi tetangga orang-orang yang Anda ikuti, jadi tidak sepenuhnya komplet. tip_following: Anda secara otomatis mengikuti admin server. Untuk mencari akun-akun yang menarik, silakan periksa linimasa lokal dan gabungan. @@ -1195,12 +1365,34 @@ id: tips: Tips title: Selamat datang, %{name}! users: + blocked_email_provider: Layanan email ini tidak diizinkan follow_limit_reached: Anda tidak dapat mengikuti lebih dari %{limit} orang + generic_access_help_html: Mengalami masalah saat akses akun? Anda mungkin perlu menghubungi %{email} untuk mencari bantuan invalid_email: Alamat email tidak cocok + invalid_email_mx: Alamat email ini sepertinya tidak ada invalid_otp_token: Kode dua faktor tidak cocok + invalid_sign_in_token: Kode keamanan tidak valid otp_lost_help_html: Jika Anda kehilangan akses keduanya, Anda dapat menghubungi %{email} - seamless_external_login: Anda masuk via layanan eksternal, sehingga setelan kata sandi dan surel tidak tersedia. + seamless_external_login: Anda masuk via layanan eksternal, sehingga pengaturan kata sandi dan email tidak tersedia. signed_in_as: 'Masuk sebagai:' + suspicious_sign_in_confirmation: Anda terlihat belum pernah masuk dari perangkat ini, dan sudah lama Anda tidak masuk akun, sehingga kami mengirim kode keamanan ke alamat email Anda untuk mengonfirmasi bahwa ini adalah Anda. verification: explanation_html: 'Anda dapat memverifikasi diri Anda sebagai pemiliki tautan pada metadata profil. Situsweb yang ditautkan haruslah berisi tautan ke profil Mastodon Anda. Tautan tersebut harus memiliki atribut rel="me". Isi teks tautan tidaklah penting. Ini contohnya:' verification: Verifikasi + webauthn_credentials: + add: Tambahkan kunci keamanan baru + create: + error: Terjadi masalah saat menambahkan kunci keamanan. Silakan coba lagi. + success: Kunci keamanan Anda berhasil ditambahkan. + delete: Hapus + delete_confirmation: Yakin ingin menghapus kunci keamanan ini? + description_html: Jika Anda mengaktifkan autentikasi kunci keamanan, proses masuk Anda akan memerlukan salah satu kunci keamanan Anda. + destroy: + error: Terjadi masalah saat menghapus kunci keamanan Anda. Silakan coba lagi. + success: Kunci keamanan Anda berhasil dihapus. + invalid_credential: Kunci keamanan tidak valid + nickname_hint: Masukkan panggilan kunci keamanan baru Anda + not_enabled: Anda belum mengaktifkan WebAuthn + not_supported: Peramban ini tidak mendukung kunci keamanan + otp_required: Untuk menggunakan kunci keamanan harap aktifkan autentikasi dua-faktor. + registered_on: Terdaftar pada %{date} diff --git a/config/locales/io.yml b/config/locales/io.yml index 0b09134bb..a99c4a966 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -98,14 +98,6 @@ io: blocking: Listo de blokusiti following: Listo de sequati upload: Kargar - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day notification_mailer: digest: body: Yen mikra rezumo di to, depos ke tu laste vizitis en %{since} @@ -159,11 +151,8 @@ io: reblogged: diskonocigita sensitive_content: Titiliva kontenajo two_factor_authentication: - description_html: Se tu posibligas dufaktora autentikigo, tu bezonos tua poshtelefonilo por enirar, nam ol kreos nombri, quin tu devos enskribar. disable: Extingar - enable: Acendar generate_recovery_codes: Generate Recovery Codes - instructions_html: "Skanez ta QR-kodexo per Google Authenticator o per simila apliko di tua poshtelefonilo. De lore, la apliko kreos nombri, quin tu devos enskribar." recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe, for example by printing them and storing them with other important documents. users: invalid_email: La retpost-adreso ne esas valida diff --git a/config/locales/is.yml b/config/locales/is.yml index 1da4b69cd..767034e7c 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -63,7 +63,7 @@ is: joined: Gerðist þátttakandi %{date} last_active: síðasta virkni link_verified_on: Eignarhald á þessum tengli var athugað þann %{date} - media: Myndskrár + media: Myndefni moved_html: "%{name} hefur verið færður í %{new_profile_link}:" network_hidden: Þessar upplýsingar ekki tiltækar never_active: Aldrei @@ -98,6 +98,7 @@ is: add_email_domain_block: Útiloka tölvupóstlén approve: Samþykkja approve_all: Samþykkja allt + approved_msg: Tókst að samþykkja skráningu fyrir %{username} are_you_sure: Ertu viss? avatar: Auðkennismynd by_domain: Lén @@ -111,8 +112,10 @@ is: confirm: Staðfesta confirmed: Staðfest confirming: Staðfesti + delete: Eyða gögnum deleted: Eytt demote: Lækka í tign + destroyed_msg: Gögn notandans %{username} eru núna í bið eftir að vera endanlega eytt disable: Gera óvirkt disable_two_factor_authentication: Gera tveggja-þátta auðkenningu óvirka disabled: Óvirkt @@ -123,6 +126,7 @@ is: email_status: Staða tölvupósts enable: Virkja enabled: Virkt + enabled_msg: Tókst að affrysta aðgang notandans %{username} followers: Fylgjendur follows: Fylgist með header: Haus @@ -138,6 +142,8 @@ is: login_status: Staða innskráningar media_attachments: Myndaviðhengi memorialize: Breyta í minningargrein + memorialized: Breytt í minningargrein + memorialized_msg: Tókst að breyta %{username} í minningaraðgang moderation: active: Virkur all: Allt @@ -158,10 +164,14 @@ is: public: Opinber push_subscription_expires: PuSH-áskrift rennur út redownload: Endurlesa notandasnið + redownloaded_msg: Tókst að endurlesa notandasnið %{username} úr upphaflegu sniði reject: Hafna reject_all: Hafna öllu + rejected_msg: Tókst að hafna skráningu fyrir {username} remove_avatar: Fjarlægja auðkennismynd remove_header: Fjarlægja haus + removed_avatar_msg: Tókst að fjarlægja auðkennismynd notandans %{username} + removed_header_msg: Tókst að fjarlægja forsíðumynd notandans %{username} resend_confirmation: already_confirmed: Þessi notandi hefur þegar verið staðfestur send: Senda staðfestingartölvupóst aftur @@ -187,13 +197,18 @@ is: statuses: Stöðufærslur subscribe: Gerast áskrifandi suspended: Í bið + suspension_irreversible: Gögnunum á þessum notandaaðgangi hefur verið eytt óafturkræft. Þú getur tekið aðganginn úr bið svo hægt sé að nota hann, en það mun ekki endurheimta neitt af þeim gögnum sem á honum voru áður. + suspension_reversible_hint_html: Notandaaðgangurin hefur verið settur í biðstöðu og gögnunum á honum verður eytt að fullu þann %{date}. Þangað til væri hægt að endurheimta aðganginn úr bið án nokkurra breytinga. Ef þú vilt eyða öllum gögnum af honum strax, geturðu gert það hér fyrir neðan. time_in_queue: Bíður í biðröð %{time} title: Notandaaðgangar unconfirmed_email: Óstaðfestur tölvupóstur undo_silenced: Hætta að hylja undo_suspension: Taka úr bið + unsilenced_msg: Tókst að fjarlægja takmarkanir af notandaaðgangnum fyrir %{username} unsubscribe: Taka úr áskrift + unsuspended_msg: Tókst að taka notandaaðganginn fyrir %{username} úr bið username: Notandanafn + view_domain: Skoða yfirlit fyrir lén warn: Aðvara web: Vefur whitelisted: Á lista yfir leyft @@ -208,12 +223,14 @@ is: create_domain_allow: Búa til lén leyft create_domain_block: Búa til lén bannað create_email_domain_block: Búa til tölvupóstfang bannað + create_ip_block: Búa til IP-reglu demote_user: Lækka notanda í tign destroy_announcement: Eyða tilkynningu destroy_custom_emoji: Eyða sérsniðnu tjáningartákni destroy_domain_allow: Eyða léni leyft destroy_domain_block: Eyða léni bannað destroy_email_domain_block: Eyða tölvupóstfangi bannað + destroy_ip_block: Eyða IP-reglu destroy_status: Eyða stöðufærslu disable_2fa_user: Gera tveggja-þátta auðkenningu óvirka disable_custom_emoji: Gera sérsniðið tjáningartákn óvirkt @@ -244,12 +261,14 @@ is: create_domain_allow: "%{name} setti lén %{target} á lista yfir leyft" create_domain_block: "%{name} útilokaði lénið %{target}" create_email_domain_block: "%{name} setti póstlén %{target} á lista yfir bannað" + create_ip_block: "%{name} bjó til reglu fyrir IP-vistfangið %{target}" demote_user: "%{name} lækkaði notandann %{target} í tign" destroy_announcement: "%{name} eyddi auglýsingu %{target}" destroy_custom_emoji: "%{name} henti út tjáningartákninu %{target}" destroy_domain_allow: "%{name} fjarlægði lén %{target} af lista yfir leyft" destroy_domain_block: "%{name} aflétti útilokun af léninu %{target}" destroy_email_domain_block: "%{name} setti póstlén %{target} á lista yfir leyft" + destroy_ip_block: "%{name} eyddi reglu fyrir IP-vistfangið %{target}" destroy_status: "%{name} fjarlægði stöðufærslu frá %{target}" disable_2fa_user: "%{name} gerði tveggja-þátta auðkenningu óvirka fyrir notandann %{target}" disable_custom_emoji: "%{name} gerði tjáningartáknið %{target} óvirkt" @@ -434,6 +453,21 @@ is: expired: Útrunnið title: Sía title: Boðsgestir + ip_blocks: + add_new: Búa til reglu + created_msg: Tókst að búa til nýja IP-reglu + delete: Eyða + expires_in: + '1209600': 2 vikur + '15778476': 6 mánuðir + '2629746': 1 mánuður + '31556952': 1 ár + '86400': 1 dagur + '94670856': 3 ár + new: + title: Búa til nýja IP-reglu + no_ip_block_selected: Engum IP-reglum var breytt því ekkert var valið + title: IP-reglur pending_accounts: title: Notendaaðgangar í bið (%{count}) relationships: @@ -681,8 +715,11 @@ is: prefix_sign_up: Skráðu þig á Mastodon strax í dag! suffix: Með notandaaðgangi geturðu fylgst með fólki, sent inn stöðufærslur og skipst á skilaboðum við notendur á hvaða Mastodon-vefþjóni sem er, auk margs fleira! didnt_get_confirmation: Fékkstu ekki leiðbeiningar um hvernig eigi að staðfesta aðganginn? + dont_have_your_security_key: Ertu ekki með öryggislykilinn þinn? forgot_password: Gleymdirðu lykilorðinu? invalid_reset_password_token: Teikn fyrir endurstillingu lykilorðs er ógilt eða útrunnið. Biddu um nýtt teikn. + link_to_otp: Settu inn tveggja-þátta kóða úr farsímanum þínum eða endurheimtukóða + link_to_webauth: Notaðu tæki með öryggislykli login: Skrá inn logout: Skrá út migrate_account: Færa á annan notandaaðgang @@ -708,6 +745,7 @@ is: pending: Umsóknin þín bíður eftir að starfsfólkið okkar fari yfir hana. Það gæti tekið nokkurn tíma. Þú munt fá tölvupóst ef umsóknin er samþykkt. redirecting_to: Notandaaðgangurinn þinn er óvirkur vegna þess að hann endurbeinist á %{acct}. trouble_logging_in: Vandræði við að skrá inn? + use_security_key: Nota öryggislykil authorize_follow: already_following: Þú ert að þegar fylgjast með þessum aðgangi already_requested: Þú ert þegar búin/n að senda fylgjendabeiðni á þennan notanda @@ -732,6 +770,7 @@ is: date: formats: default: "%d. %b, %Y" + with_month_name: "%d. %B, %Y" datetime: distance_in_words: about_x_hours: "%{count}kl." @@ -992,6 +1031,14 @@ is: quadrillion: qi. thousand: þús trillion: tr. + otp_authentication: + code_hint: Settu inn kóðann sem auðkenningarforritið útbjó til staðfestingar + description_html: Ef þú virkjar tveggja-þátta auðkenningu með auðkenningarforriti, mun innskráning krefjast þess að þú hafir símann þinn við hendina, með honum þarf að útbúa öryggisteikn sem þú þarft að setja inn. + enable: Virkja + instructions_html: "Skannaðu þennar QR-kóða inn í Google Authenticator eða álíka TOTP-forrit á símanum þínum. Héðan í frá mun það forrit útbúa teikn sem þú verður að setja inn til að geta skráð þig inn." + manual_instructions: 'Ef þú getur ekki skannað QR-kóðann og verður að setja hann inn handvirkt, þá er hér leyniorðið á textaformi:' + setup: Setja upp + wrong_code: Kóðinn sem þú settir inn er ógildur! Eru klukkur netþjónsins og tækisins réttar? pagination: newer: Nýrra next: Næsta @@ -1115,7 +1162,8 @@ is: preferences: Kjörstillingar profile: Notandasnið relationships: Fylgist með og fylgjendur - two_factor_authentication: Teggja-þátta auðkenning + two_factor_authentication: Tveggja-þátta auðkenning + webauthn_authentication: Öryggislyklar spam_check: spam_detected: Þetta er sjálfvirk kæra. Ruslpóstur hefur fundist. statuses: @@ -1262,21 +1310,20 @@ is: default: "%d. %b, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Settu inn kóðann sem auðkenningarforritið útbjó til staðfestingar - description_html: Ef þú virkjar tvíþátta auðkenningu mun innskráning krefjast þess að þú hafir símann þinn við hendina, með honum þarf að útbúa öryggisteikn sem þú þarft að setja inn. + add: Bæta við disable: Gera óvirkt - enable: Virkja + disabled_success: Það tókst að gera tveggja-þátta auðkenningu óvirka + edit: Breyta enabled: Tveggja-þátta auðkenning er virk enabled_success: Það tókst að virkja tveggja-þátta auðkenningu generate_recovery_codes: Útbúa endurheimtukóða - instructions_html: "Skannaðu þennar QR-kóða inn í Google Authenticator eða álíka TOTP-forrit á símanum þínum. Héðan í frá mun það forrit útbúa teikn sem þú verður að setja inn til að geta skráð þig inn." lost_recovery_codes: Endurheimtukóðar gera þér kleift að fá aftur samband við notandaaðganginn þinn ef þú tapar símanum þínum. Ef þú aftur hefur tapað endurheimtukóðunum, geturðu endurgert þá hér. Gömlu endurheimtukóðarnir verða þá ógiltir. - manual_instructions: 'Ef þú getur ekki skannað QR-kóðann og verður að setja hann inn handvirkt, þá er hér leyniorðið á textaformi:' + methods: Tveggja-þátta auðkenningaraðferðir + otp: Auðkenningarforrit recovery_codes: Kóðar fyrir endurheimtingu öryggisafrits recovery_codes_regenerated: Það tókst að endurgera endurheimtukóða recovery_instructions_html: Ef þú tapar símanum þínum geturðu notað einn af endurheimtukóðunum hér fyrir neðan til að fá aftur samband við notandaaðganginn þinn. Geymdu endurheimtukóðana á öruggum stað. Sem dæmi gætirðu prentað þá út og geymt með öðrum mikilvægum skjölum. - setup: Setja upp - wrong_code: Kóðinn sem þú settir inn er ógildur! Eru klukkur netþjónsins og tækisins réttar? + webauthn: Öryggislyklar user_mailer: backup_ready: explanation: Þú baðst um fullt öryggisafrit af Mastodon notandaaðgangnum þínum. Það er núna tilbúið til niðurhals! @@ -1324,9 +1371,11 @@ is: tips: Ábendingar title: Velkomin/n um borð, %{name}! users: + blocked_email_provider: Þessi tölvupóstþjónusta er ekki leyfileg follow_limit_reached: Þú getur ekki fylgst með fleiri en %{limit} aðilum generic_access_help_html: Vandamál við að tengjast aðgangnum þínum? Þú getur sett þig í samband við %{email} til að fá aðstoð invalid_email: Tölvupóstfangið er ógilt + invalid_email_mx: Tölvupóstfangið virðist ekki vera til invalid_otp_token: Ógildur tveggja-þátta kóði invalid_sign_in_token: Ógildur öryggiskóði otp_lost_help_html: Ef þú hefur misst aðganginn að hvoru tveggja, geturðu sett þig í samband við %{email} @@ -1336,3 +1385,20 @@ is: verification: explanation_html: 'Þú getur vottað að þú sért eigandi og ábyrgur fyrir tenglunum í lýsigögnum notandasniðsins þíns. Til að það virki, þurfa vefsvæðin sem vísað er í að innihalda tengil til baka í Mastodon-notandasniðið. Tengillinn sem vísar til baka verður að vera með rel="me" eigindi. Textinn í tenglinum skiptir ekki máli. Hérna er dæmi:' verification: Sannprófun + webauthn_credentials: + add: Bæta við nýjum öryggislykli + create: + error: Það kom upp villa við að bæta við öryggislyklinum þínum. Reyndu aftur. + success: Tókst að bæta við öryggislyklinum þínum. + delete: Eyða + delete_confirmation: Ertu viss um að þú viljir eyða þessum öryggislykli? + description_html: Ef þú virkjar auðkenningu með öryggislykli mun innskráning krefjast þess að þú einn af öryggislyklunum þínum. + destroy: + error: Það kom upp villa við að eyða öryggislyklinum þínum. Reyndu aftur. + success: Tókst að eyða öryggislyklinum þínum. + invalid_credential: Ógildur öryggislykill + nickname_hint: Settu inn stuttnefni fyrir nýja öryggislykilinn þinn + not_enabled: Þú hefur ennþá ekki virkjað WebAuthn + not_supported: Þessi vafri styður ekki öryggislykla + otp_required: Til að nota öryggislykla skaltu fyrst virkja tveggja-þátta auðkenningu. + registered_on: Nýskráður %{date} diff --git a/config/locales/it.yml b/config/locales/it.yml index 30c7e3c66..563f80eb1 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -98,6 +98,7 @@ it: add_email_domain_block: Inserisci il dominio email nella blacklist approve: Approva approve_all: Approva tutto + approved_msg: Richiesta di registrazione di %{username} approvata are_you_sure: Sei sicuro? avatar: Immagine di profilo by_domain: Dominio @@ -111,8 +112,10 @@ it: confirm: Conferma confirmed: Confermato confirming: Confermando + delete: Elimina dati deleted: Cancellato demote: Declassa + destroyed_msg: I dati di %{username} sono ora in coda per essere eliminati tra poco disable: Disabilita disable_two_factor_authentication: Disabilita l'autenticazione a due fattori disabled: Disabilitato @@ -123,6 +126,7 @@ it: email_status: Stato email enable: Abilita enabled: Abilitato + enabled_msg: L'account di %{username} è stato scongelato followers: Follower follows: Segue header: Intestazione @@ -138,6 +142,8 @@ it: login_status: Stato login media_attachments: Media allegati memorialize: Trasforma in memoriam + memorialized: Memorializzato + memorialized_msg: Hai trasformato %{username} in un account commemorativo moderation: active: Attivo all: Tutto @@ -158,10 +164,14 @@ it: public: Pubblico push_subscription_expires: Sottoscrizione PuSH scaduta redownload: Aggiorna avatar + redownloaded_msg: Il profilo di %{username} è stato aggiornato dall'origine reject: Rifiuta reject_all: Rifiuta tutto + rejected_msg: Richiesta di registrazione di %{username} rifiutata remove_avatar: Rimuovi avatar remove_header: Rimuovi intestazione + removed_avatar_msg: Immagine dell'avatar di %{username} eliminata + removed_header_msg: Immagine di intestazione di %{username} eliminata resend_confirmation: already_confirmed: Questo utente è già confermato send: Reinvia email di conferma @@ -178,6 +188,8 @@ it: search: Cerca search_same_email_domain: Altri utenti con lo stesso dominio e-mail search_same_ip: Altri utenti con lo stesso IP + sensitive: Sensibile + sensitized: contrassegnato come sensibile shared_inbox_url: URL Inbox Condiviso show: created_reports: Rapporti creati da questo account @@ -187,13 +199,19 @@ it: statuses: Stati subscribe: Sottoscrivi suspended: Sospeso + suspension_irreversible: I dati di questo account sono stati cancellati in modo irreversibile. È possibile annullare la sospensione dell'account per renderlo utilizzabile, ma non recupererà alcuno dei dati precedenti. + suspension_reversible_hint_html: L'account è stato sospeso e i dati saranno completamente eliminati il %{date}. Fino ad allora, l'account può essere ripristinato senza effetti negativi. Se si desidera eliminare immediatamente tutti i dati dell'account, è possibile farlo qui sotto. time_in_queue: Attesa in coda %{time} title: Account unconfirmed_email: Email non confermata + undo_sensitized: Annulla sensibile undo_silenced: Rimuovi silenzia undo_suspension: Rimuovi sospensione + unsilenced_msg: Sono stati tolti i limiti dell'account di %{username} unsubscribe: Annulla l'iscrizione + unsuspended_msg: È stata eliminata la sospensione dell'account di %{username} username: Nome utente + view_domain: Visualizza riepilogo per dominio warn: Avverti web: Web whitelisted: Nella whitelist @@ -208,12 +226,14 @@ it: create_domain_allow: Crea permesso di dominio create_domain_block: Crea blocco di dominio create_email_domain_block: Crea blocco dominio e-mail + create_ip_block: Crea regola IP demote_user: Degrada l'utente destroy_announcement: Cancella annuncio destroy_custom_emoji: Cancella emoji personalizzata destroy_domain_allow: Cancella permesso di dominio destroy_domain_block: Cancella blocco di dominio destroy_email_domain_block: Cancella blocco dominio e-mail + destroy_ip_block: Elimina regola IP destroy_status: Cancella stato disable_2fa_user: Disabilita l'autenticazione a due fattori disable_custom_emoji: Disabilita emoji personalizzata @@ -226,9 +246,11 @@ it: reopen_report: Riapri report reset_password_user: Reimposta password resolve_report: Risolvi report + sensitive_account: Contrassegna il media nel tuo profilo come sensibile silence_account: Silenzia account suspend_account: Sospendi account unassigned_report: Disassegna report + unsensitive_account: Deseleziona il media nel tuo profilo come sensibile unsilence_account: De-silenzia account unsuspend_account: Annulla la sospensione dell'account update_announcement: Aggiorna annuncio @@ -244,12 +266,14 @@ it: create_domain_allow: "%{name} ha messo il dominio %{target} nella whitelist" create_domain_block: "%{name} ha bloccato il dominio %{target}" create_email_domain_block: "%{name} ha messo il dominio email %{target} nella blacklist" + create_ip_block: "%{name} ha creato la regola per l'IP %{target}" demote_user: "%{name} ha degradato l'utente %{target}" destroy_announcement: "%{name} ha eliminato l'annuncio %{target}" destroy_custom_emoji: "%{name} ha distrutto l'emoji %{target}" destroy_domain_allow: "%{name} ha tolto il dominio %{target} dalla whitelist" destroy_domain_block: "%{name} ha sbloccato il dominio %{target}" destroy_email_domain_block: "%{name}ha messo il dominio email %{target} nella whitelist" + destroy_ip_block: "%{name} ha eliminato la regola per l'IP %{target}" destroy_status: "%{name} ha eliminato lo status di %{target}" disable_2fa_user: "%{name} ha disabilitato l'obbligo dei due fattori per l'utente %{target}" disable_custom_emoji: "%{name} ha disabilitato l'emoji %{target}" @@ -262,9 +286,11 @@ it: reopen_report: "%{name} ha riaperto il rapporto %{target}" reset_password_user: "%{name} ha reimpostato la password dell'utente %{target}" resolve_report: "%{name} ha risolto il rapporto %{target}" + sensitive_account: "%{name} ha contrassegnato il media di %{target} come sensibile" silence_account: "%{name} ha silenziato l'account di %{target}" suspend_account: "%{name} ha sospeso l'account di %{target}" unassigned_report: "%{name} report non assegnato %{target}" + unsensitive_account: "%{name} ha deselezionato il media di %{target} come sensibile" unsilence_account: "%{name} ha de-silenziato l'account di %{target}" unsuspend_account: "%{name} ha annullato la sospensione dell'account di %{target}" update_announcement: "%{name} ha aggiornato l'annuncio %{target}" @@ -434,6 +460,21 @@ it: expired: Scaduto title: Filtro title: Inviti + ip_blocks: + add_new: Crea regola + created_msg: Nuova regola IP aggiunta + delete: Elimina + expires_in: + '1209600': 2 settimane + '15778476': 6 mesi + '2629746': 1 mese + '31556952': 1 anno + '86400': 1 giorno + '94670856': 3 anni + new: + title: Crea una nuova regola IP + no_ip_block_selected: Nessuna regola IP è stata modificata poiché nessuna è stata selezionata + title: Regole IP pending_accounts: title: Account in attesa (%{count}) relationships: @@ -683,8 +724,11 @@ it: prefix_sign_up: Iscriviti oggi a Mastodon! suffix: Con un account, sarai in grado di seguire le persone, pubblicare aggiornamenti e scambiare messaggi con gli utenti da qualsiasi server di Mastodon e altro ancora! didnt_get_confirmation: Non hai ricevuto le istruzioni di conferma? + dont_have_your_security_key: Non hai la tua chiave di sicurezza? forgot_password: Hai dimenticato la tua password? invalid_reset_password_token: Il token di reimpostazione della password non è valido o è scaduto. Per favore richiedine uno nuovo. + link_to_otp: Inserisci un codice a due fattori dal tuo telefono o un codice di recupero + link_to_webauth: Usa il tuo dispositivo chiave di sicurezza login: Entra logout: Esci da Mastodon migrate_account: Sposta ad un account differente @@ -710,6 +754,7 @@ it: pending: La tua richiesta è in attesa di esame da parte del nostro staff. Potrebbe richiedere un po' di tempo. Riceverai una e-mail se la richiesta è approvata. redirecting_to: Il tuo account è inattivo perché attualmente reindirizza a %{acct}. trouble_logging_in: Problemi di accesso? + use_security_key: Usa la chiave di sicurezza authorize_follow: already_following: Stai già seguendo questo account already_requested: Hai già mandato una richiesta di seguire questo account @@ -734,6 +779,7 @@ it: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count} ore" @@ -994,6 +1040,14 @@ it: quadrillion: P thousand: k trillion: T + otp_authentication: + code_hint: Inserisci il codice generato dall'app di autenticazione per confermare + description_html: Se abiliti l'autenticazione a due fattori utilizzando un'app di autenticazione, per accedere sarà necessario essere in possesso del telefono, che genererà dei codici per l'accesso. + enable: Abilita + instructions_html: "Scansiona questo codice QR in Google Authenticator o in un'applicazione TOTP simile sul tuo telefono. D'ora in poi, quell'app genererà i codici che dovrai inserire quando accedi." + manual_instructions: 'Se non riesci a scansionare il codice QR e hai bisogno di inserirlo manualmente, questo è il codice segreto in chiaro:' + setup: Configura + wrong_code: Il codice inserito non è valido! Controlla che l'ora del server e l'ora del dispositivo siano esatte. pagination: newer: Più recente next: Avanti @@ -1118,6 +1172,7 @@ it: profile: Profilo relationships: Follows e followers two_factor_authentication: Autenticazione a due fattori + webauthn_authentication: Chiavi di sicurezza spam_check: spam_detected: Questo è un rapporto automatico. È stato rilevato dello spam. statuses: @@ -1156,6 +1211,8 @@ it: other: "%{count} voti" vote: Vota show_more: Mostra di più + show_newer: Mostra più nuovi + show_older: Mostra più vecchi show_thread: Mostra thread sign_in_to_participate: Accedi per partecipare alla conversazione title: '%{name}: "%{quote}"' @@ -1267,21 +1324,20 @@ it: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Inserisci il codice generato dalla tua app di autenticazione - description_html: Se abiliti l'autorizzazione a due fattori, entrare nel tuo account ti richiederà di avere vicino il tuo telefono, il quale ti genererà un codice per eseguire l'accesso. + add: Aggiungi disable: Disabilita - enable: Abilita + disabled_success: Autenticazione a due fattori disattivata + edit: Modifica enabled: È abilitata l'autenticazione a due fattori enabled_success: Autenticazione a due fattori attivata con successo generate_recovery_codes: Genera codici di recupero - instructions_html: "Scannerizza questo QR code con Google Authenticator o un'app TOTP simile sul tuo telefono. Da ora in poi, quell'applicazione genererà codici da inserire necessariamente per eseguire l'accesso." lost_recovery_codes: I codici di recupero ti permettono di accedere al tuo account se perdi il telefono. Se hai perso i tuoi codici di recupero, puoi rigenerarli qui. Quelli vecchi saranno annullati. - manual_instructions: 'Se non puoi scannerizzare il QR code e hai bisogno di inserirlo manualmente, questo è il codice segreto in chiaro:' + methods: Metodi a due fattori + otp: App di autenticazione recovery_codes: Codici di recupero del backup recovery_codes_regenerated: I codici di recupero sono stati rigenerati recovery_instructions_html: Se perdi il telefono, puoi usare uno dei codici di recupero qui sotto per riottenere l'accesso al tuo account. Conserva i codici di recupero in un posto sicuro. Ad esempio puoi stamparli e conservarli insieme ad altri documenti importanti. - setup: Configura - wrong_code: Il codice inserito non è corretto! Assicurati che l'orario del server e l'orario del dispositivo siano corretti. + webauthn: Chiavi di sicurezza user_mailer: backup_ready: explanation: Hai richiesto un backup completo del tuo account Mastodon. È pronto per essere scaricato! @@ -1296,6 +1352,7 @@ it: warning: explanation: disable: Mentre il tuo account è congelato, i tuoi dati dell'account rimangono intatti, ma non potrai eseguire nessuna azione fintanto che non viene sbloccato. + sensitive: I tuoi file multimediali caricati e multimedia collegati saranno trattati come sensibili. silence: Mentre il tuo account è limitato, solo le persone che già ti seguono possono vedere i tuoi toot su questo server, e potresti essere escluso da vari elenchi pubblici. Comunque, altri possono manualmente seguirti. suspend: Il tuo account è stato sospeso, e tutti i tuoi toot ed i tuoi file media caricati sono stati irreversibilmente rimossi da questo server, e dai server dove avevi dei seguaci. get_in_touch: Puoi rispondere a questa email per entrare in contatto con lo staff di %{instance}. @@ -1304,11 +1361,13 @@ it: subject: disable: Il tuo account %{acct} è stato congelato none: Avviso per %{acct} + sensitive: Il multimedia in pubblicazione del tuo profilo %{acct} è stato contrassegnato come sensibile silence: Il tuo account %{acct} è stato limitato suspend: Il tuo account %{acct} è stato sospeso title: disable: Account congelato none: Avviso + sensitive: Il tuo multimedia è stato contrassegnato come sensibile silence: Account limitato suspend: Account sospeso welcome: @@ -1329,9 +1388,11 @@ it: tips: Suggerimenti title: Benvenuto a bordo, %{name}! users: + blocked_email_provider: Questo provider di posta non è consentito follow_limit_reached: Non puoi seguire più di %{limit} persone generic_access_help_html: Problemi nell'accesso al tuo account? Puoi contattare %{email} per assistenza invalid_email: L'indirizzo email inserito non è valido + invalid_email_mx: L'indirizzo e-mail non sembra esistere invalid_otp_token: Codice d'accesso non valido invalid_sign_in_token: Codice di sicurezza non valido otp_lost_help_html: Se perdessi l'accesso ad entrambi, puoi entrare in contatto con %{email} @@ -1341,3 +1402,20 @@ it: verification: explanation_html: 'Puoi certificare te stesso come proprietario dei link nei metadati del tuo profilo. Per farlo, il sito a cui punta il link deve contenere un link che punta al tuo profilo Mastodon. Il link di ritorno deve avere l''attributo rel="me". Il testo del link non ha importanza. Ecco un esempio:' verification: Verifica + webauthn_credentials: + add: Aggiungi una nuova chiave di sicurezza + create: + error: Si è verificato un problema durante l'aggiunta della chiave di sicurezza. Dovresti riprovare. + success: La chiave di sicurezza è stata aggiunta. + delete: Cancella + delete_confirmation: Sei sicuro di voler cancellare questa chiave di sicurezza? + description_html: Se abiliti l'autenticazione con chiave di sicurezza, per accedere sarà necessario utilizzare una delle tue chiavi di sicurezza. + destroy: + error: Si è verificato un problema durante la cancellazione della chiave di sicurezza. Dovresti riprovare. + success: La chiave di sicurezza è stata cancellata. + invalid_credential: Chiave di sicurezza non valida + nickname_hint: Inserisci il soprannome della tua nuova chiave di sicurezza + not_enabled: Non hai ancora abilitato WebAuthn + not_supported: Questo browser non supporta le chiavi di sicurezza + otp_required: Per utilizzare le chiavi di sicurezza, prima abilita l'autenticazione a due fattori. + registered_on: Registrato il %{date} diff --git a/config/locales/ja.yml b/config/locales/ja.yml index fd9ec9427..682e672d1 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -21,7 +21,9 @@ ja: federation_hint_html: "%{instance} のアカウントひとつでどんなMastodon互換サーバーのユーザーでもフォローできるでしょう。" get_apps: モバイルアプリを試す hosted_on: Mastodon hosted on %{domain} - instance_actor_flash: このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 + instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 + +' learn_more: もっと詳しく privacy_policy: プライバシーポリシー see_whats_happening: やりとりを見てみる @@ -92,6 +94,7 @@ ja: add_email_domain_block: メールドメインブロックに追加 approve: 承認 approve_all: すべて承認 + approved_msg: "%{username} の登録申請を承認しました" are_you_sure: 本当に実行しますか? avatar: アイコン by_domain: ドメイン @@ -107,6 +110,7 @@ ja: confirming: 確認中 deleted: 削除済み demote: 降格 + destroyed_msg: "%{username} のデータは完全に削除されるよう登録されました" disable: 無効化 disable_two_factor_authentication: 二段階認証を無効にする disabled: 無効 @@ -117,6 +121,7 @@ ja: email_status: メールアドレスの状態 enable: 有効化 enabled: 有効 + enabled_msg: "%{username} の無効化を解除しました" followers: フォロワー数 follows: フォロー数 header: ヘッダー @@ -132,6 +137,7 @@ ja: login_status: ログイン media_attachments: 添付されたメディア memorialize: 追悼アカウント化 + memorialized_msg: "%{username} を追悼アカウント化しました" moderation: active: アクティブ all: すべて @@ -154,8 +160,11 @@ ja: redownload: プロフィールを更新 reject: 却下 reject_all: すべて却下 + rejected_msg: "%{username} の登録申請を却下しました" remove_avatar: アイコンを削除 remove_header: ヘッダーを削除 + removed_avatar_msg: "%{username} のアバター画像を削除しました" + removed_header_msg: "%{username} のヘッダー画像を削除しました" resend_confirmation: already_confirmed: メールアドレスは確認済みです send: 確認メールを再送 @@ -183,6 +192,8 @@ ja: statuses: トゥート数 subscribe: 購読する suspended: 停止済み + suspension_irreversible: このアカウントのデータは削除され元に戻せなくなります。後日アカウントの凍結を解除することはできますがデータは元に戻せません。 + suspension_reversible_hint_html: アカウントは停止されており、データは %{date} に完全に削除されます。それまではアカウントを元に戻すことができます。今すぐ完全に削除したい場合は以下から行うことができます。 time_in_queue: "%{time} 待ち" title: アカウント unconfirmed_email: 確認待ちのメールアドレス @@ -205,19 +216,21 @@ ja: create_domain_allow: 連合を許可 create_domain_block: ドメインブロックを作成 create_email_domain_block: メールドメインブロックを作成 + create_ip_block: IPルールを作成 demote_user: ユーザーを降格 destroy_announcement: お知らせを削除 destroy_custom_emoji: カスタム絵文字を削除 destroy_domain_allow: 連合許可を外す destroy_domain_block: ドメインブロックを削除 destroy_email_domain_block: メールドメインブロックを削除 + destroy_ip_block: IPルールを削除 destroy_status: トゥートを削除 disable_2fa_user: 二段階認証を無効化 disable_custom_emoji: カスタム絵文字を無効化 disable_user: ユーザーを無効化 enable_custom_emoji: カスタム絵文字を有効化 enable_user: ユーザーを有効化 - memorialize_account: 追悼アカウント + memorialize_account: 追悼アカウント化 promote_user: ユーザーを昇格 remove_avatar_user: アイコンを削除 reopen_report: 通報を再度開く @@ -243,12 +256,14 @@ ja: create_domain_allow: "%{name} さんが %{target} の連合を許可しました" create_domain_block: "%{name} さんがドメイン %{target} をブロックしました" create_email_domain_block: "%{name} さんが %{target} をメールドメインブロックに追加しました" + create_ip_block: "%{name} さんが IP %{target} のルールを作成しました" demote_user: "%{name} さんが %{target} さんを降格しました" destroy_announcement: "%{name} さんがお知らせ %{target} を削除しました" destroy_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を削除しました" destroy_domain_allow: "%{name} さんが %{target} の連合許可を外しました" destroy_domain_block: "%{name} さんがドメイン %{target} のブロックを外しました" destroy_email_domain_block: "%{name} さんが %{target} をメールドメインブロックから外しました" + destroy_ip_block: "%{name} さんが IP %{target} のルールを削除しました" destroy_status: "%{name} さんが %{target} さんのトゥートを削除しました" disable_2fa_user: "%{name} さんが %{target} さんの二段階認証を無効化しました" disable_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を無効化しました" @@ -433,6 +448,21 @@ ja: expired: 期限切れ title: フィルター title: 招待 + ip_blocks: + add_new: ルールを作成 + created_msg: IPルールを追加しました + delete: 削除 + expires_in: + '1209600': 2週間 + '15778476': 6ヶ月 + '2629746': 1ヶ月 + '31556952': 1年 + '86400': 1日 + '94670856': 3年 + new: + title: 新規IPルール + no_ip_block_selected: 何も選択されていないためIPルールを変更しませんでした + title: IPルール pending_accounts: title: 承認待ちアカウント (%{count}) relationships: @@ -680,6 +710,7 @@ ja: didnt_get_confirmation: 確認メールを受信できませんか? forgot_password: パスワードをお忘れですか? invalid_reset_password_token: パスワードリセットトークンが正しくないか期限切れです。もう一度リクエストしてください。 + link_to_otp: 携帯電話から二段階認証コードを入力するか、リカバリーコードを入力してください login: ログイン logout: ログアウト migrate_account: 別のアカウントに引っ越す @@ -985,6 +1016,10 @@ ja: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: 続行するには認証アプリで表示されたコードを入力してください + setup: セットアップ + wrong_code: コードが間違っています。サーバーとデバイスの時計にずれがあるかもしれません。 pagination: newer: 新しいトゥート next: 次 @@ -1109,6 +1144,7 @@ ja: profile: プロフィール relationships: フォロー・フォロワー two_factor_authentication: 二段階認証 + webauthn_authentication: セキュリティキー spam_check: spam_detected: これは自動的に作成された通報です。スパムが検出されています。 statuses: @@ -1141,6 +1177,8 @@ ja: other: "%{count}票" vote: 投票 show_more: もっと見る + show_newer: 新しいものから表示 + show_older: 古いものから表示 show_thread: スレッドを表示 sign_in_to_participate: ログインして会話に参加 title: '%{name}: "%{quote}"' @@ -1249,21 +1287,19 @@ ja: default: "%Y年%m月%d日 %H:%M" month: "%Y年 %b" two_factor_authentication: - code_hint: 続行するには認証アプリで表示されたコードを入力してください - description_html: "二段階認証を有効にするとログイン時、認証アプリからコードを入力する必要があります。" + add: 追加 disable: 無効化 - enable: 有効 + edit: 編集 enabled: 二段階認証は有効になっています enabled_success: 二段階認証が有効になりました generate_recovery_codes: リカバリーコードを生成 - instructions_html: "Google Authenticatorか、もしくはほかのTOTPアプリでこのQRコードをスキャンしてください。これ以降、ログインするときはそのアプリで生成されるコードが必要になります。" lost_recovery_codes: リカバリーコードを使用すると携帯電話を紛失した場合でもアカウントにアクセスできるようになります。 リカバリーコードを紛失した場合もここで再生成することができますが、古いリカバリーコードは無効になります。 - manual_instructions: 'QRコードがスキャンできず、手動での登録を希望の場合はこのシークレットコードを利用してください。:' + methods: 方式 + otp: 認証アプリ recovery_codes: リカバリーコード recovery_codes_regenerated: リカバリーコードが再生成されました recovery_instructions_html: 携帯電話を紛失した場合、以下の内どれかのリカバリーコードを使用してアカウントへアクセスすることができます。リカバリーコードは大切に保全してください。たとえば印刷してほかの重要な書類と一緒に保管することができます。 - setup: 初期設定 - wrong_code: コードが間違っています。サーバー上の時間とデバイス上の時間が一致していますか? + webauthn: セキュリティキー user_mailer: backup_ready: explanation: Mastodonアカウントのアーカイブを受け付けました。今すぐダウンロードできます! @@ -1277,23 +1313,23 @@ ja: title: ログインを検出しました warning: explanation: - disable: アカウントが凍結されている間、データはそのまま残りますが、凍結が解除されるまでは何の操作もできません。 - sensitive: あなたのアップロードしたメディアファイルとリンク先のメディアは、閲覧注意として扱われます。 - silence: あなたのアカウントは制限されていますが、あなたをフォローしているユーザーのみ、このサーバー上の投稿を見ることができます。そしてあなたは様々な公開リストから除外されるかもしれません。ただし、他のユーザーは手動であなたをフォローすることができます。 - suspend: あなたのアカウントは停止されています。あなたの投稿とアップロードされたメディアファイルは、このサーバーとあなたのフォロワーが参加していたサーバーから完全に削除されました。 + disable: あなたのアカウントはログインが禁止され使用できなくなりました。しかしアカウントのデータはそのまま残っています。 + sensitive: アップロードされたメディアファイルとリンクされたメディアは閲覧注意として扱われます。 + silence: あなたのアカウントは制限されましたがそのまま使用できます。ただし既にフォローしている人はあなたのトゥートを見ることができますが、様々な公開タイムラインには表示されない場合があります。また他のユーザーは今後も手動であなたをフォローすることができます。 + suspend: あなたのアカウントは使用できなくなりプロフィールやその他データにアクセスできなくなりました。アカウントが完全に削除されるまではログインしてデータのエクスポートをリクエストできます。証拠隠滅を防ぐため一部のデータは削除されず残ります。 get_in_touch: このメールに返信することで %{instance} のスタッフと連絡を取ることができます。 review_server_policies: サーバーのポリシーを確認 statuses: '特に次のトゥート:' subject: disable: あなたのアカウント %{acct} は凍結されました none: "%{acct} に対する警告" - sensitive: あなたのアカウント %{acct} の投稿メディアは閲覧注意とマークされました + sensitive: あなたのアカウント %{acct} が投稿したメディアは閲覧注意にマークされました silence: あなたのアカウント %{acct} はサイレンスにされました suspend: あなたのアカウント %{acct} は停止されました title: disable: アカウントが凍結されました none: 警告 - sensitive: あなたのメディアが閲覧注意とマークされました + sensitive: あなたのメディアが閲覧注意に指定されました silence: アカウントがサイレンスにされました suspend: アカウントが停止されました welcome: @@ -1314,9 +1350,11 @@ ja: tips: 豆知識 title: ようこそ、%{name}! users: + blocked_email_provider: このメールプロバイダは許可されていません follow_limit_reached: あなたは現在 %{limit} 人以上フォローできません generic_access_help_html: アクセスできませんか? %{email} に問い合わせることができます。 invalid_email: メールアドレスが無効です + invalid_email_mx: メールアドレスが存在しないようです invalid_otp_token: 二段階認証コードが間違っています invalid_sign_in_token: 無効なセキュリティコードです otp_lost_help_html: どちらも使用できない場合、%{email} に連絡を取ると解決できるかもしれません @@ -1326,3 +1364,20 @@ ja: verification: explanation_html: プロフィール内のリンクの所有者であることを認証することができます。そのためにはリンクされたウェブサイトにMastodonプロフィールへのリンクが含まれている必要があります。リンクにはrel="me"属性を必ず与えなければなりません。リンクのテキストについては重要ではありません。以下は例です: verification: 認証 + webauthn_credentials: + add: セキュリティキーを追加 + create: + error: セキュリティキーの追加中に問題が発生しました。もう一度お試しください。 + success: セキュリティキーを追加しました。 + delete: 削除 + delete_confirmation: 本当にこのセキュリティキーを削除しますか? + description_html: "セキュリティキーによる認証を有効にすると、ログイン時にセキュリティキーを要求するようにできます。" + destroy: + error: セキュリティキーの削除中に問題が発生しました。もう一度お試しください。 + success: セキュリティキーを削除しました。 + invalid_credential: セキュリティキーが間違っています + nickname_hint: セキュリティキーの名前を入力してください + not_enabled: まだセキュリティキーを有効にしていません + not_supported: このブラウザはセキュリティキーに対応していないようです + otp_required: セキュリティキーを使用するには、まず二段階認証を有効にしてください。 + registered_on: "%{date} に登録" diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 3a3a33858..523d2bdd5 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -752,21 +752,14 @@ ka: default: მასტოდონი mastodon-light: მასტოდონი (ღია) two_factor_authentication: - code_hint: დასამოწმებლად შეიყვანეთ თქვენი აუტენტიფიკატორ აპლიკაციისგან გენერირებული კოდი - description_html: თუ ჩართავთ მეორე-ფაქტორის აუტენტიფიკაციას, შესვლისას აუცილებელი იქნება ფლობდეთ ტელეფონს, რომელიც დააგენერირებს შესვლის ტოკენებს. disable: გათიშვა - enable: ჩართვა enabled: მეორე-ფაქტორის აუტენტიფიკაცია ჩართულია enabled_success: მეორე-ფაქტორის აუტენტიფიკაცია წარმატებით ჩაირთო generate_recovery_codes: აღდგენის კოდების გენერაცია - instructions_html: "დაასკანირეთ ეს ქრ კოდი გუგლ აუტენტიფიკატორში ან მსგავს ტოტპ აპლიკაციაში თქვენს ტელეფონზე. ამიერიდან, ეს აპლიკაცია დააგენერირებს ტოკენებს მაშინ როდესაც დაგჭირდებათ ავტორიზაცია." lost_recovery_codes: აღდგენის კოდები უფლებას გაძლევთ მიიღოთ ხელმეორე წვდომა თქვენი ანგარიშისადმი თუ დაკარგავთ ტელეფონს. თუ დაკარგეთ აღდგენის კოდები, მათ რეგენერაცია შეგიძლიათ აქ. ძველი აღდგენის კოდები აღარ იქნება ვალიდური. - manual_instructions: 'თუ ვერ ასკანირებთ ქრ კოდს და საჭიროებთ მის მექანიკურ რეჟიმში შეყვანას, აქ არის ჩვეულებრივი ტექსტური საიდუმლო:' recovery_codes: გაუწიეთ აღდგენის კოდებს რეზერვაცია recovery_codes_regenerated: აღგენის კოდების რეგენერაცია წარმატებით შესრულდა recovery_instructions_html: თუ როდესმე დაკარგავთ წვდომას თქვენს ტელეფონთან, შეგიძლიათ ქვემოთ მოცემული აღდგენის კოდები გამოიყენოთ, რათა მოიპოვოთ ხელმეორე წვდომა თქვენი ანგარიშისადმი. იქონიეთ აღდგენის კოდები დაცულად. მაგალითისთვის, შეგიძლიათ ამობეჭდოთ და შეინახოთ სხვა საბუთებთან ერთად. - setup: დაყენება - wrong_code: შეყვანილი კოდი არ იყო სწორი! სწორია სერვერის და მოწყობილობის დრო? user_mailer: backup_ready: explanation: თქვენ მოითხოვეთ თქვენი მასტოდონის ანგარიშის სრული რეზერვაცია. ის ახლა უკვე მზადაა გადმოსაწერად! diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 07fd3e3df..24c40e8f1 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -35,6 +35,7 @@ kab: domain: Aqeddac reason: Taɣzent silenced: 'Tisuffɣin ara d-yekken seg yiqeddacen-agi ad ttwaffrent deg tsuddmin tizuyaz d yidiwenniten, daɣen ur ttilin ara telɣa ɣef usedmer n yimseqdacen-nsen, skud ur ten-teḍfiṛeḍ ara:' + silenced_title: Imeẓla yeggugmen unavailable_content_html: Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi. user_count_after: one: amseqdac @@ -42,6 +43,7 @@ kab: user_count_before: Amagger n what_is_mastodon: D acu-t Maṣṭudun? accounts: + choices_html: 'Afranen n %{name}:' follow: Ḍfeṛ followers: one: Umeḍfaṛ @@ -66,6 +68,7 @@ kab: admin: Anedbal bot: Aṛubut group: Agraw + moderator: Atrar unavailable: Ur nufi ara amaɣnu-a unfollow: Ur ṭṭafaṛ ara admin: @@ -88,6 +91,7 @@ kab: confirm: Sentem confirmed: Yettwasentem confirming: Asentem + delete: Kkes isefka deleted: Yettwakkes demote: Sider s weswir disable: Gdel @@ -104,6 +108,7 @@ kab: follows: Yeṭafaṛ header: Ixef inbox_url: URL n yinekcam + invited_by: Inced-it-id ip: Tansa IP joined: Ikcemed deg location: @@ -123,6 +128,7 @@ kab: most_recent_ip: Tansa IP taneggarut no_account_selected: Ula yiwen n umiḍan ur yettwabeddel acku ula yiwen ur yettwafren no_limits_imposed: War tilisa + not_subscribed: Ur imulteɣ ara pending: Ittraǧu acegger perform_full_suspension: Ḥbes di leεḍil promote: Ali s uswir @@ -139,13 +145,19 @@ kab: success: Imayl n usentem yettwazen mebla ugur! reset: Wennez reset_password: Beddel awal uffir + resubscribe: Ales ajerred role: Tisirag roles: admin: Anedbal + moderator: Aseɣyad staff: Tarbaɛt user: Amseqdac search: Nadi search_same_ip: Imseqdacen-nniḍen s tansa IP am tinn-ik + shared_inbox_url: Bḍu URL n tbewwaḍt + show: + created_reports: Eg ineqqisen + targeted_reports: Yettwazen uneqqis sɣur wiyaḍ silence: Sgugem silenced: Yettwasgugem statuses: Tisuffɣin @@ -161,31 +173,47 @@ kab: whitelisted: Deg tebdert tamellalt action_logs: action_types: + change_email_user: Beddel imayl i useqdac + confirm_user: Sentem aseqdac + create_custom_emoji: Rnu imujit udmawan + create_ip_block: Rnu alugen n IP + destroy_ip_block: Kkes alugen n IP disable_2fa_user: Gdel 2FA enable_user: Rmed aseqdac remove_avatar_user: Kkes avaṭar reset_password_user: Ales awennez n wawal n uffir silence_account: Sgugem amiḍan actions: + assigned_to_self_report: "%{name} imudd aneqqis %{target} i yiman-nsen" change_email_user: "%{name} ibeddel imayl n umseqdac %{target}" confirm_user: "%{name} isentem tansa imayl n umseqdac %{target}" create_account_warning: "%{name} yuzen alɣu i %{target}" + create_announcement: "%{name} yerna taselɣut tamaynut %{target}" create_custom_emoji: "%{name} yessuli-d imujiten imaynuten %{target}" create_domain_allow: "%{name} yerna taɣult %{target} ɣer tebdart tamellalt" create_domain_block: "%{name} yesseḥbes taɣult %{target}" create_email_domain_block: "%{name} yerna taɣult n imayl %{target} ɣer tebdart taberkant" + create_ip_block: "%{name} rnu alugen i IP %{target}" + demote_user: "%{name} iṣubb-d deg usellun aseqdac %{target}" + destroy_announcement: "%{name} yekkes taselɣut %{target}" destroy_custom_emoji: "%{name} ihudd imuji %{target}" destroy_domain_allow: "%{name} yekkes taɣult %{target} seg tebdart tamellalt" destroy_domain_block: "%{name} yekkes aseḥbes n taɣult %{target}" destroy_email_domain_block: "%{name} yerna taɣult n imayl %{target} ɣer tebdart tamellalt" + destroy_ip_block: "%{name} kkes alugen i IP %{target}" destroy_status: "%{name} yekkes tasuffeɣt n %{target}" disable_custom_emoji: "%{name} yessens imuji %{target}" disable_user: "%{name} yessens tuqqna i umseqdac %{target}" enable_custom_emoji: "%{name} yermed imuji %{target}" enable_user: "%{name} yermed tuqqna i umseqdac %{target}" memorialize_account: "%{name} yerra amiḍan n %{target} d asebter n usmekti" + promote_user: "%{name} yerna deg usellun n useqdac %{target}" + remove_avatar_user: "%{name} yekkes avaṭar n %{target}" + reset_password_user: "%{name} iwennez awal uffir n useqdac %{target}" + resolve_report: "%{name} yefra aneqqis %{target}" silence_account: "%{name} yesgugem amiḍan n %{target}" unsilence_account: "%{name} yekkes asgugem n umiḍan n %{target}" + update_announcement: "%{name} ileqqem taselɣut %{target}" update_custom_emoji: "%{name} yelqem imuji %{target}" update_status: "%{name} yelqem tasuffeɣt n %{target}" deleted_status: "(tasuffeɣt tettwakkes)" @@ -250,6 +278,7 @@ kab: destroyed_msg: Taγult-a tettwakkes seg umuγ amellal undo: Kkes seg tebdart tamellalt domain_blocks: + add_new: Rni iḥder amaynut n taɣult domain: Taγult new: severity: @@ -280,6 +309,7 @@ kab: other: "%{count} n yimiḍanen i yettwassnen" moderation: all: Akk + limited: Yettwasgugem private_comment: Awennit uslig public_comment: Awennit azayez title: Tamatut @@ -293,8 +323,25 @@ kab: expired: Ifat title: Asizdeg title: Iɛaruḍen + ip_blocks: + add_new: Rnu alugen + created_msg: Yettwarna ulugen amaynut n IP akken iwata + delete: Kkes + expires_in: + '1209600': 2 yimalasen + '15778476': 6 wayyuren + '2629746': 1 wayyur + '31556952': 1 useggas + '86400': 1 wass + '94670856': 3 yiseggasen + new: + title: Rnu alugen n IP amaynut + no_ip_block_selected: Ula yiwen n ulugen n IP ur yettwabeddel acku ula yiwen ur yettwafren + title: Ilugan n IP pending_accounts: title: Imiḍanen yettrajun (%{count}) + relationships: + title: Assaɣen n %{acct} relays: add_new: Rnu anmegli amaynut delete: Kkes @@ -314,6 +361,7 @@ kab: reports: one: "%{count} uneqqis" other: "%{count} n ineqqisen" + action_taken_by: Tigawt yettwaṭṭfen sɣur are_you_sure: Tetḥaq-eḍ? comment: none: Ula yiwen @@ -371,12 +419,14 @@ kab: name: Ahacṭag reviewed: Yettwacegger title: Ihacṭagen + unique_uses_today: "%{count} i d-yeffen ass-a" title: Tadbelt warning_presets: add_new: Rnu amaynut delete: Kkes admin_mailer: new_report: + body: "%{reporter} yettwazen ɣef %{target}" subject: Aneqqis amaynut i %{instance} (#%{id}) appearance: discovery: Asnirem @@ -389,6 +439,8 @@ kab: view: 'Ẓaṛ:' view_profile: Ssken-d amaɣnu view_status: Ssken-d tasuffiɣt + applications: + token_regenerated: Ajuṭu n unekcum yettusirew i tikkelt-nniḍen akken iwata auth: apply_for_account: Suter asnebgi change_password: Awal uffir @@ -396,6 +448,7 @@ kab: checkbox_agreement_without_rules_html: Qebleγ tiwtilin n useqdec delete_account: Kkes amiḍan description: + prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!" prefix_sign_up: Zeddi di Maṣṭudun assa! forgot_password: Tettud awal-ik uffir? login: Qqen @@ -406,6 +459,7 @@ kab: cas: CAS saml: SAML register: Jerred + registration_closed: "%{instance} ur yeqbil ara imttekkiyen imaynuten" reset_password: Wennez awal uffir security: Taγellist set_new_password: Egr-d awal uffir amaynut @@ -415,6 +469,7 @@ kab: account_status: Addad n umiḍan functional: Amiḍan-inek·m yettwaheyya. trouble_logging_in: Γur-k uguren n tuqqna? + use_security_key: Seqdec tasarut n teɣlist authorize_follow: already_following: Teṭafareḍ ya kan amiḍan-a follow: Ḍfeṛ @@ -430,6 +485,7 @@ kab: date: formats: default: "%d %b %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}isr" @@ -446,6 +502,9 @@ kab: x_seconds: "%{count}tas" deletes: proceed: Kkes amiḍan + warning: + username_available: Isem-ik·im n useqdac ad yuɣal yella i tikkelt-nniḍen + username_unavailable: Isem-ik·im n useqdac ad yeqqim ulac-it directories: directory: Akaram n imaγnuten explore_mastodon: Snirem %{title} @@ -522,6 +581,9 @@ kab: '86400': 1 wass expires_in_prompt: Werǧin invited_by: 'Tettwaɛraḍeḍ s ɣur:' + max_uses: + one: 1 uuseqdec + other: "%{count} yiseqdac" max_uses_prompt: Ulac talast table: expires_at: Ad ifat di @@ -534,16 +596,24 @@ kab: digest: action: Wali akk tilγa mention: 'Yuder-ik-id %{name} deg:' + subject: + one: "1 wulɣu seg tirza-inek·inm taneqqarut ar tura \U0001F418" + other: "%{count} ilɣa imaynuten seg tirza-nek·inem taneggarut ar tura \U0001F418" + favourite: + subject: "{name} yesmenyaf addad-ik·im" follow: body: "%{name} yeṭafaṛ-ik-id tura!" subject: "%{name} yeṭafaṛ-ik-id tura" title: Ameḍfaṛ amaynut follow_request: + body: "{name} yessuter-d ad ak·akem-yeḍfer" title: Asuter amaynut n teḍfeṛt mention: action: Err body: 'Yuder-ik·ikem-id %{name} deg:' subject: Yuder-ik·ikem-id %{name} + reblog: + subject: "%{name} yesselha addad-ik·im" notifications: other_settings: Iγewwaṛen nniḍen n tilγa number: @@ -551,20 +621,26 @@ kab: decimal_units: format: "%n%u" units: + billion: AṬ million: A + thousand: K trillion: Am + otp_authentication: + enable: Rmed + setup: Sbadu pagination: newer: Amaynut next: Wayed older: Aqbuṛ prev: Win iɛeddan - truncate: d + truncate: "…" preferences: other: Wiyaḍ relationships: activity: Armud n umiḍan followers: Imeḍfaṛen following: Yeṭafaṛ + invited: Yettwancad last_active: Armud aneggaru most_recent: Melmi kan moved: Igujj @@ -613,7 +689,7 @@ kab: firefox_os: Firefox OS ios: iOS linux: Linux - mac: Mac + mac: macOS windows: Windows windows_mobile: Windows Mobile windows_phone: Tiliγri Windows Phone @@ -631,10 +707,12 @@ kab: export: Taktert n yisefka import: Kter import_and_export: Taktert d usifeḍ + migrate: Tunigin n umiḍan notifications: Tilγa preferences: Imenyafen profile: Ameγnu relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ + webauthn_authentication: Tisura n teɣlist statuses: attached: audio: @@ -680,12 +758,19 @@ kab: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: + add: Rnu disable: Gdel - enable: Rmed + disabled_success: Asesteb s snat n tarrayin yensa akken iwata + edit: Ẓreg + otp: Asnas n usesteb + webauthn: Tisura n teɣlist user_mailer: warning: title: + disable: Amiḍan i igersen none: Γur-wat + silence: Amiḍan yesɛa talast + suspend: Amiḍan yettwaḥebsen welcome: full_handle: Tansa umiḍan-ik takemmalit review_preferences_action: Beddel imenyafen @@ -696,3 +781,6 @@ kab: signed_in_as: 'Teqqneḍ amzun d:' verification: verification: Asenqed + webauthn_credentials: + add: Rnu tasarut n teɣlist tamaynut + delete: Kkes diff --git a/config/locales/kk.yml b/config/locales/kk.yml index bb7a57e87..5f0da1888 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -519,6 +519,9 @@ kk: trends: desc_html: Бұрын қарастырылған хэштегтерді қазіргі уақытта трендте көпшілікке көрсету title: Тренд хештегтер + site_uploads: + delete: Жүктелген файлды өшір + destroyed_msg: Жүктелген файл сәтті өшірілді! statuses: back_to_account: Аккаунт бетіне оралы batch: @@ -1166,21 +1169,14 @@ kk: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Растау үшін түпнұсқалықты растау бағдарламасы арқылы жасалған кодты енгізіңіз - description_html: "екі факторлы түпнұсқалықты растауды қоссаңыз, кіру үшін сізге телефонға кіруіңізді талап етеді, сізге арнайы токен беріледі." disable: Ажырату - enable: Қосу enabled: Екі-факторлы авторизация қосылған enabled_success: Екі-факторлы авторизация сәтті қосылды generate_recovery_codes: Қалпына келтіру кодтарын жасаңыз - instructions_html: "Мына QR кодты Google Authenticator арқылы скандаңыз немесе ұқсас TOTP бағдарламалары арқылы. Одан кейін желіге кіру үшін токендер берілетін болады." lost_recovery_codes: Қалпына келтіру кодтары телефонды жоғалтсаңыз, тіркелгіңізге қайта кіруге мүмкіндік береді. Қалпына келтіру кодтарын жоғалтсаңыз, оларды осында қалпына келтіре аласыз. Ескі қалпына келтіру кодтары жарамсыз болады. - manual_instructions: 'Егер сіз QR-кодты сканерлей алмасаңыз және оны қолмен енгізуіңіз қажет болса, мұнда қарапайым нұсқаулық:' recovery_codes: Қалпына келтіру кодтарын резервтік көшіру recovery_codes_regenerated: Қалпына келтіру кодтары қалпына келтірілді recovery_instructions_html: Егер сіз телефонға кіруді жоғалтсаңыз, тіркелгіңізге кіру үшін төмендегі қалпына келтіру кодтарының бірін пайдалануға болады. Қалпына келтіру кодтарын қауіпсіз ұстаңыз . Мысалы, оларды басып шығарып, оларды басқа маңызды құжаттармен сақтауға болады. - setup: Орнату - wrong_code: Енгізілген код жарамсыз! Сервер уақыты мен құрылғының уақыты дұрыс па? user_mailer: backup_ready: explanation: Сіз Mastodon аккаунтыңыздың толық мұрағатын сұрадыңыз. Қазір жүктеуге дайын! diff --git a/config/locales/kn.yml b/config/locales/kn.yml index 25bee609a..d44eb868f 100644 --- a/config/locales/kn.yml +++ b/config/locales/kn.yml @@ -10,11 +10,3 @@ kn: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 1742e5d08..ef91cfbbe 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -94,6 +94,7 @@ ko: add_email_domain_block: 이 이메일 도메인을 차단하기 approve: 승인 approve_all: 모두 승인 + approved_msg: 성공적으로 %{username}의 가입 신청서를 승인했습니다 are_you_sure: 정말로 실행하시겠습니까? avatar: 아바타 by_domain: 도메인 @@ -107,8 +108,10 @@ ko: confirm: 확인 confirmed: 확인됨 confirming: 확인 중 + delete: 데이터 식제 deleted: 삭제됨 demote: 강등 + destroyed_msg: "%{username}의 데이터는 곧 삭제되도록 큐에 들어갔습니다" disable: 비활성화 disable_two_factor_authentication: 2단계 인증을 비활성화 disabled: 비활성화된 @@ -119,6 +122,7 @@ ko: email_status: 이메일 상태 enable: 활성화 enabled: 활성 + enabled_msg: "%{username}의 계정을 성공적으로 얼리기 해제하였습니다" followers: 팔로워 수 follows: 팔로잉 수 header: 헤더 @@ -134,6 +138,8 @@ ko: login_status: 로그인 상태 media_attachments: 첨부된 미디어 memorialize: 메모리엄으로 전환 + memorialized: 기념비화 됨 + memorialized_msg: 성공적으로 %{username}를 기념비 계정으로 전환하였습니다 moderation: active: 활동 all: 전체 @@ -154,10 +160,14 @@ ko: public: 전체 공개 push_subscription_expires: PuSH 구독 기간 만료 redownload: 프로필 업데이트 + redownloaded_msg: 성공적으로 %{username}의 프로필을 원본으로부터 업데이트 하였습니다 reject: 거부 reject_all: 모두 거부 + rejected_msg: 성공적으로 %{username}의 가입 신청서를 반려하였습니다 remove_avatar: 아바타 지우기 remove_header: 헤더 삭제 + removed_avatar_msg: 성공적으로 %{username}의 아바타 이미지를 삭제하였습니다 + removed_header_msg: 성공적으로 %{username}의 헤더 이미지를 삭제하였습니다 resend_confirmation: already_confirmed: 이 사용자는 이미 확인되었습니다 send: 다시 확인 이메일 @@ -174,6 +184,8 @@ ko: search: 검색 search_same_email_domain: 같은 이메일 도메인을 가진 다른 사용자들 search_same_ip: 같은 IP의 다른 사용자들 + sensitive: 민감함 + sensitized: 민감함으로 설정됨 shared_inbox_url: 공유된 inbox URL show: created_reports: 이 계정에서 제출된 신고 @@ -183,13 +195,19 @@ ko: statuses: 툿 수 subscribe: 구독하기 suspended: 정지 됨 + suspension_irreversible: 이 계정의 데이터는 복구할 수 없도록 삭제 됩니다. 계정을 정지 해제함으로서 계정을 다시 사용 가능하게 할 수 있지만 이전에 삭제한 어떤 데이터도 복구되지 않습니다. + suspension_reversible_hint_html: 계정이 정지되었습니다, 그리고 %{date}에 데이터가 완전히 삭제될 것입니다. 그 때까지는 어떤 안 좋은 효과 없이 계정이 복구 될 수 있습니다. 만약 지금 당장 계정의 모든 데이터를 삭제하고 싶다면, 아래에서 행할 수 있습니다. time_in_queue: "%{time}동안 기다림" title: 계정 unconfirmed_email: 미확인 된 이메일 주소 + undo_sensitized: 민감함으로 설정 취소 undo_silenced: 침묵 해제 undo_suspension: 정지 해제 + unsilenced_msg: 성공적으로 %{username} 계정을 제한 해제했습니다 unsubscribe: 구독 해제 + unsuspended_msg: 성공적으로 %{username} 계정을 정지 해제했습니다 username: 아이디 + view_domain: 도메인의 요약 보기 warn: 경고 web: 웹 whitelisted: 허용 목록 @@ -204,12 +222,14 @@ ko: create_domain_allow: 도메인 허용 생성 create_domain_block: 도메인 차단 추가 create_email_domain_block: 이메일 도메인 차단 생성 + create_ip_block: IP 규칙 만들기 demote_user: 사용자 강등 destroy_announcement: 공지사항 삭제 destroy_custom_emoji: 커스텀 에모지 삭제 destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 destroy_email_domain_block: 이메일 도메인 차단 삭제 + destroy_ip_block: IP 규칙 삭제 destroy_status: 게시물 삭제 disable_2fa_user: 2단계 인증 비활성화 disable_custom_emoji: 커스텀 에모지 비활성화 @@ -222,9 +242,11 @@ ko: reopen_report: 신고 다시 열기 reset_password_user: 암호 재설정 resolve_report: 신고 처리 + sensitive_account: 당신의 계정의 미디어를 민감함으로 표시 silence_account: 계정 침묵 suspend_account: 계정 정지 unassigned_report: 신고 맡기 취소 + unsensitive_account: 당신의 계정의 미디어를 민감함으로 표시하지 않음 unsilence_account: 계정 침묵 취소 unsuspend_account: 계정 정지 취소 update_announcement: 공지사항 업데이트 @@ -237,15 +259,17 @@ ko: create_account_warning: "%{name}가 %{target}에게 경고 보냄" create_announcement: "%{name} 님이 새 공지 %{target}을 만들었습니다" create_custom_emoji: "%{name}이 새로운 에모지 %{target}를 추가했습니다" - create_domain_allow: "%{name} 님이 %{target} 도메인을 화이트리스트에 넣었습니다" + create_domain_allow: "%{name} 님이 %{target} 도메인을 허용리스트에 넣었습니다" create_domain_block: "%{name}이 도메인 %{target}를 차단했습니다" create_email_domain_block: "%{name}이 이메일 도메인 %{target}를 차단했습니다" + create_ip_block: "%{name} 님이 IP 규칙 %{target}을 만들었습니다" demote_user: "%{name}이 %{target}을 강등했습니다" destroy_announcement: "%{name} 님이 공지 %{target}을 삭제했습니다" destroy_custom_emoji: "%{name}이 %{target} 에모지를 삭제함" - destroy_domain_allow: "%{name} 님이 %{target} 도메인을 화이트리스트에서 제거하였습니다" + destroy_domain_allow: "%{name} 님이 %{target} 도메인을 허용리스트에서 제거하였습니다" destroy_domain_block: "%{name}이 도메인 %{target}의 차단을 해제했습니다" - destroy_email_domain_block: "%{name}이 이메일 도메인 %{target}을 화이트리스트에 넣었습니다" + destroy_email_domain_block: "%{name}이 이메일 도메인 %{target}을 허용리스트에 넣었습니다" + destroy_ip_block: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다" destroy_status: "%{name}이 %{target}의 툿을 삭제했습니다" disable_2fa_user: "%{name}이 %{target}의 2FA를 비활성화 했습니다" disable_custom_emoji: "%{name}이 에모지 %{target}를 비활성화 했습니다" @@ -258,9 +282,11 @@ ko: reopen_report: "%{name}이 리포트 %{target}을 다시 열었습니다" reset_password_user: "%{name}이 %{target}의 암호를 초기화했습니다" resolve_report: "%{name}이 %{target} 신고를 처리됨으로 변경하였습니다" + sensitive_account: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다" silence_account: "%{name}이 %{target}의 계정을 침묵시켰습니다" suspend_account: "%{name}이 %{target}의 계정을 정지시켰습니다" unassigned_report: "%{name}이 리포트 %{target}을 할당 해제했습니다" + unsensitive_account: "%{name} 님이 %{target}의 미디어를 민감하지 않음으로 표시했습니다" unsilence_account: "%{name}이 %{target}에 대한 침묵을 해제했습니다" unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다" update_announcement: "%{name} 님이 공지 %{target}을 갱신했습니다" @@ -346,9 +372,9 @@ ko: week_interactions: 이번 주의 상호작용 week_users_active: 이번 주의 활성 사용자 week_users_new: 이번 주의 신규 유저 - whitelist_mode: 화이트리스트 모드 + whitelist_mode: 제한된 페더레이션 모드 domain_allows: - add_new: 허용 된 도메인 + add_new: 도메인 허용 created_msg: 도메인이 성공적으로 허용 목록에 추가되었습니다 destroyed_msg: 도메인이 허용 목록에서 제거되었습니다 undo: 허용 목록에서 제외 @@ -430,6 +456,21 @@ ko: expired: 만료됨 title: 필터 title: 초대 + ip_blocks: + add_new: 규칙 만들기 + created_msg: 성공적으로 새 IP 규칙을 만들었습니다 + delete: 삭제 + expires_in: + '1209600': 2 주 + '15778476': 6 달 + '2629746': 1 달 + '31556952': 1 년 + '86400': 1 일 + '94670856': 3 년 + new: + title: 새 IP 규칙 만들기 + no_ip_block_selected: 아무 것도 선택 되지 않아 어떤 IP 규칙도 변경 되지 않았습니다 + title: IP 규칙들 pending_accounts: title: 대기중인 계정 (%{count}) relationships: @@ -447,7 +488,7 @@ ko: pending: 릴레이의 승인 대기중 save_and_enable: 저장하고 활성화 setup: 릴레이 연결 설정 - signatures_not_enabled: 시큐어모드나 화이트리스트모드를 사용하고 있다면 릴레이는 제대로 동작하지 않을 것입니다 + signatures_not_enabled: 시큐어모드나 제한된 페더레이션 모드를 사용하고 있다면 릴레이는 제대로 동작하지 않을 것입니다 status: 상태 title: 릴레이 report_notes: @@ -675,8 +716,11 @@ ko: prefix_sign_up: 마스토돈에 가입하세요! suffix: 계정 하나로 사람들을 팔로우 하고, 게시물을 작성하며 마스토돈을 포함한 다른 어떤 서버의 유저와도 메시지를 주고 받을 수 있습니다! didnt_get_confirmation: 확인 메일을 받지 못하셨습니까? + dont_have_your_security_key: 보안 키가 없습니까? forgot_password: 비밀번호를 잊어버리셨습니까? invalid_reset_password_token: 암호 리셋 토큰이 올바르지 못하거나 기간이 만료되었습니다. 다시 요청해주세요. + link_to_otp: 휴대폰의 2차 코드 혹은 복구 키를 입력해 주세요 + link_to_webauth: 보안 키 장치 사용 login: 로그인 logout: 로그아웃 migrate_account: 계정 옮기기 @@ -702,6 +746,7 @@ ko: pending: 당신의 가입 신청은 스태프의 검사를 위해 대기중입니다. 이것은 시간이 다소 소요됩니다. 가입 신청이 승인 될 경우 이메일을 받게 됩니다. redirecting_to: 계정이 %{acct}로 리다이렉트 중이기 때문에 비활성 상태입니다. trouble_logging_in: 로그인 하는데 문제가 있나요? + use_security_key: 보안 키 사용 authorize_follow: already_following: 이미 이 계정을 팔로우 하고 있습니다 already_requested: 이미 이 계정에게 팔로우 요청을 보냈습니다 @@ -726,6 +771,7 @@ ko: date: formats: default: "%Y-%b-%d" + with_month_name: "%Y-%B-%d" datetime: distance_in_words: about_x_hours: "%{count}시간" @@ -982,6 +1028,14 @@ ko: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: 확인을 위해 인증 애플리케이션에 생성된 코드를 입력해 주십시오 + description_html: 인증기 앱으로 2단계 인증을 활성화 하면 로그인 시 입력 할 토큰을 생성해 주는 전화기가 필요합니다. + enable: 활성화 + instructions_html: "Google Authenticator, 또는 타 TOTP 애플리케이션에서 이 QR 코드를 스캔해 주십시오. 이후 로그인 시에는 이 애플리케이션에서 생성되는 코드가 필요합니다." + manual_instructions: 'QR 코드를 스캔할 수 없어 수동으로 등록을 원하시는 경우 이 비밀 코드를 사용해 주십시오:' + setup: 설정 + wrong_code: 코드가 올바르지 않습니다! 서버와 휴대전화 간의 시각이 일치하나요? pagination: newer: 새로운 툿 next: 다음 @@ -1048,40 +1102,40 @@ ko: activity: 마지막 활동 browser: 브라우저 browsers: - alipay: 알리페이 - blackberry: 블랙베리 - chrome: 크롬 - edge: 엣지 - electron: 일렉트론 - firefox: 파이어폭스 + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: 알 수 없는 브라우저 - ie: IE - micro_messenger: 마이크로메신저 - nokia: 노키아 S40 Ovi 브라우저 - opera: 오페라 + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi 브라우저 + opera: Opera otter: Otter phantom_js: PhantomJS qq: QQ 브라우저 - safari: 사파리 + safari: Safari uc_browser: UC브라우저 - weibo: 웨이보 + weibo: Weibo current_session: 현재 세션 description: "%{platform}의 %{browser}" explanation: 내 마스토돈 계정에 현재 로그인 중인 웹 브라우저 목록입니다. ip: IP platforms: - adobe_air: 어도비 에어 - android: 안드로이드 - blackberry: 블랙베리 - chrome_os: 크롬OS - firefox_os: 파이어폭스OS + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS ios: iOS - linux: 리눅스 - mac: 맥 + linux: Linux + mac: macOS other: 알 수 없는 플랫폼 - windows: 윈도우즈 - windows_mobile: 윈도우즈 모바일 - windows_phone: 윈도우즈 폰 + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: 삭제 revoke_success: 세션이 성공적으로 삭제되었습니다 title: 세션 @@ -1106,6 +1160,7 @@ ko: profile: 프로필 relationships: 팔로잉과 팔로워 two_factor_authentication: 2단계 인증 + webauthn_authentication: 보안 키 spam_check: spam_detected: 이것은 자동화 된 신고입니다. 스팸이 감지되었습니다. statuses: @@ -1138,6 +1193,8 @@ ko: other: "%{count}명 투표함" vote: 투표 show_more: 더 보기 + show_newer: 새로운 것 표시 + show_older: 오래된 것 표시 show_thread: 글타래 보기 sign_in_to_participate: 로그인 하여 이 대화에 참여하기 title: '%{name}: "%{quote}"' @@ -1246,21 +1303,20 @@ ko: default: "%Y년 %m월 %d일 %H:%M" month: "%Y년 %b" two_factor_authentication: - code_hint: 확인하기 위해서 인증 애플리케이션에서 표시된 코드를 입력해 주십시오 - description_html: "2단계 인증을 활성화 하면 로그인 시 전화로 인증 코드를 받을 필요가 있습니다." + add: 추가 disable: 비활성화 - enable: 활성화 + disabled_success: 2단계 인증이 비활성화 되었습니다. + edit: 편집 enabled: 2단계 인증이 활성화 되어 있습니다 enabled_success: 2단계 인증이 활성화 되었습니다 generate_recovery_codes: 복구 코드 생성 - instructions_html: "Google Authenticator, 또는 타 TOTP 애플리케이션에서 이 QR 코드를 스캔해 주십시오. 이후 로그인 시에는 이 애플리케이션에서 생성되는 코드가 필요합니다." lost_recovery_codes: 복구 코드를 사용하면 휴대전화를 분실한 경우에도 계정에 접근할 수 있게 됩니다. 복구 코드를 분실한 경우에도 여기서 다시 생성할 수 있지만, 예전 복구 코드는 비활성화 됩니다. - manual_instructions: 'QR 코드를 스캔할 수 없어 수동으로 등록을 원하시는 경우 이 비밀 코드를 사용해 주십시오:' + methods: 2단계 인증 + otp: 인증 앱 recovery_codes: 복구 코드 recovery_codes_regenerated: 복구 코드가 다시 생성되었습니다 recovery_instructions_html: 휴대전화를 분실한 경우, 아래 복구 코드 중 하나를 사용해 계정에 접근할 수 있습니다. 복구 코드는 안전하게 보관해 주십시오. 이 코드를 인쇄해 중요한 서류와 함께 보관하는 것도 좋습니다. - setup: 초기 설정 - wrong_code: 코드가 올바르지 않습니다. 서버와 휴대전화 간의 시각이 일치하나요? + webauthn: 보안 키 user_mailer: backup_ready: explanation: 당신이 요청한 계정의 풀 백업이 이제 다운로드 가능합니다! @@ -1275,6 +1331,7 @@ ko: warning: explanation: disable: 당신의 계정이 동결 된 동안 당신의 계정은 유지 됩니다. 하지만 잠금이 풀릴 때까지 당신은 아무 것도 할 수 없습니다. + sensitive: 당신의 업로드 한 미디어 파일들과 링크된 미디어들은 민감함으로 취급됩니다. silence: 당신의 계정이 제한 된 동안엔 당신의 팔로워 이외엔 툿을 받아 볼 수 없고 공개 리스팅에서 제외 됩니다. 하지만 다른 사람들은 여전히 당신을 팔로우 가능합니다. suspend: 당신의 계정은 정지 되었으며, 모든 툿과 업로드 한 미디어가 서버에서 삭제 되어 되돌릴 수 없습니다. get_in_touch: 이 메일에 대해 답장해서 %{instance}의 스태프와 연락 할 수 있습니다. @@ -1283,11 +1340,13 @@ ko: subject: disable: 당신의 계정 %{acct}가 동결 되었습니다 none: "%{acct}에게의 경고" + sensitive: 당신의 계정 %{acct}에서 포스팅 하는 미디어는 민감함으로 설정되었습니다 silence: 당신의 계정 %{acct}가 제한 되었습니다 suspend: 당신의 계정 %{acct}가 정지 되었습니다 title: disable: 계정 동결 됨 none: 경고 + sensitive: 당신의 미디어는 민감함으로 표시되었습니다 silence: 계정 제한 됨 suspend: 계정 정지 됨 welcome: @@ -1308,9 +1367,11 @@ ko: tips: 팁 title: 환영합니다 %{name} 님! users: + blocked_email_provider: 허용된 이메일 제공자가 아닙니다 follow_limit_reached: 당신은 %{limit}명의 사람을 넘어서 팔로우 할 수 없습니다 generic_access_help_html: 계정 로그인에 문제가 있나요? %{email} 로 도움을 요청할 수 있습니다 invalid_email: 메일 주소가 올바르지 않습니다 + invalid_email_mx: 이메일 주소가 존재하지 않는 것 같습니다 invalid_otp_token: 2단계 인증 코드가 올바르지 않습니다 invalid_sign_in_token: 잘못된 보안 코드 otp_lost_help_html: 만약 양쪽 모두를 잃어버렸다면 %{email}을 통해 복구할 수 있습니다 @@ -1320,3 +1381,20 @@ ko: verification: explanation_html: '당신은 프로필 메타데이터의 링크 소유자임을 검증할 수 있습니다. 이것을 하기 위해서는, 링크 된 웹사이트에서 당신의 마스토돈 프로필을 역으로 링크해야 합니다. 역링크는 반드시 rel="me" 속성을 가지고 있어야 합니다. 링크의 텍스트는 상관이 없습니다. 여기 예시가 있습니다:' verification: 검증 + webauthn_credentials: + add: 보안 키 추가 + create: + error: 보안 키를 추가하는데 문제가 발생했습니다. 다시 시도해보십시오. + success: 보안 키가 성공적으로 추가되었습니다. + delete: 삭제 + delete_confirmation: 정말로 이 보안 키를 삭제하시겠습니까? + description_html: "보안 키 인증을 활성화 하면, 로그인 시 보안 키 중 하나가 필요합니다." + destroy: + error: 보안 키를 삭제하는데 문제가 발생했습니다. 다시 시도해보십시오. + success: 보안 키가 성공적으로 삭제되었습니다. + invalid_credential: 잘못된 보안 키 + nickname_hint: 새 보안 키의 별명을 입력해 주세요 + not_enabled: 아직 WebAuthn을 활성화 하지 않았습니다. + not_supported: 이 브라우저는 보안 키를 지원하지 않습니다 + otp_required: 보안 키를 사용하기 위해서는 2단계 인증을 먼저 활성화 해 주세요 + registered_on: "%{date} 에 등록됨" diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 5a4542ea8..0e4bb65bc 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -776,21 +776,14 @@ lt: default: Mastodon (Tamsus) mastodon-light: Mastodon (Šviesus) two_factor_authentication: - code_hint: Įveskite autentikacijos aplikacijos sugeneruotą kodą kad galėtumete tęsti - description_html: Jeigu įjungiate dviejų veiksnių autentikaciją, prisijungiant jums reikės turėti su savimi savo telefoną, kuris jums generuos prisijungimo žetonus. disable: Išjungti - enable: Įjungti enabled: Dviejų veiksnių autentikacija įjungta enabled_success: Dviejų veiksnių autentikacija sėkmingai įjungta generate_recovery_codes: Sugeneruoti atkūrimo kodus - instructions_html: "Nuskenuokite šį QR kodą į Google Autentikatorių arba panašią TOTP aplikaciją jūsų telefone. Nuo šiol, ši aplikacija jums generuos žetonus, kurių reikės norint prisijungti." lost_recovery_codes: Atkūrimo kodai jums leidžia atgauti prisijungimą prie Jūsų paskyros, jeigu prarandate telefoną. Jeigu praradote atkūrimo kodus, juos galite sugeneruoti čia. Jūsų senieji atkūrimo kodai nebeveiks. - manual_instructions: 'Jeigu jūs negalite nuskenuoti QR kodo ir turite jį įvesti savarankiškai, štai čia yra tekstas šiam kodui:' recovery_codes: Atsarginio atkūrimo kodai recovery_codes_regenerated: Atkūrimo kodai sėkmingai sugeneruoti recovery_instructions_html: Jeigu prarandate prieiga prie telefono, jūs galite naudoti atkūrimo kodus esančius žemiau, kad atgautumėte priega prie savo paskyros.Laikykite atkūrimo kodus saugiai Pavyzdžiui, galite norėti juos išspausdinti, ir laikyti kartu su kitais svarbiais dokumentais. - setup: Nustatyti - wrong_code: Koda netinkamas! Ar serverio laikas ir prietaiso laikas vienodi? user_mailer: backup_ready: explanation: Jūs prašėte pilnos Mastodon paskyros atsarginės kopijos. Ji paruošta parsisiuntimui! diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 5c493be56..510458c5e 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -10,11 +10,3 @@ lv: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/mk.yml b/config/locales/mk.yml index c2cafa5a7..b538272de 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -10,11 +10,3 @@ mk: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/ml.yml b/config/locales/ml.yml index f2731cf04..603bf157a 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -54,11 +54,3 @@ ml: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 72228df52..9d7609ea4 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -10,11 +10,3 @@ mr: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 3ab481846..089707d03 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -297,14 +297,6 @@ ms: exports: archive_takeout: in_progress: Mengkompil arkib anda... - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day notification_mailer: digest: title: Ketika anda tiada di sini... diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 8c2af7e42..fe268d546 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -21,7 +21,9 @@ nl: federation_hint_html: Met een account op %{instance} ben je in staat om mensen die zich op andere Mastodonservers (en op andere plekken) bevinden te volgen. get_apps: Mobiele apps hosted_on: Mastodon op %{domain} - instance_actor_flash: Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo'n geval dien je echter een domeinblokkade te gebruiken. + instance_actor_flash: 'Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken. + +' learn_more: Meer leren privacy_policy: Privacybeleid see_whats_happening: Kijk wat er aan de hand is @@ -111,15 +113,15 @@ nl: confirming: Bevestiging deleted: Verwijderd demote: Degraderen - disable: Uitschakelen + disable: Bevriezen disable_two_factor_authentication: 2FA uitschakelen - disabled: Uitgeschakeld + disabled: Bevroren display_name: Weergavenaam domain: Domein edit: Bewerken email: E-mail email_status: E-mailstatus - enable: Inschakelen + enable: Ontdooien enabled: Ingeschakeld followers: Volgers follows: Volgt @@ -180,8 +182,8 @@ nl: show: created_reports: Aangemaakte rapportages targeted_reports: Door anderen gerapporteerd - silence: Negeren - silenced: Genegeerd + silence: Beperken + silenced: Beperkt statuses: Toots subscribe: Abonneren suspended: Opgeschort @@ -1260,21 +1262,14 @@ nl: default: "%d %B %Y om %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Voer de code in die door de authenticatie-app gegenereerd is - description_html: Na het instellen van tweestapsverificatie, kun je alleen inloggen als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode. - disable: Uitschakelen - enable: Inschakelen + disable: Tweestapsverificatie uitschakelen enabled: Tweestapsverificatie is ingeschakeld enabled_success: Inschakelen tweestapsverificatie geslaagd generate_recovery_codes: Herstelcodes genereren - instructions_html: "Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon. Van nu af aan genereert deze app aanmeldcodes die je bij het inloggen moet invoeren." lost_recovery_codes: Met herstelcodes kun je toegang tot jouw account krijgen wanneer je jouw telefoon bent kwijtgeraakt. Wanneer je jouw herstelcodes bent kwijtgeraakt, kan je ze hier opnieuw genereren. Jouw oude herstelcodes zijn daarna ongeldig. - manual_instructions: Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder de geheime code in platte tekst. recovery_codes: Herstelcodes back-uppen recovery_codes_regenerated: Opnieuw genereren herstelcodes geslaagd recovery_instructions_html: Wanneer je ooit de toegang verliest tot jouw telefoon, kan je met behulp van een van de herstelcodes hieronder opnieuw toegang krijgen tot jouw account. Zorg ervoor dat je de herstelcodes op een veilige plek bewaard. Je kunt ze bijvoorbeeld printen en ze samen met andere belangrijke documenten bewaren. - setup: Instellen - wrong_code: De ingevoerde code is ongeldig! Klopt de systeemtijd van de server en die van jouw apparaat? user_mailer: backup_ready: explanation: Je hebt een volledige back-up van jouw Mastodon-account opgevraagd. Het staat nu klaar om te worden gedownload! @@ -1282,8 +1277,8 @@ nl: title: Archief ophalen sign_in_token: details: 'Hier zijn details van de poging:' - explanation: 'We hebben inlogpoging op je account ontdekt vanaf een onbekend ip-adres. Als jij dit bent, vul dan de beveiligingscode hieronder in op de inlog-uitdagingspagina:' - further_actions: 'Als jij dit niet was, verander dan je wachtwoord en schakel authenticatie in twee stappen in op je account. Dat kun je hier doen:' + explanation: 'We hebben een inlogpoging op je account ontdekt vanaf een onbekend IP-adres. Als jij dit bent, vul dan de beveiligingscode hieronder in op de inlog-uitdagingspagina:' + further_actions: 'Als jij dit niet was, verander dan je wachtwoord en schakel tweestapsverificatie voor je account in. Dat kun je hier doen:' subject: Bevestig de inlogpoging title: Inlogpoging warning: @@ -1323,7 +1318,7 @@ nl: title: Welkom aan boord %{name}! users: follow_limit_reached: Je kunt niet meer dan %{limit} accounts volgen - generic_access_help_html: Problemen met toegang tot je account? Neem dan contact op met %{email} + generic_access_help_html: Problemen met toegang tot je account? Neem dan contact op met %{email} voor assistentie invalid_email: E-mailadres is ongeldig invalid_otp_token: Ongeldige tweestaps-aanmeldcode invalid_sign_in_token: Ongeldige beveiligingscode diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 13a6d1911..463364e3d 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -38,8 +38,11 @@ nn: domain: Sørvar reason: Grunn rejecting_media: 'Mediafiler fra disse tjenerne vil ikke bli behandlet eller lagret, og ingen miniatyrbilder vil bli vist, noe som vil kreve manuell klikking for å besøke den opprinnelige filen:' + rejecting_media_title: Filtrert media silenced: 'Innlegg frå desse tenarane vert gøymde frå offentlege tidsliner og samtalar, og det kjem ingen varsel frå samhandlingane til brukarane deira, med mindre du fylgjer dei:' + silenced_title: Stilnede tjenere suspended: 'Ingen data frå desse tenarane vert handsama, lagra eller sende til andre, som gjer det umogeleg å samhandla eller kommunisera med andre brukarar frå desse tenarane:' + suspended_title: Suspenderte tjenere unavailable_content_html: Mastodon gjev deg som regel lov til å sjå innhald og samhandla med brukarar frå alle andre tenarar i fødiverset. Dette er unnataka som er valde for akkurat denne tenaren. user_count_after: one: brukar @@ -90,7 +93,7 @@ nn: delete: Slett destroyed_msg: Moderatormerknad er utsletta! accounts: - add_email_domain_block: Svartelist E-postdomenet + add_email_domain_block: Gøym e-postdomene approve: Godtak approve_all: Godtak alle are_you_sure: Er du sikker? @@ -106,6 +109,7 @@ nn: confirm: Stadfest confirmed: Stadfesta confirming: Stadfestar + delete: Slett data deleted: Sletta demote: Degrader disable: Slå av @@ -171,7 +175,7 @@ nn: staff: Personell user: Brukar search: Søk - search_same_email_domain: Andre brukere med samme E-postdomene + search_same_email_domain: Andre brukarar med same e-postdomene search_same_ip: Andre brukarar med same IP shared_inbox_url: Delt Innboks URL show: @@ -187,40 +191,50 @@ nn: unconfirmed_email: E-post utan stadfesting undo_silenced: Angr målbinding undo_suspension: Angr utvising + unsilenced_msg: Opphevde vellykket begrensningen av %{username} sin konto unsubscribe: Avmeld + unsuspended_msg: Opphevde vellykket suspenderingen av %{username} sin konto username: Brukarnamn + view_domain: Vis sammendrag for domenet warn: Åtvar web: Nett whitelisted: Kvitlista action_logs: action_types: assigned_to_self_report: Tilordne rapport - change_email_user: Endre brukerens E-postadresse - confirm_user: Bekreft brukeren - create_account_warning: Opprett en advarsel - create_announcement: Opprett en kunngjøring - create_custom_emoji: Opprett en tilpasset emoji + change_email_user: Byt e-post for brukar + confirm_user: Stadfest brukar + create_account_warning: Opprett åtvaring + create_announcement: Opprett lysing + create_custom_emoji: Opprett tilpassa emoji create_domain_allow: Opprett domene tillatt create_domain_block: Opprett domene-blokk create_email_domain_block: Opprett e-post domeneblokk - demote_user: Degrader bruker - destroy_announcement: Slett kunngjøringen - destroy_custom_emoji: Slett den tilpassede emojien - destroy_status: Slett statusen - disable_2fa_user: Skru av 2-trinnsinnlogging - disable_user: Deaktiver bruker - enable_user: Aktiver bruker - promote_user: Promoter bruker - remove_avatar_user: Fjern Avatar - reopen_report: Gjenåpne rapporten + create_ip_block: Opprett IP-regel + demote_user: Degrader brukar + destroy_announcement: Slett lysinga + destroy_custom_emoji: Slett tilpassa emoji + destroy_domain_allow: Slett domenegodkjenning + destroy_domain_block: Slett domenesperring + destroy_email_domain_block: Slett e-postdomenesperring + destroy_ip_block: Slett IP-regel + destroy_status: Slett status + disable_2fa_user: Skruv av 2FA + disable_custom_emoji: Skruv av tilpassa emoji + disable_user: Skruv av brukar + enable_custom_emoji: Skruv på tilpassa emoji + enable_user: Skruv på brukar + promote_user: Forfrem brukar + remove_avatar_user: Fjern avatar + reopen_report: Opn rapport opp att reset_password_user: Tilbakestill passord resolve_report: Løs rapport silence_account: Demp konto suspend_account: Suspender kontoen unsuspend_account: Opphev suspensjonen av kontoen update_announcement: Oppdater kunngjøringen - update_custom_emoji: Oppdater tilpasset Emoji - update_status: Oppdater statusen + update_custom_emoji: Oppdater tilpassa emoji + update_status: Oppdater tut actions: assigned_to_self_report: "%{name} tilegnet rapport %{target} til seg selv" change_email_user: "%{name} endra e-postadressa til brukaren %{target}" @@ -231,12 +245,14 @@ nn: create_domain_allow: "%{name} kvitlista domenet %{target}" create_domain_block: "%{name} blokkerte domenet %{target}" create_email_domain_block: "%{name} svartelista e-postdomenet %{target}" + create_ip_block: "%{name} opprettet en regel for IP-en %{target}" demote_user: "%{name} degraderte brukaren %{target}" destroy_announcement: "%{name} slettet kunngjøring %{target}" destroy_custom_emoji: "%{name} utsletta kjensleteiknet %{target}" destroy_domain_allow: "%{name} fjerna domenet %{target} frå kvitliste" destroy_domain_block: "%{name} slutta å blokkera domenet %{target}" destroy_email_domain_block: "%{name} kvitlista e-postdomenet %{target}" + destroy_ip_block: "%{name} slettet en regel for IP-en %{target}" destroy_status: "%{name} sletta status av %{target}" disable_2fa_user: "%{name} tok vekk krav om tofaktorautentisering for brukaren %{target}" disable_custom_emoji: "%{name} deaktiverte emojien %{target}" @@ -258,9 +274,9 @@ nn: update_custom_emoji: "%{name} oppdaterte kjensleteiknet %{target}" update_status: "%{name} oppdaterte status for %{target}" deleted_status: "(sletta status)" - empty: Ingen loggføringer ble funnet. + empty: Ingen loggar funne. filter_by_action: Sorter etter handling - filter_by_user: Sorter etter bruker + filter_by_user: Sorter etter brukar title: Revisionslogg announcements: destroyed_msg: Kunngjøringen er slettet! @@ -299,7 +315,7 @@ nn: listed: Oppført new: title: Legg til eige kjensleteikn - not_permitted: Du har ikke rettigheter til å utføre denne handlingen + not_permitted: Du har ikkje løyve til å utføra denne handlinga overwrite: Skriv over shortcode: Stuttkode shortcode_hint: Minst 2 teikn, berre tal, bokstavar og understrek @@ -390,7 +406,7 @@ nn: destroyed_msg: E-postdomenet har blitt fjernet fra blokkeringslisten uten problemer domain: Domene empty: Ingen e-mail-domener er sortelistet på dette tidspunkt. - from_html: fra %{domain} + from_html: frå %{domain} new: create: Legg til domene title: Ny blokkeringsoppføring av e-postdomene @@ -421,6 +437,20 @@ nn: expired: Utgått title: Filter title: Innbydingar + ip_blocks: + add_new: Opprett regel + created_msg: La vellykket til en ny IP-regel + delete: Slett + expires_in: + '1209600': 2 uker + '15778476': 6 måneder + '2629746': 1 måned + '31556952': 1 år + '86400': 1 dag + '94670856': 3 år + new: + title: Opprett ny IP-regel + title: IP-regler pending_accounts: title: Kontoar som ventar (%{count}) relationships: @@ -564,7 +594,8 @@ nn: trends: title: Populære emneknaggar site_uploads: - delete: Slett den opplastede filen + delete: Slett opplasta fil + destroyed_msg: Vellukka sletting av sideopplasting! statuses: back_to_account: Tilbake til kontosida batch: @@ -618,7 +649,7 @@ nn: add_new: Lag psevdonym created_msg: Laga eit nytt kallenamn. No kan du setja i gang med flyttinga frå den gamle kontoen. deleted_msg: Fjerna kallenamnet. No vert det ikkje lenger mogeleg å flytta frå den andre kontoen til denne. - empty: Du har ingen aliaser. + empty: Du har inkje alias. hint_html: Dersom du vil flytte fra en annen konto til den, kan du lage et alias her, som er påkrevd før du kan gå videre med å flytte følgere fra den gamle kontoen til den nye. Handlingen i seg selv er harmløs og reversibel. Kontoflyttingen har blitt satt i gang fra den gamle kontoen. remove: Fjern aliaslenking appearance: @@ -660,8 +691,11 @@ nn: prefix_sign_up: Meld deg på Mastodon i dag! suffix: Med ein konto kan du fylgja folk, skriva innlegg og veksla meldingar med brukarar frå kva som helst annan Mastodon-tenar og meir! didnt_get_confirmation: Fekk du ikkje stadfestingsinstruksjonar? + dont_have_your_security_key: Har du ikke sikkerhetsnøkkelen din? forgot_password: Har du gløymt passordet ditt? invalid_reset_password_token: Tilgangsnykelen er ugyldig eller utgått. Ver venleg å beda om ein ny ein. + link_to_otp: Skriv inn en 2-trinnskode fra din 2-trinnspåloggingsenhet eller en gjenopprettingskode + link_to_webauth: Bruk sikkerhetsnøkkel-enheten din login: Innlogging logout: Logg ut migrate_account: Flytt til ein annan konto @@ -687,8 +721,10 @@ nn: pending: Søknaden din ventar på gjennomgang frå personalet vårt. Dette kan taka litt tid. Du får ein e-post om søknaden din vert godkjend. redirecting_to: Kontoen din er inaktiv fordi den for øyeblikket omdirigerer til %{acct}. trouble_logging_in: Får du ikkje logga inn? + use_security_key: Bruk sikkerhetsnøkkel authorize_follow: already_following: Du fylgjer allereie denne kontoen + already_requested: Du har allereie sendt ein fylgjespurnad til den kontoen error: Uheldigvis skjedde det en feil da vi prøvde å få tak i en bruker fra en annen instans follow: Fylg follow_request: 'Du har sendt ein fylgjeførespurnad til:' @@ -703,6 +739,10 @@ nn: hint_html: "Tips: Vi skal ikkje spørja deg om passordet ditt igjen i laupet av den neste timen." invalid_password: Ugyldig passord prompt: Stadfest passord for å halda fram + crypto: + errors: + invalid_key: er ikkje ein gild Ed25519 eller Curve25519 nykel + invalid_signature: er ikkje ein gild Ed25519-signatur date: formats: default: "%b %d, %Y" @@ -789,6 +829,8 @@ nn: thread: Samtalar edit: title: Endr filter + errors: + invalid_context: Ingen eller ugild kontekst gjeve index: delete: Slett empty: Du har ingen filtre. @@ -805,16 +847,20 @@ nn: changes_saved_msg: Alle endringane vart lagra! copy: Kopier delete: Slett + no_batch_actions_available: Ingen batch-handlingar tilgjengelege på denne sida order_by: Sorter etter save_changes: Lagr endringar validation_errors: one: Noe er ikke helt riktig ennå. Vennligst se etter en gang til other: Noe er ikke helt riktig ennå. Det er ennå %{count} feil å rette på + html_validator: + invalid_markup: 'rommar ugild HTML-kode: %{error}' identity_proofs: active: Aktiv authorize: Ja, stadfest authorize_connection_prompt: Vil du autorisere denne kryptografiske forbindelsen? errors: + failed: Den kryptografiske tilkoplinga gjekk gale. Venlegast prøv om att frå %{provider}. keybase: verification_failed: Keybase kjenner ikke igjen denne sjetongen som en signatur for Keybase-brukeren %{kb_username}. Vennligst prøv igjen gjennom Keybase. wrong_user: Kan ikke lage et bevis for %{proving} mens du er logget på som %{current}. Logg på som %{proving} og prøv igjen. @@ -824,12 +870,14 @@ nn: inactive: Uaktiv publicize_checkbox: 'Og tut dette:' publicize_toot: 'Det er prova! Eg er %{username} på %{service}: %{url}' - remove: Fjern bevis fra kontoen + remove: Fjern prov frå konto + removed: Vellukka fjerning av prov frå konto status: Stadfestingsstatus view_proof: Sjå prov imports: modes: merge: Set saman + merge_long: Hald på eksisterande data og legg til nye overwrite: Skriv over preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer. success: Dataa dine vart lasta opp og vert no handsama så fort som mogeleg @@ -873,23 +921,39 @@ nn: acct: Flytta til cancel: Avbryt omdirigeringen cancel_explanation: Å avbryte omdirigeringen vil reaktivere din nåværende konto, men vil ikke bringe tilbake følgere som har blitt flyttet til den kontoen. + cancelled_msg: Avbrøt omdirigeringen med suksess. errors: already_moved: er den same kontoen som du allereie har flytta til + missing_also_known_as: er ikkje eit alias til denne kontoen move_to_self: kan ikkje vera denne kontoen not_found: fann ikkje on_cooldown: Du er i en nedkjølingsperiode followers_count: Fylgjarar då kontoen vart flytta incoming_migrations: Flyttar frå ein annan konto incoming_migrations_html: For å flytta frå ein annnan konto til denne må du fyrst laga eit kallenamn til kontoen. + moved_msg: Kontoen din omdirigeres nå til %{acct}, og følgerne dine blir flyttet over. + not_redirecting: Kontoen din omdirigeres ikke til noen andre kontoer for øyeblikket. + on_cooldown: Du har nylig overført kontoen din. Denne funksjonen blir tilgjengelig igjen om %{count} dager. past_migrations: Tidlegare vandringar proceed_with_move: Flytt fylgjarar + redirected_msg: Kontoen din omdirigerer no til %{acct}. + redirecting_to: Kontoen din omdirigerer til %{acct}. set_redirect: Bestem omdirigering warning: + backreference_required: Den nye kontoen må fyrst konfigurerast til å visa til denne before: 'Før du fortsetter, vennligst les disse notisene nøye:' + cooldown: Etter flytting er det en nedkjølingsperiode der du ikke vil kunne flytte igjen disabled_account: Din nåværende konto vil ikke være fullt brukbar etterpå. Men du vil ha tilgang til dataeksportering såvel som reaktivering. - other_data: Ingen andre data vil bli flyttet automatisk + followers: Denne handlingen vil flytte alle følgere fra den nåværende kontoen til den nye kontoen + only_redirect_html: Alternativt kan du velge å bare legge ut en omdirigering på profilen din. + other_data: Inkje anna data flyttast av seg sjølve + redirect: Profilen til din nåværende konto vil bli oppdatert med en omdirigeringsnotis og bli fjernet fra søk moderation: title: Moderasjon + move_handler: + carry_blocks_over_text: Denne brukaren flytta frå %{acct}, som du gøymde. + carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet. + copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:' notification_mailer: digest: action: Sjå alle varsel @@ -938,6 +1002,14 @@ nn: quadrillion: Bil thousand: K trillion: Bil + otp_authentication: + code_hint: Skriv inn koden generert av autentiseringsappen din for å bekrefte + description_html: Hvis du skrur på 2-trinnsautentisering ved hjelp av en autentiseringsapp, vil pålogging kreve at du er i besittelse av autentiseringsenheten din, som genererer sjetonger som du skal skrive inn. + enable: Aktiver + instructions_html: "Skann denne QR-koden i Authy, Google Autentisering, eller en lignende TOTP-app på en av dine enheter. Fra nå av, vil den appen generere sjetonger som du vil måtte skrive inn når du logger på." + manual_instructions: 'Hvis du ikke kan skanne QR-koden og må skrive den inn manuelt, her er tekstkoden i ren tekst:' + setup: Sett opp + wrong_code: Den innskrevne koden var ugyldig! Er tjenertiden og enhetstiden riktige? pagination: newer: Nyare next: Neste @@ -996,6 +1068,10 @@ nn: reply: proceed: Svar prompt: 'Du vil svara på dette tutet:' + scheduled_statuses: + over_daily_limit: Du har overskredet grensen på %{limit} planlagte tuter for den dagen + over_total_limit: Du har overskredet grensen på %{limit} planlagte tuter + too_soon: Den planlagte datoen må være i fremtiden sessions: activity: Siste aktivitet browser: Nettlesar @@ -1058,10 +1134,14 @@ nn: profile: Profil relationships: Fylgjar og fylgjarar two_factor_authentication: Tostegsautorisering + webauthn_authentication: Sikkerhetsnøkler spam_check: spam_detected: Dette er en automatisert rapport. Spam har blitt oppdaget. statuses: attached: + audio: + one: "%{count} ljod" + other: "%{count} ljodar" description: 'Vedlagt: %{attached}' image: one: "%{count} bilete" @@ -1074,6 +1154,8 @@ nn: disallowed_hashtags: one: 'inneheldt ein emneknagg som ikkje var tillaten: %{tags}' other: 'inneheldt emneknaggen som ikkje var tillaten: %{tags}' + errors: + in_reply_not_found: Det ser ut til at tutet du freistar å svara ikkje finst. language_detection: Kjenn att språk automatisk open_in_web: Opn på nett over_character_limit: øvregrensa for teikn, %{max}, er nådd @@ -1199,25 +1281,29 @@ nn: default: "%d.%b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Skriv inn koden frå autentiseringsappen for å stadfesta - description_html: Hvis du skrur på tofaktorautentisering må du ha din telefon for å logge inn. Denne vil generere koder som du må taste inn. + add: Legg til disable: Slå av - enable: Slå på + disabled_success: 2-trinnsautentisering ble vellykket skrudd av + edit: Redigering enabled: Tostegsinnlogging er slege på enabled_success: Aktivering av tofaktorautentisering vellykket generate_recovery_codes: Generér gjenopprettingskoder - instructions_html: "Scan denne QR-koden med Google Authenticator eller en lignende app på telefonen din. Fra nå av vil denne applikasjonen generere koder for deg som skal brukes under innlogging." lost_recovery_codes: Gjenopprettingskoder lar deg gjenoppnå tilgang til din konto hvis du mister din telefon. Hvis du har mistet gjenopprettingskodene, kan du regenerere dem her. Dine gamle gjenopprettingskoder vil bli ugyldige. - manual_instructions: 'Hvis du ikke får scannet QR-koden må du skrive inn følgende kode manuelt:' + methods: 2-trinnsmetoder + otp: Autentiseringsapp recovery_codes: Reservekoder recovery_codes_regenerated: Generering av reservekoder fullført recovery_instructions_html: Hvis du skulle miste tilgang til telefonen din, kan du bruke en av gjenopprettingskodene nedenfor til å gjenopprette tilgang til din konto. Oppbevar gjenopprettingskodene sikkert, for eksempel ved å skrive dem ut og gjemme dem på et lurt sted bare du vet om. - setup: Sett opp - wrong_code: Den angitte koden var ugyldig! Stemmer instansens tid overalt med enhetens tid? + webauthn: Sikkerhetsnøkler user_mailer: backup_ready: explanation: Du ba om en fullstendig sikkerhetskopi av Mastodon-kontoen din. Den er nå klar for nedlasting! subject: Arkivet ditt er klart til å lastes ned + sign_in_token: + details: 'Her er forsøksdetaljane:' + further_actions: 'Om dette ikkje var deg, so venlegast endra passordet ditt og skruv på tostegsgodkjenning på kontoen din. Du kan gjera det her:' + subject: Venlegast stadfest forsøket på å logga inn + title: Forsøk på å logga inn warning: explanation: disable: Mens kontoen din er fryst, forblir dine kontodata intakt, men du kan ikke utføre noen handlinger før den har blitt tint opp. @@ -1254,11 +1340,27 @@ nn: tips: Tips title: Velkomen om bord, %{name}! users: + blocked_email_provider: Denne E-postleverandøren er ikke tillatt follow_limit_reached: Du kan ikkje fylgja fleire enn %{limit} folk + generic_access_help_html: Har du vanskar med tilgjenge til kontoen din? Tak gjerne kontakt med %{email} invalid_email: E-mailadressa er ugyldig invalid_otp_token: Ugyldig tostegskode + invalid_sign_in_token: Ugild trygdenykel otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email} + seamless_external_login: Du er logga inn gjennom eit eksternt reiskap, so passord og e-postinstillingar er ikkje tilgjengelege. signed_in_as: 'Logga inn som:' + suspicious_sign_in_confirmation: Det verkar ikkje som du har logga inn frå dette reiskapet før, og du har ikkje logga inn på ei stund, difor sender me deg ein trygdekode til e-post-addressa di for å stadfesta at det er deg. verification: explanation_html: 'Du kan bekrefte at du selv er eieren av lenkene i din profilmetadata. For å gjøre det, må det tillenkede nettstedet inneholde en lenke som fører tilbake til Mastodon-profilen din. Lenken tilbake ha en rel="me"-attributt. Tekstinnholdet til lenken er irrelevant. Her er et eksempel:' verification: Stadfesting + webauthn_credentials: + add: Legg til ny sikkerhetsnøkkel + create: + success: Sikkerhetsnøkkelen din ble vellykket lagt til. + delete: Slett + delete_confirmation: Er du sikker på at du vil slette denne sikkerhetsnøkkelen? + destroy: + success: Sikkerhetsnøkkelen din ble vellykket slettet. + invalid_credential: Ugyldig sikkerhetsnøkkel + not_supported: Denne nettleseren støtter ikke sikkerhetsnøkler + registered_on: Registrert den %{date} diff --git a/config/locales/no.yml b/config/locales/no.yml index 32368fc9a..b70eb167c 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -21,7 +21,9 @@ federation_hint_html: Med en konto på %{instance} vil du kunne følge folk på enhver Mastodon-tjener, og mer til. get_apps: Prøv en mobilapp hosted_on: Mastodon driftet på %{domain} - instance_actor_flash: Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. + instance_actor_flash: 'Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. + +' learn_more: Lær mer privacy_policy: Privatlivsretningslinjer see_whats_happening: Se hva som skjer @@ -38,8 +40,11 @@ domain: Tjener reason: Årsak rejecting_media: 'Mediafiler fra disse tjenerne vil ikke bli behandlet eller lagret, og ingen miniatyrbilder vil bli vist, noe som vil kreve manuell klikking for å besøke den opprinnelige filen:' + rejecting_media_title: Filtrert media silenced: 'Innlegg fra disse tjenerne vil bli skjult fra offentlige tidslinjer og samtaler, og ingen varslinger vil bli generert fra disse brukernes samhandlinger, med mindre du følger dem:' + silenced_title: Stilnede tjenere suspended: 'Ingen data fra disse tjenerne vil bli behandlet, lagret, eller utvekslet, noe som vil gjøre enhver samhandling eller kommunikasjon med brukere fra disse tjenerne umulig:' + suspended_title: Suspenderte tjenere unavailable_content_html: Mastodon lar deg vanligvis se innhold fra og samhandle med brukere fra enhver annen tjener i strømiverset. Dette er unntakene som har blitt gjort på denne spesifikke tjeneren. user_count_after: one: bruker @@ -106,6 +111,7 @@ confirm: Bekreft confirmed: Bekreftet confirming: Bekrefte + delete: Slett data deleted: Slettet demote: Degrader disable: Deaktiver @@ -187,8 +193,11 @@ unconfirmed_email: Ubekreftet E-postadresse undo_silenced: Angre målbinding undo_suspension: Angre utvisning + unsilenced_msg: Opphevde vellykket begrensningen av %{username} sin konto unsubscribe: Avslutt abonnementet + unsuspended_msg: Opphevde vellykket suspenderingen av %{username} sin konto username: Brukernavn + view_domain: Vis sammendrag for domenet warn: Advar web: Nett whitelisted: Hvitelistet @@ -203,12 +212,16 @@ create_domain_allow: Opprett domene tillatt create_domain_block: Opprett domene-blokk create_email_domain_block: Opprett e-post domeneblokk + create_ip_block: Opprett IP-regel demote_user: Degrader bruker destroy_announcement: Slett kunngjøringen destroy_custom_emoji: Slett den tilpassede emojien + destroy_ip_block: Slett IP-regel destroy_status: Slett statusen disable_2fa_user: Skru av 2-trinnsinnlogging + disable_custom_emoji: Skru av tilpassede emojier disable_user: Deaktiver bruker + enable_custom_emoji: Skru på tilpassede emojier enable_user: Aktiver bruker promote_user: Promoter bruker remove_avatar_user: Fjern Avatar @@ -231,12 +244,14 @@ create_domain_allow: "%{name} hvitelistet domenet %{target}" create_domain_block: "%{name} blokkerte domenet %{target}" create_email_domain_block: "%{name} svartelistet e-postdomenet %{target}" + create_ip_block: "%{name} opprettet en regel for IP-en %{target}" demote_user: "%{name} degraderte bruker %{target}" destroy_announcement: "%{name} slettet kunngjøring %{target}" destroy_custom_emoji: "%{name} ødela emojien %{target}" destroy_domain_allow: "%{name} fjernet domenet %{target} fra hvitelisten" destroy_domain_block: "%{name} fjernet blokkeringen av domenet %{target}" destroy_email_domain_block: "%{name} hvitelistet e-postdomenet %{target}" + destroy_ip_block: "%{name} slettet en regel for IP-en %{target}" destroy_status: "%{name} fjernet status av %{target}" disable_2fa_user: "%{name} deaktiverte tofaktor-autentiseringskravet for bruker %{target}" disable_custom_emoji: "%{name} deaktiverte emoji %{target}" @@ -421,6 +436,20 @@ expired: Utløpt title: Filtrer title: Invitasjoner + ip_blocks: + add_new: Opprett regel + created_msg: La vellykket til en ny IP-regel + delete: Slett + expires_in: + '1209600': 2 uker + '15778476': 6 måneder + '2629746': 1 måned + '31556952': 1 år + '86400': 1 dag + '94670856': 3 år + new: + title: Opprett ny IP-regel + title: IP-regler pending_accounts: title: Avventende brukere (%{count}) relationships: @@ -650,8 +679,11 @@ prefix_sign_up: Meld deg opp på Mastodon i dag! suffix: Med en konto, vil kunne følge folk, legge ut oppdateringer, og utveksle meldinger med brukere fra enhver Mastodon-tjener, og mer til! didnt_get_confirmation: Mottok du ikke instruksjoner om bekreftelse? + dont_have_your_security_key: Har du ikke sikkerhetsnøkkelen din? forgot_password: Har du glemt passordet ditt? invalid_reset_password_token: Tilbakestillingsnøkkelen for passord er ugyldig eller utløpt. Vennligst be om en ny. + link_to_otp: Skriv inn en 2-trinnskode fra din 2-trinnspåloggingsenhet eller en gjenopprettingskode + link_to_webauth: Bruk sikkerhetsnøkkel-enheten din login: Logg på logout: Logg ut migrate_account: Flytt til en annen konto @@ -677,6 +709,7 @@ pending: Søknaden din avventer gjennomgang av styret vårt. Dette kan ta litt tid. Du vil motta en E-post dersom søknaden din blir godkjent. redirecting_to: Kontoen din er inaktiv fordi den for øyeblikket omdirigerer til %{acct}. trouble_logging_in: Har du problemer med å logge på? + use_security_key: Bruk sikkerhetsnøkkel authorize_follow: already_following: Du følger allerede denne kontoen error: Uheldigvis skjedde det en feil da vi prøvde å få tak i en bruker fra en annen instans @@ -693,6 +726,10 @@ hint_html: "Tips: Vi ber deg ikke om passordet ditt igjen i løpet av neste time." invalid_password: Ugyldig passord prompt: Bekreft passordet for å fortsette + crypto: + errors: + invalid_key: er ikke en gyldig Ed25519- eller Curve25519-nøkkel + invalid_signature: er ikke en gyldig Ed25519-signatur date: formats: default: "%b %d, %Y" @@ -861,23 +898,39 @@ acct: brukernavn@domene til den nye kontoen cancel: Avbryt omdirigeringen cancel_explanation: Å avbryte omdirigeringen vil reaktivere din nåværende konto, men vil ikke bringe tilbake følgere som har blitt flyttet til den kontoen. + cancelled_msg: Avbrøt omdirigeringen med suksess. errors: already_moved: er den samme kontoen du allerede har flyttet til + missing_also_known_as: er ikke en av denne kontoens aliaser move_to_self: kan ikke være den nåværende kontoen not_found: ble ikke funnet on_cooldown: Du er i en nedkjølingsperiode followers_count: Følgere på flyttetidspunktet incoming_migrations: Flytte fra en annen konto incoming_migrations_html: For å flytte fra en annen konto til denne, må du først sette opp et kontoalias. + moved_msg: Kontoen din omdirigeres nå til %{acct}, og følgerne dine blir flyttet over. + not_redirecting: Kontoen din omdirigeres ikke til noen andre kontoer for øyeblikket. + on_cooldown: Du har nylig overført kontoen din. Denne funksjonen blir tilgjengelig igjen om %{count} dager. past_migrations: Tidligere migreringer proceed_with_move: Flytt følgere + redirected_msg: Kontoen din omdirigeres nå til %{acct}. + redirecting_to: Kontoen din omdirigeres til %{acct}. set_redirect: Bestem omdirigering warning: + backreference_required: Den nye kontoen må først settes opp til å henvise tilbake til denne before: 'Før du fortsetter, vennligst les disse notisene nøye:' + cooldown: Etter flytting er det en nedkjølingsperiode der du ikke vil kunne flytte igjen disabled_account: Din nåværende konto vil ikke være fullt brukbar etterpå. Men du vil ha tilgang til dataeksportering såvel som reaktivering. + followers: Denne handlingen vil flytte alle følgere fra den nåværende kontoen til den nye kontoen + only_redirect_html: Alternativt kan du velge å bare legge ut en omdirigering på profilen din. other_data: Ingen andre data vil bli flyttet automatisk + redirect: Profilen til din nåværende konto vil bli oppdatert med en omdirigeringsnotis og bli fjernet fra søk moderation: title: Moderasjon + move_handler: + carry_blocks_over_text: Denne brukeren flyttet fra %{acct}, som du hadde blokkert. + carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet. + copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:' notification_mailer: digest: action: Vis alle varslinger @@ -926,6 +979,14 @@ quadrillion: Kvd thousand: T trillion: Trl + otp_authentication: + code_hint: Skriv inn koden generert av autentiseringsappen din for å bekrefte + description_html: Hvis du skrur på 2-trinnsautentisering ved hjelp av en autentiseringsapp, vil pålogging kreve at du er i besittelse av autentiseringsenheten din, som genererer sjetonger som du skal skrive inn. + enable: Aktiver + instructions_html: "Skann denne QR-koden i Authy, Google Autentisering, eller en lignende TOTP-app på en av dine enheter. Fra nå av, vil den appen generere sjetonger som du vil måtte skrive inn når du logger på." + manual_instructions: 'Hvis du ikke kan skanne QR-koden og må skrive den inn manuelt, her er tekstkoden i ren tekst:' + setup: Sett opp + wrong_code: Den innskrevne koden var ugyldig! Er tjenertiden og enhetstiden riktige? pagination: newer: Nyere next: Neste @@ -984,6 +1045,10 @@ reply: proceed: Fortsett til svaret prompt: 'Du ønsker å svare på denne tuten:' + scheduled_statuses: + over_daily_limit: Du har overskredet grensen på %{limit} planlagte tuter for den dagen + over_total_limit: Du har overskredet grensen på %{limit} planlagte tuter + too_soon: Den planlagte datoen må være i fremtiden sessions: activity: Siste aktivitet browser: Nettleser @@ -1046,10 +1111,14 @@ profile: Profil relationships: Følginger og følgere two_factor_authentication: Tofaktorautentisering + webauthn_authentication: Sikkerhetsnøkler spam_check: spam_detected: Dette er en automatisert rapport. Spam har blitt oppdaget. statuses: attached: + audio: + one: "%{count} lyd" + other: "%{count} lyd" description: 'Vedlagt: %{attached}' image: one: "%{count} bilde" @@ -1183,25 +1252,27 @@ default: "%-d. %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Tast koden som ble generert av din autentiseringsapp for å bekrefte - description_html: Hvis du skrur på tofaktorautentisering må du ha din telefon for å logge inn. Denne vil generere koder som du må taste inn. + add: Legg til disable: Skru av - enable: Skru på + disabled_success: 2-trinnsautentisering ble vellykket skrudd av + edit: Redigering enabled: To-faktor autentisering er aktivert enabled_success: Aktivering av tofaktorautentisering vellykket generate_recovery_codes: Generér gjenopprettingskoder - instructions_html: "Scan denne QR-koden med Google Authenticator eller en lignende app på telefonen din. Fra nå av vil denne applikasjonen generere koder for deg som skal brukes under innlogging." lost_recovery_codes: Gjenopprettingskoder lar deg gjenoppnå tilgang til din konto hvis du mister din telefon. Hvis du har mistet gjenopprettingskodene, kan du regenerere dem her. Dine gamle gjenopprettingskoder vil bli ugyldige. - manual_instructions: 'Hvis du ikke får scannet QR-koden må du skrive inn følgende kode manuelt:' + methods: 2-trinnsmetoder + otp: Autentiseringsapp recovery_codes: Reservekoder recovery_codes_regenerated: Generering av reservekoder fullført recovery_instructions_html: Hvis du skulle miste tilgang til telefonen din, kan du bruke en av gjenopprettingskodene nedenfor til å gjenopprette tilgang til din konto. Oppbevar gjenopprettingskodene sikkert, for eksempel ved å skrive dem ut og gjemme dem på et lurt sted bare du vet om. - setup: Sett opp - wrong_code: Den angitte koden var ugyldig! Stemmer instansens tid overalt med enhetens tid? + webauthn: Sikkerhetsnøkler user_mailer: backup_ready: explanation: Du ba om en fullstendig sikkerhetskopi av Mastodon-kontoen din. Den er nå klar for nedlasting! subject: Arkivet ditt er klart til å lastes ned + sign_in_token: + details: 'Her er detaljene om forsøket:' + title: Påloggingsforsøk warning: explanation: disable: Mens kontoen din er fryst, forblir dine kontodata intakt, men du kan ikke utføre noen handlinger før den har blitt tint opp. @@ -1238,11 +1309,24 @@ tips: Tips title: Velkommen ombord, %{name}! users: + blocked_email_provider: Denne E-postleverandøren er ikke tillatt follow_limit_reached: Du kan ikke følge mer enn %{limit} personer invalid_email: E-postaddressen er ugyldig invalid_otp_token: Ugyldig to-faktorkode + invalid_sign_in_token: Ugyldig sikkerhetskode otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email} signed_in_as: 'Innlogget som:' verification: explanation_html: 'Du kan bekrefte at du selv er eieren av lenkene i din profilmetadata. For å gjøre det, må det tillenkede nettstedet inneholde en lenke som fører tilbake til Mastodon-profilen din. Lenken tilbake ha en rel="me"-attributt. Tekstinnholdet til lenken er irrelevant. Her er et eksempel:' verification: Bekreftelse + webauthn_credentials: + add: Legg til ny sikkerhetsnøkkel + create: + success: Sikkerhetsnøkkelen din ble vellykket lagt til. + delete: Slett + delete_confirmation: Er du sikker på at du vil slette denne sikkerhetsnøkkelen? + destroy: + success: Sikkerhetsnøkkelen din ble vellykket slettet. + invalid_credential: Ugyldig sikkerhetsnøkkel + not_supported: Denne nettleseren støtter ikke sikkerhetsnøkler + registered_on: Registrert den %{date} diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 95d15ef85..4a2399607 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -104,6 +104,7 @@ oc: confirm: Confirmar confirmed: Confirmat confirming: Confirmacion + delete: Suprimir donadas deleted: Suprimits demote: Retrogradar disable: Desactivar @@ -417,6 +418,14 @@ oc: expired: Expirats title: Filtre title: Convits + ip_blocks: + expires_in: + '1209600': 2 setmanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 an + '86400': 1 jorn + '94670856': 3 ans pending_accounts: title: Comptes en espèra (%{count}) relationships: @@ -672,6 +681,7 @@ oc: account_status: Estat del compte functional: Vòstre compte es complètament foncional. trouble_logging_in: Problèmas de connexion ? + use_security_key: Utilizar clau de seguretat authorize_follow: already_following: Seguètz ja aqueste compte error: O planhèm, i a agut una error al moment de cercar lo compte @@ -931,6 +941,8 @@ oc: quadrillion: Q thousand: K trillion: T + otp_authentication: + enable: Activar pagination: newer: Mai recents next: Seguent @@ -1198,21 +1210,14 @@ oc: default: Lo %d %b de %Y a %Ho%M month: "%b de %Y" two_factor_authentication: - code_hint: Picatz lo còdi generat per vòstra aplicacion d’autentificacion per confirmar - description_html: S’activatz l’autentificacion two-factor, vos caldrà vòstre mobil per vos connectar perque generarà un geton per vos daissar dintrar. disable: Desactivar - enable: Activar enabled: Autentificacion en dos temps activada enabled_success: L’autentificacion en dos temps es ben activada generate_recovery_codes: Generar los còdis de recuperacion - instructions_html: "Escanatz aqueste còdi QR amb Google Authenticator o una aplicacion similària sus vòstre mobil. A partir d’ara, aquesta aplicacion generarà un geton que vos caldrà picar per vos connectar." lost_recovery_codes: Los còdi de recuperacion vos permeton d’accedir a vòstre compte se perdètz vòstre mobil. S’avètz perdut vòstres còdis de recuperacion los podètz tornar generar aquí. Los ancians còdis seràn pas mai valides. - manual_instructions: 'Se podètz pas numerizar lo còdi QR e que vos cal picar lo còdi a la man, vaquí lo còdi en clar :' recovery_codes: Salvar los còdis de recuperacion recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. Gardatz los còdis en seguretat, per exemple, imprimissètz los e gardatz los amb vòstres documents importants. - setup: Parametrar - wrong_code: Lo còdi picat es invalid ! L’ora es bona sul servidor e lo mobil ? user_mailer: backup_ready: explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament ! diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 7d0b3f214..30d51c737 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -106,6 +106,7 @@ pl: add_email_domain_block: Dodaj domenę e-mail na czarną listę approve: Przyjmij approve_all: Zatwierdź wszystkie + approved_msg: Pomyślnie zaakceptowano wniosek o rejestrację %{username} are_you_sure: Jesteś tego pewien? avatar: Awatar by_domain: Domena @@ -119,8 +120,10 @@ pl: confirm: Potwierdź confirmed: Potwierdzono confirming: Potwierdzanie + delete: Usuń dane deleted: Usunięto demote: Degraduj + destroyed_msg: Dane %{username} są teraz w kolejce do natychmiastowego usunięcia disable: Dezaktywuj disable_two_factor_authentication: Wyłącz uwierzytelnianie dwuetapowe disabled: Dezaktywowano @@ -131,6 +134,7 @@ pl: email_status: Stan e-maila enable: Aktywuj enabled: Aktywowano + enabled_msg: Pomyślnie odblokowano konto %{username} followers: Śledzący follows: Śledzeni header: Nagłówek @@ -146,6 +150,8 @@ pl: login_status: Stan logowania media_attachments: Załączniki multimedialne memorialize: Przełącz na „In Memoriam” + memorialized: Upamiętniono + memorialized_msg: Pomyślnie przełączono %{username} w konto in memoriam moderation: active: Aktywne all: Wszystkie @@ -166,10 +172,14 @@ pl: public: Publiczne push_subscription_expires: Subskrypcja PuSH wygasa redownload: Odśwież profil + redownloaded_msg: Pomyślnie odświeżono profil %{username} z miejsca pochodzenia reject: Odrzuć reject_all: Odrzuć wszystkie + rejected_msg: Pomyślnie odrzucono wniosek o rejestrację %{username} remove_avatar: Usun awatar remove_header: Usuń nagłówek + removed_avatar_msg: Pomyślnie usunięto awatar %{username} + removed_header_msg: Pomyślnie usunięto obraz nagłówka %{username} resend_confirmation: already_confirmed: To konto zostało już potwierdzone send: Wyślij ponownie e-mail z potwierdzeniem @@ -195,13 +205,18 @@ pl: statuses: Wpisy subscribe: Subskrybuj suspended: Zawieszono + suspension_irreversible: Dane tego konta zostały bezpowrotnie usunięte. Możesz cofnąć zawieszenie tego konta aby można było z niego ponownie korzystać, lecz nie przywróci to danych które poprzednio się na nim znajdowały. + suspension_reversible_hint_html: Twoje konto zostało zawieszone, a dane zostaną całkowicie usunięte %{date}. Do tego czasu, konto może zostać przywrócone bez żadnych negatywnych skutków. Jeżeli chcesz natychmiastowo usunąć wszystkie dane, możesz zrobić to niżej. time_in_queue: Czekanie w kolejce %{time} title: Konta unconfirmed_email: Niepotwierdzony adres e-mail undo_silenced: Cofnij wyciszenie undo_suspension: Cofnij zawieszenie + unsilenced_msg: Pomyślnie zwolniono z ograniczeń konto %{username} unsubscribe: Przestań subskrybować + unsuspended_msg: Pomyślnie cofnięto zawieszenie konto %{username} username: Nazwa użytkownika + view_domain: Zobacz podsumowanie domeny warn: Ostrzeż web: Sieć whitelisted: Na białej liście @@ -216,12 +231,14 @@ pl: create_domain_allow: Utwórz zezwolenie dla domeny create_domain_block: Utwórz blokadę domeny create_email_domain_block: Utwórz blokadę domeny e-mail + create_ip_block: Utwórz regułę IP demote_user: Zdegraduj użytkownika destroy_announcement: Usuń ogłoszenie destroy_custom_emoji: Usuń niestandardowe emoji destroy_domain_allow: Usuń zezwolenie dla domeny destroy_domain_block: Usuń blokadę domeny destroy_email_domain_block: Usuń blokadę domeny e-mail + destroy_ip_block: Usuń regułę IP destroy_status: Usuń wpis disable_2fa_user: Wyłącz 2FA disable_custom_emoji: Wyłącz niestandardowe emoji @@ -252,12 +269,14 @@ pl: create_domain_allow: "%{name} dodał(a) na białą listę domenę %{target}" create_domain_block: "%{name} zablokował(a) domenę %{target}" create_email_domain_block: "%{name} dodał(a) domenę e-mail %{target} na czarną listę" + create_ip_block: "%{name} stworzył dla IP %{target}" demote_user: "%{name} zdegradował(a) użytkownika %{target}" destroy_announcement: "%{name} usunął(-ęła) ogłoszenie %{target}" destroy_custom_emoji: "%{name} usunął(-ęła) emoji %{target}" destroy_domain_allow: "%{name} usunął(-ęła) domenę %{target} z białej listy" destroy_domain_block: "%{name} odblokował(a) domenę %{target}" destroy_email_domain_block: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy" + destroy_ip_block: "%{name} usunął regułę dla IP %{target}" destroy_status: "%{name} usunął(-ęła) wpis użytkownika %{target}" disable_2fa_user: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}" disable_custom_emoji: "%{name} wyłączył(a) emoji %{target}" @@ -446,6 +465,21 @@ pl: expired: Wygasłe title: Filtruj title: Zaproszenia + ip_blocks: + add_new: Stwórz regułę + created_msg: Pomyślnie dodano nową regułę IP + delete: Usuń + expires_in: + '1209600': 2 tygodnie + '15778476': 6 miesięcy + '2629746': 1 miesiąc + '31556952': 1 rok + '86400': 1 dzień + '94670856': 3 lata + new: + title: Utwórz nową regułę IP + no_ip_block_selected: Żadna reguła nie została zmieniona, ponieważ żadna nie została wybrana + title: Reguły adresów IP pending_accounts: title: Oczekujące konta (%{count}) relationships: @@ -697,8 +731,11 @@ pl: prefix_sign_up: Zarejestruj się na Mastodon już dziś! suffix: Mając konto, możesz śledzić ludzi, publikować wpisy i wymieniać się wiadomościami z użytkownikami innych serwerów Mastodona i nie tylko! didnt_get_confirmation: Nie otrzymałeś(-aś) instrukcji weryfikacji? + dont_have_your_security_key: Nie masz klucza bezpieczeństwa? forgot_password: Nie pamiętasz hasła? invalid_reset_password_token: Token do resetowania hasła jest nieprawidłowy lub utracił ważność. Spróbuj uzyskać nowy. + link_to_otp: Wprowadź kod dwustopniowego uwierzytelniania z telefonu lub użyj zapasowego kodu + link_to_webauth: Użyj swojego urządzenia z kluczem bezpieczeństwa login: Zaloguj się logout: Wyloguj się migrate_account: Przenieś konto @@ -724,6 +761,7 @@ pl: pending: Twoje zgłoszenie czeka na zatwierdzenie przez nas. Może to trochę potrwać. Jeżeli zgłoszenie zostanie przyjęte, otrzymasz wiadomość e-mail. redirecting_to: Twoje konto jest nieaktywne, ponieważ obecnie przekierowuje je na %{acct}. trouble_logging_in: Masz problem z zalogowaniem się? + use_security_key: Użyj klucza bezpieczeństwa authorize_follow: already_following: Już śledzisz to konto already_requested: Już wysłałeś(-aś) prośbę o możliwość śledzenia tego konta @@ -748,6 +786,7 @@ pl: date: formats: default: "%d. %b %Y" + with_month_name: "%d. %B %Y" datetime: distance_in_words: about_x_hours: "%{count}g" @@ -960,6 +999,10 @@ pl: redirect: Twoje obecne konto zostanie uaktualnione o informację o przeniesieniu i wyłączone z wyszukiwania moderation: title: Moderacja + move_handler: + carry_blocks_over_text: Ten użytkownik przeniósł się z konta %{acct}, które zablokowałeś(-aś). + carry_mutes_over_text: Ten użytkownik przeniósł się z konta %{acct}, które wyciszyłeś(-aś). + copy_account_note_text: 'Ten użytkownik przeniósł się z konta %{acct}, oto Twoje poprzednie notatki o nim:' notification_mailer: digest: action: Wyświetl wszystkie powiadomienia @@ -1012,6 +1055,14 @@ pl: quadrillion: bld thousand: tys trillion: bln + otp_authentication: + code_hint: Aby potwierdzić, wprowadź kod wygenerowany przez aplikację uwierzytelniającą + description_html: Jeśli włączysz uwierzytelnianie dwuetapowe używając aplikacji uwierzytelniającej, logowanie się będzie wymagało podania tokenu wyświetlonego na Twoim telefonie. + enable: Aktywuj + instructions_html: "Zeskanuj ten kod QR na swoim telefonie za pomocą Google Authenticator lub podobnej aplikacji TOTP. Od teraz będzie ona generowała kody wymagane przy logowaniu." + manual_instructions: 'Jeśli nie możesz zeskanować kodu QR i musisz wprowadzić go ręcznie, oto klucz w formie tekstu:' + setup: Skonfiguruj + wrong_code: Wprowadzony kod jest nieprawidłowy! Czy czas serwera i urządzenia jest poprawny? pagination: newer: Nowsze next: Następna @@ -1136,10 +1187,16 @@ pl: profile: Profil relationships: Śledzeni i śledzący two_factor_authentication: Uwierzytelnianie dwuetapowe + webauthn_authentication: Klucze bezpieczeństwa spam_check: spam_detected: To zgłoszenie jest automatyczne. Został wykryty spam. statuses: attached: + audio: + few: "%{count} pliki dźwiękowe" + many: "%{count} plików dźwiękowych" + one: "%{count} plik dźwiękowy" + other: pliki dźwiękowe (%{count}) description: 'Załączono: %{attached}' image: few: "%{count} obrazy" @@ -1289,21 +1346,20 @@ pl: default: "%d. %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Aby kontynuować, wprowadź kod wyświetlany przez aplikację uwierzytelniającą - description_html: Jeśli włączysz uwierzytelnianie dwuetapowe, logowanie się będzie wymagało podania tokenu wyświetlonego na Twoim telefonie. + add: Dodaj disable: Wyłącz - enable: Włącz + disabled_success: Pomyślnie wyłączono uwierzytelnianie dwuetapowe + edit: Edytuj enabled: Uwierzytelnianie dwuetapowe jest włączone enabled_success: Pomyślnie aktywowano uwierzytelnianie dwuetapowe generate_recovery_codes: Generuj kody zapasowe - instructions_html: "Zeskanuj ten kod QR na swoim urządzeniu za pomocą Google Authenticator, FreeOTP lub podobnej aplikacji. Od teraz będzie ona generowała kody wymagane przy logowaniu." lost_recovery_codes: Kody zapasowe pozwolą uzyskać dostęp do portalu, jeżeli utracisz dostęp do telefonu. Jeżeli utracisz dostęp do nich, możesz wygenerować je ponownie tutaj. Poprzednie zostaną unieważnione. - manual_instructions: 'Jeżeli nie możesz zeskanować kodu QR, musisz wprowadzić ten kod ręcznie:' + methods: Metody uwierzytelniania dwuetapowego + otp: Aplikacja uwierzytelniająca recovery_codes: Przywróć kody zapasowe recovery_codes_regenerated: Pomyślnie wygenerowano ponownie kody zapasowe recovery_instructions_html: Jeżeli kiedykolwiek utracisz dostęp do telefonu, możesz wykorzystać jeden z kodów zapasowych, aby odzyskać dostęp do konta. Trzymaj je w bezpiecznym miejscu. Na przykład, wydrukuj je i przechowuj z ważnymi dokumentami. - setup: Skonfiguruj - wrong_code: Wprowadzony kod jest niepoprawny! Czy czas serwera i urządzenia jest poprawny? + webauthn: Klucze bezpieczeństwa user_mailer: backup_ready: explanation: Zażądałeś pełnej kopii zapasowej konta na Mastodonie. Jest ona dostępna do pobrania! @@ -1351,9 +1407,11 @@ pl: tips: Wskazówki title: Witaj na pokładzie, %{name}! users: + blocked_email_provider: Ten dostawca e-mail jest niedozwolony follow_limit_reached: Nie możesz śledzić więcej niż %{limit} osób generic_access_help_html: Nie możesz uzyskać dostępu do konta? Skontaktuj się z %{email} aby uzyskać pomoc invalid_email: Adres e-mail jest niepoprawny + invalid_email_mx: Ten adres e-mail wydaje się nie istnieć invalid_otp_token: Kod uwierzytelniający jest niepoprawny invalid_sign_in_token: Nieprawidłowy kod zabezpieczający otp_lost_help_html: Jeżeli utracisz dostęp do obu, możesz skontaktować się z %{email} @@ -1363,3 +1421,20 @@ pl: verification: explanation_html: 'Możesz zweryfikować siebie jako właściciela stron, do których odnośniki znajdują się w metadanych. Aby to zrobić, strona musi zawierać odnośnik do Twojego profilu na Mastodonie. Odnośnik musi zawierać atrybut rel="me". Jego zawartość nie ma znaczenia. Przykład:' verification: Weryfikacja + webauthn_credentials: + add: Dodaj nowy klucz bezpieczeństwa + create: + error: Wystąpił problem z dodawaniem klucza bezpieczeństwa. Spróbuj ponownie. + success: Pomyślnie dodano klucz bezpieczeństwa. + delete: Usuń + delete_confirmation: Czy jesteś pewien, że chcesz usunąć ten klucz bezpieczeństwa? + description_html: Jeśli włączysz uwierzytelnianie kluczem bezpieczeństwa, logowanie będzie wymagało użycia jednego z kluczy bezpieczeństwa. + destroy: + error: Wystąpił problem z usuwaniem klucza bezpieczeństwa. Spróbuj ponownie. + success: Pomyślnie usunięto klucz bezpieczeństwa. + invalid_credential: Nieprawidłowy klucz bezpieczeństwa + nickname_hint: Wprowadź nazwę twojego nowego klucza bezpieczeństwa + not_enabled: Nie włączyłeś WebAuthn + not_supported: Twoja przeglądarka nie obsługuje kluczy bezpieczeństwa + otp_required: Aby użyć kluczy bezpieczeństwa, najpierw włącz uwierzytelnianie dwuskładnikowe. + registered_on: Zarejestrowano %{date} diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 2e2a8d4eb..7283c1b57 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -98,6 +98,7 @@ pt-BR: add_email_domain_block: Adicionar o domínio de e-mail à lista negra approve: Aprovar approve_all: Aprovar tudo + approved_msg: Aprovado com sucesso o pedido de registro de %{username} are_you_sure: Você tem certeza? avatar: Imagem de perfil by_domain: Domínio @@ -111,9 +112,11 @@ pt-BR: confirm: Confirmar confirmed: Confirmado confirming: Confirmando + delete: Excluir dados deleted: Excluído demote: Rebaixar - disable: Desativar + destroyed_msg: Os dados de %{username} estão na fila para serem excluídos em breve + disable: Congelar disable_two_factor_authentication: Desativar autenticação de dois fatores disabled: Desativada display_name: Nome de exibição @@ -121,8 +124,9 @@ pt-BR: edit: Editar email: E-mail email_status: Status do e-mail - enable: Ativar + enable: Descongelar enabled: Ativada + enabled_msg: Descongelada com sucesso a conta de %{username} followers: Seguidores follows: Seguindo header: Capa @@ -138,6 +142,8 @@ pt-BR: login_status: Situação da conta media_attachments: Mídias anexadas memorialize: Converter em memorial + memorialized: Convertidas em memorial + memorialized_msg: Transformou com sucesso %{username} em uma conta memorial moderation: active: Ativo all: Todos @@ -158,10 +164,14 @@ pt-BR: public: Público push_subscription_expires: Inscrição PuSH expira redownload: Atualizar perfil + redownloaded_msg: Atualizado com sucesso o perfil de %{username} a partir da origem reject: Vetar reject_all: Vetar tudo + rejected_msg: Rejeitado com sucesso o pedido de registro de %{username} remove_avatar: Remover imagem de perfil remove_header: Remover capa + removed_avatar_msg: Removida com sucesso a imagem de avatar de %{username} + removed_header_msg: Removida com sucesso a imagem de capa de %{username} resend_confirmation: already_confirmed: Este usuário já está confirmado send: Reenviar o e-mail de confirmação @@ -187,13 +197,18 @@ pt-BR: statuses: Toots subscribe: Inscrever-se suspended: Banido + suspension_irreversible: Os dados desta conta foram excluídos de forma irreversível. Você pode remover a suspensão da conta para torná-la utilizável, mas ela não irá recuperar nenhum dado que ela possuía anteriormente. + suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente removidos em %{date}. Até lá, a conta pode ser restaurada sem nenhum efeito negativo. Se você deseja remover todos os dados da conta imediatamente, você pode fazer isso abaixo. time_in_queue: Esperando na fila por %{time} title: Contas unconfirmed_email: E-mail não confirmado undo_silenced: Desfazer silêncio undo_suspension: Desbanir + unsilenced_msg: Removidas com sucesso as limitações da conta de %{username} unsubscribe: Cancelar inscrição + unsuspended_msg: Removida com sucesso a suspensão da conta de %{username} username: Nome de usuário + view_domain: Ver resumo para o domínio warn: Notificar web: Web whitelisted: Permitido @@ -208,19 +223,21 @@ pt-BR: create_domain_allow: Adicionar domínio permitido create_domain_block: Criar Bloqueio de Domínio create_email_domain_block: Criar Bloqueio de Domínio de E-mail + create_ip_block: Criar regra de IP demote_user: Rebaixar usuário destroy_announcement: Excluir anúncio destroy_custom_emoji: Excluir emoji personalizado destroy_domain_allow: Excluir domínio permitido destroy_domain_block: Excluir Bloqueio de Domínio destroy_email_domain_block: Excluir bloqueio de domínio de e-mail + destroy_ip_block: Excluir regra de IP destroy_status: Excluir Status disable_2fa_user: Desativar autenticação de dois fatores disable_custom_emoji: Desativar Emoji Personalizado disable_user: Desativar usuário enable_custom_emoji: Ativar Emoji Personalizado enable_user: Ativar usuário - memorialize_account: Memorizar Conta + memorialize_account: Converter conta em memorial promote_user: Promover usuário remove_avatar_user: Remover Avatar reopen_report: Reabrir Relatório @@ -244,19 +261,21 @@ pt-BR: create_domain_allow: "%{name} permitiu %{target}" create_domain_block: "%{name} bloqueou %{target}" create_email_domain_block: "%{name} adicionou o domínio de e-mail %{target} à lista negra" + create_ip_block: "%{name} criou regra para o IP %{target}" demote_user: "%{name} rebaixou o usuário %{target}" destroy_announcement: "%{name} excluiu o anúncio %{target}" destroy_custom_emoji: "%{name} excluiu emoji %{target}" destroy_domain_allow: "%{name} bloqueou %{target}" destroy_domain_block: "%{name} desbloqueou %{target}" destroy_email_domain_block: "%{name} adicionou domínio de e-mail %{target} à lista branca" + destroy_ip_block: "%{name} excluiu regra para o IP %{target}" destroy_status: "%{name} excluiu toot de %{target}" disable_2fa_user: "%{name} desativou a exigência de autenticação de dois fatores para o usuário %{target}" disable_custom_emoji: "%{name} desativou o emoji %{target}" disable_user: "%{name} desativou o acesso para o usuário %{target}" enable_custom_emoji: "%{name} ativou o emoji %{target}" enable_user: "%{name} ativou o acesso para o usuário %{target}" - memorialize_account: "%{name} transformou a conta de %{target} em um memorial" + memorialize_account: "%{name} transformou a conta de %{target} em um página de memorial" promote_user: "%{name} promoveu o usuário %{target}" remove_avatar_user: "%{name} removeu a imagem de perfil de %{target}" reopen_report: "%{name} reabriu a denúncia %{target}" @@ -391,7 +410,7 @@ pt-BR: other: "%{count} contas no banco de dados foram afetadas" retroactive: silence: Dessilenciar contas existentes afetadas deste domínio - suspend: Dessuspender contas existentes afetadas deste domínio + suspend: Remover a suspensão das contas afetadas deste domínio title: Desfazer bloqueio de domínio para %{domain} undo: Desfazer undo: Desfazer bloqueio de domínio @@ -434,6 +453,21 @@ pt-BR: expired: Expirado title: Filtro title: Convites + ip_blocks: + add_new: Criar regra + created_msg: Nova regra de IP adicionada com sucesso + delete: Excluir + expires_in: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mês + '31556952': 1 ano + '86400': 1 dia + '94670856': 3 anos + new: + title: Criar nova regra de IP + no_ip_block_selected: Nenhuma regra de IP foi alterada pois nenhuma foi selecionada + title: Regras de IP pending_accounts: title: Contas pendentes (%{count}) relationships: @@ -681,8 +715,11 @@ pt-BR: prefix_sign_up: Crie uma conta no Mastodon hoje! suffix: Com uma conta, você poderá seguir pessoas, postar atualizações, trocar mensagens com usuários de qualquer instância Mastodon e muito mais! didnt_get_confirmation: Não recebeu instruções de confirmação? + dont_have_your_security_key: Não está com a sua chave de segurança? forgot_password: Esqueceu a sua senha? invalid_reset_password_token: Código de alteração de senha é inválido ou expirou. Por favor, solicite um novo. + link_to_otp: Digite um código de duas etapas do seu telefone ou um código de recuperação + link_to_webauth: Use seu dispositivo de chave de segurança login: Entrar logout: Sair migrate_account: Mudar-se para outra conta @@ -708,6 +745,7 @@ pt-BR: pending: Sua solicitação está com revisão pendente por parte de nossa equipe. Você receberá um e-mail se ela for aprovada. redirecting_to: Sua conta está inativa porque atualmente está redirecionando para %{acct}. trouble_logging_in: Problemas para entrar? + use_security_key: Usar chave de segurança authorize_follow: already_following: Você já segue already_requested: Você já enviou uma solicitação para seguir esta conta @@ -732,6 +770,7 @@ pt-BR: date: formats: default: "%d %b, %Y" + with_month_name: "%d de %b de %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -992,6 +1031,14 @@ pt-BR: quadrillion: QUA thousand: MIL trillion: TRI + otp_authentication: + code_hint: Digite o código gerado pelo seu aplicativo autenticador para confirmar + description_html: Se você habilitar a autenticação de dois fatores usando um aplicativo autenticador, o login exigirá que você esteja com o seu telefone, que gerará tokens para você entrar. + enable: Habilitar + instructions_html: "Escaneie este código QR no Google Authenticator ou em um aplicativo TOTP similar no seu telefone. A partir de agora, esse aplicativo irá gerar tokens que você terá que digitar ao fazer login." + manual_instructions: 'Se você não pode escanear o código QR e precisa digitá-lo manualmente, aqui está o segredo em texto:' + setup: Configurar + wrong_code: O código digitado é inválido! O horário do servidor e o horário do dispositivo estão corretos? pagination: newer: Mais novo next: Próximo @@ -1116,6 +1163,7 @@ pt-BR: profile: Perfil relationships: Seguindo e seguidores two_factor_authentication: Autenticação de dois fatores + webauthn_authentication: Chaves de segurança spam_check: spam_detected: Esta é uma denúncia automática. Spam foi detectado. statuses: @@ -1262,21 +1310,20 @@ pt-BR: default: "%H:%M em %d de %b de %Y" month: "%b de %Y" two_factor_authentication: - code_hint: Digite o código de dois fatores gerado pelo aplicativo no seu celular - description_html: Se você ativar a autenticação de dois fatores, o acesso à sua conta exigirá um celular, que gerará códigos para validação. + add: Adicionar disable: Desativar - enable: Ativar + disabled_success: Autenticação de dois fatores desabilitada com sucesso + edit: Editar enabled: Autenticação de dois fatores ativada enabled_success: Autenticação de dois fatores ativada com sucesso generate_recovery_codes: Gerar códigos de recuperação - instructions_html: "Escaneie este QR Code no Google Authenticator ou aplicativo TOTP similar no seu celular. De agora em diante, este aplicativo gerará códigos que você terá que inserir ao entrar na sua conta." lost_recovery_codes: Códigos de recuperação permitem que você recupere o acesso à sua conta caso perca o seu celular. Se você perdeu seus códigos de recuperação, você pode gerá-los novamente aqui. Seus códigos de recuperação anteriores serão invalidados. - manual_instructions: 'Se você não consegue escanear o QR code, aqui está o segredo em texto:' + methods: Métodos de dois fatores + otp: Aplicativo autenticador recovery_codes: Códigos de recuperação de reserva recovery_codes_regenerated: Códigos de recuperação gerados com sucesso recovery_instructions_html: Se você perder acesso ao seu celular, você pode usar um dos códigos de recuperação abaixo para acessar a sua conta. Mantenha os códigos de recuperação em um local seguro. Por exemplo, você pode imprimi-los e guardá-los junto com outros documentos importantes. - setup: Configurar - wrong_code: Código de dois fatores inválido. O horário da instância e o horário do seu celular estão corretos? + webauthn: Chaves de segurança user_mailer: backup_ready: explanation: Você pediu um backup completo da sua conta no Mastodon. E agora está pronto para ser baixado! @@ -1308,7 +1355,7 @@ pt-BR: suspend: Conta banida welcome: edit_profile_action: Configurar perfil - edit_profile_step: Você pode customizar o seu perfil ao fazer upload de um avatar, header, alterar seu nome de exibição e mais. Se você preferir revisar novos seguidores antes de poderem te seguir, você pode trancar a sua conta. + edit_profile_step: Você pode personalizar o seu perfil enviando um avatar, uma capa, alterando seu nome de exibição e etc. Se você preferir aprovar seus novos seguidores antes de eles te seguirem, você pode trancar a sua conta. explanation: Aqui estão algumas dicas para você começar final_action: Comece a tootar final_step: 'Comece a tootar! Mesmo sem seguidores, suas mensagens públicas podem ser vistas pelos outros, por exemplo, na linha local e nas hashtags. Você pode querer fazer uma introdução usando a hashtag #introdução, ou em inglês usando a hashtag #introductions.' @@ -1324,9 +1371,11 @@ pt-BR: tips: Dicas title: Boas vindas, %{name}! users: + blocked_email_provider: Este provedor de e-mail não é permitido follow_limit_reached: Você não pode seguir mais de %{limit} pessoas generic_access_help_html: Problemas para acessar sua conta? Você pode entrar em contato com %{email} para obter ajuda invalid_email: Endereço de e-mail inválido + invalid_email_mx: O endereço de e-mail parece não existir invalid_otp_token: Código de dois fatores inválido invalid_sign_in_token: Cógido de segurança inválido otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email} @@ -1336,3 +1385,20 @@ pt-BR: verification: explanation_html: 'Você pode verificar os links nos metadados do seu perfil. Para isso, o site citado deve conter um link de volta para o seu perfil do Mastodon. O link de volta deve conter um atributo rel="me". O conteúdo ou texto do link não importa. Aqui está um exemplo:' verification: Verificação + webauthn_credentials: + add: Adicionar nova chave de segurança + create: + error: Houve um problema ao adicionar sua chave de segurança. Tente novamente. + success: A sua chave de segurança foi adicionada com sucesso. + delete: Excluir + delete_confirmation: Você tem certeza de que deseja excluir esta chave de segurança? + description_html: Se você habilitar a autenticação por chave de segurança, o login exigirá que você use uma das suas chaves de segurança. + destroy: + error: Houve um problema ao excluir sua chave de segurança. Tente novamente. + success: Sua chave de segurança foi excluída com sucesso. + invalid_credential: Chave de segurança inválida + nickname_hint: Digite o apelido da sua nova chave de segurança + not_enabled: Você ainda não habilitou o WebAuthn + not_supported: Este navegador não tem suporte a chaves de segurança + otp_required: Para usar chaves de segurança, por favor habilite primeiro a autenticação de dois fatores. + registered_on: Registrado em %{date} diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 0d04bc358..b9f2ac16b 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -79,7 +79,7 @@ pt-PT: posts_with_replies: Posts e Respostas reserved_username: Este nome de utilizadores é reservado roles: - admin: Administrador + admin: Administrador(a) bot: Robô group: Grupo moderator: Moderador @@ -90,14 +90,15 @@ pt-PT: action: Executar acção title: Executar acção de moderação em %{acct} account_moderation_notes: - create: Criar + create: Criar nota created_msg: Nota de moderação criada com sucesso! delete: Eliminar destroyed_msg: Nota de moderação excluída com sucesso! accounts: - add_email_domain_block: Adicione o domínio de email à lista negra + add_email_domain_block: Adicionar o domínio de email à lista negra approve: Aprovar approve_all: Aprovar todos + approved_msg: Inscrição de %{username} aprovada com sucesso are_you_sure: Tens a certeza? avatar: Imagem de Perfil by_domain: Domínio @@ -108,26 +109,29 @@ pt-PT: new_email: Novo e-mail submit: Alterar e-mail title: Alterar e-mail para %{username} - confirm: Confirme + confirm: Confirmar confirmed: Confirmado - confirming: Confirmer + confirming: A confirmar + delete: Eliminar dados deleted: Apagada demote: Rebaixar + destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato disable: Desativar disable_two_factor_authentication: Desativar 2FA - disabled: Desativado + disabled: Congelada display_name: Nome a mostrar domain: Domínio edit: Editar email: E-mail - email_status: Estado do correio electrónico + email_status: Estado do e-mail enable: Ativar enabled: Ativado + enabled_msg: Descongelou com sucesso a conta %{username} followers: Seguidores - follows: Seguindo + follows: A seguir header: Cabeçalho inbox_url: URL da caixa de entrada - invited_by: Convidado por + invited_by: Convidado(a) por ip: IP joined: Aderiu location: @@ -138,6 +142,8 @@ pt-PT: login_status: Estado de início de sessão media_attachments: Anexos de media memorialize: Converter em memorial + memorialized: Em memória + memorialized_msg: Conta %{username} transformada com sucesso em memorial moderation: active: Activo all: Todos @@ -158,10 +164,14 @@ pt-PT: public: Público push_subscription_expires: A Inscrição PuSH expira redownload: Atualizar perfil + redownloaded_msg: Atualizado com sucesso o perfil de %{username} da origem reject: Rejeitar reject_all: Rejeitar todas + rejected_msg: Inscrição de %{username} rejeitada com sucesso remove_avatar: Remover a imagem de perfil remove_header: Remover o cabeçalho + removed_avatar_msg: Imagem de perfil de %{username} removida com sucesso + removed_header_msg: Imagem de cabeçalho de %{username} removida com sucesso resend_confirmation: already_confirmed: Este utilizador já está confirmado send: Reenviar um email de confirmação @@ -171,13 +181,15 @@ pt-PT: resubscribe: Reinscrever role: Permissões roles: - admin: Administrador + admin: Administrador(a) moderator: Moderador staff: Equipa user: Utilizador search: Pesquisar search_same_email_domain: Outros utilizadores com o mesmo domínio de email search_same_ip: Outros utilizadores com o mesmo IP + sensitive: Marcar como sensível + sensitized: marcada como sensível shared_inbox_url: URL da caixa de entrada compartilhada show: created_reports: Relatórios gerados por esta conta @@ -187,13 +199,19 @@ pt-PT: statuses: Status subscribe: Inscrever-se suspended: Suspensa + suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Você pode cancelar a suspensão da conta para torná-la utilizável, mas ela não irá recuperar os dados que possuía anteriormente. + suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se deseja eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo. time_in_queue: Aguardando na fila %{time} title: Contas unconfirmed_email: E-mail não confirmado + undo_sensitized: Desmarcar como sensível undo_silenced: Desfazer silenciar undo_suspension: Desfazer supensão + unsilenced_msg: Removeu com sucesso as limitações da conta %{username} unsubscribe: Cancelar inscrição + unsuspended_msg: Removeu com sucesso a suspensão da conta %{username} username: Utilizador + view_domain: Ver resumo do domínio warn: Aviso web: Web whitelisted: Está na lista branca @@ -208,12 +226,14 @@ pt-PT: create_domain_allow: Criar Permissão de Domínio create_domain_block: Criar Bloqueio de Domínio create_email_domain_block: Criar Bloqueio de Domínio de E-mail + create_ip_block: Criar regra de IP demote_user: Despromover Utilizador destroy_announcement: Remover Anúncio destroy_custom_emoji: Remover Emoji Personalizado destroy_domain_allow: Remover Permissão de Domínio destroy_domain_block: Remover Bloqueio de Domínio destroy_email_domain_block: Remover Bloqueio de Domínio de E-mail + destroy_ip_block: Eliminar regra de IP destroy_status: Remover Estado disable_2fa_user: Desativar 2FA disable_custom_emoji: Desativar Emoji Personalizado @@ -226,9 +246,11 @@ pt-PT: reopen_report: Reabrir Relatório reset_password_user: Repor Password resolve_report: Resolver Relatório + sensitive_account: Marcar a media na sua conta como sensível silence_account: Silenciar Conta suspend_account: Suspender Conta unassigned_report: Desatribuir Relatório + unsensitive_account: Desmarcar a media na sua conta como sensível unsilence_account: Deixar de Silenciar Conta unsuspend_account: Retirar Suspensão à Conta update_announcement: Atualizar Anúncio @@ -244,12 +266,14 @@ pt-PT: create_domain_allow: "%{name} colocou o domínio %{target} na lista branca" create_domain_block: "%{name} bloqueou o domínio %{target}" create_email_domain_block: "%{name} adicionou na lista negra o domínio de correio electrónico %{target}" + create_ip_block: "%{name} criou regra para o IP %{target}" demote_user: "%{name} rebaixou o utilizador %{target}" destroy_announcement: "%{name} excluiu o anúncio %{target}" destroy_custom_emoji: "%{name} destruiu o emoji %{target}" destroy_domain_allow: "%{name} removeu o domínio %{target} da lista branca" destroy_domain_block: "%{name} desbloqueou o domínio %{target}" destroy_email_domain_block: "%{name} retirou o domínio de e-mail %{target} da lista negra" + destroy_ip_block: "%{name} eliminou regra para o IP %{target}" destroy_status: "%{name} removeu o publicação feita por %{target}" disable_2fa_user: "%{name} desactivou o requerimento de autenticação em dois passos para o utilizador %{target}" disable_custom_emoji: "%{name} desabilitou o emoji %{target}" @@ -262,9 +286,11 @@ pt-PT: reopen_report: "%{name} reabriu o relatório %{target}" reset_password_user: "%{name} restabeleceu a palavra-passe do utilizador %{target}" resolve_report: "%{name} recusou o relatório %{target}" + sensitive_account: "%{name} marcou a media de %{target} como sensível" silence_account: "%{name} silenciou a conta de %{target}" suspend_account: "%{name} suspendeu a conta de %{target}" unassigned_report: "%{name} não atribuiu o relatório %{target}" + unsensitive_account: "%{name} desmarcou a media de %{target} como sensível" unsilence_account: "%{name} desativou o silêncio de %{target}" unsuspend_account: "%{name} desativou a suspensão de %{target}" update_announcement: "%{name} atualizou o anúncio %{target}" @@ -434,6 +460,21 @@ pt-PT: expired: Expirados title: Filtro title: Convites + ip_blocks: + add_new: Criar regra + created_msg: Nova regra de IP adicionada com sucesso + delete: Eliminar + expires_in: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mês + '31556952': 1 ano + '86400': 1 dia + '94670856': 3 anos + new: + title: Criar nova regra de IP + no_ip_block_selected: Nenhuma regra de IP foi alterada pois nenhuma foi selecionada + title: Regras de IP pending_accounts: title: Contas pendentes (%{count}) relationships: @@ -681,8 +722,11 @@ pt-PT: prefix_sign_up: Inscreva-se hoje no Mastodon! suffix: Com uma conta, poderá seguir pessoas, publicar atualizações e trocar mensagens com utilizadores de qualquer instância Mastodon e muito mais! didnt_get_confirmation: Não recebeu o email de confirmação? + dont_have_your_security_key: Não tem a sua chave de segurança? forgot_password: Esqueceste a palavra-passe? invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo. + link_to_otp: Insere um código de duas etapas do teu telemóvel ou um código de recuperação + link_to_webauth: Usa o teu dispositivo de chave de segurança login: Entrar logout: Sair migrate_account: Mudar para uma conta diferente @@ -708,6 +752,7 @@ pt-PT: pending: A sua inscrição está pendente de revisão pela nossa equipa. Isso pode demorar algum tempo. Receberá um e-mail se a sua conta for aprovada. redirecting_to: A sua conta está inativa porque está atualmente a ser redirecionada para %{acct}. trouble_logging_in: Problemas em iniciar sessão? + use_security_key: Usar chave de segurança authorize_follow: already_following: Tu já estás a seguir esta conta already_requested: Já enviou anteriormente um pedido para seguir esta conta @@ -732,6 +777,7 @@ pt-PT: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -992,6 +1038,14 @@ pt-PT: quadrillion: Q thousand: mil trillion: T + otp_authentication: + code_hint: Introduz o código gerado pela tua aplicação de autenticação para confirmar + description_html: Se ativar a autenticação em duas etapas, para entrar na sua conta terá de ter consigo o seu telefone, que vai gerar os tokens necessários à validação do seu acesso. + enable: Ativar + instructions_html: "Digitalize este código QR no Google Authenticator ou num aplicativo TOTP similar no seu telefone. A partir de agora, esse aplicativo irá gerar tokens que você terá que introduzir para aceder à sua conta." + manual_instructions: 'Se você não consegue digitalizar o código QR e precisa introduzi-lo manualmente, aqui está o código em texto:' + setup: Configurar + wrong_code: O código introduzido é inválido! A hora do servidor e a hora do dispositivo estão corretos? pagination: newer: Mais nova next: Seguinte @@ -1116,6 +1170,7 @@ pt-PT: profile: Perfil relationships: Seguindo e seguidores two_factor_authentication: Autenticação em dois passos + webauthn_authentication: Chaves de segurança spam_check: spam_detected: Este é um relatório automatizado. Foi detectado spam. statuses: @@ -1154,6 +1209,8 @@ pt-PT: other: "%{count} votos" vote: Votar show_more: Mostrar mais + show_newer: Mostrar mais recentes + show_older: Mostrar mais antigos show_thread: Mostrar conversa sign_in_to_participate: Inicie a sessão para participar na conversa title: '%{name}: "%{quote}"' @@ -1256,27 +1313,26 @@ pt-PT: themes: contrast: Mastodon (Elevado contraste) default: Mastodon - mastodon-light: Mastodon (Leve) + mastodon-light: Mastodon (Claro) time: formats: default: "%H:%M em %d de %b de %Y" month: "%b de %Y" two_factor_authentication: - code_hint: Entre o código gerado pelo seu aplicativo para confirmar - description_html: Se ativar a autenticação em dois passos, quando logar será necessário o seu telefone que vai gerar os tokens para validação. + add: Adicionar disable: Desativar - enable: Ativar + disabled_success: Autenticação em duas etapas desativada com sucesso + edit: Editar enabled: A autenticação em dois passos está ativada enabled_success: Autenticação em dois passos ativada com sucesso generate_recovery_codes: Gerar códigos para recuperar conta - instructions_html: "Scaneie este código QR no seu Google Authenticator ou aplicativo similar no seu telefone. A partir de agora seu aplicativo irá gerar tokens que deverão ser digitados para você logar." lost_recovery_codes: Códigos de recuperação permite que você recupere o acesso a sua conta se você perder seu telefone. Se você perder os códigos de recuperação, você pode regera-los aqui. Seus códigos antigos serão invalidados. - manual_instructions: 'Se você não puder scanear o código QR e precisa digita-los manualmente, aqui está o segredo em texto.:' + methods: Métodos de duas etapas + otp: Aplicação de autenticação recovery_codes: Cópia de segurança dos códigos de recuperação recovery_codes_regenerated: Códigos de recuperação foram gerados com sucesso recovery_instructions_html: Se tu alguma vez perderes o teu smartphone, to poderás usar um dos códigos de recuperação para voltares a ter acesso à tua conta. Mantém os códigos de recuperação seguros. Por exemplo, tu podes imprimi-los e guardá-los junto a outros documentos importantes. - setup: Configurar - wrong_code: O código inserido é invalido! O horário do servidor e o horário do seu aparelho estão corretos? + webauthn: Chaves de segurança user_mailer: backup_ready: explanation: Pediste uma cópia completa da tua conta Mastodon. Ela já está pronta para descarregares! @@ -1291,6 +1347,7 @@ pt-PT: warning: explanation: disable: Enquanto a tua conta está congelada, os seus dados permanecem intactos, mas tu não podes executar quaisquer acções até que ela seja desbloqueada. + sensitive: Os seus ficheiros de media carregados e os media ligados serão tratados como sensíveis. silence: Enquanto a sua conta estiver limitada, só pessoas que já estiver a seguir irão ver as suas publicações nesta instância e poderá ser excluído de várias listagens públicas. No entanto, outros ainda o poderão seguir de forma manual. suspend: A sua conta foi suspensa e todas as suas publicações e os seus ficheiros de media foram irreversivelmente removidos desta instância e das instâncias onde tinhas seguidores. get_in_touch: Pode responder a este e-mail para entrar em contacto com a equipa de %{instance}. @@ -1299,11 +1356,13 @@ pt-PT: subject: disable: A tua conta %{acct} foi congelada none: Aviso para %{acct} + sensitive: As publicações de media da sua conta %{acct} foram marcadas como sensíveis silence: A tua conta %{acct} foi limitada suspend: A tua conta %{acct} foi suspensa title: disable: Conta congelada none: Aviso + sensitive: A sua media foi marcada como sensível silence: Conta limitada suspend: Conta suspensa welcome: @@ -1318,15 +1377,17 @@ pt-PT: review_preferences_step: Certifica-te de configurar as tuas preferências, tais como os e-mails que gostarias de receber ou o nível de privacidade que desejas que as tuas publicações tenham por defeito. Se não sofres de enjoo, podes ativar a opção de auto-iniciar GIFs. subject: Bem-vindo ao Mastodon tip_federated_timeline: A cronologia federativa é uma visão global da rede Mastodon. Mas só inclui pessoas que os teus vizinhos subscrevem, por isso não é uma visão completa. - tip_following: Você segue o(s) administrador(es) da sua instância por defeito. Para encontrar mais pessoas interessantes, procure nas cronologias local e federada. + tip_following: Segues o(s) administrador(es) do teu servidor por defeito. Para encontrar mais pessoas interessantes, procura nas cronologias local e federada. tip_local_timeline: A cronologia local é uma visão global das pessoas em %{instance}. Estes são os seus vizinhos mais próximos! tip_mobile_webapp: Se o teu navegador móvel te oferecer a possibilidade de adicionar o Mastodon ao teu homescreen, tu podes receber notificações push. Ele age como uma aplicação nativa de vários modos! tips: Dicas title: Bem-vindo a bordo, %{name}! users: + blocked_email_provider: Este provedor de e-mail não é permitido follow_limit_reached: Não podes seguir mais do que %{limit} pessoas generic_access_help_html: Problemas para aceder à sua conta? Pode entrar em contacto com %{email} para obter ajuda invalid_email: O endereço de e-mail é inválido + invalid_email_mx: O endereço de e-mail não parece existir invalid_otp_token: Código de autenticação inválido invalid_sign_in_token: Cógido de segurança inválido otp_lost_help_html: Se tu perdeste acesso a ambos, tu podes entrar em contacto com %{email} @@ -1336,3 +1397,20 @@ pt-PT: verification: explanation_html: 'Tu podes comprovar que és o dono dos links nos metadados do teu perfil. Para isso, o website para o qual o link aponta tem de conter um link para o teu perfil do Mastodon. Este link tem de ter um rel="me" atributo. O conteúdo do texto não é relevante. Aqui está um exemplo:' verification: Verificação + webauthn_credentials: + add: Adicionar nova chave de segurança + create: + error: Ocorreu um problema ao adicionar sua chave de segurança. Tente novamente. + success: A sua chave de segurança foi adicionada com sucesso. + delete: Remover + delete_confirmation: Tem a certeza de que pretende remover esta chave de segurança? + description_html: Se você ativar a autenticação com chave de segurança, para aceder à sua conta será necessário que utilize uma das suas chaves de segurança. + destroy: + error: Ocorreu um problema ao remover a sua chave de segurança. Tente novamente. + success: A sua chave de segurança foi removida com sucesso. + invalid_credential: Chave de segurança inválida + nickname_hint: Introduza o apelido da sua nova chave de segurança + not_enabled: Ainda não ativou o WebAuthn + not_supported: Este navegador não suporta chaves de segurança + otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação de duas etapas. + registered_on: Registado em %{date} diff --git a/config/locales/ro.yml b/config/locales/ro.yml index c1aec2d15..630bd91d6 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -680,21 +680,14 @@ ro: default: "%d %m, %Y, %H:%M" month: "%m %Y" two_factor_authentication: - code_hint: Introduceți codul generat de aplicația dvs de autentificare pentru a confirma - description_html: Dacă activați autentificarea în doi pași, autentificarea va necesita ca tu să fii în posesia telefonului tău, ceea ce va genera token-uri pentru ca tu să intri. disable: Dezactivează - enable: Activează enabled: Autentificare în doi pași este activată enabled_success: Autentificarea în doi pași activată cu succes generate_recovery_codes: Generează coduri de recuperare - instructions_html: "Scanați acest cod QR în Google Authenticator sau o aplicație TOTP similiară de pe telefonul dvs.. De acum înainte, acea aplicație va genera token-uri pe care va trebui să îi introduceți atunci când vă conectați." lost_recovery_codes: Codurile de recuperare vă permit să redobândiți accesul la contul dvs. dacă vă pierdeți telefonul. Dacă ți-ai pierdut codurile de recuperare, le poți regenera aici. Codurile tale vechi de recuperare vor fi invalidate. - manual_instructions: 'Dacă nu puteți scana codul QR și trebuie să-l introduceți manual, aici este textul simplu pentru cheia secretă:' recovery_codes: Copie a codurilor de recuperare recovery_codes_regenerated: Coduri de recuperare regenerate cu succes recovery_instructions_html: Dacă îți pierzi vreodată accesul la telefon, poți folosi unul dintre codurile de recuperare de mai jos pentru a recâștiga accesul la contul tău. Păstrați codurile de recuperare în condiții de siguranță. De exemplu, le puteți tipări și stoca cu alte documente importante. - setup: Configurare - wrong_code: Codul introdus nu a fost valid! Orele serverului și timpul dispozitivului sunt corecte? user_mailer: backup_ready: explanation: Ai solicitat o copie de rezervă completă a contului tău. Acum este gata pentru descărcare! diff --git a/config/locales/ru.yml b/config/locales/ru.yml index f316c5cdf..b89575257 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -106,6 +106,7 @@ ru: add_email_domain_block: Заблокировать e-mail домен approve: Подтвердить approve_all: Подтвердить все + approved_msg: Успешно одобрена заявка на регистрацию %{username} are_you_sure: Вы уверены? avatar: Аватар by_domain: Домен @@ -119,8 +120,10 @@ ru: confirm: Подтвердить confirmed: Подтверждено confirming: Подтверждение + delete: Удалить данные deleted: Удалён demote: Разжаловать + destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка disable_two_factor_authentication: Отключить 2FA disabled: Отключено @@ -131,6 +134,7 @@ ru: email_status: Статус e-mail enable: Включить enabled: Включен + enabled_msg: Учётная запись %{username} успешно разморожена followers: Подписчики follows: Подписки header: Шапка @@ -146,6 +150,8 @@ ru: login_status: Статус учётной записи media_attachments: Файлы мультимедиа memorialize: Сделать мемориалом + memorialized: Превращён в памятник + memorialized_msg: "%{username} успешно превращён в памятник" moderation: active: Действующие all: Все @@ -166,10 +172,14 @@ ru: public: Публичный push_subscription_expires: Подписка PuSH истекает redownload: Обновить аватар + redownloaded_msg: Профиль %{username} успешно обновлен из оригинала reject: Отклонить reject_all: Отклонить все + rejected_msg: Успешно отклонено приложение для регистрации %{username} remove_avatar: Удалить аватар remove_header: Убрать шапку + removed_avatar_msg: Аватар %{username} успешно удален + removed_header_msg: Успешно удалено изображение заголовка %{username} resend_confirmation: already_confirmed: Этот пользователь уже подтвержден send: Повторно отправить подтверждение по электронной почте @@ -195,13 +205,18 @@ ru: statuses: Посты subscribe: Подписаться suspended: Заморожен + suspension_irreversible: Данные этой учётной записи были необратимо удалены. Вы можете разблокировать учетную запись, чтобы сделать её доступной, но это не восстановит ранее имевшиеся в ней данные. + suspension_reversible_hint_html: Учётная запись была заблокирована, и данные будут полностью удалены %{date}. До этого момента её можно восстановить без каких-либо неприятных последствий. Если вы хотите немедленно удалить все данные учётной записи, вы можете сделать это ниже. time_in_queue: Ожидание в очереди %{time} title: Учётные записи unconfirmed_email: Неподтверждённый e-mail undo_silenced: Отменить скрытие undo_suspension: Снять блокировку + unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно unsubscribe: Отписаться + unsuspended_msg: Учётная запись %{username} успешно разморожена username: Имя пользователя + view_domain: Просмотр сводки по домену warn: Предупреждение web: Веб whitelisted: В белом списке @@ -216,12 +231,14 @@ ru: create_domain_allow: Создать разрешение для домена create_domain_block: Блокировка доменов create_email_domain_block: Блокировка e-mail доменов + create_ip_block: Создать IP правило demote_user: Разжалование пользователей destroy_announcement: Удаление объявлений destroy_custom_emoji: Удаление эмодзи destroy_domain_allow: Удалить разрешение для домена destroy_domain_block: Разблокировка доменов destroy_email_domain_block: Разблокировка e-mail доменов + destroy_ip_block: Удалить IP правило destroy_status: Удаление постов disable_2fa_user: Отключение 2FA disable_custom_emoji: Отключение эмодзи @@ -252,12 +269,14 @@ ru: create_domain_allow: "%{name} внес(ла) домен %{target} в белый список" create_domain_block: "%{name} заблокировал(а) домен %{target}" create_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в чёрный список" + create_ip_block: "%{name} создал правило для IP %{target}" demote_user: "%{name} разжаловал(а) пользователя %{target}" destroy_announcement: "%{name} удалил объявление %{target}" destroy_custom_emoji: "%{name} измельчил(а) эмодзи %{target} в пыль" destroy_domain_allow: "%{name} убрал домен %{target} из белого списка" destroy_domain_block: "%{name} разблокировал(а) домен %{target}" destroy_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в белый список" + destroy_ip_block: "%{name} удалил правило для IP %{target}" destroy_status: "%{name} удалил(а) пост пользователя %{target}" disable_2fa_user: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}" disable_custom_emoji: "%{name} отключил(а) эмодзи %{target}" @@ -451,6 +470,21 @@ ru: expired: Истёкшие title: Фильтр title: Приглашения + ip_blocks: + add_new: Создать правило + created_msg: Успешно добавлено новое IP правило + delete: Удалить + expires_in: + '1209600': 2 недели + '15778476': 6 месяцев + '2629746': 1 месяц + '31556952': 1 год + '86400': 1 день + '94670856': 3 года + new: + title: Создать новое IP правило + no_ip_block_selected: Не было изменено ни одного IP правила, так как не было выбрано ни одного + title: IP правила pending_accounts: title: Ожидающие учетные записи (%{count}) relationships: @@ -702,8 +736,11 @@ ru: prefix_sign_up: Зарегистрируйтесь в Mastodon уже сегодня! suffix: Имея учётную запись, вы можете подписываться на людей, постить обновления, обмениваться сообщениями с пользователями любых узлов Mastodon и не только! didnt_get_confirmation: Не получили инструкцию для подтверждения? + dont_have_your_security_key: У вас нет ключа безопасности? forgot_password: Забыли пароль? invalid_reset_password_token: Токен сброса пароля неверен или устарел. Пожалуйста, запросите новый. + link_to_otp: Введите двухфакторный код с телефона или код восстановления + link_to_webauth: Используйте устройство с ключом безопасности login: Войти logout: Выйти migrate_account: Перенос учётной записи @@ -729,6 +766,7 @@ ru: pending: Ваша заявка ожидает одобрения администраторами, это может занять немного времени. Вы получите письмо, как только заявку одобрят. redirecting_to: Ваша учётная запись деактивированна, потому что вы настроили перенаправление на %{acct}. trouble_logging_in: Не удаётся войти? + use_security_key: Использовать ключ безопасности authorize_follow: already_following: Вы уже подписаны на эту учётную запись already_requested: Вы уже отправили запрос на подписку на эту учётную запись @@ -753,6 +791,7 @@ ru: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}ч" @@ -1021,6 +1060,14 @@ ru: quadrillion: квадрлн thousand: тыс trillion: трлн + otp_authentication: + code_hint: Для подтверждения введите код, сгенерированный приложением-аутентификатором + description_html: Если вы включите двухфакторную аутентификацию с помощью приложения-аутентификатора, Вход в систему потребует от вас наличия вашего телефона, который будет генерировать токены для входа в систему. + enable: Включить + instructions_html: "Отсканируйте этот QR-код в Google Authenticator или аналогичном приложении TOTP на вашем телефоне. С этого момента приложение будет генерировать токены, которые вам придется вводить при входе." + manual_instructions: 'Если вы не можете отсканировать QR-код и ввести его вручную, то вот секретный текст:' + setup: Создан + wrong_code: Введенный код недействителен! Время сервера и время устройства правильно? pagination: newer: Новее next: След @@ -1145,6 +1192,7 @@ ru: profile: Профиль relationships: Подписки и подписчики two_factor_authentication: Подтверждение входа + webauthn_authentication: Ключи безопасности spam_check: spam_detected: Это автоматический отчет. Обнаружен спам. statuses: @@ -1299,21 +1347,20 @@ ru: default: "%d %b %Y, %H:%M" month: "%m.%Y" two_factor_authentication: - code_hint: Для подтверждения введите код, сгенерированный приложением-аутентификатором. - description_html: 'На этой странице можно включить двухфакторную авторизацию: с ней, чтобы войти в свою учётную запись, потребуется ввести небольшой временный код, генерируемый через приложение на своём смартфоне.' + add: Добавить disable: Отключить - enable: Включить + disabled_success: Двухфакторная аутентификация успешно отключена + edit: Изменить enabled: Двухфакторная аутентификация настроена enabled_success: Двухфакторная авторизация успешно настроена generate_recovery_codes: Сгенерировать коды восстановления - instructions_html: "Отсканируйте этот QR-код с помощью Google Authenticator, Яндекс.Ключа или любого другого подобного приложения. После сканирования и добавления, приложение начнёт генерировать коды, которые потребуется вводить для завершения входа в учётную запись." lost_recovery_codes: Коды восстановления позволяются войти в учётную запись в случае утери смартфона. Если вы потеряли свои коды восстановления, вы можете создать новые здесь. Прошлые коды работать перестанут. - manual_instructions: 'Если отсканировать QR-код не получается или не представляется возможным, вы можете ввести его вручную:' + methods: Методы двухфакторной аутентификации + otp: Приложение для проверки подлинности recovery_codes: Коды восстановления recovery_codes_regenerated: Коды восстановления успешно сгенерированы recovery_instructions_html: 'Пожалуйста, сохраните коды ниже в надёжном месте: они понадобятся, чтобы войти в учётную запись, если вы потеряете доступ к своему смартфону. Вы можете вручную переписать их, распечатать и спрятать среди важных документов или, например, в любимой книжке. Каждый код действителен один раз.' - setup: Настроить - wrong_code: Введенный код неверен! Правильно ли установлены серверное время и время устройства? + webauthn: Ключи безопасности user_mailer: backup_ready: explanation: Вы запросили архив всех данных вашей учётной записи Mastodon. Что ж, он готов к скачиванию. @@ -1361,9 +1408,11 @@ ru: tips: Советы title: Добро пожаловать на борт, %{name}! users: + blocked_email_provider: Этот почтовый провайдер не разрешен follow_limit_reached: Вы не можете подписаться больше, чем на %{limit} человек generic_access_help_html: Не можете войти в свою учётную запись? Свяжитесь с %{email} для помощи invalid_email: Введенный e-mail неверен + invalid_email_mx: Адрес электронной почты не существует invalid_otp_token: Введен неверный код двухфакторной аутентификации invalid_sign_in_token: Неверный код безопасности otp_lost_help_html: Если Вы потеряли доступ к обоим, свяжитесь с %{email} @@ -1373,3 +1422,20 @@ ru: verification: explanation_html: 'Владение ссылками в профиле можно подтвердить. Для этого на указанном сайте должна содержаться ссылка на ваш профиль Mastodon, а у самой ссылки должен быть атрибут rel="me". Что внутри ссылки — значения не имеет. Вот вам пример ссылки:' verification: Подтверждение + webauthn_credentials: + add: Добавить новый ключ безопасности + create: + error: Возникла проблема с добавлением ключа безопасности. Пожалуйста, попробуйте еще раз. + success: Ваш ключ безопасности был успешно добавлен. + delete: Удалить + delete_confirmation: Вы действительно хотите удалить этот ключ безопасности? + description_html: Если вы включите аутентификацию по секретным ключам, вход потребует использования одного из ваших ключей. + destroy: + error: Произошла ошибка при удалении ключа безопасности. Пожалуйста, попробуйте еще раз. + success: Ваш ключ безопасности был успешно удален. + invalid_credential: Неверный ключ безопасности + nickname_hint: Введите имя вашего нового ключа безопасности + not_enabled: Вы еще не включили WebAuthn + not_supported: Этот браузер не поддерживает ключи безопасности + otp_required: Чтобы использовать ключи безопасности, сначала включите двухфакторную аутентификацию. + registered_on: Зарегистрирован %{date} diff --git a/config/locales/sa.yml b/config/locales/sa.yml new file mode 100644 index 000000000..229e4568c --- /dev/null +++ b/config/locales/sa.yml @@ -0,0 +1,12 @@ +--- +sa: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Too many requests + '500': + '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/sc.yml b/config/locales/sc.yml index d1b8b43b4..4e3322589 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -10,11 +10,3 @@ sc: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 8d149d11f..63f122b78 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -88,7 +88,7 @@ ar: disable: تعطيل none: لا تفعل شيئا silence: كتم - suspend: تعليق و حذف كافة بيانات الحساب + suspend: علِق warning_preset_id: استخدم نموذج تنبيه announcement: all_day: حدث اليوم كله @@ -162,6 +162,8 @@ ar: comment: التعليق invite_request: text: لماذا ترغب في الانضمام؟ + ip_block: + ip: عنوان IP notification_emails: digest: إرسال ملخصات عبر البريد الإلكتروني favourite: ابعث بريداً إلكترونيًا عندما يُعجَب أحدهم بمنشورك diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml index b67db471f..4cbc173bd 100644 --- a/config/locales/simple_form.br.yml +++ b/config/locales/simple_form.br.yml @@ -4,10 +4,16 @@ br: labels: account_warning_preset: title: Titl + admin_account_action: + types: + suspend: Astalañ announcement: text: Kemenn defaults: + current_password: Ger-tremen a vremañ + data: Roadennoù display_name: Anv diskouezet + email: Chomlec'h postel header: Talbenn locale: Yezh ar c'hetal new_password: Ger-tremen nevez @@ -15,6 +21,11 @@ br: setting_display_media_default: Dre ziouer setting_display_media_hide_all: Kuzhat pep tra setting_display_media_show_all: Diskouez pep tra + username: Anv + featured_tag: + name: Ger-klik + invite: + comment: Evezhiadenn tag: name: Ger-klik 'no': Ket diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 00ca1ed5d..b4d356279 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -65,8 +65,17 @@ ca: data: Fitxer CSV exportat des d'un altre servidor de Mastodon invite_request: text: Això ens ajudarà a revisar la teva petició + ip_block: + comment: Opcional. Recordatori de perquè l’has afegit. + expires_in: Les adreces IP son un recurs finit, de vegades son compartides i sovint canvien de mans. Per aquest motiu no es recomanen els bloquejos d’IP indefinits. + ip: Introdueix una adreça IPv4 o IPv6. Pots bloquejar rangs complets amb la sintaxi CIDR. Ves a compte no et bloquegis a tu mateix! + severities: + no_access: Bloqueja l’accés a tots els recursos + sign_up_requires_approval: Els nous registres requeriran la teva aprovació + severity: Tria què passarà amb les sol·licituds des d’aquesta IP sessions: otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' + webauthn: Si és una clau USB assegurat de que està inserida i, si és necessari, toca-ho. tag: name: Només pots canviar la caixa de les lletres, per exemple, per fer-la més llegible user: @@ -91,6 +100,7 @@ ca: types: disable: Inhabilita none: No fer res + sensitive: Sensible silence: Silenci suspend: Suspèn i elimina irreversiblement les dades del compte warning_preset_id: Utilitza una configuració predefinida d'avís @@ -135,6 +145,7 @@ ca: setting_default_privacy: Privacitat de les publicacions setting_default_sensitive: Marca sempre els elements multimèdia com a sensibles setting_delete_modal: Mostra la finestra de confirmació abans d'esborrar un tut + setting_disable_swiping: Desactivar les animacions setting_display_media: Visualització multimèdia setting_display_media_default: Per defecte setting_display_media_hide_all: Amaga-ho tot @@ -168,6 +179,13 @@ ca: comment: Comenta invite_request: text: Per què vols unir-te? + ip_block: + comment: Comentari + ip: IP + severities: + no_access: Bloquejar l’accés + sign_up_requires_approval: Limitar els registres + severity: Regla notification_emails: digest: Envia un resum per correu electrònic favourite: Envia un correu electrònic si algú marca com a preferit el teu estat @@ -188,4 +206,7 @@ ca: required: mark: "*" text: necessari + title: + sessions: + webauthn: Usa una de les teves claus de seguretat per a iniciar sessió 'yes': Sí diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index f3edefdf3..508ecbc5f 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -65,8 +65,17 @@ co: data: Un fugliale CSV da un’altru servore di Mastodon invite_request: text: Quessu ci aiutarà à valutà a vostra dumanda + ip_block: + comment: In uzzione. Rammintatevi di perchè avete aghjuntu sta regula. + expires_in: L'indirizzi IP sò una risorsa finita, ponu esse spartute è spessu cambianu di mani. Ghjè perchè i blucchimi d'IP permanenti ùn sò micca ricumandati. + ip: Entrate un'indirizzu IPv4 o IPv6. Pudete bluccà tutt'un'intervallu cù a sintassa CIDR. Fate attenzione, ùn vi bluccate micca! + severities: + no_access: Bluccà l'accessu à tutte e risorse + sign_up_requires_approval: E nove dumande d'arregistramente necessitaranu a vostr'appruvazione + severity: Sceglie ciò chì si passerà cù e richieste di quest'IP sessions: otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:' + webauthn: S'ella hè una chjave USB assicuratevi di brancalla è, s'ellu c'hè unu, appughjà nant'à u buttone. tag: name: Pudete solu cambià a cassa di i caratteri, per esempiu per u rende più lighjevule user: @@ -91,6 +100,7 @@ co: types: disable: Disattivà none: Ùn fà nunda + sensitive: Sensibile silence: Silenzà suspend: Suspende è sguassà i dati di u contu di manera irreversibile warning_preset_id: Utilizà un'avertimentu preselezziunatu @@ -135,6 +145,7 @@ co: setting_default_privacy: Cunfidenzialità di i statuti setting_default_sensitive: Sempre cunsiderà media cum’è sensibili setting_delete_modal: Mustrà une cunfirmazione per toglie un statutu + setting_disable_swiping: Disattivà e sculiscere setting_display_media: Affissera di i media setting_display_media_default: Predefinitu setting_display_media_hide_all: Piattà tuttu @@ -168,6 +179,13 @@ co: comment: Cummentariu invite_request: text: Perchè vulete ghjunghje? + ip_block: + comment: Cummentariu + ip: IP + severities: + no_access: Bluccà l'accessu + sign_up_requires_approval: Limità l'arregistramenti + severity: Regula notification_emails: digest: Mandà e-mail di ricapitulazione favourite: Mandà un’e-mail quandu qualch’unu aghjunghje i mo statuti à i so favuriti @@ -188,4 +206,7 @@ co: required: mark: "*" text: riquisiti + title: + sessions: + webauthn: Utilizà una chjave di sicurità per cunnettassi 'yes': Ié diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index d6681e664..cb3f75c1a 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -151,6 +151,7 @@ cy: setting_use_blurhash: Dangoswch raddiannau lliwgar ar gyfer cyfryngau cudd setting_use_pending_items: Modd araf severity: Difrifoldeb + sign_in_token_attempt: Cod dioelwch type: Modd mewnforio username: Enw defnyddiwr username_or_email: Enw defnyddiwr neu e-bost diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index d7a10a4a9..1c16c8e37 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -2,6 +2,8 @@ da: simple_form: hints: + account_warning_preset: + title: Valgfri. Ikke synlig for modtageren admin_account_action: type_html: Vælg hvad du vil gøre med %{acct} defaults: @@ -9,6 +11,7 @@ da: avatar: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px bot: Denne konto udfører hovedsageligt automatiserede handlinger og bliver muligvis ikke overvåget context: En eller flere sammenhænge hvor filteret skal være gældende + current_username: For at bekræfte, angiv venligst brugernavnet på den aktuelle konto digest: Sendes kun efter en lang periode med inaktivitet og kun hvis du har modtaget nogle personlige beskeder i dit fravær email: Du vil få tilsendt en bekræftelses e-mail fields: Du kan have op til 4 ting vist som en tabel på din profil @@ -22,14 +25,24 @@ da: scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående. setting_display_media_default: Skjul medier markeret som følsomt setting_display_media_hide_all: Skjul altid alle medier + setting_display_media_show_all: Vis altid medier setting_hide_network: Hvem du følger og hvem der følger dig vil ikke blive vist på din profil setting_noindex: Påvirker din offentlige profil og status sider username: Dit brugernavn vil være unikt på %{domain} whole_word: Når nøgle ordet eller udtrykket kun er alfanumerisk, vil det kun blive brugt hvis det passer hele ordet featured_tag: name: 'Du kunne måske tænke dig at bruge en af følgende:' + form_challenge: + current_password: Du indtræder et sikkert område imports: data: CSV fil eksporteret fra en anden Mastodon server + invite_request: + text: Dette vil hjælpe os med at gennemgå din ansøgning + ip_block: + comment: Valgfri. Husk hvorfor du har tilføjet denne regel. + severities: + no_access: Bloker for adgangen til alle ressourcer + sign_up_requires_approval: Nye tilmeldinger kræver din godkendelse sessions: otp: 'Indtast to-faktor koden der generes af appen af appen på din telefon eller brug en af din genoprettelses koder:' user: @@ -52,6 +65,10 @@ da: silence: Silence suspend: Suspendér og slet kontodata uopretteligt warning_preset_id: Brug en forudindstillet advarsel + announcement: + all_day: Heldags begivenhed + scheduled_at: Planlæg offentliggørelse + text: Bekendtgørelse defaults: autofollow: Inviter til at følge din konto avatar: Profilbillede @@ -99,10 +116,13 @@ da: setting_unfollow_modal: Vis bekræftelses dialog før du stopper med at følge nogen setting_use_pending_items: Langsom tilstand severity: Omfang + sign_in_token_attempt: Sikkerhedskode type: Importtype username: Brugernavn username_or_email: Brugernavn eller Email whole_word: Helt ord + email_domain_block: + with_dns_records: Inkluder MX-optegnelser og IP'er for domænet featured_tag: name: Hashtag interactions: @@ -113,6 +133,13 @@ da: comment: Kommentar invite_request: text: Hvorfor ønsker du at tilmelde dig? + ip_block: + comment: Kommentar + ip: IP + severities: + no_access: Bloker adgang + sign_up_requires_approval: Begræns tilmeldinger + severity: Regel notification_emails: digest: Send sammendrag via emails favourite: Send email når nogen favoriserer din status @@ -133,4 +160,7 @@ da: required: mark: "*" text: påkrævet + title: + sessions: + webauthn: Log på ved brug af en af dine sikkerhedskoder 'yes': Ja diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 999c4432d..72303a375 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -41,8 +41,8 @@ de: phrase: Wird schreibungsunabhängig mit dem Text und Inhaltswarnung eines Beitrags verglichen scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen. setting_aggregate_reblogs: Zeige denselben Beitrag nicht nochmal an, wenn er erneut geteilt wurde (dies betrifft nur neulich erhaltene erneut geteilte Beiträge) - setting_default_sensitive: Heikle Medien werden erst nach einem Klick sichtbar - setting_display_media_default: Verstecke Medien, die als sensibel markiert sind + setting_default_sensitive: NSFW-Medien werden erst nach einem Klick sichtbar + setting_display_media_default: Verstecke Medien, die als NSFW markiert sind setting_display_media_hide_all: Alle Medien immer verstecken setting_display_media_show_all: Alle Medien immer anzeigen setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt @@ -56,7 +56,7 @@ de: domain: Diese Domain kann Daten von diesem Server abrufen und eingehende Daten werden verarbeitet und gespeichert email_domain_block: domain: Dies kann der Domainname sein, der in der E-Mail-Adresse angezeigt wird, den MX-Datensatz, der aufgelöst wird oder die IP des Servers, auf dem der MX-Eintrag aufgelöst wird. Diese werden bei der Registrierung überprüft und die Registrierung wird abgelehnt. - with_dns_records: Ein Versuch die DNS-Einträge der Domain aufzulösen wurde unternommen und diese Ergebnisse werden unter anderem auch geblacklistet + with_dns_records: Ein Versuch die DNS-Einträge der Domain aufzulösen wurde unternommen und diese Ergebnisse werden unter anderem auch geblockt featured_tag: name: 'Du möchtest vielleicht einen von diesen benutzen:' form_challenge: @@ -65,8 +65,17 @@ de: data: CSV-Datei, die aus einem anderen Mastodon-Server exportiert wurde invite_request: text: Dies wird uns helfen deine Anmeldungsanfrage besser zu verarbeiten + ip_block: + comment: Optional. Denke daran, warum du diese Regel hinzugefügt hast. + expires_in: IP-Adressen sind eine endliche Ressource, sie werden manchmal geteilt und werden ab und zu ausgetauscht. Aus diesem Grund werden unbestimmte IP-Blöcke nicht empfohlen. + ip: Gebe eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht aussperrst! + severities: + no_access: Zugriff auf alle Ressourcen blockieren + sign_up_requires_approval: Neue Anmeldungen erfordern deine Zustimmung + severity: Wähle aus, was mit Anfragen aus dieser IP passiert sessions: otp: 'Gib die Zwei-Faktor-Authentifizierung von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:' + webauthn: Wenn es sich um einen USB-Schlüssel handelt, stelle sicher, dass du ihn einsteckst und ihn antippst. tag: name: Du kannst zum Beispiel nur die Groß- und Kleinschreibung der Buchstaben ändern, um es lesbarer zu machen user: @@ -91,6 +100,7 @@ de: types: disable: Deaktivieren none: Nichts tun + sensitive: NSFW silence: Stummschalten suspend: Deaktivieren und Benutzerdaten unwiderruflich löschen warning_preset_id: Benutze eine Warnungsvorlage @@ -133,10 +143,11 @@ de: setting_crop_images: Bilder in nicht ausgeklappten Beiträgen auf 16:9 zuschneiden setting_default_language: Beitragssprache setting_default_privacy: Beitragssichtbarkeit - setting_default_sensitive: Medien immer als heikel markieren + setting_default_sensitive: Medien immer als NSFW markieren setting_delete_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag gelöscht wird + setting_disable_swiping: Deaktiviere Wischgesten setting_display_media: Medien-Anzeige - setting_display_media_default: Heikle Inhalte verstecken + setting_display_media_default: NSFW-Inhalte verstecken setting_display_media_hide_all: Alle Medien verstecken setting_display_media_show_all: Alle Medien anzeigen setting_expand_spoilers: Beiträge mit Inhaltswarnungen immer ausklappen @@ -168,6 +179,13 @@ de: comment: Kommentar invite_request: text: Warum möchtest du beitreten? + ip_block: + comment: Kommentar + ip: IP-Adresse + severities: + no_access: Zugriff sperren + sign_up_requires_approval: Anmeldungen begrenzen + severity: Regel notification_emails: digest: Kurzfassungen über E-Mail senden favourite: E-Mail senden, wenn jemand meinen Beitrag favorisiert @@ -188,4 +206,7 @@ de: required: mark: "*" text: Pflichtfeld + title: + sessions: + webauthn: Verwende einer deiner Sicherheitsschlüssel zum Anmelden 'yes': Ja diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 86ba0d303..aaa0d7ae0 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -67,6 +67,7 @@ el: text: Αυτό θα μας βοηθήσει να επιθεωρήσουμε την αίτησή σου sessions: otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:' + webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά. tag: name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο user: @@ -118,7 +119,7 @@ el: header: Επικεφαλίδα inbox_url: Το URL του inbox του ανταποκριτή (relay) irreversible: Απόρριψη αντί για κρύψιμο - locale: Γλώσσα περιβάλλοντος + locale: Γλώσσα χρήσης locked: Κλείδωμα λογαριασμού max_uses: Μέγιστος αριθμός χρήσεων new_password: Νέο συνθηματικό @@ -168,6 +169,10 @@ el: comment: Σχόλια invite_request: text: Γιατί θέλεις να συμμετάσχεις; + ip_block: + comment: Σχόλιο + ip: IP + severity: Κανόνας notification_emails: digest: Αποστολή συνοπτικών email favourite: Αποστολή email όταν κάποιος σημειώνει ως αγαπημένη τη δημοσίευσή σου @@ -188,4 +193,7 @@ el: required: mark: "*" text: απαιτείται + title: + sessions: + webauthn: Χρησιμοποιείστε ένα από τα κλειδιά ασφαλείας σας για να συνδεθείτε 'yes': Ναι diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 308738c88..3e7a66e11 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -64,7 +64,7 @@ eo: text: Antaŭagordita teksto title: Titolo admin_account_action: - send_email_notification: Atentigi la uzanton retpoŝte + send_email_notification: Sciigi la uzanton retpoŝte text: Propra averto type: Ago types: @@ -130,6 +130,7 @@ eo: setting_use_blurhash: Montri buntajn transirojn por kaŝitaj aŭdovidaĵoj setting_use_pending_items: Malrapida reĝimo severity: Graveco + sign_in_token_attempt: Sekureca kodo type: Importa tipo username: Uzantnomo username_or_email: Uzantnomo aŭ Retadreso @@ -153,11 +154,11 @@ eo: pending_account: Sendi retmesaĝon kiam nova konto bezonas kontrolon reblog: Sendi retmesaĝon kiam iu diskonigas vian mesaĝon report: Nova signalo estas sendita - trending_tag: Sendi retpoŝtmesaĝon kiam nekontrolita kradvorto furoras + trending_tag: Nekontrolita kradvorto furoras tag: name: Kradvorto trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj - usable: Permesi tootojn uzi ĉiun tiun haketon + usable: Permesi mesaĝojn uzi ĉi tiun kradvorton 'no': Ne recommended: Rekomendita required: diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index a3195f6b8..cc27b9643 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -12,7 +12,7 @@ es-AR: admin_account_action: include_statuses: El usuario verá qué toots causaron la acción de moderación o advertencia send_email_notification: El usuario recibirá una explicación de lo que sucedió con su cuenta - text_html: Opcional. Podés usar sintaxis de toots. Podés agregar preajustes de advertencia para ahorrar tiempo. + text_html: Opcional. Podés usar sintaxis de toots. Podés agregar preajustes de advertencia para ahorrar tiempo type_html: Elegí qué hacer con %{acct} warning_preset_id: Opcional. Todavía podés agregar texto personalizado al final del preajuste announcement: @@ -20,31 +20,31 @@ es-AR: ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente starts_at: Opcional. En caso de que tu anuncio esté vinculado a un rango de tiempo específico - text: Podés usar la sintaxis de toot. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario + text: Podés usar sintaxis de toots. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario defaults: autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente - avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles' bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada context: Uno o múltiples contextos en los que debe aplicarse el filtro current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual - digest: Sólo enviado tras un largo periodo de inactividad, y sólo si has recibiste mensajes personales en tu ausencia + digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia discoverable: El directorio del perfil es otra forma en la que tu cuenta puede llegar a un público más amplio email: Se te enviará un correo electrónico de confirmación fields: Podés tener hasta 4 elementos mostrados en una tabla en tu perfil - header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles' inbox_url: Copiá la dirección web desde la página principal del relé que querés usar irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después - locale: El idioma de la interface de usuario, correos electrónicos y notificaciones PuSH + locale: El idioma de la interface de usuario, correos electrónicos y notificaciones push locked: Requiere que manualmente aprobés seguidores password: Usá al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un toot scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionás el alcance de nivel más alto, no necesitás seleccionar las individuales. setting_aggregate_reblogs: No mostrar nuevos retoots de los toots que fueron recientemente retooteados (sólo afecta a los retoots recibidos recientemente) setting_default_sensitive: El contenido de medios sensibles está oculto predeterminadamente y puede ser mostrado con un clic - setting_display_media_default: Ocultar medios que están marcados como sensibles + setting_display_media_default: Ocultar medios marcados como sensibles setting_display_media_hide_all: Siempre ocultar todos los medios - setting_display_media_show_all: Siempre mostrar todos los medios que están marcados como sensibles + setting_display_media_show_all: Siempre mostrar todos los medios setting_hide_network: A quiénes seguís y tus seguidores no serán mostrados en tu perfil setting_noindex: Afecta a tu perfil público y páginas de estado setting_show_application: La aplicación que usás para tootear se mostrará en la vista detallada de tus toots @@ -56,7 +56,7 @@ es-AR: domain: Este dominio podrá recolectar datos de este servidor, y los datos entrantes serán procesados y archivados email_domain_block: domain: Puede ser el nombre de dominio que aparece en la dirección de correo electrónico, el registro MX hacia el cual resuelve el dominio, o la dirección IP del servidor hacia el cual resuelve ese registro MX. Esto se comprobará en el momento del registro del usuario, y el registro será rechazado. - with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también puestos en la lista de desaprobados + with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también bloqueados featured_tag: name: 'Puede que quieras usar una de estas:' form_challenge: @@ -64,9 +64,18 @@ es-AR: imports: data: Archivo CSV exportado desde otro servidor de Mastodon invite_request: - text: Esto nos ayudará a revisar tu aplicación + text: Esto nos ayudará a revisar tu solicitud + ip_block: + comment: Opcional. Acordate por qué agregaste esta regla. + expires_in: Las direcciones IP son un recurso finito, a veces se comparten y cambian de personas frecuentemente. Por esta razón, no se recomiendan bloqueos indefinidos de direcciones IP. + ip: Ingresá una dirección IPv4 ó IPv6. Podés bloquear rangos completos usando la sintaxis CIDR. ¡Tené cuidado de no bloquearte vos mismo! + severities: + no_access: Bloquear acceso a todos los recursos + sign_up_requires_approval: Los nuevos registros requerirán tu aprobación + severity: Elegí lo que pasará con las solicitudes desde esta dirección IP sessions: - otp: 'Ingresá el código de autenticación de dos factores generado por la aplicación de tu dispositivo móvil, o usá uno de tus códigos de recuperación:' + otp: 'Ingresá el código de autenticación de dos factores generado por la aplicación en tu dispositivo, o usá uno de tus códigos de recuperación:' + webauthn: Si es una llave USB, asegurate de insertarla y, de ser necesario, tocarla. tag: name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible user: @@ -89,16 +98,17 @@ es-AR: text: Advertencia personalizada type: Acción types: - disable: Deshabilitar inicio de sesión - none: No hacer nada - silence: Silenciar - suspend: Suspender y eliminar de forma irreversible los datos de la cuenta - warning_preset_id: Usar un texto predeterminado + disable: Congelar + none: Enviar una advertencia + sensitive: Sensible + silence: Limitar + suspend: Suspender + warning_preset_id: Usar una advertencia preestablecida announcement: all_day: Evento de todo el día ends_at: Fin del evento scheduled_at: Programar publicación - starts_at: Comienzo del evento + starts_at: Inicio del evento text: Anuncio defaults: autofollow: Invitar para seguir tu cuenta @@ -135,6 +145,7 @@ es-AR: setting_default_privacy: Privacidad de toots setting_default_sensitive: Siempre marcar medios como sensibles setting_delete_modal: Mostrar diálogo de confirmación antes de eliminar un toot + setting_disable_swiping: Deshabilitar movimientos de deslizamiento setting_display_media: Visualización de medios setting_display_media_default: Predeterminada setting_display_media_hide_all: Ocultar todo @@ -147,7 +158,7 @@ es-AR: setting_system_font_ui: Utilizar la tipografía predeterminada del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy - setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien + setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a una cuenta setting_use_blurhash: Mostrar gradientes coloridos para medios ocultos setting_use_pending_items: Modo lento severity: Severidad @@ -168,16 +179,23 @@ es-AR: comment: Comentar invite_request: text: "¿Por qué querés unirte?" + ip_block: + comment: Comentario + ip: Dirección IP + severities: + no_access: Bloquear acceso + sign_up_requires_approval: Limitar registros + severity: Regla notification_emails: digest: Enviar correos electrónicos compilatorios - favourite: Enviar correo electrónico cuando una cuenta marca como favorito tu estado - follow: Enviar correo electrónico cuando una cuenta te siga - follow_request: Enviar correo electrónico cuando una cuenta solicita seguirte - mention: Enviar correo electrónico cuando una cuenta te mencione - pending_account: Enviar correo electrónico cuando una nueva cuenta necesita revisión - reblog: Enviar correo electrónico cuando una cuenta retootee tu estado - report: Enviar correo electrónico cuando se envíe un nuevo informe - trending_tag: Enviar correo electrónico cuando una etiqueta no revisada esté en tendencia + favourite: Una cuenta marca tu toot como favorito + follow: Una cuenta te sigue + follow_request: Una cuenta solicita seguirte + mention: Una cuenta te menciona + pending_account: Una nueva cuenta necesita revisión + reblog: Una cuenta retootea tu toot + report: Se envía una nueva denuncia + trending_tag: Una etiqueta no revisada está en tendencia tag: listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio de perfiles name: Etiqueta @@ -188,4 +206,7 @@ es-AR: required: mark: "*" text: obligatorio + title: + sessions: + webauthn: Usá una de tus llaves de seguridad para iniciar sesión 'yes': Sí diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index bc29918f1..f53bdd143 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -65,8 +65,17 @@ es: data: Archivo CSV exportado desde otra instancia de Mastodon invite_request: text: Esto nos ayudará a revisar su aplicación + ip_block: + comment: Opcional. Recuerda por qué has añadido esta regla. + expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida. + ip: Introduzca una dirección IPv4 o IPv6. Puede bloquear rangos completos usando la sintaxis CIDR. ¡Tenga cuidado de no quedarse fuera! + severities: + no_access: Bloquear acceso a todos los recursos + sign_up_requires_approval: Nuevos registros requerirán su aprobación + severity: Elegir lo que pasará con las peticiones desde esta IP sessions: otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:' + webauthn: Si es una tecla USB, asegúrese de insertarla y, si es necesario, púlsela. tag: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: @@ -91,6 +100,7 @@ es: types: disable: Deshabilitar none: No hacer nada + sensitive: Sensible silence: Silenciar suspend: Suspender y eliminar de forma irreversible la información de la cuenta warning_preset_id: Usar un aviso predeterminado @@ -135,6 +145,7 @@ es: setting_default_privacy: Privacidad de publicaciones setting_default_sensitive: Marcar siempre imágenes como sensibles setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot + setting_disable_swiping: Deshabilitar movimientos de deslizamiento setting_display_media: Visualización multimedia setting_display_media_default: Por defecto setting_display_media_hide_all: Ocultar todo @@ -168,6 +179,13 @@ es: comment: Comentar invite_request: text: "¿Por qué quiere unirse usted?" + ip_block: + comment: Comentario + ip: IP + severities: + no_access: Bloquear acceso + sign_up_requires_approval: Limitar registros + severity: Regla notification_emails: digest: Enviar resumen de correos electrónicos favourite: Enviar correo electrónico cuando alguien de a favorito en su publicación @@ -188,4 +206,7 @@ es: required: mark: "*" text: necesario + title: + sessions: + webauthn: Utilice una de sus claves de seguridad para iniciar sesión 'yes': Sí diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 83f2d206f..6425011b6 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -65,8 +65,17 @@ fa: data: پروندهٔ CSV برون‌ریخته از دیگر کارساز ماستودون invite_request: text: این برای بررسی درخواست شما به ما کمک خواهد کرد + ip_block: + comment: اختیاری. یادتان بماند چرا این قاعده را افزودید. + expires_in: نشانی‌های آی‌پی، منبعی محدودند. گاهی هم‌رسانی شده و اغلب دست‌به‌دست می‌شوند. به این دلیل، مسدودیت‌های مبتنی بر آی‌پی پیشنهاد نمی‌شوند. + ip: یک آی‌پی نکارش ۴ یا ۶ وارد کنید. می‌توانید تمامی دامنه‌ای را با استفاده از ساختار CIDR مسدود کنید. مراقب باشید خودتان را بیرون نیندازید! + severities: + no_access: انسداد دسترسی به تمامی منابع + sign_up_requires_approval: ثبت‌نام‌های جدید، نیازمند تأییدتان خواهند بود + severity: بگزنید با درخواست‌ها از این آی‌پی چه شود sessions: otp: 'کد تأیید دومرحله‌ای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' + webauthn: اگر کلید USB باشد ، از اتصاڵ آن مطمئن شوید و، اگر لازم باشد، به آن ضربه‌ایی بزنید. tag: name: شما تنها می‌توانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید user: @@ -91,6 +100,7 @@ fa: types: disable: غیرفعال‌کردن none: کاری نکن + sensitive: حساس silence: بی‌صدا کردن suspend: تعلیق و پاک‌کردن کامل همهٔ اطلاعات حساب warning_preset_id: یک هشدار از پیش‌آماده را به کار ببرید @@ -135,6 +145,7 @@ fa: setting_default_privacy: حریم خصوصی نوشته‌ها setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن setting_delete_modal: نمایش پیغام تأیید پیش از پاک کردن یک نوشته + setting_disable_swiping: از کار انداختن حرکت‌های کشیدنی setting_display_media: نمایش عکس و ویدیو setting_display_media_default: پیش‌فرض setting_display_media_hide_all: نهفتن همه @@ -168,6 +179,13 @@ fa: comment: توضیح invite_request: text: چرا می‌خواهید عضو شوید؟ + ip_block: + comment: توضیح + ip: IP + severities: + no_access: بن کردن دسترسی + sign_up_requires_approval: محدود کردن ثبت نام‌ها + severity: قانون notification_emails: digest: خلاصه‌کردن چند اعلان در یک ایمیل favourite: وقتی کسی نوشتهٔ شما را پسندید ایمیل بفرست @@ -188,4 +206,7 @@ fa: required: mark: "*" text: ضروری + title: + sessions: + webauthn: برای ورود از یکی از کلیدهای امنیتیتان استفاده کنید 'yes': بله diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 01e3f8cce..d57c68f8b 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -29,14 +29,14 @@ fr: current_password: Pour des raisons de sécurité, veuillez saisir le mot de passe du compte courant current_username: Pour confirmer, veuillez saisir le nom d'utilisateur du compte courant digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence - discoverable: L’annuaire des profils est une autre façon pour votre compte d’atteindre une plus grand audience + discoverable: L’annuaire des profils est une autre façon pour votre compte d’atteindre une plus grande audience email: Vous recevrez un courriel de confirmation fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications - locked: Vous devrez approuver chaque abonné·e et vos statuts ne s’afficheront qu’à vos abonné·e·s + locked: Nécessite que vous approuviez manuellement chaque abonné·e password: Utilisez au moins 8 caractères phrase: Sera filtré sans que la casse ou l’avertissement sur le contenu du pouet soit pris en compte scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez une permission générale, vous n’avez pas besoin de sélectionner les permissions plus précises. @@ -65,8 +65,17 @@ fr: data: Un fichier CSV généré par un autre serveur de Mastodon invite_request: text: Cela nous aidera à considérer votre demande + ip_block: + comment: Optionnel. Pour ne pas oublier pourquoi vous avez ajouté cette règle. + expires_in: Les adresses IP sont une ressource finie, elles sont parfois partagées et changent souvent de mains. Pour cette raison, les blocages d’IP indéfiniment ne sont pas recommandés. + ip: Entrez une adresse IPv4 ou IPv6. Vous pouvez bloquer des plages entières en utilisant la syntaxe CIDR. Faites attention à ne pas vous bloquer vous-même ! + severities: + no_access: Bloquer l’accès à toutes les ressources + sign_up_requires_approval: Les nouvelles inscriptions nécessiteront votre approbation + severity: Choisir ce qui se passera avec les requêtes de cette adresse IP sessions: otp: 'Entrez le code d’authentification à deux facteurs généré par l’application de votre téléphone ou utilisez un de vos codes de récupération :' + webauthn: Si c'est une clé USB, assurez-vous de l'insérer et, si nécessaire, de la tapoter. tag: name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible user: @@ -91,6 +100,7 @@ fr: types: disable: Désactiver none: Ne rien faire + sensitive: Sensible silence: Masquer suspend: Suspendre et supprimer les données du compte de manière irréversible warning_preset_id: Utiliser un modèle d’avertissement @@ -135,6 +145,7 @@ fr: setting_default_privacy: Confidentialité des statuts setting_default_sensitive: Toujours marquer les médias comme sensibles setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet + setting_disable_swiping: Désactiver les actions par glissement setting_display_media: Affichage des médias setting_display_media_default: Défaut setting_display_media_hide_all: Masquer tout @@ -168,6 +179,13 @@ fr: comment: Commentaire invite_request: text: Pourquoi voulez-vous vous inscrire ? + ip_block: + comment: Commenter + ip: IP + severities: + no_access: Bloquer l’accès + sign_up_requires_approval: Limite des inscriptions + severity: Règle notification_emails: digest: Envoyer des courriels récapitulatifs favourite: Envoyer un courriel lorsque quelqu’un ajoute mes statuts à ses favoris @@ -188,4 +206,7 @@ fr: required: mark: "*" text: Champs requis + title: + sessions: + webauthn: Utilisez l'une de vos clés de sécurité pour vous connecter 'yes': Oui diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index f2e859acb..f2ebf1d6e 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -65,8 +65,17 @@ gl: data: Ficheiro CSV exportado desde outro servidor Mastodon invite_request: text: Esto axudaranos a revisar a tua aplicación + ip_block: + comment: Opcional. Lembrar a razón para engadir esta regra. + expires_in: Os enderezos IP son un recurso finito, a veces son compartidos e cambian de mans con frecuencia. Por esta razón, non se recomendan os bloqueos indefinidos de IPs. + ip: Escribe un enderezo IPv4 ou IPv6. Podes bloquear rangos completos usando a sintaxe CIDR. Ten coidado e non te bloquees a ti mesma! + severities: + no_access: Bloquear acceso a tódolos recursos + sign_up_requires_approval: Os novos rexistros requerirán a túa aprobación + severity: Escolle que acontecerá coas peticións desde este IP sessions: otp: 'Introduce o código do segundo factor creado pola aplicación do teu móbil ou usa un dos códigos de recuperación:' + webauthn: Se é unha chave USB asegúrate de que está conectada e preme o botón. tag: name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade user: @@ -91,6 +100,7 @@ gl: types: disable: Desactivar conexión none: Non facer nada + sensitive: Sensible silence: Acalar suspend: Suspender e eliminar irreversiblemente datos da conta warning_preset_id: Utilizar un aviso preestablecido @@ -135,6 +145,7 @@ gl: setting_default_privacy: Privacidade da publicación setting_default_sensitive: Marcar sempre multimedia como sensible setting_delete_modal: Solicitar confirmación antes de eliminar unha mensaxe + setting_disable_swiping: Desactivar opcións de desprazamento setting_display_media: Mostrar multimedia setting_display_media_default: Por omisión setting_display_media_hide_all: Ocultar todo @@ -168,6 +179,13 @@ gl: comment: Comentar invite_request: text: Por que queres unirte? + ip_block: + comment: Comentario + ip: IP + severities: + no_access: Bloquear acceso + sign_up_requires_approval: Limitar o rexistro + severity: Regra notification_emails: digest: Enviar correos con resumos favourite: Enviar un correo cando alguén marca como favorita unha das tuas publicacións @@ -188,4 +206,7 @@ gl: required: mark: "*" text: requerido + title: + sessions: + webauthn: Usa unha das túas chaves de seguridade para conectar 'yes': Si diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml index 083343307..e8ef7bfbb 100644 --- a/config/locales/simple_form.hr.yml +++ b/config/locales/simple_form.hr.yml @@ -3,39 +3,55 @@ hr: simple_form: hints: defaults: - avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px - header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px - locked: traži te da ručno odobriš sljedbenike i postavlja privatnost postova na dostupnu samo sljedbenicima + avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px + header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px + locked: Zahtijeva ručno odobravanje pratitelja + setting_display_media_default: Sakrij medijski sadržaj označen kao osjetljiv + setting_display_media_hide_all: Uvijek sakrij medijski sadržaj + setting_display_media_show_all: Uvijek prikaži medijski sadržaj imports: - data: CSV fajl izvezen iz druge Mastodon instance + data: CSV datoteka izvezena iz drugog Mastodonovog poslužitelja labels: + account_warning_preset: + title: Naslov + admin_account_action: + type: Radnja defaults: confirm_new_password: Potvrdi novu lozinku confirm_password: Potvrdi lozinku current_password: Trenutna lozinka - data: Podaci - display_name: Ime koje ću prikazati - email: E-mail adresa - locale: Jezik - locked: Učini račun privatnim + data: Podatci + display_name: Prikazano ime + email: Adresa e-pošte + locale: Jezik sučelja + locked: Zaključaj račun new_password: Nova lozinka - otp_attempt: Dvo-faktorski kod + note: Biografija + otp_attempt: Dvofaktorski kôd password: Lozinka - setting_auto_play_gif: Automatski pokreni animirane GIFove - setting_default_privacy: Privatnost posta - type: Tip uvoženja + setting_auto_play_gif: Automatski pokreni animirane GIF-ove + setting_default_privacy: Privatnost objavljivanja + setting_display_media_default: Zadano + setting_display_media_hide_all: Sakrij sve + setting_display_media_show_all: Prikaži sve + setting_system_font_ui: Koristi zadani font sustava + setting_theme: Tema stranice + type: Tip uvoza username: Korisničko ime interactions: - must_be_follower: Blokiraj notifikacije onih koji me ne slijede - must_be_following: Blokiraj notifikacije ljudi koje ne slijedim + must_be_follower: Blokiraj obavijesti korisnika koji me ne prate + must_be_following: Blokiraj obavijesti korisnika koje ne pratim notification_emails: - digest: Šalji mi e-mailove s notifikacijama - favourite: Pošalji mi e-mail kad netko lajka moj status - follow: Pošalji mi e-mail kad me netko počne slijediti - follow_request: Pošalji mi e-mail kad mi netko pošalje zahtjev da me želi slijediti - mention: Pošalji mi e-mail kad me netko spomene - reblog: Pošalji mi e-mail kad netko rebloga moj status + digest: Šalji e-poštu sa sažetkom obavijesti + favourite: Netko označi Vaš status favoritom + follow: Netko Vas počinje pratiti + follow_request: Netko zatraži da Vas prati + mention: Netko Vas spomene + reblog: Netko boosta Vaš status + tag: + name: Hashtag 'no': Ne required: - text: traženo + mark: "*" + text: obavezno 'yes': Da diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 0b164c5b6..242f1ffac 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -65,8 +65,17 @@ hu: data: Egy másik Mastodon szerverről exportált CSV fájl invite_request: text: Ez segít nekünk átnézni a jelentkezésedet + ip_block: + comment: Opcionális. Emlékeztető, hogy miért is vetted fel ezt a szabályt. + expires_in: Az IP címek korlátos erőforrások, ezért néha meg vannak osztva és gyakran gazdát is cserélnek. Ezért a korlátlan IP tiltások használatát nem javasoljuk. + ip: Írj be egy IPv4 vagy IPv6 címet. A CIDR formátum használatával teljes tartományokat tilthatsz ki. Légy óvatos, hogy magadat véletlenül se zárd ki! + severities: + no_access: Elérés tiltása minden erőforráshoz + sign_up_requires_approval: Új regisztrációk csak a jóváhagyásoddal történhetnek majd meg + severity: Válaszd ki, mi történjen a kérésekkel erről az IP-ről sessions: otp: 'Add meg a telefonodon generált kétlépcsős azonosító kódodat vagy használd az egyik tartalék bejelentkező kódot:' + webauthn: Ha ez egy USB kulcs, ellenőrizd, hogy csatlakoztattad és ha szükséges, aktiváltad is. tag: name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen user: @@ -91,6 +100,7 @@ hu: types: disable: Letiltás none: Ne csinálj semmit + sensitive: Szenzitív silence: Elnémítás suspend: Fiók felfüggesztése, adatok törlése visszaállíthatatlanul warning_preset_id: Figyelmeztetés használata @@ -135,6 +145,7 @@ hu: setting_default_privacy: Tülkök alapértelmezett láthatósága setting_default_sensitive: Minden médiafájl megjelölése szenzitívként setting_delete_modal: Megerősítés kérése tülk törlése előtt + setting_disable_swiping: Elhúzás művelet kikapcsolása setting_display_media: Média megjelenítése setting_display_media_default: Alapértelmezés setting_display_media_hide_all: Mindent elrejt @@ -168,6 +179,13 @@ hu: comment: Hozzászólás invite_request: text: Miért akarsz csatlakozni? + ip_block: + comment: Megjegyzés + ip: IP + severities: + no_access: Elérés letiltása + sign_up_requires_approval: Regisztrációk korlátozása + severity: Szabály notification_emails: digest: Összevont e-mailek küldése favourite: E-mail küldése, amikor valaki kedvencnek jelöli a tülködet @@ -188,4 +206,7 @@ hu: required: mark: "*" text: kötelező + title: + sessions: + webauthn: Használd valamelyik biztonsági kulcsodat a bejelentkezéshez 'yes': Igen diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index cd73ee679..7237ba48b 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -12,28 +12,177 @@ hy: admin_account_action: include_statuses: օգտատէրը տեսնելու ա որ թթերն են առաջացրել մոդերացիայի գործողութիւն կամ զգուշացում։ send_email_notification: օգտատէրը կը ստանայ բացատրութիւն այն մասին թէ ինչ է պատահել իրենց հաշուի հետ։ + text_html: Պայմանական․ Դու կարող ես օգտագործել Թութի շարադասութիւնը։ Կարող ես օգտագործել աւելացնել զգուշացնող նախադիրներ ժամանակ խնայելու համար + type_html: Ընտրիր ինչ անել %{acct}ի հետ։ + warning_preset_id: Պայմանական․ Կարող ես աւելացնել տեքստ նախդիրի վերջում + announcement: + all_day: Վերանայուելուց յետոյ, ժամանակացոյցից միայն ամսաթիւը ցոյց կը տրուի + ends_at: Պայմանական․ Յայտարարութիւնն աւտօմատ կը հանուի այս ժամին + scheduled_at: Եթէ դատարկ թողնես յայտարարութիւնը միանգամից կը հրապարակուի + starts_at: Պայմանական․ այն դէպքում, երբ յայտարարութիւնդ սահմանափակուած է յստակ ժամանակացոյցով + text: Կարող ես օգտագործել թթի շարադասութիւնը։ Խնդրում ենք, եղիր խելամիտ յայտարարութեան տարածքն օգտագործելիս, այն յայտնուելու է օգտատիրոջ էկրանին + defaults: + autofollow: Հրաւէրի միջոցով գրանցուող մարդիկ կը հետեւեն քեզ + avatar: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} + bot: Այս հաշիւը հիմնականում կատարում է աւտօմատացուած գործողութւնները եւ գուցէ չի վերայսկուում + context: Մէկ կամ մի քանի կոնտեքստներ, որտեղ պէտք է կիրառուի զտիչ + current_password: Անվտանգութեան նկատառումներից ելնելով, խնդրում ենք մուտքագրել տուել հաշուի ծածկագիրը + current_username: Հաստատելու համար խնդրում ենք մուտքագրել տուել հաշուի օգտանունը + digest: Ուղարկուում է պասիւութեան երկար շրջանից յետոյ եւ միայն այն դէպքում, երբ բացակայութեանդ ժամանակ որեւէ անձնական հաղորդագրութիւն ես ստացել + discoverable: Էջի մատեանն այլ եղանակ է հաշիւդ լայն շրջանակներին հասանելի դարձնելու + email: Քեզ ուղարկուել է հաստատման իմակ + fields: Կարող ես ունենալ մինչեւ 4 կէտ հաշուիդ աղիւսակում ցուցադրելու + header: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} + inbox_url: Պատճէնիր URL այն շերտի դիմերեսից, որը ցանկանում ես օգտագործել + irreversible: Զտուած թթերը կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես + locale: Ինտերֆեյսի լեզուն, էլ. նամակները եւ push ծանուցումները + locked: Անհրաժեշտ կը լինի ձեռքով հաստատել հետեւորդներին + password: Օգտագործիր առնուազն 8 նիշ + phrase: Կը համընկնի անկախ տեքստի ձեւից կամ թթի զգուշացնող բովանդակութիւնից + scopes: Որ API֊ին յաւելուածն ունի հասանելիութիւն։ Եթէ ընտրել ես բարձր մակարդակի դաշտ, ապա անհատական ընտրելու կարիք չկայ։ + setting_aggregate_reblogs: Չցուցադրել տարածումներն այն թթերի համար, որոնք քիչ առաջ արդէն տարածուել են(վերաբերում է միայն վերջին տարածումներին) + setting_default_sensitive: Կասկածելի բովանդակութիւնը լռելեայն փակ է եւ կարող է բացուել սեղմելով + setting_display_media_default: Թաքցնել կասկածելի բովանդակութիւնը + setting_display_media_hide_all: Երբեք մեդիա ցոյց չտալ + setting_display_media_show_all: Մեդիա միշտ ցոյց տալ + setting_hide_network: Ուրիշները չեն կարողանայ տեսնել ձեզ հետեւողներին եւ թե ում էք հետեւում դուք + setting_noindex: Ազդում է քո հրապարակային հաշուի եւ գրառումների էջի վրայ + setting_show_application: Թութ մանրամասներում կերեւայ թէ որ ծրագրով ես հրապարակել այն + setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները + setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն + username: Քո օգտանունը պէտք է եզակի լինի %{domain}-ում։ + whole_word: Եթէ բանալի բառը կամ արտայայտութիւնը պարունակում է միայն այբբենական նիշեր եւ թուեր, ապա այն կիրառուելու է ամբողջ բառի հետ համընկնելու դէպքում միայն + domain_allow: + domain: Այս տիրոյթը կարող է ստանալ տուեալներ այս սպասարկչից եւ ստացուող տուեալները կարող են օգտագործուել եւ պահուել + email_domain_block: + domain: Սա կարող է լինել տիրոյթի անուն, որը ցուցադրում է էլ․ հասցէն, MX գրառում, որին տիրոյթը պատկանում է, կամ MX գրառման սպասարկչի IP։ Դրանք ստուգուելու են օգտատիրոջ գրանցման պահին եւ գրանցումը մերժուելու է։ + with_dns_records: Այս տիրոյթի DNS գրառումները կը տարրալուծուեն եւ արդիւնքները նոյնպէս կուղարկուեն սեւ ցուցակ + featured_tag: + name: Գուցէ ցանկանաս օգտագործել սրանցից մէկը․ + form_challenge: + current_password: Մուտք ես գործել ապահով տարածք + imports: + data: CSV ֆայլը ներմուծուել է Մաստոդոնի այլ սերուերից + invite_request: + text: Սա կօգնի մեզ ստուգել քո յաւելուածը + sessions: + otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝ + tag: + name: Կարող ես միայն փոխել տառերի ձեւը, օրինակ, այն աւելի ընթեռնելի դարձնելու համար + user: + chosen_languages: Նշուած ժամանակ հոսքում կերեւայ միայն ընտրուած լեզուով թութերը labels: account: fields: name: Պիտակ value: Պարունակություն + account_alias: + acct: Հին հաշուի գործարկում + account_migration: + acct: Նոր հաշուի գործարկում account_warning_preset: + text: Նախադրուած տեքստ title: Վերնագիր admin_account_action: + include_statuses: Ներառել բողոքարկուած թթերը իմակում + send_email_notification: Տեղեկացնել օգտատիրոջը իմակի միջոցով + text: Նախազգուշացում type: Գործողություն types: + disable: Փակել մուտքը none: Ոչինչ չանել silence: Լուռ + suspend: Արգելափակել եւ անվերադարձ ջնջել հաշուի ամբողջ ինֆորմացիան + warning_preset_id: Օգտագործել զգուշացնող նախադիր + announcement: + all_day: Օրուայ իրադարձութիւն + ends_at: Իրադարձութեան աւարտ + scheduled_at: Հրապարակման օրացոյց + starts_at: Իրադարձութեան սկիզբ + text: Յայտարարութիւն defaults: + autofollow: Հրաւիրել էջիդ հետեւելու + avatar: Աւատար + bot: Սա բօտի հաշիւ է + chosen_languages: Զտել լեզուները + confirm_new_password: Հաստատել նոր գաղտնաբառը + confirm_password: Գաղտնաբառի հաստատում + context: Զտել կոնտեքստները + current_password: Ներկայիս գաղտնաբառը + data: Տուեալներ + discoverable: Աւելացնել հաշիւը հասցէագրքում + display_name: Ցուցադրուող անուն + email: Էլ․ հասցէ + expires_in: Սպառուում է + fields: Հաշուի մետադատա header: Վերնագիր + inbox_url: Ներմուծման շերտի URL + irreversible: Թաքցնելու փոխարէն ջնջել + locale: Ինտերֆեյսի լեզու + locked: Փակել հաշիւը + max_uses: Օգտագործման առաւելագոյն քանակ + new_password: Նոր գաղտնաբառ note: Բիո + otp_attempt: 2F կոդ password: Գաղտնաբառ + phrase: Հիմնաբառ կամ արտայայտութիւն + setting_advanced_layout: Միացնել ընդլայնուած վեբ ինտերֆեյս + setting_aggregate_reblogs: Տարծածները խմբաւորել հոսքում + setting_auto_play_gif: Աւտոմատ մեկնարկել GIFs անիմացիաները + setting_boost_modal: Ցուցադրել հաստատման պատուհանը տարածելուց առաջ + setting_crop_images: Ցոյց տալ թութի նկարը 16x9 համամասնութեամբ + setting_default_language: Հրապարակման լեզու + setting_default_privacy: Հրապարակման գաղտնիութիւն + setting_default_sensitive: Միշտ նշել մեդիան որպէս դիւրազգաց + setting_delete_modal: Ցուցադրել հաստատման պատուհանը ջնջելուց առաջ + setting_display_media: Ցուցադրել մեդիա + setting_display_media_default: Լռելեայն + setting_display_media_hide_all: Թաքցնել բոլորը + setting_display_media_show_all: Ցուցադրել բոլորը + setting_expand_spoilers: Միշտ բացել բովանդակութեան զգուշացմամբ թթերը + setting_hide_network: Թաքցնել ցանցդ + setting_noindex: Խուսափել որոնողական համակարգերի ինդէքսաւորումից + setting_reduce_motion: Կրճատել անիմացիաների շարժումը + setting_show_application: Բացայայտել յաւելուած, որն օգտագործուում է թթելու համար + setting_system_font_ui: Օգտագործել համակարգի լռելեայն տառատեսակը setting_theme: Կայքի թեման + setting_trends: Ցուցադրել օրուայ թրենդները + setting_unfollow_modal: Ցուցադրել հաստատման պատուհանը որեւէ մեկին չհետեւելուց առաջ + setting_use_blurhash: Ցուցադրել գունաւոր կտորներ թաքցուած մեդիայից + setting_use_pending_items: Դանդաղ ռեժիմ severity: Սրություն sign_in_token_attempt: Անվտանգության կոդ + type: Ներմուծման տեսակ username: Մուտքանուն + username_or_email: Ծածկանուն կամ էլ․ փոստ + whole_word: Ամբողջ բառը + email_domain_block: + with_dns_records: Ներառել MX գրառում կամ դոմէյնի IP + featured_tag: + name: Պիտակ + interactions: + must_be_follower: Արգելափակել ծանուցումները ոչ հետեւորդներից + must_be_following: Արգելափակել ծանուցումները մարդկանցից, որոնց չես հետեւում + must_be_following_dm: Արգելափակել հասցէագրուած հաղորդագրութիւնները մարդկանցից, որոնց չես հետեւում invite: comment: Մեկնաբանություն + invite_request: + text: Ինչո՞ւ ես ցանկանում միանալ + notification_emails: + digest: Ուղարկել դասակարգուած իմակներ + favourite: Որեւէ մեկը հաւանեց գրառումդ + follow: Որեւէ մէկը սկսեց հետեւել քեզ + follow_request: Որեւէ մէկը քեզ հետեւելու հայց է ուղարկել + mention: Որեւէ մեկը նշեց քեզ + pending_account: Վերանայման կարիք ունեցող նոր հաշիւ + reblog: Ինչ֊որ մէկը թութդ տարածեց + report: Նոր բողոք է ուղարկուել + trending_tag: Չվերանայուած պիտակը թրենդի մէջ է + tag: + listable: Թոյլատրել, որ այս պիտակը յայտնուի որոնումների եւ հաշուի մատեանում + name: Պիտակ + trendable: Թոյլատրել, որ այս պիտակը յայտնուի թրենդներում + usable: Թոյլատրել թթերին օգտագործել այս պիտակը 'no': Ոչ recommended: Խորհուրդ է տրվում required: diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index 1717d0722..c94a5377a 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -65,8 +65,17 @@ id: data: File CSV yang diexpor dari server Mastodon lain invite_request: text: Ini akan membantu kami meninjau aplikasi Anda + ip_block: + comment: Opsional. Harap ingat alasan Anda menambahkan peraturan ini. + expires_in: Alamat IP terbatas, kadang-kadang dibagikan dan dipindah tangan. Oleh karena itu, blok IP tidak terbatas tidak disarankan. + ip: Masukkan alamat IPv4 atau IPv6. Anda dapat memblokir seluruh rentang dengan sintaks CIDR. Hati-hati, jangan mengunci Anda sendiri! + severities: + no_access: Blokir akses ke seluruh sumber daya + sign_up_requires_approval: Pendaftaran baru memerlukan persetujuan Anda + severity: Pilih apa yang akan dilakukan dengan permintaan dari IP ini sessions: otp: Masukkan kode dua-faktor dari handphone atau gunakan kode pemulihan anda. + webauthn: Jika ini kunci USB pastikan dalam keadaan tercolok dan, jika perlu, ketuk. tag: name: Anda hanya dapat mengubahnya ke huruf kecil/besar, misalnya, agar lebih mudah dibaca user: @@ -91,6 +100,7 @@ id: types: disable: Matikan none: Biarkan + sensitive: Sensitif silence: Diamkan suspend: Tangguhkan dan hapus data akun scr permanen warning_preset_id: Gunakan preset peringatan @@ -135,6 +145,7 @@ id: setting_default_privacy: Privasi postingan setting_default_sensitive: Selalu tandai media sebagai sensitif setting_delete_modal: Tampilkan dialog konfirmasi sebelum hapus toot + setting_disable_swiping: Nonaktifkan gerak usap setting_display_media: Tampilan media setting_display_media_default: Bawaan setting_display_media_hide_all: Sembunyikan semua @@ -151,6 +162,7 @@ id: setting_use_blurhash: Tampilkan gradien penuh warna utk media tersembunyi setting_use_pending_items: Mode pelan severity: Keparahan + sign_in_token_attempt: Kode keamanan type: Tipe impor username: Nama pengguna username_or_email: Nama pengguna atau Surel @@ -167,6 +179,13 @@ id: comment: Komentar invite_request: text: Mengapa Anda ingin gabung? + ip_block: + comment: Komentar + ip: IP + severities: + no_access: Blok akses + sign_up_requires_approval: Batasi pendaftaran + severity: Aturan notification_emails: digest: Kirim email berisi rangkuman favourite: Kirim email saat seseorang menyukai status anda @@ -187,4 +206,7 @@ id: required: mark: "*" text: wajib + title: + sessions: + webauthn: Gunakan salah satu kunci keamanan untuk masuk 'yes': Ya diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 5a1c51883..b751e5de1 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -65,8 +65,17 @@ is: data: CSV-skrá sem flutt hefur verið út af öðrum Mastodon-þjóni invite_request: text: Þetta mun hjálpa okkur við að yfirfara umsóknina þína + ip_block: + comment: Valfrjálst. Mundu hvers vegna þú bættir þessari reglu við. + expires_in: IP-vistföng eru ekki óendanleg, þeim er stundum deilt og skipta oftu um eigendur. Af þessum ástæðum er ekki mælt með ótakmörkuðum lokunum á blokkir IP-vistfanga. + ip: Settu inn IPv4 eða IPv6 vistfang. Þú getur lokað á svið vistfanga með því að nota CIDR-framsetningu. Gættu þess að loka ekki sjálfa/n þig úti! + severities: + no_access: Loka á aðgang að öllum tilföngum + sign_up_requires_approval: Nýskráningar munu þurfa samþykki þitt + severity: Veldu hvað munir gerast við beiðnir frá þessu IP-vistfangi sessions: otp: 'Settu inn tveggja-þátta kóðann sem farsímaforritið útbjó eða notaðu einn af endurheimtukóðunum þínum:' + webauthn: Ef þetta er USB-lykill, gakktu úr skugga um að honum sé stungið í samband og ef þörf þykir að ýta á hann. tag: name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra user: @@ -135,6 +144,7 @@ is: setting_default_privacy: Gagnaleynd færslna setting_default_sensitive: Alltaf merkja myndefni sem viðkvæmt setting_delete_modal: Birta staðfestingarglugga áður en tísti er eytt + setting_disable_swiping: Gera strokuhreyfingar óvirkar setting_display_media: Birting myndefnis setting_display_media_default: Sjálfgefið setting_display_media_hide_all: Fela allt @@ -168,6 +178,13 @@ is: comment: Athugasemd invite_request: text: Hvers vegna viltu taka þátt? + ip_block: + comment: Athugasemd + ip: IP-vistfang + severities: + no_access: Loka á aðgang + sign_up_requires_approval: Takmarka nýskráningar + severity: Regla notification_emails: digest: Senda uppsafnaðan tölvupóst favourite: Einhver setti stöðufærslu þína í eftirlæti @@ -188,4 +205,7 @@ is: required: mark: "*" text: nauðsynlegt + title: + sessions: + webauthn: Nota einn af öryggislyklunum þínum til að skrá inn 'yes': Já diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index f76ca05b6..1e79d593d 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -44,7 +44,7 @@ it: setting_default_sensitive: Media con contenuti sensibili sono nascosti in modo predefinito e possono essere rivelati con un click setting_display_media_default: Nascondi media segnati come sensibili setting_display_media_hide_all: Nascondi sempre tutti i media - setting_display_media_show_all: Nascondi sempre i media segnati come sensibili + setting_display_media_show_all: Mostra sempre i media segnati come sensibili setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status setting_show_application: L'applicazione che usi per pubblicare i toot sarà mostrata nella vista di dettaglio dei tuoi toot @@ -65,8 +65,17 @@ it: data: File CSV esportato da un altro server Mastodon invite_request: text: Questo ci aiuterà ad esaminare la tua richiesta + ip_block: + comment: Opzionale. Ricorda perché hai aggiunto questa regola. + expires_in: Gli indirizzi IP sono una risorsa finita, a volte sono condivisi e spesso cambiano possessore. Per questo motivo, i blocchi IP indefiniti non sono consigliati. + ip: Inserisci un indirizzo IPv4 o IPv6. Puoi bloccare interi intervalli usando la sintassi CIDR. Fai attenzione a non bloccare te stesso! + severities: + no_access: Blocca l'accesso a tutte le risorse + sign_up_requires_approval: Le nuove iscrizioni richiederanno la tua approvazione + severity: Scegli cosa accadrà con le richieste da questo IP sessions: otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:' + webauthn: Se si tratta di una chiavetta USB assicurati di inserirla e, se necessario, toccarla. tag: name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile user: @@ -91,6 +100,7 @@ it: types: disable: Disabilita none: Non fare nulla + sensitive: Sensibile silence: Silenzia suspend: Sospendi e cancella i dati dell'account in modo irreversibile warning_preset_id: Usa un avviso preimpostato @@ -135,6 +145,7 @@ it: setting_default_privacy: Privacy dei post setting_default_sensitive: Segna sempre i media come sensibili setting_delete_modal: Mostra dialogo di conferma prima di eliminare un toot + setting_disable_swiping: Disabilita i movimenti di scorrimento setting_display_media: Visualizzazione dei media setting_display_media_default: Predefinita setting_display_media_hide_all: Nascondi tutti @@ -168,6 +179,13 @@ it: comment: Commento invite_request: text: Perché vuoi iscriverti? + ip_block: + comment: Commento + ip: IP + severities: + no_access: Blocca accesso + sign_up_requires_approval: Limita iscrizioni + severity: Regola notification_emails: digest: Invia email riassuntive favourite: Invia email quando segna come preferito al tuo stato @@ -188,4 +206,7 @@ it: required: mark: "*" text: richiesto + title: + sessions: + webauthn: Usa una delle tue chiavi di sicurezza per accedere 'yes': Si diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 00f469b87..301dca6d8 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -65,6 +65,14 @@ ja: data: 他の Mastodon サーバーからエクスポートしたCSVファイルを選択して下さい invite_request: text: このサーバーは現在承認制です。申請を承認する際に役立つメッセージを添えてください + ip_block: + comment: オプションです。このルールを追加した理由の覚え書きにご利用ください。 + expires_in: IPアドレスは有限のリソースです。複数人で共有されたり変更されることもあります。そのため無期限にIPアドレスをブロックするのは推奨されません。 + ip: IPv4またはIPv6アドレスを入力してください。CIDR構文を用いて範囲指定でブロックすることもできます。自分自身を締め出さないよう注意してください! + severities: + no_access: すべてのリソースへのアクセスをブロックします + sign_up_requires_approval: 承認するまで新規登録が完了しなくなります + severity: このIPに対する措置を選択してください sessions: otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' tag: @@ -90,10 +98,10 @@ ja: type: アクション types: disable: ログインを無効化 - none: 何もしない + none: 警告を送信 sensitive: 閲覧注意 silence: サイレンス - suspend: 停止しアカウントのデータを恒久的に削除する + suspend: 停止 warning_preset_id: プリセット警告文を使用 announcement: all_day: 終日 @@ -136,6 +144,7 @@ ja: setting_default_privacy: 投稿の公開範囲 setting_default_sensitive: メディアを常に閲覧注意としてマークする setting_delete_modal: トゥートを削除する前に確認ダイアログを表示する + setting_disable_swiping: スワイプでの切り替えを無効にする setting_display_media: メディアの表示 setting_display_media_default: 標準 setting_display_media_hide_all: 非表示 @@ -169,6 +178,13 @@ ja: comment: コメント invite_request: text: 意気込みをお聞かせください + ip_block: + comment: コメント + ip: IP + severities: + no_access: ブロック + sign_up_requires_approval: 登録を制限 + severity: ルール notification_emails: digest: タイムラインからピックアップしてメールで通知する favourite: お気に入り登録された時 diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 6976ed433..bbc23ed51 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -26,6 +26,10 @@ kab: name: 'Ahat ad tebγuḍ ad tesqedceḍ yiwen gar-asen:' imports: data: Afaylu CSV id yusan seg uqeddac-nniḍen n Maṣṭudun + ip_block: + comment: D afrayan. Cfu ɣef wayɣer i terniḍ alugen-a. + severities: + no_access: Sewḥel anekcu ɣer akk tiɣbula labels: account: fields: @@ -42,6 +46,7 @@ kab: disable: Sens anekcum none: Ur teg kra silence: Sgugem + suspend: Ḥbes di leεḍil announcement: ends_at: Tagara n tedyant text: Alɣu @@ -82,8 +87,15 @@ kab: comment: Awennit invite_request: text: Acimi tebγiḍ ad ternuḍ iman-ik? + ip_block: + comment: Awennit + ip: IP + severities: + no_access: Sewḥel anekcum + severity: Alugen notification_emails: mention: Yuder-ik·em-id walbɛaḍ + reblog: Yella win yesselhan adda-dik·im tag: name: Ahacṭag 'no': Ala diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 7c05521fe..8588073d8 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -65,8 +65,17 @@ ko: data: 다른 마스토돈 서버에서 추출된 CSV 파일 invite_request: text: 이 정보는 우리가 심사를 하는 데에 참고할 수 있습니다 + ip_block: + comment: 필수 아님. 왜 이 규칙을 추가했는지 기억하세요. + expires_in: IP 주소는 한정된 자원입니다, 이것들은 가끔 공유 되거나 자주 소유자가 바뀌기도 합니다. 이런 이유로 인해, IP 차단을 영구히 유지하는 것은 추천하지 않습니다. + ip: IPv4 또는 IPv6 주소를 입력하세요. CIDR 문법을 사용해서 모든 범위를 차단할 수도 있습니다. 자기 자신을 잠가버리지 않도록 주의하세요! + severities: + no_access: 모든 자원에 대한 접근 차단 + sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다 + severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요 sessions: otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' + webauthn: USB 키라면 삽입했는지 확인하고, 필요하다면 누르세요. tag: name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다. user: @@ -91,6 +100,7 @@ ko: types: disable: 비활성화 none: 아무 것도 하지 않기 + sensitive: 민감함 silence: 침묵 suspend: 정지하고 되돌릴 수 없는 데이터 삭제 warning_preset_id: 경고 틀 사용하기 @@ -135,6 +145,7 @@ ko: setting_default_privacy: 툿 프라이버시 setting_default_sensitive: 미디어를 언제나 민감한 컨텐츠로 설정 setting_delete_modal: 툿 삭제 전 확인 창을 표시 + setting_disable_swiping: 스와이프 모션 비활성화 setting_display_media: 미디어 표시 setting_display_media_default: 기본 setting_display_media_hide_all: 모두 가리기 @@ -168,6 +179,13 @@ ko: comment: 주석 invite_request: text: 가입하려는 이유가 무엇인가요? + ip_block: + comment: 주석 + ip: IP + severities: + no_access: 접근 차단 + sign_up_requires_approval: 가입 제한 + severity: 규칙 notification_emails: digest: 요약 이메일 보내기 favourite: 누군가 내 상태를 즐겨찾기로 등록했을 때 이메일 보내기 @@ -188,4 +206,7 @@ ko: required: mark: "*" text: 필수 항목 + title: + sessions: + webauthn: 로그인하기 위해서 보안 키를 사용해 주세요 'yes': 네 diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index cc251e86a..2fbf0ffd7 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -1 +1 @@ -ckb-IR: +--- {} diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 3f4bd9b9e..7989f6981 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -89,9 +89,9 @@ nl: text: Aangepaste waarschuwing type: Actie types: - disable: Inloggen uitschakelen - none: Niets doen - silence: Negeren + disable: Bevriezen + none: Waarschuwing sturen + silence: Beperken suspend: Opschorten en onomkeerbaar accountgegevens verwijderen warning_preset_id: Gebruik een voorinstelling van een waarschuwing announcement: diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 54a5ecf01..f4a62ac07 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -3,27 +3,27 @@ nn: simple_form: hints: account_alias: - acct: Spesifiser brukernavn@domene til brukeren du vil flytte fra + acct: Spesifiser brukarnamn@domenet til brukaren du vil flytja frå account_migration: - acct: Spesifiser brukernavn@domene til brukeren du vil flytte til + acct: Spesifiser brukarnamn@domenet til brukaren du vil flytja til account_warning_preset: - text: Du kan bruke tut syntaks, f.eks. URLer, emneknagger og nevnelser - title: Valgfritt. Ikke synlig for mottaker + text: Du kan bruka tut-syntaks, som t. d. URL-ar, emneknaggar og nemningar + title: Valfritt. Ikkje synleg for mottakar admin_account_action: - include_statuses: Brukeren vil se hvilke tuter som forårsaket moderator-handlingen eller -advarselen - send_email_notification: Brukeren vil motta en forklaring på hva som har skjedd med deres bruker - text_html: Valgfritt. Du kan bruke tut syntaks. Du kan legge til advarsels-forhåndsinnstillinger for å spare tid - type_html: Velg hva du vil gjøre med %{acct} + include_statuses: Brukaren får sjå kva tut som gjorde moderatorhandllinga eller -åtvaringa + send_email_notification: Brukaren får ei forklåring av kva som har hendt med kontoen sin + text_html: Valfritt. Du kan bruka tut-syntaks. Du kan leggja til åtvaringsførehandsinnstillingar for å spara tid + type_html: Vel det du vil gjera med %{acct} warning_preset_id: Valfritt. Du kan leggja inn eigen tekst på enden av føreoppsettet announcement: - all_day: Hvis noen av dem er valgt, vil kun datoene av tidsrammen bli vist - ends_at: Valgfritt. Kunngjøring vil bli automatisk avpublisert på dette tidspunktet - scheduled_at: La stå tomt for å publisere kunngjøringen umiddelbart - starts_at: Valgfritt. I tilfellet din kunngjøring er bundet til en spesifikk tidsramme - text: Du kan bruke tut syntaks. Vennligst vær oppmerksom på plassen som kunngjøringen vil ta opp på brukeren sin skjerm + all_day: Når merka, vil berre datoane til tidsramma synast + ends_at: Valfritt. Lysinga vert teken ned av seg sjølv på dette tidspunktet + scheduled_at: Lat stå blankt for å gjeva ut lysinga med ein gong + starts_at: Valfritt. Om lysinga di er bunden til eit tidspunkt + text: Du kan bruka tut-syntaks. Ver merksam på plassen lysinga tek på brukaren sin skjerm defaults: - autofollow: Folk som lager en konto gjennom invitasjonen, vil automatisk følge deg - avatar: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px + autofollow: Folk som lagar ein konto gjennom innbydinga fylgjer deg automatisk + avatar: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px bot: Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med context: En eller flere sammenhenger der filteret skal gjelde current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker @@ -32,59 +32,62 @@ nn: discoverable: Profilmappen er en annen måte for kontoen din å nå et bredere publikum på email: Du får snart ein stadfestings-e-post fields: Du kan ha opptil 4 gjenstander vist som en tabell på profilsiden din - header: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px + header: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke - irreversible: Filtrerte tuter vil ugjenkallelig forsvinne, selv om filteret senere blir fjernet - locale: Språket til brukergrensesnittet, e-mailer og push-varsler - locked: Krever at du manuelt godkjenner følgere + irreversible: Filtrerte tut vil verta borte for evig, sjølv om filteret vert fjerna seinare + locale: Språket til brukargrensesnittet, e-postar og push-varsel + locked: Krev at du manuelt godkjenner fylgjarar password: Nytt minst 8 teikn phrase: Vil bli samsvart med, uansett bruk av store/små bokstaver eller innholdsadvarselen til en tut - scopes: Hvilke API-er programmet vil bli gitt tilgang til. Dersom du velger et toppnivåomfang, trenger du ikke å velge individuelle API-er. - setting_aggregate_reblogs: Ikke vis nye fremhevinger for tuter som nylig har blitt fremhever (Påvirker kun nylige fremhevinger) - setting_default_sensitive: Sensitivt media blir skjult som standard og kan bli vist med et klikk - setting_display_media_default: Skjul media som er merket som sensitivt + scopes: API-ane som programmet vil få tilgjenge til. Ettersom du vel eit toppnivåomfang tarv du ikkje velja einskilde API-ar. + setting_aggregate_reblogs: Ikkje vis nye framhevingar for tut som nyleg har vorte heva fram (Påverkar berre nylege framhevingar) + setting_default_sensitive: Nærtakande media vert gøymd som standard og kan synast med eit klikk + setting_display_media_default: Gøym media som er merka som nærtakande setting_display_media_hide_all: Alltid skjul alt media - setting_display_media_show_all: Alltid vis media som er merket som sensitivt + setting_display_media_show_all: Vis alltid media setting_hide_network: Kven du fylgjer og kven som fylgjer deg vert ikkje vist på profilen din - setting_noindex: Påvirker din offentlige profil og statussider - setting_show_application: Appen du brukte til å tute vil bli vist i den detaljerte visningen til tutene dine - setting_use_blurhash: Gradientene er basert på fargene til de skjulte visualitetene, men gjør alle detaljer uklare - setting_use_pending_items: Skjul tidslinjeoppdateringer bak et klikk, i stedet for å automatisk la strømmen skrolle + setting_noindex: Påverkar den offentlege profilen og statussidene dine + setting_show_application: Programmet du brukar for å tuta synast i den detaljerte visninga av tuta dine + setting_use_blurhash: Overgangar er bygt på dei løynde sine leter, men gjer detaljar utydelege + setting_use_pending_items: Gøym tidslineoppdateringar ved eit klikk, i staden for å bla ned hendestraumen automatisk username: Brukarnamnet ditt vert unikt på %{domain} - whole_word: Når søkeordet eller setningen bare er alfanumerisk, aktiveres det bare hvis det samsvarer med hele ordet + whole_word: Når søkjeordet eller setninga berre er alfanumerisk, nyttast det berre om det samsvarar med heile ordet domain_allow: - domain: Dette domenet vil være i stand til å hente data fra denne serveren og dets innkommende data vil bli prosessert og lagret + domain: Dette domenet er i stand til å henta data frå denne tenaren og innkomande data vert handsama og lagra email_domain_block: - domain: Det kan være domenenavnet som vises i e-postadressen, MX-posten, som domenet bestemmer til, eller IP-en til serveren som MX-posten løser etter. De vil bli sjekket ved brukerregistrering og registrering vil bli avvist. - with_dns_records: Et forsøk på å løse det gitte domenets DNS-poster vil bli gjort, og resultatene vil også bli svartelistet + domain: Dette kan vera domenenamnet som synest i e-postaddressa, MX-recorden som domenet løyser til eller IP-adressa til tenaren som MX-record løyser til. Dei sjekkast ved brukarregistrering og registretinga vert avvist. + with_dns_records: Eit forsøk på å løysa gjeve domene som DNS-data vil vera gjord og resultata vert svartelista featured_tag: name: 'Kanskje du vil nytta ein av desse:' form_challenge: - current_password: Du går inn i et sikkert område + current_password: Du går inn i eit trygt område imports: data: CSV-fil eksportert frå ein annan Mastodon-tenar invite_request: text: Dette kjem til å hjelpa oss med å gå gjennom søknaden din + ip_block: + severities: + no_access: Blokker tilgang til alle ressurser sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. tag: - name: Du kan bare forandre bruken av store/små bokstaver, f.eks. for å gjøre det mer lesbart + name: Du kan berre endra bruken av store/små bokstavar, t. d. for å gjera det meir leseleg user: - chosen_languages: Hvis noen av dem er valgt, vil kun tuter i de valgte språkene bli vist i de offentlige tidslinjene + chosen_languages: Når merka vil berre tuta på dei valde språka synast på offentlege tidsliner labels: account: fields: name: Merkelapp value: Innhald account_alias: - acct: Brukernavnet til den gamle brukeren + acct: Brukarnamnet på den gamle kontoen account_migration: - acct: Brukernavnet til den nye brukeren + acct: Brukarnamnet på den nye kontoen account_warning_preset: text: Føreåtstekst title: Tittel admin_account_action: - include_statuses: Inkluder rapporterte tuter i e-mailen + include_statuses: Ha med rapporterte tut i e-posten send_email_notification: Varsl brukaren med e-post text: Eigen åtvaring type: Handling @@ -95,11 +98,11 @@ nn: suspend: Utvis og slett kontodata for godt warning_preset_id: Bruk åtvaringsoppsett announcement: - all_day: Heldagshendelse - ends_at: Slutten av hendelsen + all_day: Heildagshending + ends_at: Hendinga er ferdig scheduled_at: Planlegg publisering - starts_at: Begynnelse av hendelsen - text: Kunngjøring + starts_at: Byrjing av hendinga + text: Lysing defaults: autofollow: Bed om å fylgja kontoen din avatar: Bilete @@ -110,14 +113,14 @@ nn: context: Filtrer kontekstar current_password: Noverande passord data: Data - discoverable: Før opp denne kontoen i mappen + discoverable: Før denne kontoen opp i mappa display_name: Synleg namn email: E-post-adresse expires_in: Vert ugyldig etter fields: Profilmetadata header: Overskrift - inbox_url: URL til overgangsinnboksen - irreversible: Forkast i stedet for å skjule + inbox_url: URL-addressen til overgangsinnboksen + irreversible: Forkast i staden for å gøyma locale: Språk locked: Lås konto max_uses: Grense på brukartal @@ -126,47 +129,56 @@ nn: otp_attempt: Tostegskode password: Passord phrase: Nykelord eller frase - setting_advanced_layout: Skru på det avanserte nettgrensesnittet - setting_aggregate_reblogs: Gruppefremhevinger i tidslinjer + setting_advanced_layout: Skruv på det avanserte nettgrensesnittet + setting_aggregate_reblogs: Gruppeframhevingar på tidsliner setting_auto_play_gif: Spel av animerte GIF-ar automatisk - setting_boost_modal: Vis bekreftelse før fremheving - setting_crop_images: Klipp bilder i ikke-utvidede tuter til 16:9 + setting_boost_modal: Vis stadfesting før framheving + setting_crop_images: Skjer bilete i ikkje-utvida tut til 16x9 setting_default_language: Språk på innlegg setting_default_privacy: Privatliv - setting_default_sensitive: Marker alltid media som sensitivt - setting_delete_modal: Vis bekreftelse før du sletter en tut + setting_default_sensitive: Merk alltid media som nærtakande + setting_delete_modal: Vis stadfesting før du slettar eit tut + setting_disable_swiping: Skru av sveipebevegelser setting_display_media: Medievisning setting_display_media_default: Standard setting_display_media_hide_all: Gøym alle setting_display_media_show_all: Vis alle - setting_expand_spoilers: Utvid alltid tuter som er merket med innholdsadvarsler - setting_hide_network: Skjul nettverket ditt - setting_noindex: Avmeld fra søkemotorindeksering - setting_reduce_motion: Reduser bevegelser i animasjoner - setting_show_application: Skryt av appen som ble brukt til å sende tuter + setting_expand_spoilers: Vid alltid ut tut som er merka med innhaldsåtvaringar + setting_hide_network: Gøym nettverket ditt + setting_noindex: Vel bort søkjemotorregistrering + setting_reduce_motion: Minsk rørsle i animasjonar + setting_show_application: Avdekk programmet bruka for å senda tut setting_system_font_ui: Bruk standardskrifttypen på systemet setting_theme: Sidetema setting_trends: Vis kva som er populært i dag - setting_unfollow_modal: Vis bekreftelse før du slutter å følge noen - setting_use_blurhash: Vis fargerike gradienter for skjulte media + setting_unfollow_modal: Vis stadfesting før du sluttar å fylgja nokon + setting_use_blurhash: Vis fargerike overgangar for gøymt media setting_use_pending_items: Saktemodus severity: Alvorsgrad + sign_in_token_attempt: Trygdenykel type: Importtype username: Brukarnamn - username_or_email: Brukarnman eller E-post + username_or_email: Brukarnamn eller E-post whole_word: Heilt ord email_domain_block: - with_dns_records: Inkluder MX-poster og IP-adresser for domenet + with_dns_records: Ha med MX-recordar og IP-ar til domenet featured_tag: name: Emneknagg interactions: - must_be_follower: Blokker varslinger fra ikke-følgere - must_be_following: Blokker varslinger fra personer du ikke følger - must_be_following_dm: Blokker direkte meldinger fra personer du ikke følger + must_be_follower: Gøym varslingar frå folk som ikkje fylgjer deg + must_be_following: Gøym varslingar frå folk du ikkje fylgjer + must_be_following_dm: Gøym direktemeldinger frå folk du ikkje fylgjer invite: comment: Kommentar invite_request: text: Kvifor vil du verta med? + ip_block: + comment: Kommentere + ip: IP + severities: + no_access: Blokker tilgang + sign_up_requires_approval: Begrens påmeldinger + severity: Oppføring notification_emails: digest: Send samandrag på e-post favourite: Send e-post når nokon merkjer statusen din som favoritt @@ -176,15 +188,18 @@ nn: pending_account: Send e-post når ein ny konto treng gjennomgang reblog: Send e-post når nokon framhevar statusen din report: Send e-post når nokon rapporterer noko - trending_tag: En ugjennomgått emneknagg trender + trending_tag: Ein emneknagg som ikkje er sett igjennom er på veg opp tag: - listable: Tillat denne emneknaggen å vises i søk og på profilmappen + listable: Tillat denne emneknaggen å synast i søk og i profilmappa name: Emneknagg - trendable: Tillat denne emneknaggen til å vises under trender + trendable: Tillat denne emneknaggen til å synast under trendar usable: Gje tut lov til å nytta denne emneknaggen 'no': Nei recommended: Tilrådt required: mark: "*" text: obligatorisk + title: + sessions: + webauthn: Bruk en av sikkerhetsnøklene dine til å logge på 'yes': Ja diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 0210e5a6e..cdf3d61e8 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -65,6 +65,9 @@ data: CSV-fil eksportert fra en annen Mastodon-instans invite_request: text: Dette vil hjelpe oss med å gjennomgå din søknad + ip_block: + severities: + no_access: Blokker tilgang til alle ressurser sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. tag: @@ -135,6 +138,7 @@ setting_default_privacy: Postintegritet setting_default_sensitive: Marker alltid media som sensitivt setting_delete_modal: Vis bekreftelse før du sletter en tut + setting_disable_swiping: Skru av sveipebevegelser setting_display_media: Mediavisning setting_display_media_default: Standard setting_display_media_hide_all: Skjul alle @@ -151,6 +155,7 @@ setting_use_blurhash: Vis fargerike gradienter for skjulte media setting_use_pending_items: Saktemodus severity: Alvorlighetsgrad + sign_in_token_attempt: Sikkerhetskode type: Importeringstype username: Brukernavn username_or_email: Brukernavn eller E-post @@ -167,6 +172,13 @@ comment: Kommentar invite_request: text: Hvorfor vil du bli med? + ip_block: + comment: Kommentere + ip: IP + severities: + no_access: Blokker tilgang + sign_up_requires_approval: Begrens påmeldinger + severity: Oppføring notification_emails: digest: Send sammendrag på e-post favourite: Send e-post når noen setter din status som favoritt @@ -187,4 +199,7 @@ required: mark: "*" text: obligatorisk + title: + sessions: + webauthn: Bruk en av sikkerhetsnøklene dine til å logge på 'yes': Ja diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 16bde88ce..72a6c99bc 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -22,9 +22,9 @@ oc: starts_at: Opcional. Se per cas vòstra anóncia es ligada a un interval de temps especific text: Podètz utilizar la sintaxi dels tuts. Gardatz al cap qu’aquesta anóncia ocuparà la fenèstra de l’utilizaire defaults: - autofollow: Lo monde que se marcan gràcia a l’invitacion vos segràn automaticament + autofollow: Lo mond que se marcan gràcia a l’invitacion vos segràn automaticament avatar: PNG, GIF o JPG. Maximum %{size}. Serà retalhat en %{dimensions}px - bot: Avisar lo monde qu’aqueste compte es pas d’una persona + bot: Avisar lo mond qu’aqueste compte es pas d’una persona context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar current_password: Per de rasons de seguretat volgatz picar lo senhal del compte actual current_username: Per confirmar, volgatz picar lo nom d’utilizaire del compte actual @@ -45,7 +45,7 @@ oc: setting_display_media_default: Rescondre los mèdias marcats coma sensibles setting_display_media_hide_all: Totjorn rescondre los mèdias setting_display_media_show_all: Totjorn mostrar los mèdias marcats coma sensibles - setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo monde que seguètz + setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo mond que seguètz setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts setting_show_application: Lo nom de l’aplicacion qu’utilizatz per publicar serà mostrat dins la vista detalhada de vòstres tuts setting_use_blurhash: Los degradats venon de las colors de l’imatge rescondut en enfoscar los detalhs @@ -65,8 +65,12 @@ oc: data: Fichièr CSV exportat d’un autre servidor Mastodon invite_request: text: Aquò nos ajudarà per validar vòstra demanda + ip_block: + comment: Opcional. Remembratz-vos perque ajustèretz aquesta règla. + severity: Causissètz que far amb las requèstas d’aquesta IP sessions: otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :' + webauthn: S’es una clau USB asseguratz-vos de l’inserir, e se cal de la picanhejar. tag: name: Podètz pas que cambiar la talha de las letras, per exemple, per que sián de melhor legir user: @@ -91,6 +95,7 @@ oc: types: disable: Desactivar none: Far pas res + sensitive: Sensible silence: Metre en silence suspend: Suspendre e escafar per de bon las donadas del compte warning_preset_id: Utilizar un avertiment predefinit @@ -135,6 +140,7 @@ oc: setting_default_privacy: Confidencialitat dels tuts setting_default_sensitive: Totjorn marcar los mèdias coma sensibles setting_delete_modal: Mostrar una fenèstra de confirmacion abans de suprimir un estatut + setting_disable_swiping: Desactivar las accions en lisant setting_display_media: Afichatge dels mèdias setting_display_media_default: Defaut setting_display_media_hide_all: O rescondre tot @@ -163,11 +169,18 @@ oc: interactions: must_be_follower: Blocar las notificacions del mond que vos sègon pas must_be_following: Blocar las notificacions del mond que seguètz pas - must_be_following_dm: Blocar los messatges del monde que seguètz pas + must_be_following_dm: Blocar los messatges del mond que seguètz pas invite: comment: Comentari invite_request: text: Perqué volètz vos marcar ? + ip_block: + comment: Comentari + ip: IP + severities: + no_access: Blocar l’accès + sign_up_requires_approval: Limitar las inscripcions + severity: Règla notification_emails: digest: Enviar un corrièl recapitulatiu favourite: Enviar un corrièl quand qualqu’un plaça vòstre estatut en favorit @@ -188,4 +201,7 @@ oc: required: mark: "*" text: requesit + title: + sessions: + webauthn: Utilizatz una de vòstras clau de seguretat per vos identificar 'yes': Òc diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index d2a1e9386..623639efc 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -65,8 +65,17 @@ pl: data: Plik CSV wyeksportowany z innego serwera Mastodona invite_request: text: To pomoże nam w recenzji Twojej aplikacji + ip_block: + comment: Niewymagane. Pamiętaj, dlaczego dodałeś tę regułę. + expires_in: Adresy IP to ograniczony zasób, czasami są współdzielone i często zmieniają właściciela. Z tego powodu blokady adresów IP nie są zalecane. + ip: Wprowadź adres IPv4 lub IPv6. Możesz zablokować całe zakresy za pomocą składni CIDR. Uważaj, aby się nie zablokować! + severities: + no_access: Zablokuj dostęp do wszystkich zasobów + sign_up_requires_approval: Nowe rejestracje będą wymagać twojej zgody + severity: Wybierz co ma się stać z żadaniami z tego adresu IP sessions: otp: 'Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych:' + webauthn: Jeżeli jest to klucz USB, upewnij się, że go włożyłeś i, jeśli to konieczne, naciśnij go. tag: name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne user: @@ -135,6 +144,7 @@ pl: setting_default_privacy: Widoczność wpisów setting_default_sensitive: Zawsze oznaczaj zawartość multimedialną jako wrażliwą setting_delete_modal: Pytaj o potwierdzenie przed usunięciem wpisu + setting_disable_swiping: Wyłącz ruchy przesuwania setting_display_media: Wyświetlanie zawartości multimedialnej setting_display_media_default: Domyślne setting_display_media_hide_all: Ukryj wszystko @@ -168,6 +178,13 @@ pl: comment: Komentarz invite_request: text: Czemu chcesz dołączyć? + ip_block: + comment: Skomentuj + ip: Adres IP + severities: + no_access: Zablokuj dostęp + sign_up_requires_approval: Ogranicz rejestracje + severity: Reguła notification_emails: digest: Wysyłaj podsumowania e-mailem favourite: Powiadamiaj mnie e-mailem, gdy ktoś polubi mój wpis @@ -188,4 +205,7 @@ pl: required: mark: "*" text: pole wymagane + title: + sessions: + webauthn: Użyj jednego ze swoich kluczy bezpieczeństwa, aby się zalogować 'yes': Tak diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index c112ad4bc..f3c993625 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -55,7 +55,7 @@ pt-BR: domain_allow: domain: Este domínio poderá obter dados deste servidor e os dados recebidos dele serão processados e armazenados email_domain_block: - domain: Este pode ser o nome de domínio que aparece no endereço de e-mail, o registro MX para o qual o domínio resolve, ou o IP do servidor para o qual o registro MX resolve. Esses vão ser verificados no momento da cadastro do usuário e o cadastro será rejeitado. + domain: Este pode ser o nome de domínio que aparece no endereço de e-mail, o registro MX para o qual o domínio resolve, ou o IP do servidor para o qual o registro MX resolve. Esses vão ser verificados no momento de registro do usuário e o registro será rejeitado. with_dns_records: Será feita uma tentativa de resolver os registros DNS do domínio em questão e os resultados também serão colocados na lista negra featured_tag: name: 'Você pode querer usar um destes:' @@ -64,9 +64,18 @@ pt-BR: imports: data: Arquivo CSV exportado de outra instância Mastodon invite_request: - text: Isso nos ajudará a revisar seu aplicativo + text: Isso vai nos ajudar a revisar sua aplicação + ip_block: + comment: Opcional. Lembrar de por que você adicionou esta regra. + expires_in: Endereços IP são um recurso limitado, algumas vezes são compartilhados e muitas vezes mudam de mãos. Por essa razão, blocos de IP indefinidos não são recomendados. + ip: Digite um endereço IPv4 ou IPv6. Você pode bloquear intervalos inteiros usando a sintaxe CIDR. Tenha cuidado para não bloquear a si mesmo! + severities: + no_access: Bloquear o acesso a todos os recursos + sign_up_requires_approval: Novos registros exigirão sua aprovação + severity: Escolha o que acontecerá com as solicitações deste IP sessions: otp: 'Digite o código de dois fatores gerado pelo aplicativo no seu celular ou use um dos códigos de recuperação:' + webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, tocar nela. tag: name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível user: @@ -89,7 +98,7 @@ pt-BR: text: Aviso personalizado type: Ação types: - disable: Bloquear conta + disable: Congelar none: Não fazer nada silence: Silenciar suspend: Banir e excluir irreversivelmente dados da conta @@ -135,6 +144,7 @@ pt-BR: setting_default_privacy: Privacidade dos toots setting_default_sensitive: Sempre marcar mídia como sensível setting_delete_modal: Solicitar confirmação antes de excluir toot + setting_disable_swiping: Desabilitar movimentos deslizantes setting_display_media: Exibição das mídias setting_display_media_default: Padrão setting_display_media_hide_all: Ocultar tudo @@ -168,6 +178,13 @@ pt-BR: comment: Comentário invite_request: text: Por que você deseja criar uma conta aqui? + ip_block: + comment: Comentário + ip: IP + severities: + no_access: Bloquear acesso + sign_up_requires_approval: Limitar registros + severity: Regra notification_emails: digest: Enviar e-mails de resumo favourite: Enviar e-mail quando alguém favoritar seus toots @@ -188,4 +205,7 @@ pt-BR: required: mark: "*" text: obrigatório + title: + sessions: + webauthn: Utilize uma das suas chaves de segurança para entrar 'yes': Sim diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index d3cf5911a..614d78c55 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -65,8 +65,17 @@ pt-PT: data: Arquivo CSV exportado de outra instância do Mastodon invite_request: text: Isto vai ajudar-nos a rever o seu pedido + ip_block: + comment: Opcional. Relembre-se por que adicionou esta regra. + expires_in: Endereços IP são um recurso limitado, algumas vezes são compartilhados e muitas vezes mudam de mãos. Por essa razão, bloqueios de IP indefinidos não são recomendados. + ip: Introduza um endereço IPv4 ou IPv6. Pode bloquear intervalos inteiros usando a sintaxe CIDR. Tenha cuidado para não se bloquear a sí mesmo! + severities: + no_access: Bloquear o acesso a todos os recursos + sign_up_requires_approval: Novas inscrições requererão a sua aprovação + severity: Escolha o que acontecerá com as solicitações deste IP sessions: otp: 'Insere o código de autenticação em dois passos gerado pelo teu telemóvel ou usa um dos teus códigos de recuperação:' + webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela. tag: name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis user: @@ -91,6 +100,7 @@ pt-PT: types: disable: Desactivar none: Não fazer algo + sensitive: Sensível silence: Silenciar suspend: Suspender e apagar irreversivelmente os dados da conta warning_preset_id: Usar um aviso pré-definido @@ -135,6 +145,7 @@ pt-PT: setting_default_privacy: Privacidade da publicação setting_default_sensitive: Sempre marcar media como sensível setting_delete_modal: Solicitar confirmação antes de eliminar uma publicação + setting_disable_swiping: Desactivar os movimentos de deslize setting_display_media: Visualização de media setting_display_media_default: Pré-definição setting_display_media_hide_all: Esconder todos @@ -168,6 +179,13 @@ pt-PT: comment: Comentário invite_request: text: Porque se quer juntar a nós? + ip_block: + comment: Comentário + ip: IP + severities: + no_access: Bloquear acesso + sign_up_requires_approval: Limitar inscrições + severity: Regra notification_emails: digest: Enviar e-mails de resumo favourite: Enviar e-mail quando alguém adiciona uma publicação tua aos favoritos @@ -188,4 +206,7 @@ pt-PT: required: mark: "*" text: obrigatório + title: + sessions: + webauthn: Utilize uma das suas chaves de segurança para entrar 'yes': Sim diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 6cc565228..3f00abb97 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -65,8 +65,17 @@ ru: data: Файл CSV, экспортированный с другого узла Mastodon. invite_request: text: Это поможет нам рассмотреть вашу заявку + ip_block: + comment: Необязательно. Заметка на будущее, почему вы добавили это правило. + expires_in: IP адреса — весьма ограниченный ресурс, иногда они разделяются между абонентами и часто меняют владельца. По этой причине блокировки на неопределённые сроки не рекомендуются. + ip: Введите IPv4 или IPv6 адрес. Вы можете блокировать целые диапазоны, используя синтаксис CIDR. Будьте осторожны, не заблокируйте самого себя! + severities: + no_access: Заблокировать доступ ко всем ресурсам + sign_up_requires_approval: Новые регистрации потребуют вашего одобрения + severity: Выберите, что будет происходить с запросами с этого IP sessions: otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:' + webauthn: Если это ключ USB, не забудьте его вставить и, при необходимости, нажмите на него. tag: name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым user: @@ -135,6 +144,7 @@ ru: setting_default_privacy: Видимость постов setting_default_sensitive: Всегда отмечать медиафайлы как деликатные setting_delete_modal: Всегда спрашивать перед удалении поста + setting_disable_swiping: Отключить анимацию смахивания setting_display_media: Отображение медиафайлов setting_display_media_default: По умолчанию setting_display_media_hide_all: Скрывать все @@ -168,6 +178,13 @@ ru: comment: Комментарий invite_request: text: Почему вы хотите присоединиться к нам? + ip_block: + comment: Комментарий + ip: IP + severities: + no_access: Блокировать доступ + sign_up_requires_approval: Ограничить регистрации + severity: Правило notification_emails: digest: Присылать дайджест по e-mail favourite: Ваш пост добавили в избранное @@ -188,4 +205,7 @@ ru: required: mark: "*" text: обязательно + title: + sessions: + webauthn: Используйте один из ваших ключей безопасности для входа в систему 'yes': Да diff --git a/config/locales/simple_form.sa.yml b/config/locales/simple_form.sa.yml new file mode 100644 index 000000000..07ea4372a --- /dev/null +++ b/config/locales/simple_form.sa.yml @@ -0,0 +1 @@ +sa: diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 0093edde2..ac95ab570 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -65,8 +65,17 @@ sq: data: Kartelë CSV të eksportuar nga një tjetër shërbyes Mastodon invite_request: text: Kjo do të na ndihmojë të shqyrtojmë aplikimin tuaj + ip_block: + comment: Opsionale. Mbani mend pse e shtuat këtë rregull. + expires_in: Adresat IP janë një burim i kufizuar, shpesh janë të përbashkëta dh ndryshojnë zot shpesh. Për këtë arsye, nuk rekomandohem blloqe IP të pafund. + ip: Jepni një adresë IPv4 ose IPv6. Duke përdorur sintaksën CIDR, mund të bllokoni intervale të tëra. Hapni sytë mos lini veten jashtë! + severities: + no_access: Blloko hyrje në krejt burimet + sign_up_requires_approval: Regjistrime të reja do të duan miratimin tuaj + severity: Zgjidhni ç’do të ndodhë me kërkesa nga kjo IP sessions: otp: 'Jepni kodin dyfaktorësh të prodhuar nga aplikacioni i telefonit tuaj ose përdorni një nga kodet tuaj të rikthimeve:' + webauthn: Nëse është një diskth USB, sigurohuni se e keni futur dhe, në qoftë e nevojshme, prekeni. tag: name: Mund të ndryshoni shkronjat vetëm nga të mëdha në të vogla ose anasjelltas, për shembull, për t’i bërë më të lexueshme user: @@ -91,6 +100,7 @@ sq: types: disable: Çaktivizo hyrjen none: Mos bëj gjë + sensitive: Rezervat silence: Heshtje suspend: Pezulloje dhe fshi në mënyrë të pakthyeshme të dhënat e llogarisë warning_preset_id: Përdor një sinjalizim të paracaktuar @@ -135,6 +145,7 @@ sq: setting_default_privacy: Privatësi postimi setting_default_sensitive: Mediave vëru përherë shenjë si rezervat setting_delete_modal: Shfaq dialog ripohimi përpara fshirjes së një mesazhi + setting_disable_swiping: Çaktivizo lëvizje me fërkim setting_display_media: Shfaqje mediash setting_display_media_default: Parazgjedhje setting_display_media_hide_all: Fshihi krejt @@ -168,6 +179,13 @@ sq: comment: Komentoni invite_request: text: Pse doni të bëheni pjesë? + ip_block: + comment: Koment + ip: IP + severities: + no_access: Bllokoji hyrjen + sign_up_requires_approval: Kufizo regjistrime + severity: Rregull notification_emails: digest: Dërgo email-e përmbledhës favourite: Dikush parapëlqeu gjendjen tuaj @@ -188,4 +206,7 @@ sq: required: mark: "*" text: e domosdoshme + title: + sessions: + webauthn: Që të bëhet hyrja, përdorni një nga kyçet tuaj të sigurisë 'yes': Po diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 80b699c28..dd7769fca 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -15,6 +15,10 @@ sv: text_html: Extra. Du kan använda toot syntax. Du kan lägga till förvalda varningar för att spara tid type_html: Välj vad du vill göra med %{acct} warning_preset_id: Extra. Du kan lägga till valfri text i slutet av förinställningen + announcement: + all_day: När det är markerat visas endast datum för tidsintervallet + ends_at: Frivillig. Meddelandet kommer automatiskt att publiceras just nu + scheduled_at: Lämna tomt för att publicera meddelandet omedelbart defaults: autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px @@ -49,15 +53,21 @@ sv: account_warning_preset: title: Rubrik admin_account_action: + text: Anpassad varning types: + disable: Inaktivera inloggning none: Gör ingenting + silence: Tysta defaults: autofollow: Bjud in till att följa ditt konto bot: Detta är ett botkonto chosen_languages: Filtrera språk confirm_new_password: Bekräfta nytt lösenord confirm_password: Bekräfta lösenord + context: Filter sammanhang current_password: Nuvarande lösenord + data: Data + discoverable: Lista detta konto i katalogen display_name: Visningsnamn email: E-postadress expires_in: Förfaller efter @@ -78,7 +88,9 @@ sv: setting_default_privacy: Postintegritet setting_default_sensitive: Markera alltid media som känsligt setting_delete_modal: Visa bekräftelsedialog innan du raderar en toot + setting_disable_swiping: Inaktivera svepande rörelser setting_display_media: Mediavisning + setting_display_media_default: Standard setting_display_media_hide_all: Dölj alla setting_display_media_show_all: Visa alla setting_hide_network: Göm ditt nätverk diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml index 74c641901..e306ce64d 100644 --- a/config/locales/simple_form.ta.yml +++ b/config/locales/simple_form.ta.yml @@ -64,6 +64,7 @@ ta: note: சுயசரிதை password: கடவுச்சொல் setting_use_pending_items: மெதுவான பயன்முறை + sign_in_token_attempt: பாதுகாப்புக் குறியீடு username: பயனர்பெயர் username_or_email: பயனர் பெயர் அல்லது மின்னஞ்சல் email_domain_block: diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 3ed64c322..7d2116740 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -55,7 +55,7 @@ th: domain_allow: domain: โดเมนนี้จะสามารถดึงข้อมูลจากเซิร์ฟเวอร์นี้และจะประมวลผลและจัดเก็บข้อมูลขาเข้าจากโดเมน email_domain_block: - with_dns_records: จะทำการพยายามแปลงที่อยู่ระเบียน DNS ของโดเมนที่กำหนดและจะขึ้นบัญชีดำผลลัพธ์เช่นกัน + with_dns_records: จะทำการพยายามแปลงที่อยู่ระเบียน DNS ของโดเมนที่กำหนดและจะปิดกั้นผลลัพธ์เช่นกัน featured_tag: name: 'คุณอาจต้องการใช้หนึ่งในนี้:' form_challenge: @@ -64,6 +64,9 @@ th: data: ไฟล์ CSV ที่ส่งออกจากเซิร์ฟเวอร์ Mastodon อื่น invite_request: text: นี่จะช่วยให้เราตรวจทานใบสมัครของคุณ + ip_block: + severities: + no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด sessions: otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:' tag: @@ -88,7 +91,7 @@ th: text: คำเตือนที่กำหนดเอง type: การกระทำ types: - disable: ปิดใช้งานการเข้าสู่ระบบ + disable: แช่แข็ง none: ไม่ทำสิ่งใด silence: ทำให้เงียบ suspend: ระงับและลบข้อมูลบัญชีอย่างถาวร @@ -167,6 +170,13 @@ th: comment: ความคิดเห็น invite_request: text: ทำไมคุณจึงต้องการเข้าร่วม? + ip_block: + comment: ความคิดเห็น + ip: IP + severities: + no_access: ปิดกั้นการเข้าถึง + sign_up_requires_approval: จำกัดการลงทะเบียน + severity: กฎ notification_emails: digest: ส่งอีเมลสรุป favourite: ใครสักคนได้ชื่นชอบสถานะของคุณ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index ea913048d..54031a7f9 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -28,11 +28,11 @@ tr: context: Filtrenin geçerli olması gereken bir veya daha fazla içerik current_password: Güvenlik nedeniyle lütfen şu anki hesabın parolasını girin current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin - digest: Yalnızca uzun süre kullanılmadığında ve yalnızca yokluğunda kişisel mesajlar aldıysanız gönderilir + digest: Sadece uzun bir süre hareketsiz kaldıktan sonra ve yalnızca yokluğunuzda herhangi bir kişisel mesaj aldıysanız gönderilir discoverable: Profil dizini, hesabınızın daha geniş bir kitleye ulaşmasının başka bir yoludur email: Onay e-postası gönderilecek fields: Profilinizde tablo olarak görüntülenen en fazla 4 ögeye sahip olabilirsiniz - header: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir. + header: PNG, GIF ya da JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecek inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın irreversible: Filtre uygulanmış tootlar, filtre daha sonra çıkartılsa bile geri dönüşümsüz biçimde kaybolur locale: Kullanıcı arayüzünün dili, e-postalar ve push bildirimleri @@ -40,11 +40,11 @@ tr: password: En az 8 karakter kullanın phrase: Metnin büyük/küçük harf durumundan veya tootun içerik uyarısından bağımsız olarak eşleştirilecek scopes: Uygulamanın erişmesine izin verilen API'ler. Üst seviye bir kapsam seçtiyseniz, bireysel kapsam seçmenize gerek yoktur. - setting_aggregate_reblogs: Yakın zamanda yinelenmiş tootlar için yeni yinelemeler gösterme (yalnızca yeni alınan yinelemeleri etkiler) + setting_aggregate_reblogs: Yakın zamanda boostlanmış tootlar için yeni boostları gösterme (yalnızca yeni alınan boostları etkiler) setting_default_sensitive: Hassas medya varsayılan olarak gizlenir ve bir tıklama ile görüntülenebilir setting_display_media_default: Hassas olarak işaretlenmiş medyayı gizle - setting_display_media_hide_all: Tüm medyayı gizle - setting_display_media_show_all: Hassas olarak işaretlenmiş medyayı göster + setting_display_media_hide_all: Medyayı her zaman gizle + setting_display_media_show_all: Medyayı her zaman göster setting_hide_network: Takip edilenler ve takipçiler profilinizde gösterilmeyecek setting_noindex: Herkese açık profilinizi ve durum sayfalarınızı etkiler setting_show_application: Tootlamak için kullandığınız uygulama, tootlarınızın detaylı görünümünde gösterilecektir @@ -54,6 +54,9 @@ tr: whole_word: Anahtar kelime veya kelime öbeği yalnızca alfasayısal olduğunda, yalnızca tüm sözcükle eşleşirse uygulanır domain_allow: domain: Bu alan adı, bu sunucudan veri alabilecek ve ondan gelen veri işlenecek ve saklanacaktır + email_domain_block: + domain: Bu, e-posta adresinde görünen etki alanı adı, etki alanının çözümlediği MX kaydı veya MX kaydının çözümlediği sunucunun IP'si olabilir. Bunlar kullanıcı kaydı ile kontrol edilecek ve kayıt reddedilecektir. + with_dns_records: Belirli bir alanın DNS kayıtlarını çözmeyi deneyecek ve sonuçlar kara listeye eklenecek featured_tag: name: 'Bunlardan birini kullanmak isteyebilirsiniz:' form_challenge: @@ -62,8 +65,17 @@ tr: data: Diğer Mastodon sunucusundan dışarı aktardığınız CSV dosyası invite_request: text: Bu, başvurunuzu gözden geçirmemize yardımcı olacaktır + ip_block: + comment: İsteğe bağlı. Bu kuralı neden eklediğinizi hatırlayın. + expires_in: IP adresleri sınırlı bir kaynaktır, bazen paylaşılırlar ve sıklıkla el değiştirirler. Bu nedenle, belirsiz IP blokları önerilmez. + ip: Bir IPv4 veya IPv6 adresi girin. CIDR sözdizimini kullanarak tüm aralıkları engelleyebilirsiniz. Kendinizi dışarıda bırakmamaya dikkat edin! + severities: + no_access: Tüm kaynaklara erişimi engelle + sign_up_requires_approval: Yeni kayıt onayınızı gerektirir + severity: Bu IP'den gelen isteklere ne olacağını seçin sessions: otp: Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz. + webauthn: Bir USB anahtarıysa, taktığınızdan ve gerekirse üzerine tıkladığınızdan emin olun. tag: name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz user: @@ -88,6 +100,7 @@ tr: types: disable: Devre dışı none: Hiç birşey + sensitive: Hassas silence: Sessiz suspend: Hesap verilerini askıya alın ve geri alınamaz şekilde silin warning_preset_id: Bir uyarı ön-ayarı kullan @@ -102,82 +115,90 @@ tr: avatar: Profil resmi bot: Bu bir bot hesabı chosen_languages: Dilleri filtrele - confirm_new_password: Yeni parolanız (tekrar) - confirm_password: Parolanız (tekrar) + confirm_new_password: Yeni şifreyi onayla + confirm_password: Şifreyi onayla context: İçeriği filtrele - current_password: Mevcut parolanız - data: Dosya + current_password: Geçerli şifre + data: Veri discoverable: Bu hesabı dizinde listele - display_name: Görünen adınız - email: E-posta adresiniz + display_name: Görünen isim + email: E-posta adresi expires_in: Bitiş tarihi - fields: Profil Metaverisi + fields: Profil meta verisi header: Kapak resmi inbox_url: Aktarıcı gelen kutusunun URL'si irreversible: Gizlemek yerine bırak - locale: Dil - locked: Hesabımı kilitle + locale: Arayüz dili + locked: Hesabı kilitle max_uses: Maksimum kullanım sayısı - new_password: Yeni parolanız + new_password: Yeni şifre note: Kişisel bilgiler - otp_attempt: İki-faktörlü kod - password: Parolanız + otp_attempt: İki adımlı doğrulama kodu + password: Şifre phrase: Anahtar kelime veya kelime öbeği setting_advanced_layout: Gelişmiş web arayüzünü etkinleştir - setting_aggregate_reblogs: Zaman çizelgesindeki grup yinelemeleri - setting_auto_play_gif: GIF'leri otomatik oynatt - setting_boost_modal: Boost etmeden önce onay diyaloğu göster + setting_aggregate_reblogs: Zaman çizelgesinde grup boostları + setting_auto_play_gif: Hareketli GIF'leri otomatik oynat + setting_boost_modal: Boostlamadan önce onay iletişim kutusu göster setting_crop_images: Genişletilmemiş tootlardaki resimleri 16x9 olarak kırp setting_default_language: Gönderi dili setting_default_privacy: Gönderi gizliliği - setting_default_sensitive: Her zaman hassas medya olarak işaretle - setting_delete_modal: Bir tootu silmeden önce onay iletişim kutusunu göster - setting_display_media: Medya görünümü + setting_default_sensitive: Medyayı her zaman hassas olarak işaretle + setting_delete_modal: Bir tootu silmeden önce onay iletişim kutusu göster + setting_disable_swiping: Kaydırma hareketlerini devre dışı bırak + setting_display_media: Medya görüntüleme setting_display_media_default: Varsayılan setting_display_media_hide_all: Tümünü gizle setting_display_media_show_all: Tümünü göster setting_expand_spoilers: İçerik uyarılarıyla işaretli tootları her zaman genişlet setting_hide_network: Ağını gizle - setting_noindex: Arama motoru endekslemesini iptal et + setting_noindex: Arama motoru dizinine eklemeyi iptal et setting_reduce_motion: Animasyonlarda hareketi azalt - setting_show_application: Toot göndermek için kullanılan uygulamayı belirt + setting_show_application: Tootları göndermek için kullanılan uygulamayı belirt setting_system_font_ui: Sistemin varsayılan yazı tipini kullan setting_theme: Site teması - setting_trends: Bugünün trendlerini göster - setting_unfollow_modal: Birini takip etmeden önce onay iletişim kutusunu göster - setting_use_blurhash: Gizli ortamlar için renkli gradyen göster + setting_trends: Bugünün gündemini göster + setting_unfollow_modal: Birini takip etmeden önce onay iletişim kutusu göster + setting_use_blurhash: Gizli medya için renkli gradyanlar göster setting_use_pending_items: Yavaş mod severity: Zorluk sign_in_token_attempt: Güvenlik kodu type: Dosya türü - username: Kullanıcı adınız - username_or_email: Kullanıcı adı ya da email - whole_word: Tüm dünya + username: Kullanıcı adı + username_or_email: Kullanıcı adı ya da e-posta + whole_word: Tam sözcük email_domain_block: with_dns_records: Alan adının MX kayıtlarını ve IP'lerini ekleyin featured_tag: - name: Hashtag + name: Etiket interactions: must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle - must_be_following_dm: Takip etmediğiniz kişilerin doğrudan ileti göndermesini engelle + must_be_following_dm: Takip etmediğiniz kişilerden gelen doğrudan mesajları engelle invite: comment: Yorum invite_request: text: Neden katılmak istiyorsun? + ip_block: + comment: Yorum + ip: IP + severities: + no_access: Erişimi engelle + sign_up_requires_approval: Kayıtları sınırla + severity: Kural notification_emails: digest: Özet e-postaları gönder favourite: Biri durumumu favorilerine eklediginde bana e-posta gönder follow: Biri beni takip ettiğinde bana e-posta gönder - follow_request: Biri bana takip isteği gönderdiğinde, bana e-posta gönder - mention: Biri benden bahsettiğinde, bana e-posta gönder + follow_request: Biri bana takip isteği gönderdiğinde bana e-posta gönder + mention: Biri benden bahsettiğinde bana e-posta gönder pending_account: Yeni bir hesap incelemesi gerektiğinde e-posta gönder - reblog: Biri durumumu paylaştığında, bana e-posta gönder + reblog: Biri durumumu boostladığında bana e-posta gönder report: Yeni bir rapor gönderildiğinde e-posta gönder trending_tag: İncelenmemiş bir hashtag trend olduğunda e-posta gönder tag: listable: Bu etiketin aramalarda ve profil dizininde görünmesine izin ver - name: Hashtag + name: Etiket trendable: Bu etiketin trendlerin altında görünmesine izin ver usable: Tootların bu etiketi kullanmasına izin ver 'no': Hayır @@ -185,4 +206,7 @@ tr: required: mark: "*" text: gerekli + title: + sessions: + webauthn: Giriş yapmak için güvenlik anahtarlarınızdan birini kullanın 'yes': Evet diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index a490efed5..adfc07a09 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -55,6 +55,7 @@ uk: domain_allow: domain: Цей домен зможе отримувати дані з цього серверу. Вхідні дані будуть оброблені та збережені email_domain_block: + domain: Це може бути домен, що відображається у поштовій адресі, запис MX для домену чи IP адреси сервера. Вони будуть перевірені при реєстрації користувача, і реєстрація буде відхилена. with_dns_records: Спроба визначення DNS-записів заданого домену буде здійснена, а результати також будуть занесені до чорного списку featured_tag: name: 'Можливо, ви захочете використовувати один з цих:' @@ -66,6 +67,7 @@ uk: text: Це допоможе нам розглянути вашу заяву sessions: otp: Введите код двухфакторной аутентификации или используйте один из Ваших кодов восстановления. + webauthn: Якщо це USB ключ, вставте його і, якщо необхідно, натисніть на нього. tag: name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність user: @@ -187,4 +189,7 @@ uk: required: mark: "*" text: обов'язкове + title: + sessions: + webauthn: Використайте один із ваших ключів безпеки для входу 'yes': Так diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index afa80821b..e5d42bcc6 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -5,16 +5,16 @@ vi: account_alias: acct: Chọn tên_người_dùng@máy chủ của tài khoản lúc trước account_migration: - acct: Chọn tênngườidùng@máy chủ của tài khoản bạn muốn dời sang + acct: Chọn tên_người_dùng@máy chủ của tài khoản bạn muốn dời sang account_warning_preset: text: Bạn có thể sử dụng URL, hashtag và nhắc đến title: Tùy chọn. Không cho người nhận xem admin_account_action: include_statuses: Người dùng sẽ thấy các tút bị kiểm duyệt hoặc cảnh cáo send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ - text_html: Tùy chọn. Bạn có thể sử dụng cảnh cáo cài sẵn để tiết kiệm thời gian + text_html: Tùy chọn. Bạn nên sử dụng cảnh cáo cài sẵn để tiết kiệm thời gian type_html: Chọn làm gì với %{acct} - warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm ghi chú bên dưới cảnh cáo cài sẵn + warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm ghi chú riêng announcement: all_day: Chỉ có khoảng thời gian được đánh dấu mới hiển thị ends_at: Tùy chọn. Thông báo sẽ tự động hủy vào lúc này @@ -25,37 +25,37 @@ vi: autofollow: Những người đăng ký sẽ tự động theo dõi bạn avatar: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không cần thiết theo dõi - context: Một hoặc nhiều bối cảnh nơi bộ lọc nên áp dụng + context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại - digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được bất kỳ tin nhắn cá nhân nào trong lúc vắng mặt - discoverable: Danh sách thành viên là một cách hay để bạn tìm kiếm người bạn muốn theo dõi + digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) + discoverable: Mọi người sẽ có thể tìm thấy bạn dễ dàng hơn email: Bạn sẽ được gửi một email xác nhận - fields: Được tạo tối đa 4 mục hiển thị dưới dạng bảng trên trang cá nhân của bạn + fields: Được phép tạo tối đa 4 mục trên trang cá nhân của bạn header: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px inbox_url: Sao chép URL của relay mà bạn muốn sử dụng - irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả khi bộ lọc có bị xóa + irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy locked: Tự bạn sẽ phê duyệt người theo dõi password: Sử dụng ít nhất 8 ký tự phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút - scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn phạm vi cấp cao nhất, bạn không cần chọn từng phạm vi. - setting_aggregate_reblogs: Ẩn những chia sẻ mới cho những tút đã chia sẻ gần đây (chỉ ảnh hưởng đến các chia sẻ mới) - setting_default_sensitive: Ảnh/video/âm thanh nhạy cảm được ẩn theo mặc định và chỉ hiển thị nếu nhấp chuột + scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi. + setting_aggregate_reblogs: Nếu một tút đã được chia sẻ thì những lượt chia sẻ sau sẽ không hiển thị trên bảng tin nữa + setting_default_sensitive: Nội dung nhạy cảm sẽ mặc định là ẩn và chỉ hiển thị nếu nhấp chuột setting_display_media_default: Làm mờ những thứ được đánh dấu là nhạy cảm - setting_display_media_hide_all: Luôn luôn ẩn + setting_display_media_hide_all: Không hiển thị setting_display_media_show_all: Luôn luôn hiển thị setting_hide_network: Ẩn những người bạn theo dõi và những người theo dõi bạn trên trang cá nhân setting_noindex: Ảnh hưởng đến trang cá nhân và tút của bạn setting_show_application: Tên ứng dụng bạn sử dụng để đăng tút sẽ được hiển thị trong chi tiết bài đăng - setting_use_blurhash: Hình ảnh mờ dựa trên màu sắc của hình ảnh nhạy cảm nhưng sẽ che hết chi tiết + setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm setting_use_pending_items: Ẩn cập nhật bảng tin bằng một cái nhấp chuột thay vì phải cuộn toàn bộ username: Tên người dùng của bạn sẽ là duy nhất trên %{domain} - whole_word: Khi từ khóa hoặc cụm từ chỉ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy + whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: domain: Máy chủ này sẽ tiếp nhận dữ liệu, rồi sau đó xử lý và lưu trữ email_domain_block: - domain: Đây có thể là tên máy chủ của địa chỉ email. Nếu máy chủ đó có vấn đề, đăng ký sẽ bị từ chối. + domain: Đây có thể là tên miền hoặc IP của dịch vụ email. Người dùng của những dịch vụ email này sẽ bị từ chối khi đăng ký. with_dns_records: Nếu DNS có vấn đề, nó sẽ bị đưa vào danh sách cấm featured_tag: name: 'Những hashtag khuyến nghị bạn sử dụng:' @@ -65,8 +65,17 @@ vi: data: Tệp CSV được xuất từ máy chủ Mastodon khác invite_request: text: Điều này sẽ giúp chúng tôi phê duyệt đăng ký của bạn + ip_block: + comment: Tùy chọn. Hãy cho biết lý do bạn chặn IP này. + expires_in: Có thể sẽ có nhiều người khác nhau sử dụng chung một địa chỉ IP. Vì vậy, bạn nên xem xét không nên chặn IP nào đó vĩnh viễn. + ip: Nhập một địa chỉ IPv4 hoặc IPv6. Bạn cũng có thể chặn toàn bộ dãy IP bằng cú pháp CIDR. Hãy cẩn thận đừng chặn nhầm toàn bộ! + severities: + no_access: Chặn truy cập từ tất cả IP này + sign_up_requires_approval: Bạn sẽ phê duyệt những đăng ký mới từ IP này + severity: Chọn hành động nếu nhận được yêu cầu từ IP này sessions: otp: 'Nhập mã xác thực hai yếu tố được tạo bởi ứng dụng điện thoại của bạn hoặc sử dụng một trong các mã khôi phục của bạn:' + webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều. tag: name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn user: @@ -84,15 +93,16 @@ vi: text: Văn bản cài sẵn title: Tựa đề admin_account_action: - include_statuses: Đính kèm những tút bị báo xấu trong e-mail + include_statuses: Đính kèm những tút bị báo cáo trong e-mail send_email_notification: Thông báo cho người này qua email - text: Ghi chú cảnh cáo + text: Ghi chú riêng type: Hành động types: - disable: Vô hiệu hóa đăng nhập - none: Không làm gì cả + disable: Tạm khóa + none: Gửi cảnh cáo + sensitive: Nhạy cảm silence: Tạm ẩn - suspend: Đình chỉ và xóa dữ liệu tài khoản + suspend: Vô hiệu hóa warning_preset_id: Sử dụng cảnh cáo cài sẵn announcement: all_day: Sự kiện diễn ra hằng ngày @@ -107,7 +117,7 @@ vi: chosen_languages: Chọn ngôn ngữ confirm_new_password: Xác nhận mật khẩu mới confirm_password: Xác nhận mật khẩu - context: Bộ lọc bối cảnh + context: Áp dụng current_password: Mật khẩu hiện tại data: Dữ liệu discoverable: Liệt kê tài khoản này trên danh sách thành viên @@ -117,17 +127,17 @@ vi: fields: Metadata header: Ảnh bìa inbox_url: Hộp thư relay - irreversible: Kéo xuống thay vì ẩn + irreversible: Xóa bỏ vĩnh viễn locale: Ngôn ngữ - locked: Đây là tài khoản khóa + locked: Đây là tài khoản riêng tư max_uses: Số lần sử dụng tối đa new_password: Mật khẩu mới note: Tiểu sử otp_attempt: Xác thực hai bước password: Mật khẩu phrase: Từ khóa hoặc cụm từ - setting_advanced_layout: Kích hoạt giao diện web nâng cao - setting_aggregate_reblogs: Lượt chia sẻ trong bảng tin + setting_advanced_layout: Kích hoạt giao diện nhiều cột + setting_aggregate_reblogs: Không hiện lượt chia sẻ trùng setting_auto_play_gif: Tự động phát GIF setting_boost_modal: Yêu cầu xác nhận trước khi chia sẻ tút setting_crop_images: Hiển thị ảnh theo tỉ lệ 16x9 @@ -135,11 +145,12 @@ vi: setting_default_privacy: Kiểu đăng setting_default_sensitive: Luôn đánh dấu ảnh/video là nội dung nhạy cảm setting_delete_modal: Yêu cầu xác nhận trước khi xóa tút + setting_disable_swiping: Vô hiệu hóa vuốt màn hình setting_display_media: Nội dung nhạy cảm setting_display_media_default: Mặc định setting_display_media_hide_all: Ẩn toàn bộ setting_display_media_show_all: Hiện toàn bộ - setting_expand_spoilers: Luôn hiển thị toàn bộ tút (no spoiler) + setting_expand_spoilers: Luôn hiển thị đầy đủ nội dung tút setting_hide_network: Ẩn kết nối của bạn setting_noindex: Không xuất hiện trong công cụ tìm kiếm setting_reduce_motion: Giảm chuyển động ảnh GIF @@ -168,24 +179,34 @@ vi: comment: Bình luận invite_request: text: Tại sao bạn muốn tham gia? + ip_block: + comment: Mô tả + ip: IP + severities: + no_access: Chặn truy cập + sign_up_requires_approval: Giới hạn đăng ký + severity: Mức độ notification_emails: digest: Gửi email định kỳ favourite: Ai đó thích tút của bạn follow: Ai đó theo dõi bạn follow_request: Ai đó yêu cầu theo dõi bạn mention: Ai đó nhắc đến bạn - pending_account: Có tài khoản mới cần phê duyệt + pending_account: Tài khoản mới cần phê duyệt reblog: Ai đó chia sẻ tút của bạn - report: Ai đó gửi báo cáo xấu + report: Ai đó gửi báo cáo kiểm duyệt trending_tag: Một hashtag chưa được phê duyệt đang là xu hướng tag: - listable: Cho phép hashtag này xuất hiện trong tìm kiếm và trên danh sách thành viên + listable: Cho phép hashtag này xuất hiện trong tìm kiếm và trên tiểu sử cá nhân name: Hashtag trendable: Cho phép hashtag này xuất hiện trong xu hướng - usable: Cho phép các tút sử dụng hashtag này + usable: Cho phép sử dụng hashtag này trong tút 'no': Tắt recommended: Khuyến nghị required: mark: "*" text: yêu cầu + title: + sessions: + webauthn: Dùng một trong những khóa bảo mật của bạn để đăng nhập 'yes': Bật diff --git a/config/locales/simple_form.zgh.yml b/config/locales/simple_form.zgh.yml new file mode 100644 index 000000000..827155466 --- /dev/null +++ b/config/locales/simple_form.zgh.yml @@ -0,0 +1 @@ +zgh: diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 6bb1053a8..6d2eb2f49 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -65,8 +65,17 @@ zh-CN: data: 从其他 Mastodon 服务器导出的 CSV 文件 invite_request: text: 这会有助于我们处理你的申请 + ip_block: + comment: 可选。请记住为什么您添加了此规则。 + expires_in: IP 地址是一种有限的资源,它们有时是共享的,并且常常变化。因此,不推荐无限期的 IP 封禁。 + ip: 输入 IPv4 或 IPv6 地址。您可以使用 CIDR 语法屏蔽整个范围。小心不要屏蔽自己! + severities: + no_access: 阻止访问所有资源 + sign_up_requires_approval: 新的注册需要您的批准 + severity: 选择如何处理来自此 IP 的请求。 sessions: otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码: + webauthn: 如果是 USB 密钥,请确保将其插入,如有必要,请点击它。 tag: name: 您只能改变字母的大小写,让它更易读 user: @@ -91,6 +100,7 @@ zh-CN: types: disable: 禁用 none: 忽略 + sensitive: 敏感内容 silence: 静音 suspend: 停用并永久删除账号数据 warning_preset_id: 使用预置警告 @@ -135,6 +145,7 @@ zh-CN: setting_default_privacy: 嘟文默认可见范围 setting_default_sensitive: 总是将我发送的媒体文件标记为敏感内容 setting_delete_modal: 在删除嘟文前询问我 + setting_disable_swiping: 禁用滑动动作 setting_display_media: 媒体展示 setting_display_media_default: 默认 setting_display_media_hide_all: 隐藏全部 @@ -168,6 +179,13 @@ zh-CN: comment: 评论 invite_request: text: 你为什么想要加入? + ip_block: + comment: 备注 + ip: IP 地址 + severities: + no_access: 阻止访问 + sign_up_requires_approval: 限制注册 + severity: 规则 notification_emails: digest: 发送摘要邮件 favourite: 当有用户喜欢了我的嘟文时,发送电子邮件提醒我 @@ -188,4 +206,7 @@ zh-CN: required: mark: "*" text: 必填 + title: + sessions: + webauthn: 使用您的安全密钥登录 'yes': 是 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index fd192fbbc..cc20a067f 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -8,14 +8,19 @@ zh-HK: acct: 指定欲移動至之帳戶的 使用者名稱@站台 account_warning_preset: text: 您可使用嘟文語法,例如網址、「#」標籤和提及功能 + title: 可選,對接收者不可見 admin_account_action: + include_statuses: 用戶將會看到哪些嘟文導致檢舉或警告 send_email_notification: 使用者將收到帳戶發生之事情的解釋 text_html: 選用。您能使用嘟文語法。您可 新增警告預設 來節省時間 type_html: 設定要使用 %{acct} 做的事 warning_preset_id: 選用。您仍可在預設的結尾新增自訂文字 announcement: all_day: 核取後,只會顯示出時間範圍中的日期部分 + ends_at: 可選,公告會在該時間點自動取消發布 scheduled_at: 空白則立即發布公告 + starts_at: 可選,你可以讓公告在指定時間範圍內顯示 + text: 你可以使用嘟文格式,但請注意不要讓公告佔據太多用戶屏幕空間。 defaults: autofollow: 通過邀請網址註冊的用戶將會自動關注你 avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px @@ -24,6 +29,7 @@ zh-HK: current_password: 因安全因素,請輸入目前帳戶的密碼 current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登錄,且收到了私信時發送 + discoverable: 用戶目錄可以讓您的帳戶被更多人知道 email: 您將收到一封確認電子郵件 fields: 個人資料頁可顯示多至 4 個項目 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px @@ -42,8 +48,15 @@ zh-HK: setting_hide_network: 你關注的人和關注你的人將不會在你的個人資料頁上顯示 setting_noindex: 此設定會影響到你的公開個人資料以及文章頁面 setting_show_application: 您用來發嘟文的應用程式將會在您嘟文的詳細檢視顯示 + setting_use_blurhash: 漸變基於隱藏的視覺效果顏色,但會模糊所有細節 + setting_use_pending_items: 關閉自動滾動更新,時間軸會在點擊後更新 username: 您的使用者名稱將在 %{domain} 是獨一無二的 whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用 + domain_allow: + domain: 此域將能從此站獲取數據,而此站發出的數據也會被處理和存儲。 + email_domain_block: + domain: 這裡可以是電郵地址中的域名、域名解析到的MX記錄、或MX紀錄解析到的服務器IP。如果上述資料被封禁,那麼註冊將被拒絕。 + with_dns_records: Mastodon 會嘗試解析所給域名的 DNS 記錄,然後與解析結果一併封禁 featured_tag: name: 您可能想使用其中一個: form_challenge: @@ -63,6 +76,10 @@ zh-HK: fields: name: 標籤 value: 內容 + account_alias: + acct: 處理舊帳戶 + account_migration: + acct: 處理新帳戶 account_warning_preset: text: 預設文字 title: 標題 @@ -113,6 +130,7 @@ zh-HK: setting_aggregate_reblogs: 時間軸中的群組轉嘟 setting_auto_play_gif: 自動播放 GIF setting_boost_modal: 在轉推前詢問我 + setting_crop_images: 把未展開嘟文中的圖片裁剪到 16x9 setting_default_language: 文章語言 setting_default_privacy: 文章預設為 setting_default_sensitive: 預設我的內容為敏感內容 @@ -130,12 +148,16 @@ zh-HK: setting_theme: 網站主題 setting_trends: 顯示本日趨勢 setting_unfollow_modal: 取消關注前跳出詢問我 + setting_use_blurhash: 將隱藏媒體顯示為彩色漸變 setting_use_pending_items: 限速模式 severity: 等級 + sign_in_token_attempt: 安全碼 type: 匯入資料類型 username: 用戶名稱 username_or_email: 用戶名稱或電郵 whole_word: 整個詞彙 + email_domain_block: + with_dns_records: 包括域名的 MX 記錄和 IP 地址 featured_tag: name: "「#」標籤" interactions: @@ -155,6 +177,7 @@ zh-HK: pending_account: 需要審核的新帳戶 reblog: 當有用戶轉推你的文章時,發電郵通知 report: 當提交新檢舉時傳送電子郵件 + trending_tag: 當未審核的話題成為當前熱門時發郵件提醒 tag: listable: 允許此主題標籤在搜尋及個人檔案目錄中顯示 name: 主題標籤 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index e11fb3e69..bc214a444 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -42,7 +42,9 @@ sk: domain: Server reason: 'Dôvod:' rejecting_media: 'Mediálne súbory z týchto serverov nebudú spracované, alebo ukladané, a nebudú z nich zobrazované žiadne náhľady, vyžadujúc ručné prekliknutie priamo až k pôvodnému súboru:' + rejecting_media_title: Triedené médiá silenced: 'Príspevky z týchto serverov budú skryté z verejných osí a z konverzácií, a nebudú vytvorené žiadné oboznámena ohľadom aktivity ich užívateľov, pokiaľ ich nenásleduješ:' + silenced_title: Utíšené servery unavailable_content_html: Vo všeobecnosti, Mastodon ti dovoľuje vidieť obsah, a komunikovať s užívateľmi akéhokoľvek iného serveru v rámci fediversa. Toto sú výnimky, ktoré boli vytvorené na tomto konkrétnom serveri. user_count_after: few: užívateľov @@ -1159,26 +1161,22 @@ sk: formats: default: "%b %d, %R, %H:%M" two_factor_authentication: - code_hint: Pre potvrdenie teraz zadaj kód vygenerovaný pomocou tvojej overovacej aplikácie - description_html: Ak povolíš dvojfázové overovanie, na prihlásenie potom budeš potrebovať svoj telefón, ktorý vygeneruje prístupové kódy, čo musíš zadať. disable: Zakáž - enable: Povoľ enabled: Dvojfázové overovanie je povolené enabled_success: Dvojfázové overovanie úspešne povolené generate_recovery_codes: Vygeneruj zálohové kódy - instructions_html: "Naskenuj tento QR kód do Google Autentikátora, alebo do podobnej TOTP aplikácie pomocou svojho telefónu. Od tejto chvíle bude táto aplikácia pre teba generovať kódy ktoré musíš zadať aby si sa prihlásil/a." lost_recovery_codes: Zálohové kódy ti umožnia dostať sa k svojmu účtu ak stratíš telefón. Pokiaľ si stratila svoje zálohové kódy, môžeš si ich tu znovu vygenerovať. Tvoje staré zálohové kódy budú zneplatnené. - manual_instructions: 'Pokiaľ nemôžeš oskenovať daný QR kód, a potrebuješ ho zadať ručne, tu je tajomstvo v textovom formáte:' recovery_codes: Zálohuj kódy pre obnovu recovery_codes_regenerated: Zálohové kódy boli úspešne zvova vygenerované recovery_instructions_html: Keď hocikedy stratíš prístup k svojmu telefónu, môžeš použiť jeden z prístupových kódov nižšie pre obnovenie prístupu k svojmu účtu. Skladuj tieto prístupové kódy na bezpečnom mieste. Napríklad ich môžeš vytlačiť a uložiť ich spolu s inými dôležitými dokumentami. - setup: Nastav - wrong_code: Zadaný kód bol neplatný! Je serverový čas a čas na zariadení správny? user_mailer: backup_ready: explanation: Vyžiadal/a si si úplnú zálohu svojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie! subject: Tvoj archív je pripravený na stiahnutie title: Odber archívu + sign_in_token: + subject: Prosím potvrď pokus o prihlásenie + title: Pokus o prihlásenie warning: explanation: disable: Pokiaľ je tvoj účet zamrazený, tvoje dáta zostávajú nedoknuté, ale nemôžeš v rámci neho nič robiť, až kým nebude odomknutý. diff --git a/config/locales/sl.yml b/config/locales/sl.yml index a7cf869a4..91466c9c2 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1024,21 +1024,14 @@ sl: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Za potrditev vnesite kodo, ki jo je ustvarila aplikacija za preverjanje pristnosti - description_html: Če omogočite dvofaktorsko preverjanje pristnosti, boste za prijavo morali imeti svoj telefon, s katerim boste ustvarili žetone za vstop. disable: Onemogoči - enable: Omogoči enabled: Dvofaktorsko preverjanje pristnosti je omogočeno enabled_success: Dvofaktorsko preverjanje pristnosti je uspešno omogočeno generate_recovery_codes: Ustvari kode za obnovitev - instructions_html: "Skenirajte QR kodo z Google Authenticator ali s podobno aplikacijo TOTP. Od zdaj naprej bo ta aplikacija ustvarjala žetone, ki jih boste morali vnesti ob prijavi." lost_recovery_codes: Obnovitvene kode vam omogočajo, da ponovno pridobite dostop do svojega računa, če izgubite telefon. Če ste izgubili obnovitvene kode, jih lahko obnovite tukaj. Vaše stare obnovitvene kode bodo neveljavne. - manual_instructions: 'Če ne morete skenirati QR kode in jo morate vnesti ročno, je tu skrivnost v tekstovni obliki:' recovery_codes: Varnostna kopija obnovitvenih kod recovery_codes_regenerated: Obnovitvene kode so bile uspešno regenerirane recovery_instructions_html: Če kdaj izgubite dostop do telefona, lahko uporabite eno od spodnjih obnovitvenih kod, da ponovno pridobite dostop do svojega računa. Shranite obnovitvene kode. Lahko jih natisnete in shranite z drugimi pomembnimi dokumenti. - setup: Nastavi - wrong_code: Vnesena koda je bila neveljavna! Ali sta čas strežnika in čas naprave pravilna? user_mailer: backup_ready: explanation: Zahtevali ste popolno varnostno kopijo računa Mastodon. Zdaj je pripravljen za prenos! diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 33718f1a8..e6e6859dc 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -98,6 +98,7 @@ sq: add_email_domain_block: Vëre përkatësinë email në listë bllokimesh approve: Miratojeni approve_all: Miratojini krejt + approved_msg: U miratua me sukses aplikimi për regjistrim të %{username} are_you_sure: Jeni i sigurt? avatar: Avatar by_domain: Përkatësi @@ -111,8 +112,10 @@ sq: confirm: Ripohojeni confirmed: U ripohua confirming: Po ripohohet + delete: Fshiji të dhënat deleted: U fshi demote: Zhgradoje + destroyed_msg: Të dhënat e %{username} tani janë vënë në radhë për fshirje të menjëhershme disable: Çaktivizoje disable_two_factor_authentication: Çaktivizoni 2FA-në disabled: E çaktivizuar @@ -123,6 +126,7 @@ sq: email_status: Gjendje email-i enable: Aktivizoje enabled: E aktivizuar + enabled_msg: U hoq me sukses ngrirja për llogarinë e %{username} followers: Ndjekës follows: Ndjekje header: Krye @@ -138,6 +142,8 @@ sq: login_status: Gjendje hyrjeje media_attachments: Bashkëngjitje media memorialize: Shndërroje në përkujtimore + memorialized: U shndërrua në përkujtimore + memorialized_msg: "%{username} u kthye me sukses në një llogari përkujtimore" moderation: active: Aktiv all: Krejt @@ -158,10 +164,14 @@ sq: public: Publike push_subscription_expires: Pajtimi PuSH skadon më redownload: Rifresko profilin + redownloaded_msg: Profili i %{username} u rifreskua me sukses prej origjinës reject: Hidhe tej reject_all: Hidhi krejt tej + rejected_msg: Aplikimi për regjistrim i %{username} u hodh poshtë me sukses remove_avatar: Hiqe avatarin remove_header: Hiqe kryen + removed_avatar_msg: U hoq me sukses figura e avatarit të %{username} + removed_header_msg: U hoq me sukses figura e kreut për %{username} resend_confirmation: already_confirmed: Ky përdorues është i ripohuar tashmë send: Ridërgo email ripohimi @@ -178,6 +188,8 @@ sq: search: Kërkoni search_same_email_domain: Të tjerë përdorues me të njëjtën përkatësi email-i search_same_ip: Të tjerë përdorues me të njëjtën IP + sensitive: Rezervat + sensitized: iu vu shenjë si rezervat shared_inbox_url: URL kutie të përbashkët mesazhesh show: created_reports: Ka bërë raportime @@ -187,13 +199,19 @@ sq: statuses: Gjendje subscribe: Pajtomë suspended: Të pezulluara + suspension_irreversible: Të dhënat e kësaj llogarie janë fshirë në mënyrë të pakthyeshme. Mund ta shpezulloni llogarinë, për ta bërë të përdorshme, por kjo s’do të kthejë ndonjë të dhënë që kihej më parë. + suspension_reversible_hint_html: Llogaria është pezulluar, dhe të dhënat do të hiqen plotësisht më %{date}. Deri atëherë, llogaria mund të rikthehet pa ndonjë zarar. Nëse doni të hiqen menjëherë krejt të dhënat e llogarisë, këtë mund ta bëni më poshtë. time_in_queue: Pritje në radhë %{time} title: Llogari unconfirmed_email: Email i paripohuar + undo_sensitized: Hiqja shenjën si rezervat undo_silenced: Zhbëje heshtjen undo_suspension: Zhbëje pezullimin + unsilenced_msg: U hoqën me sukses kufizimet për llogarinë e %{username} unsubscribe: Shpajtohuni + unsuspended_msg: U hoq me sukses pezullimi për llogarinë e %{username} username: Emër përdoruesi + view_domain: Shihni përmbledhjen për përkatësinë warn: Sinjalizoje web: Web whitelisted: Lejuar për federim @@ -208,12 +226,14 @@ sq: create_domain_allow: Krijo Lejim Përkatësie create_domain_block: Krijo Bllokim Përkatësie create_email_domain_block: Krijo Bllokim Përkatësie Email-esh + create_ip_block: Krijoni Rregull IP demote_user: Zhgradoje Përdoruesin destroy_announcement: Fshije Lajmërimin destroy_custom_emoji: Fshi Emotikon Vetjak destroy_domain_allow: Fshi Lejim Përkatësie destroy_domain_block: Fshi Bllokim Përkatësie destroy_email_domain_block: Fshi bllokim përkatësie email-esh + destroy_ip_block: Fshini Rregull IP destroy_status: Fshi Gjendje disable_2fa_user: Çaktivizo 2FA-në disable_custom_emoji: Çaktivizo Emotikon Vetjak @@ -226,9 +246,11 @@ sq: reopen_report: Rihape Raportimin reset_password_user: Ricaktoni Fjalëkalimin resolve_report: Zgjidhe Raportimin + sensitive_account: I vini shenjë si rezervat medias në llogarinë tuaj silence_account: Heshtoje Llogarinë suspend_account: Pezulloje Llogarinë unassigned_report: Hiqe Caktimin e Raportimit + unsensitive_account: Hiqjani shenjën si rezervat medias në llogarinë tuaj unsilence_account: Hiqe Heshtimin e Llogarisë unsuspend_account: Hiqe Pezullimin e Llogarisë update_announcement: Përditëso Lajmërimin @@ -244,12 +266,14 @@ sq: create_domain_allow: "%{name} kaloi në listë lejimesh përkatësinë %{target}" create_domain_block: "%{name} bllokoi përkatësinë %{target}" create_email_domain_block: "%{name} shtoi në listë bllokimesh përkatësinë %{target}" + create_ip_block: "%{name} krijoi rregull për IP-në %{target}" demote_user: "%{name} zhgradoi përdoruesin %{target}" destroy_announcement: "%{name} fshiu lajmërimin për %{target}" destroy_custom_emoji: "%{name} asgjësoi emotikonin %{target}" destroy_domain_allow: "%{name} hoqi përkatësinë %{target} nga listë lejimesh" destroy_domain_block: "%{name} zhbllokoi përkatësinë %{target}" destroy_email_domain_block: "%{name} e shtoi në listë lejimesh përkatësinë %{target}" + destroy_ip_block: "%{name} fshiu rregull për IP-në %{target}" destroy_status: "%{name} hoqi gjendje nga %{target}" disable_2fa_user: "%{name} çaktivizoi domosdoshmëritë për dyfaktorësh për përdoruesin %{target}" disable_custom_emoji: "%{name} çaktivizoi emotikonin %{target}" @@ -262,9 +286,11 @@ sq: reopen_report: "%{name} rihapi raportimin %{target}" reset_password_user: "%{name} ricaktoi fjalëkalimi për përdoruesin %{target}" resolve_report: "%{name} zgjidhi raportimin %{target}" + sensitive_account: "%{name} i vuri shenjë si rezervat medias në %{target}" silence_account: "%{name} heshtoi llogarinë e %{target}" suspend_account: "%{name} pezulloi llogarinë e %{target}" unassigned_report: "%{name} rihapi raportimin %{target}" + unsensitive_account: "%{name} ia hoqi shenjën si rezervat medias në %{target}" unsilence_account: "%{name} hoqi heshtimin për llogarinë %{target}" unsuspend_account: "%{name} hoqi pezullimin për llogarinë e %{target}" update_announcement: "%{name} përditësoi lajmërimin %{target}" @@ -434,6 +460,21 @@ sq: expired: I skaduar title: Filtrim title: Ftesa + ip_blocks: + add_new: Krijoni rregull + created_msg: U shtua me sukses rregull i ri IP + delete: Fshije + expires_in: + '1209600': 2 javë + '15778476': 6 muaj + '2629746': 1 muaj + '31556952': 1 vit + '86400': 1 ditë + '94670856': 3 vjet + new: + title: Krijoni rregull IP të ri + no_ip_block_selected: S’u ndryshua ndonjë rregull IP, ngaqë s’u përzgjodh ndonjë i tillë + title: Rregulla IP pending_accounts: title: Llogari pezull (%{count}) relationships: @@ -681,8 +722,11 @@ sq: prefix_sign_up: Regjistrohuni në Mastodon që sot! suffix: Me një llogari, do të jeni në gjendje të ndiqni persona, përditësime postimesh dhe të shkëmbeni mesazhe me përdorues nga cilido shërbyes Mastodon, etj! didnt_get_confirmation: S’morët udhëzime ripohimi? + dont_have_your_security_key: S’i keni kyçet tuaj të sigurisë? forgot_password: Harruat fjalëkalimin tuaj? invalid_reset_password_token: Token-i i ricaktimit të fjalëkalimit është i pavlefshëm ose ka skaduar. Ju lutemi, kërkoni një të ri. + link_to_otp: Jepni një kod mirëfilltësimi dyfaktorësh prej telefonit tuaj ose një kod rimarrjeje + link_to_webauth: Përdorni pajisjen tuaj të kyçeve të sigurisë login: Hyni logout: Dalje migrate_account: Kaloni në një tjetër llogari @@ -708,6 +752,7 @@ sq: pending: Aplikimi juaj është në pritje të shqyrtimit nga stafi ynë. Kjo mund të dojë ca kohë. Nëse aplikimi juaj miratohet, do të merrni një email. redirecting_to: Llogaria juaj është joaktive, ngaqë aktualisht ridrejton te %{acct}. trouble_logging_in: Probleme me hyrjen? + use_security_key: Përdor kyç sigurie authorize_follow: already_following: E ndiqni tashmë këtë llogari already_requested: Keni dërguar tashmë një kërkesë ndjekjeje te ajo llogari @@ -732,6 +777,7 @@ sq: date: formats: default: "%b %d, %Y" + with_month_name: "%d %B, %Y" datetime: distance_in_words: about_x_hours: "%{count}o" @@ -992,6 +1038,14 @@ sq: quadrillion: K thousand: M trillion: T + otp_authentication: + code_hint: Që të bëhet ripohimi, jepni kodin e prodhuar nga aplikacioni juaj i mirëfilltësimeve + description_html: Nëse aktivizoni mirëfilltësim dyfaktorësh duke përdorur një aplikacion mirëfilltësimesh, hyrja do të dojë që të keni telefonin tuaj, i cili do të prodhojë për ju token-ë hyrjesh. + enable: Aktivizoje + instructions_html: "Skanoje këtë kod QR me Google Authenticator ose një aplikacion të ngjashëm TOTP në telefonin tuaj. Tani e tutje, ai aplikacion do të prodhojë token-ë të cilët do t’ju duhet t’i jepni kur bëni hyrje." + manual_instructions: 'Nëse nuk skanoni kodin QR dhe ju duhet ta jepni dorazi, ja e fshehta si tekst i thjeshtë:' + setup: Ujdiseni + wrong_code: Kodi i dhënë është i pavlefshëm! A janë të sakta koha e shërbyesit dhe koha e pajisjes? pagination: newer: Më të ri next: Pasuesi @@ -1116,6 +1170,7 @@ sq: profile: Profil relationships: Ndjekje dhe ndjekës two_factor_authentication: Mirëfilltësim Dyfaktorësh + webauthn_authentication: Kyçe sigurie spam_check: spam_detected: Ky është një raportim i automatizuar. Është pikasur mesazh i padëshiruar. statuses: @@ -1154,6 +1209,8 @@ sq: other: "%{count} vota" vote: Votë show_more: Shfaq më tepër + show_newer: Shfaq më të reja + show_older: Shfaq më të vjetra show_thread: Shfaq rrjedhën sign_in_to_participate: Bëni hyrjen, që të merrni pjesë te biseda title: '%{name}: "%{quote}"' @@ -1262,21 +1319,20 @@ sq: default: "%d %b, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Që të bëhet ripohimi, jepni kodin e prodhuar nga aplikacioni juaj i mirëfilltësimeve - description_html: Nëse aktivizoni mirëfilltësimin dyfaktorësh, hyrja do të kërkojë të jeni në zotërim të telefonit tuaj, i cili do të prodhojë kod që duhet ta jepni. + add: Shtoje disable: Çaktivizoje - enable: Aktivizoje + disabled_success: Mirëfilltësimi dyfaktorësh u çaktivizua me sukses + edit: Përpunojeni enabled: Mirëfilltësimi dyfaktorësh është i aktivizuar enabled_success: Mirëfilltësimi dyfaktorësh u aktivizua me sukses generate_recovery_codes: Prodho kode rikthimesh - instructions_html: "Skanojeni këtë kod QR me Google Authenticator ose një aplikacion TOTP të ngjashëm në telefonin tuaj. Tani e tutje, ai aplikacion do të prodhojë kode të cilët duhet t’i jepni kur bëni hyrje." lost_recovery_codes: Kodet e rikthimit ju lejojnë të rifitoni hyrje në llogarinë tuaj, nëse humbni telefonin tuaj. Nëse keni humbur kodet tuaj të rikthimit, mund t’i prodhoni sërish këtu. Kodet tuaj të vjetër të rikthimit do të bëhen të pavlefshëm. - manual_instructions: 'Nëse nuk skanoni dot kodin QR dhe ju duhet ta jepni dorazi, ja e fshehta si tekst i thjeshtë:' + methods: Metoda dyfaktorëshi + otp: Aplikacion mirëfilltësimesh recovery_codes: Kopjeruani kode rikthimesh recovery_codes_regenerated: Kodet e rikthimeve u riprodhuan me sukses recovery_instructions_html: Në ndodhtë që të humbni hyrje te telefoni juaj, mund të përdorni një nga kodet e rikthimit më poshtë, që të rifitoni hyrje te llogaria juaj. Mbajini të parrezikuar kodet e rikthimeve. Për shembull, mund t’i shtypni dhe t’i ruani tok me dokumente të tjerë të rëndësishëm. - setup: Ujdiseni - wrong_code: Kodi i dhënë është i pavlefshëm! A janë të sakta koha e shërbyesit dhe koha e pajisjes? + webauthn: Kyçe sigurie user_mailer: backup_ready: explanation: Kërkuat një kopjeruajtje të plotë të llogarisë tuaj Mastodon. E keni gati për shkarkim! @@ -1291,6 +1347,7 @@ sq: warning: explanation: disable: Kur llogaria juaj është e ngrirë, të dhënat në llogarinë tuaj mbeten të paprekura, por s’mund të kryeni ndonjë veprim, para se të shkyçet. + sensitive: Kartelat tuaja media të ngarkuara dhe media e lidhur prej jush do të trajtohet si rezervat. silence: Kur llogaria juaj është e kufizuar, mesazhet tuaj në këtë shërbyes do t’i shohin vetëm personat që ju ndjekin tashmë. dhe mund të liheni jashtë nga lista të ndryshme publike. Megjithatë, të tjerët prapë mund t’ju ndjekin dorazi. suspend: Llogaria juaj është pezulluar, dhe krejt mesazhet tuaja dhe kartelat media të ngarkuara janë hequr në mënyrë të pakthyeshme nga ky shërbyes, dhe nga shërbyesit te të cilët kishit ndjekës. get_in_touch: Që të lidheni me ekipin e %{instance}, mund t’i përgjigjeni këtij email-i. @@ -1299,11 +1356,13 @@ sq: subject: disable: Llogaria juaj %{acct} është ngrirë none: Sinjalizim për %{acct} + sensitive: Medias postuar nga llogaria juaj %{acct} i është vënë shenjë si rezervat silence: Llogaria juaj %{acct} është kufizuar suspend: Llogaria juaj %{acct} është pezulluar title: disable: Llogari e ngrirë none: Sinjalizim + sensitive: Medias tuaj i është vënë shenjë si rezervat silence: Llogari e kufizuar suspend: Llogari e pezulluar welcome: @@ -1324,9 +1383,11 @@ sq: tips: Ndihmëza title: Mirë se vini, %{name}! users: + blocked_email_provider: Ky furnizues shërbimi email nuk lejohet follow_limit_reached: S’mund të ndiqni më tepër se %{limit} persona generic_access_help_html: Problem me hyrjen në llogarinë tuaj? Për asistencë mund të lidheni me %{email} invalid_email: Adresa email është e pavlefshme + invalid_email_mx: Adresa email s’duket se ekziston invalid_otp_token: Kod dyfaktorësh i pavlefshëm invalid_sign_in_token: Kod sigurie i pavlefshëm otp_lost_help_html: Nëse humbi hyrjen te të dy, mund të lidheni me %{email} @@ -1336,3 +1397,20 @@ sq: verification: explanation_html: 'Mundeni të verifikoni veten si i zoti i lidhjeve te tejtëdhënat e profilit tuaj. Për këtë, sajti i lidhur duhet të përmbajë një lidhje për te profili juaj Mastodon. Lidhje për te ajo duhet të ketë një atribut rel="me". Lënda tekst e lidhjes nuk ngre peshë. Ja një shembull:' verification: Verifikim + webauthn_credentials: + add: Shton kyç të ri sigurie + create: + error: Pati një problem me shtimin e kyçeve tuaj të sigurisë. Ju lutemi, riprovoni. + success: Kyçi juaj i sigurisë u shtua me sukses. + delete: Fshije + delete_confirmation: Jeni i sigurt se doni të fshihet ky kyç sigurie? + description_html: Nëse aktivizoni mirëfilltësim me kyç sigurie, hyrja do të kërkojë që të përdorni një nga kyçet tuaj të sigurisë. + destroy: + error: Pati një problem me fshirjen e kyçit tuaj të sigurisë. Ju lutemi, riprovoni. + success: Kyçi juaj i sigurisë u fshi me sukses. + invalid_credential: Kyç i pavlefshëm sigurie + nickname_hint: Jepni nofkën e kyçit tuaj të ri të sigurisë + not_enabled: S’e keni aktivizuar ende WebAuthn-in + not_supported: Ky shfletues nuk mbulon kyçe sigurie + otp_required: Që të përdoren kyçe sigurie, ju lutemi, së pari aktivizoni mirëfilltësimin dyfaktorësh. + registered_on: Regjistruar më %{date} diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 61cea8c21..da8eda86f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -472,21 +472,14 @@ sr-Latn: themes: default: Mastodont two_factor_authentication: - code_hint: Unesite kod sa Vaše aplikacije za proveru identiteta da potvrdite - description_html: Ako uključite dvofaktorsku identifikaciju, moraćete da imate telefon sa sobom da biste mogli da se prijavite. Telefon će onda generisati tokene za Vašu prijavu. disable: Isključi - enable: Uključi enabled: Dvofaktorska identifikacija je uključena enabled_success: Dvofaktorska identifikacija je uspešno uključena generate_recovery_codes: Generiši kodove za oporavak - instructions_html: "Skenirajte ovaj QR kod u Google Authenticator ili nekoj sličnoj TOTP aplikaciji na Vašem telefonu. Od sada, ta aplikacija će Vam generisati tokene koje morate uneti da biste se prijavili." lost_recovery_codes: Kodovi za oporavak Vam omogućavaju da povratite pristup nalogu ako izgubite telefon. Ako izgubite kodove za oporavak, možete ih regenerisati ovde. Od tog trenutka, stari kodovi za oporavak više ne važe. - manual_instructions: 'Ukoliko ne možete da skenirate QR kod i morate ga unesete ručno, evo je ogoljena šifra:' recovery_codes: Napravite rezervu kodova za oporavak recovery_codes_regenerated: Kodovi za oporavak uspešno regenerisani recovery_instructions_html: Ako ikada izgubite pristup telefonu, možete iskoristiti kodove za oporavak date ispod da povratite pristup nalogu. Držite kodove za oporavak na sigurnom. Na primer, odštampajte ih i čuvajte ih sa ostalim važnim dokumentima. - setup: Nameštanje - wrong_code: Uneseni kod nije ispravan! Da li su vremena na serveru i na uređaju ispravna? users: invalid_email: Adresa e-pošte nije ispravna invalid_otp_token: Neispravni dvofaktorski kod diff --git a/config/locales/sr.yml b/config/locales/sr.yml index d7fb6f74d..e26682891 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -757,21 +757,14 @@ sr: default: Мастодон mastodon-light: Мастодон (светло) two_factor_authentication: - code_hint: Да бисте потврдили, унесите код генерисан од стране ваше апликације за потврду идентитета - description_html: Ако укључите двофакторску идентификацију, мораћете да имате телефон са собом да бисте могли да се пријавите. Телефон ће онда генерисати токене за Вашу пријаву. disable: Искључи - enable: Омогући enabled: Двофакторска идентификација је укључена enabled_success: Двофакторска идентификација је успешно укључена generate_recovery_codes: Генериши кодове за опоравак - instructions_html: "Скенирајте овај QR код у Google Authenticator или некој сличној TOTP апликацији на Вашем телефону. Од сада, та апликација ће Вам генерисати токене које морате унети да бисте се пријавили." lost_recovery_codes: Кодови за опоравак Вам омогућавају да повратите приступ налогу ако изгубите телефон. Ако изгубите кодове за опоравак, можете их ре-генерисати овде. Од тог тренутка, стари кодови за опоравак више не важе. - manual_instructions: 'Уколико не можете да скенирате QR код и морате га унесете ручно, ево је огољена шифра:' recovery_codes: Направите резерву кодова за опоравак recovery_codes_regenerated: Кодови за опоравак успешно ре-генерисани recovery_instructions_html: Ако икада изгубите приступ телефону, можете искористити кодове за опоравак дате испод да повратите приступ налогу. Држите кодове за опоравак на сигурном. На пример, одштампајте их и чувајте их са осталим важним документима. - setup: Намештање - wrong_code: Унесени код није исправан! Да ли су времена на серверу и на уређају исправна? user_mailer: backup_ready: explanation: Тражили сте потпуну резервну копију вашег Мастодон рачуна. Спремна за преузимање! diff --git a/config/locales/sv.yml b/config/locales/sv.yml index ebedfb4f9..d14899f3d 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -21,7 +21,9 @@ sv: federation_hint_html: Med ett konto på %{instance} kommer du att kunna följa personer på alla Mastodon-servers och mer än så. get_apps: Prova en mobilapp hosted_on: Mastodon-värd på %{domain} - instance_actor_flash: Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. + instance_actor_flash: 'Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. + +' learn_more: Lär dig mer privacy_policy: Integritetspolicy see_whats_happening: Se vad som händer @@ -41,6 +43,9 @@ sv: suspended: 'Ingen data från dessa serverdatorer kommer bearbetas, lagras eller bytas ut vilket omöjliggör kommunikation med användare från dessa serverdatorer:' suspended_title: Avstängda värddatorer unavailable_content_html: Mastodon låter dig se material från, och interagera med, andra användare i servernätverket. Det är undantag som gjorts på denna serverdator. + user_count_after: + one: användare + other: användare user_count_before: Hem till what_is_mastodon: Vad är Mastodon? accounts: @@ -84,6 +89,7 @@ sv: delete: Ta bort destroyed_msg: Modereringsnotering borttagen utan problem! accounts: + add_email_domain_block: Blockera e-postdomän approve: Godkänn approve_all: Godkänn alla are_you_sure: Är du säker? @@ -164,6 +170,7 @@ sv: staff: Personal user: Användare search: Sök + search_same_email_domain: Andra användare med samma e-postdomän search_same_ip: Annan användare med samma IP-adress shared_inbox_url: Delad inkorg URL show: @@ -185,16 +192,48 @@ sv: web: Webb whitelisted: Vitlistad action_logs: + action_types: + assigned_to_self_report: Tilldela anmälan + change_email_user: Ändra e-post för användare + confirm_user: Bekräfta användare + create_account_warning: Skapa varning + create_announcement: Skapa ett anslag + create_custom_emoji: Skapa egen emoji + create_domain_allow: Skapa tillåten domän + create_domain_block: Skapa blockerad domän + destroy_announcement: Ta bort anslag + destroy_custom_emoji: Ta bort egen emoji + destroy_domain_allow: Ta bort tillåten domän + destroy_domain_block: Ta bort blockerad domän + destroy_status: Ta bort status + disable_2fa_user: Inaktivera 2FA + disable_custom_emoji: Inaktivera egna emojis + disable_user: Inaktivera användare + enable_custom_emoji: Aktivera egna emojis + enable_user: Aktivera användare + memorialize_account: Minnesmärk konto + promote_user: Befordra användare + remove_avatar_user: Ta bort avatar + reset_password_user: Återställ lösenord + resolve_report: Lös rapport + silence_account: Tysta konto + suspend_account: Stäng av konto + unsuspend_account: Återaktivera konto + update_announcement: Uppdatera meddelande + update_custom_emoji: Uppdatera egna emojis + update_status: Uppdatera status actions: assigned_to_self_report: "%{name} tilldelade anmälan %{target} till sig själv" change_email_user: "%{name} bytte e-postadress för användare %{target}" confirm_user: "%{name} bekräftade e-postadress för användare %{target}" create_account_warning: "%{name} sände en varning till %{target}" + create_announcement: "%{name} skapade nytt meddelande %{target}" create_custom_emoji: "%{name} laddade upp ny emoji %{target}" create_domain_allow: "%{name} vitlistade domän %{target}" create_domain_block: "%{name} blockerade domän %{target}" create_email_domain_block: "%{name} svartlistade e-postdomän %{target}" demote_user: "%{name} degraderade användare %{target}" + destroy_announcement: "%{name} raderade meddelanden %{target}" destroy_custom_emoji: "%{name} förstörde emoji %{target}" destroy_domain_allow: "%{name} raderade domän %{target} från vitlistan" destroy_domain_block: "%{name} avblockerade domän %{target}" @@ -219,6 +258,7 @@ sv: update_custom_emoji: "%{name} uppdaterade emoji %{target}" update_status: "%{name} uppdaterade status för %{target}" deleted_status: "(raderad status)" + empty: Inga loggar hittades. title: Revisionslogg announcements: scheduled_for: Schemalagd för %{time} @@ -310,6 +350,7 @@ sv: reject_media: Avvisa mediafiler reject_media_hint: Raderar lokalt lagrade mediefiler och förhindrar möjligheten att ladda ner något i framtiden. Irrelevant för suspensioner severity: + silence: tystad suspend: avstängd show: affected_accounts: @@ -328,6 +369,7 @@ sv: destroyed_msg: E-postdomän har tagits bort från domänblockslistan utan problem domain: Domän empty: För tillfället inga svartlistade mejl. + from_html: från %{domain} new: create: Skapa domän title: Ny E-postdomänblocklistningsinmatning @@ -337,19 +379,29 @@ sv: moderation: all: Alla limited: Begränsad + title: Moderering private_comment: Privat kommentar + public_comment: Offentlig kommentar title: Kända instanser + total_blocked_by_us: Blockerad av oss + total_followed_by_them: Följs av dem + total_followed_by_us: Följs av oss invites: + deactivate_all: Inaktivera alla filter: all: Alla available: Tillgängliga expired: Utgångna title: Filtrera title: Inbjudningar + pending_accounts: + title: Väntande konton (%{count}) relays: delete: Radera disable: Inaktivera + disabled: Inaktiverad enable: Aktivera + enable_hint: När den är aktiverad kommer din server att prenumerera på alla publika toots från detta relay, och kommer att börja skicka serverns publika toots till den. enabled: Aktivera save_and_enable: Spara och aktivera status: Status @@ -361,6 +413,7 @@ sv: are_you_sure: Är du säker? assign_to_self: Tilldela till mig assigned: Tilldelad moderator + by_target_domain: Domän för rapporterat konto comment: none: Ingen created_at: Anmäld @@ -394,10 +447,25 @@ sv: email: Företag E-post username: Användarnamn för kontakt custom_css: + desc_html: Ändra utseendet genom CSS laddat på varje sida title: Anpassad CSS + default_noindex: + desc_html: Påverkar alla användare som inte har ändrat denna inställning själva + title: Undantag användare från sökmotorindexering som standard + domain_blocks: + all: Till alla + disabled: För ingen + title: Visa domän-blockeringar + users: För inloggade lokala användare + domain_blocks_rationale: + title: Visa motiv + enable_bootstrap_timeline_accounts: + title: Aktivera standard följer för nya användare hero: desc_html: Visas på framsidan. Minst 600x100px rekommenderas. Om inte angiven faller den tillbaka på instansens miniatyrbild title: Hjältebild + mascot: + title: Maskot bild peers_api_enabled: desc_html: Domännamn denna instans har påträffat i fediverse title: Publicera lista över upptäckta instanser @@ -508,6 +576,7 @@ sv: email_settings_hint_html: Bekräftelsemeddelandet skickades till %{email}. Om den e-postadressen inte stämmer så kan du ändra den i kontoinställningarna. status: account_status: Kontostatus + redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}. authorize_follow: already_following: Du följer redan detta konto already_requested: Du har redan skickat en vänförfrågan till det kontot @@ -545,6 +614,8 @@ sv: confirm_password: Ange ditt lösenord för att verifiera din identitet proceed: Ta bort konto success_msg: Ditt konto har raderats + warning: + irreversible: Du kan inte återställa eller återaktivera ditt konto domain_validator: invalid_domain: är inte ett giltigt domännamn errors: @@ -599,6 +670,9 @@ sv: validation_errors: one: Något är inte riktigt rätt ännu! Kontrollera felet nedan other: Något är inte riktigt rätt ännu! Kontrollera dom %{count} felen nedan + identity_proofs: + active: Aktiv + inactive: Inaktiv imports: preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. success: Dina uppgifter har laddats upp och kommer nu att behandlas snarast @@ -639,6 +713,7 @@ sv: too_many: Det går inte att bifoga mer än 4 filer migrations: acct: användarnamn@domän av det nya kontot + cancel_explanation: Avstängning av omdirigeringen kommer att återaktivera ditt nuvarande konto, men kommer inte att återskapa följare som har flyttats till det kontot. incoming_migrations: Flyttar från ett annat konto redirected_msg: Ditt konto dirigeras om till %{acct}. moderation: @@ -693,6 +768,7 @@ sv: activity: Kontoaktivitet followers: Följare following: Följer + last_active: Senast aktiv status: Kontostatus remote_follow: acct: Ange ditt användarnamn@domän du vill följa från @@ -873,21 +949,14 @@ sv: default: Mastodon mastodon-light: Mastodon (ljust) two_factor_authentication: - code_hint: Ange koden som genererats av din autentiseringsapp för att bekräfta - description_html: Om du aktiverar tvåfaktorsautentisering kommer inloggningen kräva att du har din telefon tillgänglig, vilket kommer att generera tokens för dig att ange. disable: Inaktivera - enable: Aktivera enabled: Tvåfaktorsautentisering är aktiverad enabled_success: Tvåfaktorsautentisering aktiverad generate_recovery_codes: Generera återställningskoder - instructions_html: "Skanna den här QR-koden i Google Authenticator eller en liknande TOTP-app på din telefon . Från och med nu genererar den appen tokens som du måste ange när du loggar in." lost_recovery_codes: Återställningskoder tillåter dig att få tillgång till ditt konto om du förlorar din telefon. Om du har förlorat dina återställningskoder kan du regenerera dem här. Dina gamla återställningskoder kommer att ogiltigförklaras. - manual_instructions: 'Om du inte kan skanna QR-koden och behöver skriva in den manuellt, här är den hemliga nyckeln i ren text:' recovery_codes: Backup återställningskod recovery_codes_regenerated: Återställningskoder genererades på nytt recovery_instructions_html: Om du någonsin tappar åtkomst till din telefon kan du använda någon av återställningskoderna nedan för att återställa åtkomst till ditt konto. Håll återställningskoderna säkra . Du kan till exempel skriva ut dem och lagra dem med andra viktiga dokument. - setup: Ställ in - wrong_code: Den angivna koden var ogiltig! Är servertid och enhetstid korrekt? user_mailer: backup_ready: explanation: Du begärde en fullständig säkerhetskopiering av ditt Mastodon-konto. Det är nu klart för nedladdning! @@ -910,7 +979,9 @@ sv: tip_mobile_webapp: Om din mobila webbläsare erbjuder dig att lägga till Mastodon på din hemskärm kan du få push-aviseringar. Det fungerar som en inbyggd app på många sätt! title: Välkommen ombord, %{name}! users: + blocked_email_provider: Denna e-postleverantör är inte tillåten invalid_email: E-postadressen är ogiltig + invalid_email_mx: E-postadressen verkar inte finnas invalid_otp_token: Ogiltig tvåfaktorskod otp_lost_help_html: Om du förlorat åtkomst till båda kan du komma i kontakt med %{email} seamless_external_login: Du är inloggad via en extern tjänst, så lösenord och e-postinställningar är inte tillgängliga. diff --git a/config/locales/szl.yml b/config/locales/szl.yml index 54a411c08..4359f4d61 100644 --- a/config/locales/szl.yml +++ b/config/locales/szl.yml @@ -10,11 +10,3 @@ szl: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/ta.yml b/config/locales/ta.yml index fa4c1a87b..18a207715 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -34,6 +34,9 @@ ta: unavailable_content_description: domain: வழங்கி reason: காரணம் + rejecting_media_title: வடிகட்டப்பட்ட மீடியா + silenced_title: அணைக்கபட்ட சர்வர்கள் + suspended_title: இடைநீக்கப்பட்ட சர்வர்கள் user_count_after: one: பயனர் other: பயனர்கள் @@ -222,6 +225,7 @@ ta: unpublished_msg: அறிவிப்பு வெற்றிகரமாகத் திரும்பப் பெறப்பட்டது! updated_msg: அறிவிப்பு வெற்றிகரமாகத் திருத்தப்பட்டது! custom_emojis: + not_permitted: இச்செயலைச் செய்ய உங்களுக்கு அனுமதி இல்லை uncategorized: வகைப்படுத்தப்படாதவை unlist: பட்டியலில் இருந்து அகற்றுக unlisted: பட்டியலிடப்படாத @@ -264,12 +268,18 @@ ta: site_uploads: delete: பதிவேற்றப்பட்டப் படம் அழிக்கப்பட்டது destroyed_msg: பதிவேற்றப்பட்ட வலைதளம் வெற்றிக்கரமாக அழிக்கப்பட்டது! + aliases: + empty: உங்களுக்கு மாற்றுப்பெயர்கள் ஏதும் இல்லை. appearance: localization: body: மாஸ்டோடான் தன்னார்வலர்களால் மொழிபெயர்க்கப்படுகிறது. guide_link_text: அனைவரும் பங்களிக்கலாம். authorize_follow: already_requested: இக்கணக்கைப் பின்தொடரும் கோரிக்கையை நீங்கள் ஏற்கனவே அனுப்பிவிட்டீர்கள் + crypto: + errors: + invalid_key: ஒரு முறையான Ed25519 அல்லது Curve25519 key அல்ல + invalid_signature: ஒரு முறையான Ed25519 அடையாளம் அல்ல date: formats: default: "%b %d, %Y" @@ -288,17 +298,18 @@ ta: empty: தடுப்புகள் ஏதும் இல்லை. generic: delete: நீக்கு - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + identity_proofs: + remove: ஆதாரத்தைக் கணக்கிலிருந்து நீக்கு + removed: ஆதாரம் கணக்கிலிருந்து வெற்றிகரமாக நீக்கப்பட்டது media_attachments: validations: not_ready: பதிவேற்றம் முடிவடையாத கோப்புகளை இணைக்க முடியாது. சிறிது நேரம் கழித்து மீண்டும் முயற்சி செய்யவும்! + migrations: + redirected_msg: உங்கள் கணக்கு இப்பொழுது %{acct}-இற்குத் திருப்பிவிடப்படுகிறது. + move_handler: + carry_blocks_over_text: இப்பயனர் %{acct}-இலிருந்து நகர்ந்துவிட்டார், அக்கணக்கை நீங்கள் தடுத்திருந்தீர்கள். + carry_mutes_over_text: இப்பயனர் %{acct}-இலிருந்து நகர்ந்துவிட்டார், அக்கணக்கை நீங்கள் முடக்கியிருந்தீர்கள். + copy_account_note_text: 'இப்பயனர் %{acct}-லிருந்து நகர்ந்துவிட்டார், இவரைப் பற்றிய உங்கள் முந்தைய குறிப்புகள் இங்கே:' notifications: email_events: மின்னஞ்சல் அறிவிப்புகளுக்கான நிகழ்வுகள் email_events_hint: 'எந்த நிகழ்வுகளுக்கு அறிவிப்புகளைப் பெற வேண்டும் என்று தேர்வு செய்க:' @@ -311,6 +322,21 @@ ta: limit_reached: எதிர்வினைகளுக்கான உச்சவரம்பு எட்டப்பட்டது unrecognized_emoji: அங்கீகரிக்கப்பட்ட ஈமோஜி அல்ல statuses: + attached: + audio: + one: "%{count} ஒலி" + other: "%{count} ஒலிகள்" errors: in_reply_not_found: நீங்கள் மறுமொழி அளிக்க முயலும் பதிவு இருப்பதுபோல் தெரியவில்லை. show_thread: தொடரைக் காட்டு + user_mailer: + sign_in_token: + details: 'அம்முயற்சி பற்றிய விவரங்கள் இங்கே:' + explanation: 'அங்கீகரிக்கப்படாத ஓர் IP முகவரியிலிருந்து உங்கள் கணக்கிற்குள் நுழையும் முயற்சி நடந்துள்ளது. இது நீங்கள்தான் என்றால், தயவுசெய்து பாதுகாப்பு குறியீட்டைக் கீழே உள்ளிடவும்:' + further_actions: 'இது நீங்கள் இல்லை என்றால், தயவுசெய்து உங்கள் கடவுச்சொல்லை மாற்றவும். மேலும், உங்கள் கணக்கிற்கு இரண்டு கட்ட அங்கீகாரத்தை (two-factor authentication) செயலாக்கவும். அதை இங்கு செய்ய இயலும்:' + subject: உள்நுழைய முயற்சித்ததை தயவுசெய்து உறுதிபடுத்தவும் + title: உள்நுழைய முயற்சி + users: + generic_access_help_html: உங்கள் கணக்கை அணுகுவதில் சிக்கலா? உதவிக்கு %{email} -உடன் தொடர்பு கொள்ளவும் + invalid_sign_in_token: தவறான பாதுகாப்புக் குறியீடு + suspicious_sign_in_confirmation: இதற்கு முன்பு இந்த சாதனத்திலிருந்து நீங்கள் உள்நுழைந்ததுபோல் தெரியவில்லை. மேலும், நீங்கள் உள்நுழைந்தே சில காலம் ஆகிறது. எனவே, இது நீங்கள்தானா என்பதை உறுதிப்படுத்த உங்கள் மின்னஞ்சல் முகவரிக்கு ஒரு பாதுகாப்புக் குறியீட்டை அனுப்புகிறோம். diff --git a/config/locales/tai.yml b/config/locales/tai.yml index 27e4a8b78..3b22e9999 100644 --- a/config/locales/tai.yml +++ b/config/locales/tai.yml @@ -10,11 +10,3 @@ tai: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/te.yml b/config/locales/te.yml index 79415b1d1..0028ac325 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -116,11 +116,3 @@ te: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/th.yml b/config/locales/th.yml index 1917a65eb..68ea31d82 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -99,6 +99,7 @@ th: confirm: ยืนยัน confirmed: ยืนยันแล้ว confirming: กำลังยืนยัน + delete: ลบข้อมูล deleted: ลบแล้ว demote: ลดขั้น disable: ปิดใช้งาน @@ -179,6 +180,7 @@ th: undo_silenced: เลิกทำการทำให้เงียบ undo_suspension: เลิกทำการระงับ unsubscribe: เลิกบอกรับ + unsuspended_msg: เลิกระงับบัญชีของ %{username} สำเร็จ username: ชื่อผู้ใช้ warn: เตือน web: เว็บ @@ -194,12 +196,14 @@ th: create_domain_allow: สร้างการอนุญาตโดเมน create_domain_block: สร้างการปิดกั้นโดเมน create_email_domain_block: สร้างการปิดกั้นโดเมนอีเมล + create_ip_block: สร้างกฎ IP demote_user: ลดขั้นผู้ใช้ destroy_announcement: ลบประกาศ destroy_custom_emoji: ลบอีโมจิที่กำหนดเอง destroy_domain_allow: ลบการอนุญาตโดเมน destroy_domain_block: ลบการปิดกั้นโดเมน destroy_email_domain_block: ลบการปิดกั้นโดเมนอีเมล + destroy_ip_block: ลบกฎ IP destroy_status: ลบสถานะ disable_2fa_user: ปิดใช้งาน 2FA disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง @@ -212,9 +216,11 @@ th: reopen_report: เปิดรายงานใหม่ reset_password_user: ตั้งรหัสผ่านใหม่ resolve_report: แก้ปัญหารายงาน + sensitive_account: ทำเครื่องหมายสื่อในบัญชีของคุณว่าละเอียดอ่อน silence_account: ทำให้บัญชีเงียบ suspend_account: ระงับบัญชี unassigned_report: เลิกมอบหมายรายงาน + unsensitive_account: เลิกทำเครื่องหมายสื่อในบัญชีของคุณว่าละเอียดอ่อน unsilence_account: เลิกทำให้บัญชีเงียบ unsuspend_account: เลิกระงับบัญชี update_announcement: อัปเดตประกาศ @@ -230,12 +236,14 @@ th: create_domain_allow: "%{name} ได้อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" create_domain_block: "%{name} ได้ปิดกั้นโดเมน %{target}" create_email_domain_block: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}" + create_ip_block: "%{name} ได้สร้างกฎสำหรับ IP %{target}" demote_user: "%{name} ได้ลดขั้นผู้ใช้ %{target}" destroy_announcement: "%{name} ได้ลบประกาศ %{target}" destroy_custom_emoji: "%{name} ได้ทำลายอีโมจิ %{target}" destroy_domain_allow: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" destroy_domain_block: "%{name} ได้เลิกปิดกั้นโดเมน %{target}" destroy_email_domain_block: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}" + destroy_ip_block: "%{name} ได้ลบกฎสำหรับ IP %{target}" destroy_status: "%{name} ได้เอาสถานะโดย %{target} ออก" disable_2fa_user: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" @@ -246,10 +254,13 @@ th: promote_user: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}" remove_avatar_user: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก" reopen_report: "%{name} ได้เปิดรายงาน %{target} ใหม่" + reset_password_user: "%{name} ได้ตั้งรหัสผ่านของผู้ใช้ %{target} ใหม่" resolve_report: "%{name} ได้แก้ปัญหารายงาน %{target}" + sensitive_account: "%{name} ได้ทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน" silence_account: "%{name} ได้ทำให้บัญชีของ %{target} เงียบ" suspend_account: "%{name} ได้ระงับบัญชีของ %{target}" unassigned_report: "%{name} ได้เลิกมอบหมายรายงาน %{target}" + unsensitive_account: "%{name} ได้เลิกทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน" unsilence_account: "%{name} ได้เลิกทำให้บัญชีของ %{target} เงียบ" unsuspend_account: "%{name} ได้เลิกระงับบัญชีของ %{target}" update_announcement: "%{name} ได้อัปเดตประกาศ %{target}" @@ -278,7 +289,9 @@ th: custom_emojis: assign_category: กำหนดหมวดหมู่ by_domain: โดเมน + copied_msg: สร้างสำเนาของอีโมจิในเซิร์ฟเวอร์สำเร็จ copy: คัดลอก + copy_failed_msg: ไม่สามารถสร้างสำเนาของอีโมจินั้นในเซิร์ฟเวอร์ create_new_category: สร้างหมวดหมู่ใหม่ created_msg: สร้างอีโมจิสำเร็จ! delete: ลบ @@ -396,6 +409,10 @@ th: private_comment: ความคิดเห็นส่วนตัว public_comment: ความคิดเห็นสาธารณะ title: การติดต่อกับภายนอก + total_blocked_by_us: ปิดกั้นโดยเรา + total_followed_by_them: ติดตามโดยเขา + total_followed_by_us: ติดตามโดยเรา + total_reported: รายงานเกี่ยวกับเขา total_storage: ไฟล์แนบสื่อ invites: deactivate_all: ปิดใช้งานทั้งหมด @@ -405,6 +422,20 @@ th: expired: หมดอายุแล้ว title: ตัวกรอง title: คำเชิญ + ip_blocks: + add_new: สร้างกฎ + created_msg: เพิ่มกฎ IP ใหม่สำเร็จ + delete: ลบ + expires_in: + '1209600': 2 สัปดาห์ + '15778476': 6 เดือน + '2629746': 1 เดือน + '31556952': 1 ปี + '86400': 1 วัน + '94670856': 3 ปี + new: + title: สร้างกฎ IP ใหม่ + title: กฎ IP pending_accounts: title: บัญชีที่รอดำเนินการ (%{count}) relationships: @@ -462,6 +493,7 @@ th: email: อีเมลธุรกิจ username: ชื่อผู้ใช้ในการติดต่อ custom_css: + desc_html: ปรับเปลี่ยนรูปลักษณ์ด้วย CSS ที่โหลดในทุกหน้า title: CSS ที่กำหนดเอง default_noindex: desc_html: มีผลต่อผู้ใช้ทั้งหมดที่ไม่ได้เปลี่ยนการตั้งค่านี้ด้วยตนเอง @@ -475,8 +507,10 @@ th: enable_bootstrap_timeline_accounts: title: เปิดใช้งานการติดตามเริ่มต้นสำหรับผู้ใช้ใหม่ hero: + desc_html: แสดงในหน้าแรก อย่างน้อย 600x100px ที่แนะนำ เมื่อไม่ได้ตั้ง กลับไปใช้ภาพขนาดย่อเซิร์ฟเวอร์ title: ภาพแบนเนอร์หลัก mascot: + desc_html: แสดงในหลายหน้า อย่างน้อย 293×205px ที่แนะนำ เมื่อไม่ได้ตั้ง กลับไปใช้มาสคอตเริ่มต้น title: ภาพมาสคอต peers_api_enabled: desc_html: ชื่อโดเมนที่เซิร์ฟเวอร์นี้ได้พบในเฟดิเวิร์ส @@ -518,6 +552,7 @@ th: title: เงื่อนไขการให้บริการที่กำหนดเอง site_title: ชื่อเซิร์ฟเวอร์ thumbnail: + desc_html: ใช้สำหรับตัวอย่างผ่าน OpenGraph และ API 1200x630px ที่แนะนำ title: ภาพขนาดย่อเซิร์ฟเวอร์ timeline_preview: desc_html: แสดงลิงก์ไปยังเส้นเวลาสาธารณะในหน้าเริ่มต้นและอนุญาตการเข้าถึง API ไปยังเส้นเวลาสาธารณะโดยไม่มีการรับรองความถูกต้อง @@ -570,6 +605,7 @@ th: subject: รายงานใหม่สำหรับ %{instance} (#%{id}) aliases: add_new: สร้างนามแฝง + deleted_msg: เอานามแฝงออกสำเร็จ จะไม่สามารถย้ายจากบัญชีนั้นไปยังบัญชีนี้ได้อีกต่อไป empty: คุณไม่มีนามแฝง remove: เลิกเชื่อมโยงนามแฝง appearance: @@ -602,14 +638,20 @@ th: checkbox_agreement_html: ฉันยอมรับ กฎของเซิร์ฟเวอร์ และ เงื่อนไขการให้บริการ checkbox_agreement_without_rules_html: ฉันยอมรับ เงื่อนไขการให้บริการ delete_account: ลบบัญชี + delete_account_html: หากคุณต้องการลบบัญชีของคุณ คุณสามารถ ดำเนินการต่อที่นี่ คุณจะได้รับการถามเพื่อการยืนยัน description: prefix_invited_by_user: "@%{name} เชิญคุณเข้าร่วมเซิร์ฟเวอร์ Mastodon นี้!" prefix_sign_up: ลงทะเบียนใน Mastodon วันนี้! didnt_get_confirmation: ไม่ได้รับคำแนะนำการยืนยัน? + dont_have_your_security_key: ไม่มีกุญแจความปลอดภัยของคุณ? forgot_password: ลืมรหัสผ่านของคุณ? + invalid_reset_password_token: โทเคนการตั้งรหัสผ่านใหม่ไม่ถูกต้องหรือหมดอายุแล้ว โปรดขอโทเคนใหม่ + link_to_otp: ป้อนรหัสสองปัจจัยจากโทรศัพท์ของคุณหรือรหัสกู้คืน + link_to_webauth: ใช้อุปกรณ์กุญแจความปลอดภัยของคุณ login: เข้าสู่ระบบ logout: ออกจากระบบ migrate_account: ย้ายไปยังบัญชีอื่น + migrate_account_html: หากคุณต้องการเปลี่ยนเส้นทางบัญชีนี้ไปยังบัญชีอื่น คุณสามารถ กำหนดค่าบัญชีที่นี่ or_log_in_with: หรือเข้าสู่ระบบด้วย providers: cas: CAS @@ -627,8 +669,10 @@ th: confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์ functional: บัญชีของคุณทำงานได้อย่างเต็มที่ trouble_logging_in: มีปัญหาในการเข้าสู่ระบบ? + use_security_key: ใช้กุญแจความปลอดภัย authorize_follow: already_following: คุณกำลังติดตามบัญชีนี้อยู่แล้ว + already_requested: คุณได้ส่งคำขอติดตามไปยังบัญชีนั้นไปแล้ว follow: ติดตาม follow_request: 'คุณได้ส่งคำขอติดตามไปยัง:' following: 'สำเร็จ! คุณกำลังติดตาม:' @@ -648,6 +692,7 @@ th: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count} ชั่วโมง" @@ -781,6 +826,7 @@ th: max_uses: other: "%{count} การใช้" max_uses_prompt: ไม่มีขีดจำกัด + prompt: สร้างและแบ่งปันลิงก์กับผู้อื่นเพื่ออนุญาตให้เข้าถึงเซิร์ฟเวอร์นี้ table: expires_at: หมดอายุเมื่อ uses: การใช้ @@ -803,6 +849,8 @@ th: redirected_msg: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct} redirecting_to: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct} set_redirect: ตั้งการเปลี่ยนเส้นทาง + warning: + followers: การกระทำนี้จะย้ายผู้ติดตามทั้งหมดจากบัญชีปัจจุบันไปยังบัญชีใหม่ moderation: title: การควบคุม move_handler: @@ -844,6 +892,10 @@ th: email_events: เหตุการณ์สำหรับการแจ้งเตือนอีเมล email_events_hint: 'เลือกเหตุการณ์ที่คุณต้องการรับการแจ้งเตือน:' other_settings: การตั้งค่าการแจ้งเตือนอื่น ๆ + otp_authentication: + code_hint: ป้อนรหัสที่สร้างโดยแอปตัวรับรองความถูกต้องของคุณเพื่อยืนยัน + enable: เปิดใช้งาน + wrong_code: รหัสที่ป้อนไม่ถูกต้อง! เวลาเซิร์ฟเวอร์และเวลาอุปกรณ์ถูกต้องหรือไม่? pagination: newer: ใหม่กว่า next: ถัดไป @@ -852,8 +904,9 @@ th: truncate: "…" polls: errors: - already_voted: คุณได้ลงคะแนนในการสำรวจความคิดเห็นนี้อยู่แล้ว + already_voted: คุณได้ลงคะแนนในการสำรวจความคิดเห็นนี้ไปแล้ว duplicate_options: มีรายการที่ซ้ำกัน + expired: การสำรวจความคิดเห็นได้สิ้นสุดไปแล้ว invalid_choice: ไม่มีตัวเลือกการลงคะแนนที่เลือกอยู่ too_few_options: ต้องมีมากกว่าหนึ่งรายการ too_many_options: ไม่สามารถมีมากกว่า %{max} รายการ @@ -957,6 +1010,7 @@ th: profile: โปรไฟล์ relationships: การติดตามและผู้ติดตาม two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย + webauthn_authentication: กุญแจความปลอดภัย spam_check: spam_detected: นี่คือรายงานแบบอัตโนมัติ ตรวจพบสแปม statuses: @@ -985,12 +1039,14 @@ th: other: "%{count} การลงคะแนน" vote: ลงคะแนน show_more: แสดงเพิ่มเติม + show_newer: แสดงที่ใหม่กว่า + show_older: แสดงที่เก่ากว่า show_thread: แสดงกระทู้ sign_in_to_participate: ลงชื่อเข้าเพื่อเข้าร่วมการสนทนา title: '%{name}: "%{quote}"' visibilities: private: ผู้ติดตามเท่านั้น - private_long: แสดงต่อผู้ติดตามเท่านั้น + private_long: แสดงแก่ผู้ติดตามเท่านั้น public: สาธารณะ public_long: ทุกคนสามารถเห็น unlisted: ไม่อยู่ในรายการ @@ -1011,17 +1067,25 @@ th: default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: ป้อนรหัสที่สร้างโดยแอปตัวรับรองความถูกต้องของคุณเพื่อยืนยัน + add: เพิ่ม disable: ปิดใช้งาน - enable: เปิดใช้งาน + disabled_success: ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำเร็จ + edit: แก้ไข enabled: เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว enabled_success: เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำเร็จ generate_recovery_codes: สร้างรหัสกู้คืน + methods: วิธีการสองปัจจัย + otp: แอปตัวรับรองความถูกต้อง recovery_codes: รหัสกู้คืนข้อมูลสำรอง recovery_codes_regenerated: สร้างรหัสกู้คืนใหม่สำเร็จ - setup: ตั้งค่า - wrong_code: รหัสที่ป้อนไม่ถูกต้อง! เวลาเซิร์ฟเวอร์และเวลาอุปกรณ์ถูกต้องหรือไม่? + webauthn: กุญแจความปลอดภัย user_mailer: + sign_in_token: + details: 'นี่คือรายละเอียดของความพยายาม:' + explanation: 'เราตรวจพบความพยายามลงชื่อเข้าบัญชีของคุณจากที่อยู่ IP ที่ไม่รู้จัก หากนี่คือคุณ โปรดป้อนรหัสความปลอดภัยด้านล่างในหน้าตรวจสอบการลงชื่อเข้า:' + further_actions: 'หากนี่ไม่ใช่คุณ โปรดเปลี่ยนรหัสผ่านของคุณและเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยในบัญชีของคุณ คุณสามารถทำได้ที่นี่:' + subject: โปรดยืนยันการลงชื่อเข้าที่พยายาม + title: ความพยายามลงชื่อเข้า warning: review_server_policies: ตรวจทานนโยบายของเซิร์ฟเวอร์ subject: @@ -1036,11 +1100,27 @@ th: tips: เคล็ดลับ title: ยินดีต้อนรับ %{name}! users: + blocked_email_provider: ไม่อนุญาตผู้ให้บริการอีเมลนี้ follow_limit_reached: คุณไม่สามารถติดตามมากกว่า %{limit} คน invalid_email: ที่อยู่อีเมลไม่ถูกต้อง + invalid_email_mx: ดูเหมือนว่าไม่มีที่อยู่อีเมลอยู่ invalid_otp_token: รหัสสองปัจจัยไม่ถูกต้อง invalid_sign_in_token: รหัสความปลอดภัยไม่ถูกต้อง seamless_external_login: คุณได้เข้าสู่ระบบผ่านบริการภายนอก ดังนั้นจึงไม่มีการตั้งค่ารหัสผ่านและอีเมล signed_in_as: 'ลงชื่อเข้าเป็น:' verification: verification: การตรวจสอบ + webauthn_credentials: + add: เพิ่มกุญแจความปลอดภัยใหม่ + create: + error: มีปัญหาในการเพิ่มกุญแจความปลอดภัยของคุณ โปรดลองอีกครั้ง + success: เพิ่มกุญแจความปลอดภัยของคุณสำเร็จ + delete: ลบ + delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบกุญแจความปลอดภัยนี้? + destroy: + error: มีปัญหาในการลบกุญแจความปลอดภัยของคุณ โปรดลองอีกครั้ง + success: ลบกุญแจความปลอดภัยของคุณสำเร็จ + invalid_credential: กุญแจความปลอดภัยไม่ถูกต้อง + not_enabled: คุณยังไม่ได้เปิดใช้งาน WebAuthn + not_supported: เบราว์เซอร์นี้ไม่รองรับกุญแจความปลอดภัย + registered_on: ลงทะเบียนเมื่อ %{date} diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 650166781..e9be3554d 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,8 +1,7 @@ ---- tr: about: - about_hashtag_html: Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. - about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. + about_hashtag_html: 'Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz.' + about_mastodon_html: 'Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir.' about_this: Bu sunucu hakkında active_count_after: etkin active_footnote: Aylık Aktif Kullanıcılar (AAK) @@ -18,7 +17,7 @@ tr: contact_unavailable: Yok discover_users: Kullanıcıları keşfet documentation: Belgeler - federation_hint_html: "%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz." + federation_hint_html: '%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz.' get_apps: Bir mobil uygulamayı deneyin hosted_on: Mastodon %{domain} üzerinde barındırılıyor instance_actor_flash: | @@ -42,7 +41,9 @@ tr: rejecting_media: 'Bu sunuculardaki medya dosyaları işlenmeyecek ya da saklanmayacak, ve hiçbir küçük resim gösterilmeyecektir, dolayısıyla orjinal dosyaya manuel tıklama gerekecektir:' rejecting_media_title: Filtrelenmiş medya silenced: 'Bu sunuculardan gelen gönderiler genel zaman çizelgelerinde ve konuşmalarda gizlenecek ve siz onları takip etmediğiniz sürece, kullanıcıların etkileşimlerinden hiçbir bildirim alınmayacaktır:' + silenced_title: Susturulmuş sunucular suspended: 'Bu sunuculardaki hiçbir veri işlenmeyecek, saklanmayacak veya değiş tokuş edilmeyecektir, dolayısıyla bu sunuculardaki kullanıcılarla herhangi bir etkileşim ya da iletişim imkansız olacaktır:' + suspended_title: Askıya alınan sunucular unavailable_content_html: Mastodon, genel olarak fediverse'teki herhangi bir sunucudan içerik görüntülemenize ve kullanıcılarıyla etkileşim kurmanıza izin verir. Bunlar, bu sunucuda yapılmış olan istisnalardır. user_count_after: one: kullanıcı @@ -58,7 +59,7 @@ tr: one: Takipçi other: Takipçi following: Takip ettikleri - joined: "%{date} tarihinde katıldı" + joined: '%{date} tarihinde katıldı' last_active: son aktivite link_verified_on: Bu bağlantının mülkiyeti %{date} tarihinde kontrol edildi media: Medya @@ -86,15 +87,17 @@ tr: admin: account_actions: action: Eylemi gerçekleştir - title: "%{acct} üzerinde denetleme eylemi gerçekleştir" + title: '%{acct} üzerinde denetleme eylemi gerçekleştir' account_moderation_notes: create: Not bırakın created_msg: Denetim notu başarıyla oluşturuldu! delete: Sil destroyed_msg: Denetim notu başarıyla yok edildi! accounts: + add_email_domain_block: E-posta alan adını engelle approve: Onayla approve_all: Tümünü onayla + approved_msg: '%{username} adlı kullanıcının kayıt başvurusu başarıyla onaylandı' are_you_sure: Emin misiniz? avatar: Avatar by_domain: Sunucu @@ -104,12 +107,14 @@ tr: label: E-postayı değiştir new_email: Yeni e-posta submit: E-postayı değiştir - title: "%{username} için e-postayı değiştir" + title: '%{username} için e-postayı değiştir' confirm: Onayla confirmed: Onaylandı confirming: Onaylama + delete: Veriyi sil deleted: Silinen demote: Düşür + destroyed_msg: "%{username} verilerinin hemen silinmesi için kuyruğa alındı" disable: Devre dışı disable_two_factor_authentication: 2AD kapat disabled: Kapalı @@ -120,6 +125,7 @@ tr: email_status: E-posta durumu enable: Etkinleştir enabled: Etkin + enabled_msg: '%{username} hesabı başarıyla çözüldü' followers: Takipçiler follows: Takip edilen header: Üstbilgi @@ -135,6 +141,8 @@ tr: login_status: Giriş durumu media_attachments: Medya ekleri memorialize: Bir hatıraya dön + memorialized: Anıtlaştırıldı + memorialized_msg: '%{username} hesabı başarıyla anıt hesabına dönüştürüldü' moderation: active: Etkin all: Hepsi @@ -155,10 +163,14 @@ tr: public: Herkese açık push_subscription_expires: PuSH aboneliği dolumu redownload: Profili yenile + redownloaded_msg: '%{username} kullanıcısının profili kökenden başarıyla yenilendi' reject: Reddet reject_all: Tümünü reddet + rejected_msg: '%{username} adlı kullanıcının kayıt başvurusu başarıyla reddedildi' remove_avatar: Avatarı kaldır remove_header: Üstbilgiyi kaldır + removed_avatar_msg: '%{username} hesabının avatar resmi başarıyla kaldırıldı' + removed_header_msg: '%{username} hesabının başlık resmi başarıyla kaldırıldı' resend_confirmation: already_confirmed: Bu kullanıcı zaten onaylandı send: Doğrulama epostasını yeniden gönder @@ -173,7 +185,10 @@ tr: staff: Personel user: Kullanıcı search: Ara + search_same_email_domain: Aynı e-posta alan adına sahip diğer kullanıcılar search_same_ip: Aynı IP adresine sahip diğer kullanıcılar + sensitive: Hassas + sensitized: hassas olarak işaretlendi shared_inbox_url: Paylaşılan gelen kutusu bağlantısı show: created_reports: Yapılan şikayetler @@ -183,23 +198,63 @@ tr: statuses: Durumlar subscribe: Abone ol suspended: Askıya alındı - time_in_queue: "%{time} kuyruğunda bekliyor" + suspension_irreversible: Bu hesabın verileri geri dönüşümsüz olarak silindi. Hesabı kullanılabilir hale getirmek için hesabın askıya alınmasını kaldırabilirsiniz, ancak daha önce sahip olduğu herhangi bir veri kurtarılamaz. + suspension_reversible_hint_html: Hesap askıya alındı ve veriler %{date} tarihinde tamamen kaldırılacak. O zamana kadar, hesap herhangi bir olumsuz etki olmaksızın geri yüklenebilir. Hesabın tüm verilerini hemen kaldırmak isterseniz, bunu aşağıdan yapabilirsiniz. + time_in_queue: '%{time} kuyruğunda bekliyor' title: Hesaplar unconfirmed_email: Onaylanmamış e-posta + undo_sensitized: Hassaslığı geri al undo_silenced: Susturmayı geri al undo_suspension: Uzaklaştırmayı geri al + unsilenced_msg: '%{username} hesabı başarıyla sınırsız yapıldı' unsubscribe: Abonelikten çık + unsuspended_msg: '%{username} hesabının askıya alınması başarıyla kaldırıldı' username: Kullanıcı adı + view_domain: Alan adı için özeti görüntüleyin warn: Uyar web: Web whitelisted: Beyaz listede action_logs: action_types: + assigned_to_self_report: Raporu Ata change_email_user: Kullanıcı için e-postayı değiştir confirm_user: Kullanıcıyı Onayla + create_account_warning: Uyarı Oluştur create_announcement: Duyuru Oluştur create_custom_emoji: Özel İfade Oluştur + create_domain_allow: İzin Verilen Alan Adı Oluştur + create_domain_block: Engellenen Alan Adı Oluştur + create_email_domain_block: E-Posta Alan Adı Engeli Oluştur + create_ip_block: IP kuralı oluştur + demote_user: Kullanıcıyı Düşür + destroy_announcement: Duyuru Sil + destroy_custom_emoji: Özel İfadeyi Sil + destroy_domain_allow: İzin Verilen Alan Adını Sil + destroy_domain_block: Engellenen Alan Adını Sil + destroy_email_domain_block: E-posta alan adı engelini sil + destroy_ip_block: IP kuralını sil destroy_status: Durumu Sil + disable_2fa_user: 2 Adımlı Doğrulamayı Kapat + disable_custom_emoji: Özel İfadeyi Engelle + disable_user: Kullanıcıyı Engelle + enable_custom_emoji: Özel İfadeyi Etkinleştir + enable_user: Kullanıcıyı Etkinleştir + memorialize_account: Hesabı Hatırlat + promote_user: Kullanıcıyı Yükselt + remove_avatar_user: Avatarı Kaldır + reopen_report: Şikayeti Tekrar Aç + reset_password_user: Parolayı Sıfırla + resolve_report: Şikayeti Çöz + sensitive_account: Hesabınızdaki medyayı hassas olarak işaretleyin + silence_account: Hesabı Sustur + suspend_account: Hesabı Askıya Al + unassigned_report: Rapor Atamasını Kaldır + unsensitive_account: Hesabınızdaki medyayı hassas olarak işaretlemeyin + unsilence_account: Hesabın Sesini Aç + unsuspend_account: Hesabı Askıdan Kaldır + update_announcement: Duyuruyu Güncelle + update_custom_emoji: Özel İfadeyi Güncelle + update_status: Durumu Güncelle actions: assigned_to_self_report: "%{name} kendilerine %{target} adlı raporu verdi" change_email_user: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi" @@ -210,12 +265,14 @@ tr: create_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeye alındı" create_domain_block: "%{target} alanı, %{name} tarafından engellendi" create_email_domain_block: "%{target} e-posta alanı, %{name} tarafından kara listeye alınmış" + create_ip_block: "%{name}, IP %{target} için kural oluşturdu" demote_user: "%{name} %{target} kullanıcısını düşürdü" destroy_announcement: "%{name}, %{target} duyurusunu sildi" destroy_custom_emoji: "%{target} emoji, %{name} tarafından kaldırıldı" destroy_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeden çıkartıldı" destroy_domain_block: "%{target} alan adının engeli %{name} tarafından kaldırıldı" destroy_email_domain_block: "%{target} e-posta sunucusu, %{name} tarafından beyaz listeye alındı" + destroy_ip_block: "%{name}, IP %{target} için kuralı sildi" destroy_status: "%{name}, %{target} kullanıcısının durumunu kaldırdı" disable_2fa_user: "%{name}, %{target} kullanıcısı için iki adım gereksinimini kapattı" disable_custom_emoji: "%{target} emoji, %{name} tarafından devre dışı bırakıldı" @@ -228,9 +285,11 @@ tr: reopen_report: "%{name} %{target} şikayetini yeniden açtı" reset_password_user: "%{name} %{target} kullanıcısının parolasını resetledi" resolve_report: "%{name} %{target} şikayetini çözdü" + sensitive_account: "%{name}, %{target} kişisinin medyasını hassas olarak işaretledi" silence_account: "%{name} %{target}'in hesabını susturdu" suspend_account: "%{name} %{target}'in hesabını uzaklaştırdı" unassigned_report: "%{name} %{target} şikayetinin atamasını geri aldı" + unsensitive_account: "%{name}, %{target} kişisinin medyasını hassas olarak işaretlemedi" unsilence_account: "%{name} %{target}'in hesabının susturmasını kaldırdı" unsuspend_account: "%{name} %{target}'in hesabının uzaklaştırmasını kaldırdı" update_announcement: "%{name}, %{target} duyurusunu güncelledi" @@ -251,7 +310,7 @@ tr: create: Duyuru oluştur title: Yeni duyuru published_msg: Duyuru başarıyla yayınlandı! - scheduled_for: "%{time} için zamanlandı" + scheduled_for: '%{time} için zamanlandı' scheduled_msg: Duyuru yayınlanmak üzere planlandı! title: Duyurular unpublished_msg: Duyuru başarıyla yayından kaldırıldı! @@ -278,6 +337,7 @@ tr: listed: Listelenen new: title: Yeni özel emoji ekle + not_permitted: Bu işlemi gerçekleştirme izniniz yok overwrite: Üzerine yaz shortcode: Kısa kod shortcode_hint: En az 2 karakter, sadece alfanümerik karakterler ve alt çizgiler @@ -294,7 +354,7 @@ tr: config: Yapılandırma feature_deletions: Hesap silme feature_invites: Davet linkleri - feature_profile_directory: Profil dizini + feature_profile_directory: Profil Dizini feature_registrations: Kayıtlar feature_relay: Federasyon aktarıcısı feature_spam_check: Anti-spam @@ -353,11 +413,11 @@ tr: show: affected_accounts: one: Veritabanındaki bir hesap etkilendi - other: Veritabanındaki %{count} hesap etkilendi + other: "Veritabanındaki %{count} hesap etkilendi" retroactive: silence: Bu domaindeki tüm hesapların üzerindeki susturulma işlemini kaldır suspend: Bu domaindeki tüm hesapların üzerindeki uzaklaştırma işlemini kaldır - title: "%{domain} domain'i için yapılan işlemi geri al" + title: '%{domain} domain''i için yapılan işlemi geri al' undo: Geri al undo: Geri al view: Alan adı bloğunu görüntüle @@ -368,7 +428,7 @@ tr: destroyed_msg: E-posta alan adı kara listeden başarıyla silindi domain: Alan adı empty: Şu anda hiçbir e-posta alan adı kara listeye alınmadı. - from_html: "%{domain} alan adından" + from_html: '%{domain} alan adından' new: create: Alan adı ekle title: Yeni e-posta kara liste girişi @@ -399,6 +459,21 @@ tr: expired: Süresi dolmuş title: Filtre title: Davetler + ip_blocks: + add_new: Kural oluştur + created_msg: Yeni IP kuralı başarıyla eklendi + delete: Sil + expires_in: + '1209600': 2 hafta + '15778476': 6 ay + '2629746': 1 ay + '31556952': 1 yıl + '86400': 1 gün + '94670856': 3 yıl + new: + title: Yeni IP kuralı oluştur + no_ip_block_selected: Hiçbiri seçilmediğinden hiçbir IP kuralı değiştirilmedi + title: IP kuralları pending_accounts: title: Bekleyen hesaplar (%{count}) relationships: @@ -406,7 +481,7 @@ tr: relays: add_new: Yeni aktarıcı ekle delete: Sil - description_html: "Federasyon aktarıcısı, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık tootların değiş tokuşunu yapan aracı bir sunucudur. Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir." + description_html: Federasyon aktarıcısı, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık tootların değiş tokuşunu yapan aracı bir sunucudur. Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir. disable: Devre dışı disabled: Devre dışı enable: Etkin @@ -476,7 +551,7 @@ tr: domain_blocks: all: Herkes için disabled: Hiç kimseye - title: Alan adı bloklarını göster + title: Engellenen alan adlarını göster users: Oturum açan yerel kullanıcılara domain_blocks_rationale: title: Gerekçeyi göster @@ -547,7 +622,7 @@ tr: title: Ön inceleme yapmadan etiketlerin trend olmasına izin ver trends: desc_html: Şu anda trend olan ve daha önce incelenen etiketleri herkese açık olarak göster - title: Trend etiketler + title: Gündem etiketleri site_uploads: delete: Yüklenen dosyayı sil destroyed_msg: Site yüklemesi başarıyla silindi! @@ -571,8 +646,8 @@ tr: breakdown: Bugünkü kullanımın kaynağa göre dağılımı context: İçerik directory: Dizinde - in_directory: Dizinde %{count} - last_active: Son aktivite + in_directory: "Dizinde %{count}" + last_active: Son etkinlik most_popular: En popüler most_recent: En yeni name: Etiket @@ -580,7 +655,7 @@ tr: reviewed: Gözden geçirildi title: Etiketler trending_right_now: Şu anda trend - unique_uses_today: bugün %{count} gönderi + unique_uses_today: "bugün %{count} gönderi" unreviewed: Gözden geçirilmedi updated_msg: Etiket ayarları başarıyla güncellendi title: Yönetim @@ -592,14 +667,14 @@ tr: admin_mailer: new_pending_account: body: Yeni hesabın detayları aşağıdadır. Bu başvuruyu onaylayabilir ya da reddedebilirsiniz. - subject: "%{instance} üzerinde gözden geçirmek için yeni hesap (%{username})" + subject: '%{instance} üzerinde gözden geçirmek için yeni hesap (%{username})' new_report: - body: "%{reporter} %{target}'i şikayet etti" - body_remote: "%{domain}'den birisi %{target}'i şikayet etti" - subject: "%{instance} için yeni şikayet (#%{id})" + body: "%{reporter}, %{target} kişisini bildirdi" + body_remote: '%{domain} alan adından birisi %{target} kişisini bildirdi' + subject: '%{instance} için yeni şikayet (#%{id})' new_trending_tag: - body: "#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin." - subject: "%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})" + body: '#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin.' + subject: '%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})' aliases: add_new: Takma ad oluştur created_msg: Yeni takma ad başarıyla oluşturuldu. Artık eski hesaptan taşınmayı başlatabilirsiniz. @@ -622,9 +697,9 @@ tr: application_mailer: notification_preferences: E-posta tercihlerini değiştir salutation: "%{name}," - settings: 'E-mail tercihlerini değiştir: %{link}' + settings: 'E-posta tercihlerini değiştir: %{link}' view: 'Görüntüle:' - view_profile: Profili Görüntüle + view_profile: Profili görüntüle view_status: Durumu görüntüle applications: created: Uygulama başarıyla oluşturuldu @@ -636,32 +711,35 @@ tr: your_token: Erişim belirteciniz auth: apply_for_account: Davet et - change_password: Parola - checkbox_agreement_html: sunucu kuralları vehizmet şartlarını kabul ediyorum + change_password: Şifre + checkbox_agreement_html: Sunucu kurallarını ve hizmet şartlarını kabul ediyorum checkbox_agreement_without_rules_html: Hizmet şartlarını kabul ediyorum delete_account: Hesabı sil - delete_account_html: Hesabınızı silmek isterseniz, buradan devam edebilirsiniz. Sizden onay istenecektir. + delete_account_html: Hesabınızı silmek isterseniz, buradan devam edebilirsiniz . Onaylamanız istenecektir. description: - prefix_invited_by_user: "@%{name} sizi Mastodon'un bu sunucusuna katılmaya davet ediyor!" + prefix_invited_by_user: "@%{name} sizi bu Mastodon sunucusuna katılmaya davet ediyor!" prefix_sign_up: Bugün Mastodon'a kaydolun! suffix: Bir hesapla, kişileri takip edebilir, güncellemeler gönderebilir, herhangi bir Mastodon sunucusundan kullanıcılarla mesaj alışverişinde bulunabilir ve daha birçok şey yapabilirsin! - didnt_get_confirmation: Hesap doğrulama mailini almadınız mı? - forgot_password: Parolanızı unuttunuz mu? + didnt_get_confirmation: Doğrulama talimatlarını almadınız mı? + dont_have_your_security_key: Güvenlik anahtarınız yok mu? + forgot_password: Şifrenizi mi unuttunuz? invalid_reset_password_token: Parola sıfırlama belirteci geçersiz veya süresi dolmuş. Lütfen yeni bir tane talep edin. - login: Giriş yap - logout: Çıkış - migrate_account: Farklı bir hesaba taşının + link_to_otp: Telefonunuzdan iki adımlı bir kod veya bir kurtarma kodu girin + link_to_webauth: Güvenlik anahtarı cihazınızı kullanın + login: Oturum aç + logout: Oturumu kapat + migrate_account: Farklı bir hesaba taşıyın migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsanız, buradan yapılandırabilirsiniz. - or_log_in_with: Veya giriş yapın + or_log_in_with: 'Veya şununla oturum açın:' providers: cas: CAS saml: SAML - register: Üye ol + register: Kaydol registration_closed: "%{instance} yeni üyeler kabul etmemektedir" - resend_confirmation: Doğrulama mailini tekrar gönder - reset_password: Parolayı değiştir - security: Kimlik bilgileri - set_new_password: Yeni parola oluştur + resend_confirmation: Onaylama talimatlarını tekrar gönder + reset_password: Şifreyi sıfırla + security: Güvenlik + set_new_password: Yeni şifre belirle setup: email_below_hint_html: Eğer aşağıdaki e-posta adresi yanlışsa, onu burada değiştirebilir ve yeni bir doğrulama e-postası alabilirsiniz. email_settings_hint_html: Onaylama e-postası %{email} adresine gönderildi. Eğer bu e-posta adresi doğru değilse, hesap ayarlarından değiştirebilirsiniz. @@ -673,8 +751,10 @@ tr: pending: Başvurunuz personelimiz tarafından gözden geçirilmeyi beklemektedir. Bu biraz zaman alabilir. Başvurunuz onaylanırsa bir e-posta alacaksınız. redirecting_to: Hesabınız aktif değil çünkü şu anda %{acct} adresine yönlendirilmektedir. trouble_logging_in: Oturum açarken sorun mu yaşıyorsunuz? + use_security_key: Güvenlik anahtarını kullan authorize_follow: already_following: Bu hesabı zaten takip ediyorsunuz + already_requested: Bu hesaba zaten takip isteği gönderdiniz error: Uzak hesap aranırken bir hata oluştu follow: Takip et follow_request: 'Şuna takip isteği gönderdiniz:' @@ -683,15 +763,20 @@ tr: close: Ya da, sadece bu pencereyi kapatabilirsiniz. return: Kullanıcının profilini göster web: Web'e git - title: "%{acct}'i takip et" + title: '%{acct} takip et' challenge: confirm: Devam et hint_html: "İpucu: Önümüzdeki saat boyunca sana parolanı sormayacağız." - invalid_password: Geçersiz parola - prompt: Devam etmek parolayı doğrulayın + invalid_password: Geçersiz şifre + prompt: Devam etmek için şifreyi doğrulayın + crypto: + errors: + invalid_key: geçerli bir Ed25519 veya Curve25519 anahtarı değil + invalid_signature: geçerli bir Ed25519 imzası değil date: formats: - default: "%b %d, %Y" + default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}sa" @@ -724,9 +809,9 @@ tr: username_available: Kullanıcı adınız tekrar kullanılabilir olacaktır username_unavailable: Kullanıcı adınız kullanılamaz kalacaktır directories: - directory: Profil dizini + directory: Profil Dizini explanation: Kullanıcıları ilgi alanlarına göre keşfedin - explore_mastodon: "%{title} sunucusunu keşfet" + explore_mastodon: '%{title} sunucusunu keşfet' domain_validator: invalid_domain: geçerli bir alan adı değil errors: @@ -746,21 +831,21 @@ tr: noscript_html: Mastodon web uygulamasını kullanmak için lütfen JavaScript'i etkinleştirin. Alternatif olarak, platformunuz için Mastodon yerel uygulamalardan birini deneyin. existing_username_validator: not_found: bu kullanıcı adına sahip yerel bir kullanıcı bulunamadı - not_found_multiple: "%{usernames} bulunamadı" + not_found_multiple: '%{usernames} bulunamadı' exports: archive_takeout: date: Tarih download: Arşivinizi indirin - hint_html: "Tootlarınızın ve yüklediğiniz ortamların bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz." + hint_html: Tootlarınızın ve yüklediğiniz ortamların bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz. in_progress: Arşivinizi derliyoruz... - request: Arşiv isteği + request: Arşivinizi isteyin size: Boyut - blocks: Engelledikleriniz + blocks: Engellediklerin csv: CSV - domain_blocks: Alan adı blokları + domain_blocks: Alan adı engelleri lists: Listeler - mutes: Susturduklarınız - storage: Ortam deposu + mutes: Sessize aldıkların + storage: Medya depolaması featured_tags: add_new: Yeni ekle errors: @@ -788,7 +873,7 @@ tr: developers: Geliştiriciler more: Daha Fazla… resources: Kaynaklar - trending_now: Trendler + trending_now: Şu an gündemde generic: all: Tümü changes_saved_msg: Değişiklikler başarıyla kaydedildi! @@ -803,23 +888,25 @@ tr: html_validator: invalid_markup: 'geçersiz HTML markup içermektedir: %{error}' identity_proofs: - active: Aktif - authorize: Evet, yetkilendir + active: Etkin + authorize: Evet, izin ver authorize_connection_prompt: Bu kriptolu bağlantıyı yetkilendir? errors: failed: Kriptolu bağlantı başarısız oldu. Lütfen %{provider} üzerinden tekrar deneyin. keybase: invalid_token: Keybase belirteçleri imza hash'leridir ve 66 hex karakter içermelidir verification_failed: Keybase, bu belirteci, %{kb_username} Keybase kullanıcısının imzası olarak tanımıyor. Lütfen Keybase'den tekrar deneyin. - wrong_user: "%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin." + wrong_user: '%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin.' explanation_html: Burada, Keybase profili gibi diğer kimliklerinizi şifreli olarak bağlayabilirsiniz. Bu, diğer kişilerin size şifreli mesajlar göndermesini ve gönderdiğiniz içeriğe güvenmelerini sağlar. i_am_html: Ben %{service} üzerinde %{username}. identity: Kimlik inactive: Pasif publicize_checkbox: 'Ve bunu tootla:' publicize_toot: 'İspatlandı! Ben %{service} üzerinde %{username}: %{url}' + remove: Hesaptan kanıtı kaldır + removed: Kanıt hesaptan başarıyla kaldırıldı status: Doğrulama durumu - view_proof: Kanıt görüntüle + view_proof: Kanıtı görüntüle imports: modes: merge: Birleştir @@ -846,8 +933,8 @@ tr: '604800': 1 hafta '86400': 1 gün expires_in_prompt: Asla - generate: Oluştur - invited_by: 'Tarafından davet edildi:' + generate: Davet bağlantısı oluştur + invited_by: 'Davet edildiniz:' max_uses: one: 1 kullanım other: "%{count} kullanım" @@ -859,11 +946,12 @@ tr: title: İnsanları davet et lists: errors: - limit: Maksimum liste miktarına ulaştınız + limit: En yüksek liste sayısına ulaştınız media_attachments: validations: - images_and_video: Halihazırda görsel içeren bir gönderiye video ekleyemezsiniz - too_many: 4'ten fazla dosya ekleyemezsiniz + images_and_video: Zaten resim içeren bir duruma video eklenemez + not_ready: İşlemi tamamlanmamış dosyalar eklenemez. Birazdan tekrar deneyin! + too_many: 4'ten fazla dosya eklenemiyor migrations: acct: Taşındı cancel: Yönlendirmeyi iptal et @@ -883,6 +971,7 @@ tr: on_cooldown: Son zamanlarda hesabınızı taşıdınız. Bu işlev %{count} gün içinde tekrar kullanılabilir olacaktır. past_migrations: Geçmiş taşınmalar proceed_with_move: Takipçileri taşı + redirected_msg: Hesabınız artık %{acct} adresine yönlendiriliyor. redirecting_to: Hesabınız %{acct} hesabına yönlendirilmektedir. set_redirect: Yönlendirme ayarla warning: @@ -895,41 +984,45 @@ tr: other_data: Başka bir veri otomatik olarak taşınmayacaktır redirect: Mevcut hesabınızın profili bir yönlendirme bildirimi ile güncellenecek ve aramaların dışında tutulacaktır moderation: - title: Yönetim + title: Denetim + move_handler: + carry_blocks_over_text: Bu kullanıcı engellediğiniz %{acct} adresinden taşındı. + carry_mutes_over_text: Bu kullanıcı sessize aldığınız %{acct} adresinden taşındı. + copy_account_note_text: 'Bu kullanıcı %{acct} adresinden taşındı, işte onlarla ilgili önceki notlarınız:' notification_mailer: digest: action: Tüm bildirimleri görüntüle body: Son ziyaretiniz olan %{since}'den beri'da kaçırdığınız şeylerin özeti mention: "%{name} senden bahsetti:" new_followers_summary: - one: Yeni bir takipçiniz var! - other: Yeni %{count} takipçiniz var! + one: Ayrıca, uzaktayken yeni bir takipçi kazandınız! Yaşasın! + other: Ayrıca, uzaktayken %{count} yeni takipçi kazandınız! İnanılmaz! subject: - one: "Son ziyaretinizden beri 1 yeni bildiriminiz var \U0001F418" - other: "Son ziyaretinizden beri %{count} yeni bildiriminiz var \U0001F418" + one: "Son ziyaretinizden bu yana 1 yeni bildirim \U0001F418" + other: "Son ziyaretinizden bu yana %{count} yeni bildirim \U0001F418" title: Senin yokluğunda... favourite: - body: "%{name} durumunuzu favorilere ekledi:" - subject: "%{name} favorilere ekledi" - title: Yeni favori + body: '%{name} durumunu beğendi:' + subject: "%{name} durumunu beğendi" + title: Yeni beğeni follow: - body: "%{name} sizi takip etmeye başladı!" - subject: "%{name} sizi takip etmeye başladı" + body: "%{name} artık seni takip ediyor!" + subject: "%{name} artık seni takip ediyor" title: Yeni takipçi follow_request: action: Takip isteklerini yönet - body: "%{name} size takip isteği gönderdi" - subject: 'Takip isteği: %{name}' + body: "%{name} sana takip isteği gönderdi" + subject: 'Bekleyen takipçi: %{name}' title: Yeni takip isteği mention: - action: Yanıt - body: "%{name} sizden bahsetti:" - subject: "%{name} sizden bahsetti" + action: Yanıtla + body: '%{name} senden bahsetti:' + subject: '%{name} senden bahsetti' title: Yeni bahsetme reblog: - body: "%{name} durumunuzu boost etti:" - subject: "%{name} durumunuzu boost etti" - title: Yeni gönderi + body: '%{name} durumunuzu boostladı:' + subject: "%{name} durumunuzu boostladı" + title: Yeni boost notifications: email_events: E-posta bildirimi gönderilecek etkinlikler email_events_hint: 'Bildirim almak istediğiniz olayları seçin:' @@ -939,15 +1032,23 @@ tr: decimal_units: format: "%n%u" units: - billion: B - million: M - quadrillion: Q - thousand: K - trillion: T + billion: Mr + million: Mn + quadrillion: Kn + thousand: Bn + trillion: Tn + otp_authentication: + code_hint: Onaylamak için authenticator uygulamanız tarafından oluşturulan kodu girin + description_html: Bir authenticator uygulamasını kullanarak iki adımlı kimlik doğrulamayı etkinleştirirseniz, giriş yapmak için telefonunuzun elinizde olması gerekir ve telefonunuz giriş yapmanız için kodlar oluşturur. + enable: Etkinleştir + instructions_html: "Bu QR kodunu Google Authenticator'a veya telefonunuzdaki benzer bir TOTP uygulamasına taratın. Bundan sonra, bu uygulama giriş yaparken girmeniz gereken kodu üretecektir." + manual_instructions: 'QR kodunu taratamıyorsanız ve elle girmeniz gerekiyorsa, buradaki gizli düz metni girebilirsiniz:' + setup: Yapılandır + wrong_code: Girilen kod geçersiz! Sunucu zamanı ve cihaz zamanı doğru mu? pagination: newer: Daha yeni next: Sonraki - older: Daha Eski + older: Daha eski prev: Önceki truncate: "…" polls: @@ -960,7 +1061,7 @@ tr: invalid_choice: Seçilen oylama seçeneği mevcut değil over_character_limit: her biri %{max} karakterden daha uzun olamaz too_few_options: birden fazla öğeye sahip olmalı - too_many_options: "%{max} öğeden fazla öğe içeremez" + too_many_options: '%{max} öğeden fazla öğe içeremez' preferences: other: Diğer posting_defaults: Gönderi varsayılanları @@ -975,43 +1076,43 @@ tr: followers: Takipçiler following: Takip edilenler invited: Davet edildi - last_active: Son aktivite - most_recent: En son + last_active: Son etkinlik + most_recent: En yeni moved: Taşındı - mutual: Ortak - primary: Birincil + mutual: Karşılıklı + primary: Ana relationship: İlişki - remove_selected_domains: Seçili alan adlarından tüm takipçileri kaldır + remove_selected_domains: Seçilen alan adların tüm takipçileri kaldır remove_selected_followers: Seçili takipçileri kaldır remove_selected_follows: Seçili kullanıcıları takip etmeyi bırak status: Hesap durumu remote_follow: - acct: Takip edeceğiniz kişiyi kullaniciadi@sunuculinki şeklinde giriniz - missing_resource: Hesabınız için yönlendirme linki bulunamadı + acct: İşlem yapmak istediğiniz kullaniciadi@alanadini girin + missing_resource: Hesabınız için gerekli yönlendirme URL'si bulunamadı no_account_html: Hesabınız yok mu? Buradan kaydolabilirsiniz - proceed: Takip onayı - prompt: Bu kullanıcıyı takip etmek istediğinize emin misiniz? + proceed: Takip etmek için devam edin + prompt: 'Bu kullanıcıyı takip etmek istediğinize emin misiniz?' reason_html: "Bu adım neden gerekli?%{instance} kayıtlı olduğunuz sunucu olmayabilir, bu yüzden önce sizi kendi sunucunuza yönlendirmemiz gerekmektedir." remote_interaction: favourite: - proceed: Favorilere eklemek için ilerle - prompt: 'Bu tootu favorilerinize eklemek istiyorsunuz:' + proceed: Beğenmek için devam edin + prompt: 'Bu tootu beğenmek istiyorsunuz:' reblog: - proceed: Yinelemek için ilerle - prompt: 'Bu tootu yinelemek istiyorsunuz:' + proceed: Boostlamak için devam edin + prompt: 'Bu tootu boostlamak istiyorsunuz:' reply: - proceed: Cevap vermek için ilerle - prompt: 'Bu toota cevap vermek istiyorsunuz:' + proceed: Yanıtlamak için devam edin + prompt: 'Bu tootu yanıtlamak istiyorsunuz:' scheduled_statuses: over_daily_limit: O gün için %{limit} zamanlanmış toot sınırını aştınız - over_total_limit: "%{limit} zamanlanmış toot sınırını aştınız" + over_total_limit: '%{limit} zamanlanmış toot sınırını aştınız' too_soon: Programlanan tarih bugünden ileri bir tarihte olmalıdır sessions: - activity: Son aktivite + activity: Son etkinlik browser: Tarayıcı browsers: alipay: Alipay - blackberry: BlackBerry + blackberry: Blackberry chrome: Chrome edge: Microsoft Edge electron: Electron @@ -1027,9 +1128,9 @@ tr: safari: Safari uc_browser: UC Browser weibo: Weibo - current_session: Şu anki oturum - description: "%{platform} üzerinde %{browser}" - explanation: Bunlar şu anda Mastodon hesabınızda oturum açan web tarayıcılarıdır. + current_session: Geçerli oturum + description: "%{platform} - %{browser}" + explanation: Bunlar, Mastodon hesabınızda şu anda oturum açmış web tarayıcılarıdır. ip: IP platforms: adobe_air: Adobe Air @@ -1038,13 +1139,13 @@ tr: chrome_os: ChromeOS firefox_os: Firefox OS ios: iOS - linux: GNU/Linux - mac: Mac + linux: Linux + mac: macOS other: bilinmeyen platform windows: Windows - windows_mobile: Windows Mobil + windows_mobile: Windows Mobile windows_phone: Windows Phone - revoke: İptal + revoke: İptal Et revoke_success: Oturum başarıyla iptal edildi title: Oturumlar settings: @@ -1052,22 +1153,23 @@ tr: account_settings: Hesap ayarları aliases: Hesap takma adları appearance: Görünüm - authorized_apps: Yetkilendirilen uygulamalar + authorized_apps: Yetkili uygulamalar back: Mastodon'a geri dön delete: Hesap silme development: Geliştirme edit_profile: Profili düzenle - export: Dışa aktar - featured_tags: Öne çıkan hashtag'ler - identity_proofs: Kimlik belgesi + export: Veriyi dışa aktar + featured_tags: Öne çıkan etiketler + identity_proofs: Kimlik kanıtları import: İçe aktar - import_and_export: İçe al ve dışarı aktar + import_and_export: İçe ve dışa aktar migrate: Hesap taşıma - notifications: Bildirim + notifications: Bildirimler preferences: Tercihler profile: Profil relationships: Takip edilenler ve takipçiler - two_factor_authentication: İki-faktörlü doğrulama + two_factor_authentication: İki adımlı doğrulama + webauthn_authentication: Güvenlik anahtarları spam_check: spam_detected: Bu otomatik bir şikayettir. Spam tespit edildi. statuses: @@ -1077,24 +1179,26 @@ tr: other: "%{count} ses" description: 'Ekli: %{attached}' image: - one: "%{count} görsel" - other: "%{count} görsel" + one: "%{count} resim" + other: "%{count} resim" video: one: "%{count} video" other: "%{count} video" - boosted_from_html: "%{acct_link} den yinelendi" + boosted_from_html: '%{acct_link} kişisinden boostladı' content_warning: 'İçerik uyarısı: %{warning}' disallowed_hashtags: one: 'izin verilmeyen bir etiket içeriyordu: %{tags}' other: 'izin verilmeyen hashtag''leri içeriyordu: %{tags}' + errors: + in_reply_not_found: Yanıtlamaya çalıştığınız durum yok gibi görünüyor. language_detection: Dili otomatik olarak algıla open_in_web: Web sayfasında aç - over_character_limit: "%{max} karakter limiti aşıldı" + over_character_limit: '%{max} karakter limiti aşıldı' pin_errors: limit: Hali hazırda maksimum sayıda tootu sabitlediniz ownership: Başkasının tootu sabitlenemez private: Halka açık olmayan toot sabitlenemez - reblog: Bir yineleme sabitlenemez + reblog: Bir boost sabitlenemez poll: total_people: one: "%{count} kişi" @@ -1102,8 +1206,10 @@ tr: total_votes: one: "%{count} oy" other: "%{count} oy" - vote: Oy - show_more: Daha fazla + vote: Oy Ver + show_more: Daha fazlasını göster + show_newer: Yenileri göster + show_older: Eskileri göster show_thread: Mesaj dizisini göster sign_in_to_participate: Sohbete katılmak için oturum açın title: '%{name}: "%{quote}"' @@ -1116,7 +1222,7 @@ tr: unlisted_long: Herkes görebilir fakat herkese açık zaman tünellerinde listelenmez stream_entries: pinned: Sabitlenmiş toot - reblogged: boost edildi + reblogged: boostladı sensitive_content: Hassas içerik tags: does_not_match_previous_name: önceki adla eşleşmiyor @@ -1209,49 +1315,57 @@ tr: mastodon-light: Mastodon (Açık) time: formats: - default: "%b %d, %Y, %H:%M" + default: "%d %b %Y %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Onaylamak için kimlik doğrulama uygulamanızın oluşturduğu kodu giriniz - description_html: Eğer iki-faktörlü kimlik doğrulamayı aktif ederseniz, giriş yaparken sizin için giriş kodu üreten telefonunuza ihtiyaç duyacaksınız. - disable: Devre dışı bırak - enable: Aktifleştir + add: Ekle + disable: 2FA'yı devre dışı bırak + disabled_success: İki adımlı kimlik doğrulama başarıyla devre dışı bırakıldı + edit: Düzenle enabled: İki adımlı kimlik doğrulama etkin - enabled_success: İki-faktörlü kimlik doğrulama başarıyla aktif edildi - generate_recovery_codes: Kurtarma Kodlarını Oluştur - instructions_html: Bu QR kodunu, telefonunuzdaki Google Authenticator veya benzer bir TOTP uygulamasıyla taratınız. Bundan sonra giriş yaparken uygulamanın ürettiği kodu kullanarak giriş yapacaksınız. + enabled_success: İki adımlı kimlik doğrulama başarıyla etkinleştirildi + generate_recovery_codes: Kurtarma kodları oluştur lost_recovery_codes: Kurtarma kodları telefonunuzu kaybettiğiniz durumlarda hesabınıza erişim yapabilmenize olanak tanır. Eğer kurtarma kodlarınızı kaybettiyseniz burada tekrar oluşturabilirsiniz. Eski kurtarma kodlarınız geçersiz hale gelecektir. - manual_instructions: 'Eğer QR kodunu taratamıyorsanız ve elle giriş yapmanız gerekiyorsa buradaki gizli düz metni girebilirsiniz:' + methods: İki adımlı doğrulama yöntemleri + otp: Authenticator uygulaması recovery_codes: Kurtarma kodlarını yedekle - recovery_codes_regenerated: Kurtarma kodları başarıyla oluşturuldu + recovery_codes_regenerated: Kurtarma kodları başarıyla yeniden oluşturuldu recovery_instructions_html: 'Eğer telefonunuza erişiminizi kaybederseniz, aşağıdaki kurtarma kodlarından birini kullanarak hesabınıza giriş yapabilirsiniz. Kurtarma kodlarınızı güvenli halde tutunuz. Örneğin: kodların çıktısını alıp diğer önemli belgeleriniz ile birlikte saklayabilirsiniz.' - setup: Kuruluma başla - wrong_code: Girdiğiniz kod geçersiz! Telefonunuzun saati geri/ileri kalmış olabilir. + webauthn: Güvenlik anahtarları user_mailer: backup_ready: - explanation: Mastodon hesabınızın tam bir yedeğini istediniz. Şimdi indirmeye hazır! + explanation: Mastodon hesabınızın tam yedeğini istemiştiniz. Şimdi indirilebilir durumda! subject: Arşiviniz indirilmeye hazır title: Arşiv paketlemesi + sign_in_token: + details: 'İşte bu girişimin ayrıntıları:' + explanation: 'Tanınmayan bir IP adresinden hesabınızda oturum açma denemesi tespit ettik. Bu sizseniz, lütfen oturum açma sorgulama sayfasına aşağıdaki güvenlik kodunu girin:' + further_actions: 'Bu siz değildiyseniz, lütfen şifrenizi değiştirin ve hesabınızda iki faktörlü kimlik doğrulamayı etkinleştirin. Bunu buradan yapabilirsiniz:' + subject: Lütfen oturum açma girişimini onaylayın + title: Oturum açma girişimi warning: explanation: disable: Hesabınız donmuşken, hesap verileriniz bozulmadan kalır, ancak kilidi açılıncaya kadar herhangi bir işlem gerçekleştiremezsiniz. + sensitive: Yüklediğiniz medya dosyalarınız ve bağlantılı medyanız hassas olarak değerlendirilecektir. silence: Hesabınız sınırlı iken, yalnızca sizi takip eden kişiler bu sunucuda tootlarınızı görecek ve çeşitli halka açık listelerin dışında tutulabilirsiniz. Ancak, diğerleri hala sizi manuel olarak takip edebilir. suspend: Hesabınız askıya alındı ve tüm tootlarınız ve yüklediğiniz medya dosyalarınız bu sunucudan ve takipçilerinizin bulunduğu sunuculardan geri alınamaz şekilde kaldırıldı. - get_in_touch: "%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz." + get_in_touch: '%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz.' review_server_policies: Sunucu politikalarını inceleyin statuses: 'Özellikle, şunun için:' subject: - disable: "%{acct} hesabınız donduruldu" - none: "%{acct} için uyarı" - silence: "%{acct} hesabınız sınırlandırıldı" - suspend: "%{acct} hesabınız askıya alındı" + disable: '%{acct} hesabınız donduruldu' + none: '%{acct} için uyarı' + sensitive: Hesabınızdan yayınlanan %{acct} medyanız hassas olarak işaretlendi + silence: '%{acct} hesabınız sınırlandırıldı' + suspend: '%{acct} hesabınız askıya alındı' title: disable: Hesap donduruldu none: Uyarı + sensitive: Medyanız hassas olarak işaretlendi silence: Hesap sınırlandırıldı suspend: Hesap askıya alındı welcome: - edit_profile_action: Profil ayarla + edit_profile_action: Profil kurulumu edit_profile_step: Bir avatar veya başlık yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Yeni takipçileri sizi takip etmelerine izin verilmeden önce incelemek isterseniz, hesabınızı kilitleyebilirsiniz. explanation: İşte sana başlangıç için birkaç ipucu final_action: Gönderi yazmaya başlayın @@ -1268,13 +1382,34 @@ tr: tips: İpuçları title: Gemiye hoşgeldin, %{name}! users: - follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz" - invalid_email: E-posta adresiniz geçersiz - invalid_otp_token: İki-faktörlü kodunuz geçersiz + blocked_email_provider: Bu e-posta sağlayıcısına izin verilmiyor + follow_limit_reached: '%{limit} kişiden daha fazlasını takip edemezsiniz' + generic_access_help_html: Hesabınıza erişirken sorun mu yaşıyorsunuz? Yardım için %{email} ile iletişime geçebilirsiniz + invalid_email: E-posta adresi geçersiz + invalid_email_mx: E-posta adresi mevcut görünmüyor + invalid_otp_token: Geçersiz iki adımlı doğrulama kodu invalid_sign_in_token: Geçersiz güvenlik kodu otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz seamless_external_login: Harici bir servis aracılığıyla oturum açtınız, bu nedenle parola ve e-posta ayarları mevcut değildir. - signed_in_as: 'Giriş yapan:' + signed_in_as: 'Oturum açtı:' + suspicious_sign_in_confirmation: Bu cihazdan daha önce oturum açmamış gibi görünüyorsunuz ve bir süredir oturum açmamışsınız, bu yüzden kimliğinizi doğrulamak için e-posta adresinize bir güvenlik kodu gönderiyoruz. verification: explanation_html: 'Profil meta verisindeki bağlantıların sahibi olarak kendinizi doğrulayabilirsiniz. Bunun için, link verilen web sitesi Mastodon profilinize geri bir link içermelidir. Geri link bir rel="me" özelliğine sahip olmalıdır. Bağlantının metin içeriği önemli değildir. İşte bir örnek:' verification: Doğrulama + webauthn_credentials: + add: Yeni güvenlik anahtarı ekle + create: + error: Güvenlik anahtarınızı eklerken bir sorun oluştu. Lütfen tekrar deneyin. + success: Güvenlik anahtarınız başarıyla eklendi. + delete: Sil + delete_confirmation: Bu güvenlik anahtarını silmek istediğinizden emin misiniz? + description_html: Güvenlik anahtarı kimlik doğrulamasını etkinleştirirseniz, giriş yapmak için güvenlik anahtarlarınızdan birini kullanmanız gerekir. + destroy: + error: Güvenlik anahtarını silerken bir sorun oluştu. Lütfen tekrar deneyin. + success: Güvenlik anahtarınız başarıyla silindi. + invalid_credential: Geçersiz güvenlik anahtarı + nickname_hint: Yeni güvenlik anahtarınızın takma adını girin + not_enabled: Henüz WebAuthn'u etkinleştirmediniz + not_supported: Bu tarayıcı güvenlik anahtarlarını desteklemiyor + otp_required: Güvenlik anahtarlarını kullanmak için lütfen önce iki adımlı kimlik doğrulamayı etkinleştirin. + registered_on: '%{date} tarihinde kaydoldu' diff --git a/config/locales/ug.yml b/config/locales/ug.yml index 7b709a35e..779d4d226 100644 --- a/config/locales/ug.yml +++ b/config/locales/ug.yml @@ -10,11 +10,3 @@ ug: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 7b13c40c0..dee947dc6 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -21,7 +21,9 @@ uk: federation_hint_html: З обліковим записом на %{instance} ви зможете слідкувати за людьми на будь-якому сервері Mastodon та поза ним. get_apps: Спробуйте мобільний додаток hosted_on: Mastodon розміщено на %{domain} - instance_actor_flash: Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. + instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. + +' learn_more: Дізнатися більше privacy_policy: Політика приватності see_whats_happening: Погляньте, що відбувається @@ -205,6 +207,7 @@ uk: whitelisted: У білому списку action_logs: action_types: + assigned_to_self_report: Призначити звіт change_email_user: Змінити електронну пошту для користувача confirm_user: Підтвердити користувача create_account_warning: Створити попередження @@ -220,10 +223,12 @@ uk: destroy_domain_block: Видалити блокування домену destroy_email_domain_block: Видалити блокування поштового домену destroy_status: Видалити пост + disable_2fa_user: Вимкнути 2FA disable_custom_emoji: Вимкнути користувацькі емодзі disable_user: Відключити користувача enable_custom_emoji: Увімкнути користувацькі емодзі enable_user: Активувати користувача + memorialize_account: Зробити обліковий запис меморіалом promote_user: Підвищити користувача remove_avatar_user: Видалити аватар reopen_report: Перевідкрити скаргу @@ -231,6 +236,7 @@ uk: resolve_report: Розв'язати скаргу silence_account: Заглушити обліковий запис suspend_account: Призупинити обліковий запис + unassigned_report: Видалити скаргу unsilence_account: Розглушити обліковий запис unsuspend_account: Розморозити обліковий запис update_announcement: Оновити оголошення @@ -693,8 +699,11 @@ uk: prefix_sign_up: Зареєструйтеся на Mastodon сьогодні! suffix: Маючи обліковий запис, ви зможете підписуватися на людей, публікувати пости та листуватися з користувачами будь-якого сервера Mastodon! didnt_get_confirmation: Ви не отримали інструкції з підтвердження? + dont_have_your_security_key: Не маєте ключа безпеки? forgot_password: Забули пароль? invalid_reset_password_token: Токен скидання паролю неправильний або просрочений. Спробуйте попросити новий. + link_to_otp: Введіть двофакторний код з вашого телефону або код відновлення + link_to_webauth: Використовувати пристрій ключа безпеки login: Увійти logout: Вийти migrate_account: Переїхати на інший обліковий запис @@ -720,6 +729,7 @@ uk: pending: Ваша заява очікує на розгляд нашим персоналом. Це може зайняти деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена. redirecting_to: Ваш обліковий запис наразі неактивний, тому що він перенаправлений до %{acct}. trouble_logging_in: Проблема під час входу? + use_security_key: Використовувати ключ безпеки authorize_follow: already_following: Ви вже слідкуєте за цим обліковим записом already_requested: Ви вже надіслали запит на підписку до цього облікового запису @@ -744,6 +754,7 @@ uk: date: formats: default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}г" @@ -1012,6 +1023,14 @@ uk: quadrillion: квдрл thousand: тис trillion: трлн + otp_authentication: + code_hint: Для підтверждення введіть код, згенерований додатком аутентифікатора + description_html: При увімкненні двофакторної аутентифікації, вхід буде вимагати від Вас використання Вашого телефона для генерації вхідного коду. + enable: Увімкнути + instructions_html: "Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-додатку на Вашому телефоні. Відтепер додаток буде генерувати коди, які буде необхідно ввести для входу." + manual_instructions: 'Якщо ви не можете сканувати QR-код і потрібно ввести його вручну, ось він:' + setup: Налаштувати + wrong_code: Введений код неправильний! Чи правильно встановлений час на сервері та пристрої? pagination: newer: Новіше next: Далі @@ -1136,10 +1155,16 @@ uk: profile: Профіль relationships: Підписки та підписники two_factor_authentication: Двофакторна авторизація + webauthn_authentication: Ключі безпеки spam_check: spam_detected: Це автоматична скарга. Було виявлено спам. statuses: attached: + audio: + few: "%{count} аудіозаписи" + many: "%{count} аудіозаписів" + one: "%{count} аудіозапис" + other: "%{count} аудіозаписів" description: 'Прикріплено: %{attached}' image: few: "%{count} зображень" @@ -1209,21 +1234,20 @@ uk: default: "%b %d, %Y, %H:%M" month: "%b %Y" two_factor_authentication: - code_hint: Для підтверждення введіть код, згенерований застосунком аутентифікатора - description_html: При увімкненні двофакторної аутентифікації, вхід буде вимагати від Вас використовування Вашого телефона, який згенерує вхідний код. + add: Додати disable: Вимкнути - enable: Увімкнути + disabled_success: Двофакторна аутентифікація вимкнена + edit: Редагувати enabled: Двофакторна аутентифікація увімкнена enabled_success: Двофакторна аутентифікація успішно увімкнена generate_recovery_codes: Згенерувати коди відновлення - instructions_html: "Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-застосунку на Вашому телефоні. З цього моменту він буде генерувати коди, які буде необхідно ввести для входу." lost_recovery_codes: Коди відновлення дозволяють повернути доступ до вашого облікового запису у випадку втрати телефону. Якщо ви втратили ваші коди відновлення, ви можете знову згенерувати їх тут. Ваші старі коди відновлення будуть анульовані. - manual_instructions: 'Якщо Ви не можете відсканувати QR-код та хочете ввести його вручну, секрет представлений тут відкритим текстом:' + methods: Методи двофакторної авторизації + otp: Програма авторизації recovery_codes: Запасні коди відновлення recovery_codes_regenerated: Коди відновлення успішно згенеровані recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з нижчевказаних кодів відновлення, щоб повернути доступ до вашого облікового запису. Тримайте коди відновлення у безпеці, наприклад, роздрукуйте їх та зберігайте разом з іншими важливими документами. - setup: Налаштувати - wrong_code: Введений код неправильний! Чи правильно встановлений час на сервері та пристрої? + webauthn: Ключі безпеки user_mailer: backup_ready: explanation: Ви робили запит повної резервної копії вашого облікового запису Mastodon. Вона вже готова для завантаження! @@ -1271,9 +1295,11 @@ uk: tips: Поради title: Ласкаво просимо, %{name}! users: + blocked_email_provider: Цей поштовий провайдер не дозволений follow_limit_reached: Не можна слідкувати більш ніж за %{limit} людей generic_access_help_html: Не вдається отримати доступ до облікового запису? Ви можете зв'язатися з %{email} для допомоги invalid_email: Введена адреса e-mail неправильна + invalid_email_mx: Вказана електронна адреса не існує invalid_otp_token: Введено неправильний код invalid_sign_in_token: Хибний код безпеки otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email} @@ -1283,3 +1309,20 @@ uk: verification: explanation_html: 'Володіння посиланнями у профілі можна підтвердити. Для цього на зазначеному сайті повинна міститися посилання на ваш профіль Mastodon, а у самому посиланні повинен бути атрибут rel="me". Що всередині посилання - значення не має. Ось вам приклад посилання:' verification: Підтвердження + webauthn_credentials: + add: Додати новий ключ безпеки + create: + error: Сталася проблема при додаванні ключа безпеки. Спробуйте знову. + success: Ключ безпеки успішно доданий. + delete: Видалити + delete_confirmation: Ви впевнені, що хочете вилучити цей ключ безпеки? + description_html: Якщо ви увімкнете автентифікацію за допомогою ключа безпеки, вхід буде вимагати використання одного з ваших ключів безпеки. + destroy: + error: Сталася проблема при видаленні ключа безпеки. Спробуйте знову. + success: Ключ безпеки успішно видалено. + invalid_credential: Невірний ключ безпеки + nickname_hint: Введіть псевдонім нового ключа безпеки + not_enabled: Ви ще не активували WebAuthn + not_supported: Цей браузер не підтримує ключі безпеки + otp_required: Для використання ключів безпеки, спочатку увімкніть двофакторну аутентифікацію. + registered_on: Зареєстровано %{date} diff --git a/config/locales/ur.yml b/config/locales/ur.yml index 2aa72a8f8..31c2292bb 100644 --- a/config/locales/ur.yml +++ b/config/locales/ur.yml @@ -10,11 +10,3 @@ ur: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. - invites: - expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day diff --git a/config/locales/vi.yml b/config/locales/vi.yml index d2de33d8b..a24c652a2 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1,7 +1,7 @@ --- vi: about: - about_hashtag_html: Đây là các tút công khai được gắn thẻ #%{hashtag}. Chỉ cần bạn có tài khoản ở bất cứ đâu trong mạng liên kết là bạn có thể tương tác với chúng. + about_hashtag_html: Đây là các tút công khai trong mạng liên hợp được gắn thẻ #%{hashtag}. Bạn có thể tương tác với chúng nếu đã đăng nhập. about_mastodon_html: 'Mạng xã hội của tương lai: Không quảng cáo, không theo dõi người dùng và phi tập quyền! Làm chủ quyền riêng tư của bạn với Mastodon!' about_this: Giới thiệu active_count_after: hoạt động @@ -18,14 +18,16 @@ vi: contact_unavailable: N/A discover_users: Khám phá người dùng documentation: Tài liệu - federation_hint_html: Đăng ký tài khoản %{instance}, bạn có thể giao tiếp với mọi người trên bất kỳ máy chủ Mastodon nào và hơn thế nữa. + federation_hint_html: Đăng ký tài khoản %{instance} là bạn có thể giao tiếp với mọi người trên bất kỳ máy chủ Mastodon nào và còn hơn thế nữa. get_apps: Dùng thử ứng dụng di động hosted_on: "%{domain} vận hành nhờ Mastodon" - instance_actor_flash: Tài khoản này là một tác nhân ảo được sử dụng để đại diện cho chính máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên bị chặn trừ khi bạn muốn chặn toàn bộ máy chủ. + instance_actor_flash: 'Tài khoản này là một tác nhân ảo được sử dụng để đại diện cho chính máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên bị chặn trừ khi bạn muốn chặn toàn bộ máy chủ. + +' learn_more: Tìm hiểu thêm privacy_policy: Chính sách bảo mật see_whats_happening: Xem những gì đang xảy ra - server_stats: 'Thống kê máy chủ:' + server_stats: 'Cộng đồng:' source_code: Mã nguồn status_count_after: other: tút @@ -37,32 +39,32 @@ vi: domain: Máy chủ reason: Lý do rejecting_media: 'Ảnh và video từ những máy chủ sau sẽ không được xử lý, lưu trữ và hiển thị hình thu nhỏ. Bắt buộc nhấp thủ công vào tệp gốc để xem:' - rejecting_media_title: Ảnh và các thứ đã lọc + rejecting_media_title: Ảnh và video silenced: 'Tút từ những máy chủ sau sẽ bị ẩn trên bảng tin, trong tin nhắn và không có thông báo nào được tạo từ các tương tác của người dùng của họ, trừ khi bạn có theo dõi người dùng của họ:' silenced_title: Những máy chủ bị ẩn suspended: 'Những máy chủ sau sẽ không được xử lý, lưu trữ hoặc trao đổi nội dung. Mọi tương tác hoặc giao tiếp với người dùng từ các máy chủ này đều bị cấm:' suspended_title: Những máy chủ bị vô hiệu hóa - unavailable_content_html: Mastodon cho phép bạn xem nội dung và tương tác với người dùng từ bất kỳ máy chủ nào khác trong mạng liên kết. Còn máy chủ này có những ngoại lệ riêng. + unavailable_content_html: Mastodon cho phép bạn xem nội dung và tương tác với người dùng từ bất kỳ máy chủ nào khác trong mạng liên hợp. Còn máy chủ này có những ngoại lệ riêng. user_count_after: other: người dùng user_count_before: Nhà của what_is_mastodon: Mastodon là gì? accounts: - choices_html: 'Những người %{name} theo dõi:' + choices_html: "%{name} vinh danh:" endorsements_hint: Bạn có thể vinh danh những người bạn theo dõi và họ sẽ hiển thị ở giao diện web. featured_tags_hint: Bạn có thể cho biết những hashtag thường dùng ở đây. follow: Theo dõi followers: other: Người theo dõi - following: Đang theo dõi + following: Theo dõi joined: Đã tham gia %{date} - last_active: hoạt động cuối + last_active: trực tuyến link_verified_on: Liên kết này đã được xác thực quyền sở hữu vào %{date} media: Bộ sưu tập moved_html: "%{name} đã dời sang %{new_profile_link}:" network_hidden: Người dùng đã ẩn thông tin này never_active: Chưa có - nothing_here: Chưa đăng tút nào cả! + nothing_here: Trống trơn! people_followed_by: Những người %{name} theo dõi people_who_follow: Những người theo dõi %{name} pin_errors: @@ -70,7 +72,7 @@ vi: posts: other: Tút posts_tab_heading: Tút - posts_with_replies: Trả lời + posts_with_replies: Tương tác reserved_username: Tên người dùng đã có rồi roles: admin: Quản trị viên @@ -89,9 +91,10 @@ vi: delete: Xóa bỏ destroyed_msg: Đã ghi chú kiểm duyệt xong! accounts: - add_email_domain_block: Thêm máy chủ vào danh sách chặn + add_email_domain_block: Chặn địa chỉ email approve: Phê duyệt approve_all: Phê duyệt tất cả + approved_msg: Đã phê duyệt %{username} đăng ký thành công are_you_sure: Bạn có chắc không? avatar: Ảnh đại diện by_domain: Máy chủ @@ -102,12 +105,14 @@ vi: new_email: Email mới submit: Thay đổi email title: Thay đổi email cho %{username} - confirm: Xác nhận + confirm: Phê duyệt confirmed: Đã xác thực confirming: Chờ xác nhận + delete: Xóa dữ liệu deleted: Đã xóa demote: Gỡ bỏ chức vụ - disable: Vô hiệu hóa + destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ + disable: Tạm khóa disable_two_factor_authentication: Vô hiệu hóa xác thực hai bước disabled: Đã vô hiệu hóa display_name: Tên hiển thị @@ -115,8 +120,9 @@ vi: edit: Chỉnh sửa email: Email email_status: Trạng thái email - enable: Phê duyệt + enable: Mở lại enabled: Đã duyệt + enabled_msg: Đã kích hoạt lại tài khoản %{username} thành công followers: Người theo dõi follows: Đang theo dõi header: Ảnh bìa @@ -125,42 +131,48 @@ vi: ip: IP joined: Đã tham gia location: - all: Tất cả + all: Toàn bộ local: Máy chủ của bạn - remote: Từ máy chủ khác + remote: Máy chủ khác title: Vị trí - login_status: Trạng thái đăng nhập + login_status: Trạng thái tài khoản media_attachments: Tệp đính kèm memorialize: Chuyển sang tài khoản tưởng niệm + memorialized: Tưởng nhớ + memorialized_msg: Đã chuyển thành công %{username} thành tài khoản tưởng nhớ moderation: active: Hoạt động - all: Tất cả - pending: Đang chờ xử lý + all: Toàn bộ + pending: Chờ xử lý silenced: Tạm ẩn suspended: Vô hiệu hóa - title: Kiểm duyệt + title: Trạng thái moderation_notes: Nhật ký kiểm duyệt most_recent_activity: Hoạt động lần cuối most_recent_ip: IP gần đây nhất no_account_selected: Không có tài khoản nào thay đổi vì không có tài khoản nào được chọn - no_limits_imposed: Không áp đặt giới hạn + no_limits_imposed: Bình thường not_subscribed: Chưa đăng ký - pending: Đang chờ xem xét + pending: Chờ duyệt perform_full_suspension: Vô hiệu hóa promote: Chỉ định chức vụ protocol: Giao thức public: Công khai push_subscription_expires: Đăng ký PuSH hết hạn redownload: Làm mới trang cá nhân + redownloaded_msg: Đã làm tươi tài khoản %{username} thành công reject: Từ chối reject_all: Từ chối tất cả + rejected_msg: Đã từ chối đăng ký tài khoản %{username} thành công remove_avatar: Xóa ảnh đại diện remove_header: Xóa ảnh bìa + removed_avatar_msg: Đã xóa bỏ ảnh đại diện của %{username} thành công + removed_header_msg: Đã xóa bỏ ảnh bìa của %{username} thành công resend_confirmation: already_confirmed: Người dùng này đã được xác thực send: Gửi lại email xác nhận success: Email xác nhận đã gửi thành công! - reset: Đặt lại + reset: Làm tươi reset_password: Đặt lại mật khẩu resubscribe: Đăng ký lại role: Chức vụ @@ -170,24 +182,32 @@ vi: staff: Đội ngũ quản lý user: Người dùng search: Tìm kiếm - search_same_email_domain: Tìm người dùng có cùng địa chỉ email - search_same_ip: Tìm người dùng có cùng IP + search_same_email_domain: Tìm người dùng giống địa chỉ email + search_same_ip: Tìm người dùng giống IP + sensitive: Nhạy cảm + sensitized: đánh dấu nhạy cảm shared_inbox_url: Hộp thư của máy chủ người này show: - created_reports: Xuất báo cáo + created_reports: Lượt báo cáo targeted_reports: Báo cáo bởi người khác - silence: Tạm ẩn - silenced: Tạm ẩn + silence: Ẩn + silenced: Đã ẩn statuses: Tút subscribe: Đăng ký suspended: Đã vô hiệu hóa + suspension_irreversible: Toàn bộ dữ liệu của người dùng này sẽ bị xóa hết. Bạn vẫn có thể ngừng vô hiệu hóa nhưng dữ liệu sẽ không thể phục hồi. + suspension_reversible_hint_html: Kể từ %{date}, tài khoản sẽ bị vô hiệu hóa và dữ liệu bị xóa hết. Trước thời hạn này, tài khoản vẫn có thể phục hồi dữ liệu. Nếu bạn vẫn muốn xóa dữ liệu của người này ngay lập tức, hãy tiếp tục. time_in_queue: Đang chờ cách đây %{time} title: Tài khoản unconfirmed_email: Email chưa được xác thực - undo_silenced: Bỏ tạm ẩn + undo_sensitized: Đánh dấu bình thường + undo_silenced: Bỏ ẩn undo_suspension: Ngừng vô hiệu hóa + unsilenced_msg: Bỏ ẩn %{username} thành công unsubscribe: Hủy đăng ký - username: Tên tài khoản + unsuspended_msg: Đã kích hoạt lại tài khoản %{username} thành công + username: ABC + view_domain: Xem mô tả tài khoản này warn: Cảnh cáo web: Web whitelisted: Danh sách trắng @@ -202,12 +222,14 @@ vi: create_domain_allow: Tạo danh sách máy chủ cho phép create_domain_block: Tạo danh sách máy chủ chặn create_email_domain_block: Tạo danh sách địa chỉ email chặn + create_ip_block: Chặn IP demote_user: Gỡ bỏ chức vụ destroy_announcement: Gỡ thông báo destroy_custom_emoji: Gỡ Emoji destroy_domain_allow: Gỡ máy chủ cho phép destroy_domain_block: Gỡ máy chủ chặn destroy_email_domain_block: Gỡ email đã chặn + destroy_ip_block: Bỏ chặn IP destroy_status: Xóa tút disable_2fa_user: Vô hiệu hóa xác thực hai bước disable_custom_emoji: Vô hiệu hóa Emoji @@ -220,10 +242,12 @@ vi: reopen_report: Mở lại báo cáo reset_password_user: Đặt lại mật khẩu resolve_report: Xem xét lại báo cáo - silence_account: Tài khoản tạm ẩn + sensitive_account: Đánh dấu nhạy cảm cho ảnh và video trên tài khoản của bạn + silence_account: Tài khoản bị ẩn suspend_account: Tài khoản bị vô hiệu hóa unassigned_report: Báo cáo chưa xem - unsilence_account: Tài khoản bỏ tạm ẩn + unsensitive_account: Ảnh và video trên tài khoản của bạn là bình thường + unsilence_account: Tài khoản bỏ ẩn unsuspend_account: Tài khoản đã ngừng vô hiệu hóa update_announcement: Cập nhật thông báo update_custom_emoji: Cập nhật Emoji mới @@ -233,33 +257,37 @@ vi: change_email_user: "%{name} đã thay đổi địa chỉ email cho %{target}" confirm_user: "%{name} xác nhận địa chỉ email của người dùng %{target}" create_account_warning: "%{name} đã gửi cảnh cáo %{target}" - create_announcement: "%{name} tạo thông báo tới %{target}" + create_announcement: "%{name} tạo thông báo mới %{target}" create_custom_emoji: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" - create_domain_allow: "%{name} đưa máy chủ %{target} vào danh sách trắng" + create_domain_allow: "%{name} kích hoạt liên hợp với %{target}" create_domain_block: "%{name} chặn máy chủ %{target}" - create_email_domain_block: "%{name} đưa email %{target} vào danh sách đen" + create_email_domain_block: "%{name} chặn địa chỉ email %{target}" + create_ip_block: "%{name} đã chặn IP %{target}" demote_user: "%{name} đã gỡ bỏ chức vụ %{target}" destroy_announcement: "%{name} gỡ thông báo tới %{target}" destroy_custom_emoji: "%{name} biểu tượng cảm xúc bị phá hủy %{target}" destroy_domain_allow: "%{name} đã xóa tên miền %{target} khỏi danh sách trắng" destroy_domain_block: "%{name} bỏ chặn máy chủ %{target}" - destroy_email_domain_block: "%{name} cho email %{target} vào danh sách trắng" + destroy_email_domain_block: "%{name} bỏ chặn địa chỉ email %{target}" + destroy_ip_block: "%{name} bỏ chặn IP %{target}" destroy_status: "%{name} đã gỡ bỏ tút của %{target}" disable_2fa_user: "%{name} đã vô hiệu hóa xác thực hai yếu tố của %{target}" disable_custom_emoji: "%{name} đã gỡ bỏ Emoji %{target}" disable_user: "%{name} vô hiệu hóa đăng nhập của người dùng %{target}" enable_custom_emoji: "%{name} kích hoạt Emoji %{target}" - enable_user: "%{name} kích hoạt đăng nhập cho người dùng %{target}" + enable_user: "%{name} phê duyệt đăng nhập cho người dùng %{target}" memorialize_account: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" promote_user: "%{name} đã chỉ định chức vụ cho %{target}" remove_avatar_user: "%{name} đã xóa ảnh đại diện của %{target}" reopen_report: "%{name} mở lại báo cáo %{target}" reset_password_user: "%{name} đặt lại mật khẩu của người dùng %{target}" resolve_report: "%{name} đã giải quyết báo cáo %{target}" - silence_account: "%{name} đã tạm ẩn %{target}" + sensitive_account: "%{name} đánh dấu nội dung của %{target} là nhạy cảm" + silence_account: "%{name} đã ẩn %{target}" suspend_account: "%{name} đã vô hiệu hóa %{target}" unassigned_report: "%{name} báo cáo chưa được chỉ định %{target}" - unsilence_account: "%{name} đã bỏ tạm ẩn %{target}" + unsensitive_account: "%{name} đánh dấu nội dung của %{target} là bình thường" + unsilence_account: "%{name} đã bỏ ẩn %{target}" unsuspend_account: "%{name} đã ngừng vô hiệu hóa %{target}" update_announcement: "%{name} cập nhật thông báo cho %{target}" update_custom_emoji: "%{name} đã cập nhật biểu tượng cảm xúc %{target}" @@ -285,7 +313,7 @@ vi: unpublished_msg: Gỡ bỏ thông báo thành xong! updated_msg: Cập nhật thông báo thành công! custom_emojis: - assign_category: Chỉ định danh mục + assign_category: Xếp vào danh mục by_domain: Máy chủ copied_msg: Tạo thành công Emoji copy: Sao chép @@ -298,7 +326,7 @@ vi: disabled: Đã vô hiệu hóa disabled_msg: Vô hiệu hóa thành công Emoji này emoji: Emoji - enable: Kích hoạt + enable: Cho phép enabled: Đã kích hoạt enabled_msg: Kích hoạt thành công Emoji này image_hint: PNG tối đa 50KB @@ -329,30 +357,30 @@ vi: feature_spam_check: Chống thư rác feature_timeline_preview: Xem trước bảng tin features: Tính năng - hidden_service: Mạng liên kết với các dịch vụ ẩn + hidden_service: Liên kết với các dịch vụ ẩn open_reports: báo cáo - pending_tags: hashtag đang chờ xem xét - pending_users: người dùng đang chờ xem xét + pending_tags: hashtag chờ duyệt + pending_users: người dùng chờ duyệt recent_users: Người dùng mới nhất - search: Tìm kiếm toàn văn + search: Tìm kiếm nội dung single_user_mode: Máy chủ chỉ có 1 người software: Phần mềm space: Dung lượng lưu trữ - title: Thiết lập chung + title: Số liệu total_users: tổng số người dùng trends: Xu hướng week_interactions: tương tác trong tuần này week_users_active: hoạt động trong tuần này week_users_new: đăng ký mới trong tuần - whitelist_mode: Giới hạn mạng liên kết + whitelist_mode: Giới hạn mạng liên hợp domain_allows: - add_new: Máy chủ thuộc danh sách trắng - created_msg: Máy chủ đã được đưa vào danh sách trắng thành công - destroyed_msg: Máy chủ đã bị xóa khỏi danh sách trắng + add_new: Cho phép liên hợp với máy chủ + created_msg: Máy chủ đã được kích hoạt liên hợp thành công + destroyed_msg: Máy chủ đã bị ngưng liên hợp undo: Xóa khỏi danh sách trắng domain_blocks: - add_new: Chặn máy chủ mới - created_msg: Đang xử lý chặn máy chủ + add_new: Chặn máy chủ + created_msg: Đang tiến hành chặn máy chủ destroyed_msg: Đã thôi chặn máy chủ domain: Máy chủ edit: Chỉnh sửa máy chủ bị chặn @@ -361,9 +389,9 @@ vi: create: Tạo chặn hint: Chặn máy chủ sẽ không ngăn việc hiển thị tút của máy chủ đó trong cơ sở dữ liệu, nhưng sẽ khiến tự động áp dụng các phương pháp kiểm duyệt cụ thể trên các tài khoản đó. severity: - desc_html: "Tạm ẩn sẽ làm cho bài đăng của tài khoản trở nên vô hình đối với bất kỳ ai không theo dõi họ. Vô hiệu hóa sẽ xóa tất cả nội dung, phương tiện và dữ liệu khác của tài khoản. Sử dụng Cấm upload nếu bạn chỉ muốn cấm tải lên ảnh và video." + desc_html: "Ẩn sẽ làm cho bài đăng của tài khoản trở nên vô hình đối với bất kỳ ai không theo dõi họ. Vô hiệu hóa sẽ xóa tất cả nội dung, phương tiện và dữ liệu khác của tài khoản. Sử dụng Cấm upload nếu bạn chỉ muốn cấm tải lên ảnh và video." noop: Không hoạt động - silence: Tạm ẩn + silence: Ẩn suspend: Vô hiệu hóa title: Máy chủ bị chặn mới private_comment: Bình luận riêng @@ -377,13 +405,13 @@ vi: rejecting_media: từ chối các tập tin phương tiện truyền thông rejecting_reports: từ chối báo cáo severity: - silence: đã tạm ẩn + silence: bị ẩn suspend: bị vô hiệu hóa show: affected_accounts: other: "%{count} tài khoản trong cơ sở dữ liệu bị ảnh hưởng" retroactive: - silence: Những tài khoản tạm ẩn ở máy chủ này + silence: Những tài khoản bị ẩn ở máy chủ này suspend: Ngưng vô hiệu hóa các tài khoản ở máy chủ này title: Hủy chặn máy chủ %{domain} undo: Hủy bỏ @@ -391,16 +419,16 @@ vi: view: Xem máy chủ chặn email_domain_blocks: add_new: Thêm mới - created_msg: Đã thêm thành công e-mail vào danh sách đen + created_msg: Đã chặn địa chỉ email này delete: Xóa bỏ - destroyed_msg: Đã xóa thành công e-mail khỏi danh sách đen - domain: Máy chủ - empty: Chưa có máy chủ nào trong danh sách đen. + destroyed_msg: Đã bỏ chặn địa chỉ email này + domain: Địa chỉ email + empty: Chưa chặn địa chỉ email nào. from_html: từ %{domain} new: - create: Thêm máy chủ - title: Mục mới trong danh sách đen email - title: Danh sách đen email + create: Thêm địa chỉ + title: Chặn địa chỉ email mới + title: Địa chỉ email đã chặn instances: by_domain: Máy chủ delivery_available: Cho phép liên kết @@ -412,7 +440,7 @@ vi: title: Kiểm duyệt private_comment: Bình luận riêng public_comment: Bình luận công khai - title: Mạng liên kết + title: Mạng liên hợp total_blocked_by_us: Bị chặn bởi chúng ta total_followed_by_them: Được họ theo dõi total_followed_by_us: Được quản trị viên theo dõi @@ -426,8 +454,23 @@ vi: expired: Đã hết hạn title: Bộ lọc title: Lời mời + ip_blocks: + add_new: Chặn IP mới + created_msg: Đã chặn IP thành công + delete: Bỏ chặn + expires_in: + '1209600': 2 tuần + '15778476': 6 tháng + '2629746': 1 tháng + '31556952': 1 năm + '86400': 1 ngày + '94670856': 3 năm + new: + title: Chặn một IP mới + no_ip_block_selected: Bạn chưa chọn bất kỳ IP nào + title: Những IP bị chặn pending_accounts: - title: Tài khoản đang chờ xử lý (%{count}) + title: Tài khoản đang chờ xét duyệt (%{count}) relationships: title: Những mối liên hệ của %{acct} relays: @@ -458,11 +501,11 @@ vi: action_taken_by: Hành động được thực hiện bởi are_you_sure: Bạn có chắc không? assign_to_self: Giao cho tôi - assigned: Người điều hành được phân công + assigned: Phân công kiểm duyệt by_target_domain: Tên tài khoản bị báo cáo comment: - none: Không ai - created_at: Báo cáo + none: Không có mô tả + created_at: Báo cáo lúc mark_as_resolved: Đánh dấu là đã giải quyết mark_as_unresolved: Đánh dấu là chưa giải quyết notes: @@ -470,18 +513,18 @@ vi: create_and_resolve: Xử lý kiểm duyệt create_and_unresolve: Mở lại kèm ghi chú mới delete: Xóa bỏ - placeholder: Mô tả những hành động sai phạm của người này, mức độ xử lý và những cập nhật liên quan khác... + placeholder: Mô tả vi phạm của người này, mức xử lý và những cập nhật liên quan khác... reopen: Mở lại báo cáo report: 'Báo cáo #%{id}' - reported_account: Tài khoản bị báo xấu - reported_by: Báo xấu bởi - resolved: Đã giải quyết - resolved_msg: Giải quyết báo xấu thành công! + reported_account: Tài khoản bị báo cáo + reported_by: Báo cáo bởi + resolved: Đã xử lý xong + resolved_msg: Đã giải quyết báo cáo xong! status: Trạng thái title: Báo cáo unassign: Bỏ qua - unresolved: Chưa giải quyết - updated_at: Đã cập nhật + unresolved: Chờ xử lý + updated_at: Cập nhật lúc settings: activity_api_enabled: desc_html: Số lượng trạng thái được đăng tại địa phương, người dùng hoạt động và đăng ký mới trong nhóm hàng tuần @@ -514,7 +557,7 @@ vi: desc_html: Hiển thị trên nhiều trang. Kích cỡ tối thiểu 293 × 205px. Khi không được đặt, sử dụng linh vật mặc định Mastodon title: Logo máy chủ peers_api_enabled: - desc_html: Tên miền mà máy chủ này đã kết giao trong mạng liên kết + desc_html: Tên miền mà máy chủ này đã kết giao trong mạng liên hợp title: Danh sách công khai các máy chủ được phát hiện preview_sensitive_media: desc_html: Liên kết xem trước trên các trang web khác sẽ hiển thị hình thu nhỏ ngay cả khi phương tiện được đánh dấu là nhạy cảm @@ -540,7 +583,7 @@ vi: title: Chế độ đăng ký show_known_fediverse_at_about_page: desc_html: Nếu tắt, bảng tin sẽ chỉ hiển thị nội dung do người dùng của máy chủ này tạo ra - title: Bao gồm nội dung từ mạng liên kết trên bảng tin không được xác thực + title: Bao gồm nội dung từ mạng liên hợp trên bảng tin không được xác thực show_staff_badge: desc_html: Hiển thị huy hiệu nhân viên trên trang người dùng title: Hiển thị huy hiệu nhân viên @@ -564,7 +607,7 @@ vi: desc_html: Được sử dụng để xem trước thông qua OpenGraph và API. Khuyến nghị 1200x630px title: Hình thu nhỏ của máy chủ timeline_preview: - desc_html: Hiển thị liên kết đến dòng thời gian công khai trên trang đích và cho phép API truy cập vào dòng thời gian công khai mà không cần xác thực + desc_html: Hiển thị dòng thời gian công khai trên trang đích và cho phép API truy cập vào dòng thời gian công khai mà không cần xác thực title: Cho phép truy cập không xác thực vào dòng thời gian công cộng title: Cài đặt trang web trendable_by_default: @@ -586,28 +629,28 @@ vi: failed_to_execute: Không thể thực thi media: title: Bộ sưu tập - no_media: Không có ảnh hoặc video - no_status_selected: Không có tút nào thay đổi vì không có tút nào được chọn - title: Trạng thái tài khoản - with_media: Với ảnh hoặc video + no_media: Toàn bộ + no_status_selected: Bạn chưa chọn bất kỳ tút nào + title: Toàn bộ tút + with_media: Có ảnh hoặc video tags: accounts_today: Sử dụng hôm nay - accounts_week: Sử dụng trong tuần này - breakdown: Phân tích số lượt sử dụng hôm nay + accounts_week: Sử dụng trong tuần + breakdown: Thống kê số lượt sử dụng hôm nay context: Bối cảnh - directory: Đã phân loại - in_directory: "%{count} trong phân loại" - last_active: Sử dụng gần đây + directory: Có trên tiểu sử + in_directory: "%{count} có trên tiểu sử" + last_active: Hôm nay most_popular: Phổ biến nhất - most_recent: Vừa mới sử dụng + most_recent: Gần đây name: Hashtag review: Phê duyệt reviewed: Đã phê duyệt title: Hashtag trending_right_now: Xu hướng - unique_uses_today: "%{count} đăng ngày hôm nay" - unreviewed: Chưa được xem xét - updated_msg: Cài đặt hashtag được cập nhật thành công + unique_uses_today: "%{count} tút dùng hôm nay" + unreviewed: Chưa phê duyệt + updated_msg: Hashtag đã được cập nhật thành công title: Quản trị warning_presets: add_new: Thêm mới @@ -616,12 +659,12 @@ vi: title: Quản lý cảnh báo cài sẵn admin_mailer: new_pending_account: - body: Các chi tiết của tài khoản mới dưới đây. Bạn có thể phê duyệt hoặc từ chối ứng dụng này. - subject: Tài khoản mới được xem xét trên %{instance} (%{username}) + body: Thông tin chi tiết của tài khoản mới ở phía dưới. Bạn có thể phê duyệt hoặc từ chối người này. + subject: Tài khoản chờ xét duyệt trên %{instance} (%{username}) new_report: - body: "%{reporter} đã báo cáo %{target}" + body: "%{reporter} vừa báo cáo %{target}" body_remote: Ai đó từ %{domain} đã báo cáo %{target} - subject: Báo cáo mới cho %{instance} (# %{id}) + subject: "(%{instance}) Báo cáo #%{id}" new_trending_tag: body: 'Hashtag # %{name} đang là xu hướng nhưng chưa được kiểm duyệt. Nó sẽ không được hiển thị công khai trừ khi bạn cho phép. Bỏ qua nếu bạn không bao giờ muốn thấy nó xuất hiện.' subject: Hashtag mới được xem xét trên %{instance} (# %{name}) @@ -633,22 +676,22 @@ vi: hint_html: Nếu bạn muốn chuyển từ máy chủ khác sang máy chủ này, tại đây bạn có thể tạo bí danh, điều này là bắt buộc trước khi bạn có thể tiến hành chuyển người theo dõi từ tài khoản cũ sang tài khoản này. Hành động này của chính nó là vô hại và có thể đảo ngược. Việc di chuyển tài khoản được bắt đầu từ tài khoản cũ. remove: Bỏ liên kết bí danh appearance: - advanced_web_interface: Giao diện web nâng cao - advanced_web_interface_hint: 'Nếu bạn muốn tận dụng toàn bộ chiều rộng màn hình của mình, giao diện web nâng cao cho phép bạn cấu hình thành nhiều cột khác nhau. Bao gồm: Bảng tin, Thông báo, Mạng liên kết, cũng như mọi danh sách và hashtag.' + advanced_web_interface: Bố cục + advanced_web_interface_hint: 'Giao diện nhiều cột cho phép bạn chuyển đổi bố cục hiển thị thành nhiều cột khác nhau. Bao gồm: Bảng tin, thông báo, thế giới, cũng như danh sách và hashtag. Rất thích hợp nếu bạn sử dụng màn hình rộng.' animations_and_accessibility: Nâng cao confirmation_dialogs: Hộp thoại xác nhận discovery: Khám phá localization: - body: Mastodon được dịch bởi Hồ Nhất Duy. + body: Mastodon Tiếng Việt được dịch bởi Hồ Nhất Duy. guide_link: https://mas.to/@duy guide_link_text: Đây là trang cá nhân của anh ấy. sensitive_content: Nội dung nhạy cảm - toot_layout: Bố cục Tút + toot_layout: Tút application_mailer: notification_preferences: Thay đổi tùy chọn email salutation: "%{name}," settings: 'Thay đổi tùy chọn email: %{link}' - view: 'Xem:' + view: 'Chi tiết:' view_profile: Xem trang cá nhân view_status: Xem tút applications: @@ -671,8 +714,11 @@ vi: prefix_sign_up: Tham gia Mastodon ngay hôm nay! suffix: Với tài khoản, bạn sẽ có thể theo dõi mọi người, đăng tút và nhắn tin với người dùng từ bất kỳ máy chủ Mastodon khác! didnt_get_confirmation: Gửi lại email xác thực? + dont_have_your_security_key: Bạn có khóa bảo mật chưa? forgot_password: Quên mật khẩu invalid_reset_password_token: Mã đặt lại mật khẩu không hợp lệ hoặc hết hạn. Vui lòng yêu cầu một cái mới. + link_to_otp: Nhập mã xác thực từ điện thoại hoặc mã phục hồi + link_to_webauth: Nhập khóa bảo mật từ thiết bị login: Đăng nhập logout: Đăng xuất migrate_account: Sử dụng một tài khoản khác @@ -694,10 +740,11 @@ vi: status: account_status: Trạng thái tài khoản confirming: Đang chờ xác thực email. - functional: Tài khoản của bạn đã xác thực và có thể sử dụng. + functional: Tài khoản của bạn đã được xác thực. pending: Đơn đăng ký của bạn đang chờ phê duyệt. Điều này có thể mất một thời gian. Bạn sẽ nhận được email nếu đơn đăng ký của bạn được chấp thuận. redirecting_to: Tài khoản của bạn không hoạt động vì hiện đang chuyển hướng đến %{acct}. trouble_logging_in: Gặp sự cố khi đăng nhập? + use_security_key: Dùng khóa bảo mật authorize_follow: already_following: Bạn đang theo dõi người dùng này already_requested: Bạn vừa gửi một yêu cầu theo dõi tới người dùng này @@ -714,7 +761,7 @@ vi: confirm: Tiếp tục hint_html: "Mẹo: Chúng tôi sẽ không hỏi lại mật khẩu của bạn sau này." invalid_password: Mật khẩu không hợp lệ - prompt: Xác nhận mật khẩu để tiếp tục + prompt: Nhập mật khẩu để tiếp tục crypto: errors: invalid_key: không phải là mã khóa Ed25519 hoặc Curve25519 đúng @@ -722,6 +769,7 @@ vi: date: formats: default: "%b.%-m.%Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}h" @@ -754,7 +802,7 @@ vi: username_available: Tên người dùng của bạn sẽ có thể đăng ký lại username_unavailable: Tên người dùng của bạn sẽ không thể đăng ký mới directories: - directory: Danh sách thành viên + directory: Kết bạn explanation: Khám phá người dùng dựa trên sở thích của họ explore_mastodon: Khám phá %{title} domain_validator: @@ -764,7 +812,7 @@ vi: '403': Bạn không có quyền xem trang này. '404': Trang này chưa được tạo. '406': Trang này không thể hiển thị do lỗi định dạng. - '410': Trang này đã bị xóa. + '410': Trang này đã bị xóa '422': content: Xác minh bảo mật thất bại. Bạn đang chặn cookie? title: Xác minh bảo mật thất bại @@ -802,7 +850,7 @@ vi: home: Bảng tin notifications: Thông báo public: Tin công khai - thread: Cuộc trò chuyện + thread: Thảo luận edit: title: Chỉnh sửa bộ lọc errors: @@ -821,7 +869,7 @@ vi: trending_now: Xu hướng generic: all: Tất cả - changes_saved_msg: Thay đổi được lưu thành công! + changes_saved_msg: Đã cập nhật thay đổi xong! copy: Sao chép delete: Xóa no_batch_actions_available: Không có sẵn hành động hàng loạt trên trang này @@ -936,7 +984,7 @@ vi: digest: action: Xem toàn bộ thông báo body: Dưới đây là những tin nhắn bạn đã bỏ lỡ kể từ lần truy cập trước vào %{since} - mention: "%{name} vừa nhắc đến bạn trong:" + mention: "%{name} nhắc đến bạn trong:" new_followers_summary: other: Ngoài ra, bạn đã có %{count} người theo dõi mới trong khi đi chơi! Ngạc nhiên chưa! subject: @@ -967,7 +1015,7 @@ vi: notifications: email_events: Email email_events_hint: 'Chọn những hoạt động sẽ gửi thông báo qua email:' - other_settings: Những thông báo khác + other_settings: Thông báo khác number: human: decimal_units: @@ -978,6 +1026,14 @@ vi: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: Nhập mã được tạo bởi ứng dụng xác thực của bạn để xác nhận + description_html: Nếu kích hoạt xác thực hai bước thông qua ứng dụng, bạn sẽ đăng nhập bằng mã token được tạo bởi chính điện thoại của bạn. + enable: Kích hoạt + instructions_html: "Quét mã QR bằng Google Authenticator hoặc một ứng dụng TOTP tương tự trên điện thoại của bạn. Kể từ bây giờ, ứng dụng đó sẽ tạo những token để bạn đăng nhập." + manual_instructions: 'Nếu bạn không thể quét mã QR, đây sẽ là dòng chữ gợi ý:' + setup: Thiết lập + wrong_code: Mã vừa nhập không chính xác! Thời gian máy chủ và thời gian thiết bị chính xác chưa? pagination: newer: Mới hơn next: Kế tiếp @@ -986,11 +1042,11 @@ vi: truncate: "…" polls: errors: - already_voted: Bạn đã bình chọn trong cuộc thăm dò này + already_voted: Bạn đã bình chọn rồi duplicate_options: chứa các lựa chọn trùng lặp duration_too_long: quá xa so với thời điểm hiện tại duration_too_short: quá sớm - expired: Cuộc thăm dò đã kết thúc + expired: Cuộc bình chọn đã kết thúc invalid_choice: Lựa chọn không tồn tại over_character_limit: độ dài tối đa %{max} ký tự too_few_options: phải có nhiều hơn một mục @@ -1005,15 +1061,15 @@ vi: unrecognized_emoji: không phải là emoji relationships: activity: Hoạt động tài khoản - dormant: Không có tương tác - followers: Người này đang theo dõi bạn - following: Bạn đang theo dõi người này + dormant: Chưa tương tác + followers: Họ theo dõi bạn + following: Bạn theo dõi họ invited: Người bạn mời đăng ký last_active: Hoạt động lần cuối - most_recent: Gần đây nhất - moved: Dời sang - mutual: Bằng Hữu - primary: Tài khoản chính + most_recent: Mới nhất + moved: Đã xóa + mutual: Cả hai + primary: Bình thường relationship: Mối quan hệ remove_selected_domains: Xóa hết người theo dõi từ các máy chủ đã chọn remove_selected_followers: Xóa những người theo dõi đã chọn @@ -1022,7 +1078,7 @@ vi: remote_follow: acct: Nhập địa chỉ Mastodon của bạn (tên@máy chủ) missing_resource: Không tìm thấy URL chuyển hướng cho tài khoản của bạn - no_account_html: Nếu chưa có tài khoản, bạn hãy đăng ký tại đây + no_account_html: Nếu chưa có tài khoản, hãy đăng ký proceed: Theo dõi prompt: 'Bạn vừa yêu cầu theo dõi:' reason_html: "Tại sao bước này là cần thiết? %{instance} có thể không phải là máy chủ nơi bạn đã đăng ký, vì vậy chúng tôi cần chuyển hướng bạn đến máy chủ của bạn trước." @@ -1041,7 +1097,7 @@ vi: over_total_limit: Bạn đã vượt quá giới hạn %{limit} của các tút được lên lịch too_soon: Ngày lên lịch phải trong tương lai sessions: - activity: Hoạt động cuối + activity: Gần đây nhất browser: Trình duyệt browsers: alipay: Alipay @@ -1090,7 +1146,7 @@ vi: back: Quay lại Mastodon delete: Xóa tài khoản development: Lập trình - edit_profile: Chỉnh sửa trang cá nhân + edit_profile: Giới thiệu bản thân export: Xuất dữ liệu featured_tags: Hashtags thường dùng identity_proofs: Bằng chứng nhận dạng @@ -1102,6 +1158,7 @@ vi: profile: Trang cá nhân relationships: Lượt theo dõi two_factor_authentication: Xác thực hai bước + webauthn_authentication: Khóa bảo mật spam_check: spam_detected: Đây là một báo cáo tự động. Đã phát hiện thư rác. statuses: @@ -1132,9 +1189,11 @@ vi: other: "%{count} người" total_votes: other: "%{count} bình chọn" - vote: Cuộc thăm dò - show_more: Xem thêm - show_thread: Xem chủ đề thảo luận + vote: Bình chọn + show_more: Đọc thêm + show_newer: Mới hơn + show_older: Cũ hơn + show_thread: Xem thảo luận sign_in_to_participate: Đăng nhập để trả lời chủ đề này title: '%{name}: "%{quote}"' visibilities: @@ -1143,7 +1202,7 @@ vi: public: Công khai public_long: Ai cũng có thể thấy unlisted: Mở - unlisted_long: Ai cũng có thể xem nhưng không hiện trên bảng tin máy chủ + unlisted_long: Công khai nhưng không hiện trên bảng tin máy chủ stream_entries: pinned: Tút được ghim reblogged: chia sẻ @@ -1151,7 +1210,9 @@ vi: tags: does_not_match_previous_name: không khớp với tên trước terms: - body_html: "

Chính sách bảo mật

Chúng tôi thu thập những thông tin gì?

  • Thông tin tài khoản cơ bản: Nếu bạn đăng ký trên máy chủ này, bạn phải cung cấp tên người dùng, địa chỉ email và mật khẩu. Bạn cũng có thể tùy chọn bổ sung tên hiển thị, mô tả, ảnh đại diện, ảnh bìa. Tên người dùng, tên hiển thị, mô tả, ảnh hồ sơ và ảnh bìa luôn được hiển thị công khai.
  • Tút, lượt theo dõi và thông tin công khai khác: Danh sách những người bạn theo dõi được liệt kê công khai, cũng tương tự như danh sách những người theo dõi bạn. Khi bạn gửi tin nhắn, ngày giờ và ứng dụng sử dụng được lưu trữ. Tin nhắn có thể chứa tệp đính kèm hình ảnh và video. Bài viết công khai và bài viết đóng sẽ hiển thị công khai. Khi bạn đăng một tút trên trang cá nhân của bạn, đó là thông tin công khai. Tút của bạn được gửi đến những người theo dõi của bạn, điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và sẽ có các bản sao được lưu trữ ở đó. Khi bạn xóa bài viết, bản sao từ những người theo dõi của bạn cũng bị xóa theo. Hành động chia sẻ hoặc thích một tút luôn luôn là công khai.
  • Tin nhắn và tút chỉ dành cho người theo dõi: Tất cả tút được lưu trữ và xử lý trên máy chủ. Các tút chỉ dành cho người theo dõi được gửi đến những người theo dõi và người dùng của bạn được gắn thẻ trong đó. Còn các tin nhắn chỉ được gửi cho người dùng được gắn thẻ trong đó. Điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và có các bản sao được lưu trữ ở đó. Chúng tôi khuyến nghị chỉ cho những người được ủy quyền truy cập vào đó, nhưng không phải máy chủ nào cũng làm như vậy. Do đó, điều quan trọng là phải xem xét các máy chủ của người theo dõi của bạn. Bạn có thể thiết lập phê duyệt và từ chối người theo dõi mới theo cách thủ công trong cài đặt. Xin lưu ý rằng quản trị viên máy chủ của bạn và bất kỳ máy chủ của người nhận nào cũng có thể xem các tin nhắn Người nhận tin nhắn có thể chụp màn hình, sao chép hoặc chia sẻ lại chúng. Không nên chia sẻ bất kỳ thông tin rủi ro nào trên Mastodon.
  • Địa chỉ IP và siêu dữ liệu khác: Khi bạn đăng nhập, chúng tôi ghi nhớ địa chỉ IP bạn đăng nhập cũng như tên trình duyệt của bạn. Tất cả các phiên đăng nhập sẽ để bạn xem xét và hủy bỏ trong phần cài đặt. Địa chỉ IP sử dụng được lưu trữ tối đa 12 tháng. Chúng tôi cũng có thể giữ lại nhật ký máy chủ bao gồm địa chỉ IP của những yêu cầu truy cập máy chủ của chúng tôi.

Chúng tôi sử dụng thông tin của bạn để làm gì?

Bất kỳ thông tin nào chúng tôi thu thập từ bạn là:

  • Để cung cấp các chức năng cốt lõi của Mastodon. Bạn chỉ có thể tương tác với nội dung của người khác và đăng nội dung của riêng bạn khi bạn đã đăng nhập. Ví dụ: bạn có thể theo dõi người khác để xem các tút của họ trong bảng tin cá nhân hóa của bạn.
  • Để hỗ trợ kiểm duyệt cộng đồng, ví dụ so sánh địa chỉ IP của bạn với các địa chỉ đã biết khác để xác định hacker hoặc vi phạm khác.
  • Địa chỉ email bạn cung cấp chỉ được sử dụng để gửi cho bạn thông tin, thông báo về những người khác tương tác với nội dung của bạn hoặc gửi tin nhắn cho bạn hoặc để trả lời các câu hỏi cũng như các yêu cầu khác từ chính bạn.

Chúng tôi bảo vệ thông tin của bạn như thế nào?

Chúng tôi thực hiện nhiều biện pháp bảo mật để duy trì sự an toàn khi bạn nhập, gửi hoặc truy cập thông tin cá nhân của bạn. Một vài trong số đó như là biện pháp kiểm soát phiên đăng nhập của bạn, lưu lượng giữa các ứng dụng và API của bạn, bảo mật bằng SSL và băm nhỏ mật khẩu nhờ thuật toán một chiều mạnh mẽ. Bạn có thể kích hoạt xác thực hai yếu tố để tiếp tục truy cập an toàn vào tài khoản của mình.


Chính sách lưu giữ dữ liệu của chúng tôi thì thế nào?

Chúng tôi sẽ thực hiện:

  • Giữ lại nhật ký máy chủ chứa địa chỉ IP của tất cả các yêu cầu đến máy chủ này, cho đến khi các nhật ký đó được lưu giữ, không quá 90 ngày.
  • Giữ lại các địa chỉ IP được liên kết với người dùng đã đăng ký không quá 12 tháng.

Bạn có thể tải xuống một bản sao nội dung lưu trữ của bạn, bao gồm các tút, tệp đính kèm phương tiện, ảnh đại diện và hảnh bìa.

Bạn có thể xóa tài khoản của mình bất cứ lúc nào.


Chúng tôi có sử dụng cookie không?

Có. Cookie là các tệp nhỏ mà một trang web hoặc nhà cung cấp dịch vụ internet chuyển vào ổ cứng máy tính của bạn thông qua trình duyệt Web (nếu bạn cho phép). Những cookie này cho phép trang web nhận ra trình duyệt của bạn và nếu bạn có tài khoản đã đăng ký, nó sẽ liên kết với tài khoản đã đăng ký của bạn.

Chúng tôi sử dụng cookie để hiểu và lưu các tùy chọn của bạn cho các lần truy cập trong tương lai.


Chúng tôi có để lộ bất cứ thông tin nào ra bên ngoài không?

Chúng tôi thề danh dự không bán, trao đổi hoặc chuyển nhượng thông tin nhận dạng cá nhân của bạn cho bên thứ ba. Trừ khi bên thứ ba đó đang hỗ trợ chúng tôi điều hành Mastodon, tiến hành kinh doanh hoặc phục vụ bạn, miễn là các bên đó đồng ý giữ bí mật thông tin này. Chúng tôi cũng có thể tiết lộ thông tin của bạn khi chúng tôi tin rằng việc công bố là để tuân thủ luật pháp, thực thi quy tắc máy chủ của chúng tôi hoặc bảo vệ quyền, tài sản hợp pháp hoặc sự an toàn của chúng tôi hoặc của ai đó.

Nội dung công khai của bạn có thể được tải xuống bởi các máy chủ khác trong mạng liên kết. Các tút công khai và chỉ dành cho người theo dõi của bạn được gửi đến các máy chủ nơi người theo dõi của bạn thuộc về và tin nhắn được gửi đến máy chủ của người nhận, cho đến khi những người theo dõi hoặc người nhận đó chuyển sang một máy chủ khác.

Khi bạn cho phép một ứng dụng sử dụng tài khoản của mình, tùy thuộc vào phạm vi quyền bạn phê duyệt, ứng dụng có thể truy cập thông tin trang cá nhân, danh sách người theo dõi, danh sách của bạn, tất cả tút và lượt thích của bạn. Các ứng dụng không bao giờ có thể truy cập địa chỉ e-mail hoặc mật khẩu của bạn.


Giới hạn trẻ em sử dụng

Nếu máy chủ này ở EU hoặc EEA: Trang web của chúng tôi, các sản phẩm và dịch vụ đều hướng đến những người trên 16 tuổi. Nếu bạn dưới 16 tuổi, theo yêu cầu của GDPR (Quy định bảo vệ dữ liệu chung) thì không được sử dụng trang web này.

Nếu máy chủ này ở Hoa Kỳ: Trang web của chúng tôi, các sản phẩm và dịch vụ đều hướng đến những người trên 13 tuổi. Nếu bạn dưới 13 tuổi, theo yêu cầu của COPPA (Đạo luật bảo vệ quyền riêng tư trực tuyến của trẻ em) thì không được sử dụng trang web này.

Quy định pháp luật có thể khác nhau nếu máy chủ này ở khu vực địa lý khác.


Cập nhật thay đổi

Nếu có thay đổi chính sách bảo mật, chúng tôi sẽ đăng những thay đổi đó ở mục này.

Tài liệu này phát hành dưới hình thức CC-BY-SA. Nó được cập nhật lần cuối vào ngày 7 tháng 3 năm 2018.

Được phát triển từ Nghị luận chính sách bảo mật .

\n" + body_html: '

Chính sách bảo mật

Chúng tôi thu thập những thông tin gì?

  • Thông tin tài khoản cơ bản: Nếu bạn đăng ký trên máy chủ này, bạn phải cung cấp tên người dùng, địa chỉ email và mật khẩu. Bạn cũng có thể tùy chọn bổ sung tên hiển thị, mô tả, ảnh đại diện, ảnh bìa. Tên người dùng, tên hiển thị, mô tả, ảnh hồ sơ và ảnh bìa luôn được hiển thị công khai.
  • Tút, lượt theo dõi và thông tin công khai khác: Danh sách những người bạn theo dõi được liệt kê công khai, cũng tương tự như danh sách những người theo dõi bạn. Khi bạn gửi tin nhắn, ngày giờ và ứng dụng sử dụng được lưu trữ. Tin nhắn có thể chứa tệp đính kèm hình ảnh và video. Bài viết công khai và bài viết đóng sẽ hiển thị công khai. Khi bạn đăng một tút trên trang cá nhân của bạn, đó là thông tin công khai. Tút của bạn được gửi đến những người theo dõi của bạn, điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và sẽ có các bản sao được lưu trữ ở đó. Khi bạn xóa bài viết, bản sao từ những người theo dõi của bạn cũng bị xóa theo. Hành động chia sẻ hoặc thích một tút luôn luôn là công khai.
  • Tin nhắn và tút chỉ dành cho người theo dõi: Tất cả tút được lưu trữ và xử lý trên máy chủ. Các tút chỉ dành cho người theo dõi được gửi đến những người theo dõi và người dùng của bạn được gắn thẻ trong đó. Còn các tin nhắn chỉ được gửi cho người dùng được gắn thẻ trong đó. Điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và có các bản sao được lưu trữ ở đó. Chúng tôi khuyến nghị chỉ cho những người được ủy quyền truy cập vào đó, nhưng không phải máy chủ nào cũng làm như vậy. Do đó, điều quan trọng là phải xem xét các máy chủ của người theo dõi của bạn. Bạn có thể thiết lập phê duyệt và từ chối người theo dõi mới theo cách thủ công trong cài đặt. Xin lưu ý rằng quản trị viên máy chủ của bạn và bất kỳ máy chủ của người nhận nào cũng có thể xem các tin nhắn. Người nhận tin nhắn có thể chụp màn hình, sao chép hoặc chia sẻ lại chúng. Không nên chia sẻ bất kỳ thông tin rủi ro nào trên Mastodon.
  • Địa chỉ IP và siêu dữ liệu khác: Khi bạn đăng nhập, chúng tôi ghi nhớ địa chỉ IP bạn đăng nhập cũng như tên trình duyệt của bạn. Tất cả các phiên đăng nhập sẽ để bạn xem xét và hủy bỏ trong phần cài đặt. Địa chỉ IP sử dụng được lưu trữ tối đa 12 tháng. Chúng tôi cũng có thể giữ lại nhật ký máy chủ bao gồm địa chỉ IP của những yêu cầu truy cập máy chủ của chúng tôi.

Chúng tôi sử dụng thông tin của bạn để làm gì?

Bất kỳ thông tin nào chúng tôi thu thập từ bạn là:

  • Để cung cấp các chức năng cốt lõi của Mastodon. Bạn chỉ có thể tương tác với nội dung của người khác và đăng nội dung của riêng bạn khi bạn đã đăng nhập. Ví dụ: bạn có thể theo dõi người khác để xem các tút của họ trong bảng tin cá nhân hóa của bạn.
  • Để hỗ trợ kiểm duyệt cộng đồng, ví dụ so sánh địa chỉ IP của bạn với các địa chỉ đã biết khác để xác định hacker hoặc vi phạm khác.
  • Địa chỉ email bạn cung cấp chỉ được sử dụng để gửi cho bạn thông tin, thông báo về những người khác tương tác với nội dung của bạn hoặc gửi tin nhắn cho bạn hoặc để trả lời các câu hỏi cũng như các yêu cầu khác từ chính bạn.

Chúng tôi bảo vệ thông tin của bạn như thế nào?

Chúng tôi thực hiện nhiều biện pháp bảo mật để duy trì sự an toàn khi bạn nhập, gửi hoặc truy cập thông tin cá nhân của bạn. Một vài trong số đó như là biện pháp kiểm soát phiên đăng nhập của bạn, lưu lượng giữa các ứng dụng và API của bạn, bảo mật bằng SSL và băm nhỏ mật khẩu nhờ thuật toán một chiều mạnh mẽ. Bạn có thể kích hoạt xác thực hai yếu tố để tiếp tục truy cập an toàn vào tài khoản của mình.


Chúng tôi lưu trữ dữ liệu như thế nào?

Chúng tôi sẽ thực hiện:

  • Giữ lại nhật ký máy chủ chứa địa chỉ IP của tất cả các yêu cầu đến máy chủ này, cho đến khi các nhật ký đó được lưu giữ, không quá 90 ngày.
  • Giữ lại các địa chỉ IP được liên kết với người dùng đã đăng ký không quá 12 tháng.

Bạn có thể tải xuống một bản sao nội dung lưu trữ của bạn, bao gồm các tút, tệp đính kèm phương tiện, ảnh đại diện và hảnh bìa.

Bạn có thể xóa tài khoản của mình bất cứ lúc nào.


Chúng tôi có sử dụng cookie không?

Có. Cookie là các tệp nhỏ mà một trang web hoặc nhà cung cấp dịch vụ internet chuyển vào ổ cứng máy tính của bạn thông qua trình duyệt Web (nếu bạn cho phép). Những cookie này cho phép trang web nhận ra trình duyệt của bạn và nếu bạn có tài khoản đã đăng ký, nó sẽ liên kết với tài khoản đã đăng ký của bạn.

Chúng tôi sử dụng cookie để hiểu và lưu các tùy chọn của bạn cho các lần truy cập trong tương lai.


Chúng tôi có để lộ bất cứ thông tin nào ra bên ngoài không?

Chúng tôi thề danh dự không bán, trao đổi hoặc chuyển nhượng thông tin nhận dạng cá nhân của bạn cho bên thứ ba. Trừ khi bên thứ ba đó đang hỗ trợ chúng tôi điều hành Mastodon, tiến hành kinh doanh hoặc phục vụ bạn, miễn là các bên đó đồng ý giữ bí mật thông tin này. Chúng tôi cũng có thể tiết lộ thông tin của bạn khi chúng tôi tin rằng việc công bố là để tuân thủ luật pháp, thực thi quy tắc máy chủ của chúng tôi hoặc bảo vệ quyền, tài sản hợp pháp hoặc sự an toàn của chúng tôi hoặc của ai đó.

Nội dung công khai của bạn có thể được tải xuống bởi các máy chủ khác trong mạng liên kết. Các tút công khai và chỉ dành cho người theo dõi của bạn được gửi đến các máy chủ nơi người theo dõi của bạn thuộc về và tin nhắn được gửi đến máy chủ của người nhận, cho đến khi những người theo dõi hoặc người nhận đó chuyển sang một máy chủ khác.

Khi bạn cho phép một ứng dụng sử dụng tài khoản của mình, tùy thuộc vào phạm vi quyền bạn phê duyệt, ứng dụng có thể truy cập thông tin trang cá nhân, danh sách người theo dõi, danh sách của bạn, tất cả tút và lượt thích của bạn. Các ứng dụng không bao giờ có thể truy cập địa chỉ e-mail hoặc mật khẩu của bạn.


Giới hạn trẻ em sử dụng

Nếu máy chủ này ở EU hoặc EEA: Trang web của chúng tôi, các sản phẩm và dịch vụ đều hướng đến những người trên 16 tuổi. Nếu bạn dưới 16 tuổi, theo yêu cầu của GDPR (Quy định bảo vệ dữ liệu chung) thì không được sử dụng trang web này.

Nếu máy chủ này ở Hoa Kỳ: Trang web của chúng tôi, các sản phẩm và dịch vụ đều hướng đến những người trên 13 tuổi. Nếu bạn dưới 13 tuổi, theo yêu cầu của COPPA (Đạo luật bảo vệ quyền riêng tư trực tuyến của trẻ em) thì không được sử dụng trang web này.

Quy định pháp luật có thể khác nhau nếu máy chủ này ở khu vực địa lý khác.


Cập nhật thay đổi

Nếu có thay đổi chính sách bảo mật, chúng tôi sẽ đăng những thay đổi đó ở mục này.

Tài liệu này phát hành dưới hình thức CC-BY-SA. Nó được cập nhật lần cuối vào ngày 7 tháng 3 năm 2018.

Được hoàn thiện từ Discourse.

+ +' title: "%{instance} Điều khoản dịch vụ và chính sách bảo mật" themes: contrast: Mastodon (Độ tương phản cao) @@ -1159,24 +1220,23 @@ vi: mastodon-light: Mastodon (Sáng) time: formats: - default: "%b.%d.%y %H:%M" - month: "%b.%y" + default: "%d.%m.%Y %H:%M" + month: "%b %Y" two_factor_authentication: - code_hint: Nhập mã được tạo bởi ứng dụng xác thực của bạn để xác nhận - description_html: Nếu bạn kích hoạt xác thực hai bước, mã xác thực đăng nhập sẽ được tạo ra từ điện thoại của bạn. + add: Thêm disable: Vô hiệu hóa - enable: Kích hoạt + disabled_success: Đã vô hiệu hóa xác thực hai bước + edit: Sửa enabled: Đã kích hoạt xác thực hai bước enabled_success: Xác thực hai bước được kích hoạt thành công generate_recovery_codes: Tạo mã khôi phục - instructions_html: "Quét mã QR này vào Google Authenticator hoặc ứng dụng TOTP tương tự trên điện thoại của bạn. Từ giờ trở đi, ứng dụng đó sẽ tạo mã thông báo mà bạn sẽ phải nhập khi đăng nhập." lost_recovery_codes: Mã khôi phục cho phép bạn lấy lại quyền truy cập vào tài khoản của mình nếu bạn mất điện thoại. Nếu bạn bị mất mã khôi phục, bạn có thể tạo lại chúng ở đây. Mã khôi phục cũ của bạn sẽ bị vô hiệu. - manual_instructions: 'Nếu bạn không thể quét mã QR và cần nhập thủ công, đây là mã bí mật:' + methods: Phương pháp xác thực + otp: Ứng dụng xác thực recovery_codes: Mã phục hồi dự phòng recovery_codes_regenerated: Mã khôi phục được phục hồi thành công recovery_instructions_html: Nếu bạn bị mất điện thoại, hãy sử dụng một trong các mã khôi phục bên dưới để lấy lại quyền truy cập vào tài khoản của mình. Giữ mã khôi phục an toàn. Ví dụ, bạn có thể in chúng ra giấy. - setup: Thiết lập - wrong_code: Mã vừa nhập không hợp lệ! Thời gian máy chủ và thời gian thiết bị có đúng không? + webauthn: Khóa bảo mật user_mailer: backup_ready: explanation: Bạn đã yêu cầu sao lưu toàn bộ tài khoản Mastodon của mình. Bây giờ có thể tải về! @@ -1190,20 +1250,23 @@ vi: title: Đăng nhập warning: explanation: - disable: Nếu tài khoản của bạn bị đình chỉ, dữ liệu tài khoản của bạn vẫn còn nguyên, nhưng bạn không thể thực hiện bất kỳ hành động nào cho đến khi được mở khóa. - silence: Nếu tài khoản của bạn bị tạm ẩn, bạn có thể bị loại khỏi các bảng tin công khai, chỉ những người đã theo dõi bạn mới thấy tút của bạn. Tuy nhiên, những người khác vẫn có thể tiếp tục theo dõi bạn. - suspend: Tài khoản của bạn đã bị vô hiệu hóa. Tất cả tút và tập tin đã tải lên của bạn sẽ bị xóa khỏi máy chủ này lẫn các máy chủ nơi bạn có người theo dõi. + disable: Bạn bị cấm đăng nhập tài khoản. Tuy nhiên, trang cá nhân và dữ liệu của bạn vẫn sẽ được giữ nguyên. + sensitive: Ảnh và video tải lên của bạn sẽ bị đánh dấu là nhạy cảm. + silence: Bạn vẫn có thể sử dụng tài khoản của bạn. Tuy nhiên, chỉ có những người đang theo dõi bạn mới có thể thấy tút của bạn. Bạn cũng sẽ bị loại khỏi danh sách của một số người. Những người khác vẫn có thể bắt đầu theo dõi bạn bình thường. + suspend: Tài khoản của bạn đã bị vô hiệu hóa. Tất cả tút và tập tin mà bạn đã tải lên sẽ không thể truy cập được nữa. Bạn vẫn có thể đăng nhập để yêu cầu tải về bản sao dữ liệu của bạn. Tuy nhiên, chúng tôi sẽ giữ lại một vài dữ liệu để ngăn ngừa bạn trốn tránh trách nhiệm. get_in_touch: Bạn có thể trả lời e-mail này để liên hệ với đội ngũ của %{instance}. - review_server_policies: Xem lại chính sách máy chủ + review_server_policies: Xem lại quy tắc của máy chủ statuses: 'Cụ thể, cho:' subject: disable: Tài khoản %{acct} của bạn đã bị vô hiệu hóa none: Cảnh báo cho %{acct} + sensitive: Ảnh và video tải lên của %{acct} sẽ bị đánh dấu là nhạy cảm silence: Tài khoản %{acct} của bạn đã bị tạm ẩn suspend: Tài khoản %{acct} của bạn đã bị vô hiệu hóa title: disable: Tài khoản bị đóng băng none: Cảnh báo + sensitive: Ảnh và video của bạn sẽ bị đánh dấu nhạy cảm silence: Tài khoản bị tạm ẩn suspend: Toài khoản bị vô hiệu hóa welcome: @@ -1217,16 +1280,18 @@ vi: review_preferences_action: Tùy chỉnh giao diện review_preferences_step: Tùy chỉnh mọi thứ! Chẳng hạn như chọn loại email nào bạn muốn nhận hoặc trạng thái tút mà bạn muốn sử dụng mặc định. Hãy tắt tự động phát GIF nếu bạn hay bị chóng mặt. subject: Chào mừng đến với Mastodon - tip_federated_timeline: Mạng liên kết là một dạng "liên hợp quốc" của Mastodon. Hiểu một cách đơn giản, nó là những người bạn đã theo dõi từ các máy chủ khác. - tip_following: Theo mặc định, bạn sẽ theo dõi (các) quản trị viên máy chủ của bạn. Để tìm những người thú vị hơn, hãy xem qua bảng tin và mạng liên kết. + tip_federated_timeline: Mạng liên hợp là một dạng "liên hợp quốc" của Mastodon. Hiểu một cách đơn giản, nó là những người bạn đã theo dõi từ các máy chủ khác. + tip_following: Theo mặc định, bạn sẽ theo dõi (các) quản trị viên máy chủ của bạn. Để tìm những người thú vị hơn, hãy xem qua cộng đồng và thế giới. tip_local_timeline: Bảng tin là nơi hiện lên những tút công khai của thành viên %{instance}. Họ là những người hàng xóm trực tiếp của bạn! tip_mobile_webapp: Nếu trình duyệt trên điện thoại di động của bạn thêm Mastodon vào màn hình chính, bạn có thể nhận được thông báo đẩy. Nó hoạt động gần giống như một app điện thoại! tips: Mẹo title: Xin chào %{name}! users: + blocked_email_provider: Dịch vụ email này đã bị cấm follow_limit_reached: Bạn chỉ có thể theo dõi tối đa %{limit} người generic_access_help_html: Gặp trục trặc với tài khoản? Liên hệ %{email} để được trợ giúp invalid_email: Địa chỉ email không hợp lệ + invalid_email_mx: Địa chỉ email không tồn tại invalid_otp_token: Mã xác thực hai bước không hợp lệ invalid_sign_in_token: Mã an toàn không hợp lệ otp_lost_help_html: Nếu bạn mất quyền truy cập vào cả hai, bạn có thể đăng nhập bằng %{email} @@ -1236,3 +1301,20 @@ vi: verification: explanation_html: 'Bạn có thể xác minh mình là chủ sở hữu của các trang web ở đầu trang cá nhân của bạn. Để xác minh, trang web phải chèn mã rel="me". Nội dung văn bản của liên kết không quan trọng. Đây là một ví dụ:' verification: Xác minh + webauthn_credentials: + add: Thêm khóa bảo mật mới + create: + error: Có vấn đề khi thêm khóa bảo mật. Xin thử lại. + success: Đã thêm khóa bảo mật mới thành công. + delete: Xóa + delete_confirmation: Bạn có chắc chắn muốn xóa khóa bảo mật này? + description_html: Nếu bạn kích hoạt khóa bảo mật, khi đăng nhập bạn sẽ cần sử dụng một trong những khóa bảo mật của bạn. + destroy: + error: Có vấn đề khi xóa khóa bảo mật. Xin thử lại. + success: Đã xóa khóa bảo mật thành công. + invalid_credential: Khóa bảo mật không hợp lệ + nickname_hint: Nhập tên mới cho khóa bảo mật của bạn + not_enabled: Bạn chưa kích hoạt WebAuthn + not_supported: Trình duyệt của bạn không hỗ trợ khóa bảo mật + otp_required: Để sử dụng khóa bảo mật, hãy kích hoạt xác thực hai bước trước. + registered_on: Đăng ký vào %{date} diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml new file mode 100644 index 000000000..55016da5c --- /dev/null +++ b/config/locales/zgh.yml @@ -0,0 +1,12 @@ +--- +zgh: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Too many requests + '500': + '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a67cd0122..c400f4564 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -21,7 +21,9 @@ zh-CN: federation_hint_html: 在%{instance} 上拥有账号后,你可以关注任何 Mastodon 服务器或其他服务器上的人。 get_apps: 尝试移动应用 hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例 - instance_actor_flash: 这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 + instance_actor_flash: '这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 + +' learn_more: 了解详情 privacy_policy: 隐私政策 see_whats_happening: 看一看现在在发生什么 @@ -92,6 +94,7 @@ zh-CN: add_email_domain_block: 封禁电子邮箱域名 approve: 批准 approve_all: 批准全部 + approved_msg: 成功批准 %{username} 的注册申请 are_you_sure: 你确定吗? avatar: 头像 by_domain: 域名 @@ -105,8 +108,10 @@ zh-CN: confirm: 确认 confirmed: 已确认 confirming: 确认中 + delete: 删除数据 deleted: 已删除 demote: 降任 + destroyed_msg: "%{username} 的数据已进入等待队列,即将被删除" disable: 停用 disable_two_factor_authentication: 停用双重认证 disabled: 已停用 @@ -117,6 +122,7 @@ zh-CN: email_status: 电子邮件地址状态 enable: 启用 enabled: 已启用 + enabled_msg: 成功启用 %{username} 的帐号 followers: 关注者 follows: 正在关注 header: 个人资料页横幅图片 @@ -132,6 +138,8 @@ zh-CN: login_status: 登录状态 media_attachments: 媒体文件 memorialize: 设置为追悼帐户 + memorialized: 被悼念 + memorialized_msg: 成功将 %{username} 转换为悼念帐号 moderation: active: 活跃 all: 全部 @@ -142,7 +150,7 @@ zh-CN: moderation_notes: 管理员备注 most_recent_activity: 最后一次活跃的时间 most_recent_ip: 最后一次活跃的 IP 地址 - no_account_selected: 没有选中帐号,所以无更改 + no_account_selected: 因为没有选中任何帐号,所以没有更改 no_limits_imposed: 无限制 not_subscribed: 未订阅 pending: 待审核 @@ -152,10 +160,14 @@ zh-CN: public: 公开页面 push_subscription_expires: PuSH 订阅过期时间 redownload: 刷新个人资料 + redownloaded_msg: 成功从来源处刷新 %{username} 的用户资料 reject: 拒绝 reject_all: 拒绝全部 + rejected_msg: 成功拒绝 %{username} 的注册申请 remove_avatar: 删除头像 remove_header: 删除横幅图片 + removed_avatar_msg: 成功删除 %{username} 的头像 + removed_header_msg: 成功删除了 %{username} 的横幅图片 resend_confirmation: already_confirmed: 该用户已被确认 send: 重发确认邮件 @@ -172,6 +184,8 @@ zh-CN: search: 搜索 search_same_email_domain: 其他具有相同电子邮箱域名的用户 search_same_ip: 具有相同IP的其他用户 + sensitive: 敏感内容 + sensitized: 已标记为敏感内容 shared_inbox_url: 公用收件箱(Shared Inbox)URL show: created_reports: 这个帐户提交的举报 @@ -181,13 +195,19 @@ zh-CN: statuses: 嘟文 subscribe: 订阅 suspended: 已封禁 + suspension_irreversible: 该帐号的数据已被不可逆转地删除。您可以取消暂停该帐号以使其可用,但它不会恢复以前拥有的任何数据。 + suspension_reversible_hint_html: 帐号已封禁,数据将在 %{date} 完全删除。 在此之前,帐号仍可恢复,并且没有任何不良影响。 如果您想立即移除该帐号的所有数据,可以在下面进行。 time_in_queue: 已经等待了 %{time} title: 用户 unconfirmed_email: 待验证的电子邮件地址 + undo_sensitized: 去除敏感内容标记 undo_silenced: 解除隐藏 undo_suspension: 解除封禁 + unsilenced_msg: 成功解除 %{username} 的帐号限制 unsubscribe: 取消订阅 + unsuspended_msg: 已成功取消封禁 %{username} 的帐号 username: 用户名 + view_domain: 查看域名摘要 warn: 警告 web: 站内页面 whitelisted: 允许跨站交互 @@ -202,12 +222,14 @@ zh-CN: create_domain_allow: 允许新域名 create_domain_block: 封禁新域名 create_email_domain_block: 封禁电子邮箱域名 + create_ip_block: 新建 IP 规则 demote_user: 给用户降职 destroy_announcement: 删除公告 destroy_custom_emoji: 删除自定义表情符号 destroy_domain_allow: 解除域名允许 destroy_domain_block: 解除域名封禁 destroy_email_domain_block: 解除电子邮箱域名封禁 + destroy_ip_block: 删除 IP 规则 destroy_status: 删除嘟文 disable_2fa_user: 禁用双重认证 disable_custom_emoji: 禁用自定义表情符号 @@ -220,9 +242,11 @@ zh-CN: reopen_report: 重开举报 reset_password_user: 重置密码 resolve_report: 处理举报 + sensitive_account: 将你帐号中的媒体标记为敏感内容 silence_account: 隐藏用户 suspend_account: 封禁用户 unassigned_report: 取消举报的指派 + unsensitive_account: 去除你帐号中媒体的敏感内容标记 unsilence_account: 解除账号隐藏 unsuspend_account: 解除账号封禁 update_announcement: 更新公告 @@ -238,12 +262,14 @@ zh-CN: create_domain_allow: "%{name} 允许了和域名 %{target} 的跨站交互" create_domain_block: "%{name} 屏蔽了域名 %{target}" create_email_domain_block: "%{name} 屏蔽了电子邮件域名 %{target}" + create_ip_block: "%{name} 为 IP %{target} 创建了规则" demote_user: "%{name} 对用户 %{target} 进行了降任操作" destroy_announcement: "%{name} 删除了公告 %{target}" destroy_custom_emoji: "%{name} 销毁了自定义表情 %{target}" destroy_domain_allow: "%{name} 拒绝了和 %{target} 跨站交互" destroy_domain_block: "%{name} 解除了对域名 %{target} 的屏蔽" destroy_email_domain_block: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽" + destroy_ip_block: "%{name} 删除了 IP %{target} 的规则" destroy_status: "%{name} 删除了 %{target} 的嘟文" disable_2fa_user: "%{name} 停用了用户 %{target} 的双重认证" disable_custom_emoji: "%{name} 停用了自定义表情 %{target}" @@ -256,9 +282,11 @@ zh-CN: reopen_report: "%{name} 重开了举报 %{target}" reset_password_user: "%{name} 重置了用户 %{target} 的密码" resolve_report: "%{name} 处理了举报 %{target}" + sensitive_account: "%{name} 将 %{target} 的媒体标记为敏感内容" silence_account: "%{name} 隐藏了用户 %{target}" suspend_account: "%{name} 封禁了用户 %{target}" unassigned_report: "%{name} 放弃了举报 %{target} 的接管" + unsensitive_account: "%{name} 去除了 %{target} 媒体的敏感内容标记" unsilence_account: "%{name} 解除了用户 %{target} 的隐藏状态" unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态" update_announcement: "%{name} 更新了公告 %{target}" @@ -408,7 +436,7 @@ zh-CN: other: "%{count} 个已知帐户" moderation: all: 全部 - limited: 部分 + limited: 受限的 title: 运营 private_comment: 私密评论 public_comment: 公开评论 @@ -426,6 +454,21 @@ zh-CN: expired: 已失效 title: 筛选 title: 邀请用户 + ip_blocks: + add_new: 新建规则 + created_msg: 成功添加新 IP 规则 + delete: 删除 + expires_in: + '1209600': 两周 + '15778476': 6个月 + '2629746': 1个月 + '31556952': 1年 + '86400': 1天 + '94670856': 3年 + new: + title: 创建新 IP 规则 + no_ip_block_selected: 因为没有 IP 规则被选中,所以没有更改 + title: IP 规则 pending_accounts: title: 待处理的帐户 (%{count}) relationships: @@ -623,7 +666,7 @@ zh-CN: body_remote: 来自 %{domain} 的用户举报了用户 %{target} subject: 来自 %{instance} 的用户举报(#%{id}) new_trending_tag: - body: '今日的热门话题 #%{name} 之前未经审核。直到你允许之前这个话题将不会公开显示,活着就保持原样让它石沉大海。' + body: '今日的热门话题 #%{name} 之前未经审核。直到你允许之前这个话题将不会公开显示,或者就保持原样让它石沉大海。' subject: 在 %{instance} 有新话题 (#%{name}) 待审核 aliases: add_new: 创建别名 @@ -671,8 +714,11 @@ zh-CN: prefix_sign_up: 现在就注册 Mastodon! suffix: 注册一个帐号,你就可以关注别人、发布嘟文、并和其它任何Mastodon服务器上的用户交流,而且还有其它更多功能! didnt_get_confirmation: 没有收到确认邮件? + dont_have_your_security_key: 没有您的安全密钥? forgot_password: 忘记密码? invalid_reset_password_token: 密码重置令牌无效或已过期。请重新发起重置密码请求。 + link_to_otp: 输入从手机中获得的两步验证代码或恢复代码 + link_to_webauth: 使用您的安全密钥设备 login: 登录 logout: 登出 migrate_account: 迁移到另一个帐户 @@ -698,6 +744,7 @@ zh-CN: pending: 工作人员正在审核您的申请。这需要花点时间。在申请被批准后,您将收到一封电子邮件。 redirecting_to: 您的帐户无效,因为它已被设置为跳转到 %{acct} trouble_logging_in: 登录有问题? + use_security_key: 使用安全密钥 authorize_follow: already_following: 你已经在关注此用户了 already_requested: 你已经向那个账户发送过关注请求了 @@ -722,6 +769,7 @@ zh-CN: date: formats: default: "%Y年%m月%d日" + with_month_name: "%Y年%m月%d日" datetime: distance_in_words: about_x_hours: "%{count}时" @@ -978,6 +1026,14 @@ zh-CN: quadrillion: Q thousand: K trillion: T + otp_authentication: + code_hint: 输入认证应用生成的代码以确认操作 + description_html: 如果您使用身份验证应用启用了 双重身份验证, 登录将需要用到您的手机,它将生成您需要的令牌。 + enable: 启用 + instructions_html: "请使用 Google 身份验证器或其他的TOTP双重认证手机应用扫描此处的二维码。启用双重认证后,在登录时,你需要输入该应用生成的代码。" + manual_instructions: 如果你无法扫描二维码,请手动输入下列文本: + setup: 设置 + wrong_code: 输入的认证码无效!请确认服务器时间与设备时间是否正确? pagination: newer: 更新 next: 下一页 @@ -1102,6 +1158,7 @@ zh-CN: profile: 个人资料 relationships: 关注管理 two_factor_authentication: 双重认证 + webauthn_authentication: 安全密钥 spam_check: spam_detected: 这是一个自动报告。已检测到垃圾信息。 statuses: @@ -1134,6 +1191,8 @@ zh-CN: other: "%{count} 票" vote: 投票 show_more: 显示更多 + show_newer: 显示更新内容 + show_older: 显示更早内容 show_thread: 显示全部对话 sign_in_to_participate: 登录以加入对话 title: "%{name}:“%{quote}”" @@ -1239,24 +1298,23 @@ zh-CN: mastodon-light: Mastodon(亮色主题) time: formats: - default: "%Y年%-m月%d日 %H:%M" - month: "%Y 年 %B" + default: "%Y年%m月%d日 %H:%M" + month: "%Y年%m月" two_factor_authentication: - code_hint: 输入认证器生成的代码以确认操作 - description_html: 启用双重认证后,你需要输入手机认证器生成的代码才能登录. + add: 添加 disable: 停用 - enable: 启用 + disabled_success: 双重身份验证成功禁用 + edit: 编辑 enabled: 双重认证已启用 enabled_success: 双重认证启用成功 generate_recovery_codes: 生成恢复代码 - instructions_html: "请使用 Google 身份验证器或其他 TOTP 双重认证手机应用扫描此处的二维码。启用双重认证后,你需要输入该应用生成的代码来登录你的帐户。" lost_recovery_codes: 如果你的手机不慎丢失,你可以使用恢复代码来重新获得对帐户的访问权。如果你遗失了恢复代码,可以在此处重新生成。之前使用的恢复代码将会失效。 - manual_instructions: 如果你无法扫描二维码,请手动输入下列文本: + methods: 双重认证 + otp: 身份验证应用 recovery_codes: 备份恢复代码 recovery_codes_regenerated: 恢复代码重新生成成功 recovery_instructions_html: 如果你的手机无法使用,你可以使用下列任意一个恢复代码来重新获得对帐户的访问权。请妥善保管好你的恢复代码(例如,你可以将它们打印出来,然后和其他重要的文件放在一起)。 - setup: 设置 - wrong_code: 输入的认证码无效!请确认服务器时间与设备时间是否正确? + webauthn: 安全密钥 user_mailer: backup_ready: explanation: 你请求了一份 Mastodon 帐户的完整备份。现在你可以下载了! @@ -1271,6 +1329,7 @@ zh-CN: warning: explanation: disable: 虽然您的帐户被冻结,您的帐户数据仍然完整;但是您无法在解锁前执行任何操作。 + sensitive: 你上传的媒体文件和链接的媒体将被视作敏感内容。 silence: 当您的帐户受限时,只有已经关注过你的人才会这台服务器上看到你的嘟文,并且您会被排除在各种公共列表之外。但是,其他人仍然可以手动关注你。 suspend: 您的帐户已被封禁,所有的嘟文和您上传的媒体文件都已经从该服务器和您的关注者的服务器上删除并且不可恢复。 get_in_touch: 您可回复该邮件以联系 %{instance} 的工作人员。 @@ -1279,11 +1338,13 @@ zh-CN: subject: disable: 您的帐户 %{acct} 已被冻结 none: 对 %{acct} 的警告 + sensitive: 你的帐号 %{acct} 所发布的媒体已被标记为敏感内容 silence: 您的帐户 %{acct} 已经受限 suspend: 您的帐户 %{acct} 已被封禁。 title: disable: 账号已冻结 none: 警示 + sensitive: 你的媒体被标记为敏感内容 silence: 帐户受限 suspend: 账号被封禁 welcome: @@ -1304,9 +1365,11 @@ zh-CN: tips: 小贴士 title: "%{name},欢迎你的加入!" users: + blocked_email_provider: 您不能使用来自此提供商的邮箱 follow_limit_reached: 您不能关注超过 %{limit} 个人 generic_access_help_html: 登录账号出现问题?你可以向 %{email} 寻求帮助 invalid_email: 输入的电子邮件地址无效 + invalid_email_mx: 用戶邮箱似乎不存在 invalid_otp_token: 输入的双重认证代码无效 invalid_sign_in_token: 无效安全码 otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助 @@ -1316,3 +1379,20 @@ zh-CN: verification: explanation_html: 您可以 验证自己是个人资料元数据中的某个链接的所有者。 为此,被链接网站必须包含一个到您的 Mastodon 主页的链接。链接中 必须 包括 rel="me" 属性。链接的文本内容可以随意填写。例如: verification: 验证 + webauthn_credentials: + add: 添加新的安全密钥 + create: + error: 添加您的安全密钥时出错。请重试。 + success: 您的安全密钥已成功添加。 + delete: 删除 + delete_confirmation: 您确认要删除这个安全密钥吗? + description_html: 如果您启用 安全密钥身份验证,登录将需要您使用您的安全密钥。 + destroy: + error: 删除您的安全密钥时出错。请重试。 + success: 您的安全密钥已成功删除。 + invalid_credential: 无效的安全密钥 + nickname_hint: 输入您新安全密钥的昵称 + not_enabled: 您尚未启用 WebAuthn + not_supported: 此浏览器不支持安全密钥 + otp_required: 要使用安全密钥,请先启用两步验证。 + registered_on: 注册于 %{date} diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 4dcdee999..edab3c734 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -7,7 +7,6 @@ zh-HK: active_count_after: 活躍 active_footnote: 每月活躍使用者 (MAU) administered_by: 管理者: - api: API apps: 行動應用程式 apps_platforms: 在 iOS、Android 和其他平台使用 Mastodon browse_directory: 依興趣瀏覽個人資料目錄和過濾器 @@ -35,10 +34,6 @@ zh-HK: unavailable_content_description: domain: 伺服器 reason: 原因 - rejecting_media: 不會處理或儲存這些伺服器的媒體檔案,也不會顯示縮圖,需要手動點選原始檔: - rejecting_media_title: 過濾的媒體 - silenced_title: 靜音的伺服器 - suspended_title: 暫停的伺服器 user_count_after: other: 位使用者 user_count_before: 這裏共註冊有 @@ -134,7 +129,6 @@ zh-HK: moderation_notes: 管理記錄 most_recent_activity: 最新活動 most_recent_ip: 最新 IP 位域 - no_account_selected: 未選取任何帳號,因此未變更 no_limits_imposed: 未受限制 not_subscribed: 未訂閱 pending: 等待審核中 @@ -184,15 +178,6 @@ zh-HK: web: 用戶頁面 whitelisted: 已加入白名單 action_logs: - action_types: - assigned_to_self_report: 指派回報 - change_email_user: 變更使用者的電子信箱位址 - confirm_user: 確認使用者 - create_account_warning: 建立警告 - create_announcement: 建立公告 - create_custom_emoji: 建立自訂顏文字 - create_domain_allow: 建立允許網域 - create_domain_block: 建立阻擋網域 actions: assigned_to_self_report: "%{name} 指派了 %{target} 的舉報給自己" change_email_user: "%{name} 改變了用戶 %{target} 的電郵地址" @@ -496,7 +481,6 @@ zh-HK: last_active: 上次活躍 most_popular: 最熱門 most_recent: 最近 - name: Hashtag review: 審核嘟文 reviewed: 已審核 title: 主題標籤 @@ -516,7 +500,6 @@ zh-HK: appearance: localization: body: Mastodon 是由志願者翻譯的。 - guide_link: https://crowdin.com/project/mastodon guide_link_text: 每個人都能貢獻。 application_mailer: notification_preferences: 更改電郵首選項 @@ -545,8 +528,6 @@ zh-HK: migrate_account: 轉移到另一個帳號 migrate_account_html: 想要將這個帳號指向另一個帳號可到這裡設定。 or_log_in_with: 或登入於 - providers: - saml: SAML register: 登記 resend_confirmation: 重發確認指示電郵 reset_password: 重設密碼 @@ -606,7 +587,6 @@ zh-HK: request: 下載檔案 size: 檔案大小 blocks: 被你封鎖的用戶 - csv: CSV lists: 列表 mutes: 你所靜音的用戶 storage: 媒體容量大小 @@ -695,16 +675,6 @@ zh-HK: body: 您的文章被 %{name} 轉推: subject: "%{name} 轉推了你的文章" title: 新的轉推 - number: - human: - decimal_units: - format: "%n%u" - units: - billion: B - million: M - quadrillion: Q - thousand: K - trillion: T pagination: newer: 較新 next: 下一頁 @@ -744,7 +714,6 @@ zh-HK: explanation: 這些是現在正登入於你的 Mastodon 帳號的瀏覽器。 ip: IP 位址 platforms: - ios: iOS mac: Mac revoke: 取消 revoke_success: 作業階段成功取消 @@ -772,8 +741,6 @@ zh-HK: content_warning: 內容警告: %{warning} disallowed_hashtags: other: 包含不允許的標籤: %{tags} - errors: - in_reply_not_found: 您嘗試回覆的嘟文看起來不存在。 language_detection: 自動偵測語言 open_in_web: 開啟網頁 over_character_limit: 超過了 %{max} 字的限制 @@ -807,21 +774,14 @@ zh-HK: formats: default: "%Y年%-m月%d日 %H:%M" two_factor_authentication: - code_hint: 請輸入你認證器產生的代碼,以確認設定 - description_html: 當你啟用雙重認證後,你登入時將需要使你手機、或其他種類認證器產生的代碼。 disable: 停用 - enable: 啟用 enabled: 雙重認證已啟用 enabled_success: 已成功啟用雙重認證 generate_recovery_codes: 產生備用驗證碼 - instructions_html: "請用你手機的認證器應用程式(如 Google Authenticator、Authy),掃描這裏的QR 圖形碼。在雙重認證啟用後,你登入時將須要使用此應用程式產生的認證碼。" lost_recovery_codes: 讓你可以在遺失電話時,使用備用驗證碼登入。如果你遺失了備用驗證碼,可以在這裏產生一批新的,舊有的備用驗證碼將會失效。 - manual_instructions: 如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰ recovery_codes: 備份恢復驗證碼 recovery_codes_regenerated: 成功產生新的備用驗證碼 recovery_instructions_html: 如果你遺失了安裝認證器的裝置(如︰你的電話),你可以使用備用驗證碼進行登入。請確保將備用驗證碼收藏穩當,(如列印出來,和你其他重要文件一起存放)。 - setup: 設定 - wrong_code: 你輸入的認證碼並不正確!可能伺服器時間和你手機不一致,請檢查你手機的時鐘,或與本站管理員聯絡。 user_mailer: backup_ready: explanation: 你要求的 Mastodon 帳號完整備份檔案現已就緒,可供下載。 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 96dd01225..95daeb86f 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -193,6 +193,17 @@ zh-TW: create_custom_emoji: 建立自訂顏文字 create_domain_allow: 建立允許網域 create_domain_block: 建立阻擋網域 + destroy_announcement: 刪除公告 + destroy_custom_emoji: 刪除自訂顏文字 + destroy_domain_allow: 刪除允許網域 + destroy_domain_block: 刪除阻擋網域 + destroy_email_domain_block: 刪除阻擋電郵網域 + destroy_status: 刪除狀態 + disable_2fa_user: 停用兩階段認證 + disable_custom_emoji: 停用自訂顏文字 + disable_user: 停用帳戶 + enable_custom_emoji: 啓用自訂顏文字 + enable_user: 啓用帳戶 actions: assigned_to_self_report: "%{name} 接受了檢舉 %{target}" change_email_user: "%{name} 變更了使用者 %{target} 的電子信箱位址" @@ -513,10 +524,15 @@ zh-TW: body_remote: 來自 %{domain} 的使用者檢舉了使用者 %{target} subject: 來自 %{instance} 的使用者檢舉(#%{id}) appearance: + advanced_web_interface: 進階網頁介面 + advanced_web_interface_hint: 進階網頁界面可讓您配置許多不同的欄位來善用多餘的螢幕空間,依需要同時查看盡可能多的資訊如:首頁、通知、站點聯邦時間軸、任意數量的列表和主題標籤。 + animations_and_accessibility: 動畫與可用性 localization: body: Mastodon 是由志願者翻譯的。 guide_link: https://crowdin.com/project/mastodon guide_link_text: 每個人都能貢獻。 + sensitive_content: 敏感內容 + toot_layout: 嘟文佈局 application_mailer: notification_preferences: 變更電子信件設定 salutation: "%{name}、" @@ -686,6 +702,10 @@ zh-TW: body: '你的嘟文被 %{name} 轉嘟:' subject: "%{name} 轉嘟了你的嘟文" title: 新的轉嘟 + notifications: + email_events: 電子郵件通知設定 + email_events_hint: 選取你想接收通知的事件: + other_settings: 其他通知設定 number: human: decimal_units: @@ -701,6 +721,8 @@ zh-TW: next: 下一頁 older: 較舊 prev: 上一頁 + preferences: + other: 其他設定 remote_follow: acct: 請輸入您的使用者名稱@站點網域 missing_resource: 無法找到資源 @@ -738,6 +760,7 @@ zh-TW: revoke_success: Session 取消成功 title: 作業階段 settings: + appearance: 外觀設定 authorized_apps: 已授權應用程式 back: 回到 Mastodon delete: 刪除帳戶 @@ -748,6 +771,7 @@ zh-TW: migrate: 帳戶搬遷 notifications: 通知 preferences: 偏好設定 + profile: 使用者資訊 two_factor_authentication: 兩階段認證 statuses: attached: @@ -787,21 +811,14 @@ zh-TW: formats: default: "%Y年%-m月%d日 %H:%M" two_factor_authentication: - code_hint: 請輸入您認證器產生的代碼,以進行認證 - description_html: 啟用兩階段認證後,登入時將需要使手機、或其他種類認證器產生的代碼。 disable: 停用 - enable: 啟用 enabled: 兩階段認證已啟用 enabled_success: 已成功啟用兩階段認證 generate_recovery_codes: 產生備用驗證碼 - instructions_html: "請用您手機的認證器應用程式(如 Google Authenticator、Authy),掃描這裡的 QR 圖形碼。在兩階段認證啟用後,您登入時將須要使用此應用程式產生的認證碼。" lost_recovery_codes: 讓你可以在遺失手機時,使用備用驗證碼登入。如果你遺失了備用驗證碼,可以在這裏產生一批新的,舊有的備用驗證碼將會失效。 - manual_instructions: '如果您無法掃描 QR 圖形碼,請手動輸入:' recovery_codes: 備份備用驗證碼 recovery_codes_regenerated: 成功產生新的備用驗證碼 recovery_instructions_html: 如果你的手機無法使用,你可以使用下列任意一個備用驗證碼來重新獲得帳戶的訪問權。請妥善保管好你的備用驗證碼(例如,你可以將它們列印出來,與你的其他重要文件放在一起)。 - setup: 設定 - wrong_code: 您輸入的認證碼無效! 請確認伺服器時間與設備時間是否正確? user_mailer: backup_ready: explanation: 你要求的 Mastodon 帳戶完整備份檔案現已就緒,可供下載! @@ -825,7 +842,9 @@ zh-TW: tips: 小幫手 title: "%{name} 歡迎你的加入!" users: + blocked_email_provider: 不允許使用這個電子信箱提供者 invalid_email: 電子信箱位址不正確 + invalid_email_mx: 似乎沒有這個電子信箱地址 invalid_otp_token: 兩階段認證碼不正確 otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫 seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。 From b0893291ef32b9fb27ae57550775bc21f42d7888 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 9 Nov 2020 01:41:52 +0100 Subject: [PATCH 166/422] Fix Move handler not being triggered when failing to fetch target (#15107) When failing to fetch the target account, the ProcessingWorker fails as expected, but since it hasn't cleared the `move_in_progress` flag, the next attempt at processing skips the `Move` activity altogether. This commit changes it to clear the flag when encountering any unexpected error on fetching the target account. This is likely to occur because, of, e.g., a timeout, when many instances query the same actor at the same time. --- app/lib/activitypub/activity/move.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/lib/activitypub/activity/move.rb b/app/lib/activitypub/activity/move.rb index 2103f503f..7e073f64d 100644 --- a/app/lib/activitypub/activity/move.rb +++ b/app/lib/activitypub/activity/move.rb @@ -20,6 +20,9 @@ class ActivityPub::Activity::Move < ActivityPub::Activity # Initiate a re-follow for each follower MoveWorker.perform_async(origin_account.id, target_account.id) + rescue + unmark_as_processing! + raise end private From 2b63c62c57b431074c7b91e195cabf94a0db7a10 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Mon, 9 Nov 2020 09:43:16 +0900 Subject: [PATCH 167/422] Remove unnecessary messages (#15109) * Remove unnecessary messages * ran `i18n-tasks normalize` --- app/javascript/mastodon/locales/ar.json | 7 - app/javascript/mastodon/locales/ast.json | 7 - app/javascript/mastodon/locales/bg.json | 7 - app/javascript/mastodon/locales/bn.json | 7 - app/javascript/mastodon/locales/br.json | 7 - app/javascript/mastodon/locales/ca.json | 7 - app/javascript/mastodon/locales/co.json | 7 - app/javascript/mastodon/locales/cs.json | 7 - app/javascript/mastodon/locales/cy.json | 7 - app/javascript/mastodon/locales/da.json | 7 - app/javascript/mastodon/locales/de.json | 7 - .../mastodon/locales/defaultMessages.json | 194 ------------------ app/javascript/mastodon/locales/el.json | 7 - app/javascript/mastodon/locales/en.json | 7 - app/javascript/mastodon/locales/eo.json | 7 - app/javascript/mastodon/locales/es-AR.json | 7 - app/javascript/mastodon/locales/es.json | 7 - app/javascript/mastodon/locales/et.json | 7 - app/javascript/mastodon/locales/eu.json | 7 - app/javascript/mastodon/locales/fa.json | 7 - app/javascript/mastodon/locales/fi.json | 7 - app/javascript/mastodon/locales/fr.json | 7 - app/javascript/mastodon/locales/ga.json | 7 - app/javascript/mastodon/locales/gl.json | 7 - app/javascript/mastodon/locales/he.json | 7 - app/javascript/mastodon/locales/hi.json | 7 - app/javascript/mastodon/locales/hr.json | 7 - app/javascript/mastodon/locales/hu.json | 7 - app/javascript/mastodon/locales/hy.json | 7 - app/javascript/mastodon/locales/id.json | 7 - app/javascript/mastodon/locales/io.json | 7 - app/javascript/mastodon/locales/is.json | 7 - app/javascript/mastodon/locales/it.json | 7 - app/javascript/mastodon/locales/ja.json | 7 - app/javascript/mastodon/locales/ka.json | 7 - app/javascript/mastodon/locales/kab.json | 7 - app/javascript/mastodon/locales/kk.json | 7 - app/javascript/mastodon/locales/kn.json | 7 - app/javascript/mastodon/locales/ko.json | 7 - app/javascript/mastodon/locales/ku.json | 7 - app/javascript/mastodon/locales/lt.json | 7 - app/javascript/mastodon/locales/lv.json | 7 - app/javascript/mastodon/locales/mk.json | 7 - app/javascript/mastodon/locales/ml.json | 7 - app/javascript/mastodon/locales/mr.json | 7 - app/javascript/mastodon/locales/ms.json | 7 - app/javascript/mastodon/locales/nl.json | 7 - app/javascript/mastodon/locales/nn.json | 7 - app/javascript/mastodon/locales/no.json | 7 - app/javascript/mastodon/locales/oc.json | 7 - app/javascript/mastodon/locales/pl.json | 7 - app/javascript/mastodon/locales/pt-BR.json | 7 - app/javascript/mastodon/locales/pt-PT.json | 7 - app/javascript/mastodon/locales/ro.json | 7 - app/javascript/mastodon/locales/ru.json | 7 - app/javascript/mastodon/locales/sa.json | 7 - app/javascript/mastodon/locales/sc.json | 7 - app/javascript/mastodon/locales/sk.json | 7 - app/javascript/mastodon/locales/sl.json | 7 - app/javascript/mastodon/locales/sq.json | 7 - app/javascript/mastodon/locales/sr-Latn.json | 7 - app/javascript/mastodon/locales/sr.json | 7 - app/javascript/mastodon/locales/sv.json | 7 - app/javascript/mastodon/locales/szl.json | 7 - app/javascript/mastodon/locales/ta.json | 7 - app/javascript/mastodon/locales/tai.json | 7 - app/javascript/mastodon/locales/te.json | 7 - app/javascript/mastodon/locales/th.json | 7 - app/javascript/mastodon/locales/ug.json | 7 - app/javascript/mastodon/locales/uk.json | 7 - app/javascript/mastodon/locales/ur.json | 7 - app/javascript/mastodon/locales/vi.json | 7 - app/javascript/mastodon/locales/zgh.json | 7 - app/javascript/mastodon/locales/zh-CN.json | 7 - app/javascript/mastodon/locales/zh-HK.json | 7 - app/javascript/mastodon/locales/zh-TW.json | 7 - config/locales/tr.yml | 101 ++++----- 77 files changed, 51 insertions(+), 769 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 5f4160c41..8f0e04561 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.direct": "رسالة خاصة إلى @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "النطاق مخفي", "account.edit_profile": "تعديل الملف الشخصي", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.", "account.follows_you": "يتابعك", "account.hide_reblogs": "إخفاء ترقيات @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "إلغاء المتابعة", "account.unmute": "إلغاء الكتم عن @{name}", "account.unmute_notifications": "إلغاء كتم إخطارات @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "انقر لإضافة ملاحظة", "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.", "alert.rate_limited.title": "المعدل محدود", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", "hashtag.column_settings.tag_toggle": "إدراج الوسوم الإضافية لهذا العمود", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "الأساسية", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "اعرض الترقيات", "home.column_settings.show_replies": "اعرض الردود", "home.hide_announcements": "إخفاء الإعلانات", - "home.settings": "Column settings", "home.show_announcements": "إظهار الإعلانات", "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", @@ -393,7 +387,6 @@ "search_results.statuses": "التبويقات", "search_results.statuses_fts_disabled": "البحث في التبويقات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.", "search_results.total": "{count, number} {count, plural, zero {} one {نتيجة} two {نتيجتين} few {نتائج} many {نتائج} other {نتائج}}", - "standalone.public_title": "A look inside...", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.block": "احجب @{name}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 7455c3d46..e0b67d6bb 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Encaboxar la solicitú de siguimientu", "account.direct": "Unviar un mensaxe direutu a @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominiu anubríu", "account.edit_profile": "Editar el perfil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Naide sigue a esti usuariu entá.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Esti usuariu entá nun sigue a naide.", "account.follows_you": "Síguete", "account.hide_reblogs": "Anubrir les comparticiones de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Dexar de siguir", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes", "hashtag.column_settings.tag_mode.none": "Nenguna d'estes", "hashtag.column_settings.tag_toggle": "Incluyir les etiquetes adicionales d'esta columna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Amosar toots compartíos", "home.column_settings.show_replies": "Amosar rempuestes", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Barritos", "search_results.statuses_fts_disabled": "Esti sirvidor de Mastodon tien activada la gueta de barritos pol so conteníu.", "search_results.total": "{count, number} {count, plural, one {resultáu} other {resultaos}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Bloquiar a @{name}", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index c6b5207d1..3ffa07a71 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Скрит домейн", "account.edit_profile": "Редактирай профила си", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Все още никой не следва този потребител.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Този потребител все още не следва никого.", "account.follows_you": "Твой последовател", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Не следвай", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index e4e9de12f..056a3d424 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন", "account.direct": "@{name} কে সরাসরি বার্তা", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ডোমেন গোপন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.", "account.followers_counter": "{count, plural,one {{counter} জন অনুসরণকারী } other {{counter} জন অনুসরণকারী}}", "account.following_counter": "{count, plural,one {{counter} জনকে অনুসরণ} other {{counter} জনকে অনুসরণ}}", - "account.follows": "Follows", "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.", "account.follows_you": "আপনাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", @@ -47,7 +45,6 @@ "account.unfollow": "অনুসরণ না করতে", "account.unmute": "@{name} র কার্যকলাপ আবার দেখুন", "account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন", - "account.view_full_profile": "View full profile", "account_note.placeholder": "নোট যোগ করতে ক্লিক করুন", "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", "alert.rate_limited.title": "হার সীমিত", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "এর ভেতরে যেকোনোটা", "hashtag.column_settings.tag_mode.none": "এগুলোর একটাও না", "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করতে", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "সাধারণ", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", "home.hide_announcements": "ঘোষণা লুকান", - "home.settings": "Column settings", "home.show_announcements": "ঘোষণা দেখান", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}", @@ -393,7 +387,6 @@ "search_results.statuses": "টুট", "search_results.statuses_fts_disabled": "তাদের সামগ্রী দ্বারা টুটগুলি অনুসন্ধান এই মস্তোডন সার্ভারে সক্ষম নয়।", "search_results.total": "{count, number} {count, plural, one {ফলাফল} other {ফলাফল}}", - "standalone.public_title": "A look inside...", "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", "status.block": "@{name} কে ব্লক করুন", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 774296f23..ce7260477 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Nullañ ar bedadenn heuliañ", "account.direct": "Kas ur gemennadenn da @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domani berzet", "account.edit_profile": "Aozañ ar profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Den na heul an implijer-mañ c'hoazh.", "account.followers_counter": "{count, plural, other{{counter} Heulier}}", "account.following_counter": "{count, plural, other {{counter} Heuliañ}}", - "account.follows": "Follows", "account.follows.empty": "An implijer·ez-mañ na heul den ebet.", "account.follows_you": "Ho heul", "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Diheuliañ", "account.unmute": "Diguzhat @{name}", "account.unmute_notifications": "Diguzhat kemennoù a @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikit evit ouzhpenniñ un notenn", "alert.rate_limited.message": "Klaskit en-dro a-benn {retry_time, time, medium}.", "alert.rate_limited.title": "Feur bevennet", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Unan e mesk anezho", "hashtag.column_settings.tag_mode.none": "Hini ebet anezho", "hashtag.column_settings.tag_toggle": "Endelc'her gerioù-alc'hwez ouzhpenn evit ar bannad-mañ", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Diazez", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Diskouez ar skignadennoù", "home.column_settings.show_replies": "Diskouez ar respontoù", "home.hide_announcements": "Kuzhat ar c'hemennoù", - "home.settings": "Column settings", "home.show_announcements": "Diskouez ar c'hemennoù", "intervals.full.days": "{number, plural, one {# devezh} other{# a zevezhioù}}", "intervals.full.hours": "{number, plural, one {# eurvezh} other{# eurvezh}}", @@ -393,7 +387,6 @@ "search_results.statuses": "a doudoù", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Berzañ @{name}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 844992938..93bcffeaa 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.direct": "Missatge directe @{name}", "account.disable_notifications": "Deixa de notificar-me els tuts de @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domini ocult", "account.edit_profile": "Edita el perfil", "account.enable_notifications": "Notifica’m els tuts de @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "Encara ningú no segueix aquest usuari.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", "account.following_counter": "{count, plural, other {{counter} Seguint}}", - "account.follows": "Follows", "account.follows.empty": "Aquest usuari encara no segueix a ningú.", "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Deixa de seguir", "account.unmute": "Treure silenci de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Sense comentaris", "alert.rate_limited.message": "Si us plau torna-ho a provar després de {retry_time, time, medium}.", "alert.rate_limited.title": "Límit de freqüència", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", "home.hide_announcements": "Amaga els anuncis", - "home.settings": "Column settings", "home.show_announcements": "Mostra els anuncis", "intervals.full.days": "{number, plural, one {# dia} other {# dies}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "La cerca de tuts pel seu contingut no està habilitada en aquest servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_status": "Obre aquest tut a la interfície de moderació", "status.block": "Bloqueja @{name}", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 666f8eb53..26e5e9f20 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu", "account.direct": "Missaghju direttu @{name}", "account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Duminiu piattatu", "account.edit_profile": "Mudificà u prufile", "account.enable_notifications": "Nutificate mi quandu @{name} pubblica qualcosa", @@ -20,7 +19,6 @@ "account.followers.empty": "Nisunu hè abbunatu à st'utilizatore.", "account.followers_counter": "{count, plural, one {{counter} Abbunatu} other {{counter} Abbunati}}", "account.following_counter": "{count, plural, one {{counter} Abbunamentu} other {{counter} Abbunamenti}}", - "account.follows": "Follows", "account.follows.empty": "St'utilizatore ùn seguita nisunu.", "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ùn siguità più", "account.unmute": "Ùn piattà più @{name}", "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Senza cummentariu", "alert.rate_limited.message": "Pruvate ancu dop'à {retry_time, time, medium}.", "alert.rate_limited.title": "Ghjettu limitatu", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Unu di quessi", "hashtag.column_settings.tag_mode.none": "Nisunu di quessi", "hashtag.column_settings.tag_toggle": "Inchjude tag addiziunali per sta colonna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsichi", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_replies": "Vede e risposte", "home.hide_announcements": "Piattà annunzii", - "home.settings": "Column settings", "home.show_announcements": "Vede annunzii", "intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Statuti", "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.block": "Bluccà @{name}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 48abbec37..ad47b064c 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Zrušit žádost o sledování", "account.direct": "Poslat uživateli @{name} přímou zprávu", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Přestat sledovat", "account.unmute": "Odkrýt uživatele @{name}", "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Zkuste to prosím znovu za {retry_time, time, medium}.", "alert.rate_limited.title": "Rychlost omezena", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", "hashtag.column_settings.tag_mode.none": "Žádné z těchto", "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci dodatečné tagy", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Základní", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", "home.hide_announcements": "Skrýt oznámení", - "home.settings": "Column settings", "home.show_announcements": "Zobrazit oznámení", "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tooty", "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledků} other {výsledků}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}", "status.admin_status": "Otevřít tento toot v moderátorském rozhraní", "status.block": "Zablokovat uživatele @{name}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 85e968e95..e5f2e69b0 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Canslo cais dilyn", "account.direct": "Neges breifat @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Parth wedi ei guddio", "account.edit_profile": "Golygu proffil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.", "account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}", "account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}", - "account.follows": "Follows", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Dad-ddilyn", "account.unmute": "Dad-dawelu @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Clicio i ychwanegu nodyn", "alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.", "alert.rate_limited.title": "Cyfradd gyfyngedig", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Syml", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Dangos bŵstiau", "home.column_settings.show_replies": "Dangos ymatebion", "home.hide_announcements": "Cuddio cyhoeddiadau", - "home.settings": "Column settings", "home.show_announcements": "Dangos cyhoeddiadau", "intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}", "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tŵtiau", "search_results.statuses_fts_disabled": "Nid yw chwilio Tŵtiau yn ôl eu cynnwys wedi'i alluogi ar y gweinydd Mastodon hwn.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}", "status.admin_status": "Agor y tŵt yn y rhyngwyneb goruwchwylio", "status.block": "Blocio @{name}", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 33a442980..4b312a8f4 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Annullér følgeranmodning", "account.direct": "Send en direkte besked til @{name}", "account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domænet er blevet skjult", "account.edit_profile": "Rediger profil", "account.enable_notifications": "Giv mig besked når @{name} lægger noget op", @@ -20,7 +19,6 @@ "account.followers.empty": "Der er endnu ingen der følger denne bruger.", "account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Følg ikke længere", "account.unmute": "Fjern dæmpningen af @{name}", "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Prøv venligst igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Gradsbegrænset", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Grundlæggende", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul bekendtgørelser", - "home.settings": "Column settings", "home.show_announcements": "Vis bekendtgørelser", "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Trut", "search_results.statuses_fts_disabled": "Denne Mastodonserver har ikke aktiveret for søgning af statusser via deres indhold.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Åben modereringsvisning for @{name}", "status.admin_status": "Åben denne status i modereringsvisningen", "status.block": "Bloker @{name}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 4ce1b29e6..ff5fec1f7 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Folgeanfrage abbrechen", "account.direct": "Direktnachricht an @{name}", "account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", "account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet", @@ -20,7 +19,6 @@ "account.followers.empty": "Diesem Profil folgt noch niemand.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following_counter": "{count, plural, one {{counter} Folgender} other {{counter} Folgende}}", - "account.follows": "Follows", "account.follows.empty": "Dieses Profil folgt noch niemandem.", "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", @@ -47,7 +45,6 @@ "account.unfollow": "Entfolgen", "account.unmute": "@{name} nicht mehr stummschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Notiz durch Klicken hinzufügen", "alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.", "alert.rate_limited.title": "Anfragelimit überschritten", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Eins von diesen", "hashtag.column_settings.tag_mode.none": "Keins von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Einfach", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", "home.hide_announcements": "Verstecke Ankündigungen", - "home.settings": "Column settings", "home.show_announcements": "Zeige Ankündigungen", "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}", "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Beiträge", "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", "status.block": "Blockiere @{name}", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index e64832300..c49c6399d 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -541,19 +541,6 @@ ], "path": "app/javascript/mastodon/components/status_content.json" }, - { - "descriptors": [ - { - "defaultMessage": "Loading…", - "id": "regeneration_indicator.label" - }, - { - "defaultMessage": "Your home feed is being prepared!", - "id": "regeneration_indicator.sublabel" - } - ], - "path": "app/javascript/mastodon/components/status_list.json" - }, { "descriptors": [ { @@ -753,143 +740,6 @@ ], "path": "app/javascript/mastodon/features/account/components/account_note.json" }, - { - "descriptors": [ - { - "defaultMessage": "Mention @{name}", - "id": "account.mention" - }, - { - "defaultMessage": "Direct message @{name}", - "id": "account.direct" - }, - { - "defaultMessage": "Edit profile", - "id": "account.edit_profile" - }, - { - "defaultMessage": "Unblock @{name}", - "id": "account.unblock" - }, - { - "defaultMessage": "Unfollow", - "id": "account.unfollow" - }, - { - "defaultMessage": "Unmute @{name}", - "id": "account.unmute" - }, - { - "defaultMessage": "Block @{name}", - "id": "account.block" - }, - { - "defaultMessage": "Mute @{name}", - "id": "account.mute" - }, - { - "defaultMessage": "Follow", - "id": "account.follow" - }, - { - "defaultMessage": "Report @{name}", - "id": "account.report" - }, - { - "defaultMessage": "Share @{name}'s profile", - "id": "account.share" - }, - { - "defaultMessage": "Media", - "id": "account.media" - }, - { - "defaultMessage": "Hide everything from {domain}", - "id": "account.block_domain" - }, - { - "defaultMessage": "Unhide {domain}", - "id": "account.unblock_domain" - }, - { - "defaultMessage": "Hide boosts from @{name}", - "id": "account.hide_reblogs" - }, - { - "defaultMessage": "Show boosts from @{name}", - "id": "account.show_reblogs" - }, - { - "defaultMessage": "Pinned toots", - "id": "navigation_bar.pins" - }, - { - "defaultMessage": "Preferences", - "id": "navigation_bar.preferences" - }, - { - "defaultMessage": "Follow requests", - "id": "navigation_bar.follow_requests" - }, - { - "defaultMessage": "Favourites", - "id": "navigation_bar.favourites" - }, - { - "defaultMessage": "Lists", - "id": "navigation_bar.lists" - }, - { - "defaultMessage": "Blocked users", - "id": "navigation_bar.blocks" - }, - { - "defaultMessage": "Hidden domains", - "id": "navigation_bar.domain_blocks" - }, - { - "defaultMessage": "Muted users", - "id": "navigation_bar.mutes" - }, - { - "defaultMessage": "Feature on profile", - "id": "account.endorse" - }, - { - "defaultMessage": "Don't feature on profile", - "id": "account.unendorse" - }, - { - "defaultMessage": "Add or Remove from lists", - "id": "account.add_or_remove_from_list" - }, - { - "defaultMessage": "Open moderation interface for @{name}", - "id": "status.admin_account" - }, - { - "defaultMessage": "Information below may reflect the user's profile incompletely.", - "id": "account.disclaimer_full" - }, - { - "defaultMessage": "View full profile", - "id": "account.view_full_profile" - }, - { - "defaultMessage": "Toots", - "id": "account.posts" - }, - { - "defaultMessage": "Follows", - "id": "account.follows" - }, - { - "defaultMessage": "Followers", - "id": "account.followers" - } - ], - "path": "app/javascript/mastodon/features/account/components/action_bar.json" - }, { "descriptors": [ { @@ -1460,15 +1310,6 @@ ], "path": "app/javascript/mastodon/features/compose/components/upload_form.json" }, - { - "descriptors": [ - { - "defaultMessage": "Uploading...", - "id": "upload_progress.label" - } - ], - "path": "app/javascript/mastodon/features/compose/components/upload_progress.json" - }, { "descriptors": [ { @@ -1595,23 +1436,6 @@ ], "path": "app/javascript/mastodon/features/compose/index.json" }, - { - "descriptors": [ - { - "defaultMessage": "Filter out by regular expressions", - "id": "home.column_settings.filter_regex" - }, - { - "defaultMessage": "Column settings", - "id": "home.settings" - }, - { - "defaultMessage": "Advanced", - "id": "home.column_settings.advanced" - } - ], - "path": "app/javascript/mastodon/features/direct_timeline/components/column_settings.json" - }, { "descriptors": [ { @@ -2702,24 +2526,6 @@ ], "path": "app/javascript/mastodon/features/reblogs/index.json" }, - { - "descriptors": [ - { - "defaultMessage": "A look inside...", - "id": "standalone.public_title" - } - ], - "path": "app/javascript/mastodon/features/standalone/community_timeline/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "A look inside...", - "id": "standalone.public_title" - } - ], - "path": "app/javascript/mastodon/features/standalone/public_timeline/index.json" - }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 20ae60cc4..bd9f2e7ff 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.direct": "Προσωπικό μήνυμα προς @{name}", "account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Κρυμμένος τομέας", "account.edit_profile": "Επεξεργασία προφίλ", "account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "Κανείς δεν ακολουθεί αυτό τον χρήστη ακόμα.", "account.followers_counter": "{count, plural, one {{counter} Ακόλουθος} other {{counter} Ακόλουθοι}}", "account.following_counter": "{count, plural, other {{counter} Ακολουθεί}}", - "account.follows": "Follows", "account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.", "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Διακοπή παρακολούθησης", "account.unmute": "Διακοπή αποσιώπησης @{name}", "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Κλικ για να βάλεις σημείωση", "alert.rate_limited.message": "Παρακαλούμε δοκίμασε ξανά αφού περάσει η {retry_time, time, medium}.", "alert.rate_limited.title": "Περιορισμός συχνότητας", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Βασικές ρυθμίσεις", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", "home.hide_announcements": "Απόκρυψη ανακοινώσεων", - "home.settings": "Column settings", "home.show_announcements": "Εμφάνιση ανακοινώσεων", "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Τουτ", "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.", "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", "status.block": "Αποκλεισμός @{name}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 0b3152e68..ccc95db7a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags for this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this toot in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 8329788d5..b401e5bbe 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti profilon", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", - "account.follows": "Follows", "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ne plu sekvi", "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Alklaku por aldoni noton", "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bazaj agordoj", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi anoncojn", - "home.settings": "Column settings", "home.show_announcements": "Montri anoncojn", "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Mesaĝoj", "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.block": "Bloki @{name}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 006f7d530..57115404b 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} tootee", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificarme cuando @{name} tootee", @@ -20,7 +19,6 @@ "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", - "account.follows": "Follows", "account.follows.empty": "Todavía este usuario no sigue a nadie.", "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Hacé clic par agregar una nota", "alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.", "alert.rate_limited.title": "Acción limitada", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", - "home.settings": "Column settings", "home.show_announcements": "Mostrar anuncios", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_status": "Abrir este toot en la interface de moderación", "status.block": "Bloquear a @{name}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 4e719087f..b4bfffebe 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancelar solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} publica", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio bloqueado", "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificarme cuando @{name} publica", @@ -20,7 +19,6 @@ "account.followers.empty": "Nadie sigue a @{name} aún.", "account.followers_counter": "{count, plural, one {{counter} Seguidor o Seguidora} other {{counter} Seguidorxs}}", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", - "account.follows": "Follows", "account.follows.empty": "@{name} no sigue a nadie aún.", "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar publicaciones compartidas por @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar notificaciones de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Haz clic par agregar una nota", "alert.rate_limited.message": "Por favor, reintenta después de las {retry_time, time, medium}.", "alert.rate_limited.title": "Acción limitada", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", - "home.settings": "Column settings", "home.show_announcements": "Mostrar anuncios", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Publicaciones", "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 5aa4cb16d..4e42fb999 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Tühista jälgimistaotlus", "account.direct": "Otsesõnum @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeen peidetud", "account.edit_profile": "Muuda profiili", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Keegi ei jälgi seda kasutajat veel.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "See kasutaja ei jälgi veel kedagi.", "account.follows_you": "Jälgib Teid", "account.hide_reblogs": "Peida upitused kasutajalt @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ära jälgi", "account.unmute": "Ära vaigista @{name}", "account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Palun proovi uuesti pärast {retry_time, time, medium}.", "alert.rate_limited.title": "Piiratud", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Mõni neist", "hashtag.column_settings.tag_mode.none": "Mitte ükski neist", "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Peamine", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Näita upitusi", "home.column_settings.show_replies": "Näita vastuseid", "home.hide_announcements": "Peida teadaanded", - "home.settings": "Column settings", "home.show_announcements": "Kuva teadaandeid", "intervals.full.days": "{number, plural, one {# päev} other {# päevad}}", "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuudid", "search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.", "search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Ava moderaatoriliides kasutajale @{name}", "status.admin_status": "Ava see staatus moderaatoriliites", "status.block": "Blokeeri @{name}", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 67ac492df..5139d83aa 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", @@ -47,7 +45,6 @@ "account.unfollow": "Utzi jarraitzeari", "account.unmute": "Desmututu @{name}", "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Saiatu {retry_time, time, medium} barru.", "alert.rate_limited.title": "Abiadura mugatua", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Hautako edozein", "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Oinarrizkoa", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", "home.hide_announcements": "Ezkutatu iragarpenak", - "home.settings": "Column settings", "home.show_announcements": "Erakutsi iragarpenak", "intervals.full.days": "{number, plural, one {egun #} other {# egun}}", "intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tootak", "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du tooten edukiaren bilaketa gaitu.", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_status": "Ireki mezu hau moderazio interfazean", "status.block": "Blokeatu @{name}", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 3e3dc885e..a38d21e1c 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "لغو درخواست پیگیری", "account.direct": "پیام خصوصی به @{name}", "account.disable_notifications": "آگاهی به من هنگام فرستادن‌های @{name} پایان یابد", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "دامنه بسته شد", "account.edit_profile": "ویرایش نمایه", "account.enable_notifications": "آگاهی هنگام ارسال‌های @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "هنوز کسی پیگیر این کاربر نیست.", "account.followers_counter": "{count, plural, one {{counter} پی‌گیر} other {{counter} پی‌گیر}}", "account.following_counter": "{count, plural, other {{counter} پی می‌گیرد}}", - "account.follows": "Follows", "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.", "account.follows_you": "پیگیر شماست", "account.hide_reblogs": "نهفتن بازبوق‌های @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "پایان پیگیری", "account.unmute": "رفع خموشی @{name}", "account.unmute_notifications": "رفع خموشی اعلان‌ها از @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "نظری فراهم نشده", "alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره بیازمایید.", "alert.rate_limited.title": "محدودیت تعداد", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "پایه‌ای", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "نمایش بازبوق‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.hide_announcements": "نهفتن اعلامیه‌ها", - "home.settings": "Column settings", "home.show_announcements": "نمایش اعلامیه‌ها", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", @@ -393,7 +387,6 @@ "search_results.statuses": "بوق‌ها", "search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این کارساز ماستودون فعال نشده است.", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", - "standalone.public_title": "A look inside...", "status.admin_account": "گشودن واسط مدیریت برای @{name}", "status.admin_status": "گشودن این بوق در واسط مدیریت", "status.block": "مسدودسازی @{name}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index fe29126ee..4a0d4aef1 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Lakkaa seuraamasta", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.", "alert.rate_limited.title": "Määrää rajoitettu", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Kaikki", "hashtag.column_settings.tag_mode.none": "Ei mikään", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Perusasetukset", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", "home.hide_announcements": "Piilota ilmoitukset", - "home.settings": "Column settings", "home.show_announcements": "Näytä ilmoitukset", "intervals.full.days": "Päivä päiviä", "intervals.full.hours": "Tunti tunteja", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuuttaukset", "search_results.statuses_fts_disabled": "Tuuttausten haku sisällön perusteella ei ole käytössä tällä Mastodon-serverillä.", "search_results.total": "{count, number} {count, plural, one {tulos} other {tulosta}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä", "status.block": "Estä @{name}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index b9c91824e..a70a5c1c7 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", "account.disable_notifications": "Arrêter de me notifier quand @{name} publie", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domaine bloqué", "account.edit_profile": "Modifier le profil", "account.enable_notifications": "Me notifier quand @{name} publie", @@ -20,7 +19,6 @@ "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} Abonné·e} other {{counter} Abonné·e·s}}", "account.following_counter": "{count, plural, other {{counter} Abonnements}}", - "account.follows": "Follows", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ne plus suivre", "account.unmute": "Ne plus masquer @{name}", "account.unmute_notifications": "Ne plus masquer les notifications de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Cliquez pour ajouter une note", "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", "alert.rate_limited.title": "Débit limité", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basique", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", "home.hide_announcements": "Masquer les annonces", - "home.settings": "Column settings", "home.show_announcements": "Afficher les annonces", "intervals.full.days": "{number, plural, one {# jour} other {# jours}}", "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Pouets", "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Ouvrir l’interface de modération pour @{name}", "status.admin_status": "Ouvrir ce statut dans l’interface de modération", "status.block": "Bloquer @{name}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index c7214f90b..22230ab73 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "No comment provided", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 7579f82d6..591d1c13a 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Desbotar solicitude de seguimento", "account.direct": "Mensaxe directa @{name}", "account.disable_notifications": "Deixar de notificarme cando @{name} publica", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", "account.enable_notifications": "Noficarme cando @{name} publique", @@ -20,7 +19,6 @@ "account.followers.empty": "Aínda ninguén segue esta usuaria.", "account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}", "account.following_counter": "{count, plural, one {{counter} Seguindo} other {{counter} Seguindo}}", - "account.follows": "Follows", "account.follows.empty": "Esta usuaria aínda non segue a ninguén.", "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Deixar de silenciar a @{name}", "account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Preme para engadir nota", "alert.rate_limited.message": "Téntao novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Límite de intentos", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Calquera destes", "hashtag.column_settings.tag_mode.none": "Ningún destes", "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", "home.hide_announcements": "Agochar anuncios", - "home.settings": "Column settings", "home.show_announcements": "Amosar anuncios", "intervals.full.days": "{number, plural,one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_status": "Abrir este toot na interface de moderación", "status.block": "Bloquear a @{name}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 597819f20..cce1f29e7 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.", "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "הפסקת מעקב", "account.unmute": "הפסקת השתקת @{name}", "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "ללא הערה", "alert.rate_limited.message": "נא לנסות אחרי {retry_time, time, medium}.", "alert.rate_limited.title": "מגבלות מיכסה", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "למתחילים", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index b747b7534..275cc3eb9 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें", "account.direct": "प्रत्यक्ष संदेश @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "छिपा हुआ डोमेन", "account.edit_profile": "प्रोफ़ाइल संपादित करें", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "कोई भी इस यूज़र् को फ़ॉलो नहीं करता है", "account.followers_counter": "{count, plural, one {{counter} अनुगामी} other {{counter} समर्थक}}", "account.following_counter": "{count, plural, one {{counter} निम्नलिखित} other {{counter} निम्नलिखित}}", - "account.follows": "Follows", "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।", "account.follows_you": "आपको फॉलो करता है", "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", @@ -47,7 +45,6 @@ "account.unfollow": "अनफॉलो करें", "account.unmute": "अनम्यूट @{name}", "account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे", - "account.view_full_profile": "View full profile", "account_note.placeholder": "नोट्स जोड़ने के लिए क्लिक करें", "alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें", "alert.rate_limited.title": "सीमित दर", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "इनमें से कोई भी", "hashtag.column_settings.tag_mode.none": "इनमें से कोई भी नहीं", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "बुनियादी", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "बूस्ट दिखाए", "home.column_settings.show_replies": "जवाबों को दिखाए", "home.hide_announcements": "घोषणाएँ छिपाएँ", - "home.settings": "Column settings", "home.show_announcements": "घोषणाएं दिखाएं", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 3c07c3389..d59e10a89 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Otkaži zahtjev za praćenje", "account.direct": "Pošalji poruku @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Nitko još ne prati korisnika/cu.", "account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}", "account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}", - "account.follows": "Follows", "account.follows.empty": "Korisnik/ca još ne prati nikoga.", "account.follows_you": "Prati te", "account.hide_reblogs": "Sakrij boostove od @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Prestani pratiti", "account.unmute": "Poništi utišavanje @{name}", "account.unmute_notifications": "Ne utišavaj obavijesti od @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Kliknite za dodavanje bilješke", "alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.", "alert.rate_limited.title": "Ograničenje učestalosti", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Bilo koji navedeni", "hashtag.column_settings.tag_mode.none": "Nijedan navedeni", "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Sakrij najave", - "home.settings": "Column settings", "home.show_announcements": "Prikaži najave", "intervals.full.days": "{number, plural, one {# dan} other {# dana}}", "intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index e79975d8f..1c8c06284 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Követési kérelem törlése", "account.direct": "Közvetlen üzenet @{name} számára", "account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", "account.enable_notifications": "Figyelmeztess, ha @{name} tülköl", @@ -20,7 +19,6 @@ "account.followers.empty": "Ezt a felhasználót még senki sem követi.", "account.followers_counter": "{count, plural, one {{counter} Követő} other {{counter} Követő}}", "account.following_counter": "{count, plural, other {{counter} Követett}}", - "account.follows": "Follows", "account.follows.empty": "Ez a felhasználó még senkit sem követ.", "account.follows_you": "Követ téged", "account.hide_reblogs": "@{name} megtolásainak némítása", @@ -47,7 +45,6 @@ "account.unfollow": "Követés vége", "account.unmute": "@{name} némítás feloldása", "account.unmute_notifications": "@{name} némított értesítéseinek feloldása", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikk a feljegyzéshez", "alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.", "alert.rate_limited.title": "Forgalomkorlátozás", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Alapvető", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_replies": "Válaszok mutatása", "home.hide_announcements": "Közlemények elrejtése", - "home.settings": "Column settings", "home.show_announcements": "Közlemények mutatása", "intervals.full.days": "{number, plural, one {# nap} other {# nap}}", "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tülkök", "search_results.statuses_fts_disabled": "Ezen a szerveren nem engedélyezett a tülkök tartalom szerinti keresése.", "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz", "status.admin_status": "Tülk megnyitása moderációra", "status.block": "@{name} letiltása", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 470645244..5033b8ca2 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "չեղարկել հետեւելու հայցը", "account.direct": "Նամակ գրել @{name} -ին", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել անձնական էջը", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։", "account.followers_counter": "{count, plural, one {{counter} Հետևորդ} other {{counter} Հետևորդներ}}", "account.following_counter": "{count, plural, other {{counter} Հետևում են}}", - "account.follows": "Follows", "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", @@ -47,7 +45,6 @@ "account.unfollow": "Ապահետեւել", "account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Սեղմեք գրառելու համար", "alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։", "alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Ցանկացածը", "hashtag.column_settings.tag_mode.none": "Ոչ մեկը", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Հիմնական", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", - "home.settings": "Column settings", "home.show_announcements": "Ցուցադրել յայտարարութիւնները", "intervals.full.days": "{number, plural, one {# օր} other {# օր}}", "intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Թթեր", "search_results.statuses_fts_disabled": "Այս հանգոյցում միացուած չէ ըստ բովանդակութեան թթեր փնտրելու հնարաւորութիւնը։", "search_results.total": "{count, number} {count, plural, one {արդիւնք} other {արդիւնք}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Բացել @{name} օգտատիրոջ մոդերացիայի դիմերէսը։", "status.admin_status": "Բացել այս գրառումը մոդերատորի դիմերէսի մէջ", "status.block": "Արգելափակել @{name}֊ին", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 0849a3f3f..562d9d038 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Batalkan permintaan ikuti", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain disembunyikan", "account.edit_profile": "Ubah profil", "account.enable_notifications": "Beritahu saya saat @{name} memposting", @@ -20,7 +19,6 @@ "account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.", "account.followers_counter": "{count, plural, other {{counter} Pengikut}}", "account.following_counter": "{count, plural, other {{counter} Mengikuti}}", - "account.follows": "Follows", "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Berhenti mengikuti", "account.unmute": "Berhenti membisukan @{name}", "account.unmute_notifications": "Munculkan notifikasi dari @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klik untuk menambah catatan", "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", "alert.rate_limited.title": "Batasan tingkat", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Semua ini", "hashtag.column_settings.tag_mode.none": "Tak satu pun", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Dasar", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", "home.hide_announcements": "Sembunyikan pengumuman", - "home.settings": "Column settings", "home.show_announcements": "Tampilkan pengumuman", "intervals.full.days": "{number, plural, other {# hari}}", "intervals.full.hours": "{number, plural, other {# jam}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toot", "search_results.statuses_fts_disabled": "Pencarian toot berdasarkan konten tidak diaktifkan di server Mastadon ini.", "search_results.total": "{count, number} {count, plural, one {hasil} other {hasil}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Buka antar muka moderasi untuk @{name}", "status.admin_status": "Buka status ini dalam antar muka moderasi", "status.block": "Blokir @{name}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 3cebdcb03..1528dec69 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Modifikar profilo", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Sequas tu", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ne plus sequar", "account.unmute": "Ne plus celar @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Simpla", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 32b8b96f8..43004bebb 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Hætta við beiðni um að fylgjast með", "account.direct": "Bein skilaboð til @{name}", "account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Lén falið", "account.edit_profile": "Breyta notandasniði", "account.enable_notifications": "Láta mig vita þegar @{name} sendir inn", @@ -20,7 +19,6 @@ "account.followers.empty": "Ennþá fylgist enginn með þessum notanda.", "account.followers_counter": "{count, plural, one {{counter} fylgjandi} other {{counter} fylgjendur}}", "account.following_counter": "{count, plural, one {{counter} fylgist með} other {{counter} fylgjast með}}", - "account.follows": "Follows", "account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.", "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Hætta að fylgja", "account.unmute": "Hætta að þagga niður í @{name}", "account.unmute_notifications": "Hætta að þagga tilkynningar frá @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Engin athugasemd gefin", "alert.rate_limited.message": "Prófaðu aftur eftir {retry_time, time, medium}.", "alert.rate_limited.title": "Með takmörkum", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu", "hashtag.column_settings.tag_mode.none": "Ekkert af þessu", "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Einfalt", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", "home.hide_announcements": "Fela auglýsingar", - "home.settings": "Column settings", "home.show_announcements": "Birta auglýsingar", "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tíst", "search_results.statuses_fts_disabled": "Að leita í efni tísta er ekki virk á þessum Mastodon-þjóni.", "search_results.total": "{count, number} {count, plural, one {niðurstaða} other {niðurstöður}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Opna umsjónarviðmót fyrir @{name}", "status.admin_status": "Opna þessa stöðufærslu í umsjónarviðmótinu", "status.block": "Útiloka @{name}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 3581e9562..c472e098f 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Annulla richiesta di seguirti", "account.direct": "Messaggio diretto a @{name}", "account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Dominio bloccato", "account.edit_profile": "Modifica profilo", "account.enable_notifications": "Avvisami quando @{name} pubblica un post", @@ -20,7 +19,6 @@ "account.followers.empty": "Ancora nessuno segue questo utente.", "account.followers_counter": "{count, plural, one {{counter} Seguace} other {{counter} Seguaci}}", "account.following_counter": "{count, plural, other {{counter} Seguiti}}", - "account.follows": "Follows", "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Smetti di seguire", "account.unmute": "Non silenziare @{name}", "account.unmute_notifications": "Non silenziare le notifiche da @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Clicca per aggiungere una nota", "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.", "alert.rate_limited.title": "Limitazione per eccesso di richieste", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Uno o più di questi", "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Semplice", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostra post condivisi", "home.column_settings.show_replies": "Mostra risposte", "home.hide_announcements": "Nascondi annunci", - "home.settings": "Column settings", "home.show_announcements": "Mostra annunci", "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toot", "search_results.statuses_fts_disabled": "La ricerca di toot per il loro contenuto non è abilitata su questo server Mastodon.", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_status": "Apri questo status nell'interfaccia di moderazione", "status.block": "Blocca @{name}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index a20982501..207bcf441 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "フォローリクエストを取り消す", "account.direct": "@{name}さんにダイレクトメッセージ", "account.disable_notifications": "@{name} の投稿時の通知を停止", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ドメインブロック中", "account.edit_profile": "プロフィール編集", "account.enable_notifications": "@{name} の投稿時に通知", @@ -20,7 +19,6 @@ "account.followers.empty": "まだ誰もフォローしていません。", "account.followers_counter": "{counter} フォロワー", "account.following_counter": "{counter} フォロー", - "account.follows": "Follows", "account.follows.empty": "まだ誰もフォローしていません。", "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", @@ -47,7 +45,6 @@ "account.unfollow": "フォロー解除", "account.unmute": "@{name}さんのミュートを解除", "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする", - "account.view_full_profile": "View full profile", "account_note.placeholder": "クリックしてメモを追加", "alert.rate_limited.message": "{retry_time, time, medium} 以降に再度実行してください。", "alert.rate_limited.title": "制限に達しました", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "いずれかを含む", "hashtag.column_settings.tag_mode.none": "これらを除く", "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本設定", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", "home.hide_announcements": "お知らせを隠す", - "home.settings": "Column settings", "home.show_announcements": "お知らせを表示", "intervals.full.days": "{number}日", "intervals.full.hours": "{number}時間", @@ -393,7 +387,6 @@ "search_results.statuses": "トゥート", "search_results.statuses_fts_disabled": "このサーバーではトゥート本文の検索は利用できません。", "search_results.total": "{count, number}件の結果", - "standalone.public_title": "A look inside...", "status.admin_account": "@{name} のモデレーション画面を開く", "status.admin_status": "このトゥートをモデレーション画面で開く", "status.block": "@{name}さんをブロック", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 61af910f5..6a0b47fdc 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "პირდაპირი წერილი @{name}-ს", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", @@ -47,7 +45,6 @@ "account.unfollow": "ნუღარ მიჰყვები", "account.unmute": "ნუღარ აჩუმებ @{name}-ს", "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "ძირითადი", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ბუსტების ჩვენება", "home.column_settings.show_replies": "პასუხების ჩვენება", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "ტუტები", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "დაბლოკე @{name}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index bd8ac2816..261d003aa 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Sefsex asuter n uḍfar", "account.direct": "Izen usrid i @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.", "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", "account.following_counter": "{count, plural, one {{counter} yeṭṭafaren} aḍfar {{counter} wayeḍ}}", - "account.follows": "Follows", "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ur ṭṭafaṛ ara", "account.unmute": "Kkes asgugem ɣef @{name}", "account.unmute_notifications": "Serreḥ ilɣa sɣur @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Ulac iwenniten", "alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.", "alert.rate_limited.title": "Aktum s talast", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Yiwen seg-sen", "hashtag.column_settings.tag_mode.none": "Yiwen ala seg-sen", "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Igejdanen", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", - "home.settings": "Column settings", "home.show_announcements": "Ssken-d ulɣuyen", "intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}", "intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tibeṛṛaniyin", "search_results.statuses_fts_disabled": "Anadi ɣef tjewwiqin s ugbur-nsent ur yermid ara deg uqeddac-agi n Maṣṭudun.", "search_results.total": "{count, number} {count, plural, one {n ugemmuḍ} other {n yigemmuḍen}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Seḥbes @{name}", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 40ac63381..a2c0856e5 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Жазылуға сұранымды қайтару", "account.direct": "Жеке хат @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен жабық", "account.edit_profile": "Профильді өңдеу", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Әлі ешкім жазылмаған.", "account.followers_counter": "{count, plural, one {{counter} Оқырман} other {{counter} Оқырман}}", "account.following_counter": "{count, plural, one {{counter} Жазылым} other {{counter} Жазылым}}", - "account.follows": "Follows", "account.follows.empty": "Ешкімге жазылмапты.", "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", @@ -47,7 +45,6 @@ "account.unfollow": "Оқымау", "account.unmute": "@{name} ескертпелерін қосу", "account.unmute_notifications": "@{name} ескертпелерін көрсету", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Жазба қалдыру үшін бас", "alert.rate_limited.message": "Қайтадан көріңіз {retry_time, time, medium} кейін.", "alert.rate_limited.title": "Бағалау шектеулі", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Осылардың біреуін", "hashtag.column_settings.tag_mode.none": "Бұлардың ешқайсысын", "hashtag.column_settings.tag_toggle": "Осы бағанға қосымша тегтерді қосыңыз", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Негізгі", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Бөлісулерді көрсету", "home.column_settings.show_replies": "Жауаптарды көрсету", "home.hide_announcements": "Анонстарды жасыр", - "home.settings": "Column settings", "home.show_announcements": "Анонстарды көрсет", "intervals.full.days": "{number, plural, one {# күн} other {# күн}}", "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Жазбалар", "search_results.statuses_fts_disabled": "Mastodon серверінде постты толық мәтінмен іздей алмайсыз.", "search_results.total": "{count, number} {count, plural, one {нәтиже} other {нәтиже}}", - "standalone.public_title": "A look inside...", "status.admin_account": "@{name} үшін модерация интерфейсін аш", "status.admin_status": "Бұл жазбаны модерация интерфейсінде аш", "status.block": "Бұғаттау @{name}", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index ced6bc2e4..1ac564a70 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 6d414d1d1..24539248a 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "팔로우 요청 취소", "account.direct": "@{name}의 다이렉트 메시지", "account.disable_notifications": "@{name} 의 게시물 알림 끄기", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "도메인 숨겨짐", "account.edit_profile": "프로필 편집", "account.enable_notifications": "@{name} 의 게시물 알림 켜기", @@ -20,7 +19,6 @@ "account.followers.empty": "아직 아무도 이 유저를 팔로우하고 있지 않습니다.", "account.followers_counter": "{counter} 팔로워", "account.following_counter": "{counter} 팔로잉", - "account.follows": "Follows", "account.follows.empty": "이 유저는 아직 아무도 팔로우하고 있지 않습니다.", "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", @@ -47,7 +45,6 @@ "account.unfollow": "팔로우 해제", "account.unmute": "뮤트 해제", "account.unmute_notifications": "@{name}의 알림 뮤트 해제", - "account.view_full_profile": "View full profile", "account_note.placeholder": "클릭해서 노트 추가", "alert.rate_limited.message": "{retry_time, time, medium}에 다시 시도해 주세요.", "alert.rate_limited.title": "빈도 제한", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "아무것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "기본 설정", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", "home.hide_announcements": "공지사항 숨기기", - "home.settings": "Column settings", "home.show_announcements": "공지사항 보기", "intervals.full.days": "{number} 일", "intervals.full.hours": "{number} 시간", @@ -393,7 +387,6 @@ "search_results.statuses": "툿", "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 툿의 내용을 통한 검색이 활성화 되어 있지 않습니다.", "search_results.total": "{count, number}건의 결과", - "standalone.public_title": "A look inside...", "status.admin_account": "@{name}에 대한 중재 화면 열기", "status.admin_status": "중재 화면에서 이 게시물 열기", "status.block": "@{name} 차단", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index cf8fe6325..b40a15669 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "بەتاڵکردنی داوای شوێنکەوتن", "account.direct": "پەیامی تایبەت بە @{name}", "account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "دۆمەین قەپاتکرا", "account.edit_profile": "دەستکاری پرۆفایل", "account.enable_notifications": "ئاگادارم بکەوە کاتێک @{name} بابەتەکان", @@ -20,7 +19,6 @@ "account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە", "account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.", "account.follows_you": "شوێنکەوتووەکانت", "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "بەدوادانەچو", "account.unmute": "بێدەنگکردنی @{name}", "account.unmute_notifications": "بێدەنگکردنی هۆشیارییەکان لە @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "کرتەبکە بۆ زیادکردنی تێبینی", "alert.rate_limited.message": "تکایە هەوڵبدەرەوە دوای {retry_time, time, medium}.", "alert.rate_limited.title": "ڕێژەی سنووردار", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "هەر کام لەمانە", "hashtag.column_settings.tag_mode.none": "هیچ کام لەمانە", "hashtag.column_settings.tag_toggle": "تاگی زیادە ی ئەم ستوونە لەخۆ بنووسە", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "بنەڕەتی", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "پیشاندانی بەهێزکردن", "home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە", "home.hide_announcements": "شاردنەوەی راگەیەنراوەکان", - "home.settings": "Column settings", "home.show_announcements": "پیشاندانی راگەیەنراوەکان", "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}", "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}", @@ -393,7 +387,6 @@ "search_results.statuses": "توتەکان", "search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.", "search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}", - "standalone.public_title": "A look inside...", "status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}", "status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر", "status.block": "بلۆکی @{name}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index bd23c586f..6141f321e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3634d1201..061ab2a83 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Atcelt pieprasījumu", "account.direct": "Privātā ziņa @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Šim lietotājam nav sekotāju.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Nesekot", "account.unmute": "Noņemt apklusinājumu no lietotāja @{name}", "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Noklikšķiniet, lai pievienotu piezīmi", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 7ae757c19..b640b8c66 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Одкажи барање за следење", "account.direct": "Директна порана @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Скриен домен", "account.edit_profile": "Измени профил", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Никој не го следи овој корисник сеуште.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Корисникот не следи никој сеуште.", "account.follows_you": "Те следи тебе", "account.hide_reblogs": "Сокриј буст од @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Одследи", "account.unmute": "Зачути го @{name}", "account.unmute_notifications": "Исклучи известувања од @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Обидете се повторно после {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Било кои", "hashtag.column_settings.tag_mode.none": "Никои", "hashtag.column_settings.tag_toggle": "Стави додатни тагови за оваа колона", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основно", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Прикажи бустирања", "home.column_settings.show_replies": "Прикажи одговори", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# ден} other {# дена}}", "intervals.full.hours": "{number, plural, one {# час} other {# часа}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index b92ee3342..08c3cacd0 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു", "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക", @@ -47,7 +45,6 @@ "account.unfollow": "പിന്തുടരുന്നത് നിര്‍ത്തുക", "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}", "account.unmute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രസിദ്ധപ്പെടുത്തുക", - "account.view_full_profile": "View full profile", "account_note.placeholder": "കുറിപ്പ് ചേർക്കാൻ ക്ലിക്കുചെയ്യുക", "alert.rate_limited.message": "{retry_time, time, medium} നു ശേഷം വീണ്ടും ശ്രമിക്കുക.", "alert.rate_limited.title": "തോത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "അടിസ്ഥാനം", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", - "home.settings": "Column settings", "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 02a88e560..33f8cfd84 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "अनुयायी होण्याची विनंती रद्द करा", "account.direct": "थेट संदेश @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "प्रोफाइल एडिट करा", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "ह्या वापरकर्त्याचा आतापर्यंत कोणी अनुयायी नाही.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "हा वापरकर्ता अजूनपर्यंत कोणाचा अनुयायी नाही.", "account.follows_you": "तुमचा अनुयायी आहे", "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा", @@ -47,7 +45,6 @@ "account.unfollow": "अनुयायी असणे थांबवा", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index f143e000f..a4006a745 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 2c0fd1da0..aec3e09ff 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Server verborgen", "account.edit_profile": "Profiel bewerken", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Niemand volgt nog deze gebruiker.", "account.followers_counter": "{count, plural, one {{counter} volger} other {{counter} volgers}}", "account.following_counter": "{count, plural, one {{counter} volgend} other {{counter} volgend}}", - "account.follows": "Follows", "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", "account.hide_reblogs": "Verberg boosts van @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ontvolgen", "account.unmute": "@{name} niet langer negeren", "account.unmute_notifications": "@{name} meldingen niet langer negeren", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klik om een opmerking toe te voegen", "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", "alert.rate_limited.title": "Beperkt te gebruiken", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Algemeen", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", "home.hide_announcements": "Mededelingen verbergen", - "home.settings": "Column settings", "home.show_announcements": "Mededelingen tonen", "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}", "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodonserver niet ingeschakeld.", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_status": "Deze toot in de moderatie-omgeving openen", "status.block": "@{name} blokkeren", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 1650bd0aa..f6518afab 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Fjern fylgjeførespurnad", "account.direct": "Send melding til @{name}", "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domenet er gøymt", "account.edit_profile": "Rediger profil", "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", @@ -20,7 +19,6 @@ "account.followers.empty": "Ingen fylgjer denne brukaren enno.", "account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}", "account.following_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjar}}", - "account.follows": "Follows", "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Slutt å fylgja", "account.unmute": "Av-demp @{name}", "account.unmute_notifications": "Vis varsel frå @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikk for å leggja til merknad", "alert.rate_limited.message": "Ver venleg å prøva igjen etter {retry_time, time, medium}.", "alert.rate_limited.title": "Begrensa rate", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ikkje nokon av disse", "hashtag.column_settings.tag_toggle": "Inkluder ekstra emneknaggar for denne kolonna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Enkelt", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjeringar", - "home.settings": "Column settings", "home.show_announcements": "Vis kunngjeringar", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# time} other {# timar}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tut", "search_results.statuses_fts_disabled": "På denne Matsodon-tenaren kan du ikkje søkja på tut etter innhaldet deira.", "search_results.total": "{count, number} {count, plural, one {treff} other {treff}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}", "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet", "status.block": "Blokker @{name}", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 19e96c29a..46cf7c407 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Avbryt følge forespørsel", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domenet skjult", "account.edit_profile": "Rediger profil", "account.enable_notifications": "Varsle meg når @{name} legger ut innlegg", @@ -20,7 +19,6 @@ "account.followers.empty": "Ingen følger denne brukeren ennå.", "account.followers_counter": "{count, plural, one {{counter} følger} other {{counter} følgere}}", "account.following_counter": "{count, plural, one {{counter} som følges} other {{counter} som følges}}", - "account.follows": "Follows", "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Avfølg", "account.unmute": "Avdemp @{name}", "account.unmute_notifications": "Vis varsler fra @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikk for å legge til et notat", "alert.rate_limited.message": "Vennligst prøv igjen etter kl. {retry_time, time, medium}.", "alert.rate_limited.title": "Hastighetsbegrenset", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Enhver av disse", "hashtag.column_settings.tag_mode.none": "Ingen av disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Enkelt", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjøring", - "home.settings": "Column settings", "home.show_announcements": "Vis kunngjøring", "intervals.full.days": "{number, plural,one {# dag} other {# dager}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuter", "search_results.statuses_fts_disabled": "Å søke i tuter etter innhold er ikke skrudd på i denne Mastodon-tjeneren.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Åpne moderatorgrensesnittet for @{name}", "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet", "status.block": "Blokkér @{name}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 3ab920621..f166f95e2 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Anullar la demanda de seguiment", "account.direct": "Escriure un MP a @{name}", "account.disable_notifications": "Quitar de m’avisar quand @{name} publica quicòm", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeni amagat", "account.edit_profile": "Modificar lo perfil", "account.enable_notifications": "M’avisar quand @{name} publica quicòm", @@ -20,7 +19,6 @@ "account.followers.empty": "Degun sèc pas aqueste utilizaire pel moment.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", "account.following_counter": "{count, plural, one {{counter} Abonaments} other {{counter} Abonaments}}", - "account.follows": "Follows", "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Quitar de sègre", "account.unmute": "Quitar de rescondre @{name}", "account.unmute_notifications": "Mostrar las notificacions de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Clicar per ajustar una nòta", "alert.rate_limited.message": "Mercés de tornar ensajar aprèp {retry_time, time, medium}.", "alert.rate_limited.title": "Taus limitat", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Un d’aquestes", "hashtag.column_settings.tag_mode.none": "Cap d’aquestes", "hashtag.column_settings.tag_toggle": "Inclure las etiquetas suplementàrias dins aquesta colomna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", "home.hide_announcements": "Rescondre las anóncias", - "home.settings": "Column settings", "home.show_announcements": "Mostrar las anóncias", "intervals.full.days": "{number, plural, one {# jorn} other {# jorns}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}", "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion", "status.block": "Blocar @{name}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 9b2927b58..e06952d19 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}", "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", "account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "Nikt jeszcze nie śledzi tego użytkownika.", "account.followers_counter": "{count, plural, one {{counter} śledzący} few {{counter} śledzących} many {{counter} śledzących} other {{counter} śledzących}}", "account.following_counter": "{count, plural, one {{counter} śledzony} few {{counter} śledzonych} many {{counter} śledzonych} other {{counter} śledzonych}}", - "account.follows": "Follows", "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.", "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Przestań śledzić", "account.unmute": "Cofnij wyciszenie @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Naciśnij aby dodać notatkę", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczony czasowo", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Podstawowe", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", "home.hide_announcements": "Ukryj ogłoszenia", - "home.settings": "Column settings", "home.show_announcements": "Pokaż ogłoszenia", "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Wpisy", "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.", "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", "status.block": "Zablokuj @{name}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 9d24ab897..dda932440 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.direct": "Enviar toot direto para @{name}", "account.disable_notifications": "Parar de me notificar quando @{name} fizer publicações", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificar-me quando @{name} fizer publicações", @@ -20,7 +19,6 @@ "account.followers.empty": "Nada aqui.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {{counter} Seguindo}}", - "account.follows": "Follows", "account.follows.empty": "Nada aqui.", "account.follows_you": "Segue você", "account.hide_reblogs": "Ocultar boosts de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Tirar @{name} do mudo", "account.unmute_notifications": "Mostrar notificações de @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Clique para adicionar nota", "alert.rate_limited.message": "Por favor tente novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Frequência limitada", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Qualquer uma destas", "hashtag.column_settings.tag_mode.none": "Nenhuma destas", "hashtag.column_settings.tag_toggle": "Incluir tags adicionais para esta coluna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Esconder anúncios", - "home.settings": "Column settings", "home.show_announcements": "Mostrar anúncios", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Pesquisar toots por seu conteúdo não está ativado nesta instância Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Abrir interface de moderação para @{name}", "status.admin_status": "Abrir este status na interface de moderação", "status.block": "Bloquear @{name}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 5b794b87e..065a6bf57 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancelar pedido para seguir", "account.direct": "Enviar mensagem directa para @{name}", "account.disable_notifications": "Parar de me notificar das publicações de @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificar-me das publicações de @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "Ainda ninguém segue este utilizador.", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {A seguir {counter}}}", - "account.follows": "Follows", "account.follows.empty": "Este utilizador ainda não segue ninguém.", "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Não silenciar @{name}", "account.unmute_notifications": "Deixar de silenciar @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Nenhum comentário fornecido", "alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.", "alert.rate_limited.title": "Limite de tentativas", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Qualquer destes", "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Básico", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Ocultar anúncios", - "home.settings": "Column settings", "home.show_announcements": "Exibir anúncios", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "A pesquisa de toots pelo seu conteúdo não está disponível nesta instância Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_status": "Abrir esta publicação na interface de moderação", "status.block": "Bloquear @{name}", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index d3ade28f9..dc1be7bc1 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Anulați cererea de urmărire", "account.direct": "Mesaj direct @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domeniu blocat", "account.edit_profile": "Editați profilul", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Acest utilizator nu are încă urmăritori.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Acest utilizator nu urmărește pe nimeni încă.", "account.follows_you": "Te urmărește", "account.hide_reblogs": "Ascunde impulsurile de la @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Nu mai urmări", "account.unmute": "Nu mai ignora pe @{name}", "account.unmute_notifications": "Activează notificările de la @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Vă rugăm să reîncercați după {retry_time, time, medium}.", "alert.rate_limited.title": "Rată limitată", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Oricare din acestea", "hashtag.column_settings.tag_mode.none": "Niciuna din acestea", "hashtag.column_settings.tag_toggle": "Adaugă etichete adiționale pentru această coloană", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "De bază", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Arată impulsurile", "home.column_settings.show_replies": "Arată răspunsurile", "home.hide_announcements": "Ascundeți anunțurile", - "home.settings": "Column settings", "home.show_announcements": "Afișați anunțurile", "intervals.full.days": "{number, plural,one {# zi} other {# zile}}", "intervals.full.hours": "{number, plural, one {# oră} other {# ore}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Postări", "search_results.statuses_fts_disabled": "Căutarea de postări după conținutul lor nu este activată pe acest server.", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultate}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Deschide interfața de moderare pentru @{name}", "status.admin_status": "Deschide această stare în interfața de moderare", "status.block": "Blochează pe @{name}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 985e84dae..79b9966db 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", "account.disable_notifications": "Отключить уведомления от @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен скрыт", "account.edit_profile": "Изменить профиль", "account.enable_notifications": "Включить уведомления для @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.followers_counter": "{count, plural, one {{counter} подписчик} many {{counter} подписчиков} other {{counter} подписчика}}", "account.following_counter": "{count, plural, one {{counter} подписка} many {{counter} подписок} other {{counter} подписки}}", - "account.follows": "Follows", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Отписаться", "account.unmute": "Не игнорировать @{name}", "account.unmute_notifications": "Показывать уведомления от @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Текст заметки", "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", "alert.rate_limited.title": "Вы выполняете действие слишком часто", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основные", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", "home.hide_announcements": "Скрыть объявления", - "home.settings": "Column settings", "home.show_announcements": "Показать объявления", "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Посты", "search_results.statuses_fts_disabled": "Поиск постов по их содержанию не поддерживается данным узлом Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_status": "Открыть этот пост в интерфейсе модератора", "status.block": "Заблокировать @{name}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 9ab3aefd9..bc8463d59 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "अनुसरणानुरोधो नश्यताम्", "account.direct": "प्रत्यक्षसन्देशः @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "प्रदेशो निषिद्धः", "account.edit_profile": "सम्पाद्यताम्", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "नाऽनुसर्तारो वर्तन्ते", "account.followers_counter": "{count, plural, one {{counter} अनुसर्ता} two {{counter} अनुसर्तारौ} other {{counter} अनुसर्तारः}}", "account.following_counter": "{count, plural, one {{counter} अनुसृतः} two {{counter} अनुसृतौ} other {{counter} अनुसृताः}}", - "account.follows": "Follows", "account.follows.empty": "न कोऽप्यनुसृतो वर्तते", "account.follows_you": "त्वामनुसरति", "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्", @@ -47,7 +45,6 @@ "account.unfollow": "नश्यतामनुसरणम्", "account.unmute": "सशब्दम् @{name}", "account.unmute_notifications": "@{name} सूचनाः सक्रियन्ताम्", - "account.view_full_profile": "View full profile", "account_note.placeholder": "टीकायोजनार्थं नुद्यताम्", "alert.rate_limited.message": "{retry_time, time, medium}. समयात् पश्चात् प्रयतताम्", "alert.rate_limited.title": "सीमितगतिः", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 277f47ddc..055a52cab 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Annulla rechesta de sighidura", "account.direct": "Messàgiu deretu a @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domìniu blocadu", "account.edit_profile": "Modìfica profilu", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Nemos sighit ancora custa persone.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Sighidu} other {{counter} Sighidos}}", - "account.follows": "Follows", "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Non sigas prus", "account.unmute": "Torra a ativare @{name}", "account.unmute_notifications": "Ativa notìficas pro @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Cale si siat de custos", "hashtag.column_settings.tag_mode.none": "Perunu de custos", "hashtag.column_settings.tag_toggle": "Include etichetas additzionales pro custa colunna", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bàsicu", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", - "home.settings": "Column settings", "home.show_announcements": "Ammustra annùntzios", "intervals.full.days": "{number, plural, one {# die} other {# die}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", "search_results.total": "{count, number} {count, plurale, one {resurtadu} other {resurtados}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione", "status.block": "Bloca @{name}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index af4703ee7..cf8d3e6b1 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Zruš žiadosť o sledovanie", "account.direct": "Priama správa pre @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Tohto používateľa ešte nikto nenásleduje.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", "account.follows_you": "Nasleduje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Prestaň následovať", "account.unmute": "Prestaň ignorovať @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klikni pre vloženie poznámky", "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", "alert.rate_limited.title": "Tempo obmedzené", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Základné", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", "home.hide_announcements": "Skry oboznámenia", - "home.settings": "Column settings", "home.show_announcements": "Ukáž oboznámenia", "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Príspevky", "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 4e011edb6..dd25cbc03 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Neposredno sporočilo @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Skrita domena", "account.edit_profile": "Uredi profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Nihče ne sledi temu uporabniku.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Ta uporabnik še ne sledi nikomur.", "account.follows_you": "Sledi tebi", "account.hide_reblogs": "Skrij spodbude od @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Prenehaj slediti", "account.unmute": "Odtišaj @{name}", "account.unmute_notifications": "Vklopi obvestila od @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Karkoli od naštetega", "hashtag.column_settings.tag_mode.none": "Nič od naštetega", "hashtag.column_settings.tag_toggle": "Za ta stolpec vključi dodatne oznake", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Pokaži spodbude", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tuti", "search_results.statuses_fts_disabled": "Iskanje tutov po njihovi vsebini ni omogočeno na tem strežniku Mastodon.", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultatov}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Odpri vmesnik za moderiranje za @{name}", "status.admin_status": "Odpri status v vmesniku za moderiranje", "status.block": "Blokiraj @{name}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 875636ca0..63feac7ff 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Anulo kërkesën e ndjekjes", "account.direct": "Mesazh i drejtpërdrejtë për @{name}", "account.disable_notifications": "Resht së njoftuari mua, kur poston @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Përkatësia u bllokua", "account.edit_profile": "Përpunoni profilin", "account.enable_notifications": "Njoftomë, kur poston @{name}", @@ -20,7 +19,6 @@ "account.followers.empty": "Këtë përdorues ende s’e ndjek njeri.", "account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}", "account.following_counter": "{count, plural, other {{counter} të Ndjekur}}", - "account.follows": "Follows", "account.follows.empty": "Ky përdorues ende s’ndjek njeri.", "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Resht së ndjekuri", "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "S’u dha koment", "alert.rate_limited.message": "Ju lutemi, riprovoni pas {retry_time, time, medium}.", "alert.rate_limited.title": "Shpejtësi e kufizuar", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Cilindo prej këtyre", "hashtag.column_settings.tag_mode.none": "Asnjë prej këtyre", "hashtag.column_settings.tag_toggle": "Përfshi etiketa shtesë për këtë shtyllë", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Bazë", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", "home.hide_announcements": "Fshihi lajmërimet", - "home.settings": "Column settings", "home.show_announcements": "Shfaqi lajmërimet", "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}", "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Mesazhe", "search_results.statuses_fts_disabled": "Kërkimi i mesazheve sipas lëndës së tyre s’është i aktivizuar në këtë shërbyes Mastodon.", "search_results.total": "{count, number} {count, plural, one {përfundim} other {përfundime}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Hap ndërfaqe moderimi për @{name}", "status.admin_status": "Hape këtë mesazh te ndërfaqja e moderimit", "status.block": "Blloko @{name}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 509a19caf..38fc9cdce 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Izmeni profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Otprati", "account.unmute": "Ukloni ućutkavanje korisniku @{name}", "account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Osnovno", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Prikaži i podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezultat} few {rezultata} other {rezultata}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index a08f8a7dc..8df81fae6 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Тренутно нико не прати овог корисника.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "Корисник тренутно не прати никога.", "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Отпрати", "account.unmute": "Уклони ућуткавање кориснику @{name}", "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Молимо покушајте поново после {retry_time, time, medium}.", "alert.rate_limited.title": "Ограничена брзина", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Било које од ових", "hashtag.column_settings.tag_mode.none": "Ништа од ових", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основно", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Прикажи и подржавања", "home.column_settings.show_replies": "Прикажи одговоре", "home.hide_announcements": "Сакриј најаве", - "home.settings": "Column settings", "home.show_announcements": "Пријажи најаве", "intervals.full.days": "{number, plural, one {# дан} other {# дана}}", "intervals.full.hours": "{number, plural, one {# сат} other {# сати}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Трубе", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Отвори модераторски интерфејс за @{name}", "status.admin_status": "Отвори овај статус у модераторском интерфејсу", "status.block": "Блокирај @{name}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index bbcff66b0..295b98f0d 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Avbryt följarförfrågan", "account.direct": "Skicka ett direktmeddelande till @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Ingen följer denna användare än.", "account.followers_counter": "{count, plural, one {{counter} Följare} other {{counter} Följare}}", "account.following_counter": "{count, plural, one {{counter} Följer} other {{counter} Följer}}", - "account.follows": "Follows", "account.follows.empty": "Denna användare följer inte någon än.", "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Sluta följ", "account.unmute": "Sluta tysta @{name}", "account.unmute_notifications": "Återaktivera aviseringar från @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Klicka för att lägga till anteckning", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Mängd begränsad", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Någon av dessa", "hashtag.column_settings.tag_mode.none": "Ingen av dessa", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Grundläggande", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Visa knuffar", "home.column_settings.show_replies": "Visa svar", "home.hide_announcements": "Dölj notiser", - "home.settings": "Column settings", "home.show_announcements": "Visa notiser", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# timme} other {# timmar}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", "status.admin_status": "Öppna denna status i modereringsgränssnittet", "status.block": "Blockera @{name}", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 8e1e6c05b..2e57d620b 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 6284895af..d509b619a 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "பின்தொடரும் கோரிக்கையை நிராகரி", "account.direct": "நேரடி செய்தி @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", "account.edit_profile": "சுயவிவரத்தை மாற்று", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", "account.followers_counter": "{count, plural, one {{counter} வாசகர்} other {{counter} வாசகர்கள்}}", "account.following_counter": "{count, plural,one {{counter} சந்தா} other {{counter} சந்தாக்கள்}}", - "account.follows": "Follows", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "பின்தொடர்வதை நிறுத்துக", "account.unmute": "@{name} இன் மீது மௌனத் தடையை நீக்குக", "account.unmute_notifications": "@{name} இலிருந்து அறிவிப்புகளின் மீது மௌனத் தடையை நீக்குக", - "account.view_full_profile": "View full profile", "account_note.placeholder": "குறிப்பு ஒன்றை சேர்க்க சொடுக்கவும்", "alert.rate_limited.message": "{retry_time, time, medium} க்கு பிறகு மீண்டும் முயற்சிக்கவும்.", "alert.rate_limited.title": "பயன்பாடு கட்டுப்படுத்தப்பட்டுள்ளது", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "இவற்றில் எவையேனும்", "hashtag.column_settings.tag_mode.none": "இவற்றில் ஏதுமில்லை", "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் சிட்டைகளைச் சேர்க்கவும்", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "அடிப்படையானவை", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "பகிர்வுகளைக் காண்பி", "home.column_settings.show_replies": "மறுமொழிகளைக் காண்பி", "home.hide_announcements": "அறிவிப்புகளை மறை", - "home.settings": "Column settings", "home.show_announcements": "அறிவிப்புகளைக் காட்டு", "intervals.full.days": "{number, plural, one {# நாள்} other {# நாட்கள்}}", "intervals.full.hours": "{number, plural, one {# மணிநேரம்} other {# மணிநேரங்கள்}}", @@ -393,7 +387,6 @@ "search_results.statuses": "டூட்டுகள்", "search_results.statuses_fts_disabled": "டூட்டுகளின் வார்த்தைகளைக்கொண்டு தேடுவது இந்த மச்டோடன் வழங்கியில் இயல்விக்கப்படவில்லை.", "search_results.total": "{count, number} {count, plural, one {result} மற்ற {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "மிதமான இடைமுகத்தை திறக்க @{name}", "status.admin_status": "மிதமான இடைமுகத்தில் இந்த நிலையை திறக்கவும்", "status.block": "@{name} -ஐத் தடு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 8e1e6c05b..2e57d620b 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index cefd010d1..84e73f7e5 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "@{name}కు నేరుగా సందేశం పంపు", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది", "account.edit_profile": "ప్రొఫైల్ని సవరించండి", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "ఈ వినియోగదారుడిని ఇంకా ఎవరూ అనుసరించడంలేదు.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.", "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", @@ -47,7 +45,6 @@ "account.unfollow": "అనుసరించవద్దు", "account.unmute": "@{name}పై మ్యూట్ ని తొలగించు", "account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "వీటిలో ఏవైనా", "hashtag.column_settings.tag_mode.none": "ఇవేవీ కావు", "hashtag.column_settings.tag_toggle": "ఈ నిలువు వరుసలో మరికొన్ని ట్యాగులను చేర్చండి", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "ప్రాథమిక", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు", "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "టూట్లు", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు", "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి", "status.block": "@{name} ను బ్లాక్ చేయి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 615fe7998..a2add6715 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "ยกเลิกคำขอติดตาม", "account.direct": "ส่งข้อความโดยตรงถึง @{name}", "account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "ปิดกั้นโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", "account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์", @@ -20,7 +19,6 @@ "account.followers.empty": "ยังไม่มีใครติดตามผู้ใช้นี้", "account.followers_counter": "{count, plural, other {{counter} ผู้ติดตาม}}", "account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}", - "account.follows": "Follows", "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร", "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "เลิกติดตาม", "account.unmute": "เลิกซ่อน @{name}", "account.unmute_notifications": "เลิกซ่อนการแจ้งเตือนจาก @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "คลิกเพื่อเพิ่มหมายเหตุ", "alert.rate_limited.message": "โปรดลองใหม่หลังจาก {retry_time, time, medium}", "alert.rate_limited.title": "มีการจำกัดอัตรา", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "พื้นฐาน", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", "home.hide_announcements": "ซ่อนประกาศ", - "home.settings": "Column settings", "home.show_announcements": "แสดงประกาศ", "intervals.full.days": "{number, plural, other {# วัน}}", "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", @@ -393,7 +387,6 @@ "search_results.statuses": "โพสต์", "search_results.statuses_fts_disabled": "ไม่มีการเปิดใช้งานการค้นหาโพสต์โดยเนื้อหาของโพสต์ในเซิร์ฟเวอร์ Mastodon นี้", "search_results.total": "{count, number} {count, plural, other {ผลลัพธ์}}", - "standalone.public_title": "A look inside...", "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม", "status.block": "ปิดกั้น @{name}", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 8e1e6c05b..2e57d620b 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 4614489dc..dab23f448 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "Ніхто ще не підписався на цього користувача.", "account.followers_counter": "{count, plural, one {{counter} Підписник} few {{counter} Підписники} many {{counter} Підписників} other {{counter} Підписники}}", "account.following_counter": "{count, plural, one {{counter} Підписка} few {{counter} Підписки} many {{counter} Підписок} other {{counter} Підписки}}", - "account.follows": "Follows", "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.follows_you": "Підписаний(-а) на вас", "account.hide_reblogs": "Сховати передмухи від @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Відписатися", "account.unmute": "Зняти глушення з @{name}", "account.unmute_notifications": "Показувати сповіщення від @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Коментарі відсутні", "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.", "alert.rate_limited.title": "Швидкість обмежена", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Який-небудь з цих", "hashtag.column_settings.tag_mode.none": "Жоден з цих", "hashtag.column_settings.tag_toggle": "Додайте додаткові теґи до цього стовпчика", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Основні", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Показувати передмухи", "home.column_settings.show_replies": "Показувати відповіді", "home.hide_announcements": "Приховати оголошення", - "home.settings": "Column settings", "home.show_announcements": "Показати оголошення", "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Дмухів", "search_results.statuses_fts_disabled": "Пошук дмухів за вмістом недоступний на цьому сервері Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Відкрити інтерфейс модерації для @{name}", "status.admin_status": "Відкрити цей статус в інтерфейсі модерації", "status.block": "Заблокувати @{name}", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index cf6e6c274..3260a33cd 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "درخواستِ پیروی منسوخ کریں", "account.direct": "راست پیغام @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "\"ہنوز اس صارف کی کوئی پیروی نہیں کرتا\".", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".", "account.follows_you": "آپ کا پیروکار ہے", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", @@ -47,7 +45,6 @@ "account.unfollow": "پیروی ترک کریں", "account.unmute": "@{name} کو با آواز کریں", "account.unmute_notifications": "@{name} سے اطلاعات کو با آواز کریں", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "\"{retry_time, time, medium} کے بعد کوشش کریں\".", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "ان میں سے کوئی", "hashtag.column_settings.tag_mode.none": "ان میں سے کوئی بھی نہیں", "hashtag.column_settings.tag_toggle": "اس کالم کے لئے مزید ٹیگز شامل کریں", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "بنیادی", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "افزائشات دکھائیں", "home.column_settings.show_replies": "جوابات دکھائیں", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 6fc00e9cb..e9d9a42d2 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Hủy yêu cầu theo dõi", "account.direct": "Nhắn tin @{name}", "account.disable_notifications": "Không thông báo khi @{name} đăng tút", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Đã chặn người dùng", "account.edit_profile": "Giới thiệu bản thân", "account.enable_notifications": "Thông báo khi @{name} đăng tút", @@ -20,7 +19,6 @@ "account.followers.empty": "Chưa có người theo dõi nào.", "account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}", "account.following_counter": "{count, plural, one {{counter} Đang theo dõi} other {{counter} Đang theo dõi}}", - "account.follows": "Follows", "account.follows.empty": "Người dùng này chưa theo dõi ai.", "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn chia sẻ từ @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Ngưng theo dõi", "account.unmute": "Bỏ ẩn @{name}", "account.unmute_notifications": "Hiển lại thông báo từ @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Bạn có điều gì thú vị muốn nói về người này?", "alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.", "alert.rate_limited.title": "Vượt giới hạn", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Một phần", "hashtag.column_settings.tag_mode.none": "Không chọn", "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Tùy chỉnh", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Hiện những lượt chia sẻ", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", "home.hide_announcements": "Ẩn thông báo", - "home.settings": "Column settings", "home.show_announcements": "Hiện thông báo", "intervals.full.days": "{number, plural, other {# ngày}}", "intervals.full.hours": "{number, plural, other {# giờ}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Tút", "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật chức năng tìm kiếm tút.", "search_results.total": "{count, number} {count, plural, one {kết quả} other {kết quả}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_status": "Mở tút này trong giao diện quản trị", "status.block": "Chặn @{name}", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 8e1e6c05b..2e57d620b 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "Domain blocked", "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows": "Follows", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", @@ -47,7 +45,6 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", "account_note.placeholder": "Click to add a note", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "Basic", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", - "home.settings": "Column settings", "home.show_announcements": "Show announcements", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", @@ -393,7 +387,6 @@ "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "standalone.public_title": "A look inside...", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 16420f849..ac189fda1 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", "account.disable_notifications": "当 @{name} 发嘟时不要通知我", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "网站已屏蔽", "account.edit_profile": "修改个人资料", "account.enable_notifications": "当 @{name} 发嘟时通知我", @@ -20,7 +19,6 @@ "account.followers.empty": "目前无人关注此用户。", "account.followers_counter": "被 {counter} 人关注", "account.following_counter": "正在关注 {counter} 人", - "account.follows": "Follows", "account.follows.empty": "此用户目前尚未关注任何人。", "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", @@ -47,7 +45,6 @@ "account.unfollow": "取消关注", "account.unmute": "不再隐藏 @{name}", "account.unmute_notifications": "不再隐藏来自 @{name} 的通知", - "account.view_full_profile": "View full profile", "account_note.placeholder": "点击添加备注", "alert.rate_limited.message": "请在{retry_time, time, medium}后重试。", "alert.rate_limited.title": "频率受限", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全都不要", "hashtag.column_settings.tag_toggle": "在此栏加入额外的标签", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本设置", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", "home.hide_announcements": "隐藏公告", - "home.settings": "Column settings", "home.show_announcements": "显示公告", "intervals.full.days": "{number} 天", "intervals.full.hours": "{number} 小时", @@ -393,7 +387,6 @@ "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "此Mastodon服务器未启用嘟文内容搜索。", "search_results.total": "共 {count, number} 个结果", - "standalone.public_title": "A look inside...", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_status": "打开这条嘟文的管理界面", "status.block": "屏蔽 @{name}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 3c7ac7f9b..346bf058e 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "取消關注請求", "account.direct": "私訊 @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "服務站被隱藏", "account.edit_profile": "修改個人資料", "account.enable_notifications": "Notify me when @{name} posts", @@ -20,7 +19,6 @@ "account.followers.empty": "尚沒有人關注這位使用者。", "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", - "account.follows": "Follows", "account.follows.empty": "這位使用者尚未關注任何使用者。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", @@ -47,7 +45,6 @@ "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", - "account.view_full_profile": "View full profile", "account_note.placeholder": "按此添加備注", "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", "alert.rate_limited.title": "已限速", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", "home.hide_announcements": "隱藏公告", - "home.settings": "Column settings", "home.show_announcements": "顯示公告", "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", @@ -393,7 +387,6 @@ "search_results.statuses": "文章", "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", "search_results.total": "{count, number} 項結果", - "standalone.public_title": "A look inside...", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", "status.block": "封鎖 @{name}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index ba5765aaa..598407a30 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -10,7 +10,6 @@ "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", "account.disable_notifications": "當 @{name} 嘟文時不要再通知我", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", "account.domain_blocked": "已隱藏網域", "account.edit_profile": "編輯個人資料", "account.enable_notifications": "當 @{name} 嘟文時通知我", @@ -20,7 +19,6 @@ "account.followers.empty": "尚沒有人關注這位使用者。", "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", - "account.follows": "Follows", "account.follows.empty": "這位使用者尚未關注任何使用者。", "account.follows_you": "關注了你", "account.hide_reblogs": "隱藏來自 @{name} 的轉推", @@ -47,7 +45,6 @@ "account.unfollow": "取消關注", "account.unmute": "取消靜音 @{name}", "account.unmute_notifications": "重新接收來自 @{name} 的通知", - "account.view_full_profile": "View full profile", "account_note.placeholder": "按此添加備注", "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", "alert.rate_limited.title": "已限速", @@ -197,13 +194,10 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", - "home.column_settings.advanced": "Advanced", "home.column_settings.basic": "基本", - "home.column_settings.filter_regex": "Filter out by regular expressions", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", "home.hide_announcements": "隱藏公告", - "home.settings": "Column settings", "home.show_announcements": "顯示公告", "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", @@ -393,7 +387,6 @@ "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", "search_results.total": "{count, number} 項結果", - "standalone.public_title": "A look inside...", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", "status.block": "封鎖 @{name}", diff --git a/config/locales/tr.yml b/config/locales/tr.yml index e9be3554d..5bb8a087b 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,7 +1,8 @@ +--- tr: about: - about_hashtag_html: 'Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz.' - about_mastodon_html: 'Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir.' + about_hashtag_html: Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. + about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. about_this: Bu sunucu hakkında active_count_after: etkin active_footnote: Aylık Aktif Kullanıcılar (AAK) @@ -17,7 +18,7 @@ tr: contact_unavailable: Yok discover_users: Kullanıcıları keşfet documentation: Belgeler - federation_hint_html: '%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz.' + federation_hint_html: "%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz." get_apps: Bir mobil uygulamayı deneyin hosted_on: Mastodon %{domain} üzerinde barındırılıyor instance_actor_flash: | @@ -59,7 +60,7 @@ tr: one: Takipçi other: Takipçi following: Takip ettikleri - joined: '%{date} tarihinde katıldı' + joined: "%{date} tarihinde katıldı" last_active: son aktivite link_verified_on: Bu bağlantının mülkiyeti %{date} tarihinde kontrol edildi media: Medya @@ -87,7 +88,7 @@ tr: admin: account_actions: action: Eylemi gerçekleştir - title: '%{acct} üzerinde denetleme eylemi gerçekleştir' + title: "%{acct} üzerinde denetleme eylemi gerçekleştir" account_moderation_notes: create: Not bırakın created_msg: Denetim notu başarıyla oluşturuldu! @@ -97,7 +98,7 @@ tr: add_email_domain_block: E-posta alan adını engelle approve: Onayla approve_all: Tümünü onayla - approved_msg: '%{username} adlı kullanıcının kayıt başvurusu başarıyla onaylandı' + approved_msg: "%{username} adlı kullanıcının kayıt başvurusu başarıyla onaylandı" are_you_sure: Emin misiniz? avatar: Avatar by_domain: Sunucu @@ -107,7 +108,7 @@ tr: label: E-postayı değiştir new_email: Yeni e-posta submit: E-postayı değiştir - title: '%{username} için e-postayı değiştir' + title: "%{username} için e-postayı değiştir" confirm: Onayla confirmed: Onaylandı confirming: Onaylama @@ -125,7 +126,7 @@ tr: email_status: E-posta durumu enable: Etkinleştir enabled: Etkin - enabled_msg: '%{username} hesabı başarıyla çözüldü' + enabled_msg: "%{username} hesabı başarıyla çözüldü" followers: Takipçiler follows: Takip edilen header: Üstbilgi @@ -142,7 +143,7 @@ tr: media_attachments: Medya ekleri memorialize: Bir hatıraya dön memorialized: Anıtlaştırıldı - memorialized_msg: '%{username} hesabı başarıyla anıt hesabına dönüştürüldü' + memorialized_msg: "%{username} hesabı başarıyla anıt hesabına dönüştürüldü" moderation: active: Etkin all: Hepsi @@ -163,14 +164,14 @@ tr: public: Herkese açık push_subscription_expires: PuSH aboneliği dolumu redownload: Profili yenile - redownloaded_msg: '%{username} kullanıcısının profili kökenden başarıyla yenilendi' + redownloaded_msg: "%{username} kullanıcısının profili kökenden başarıyla yenilendi" reject: Reddet reject_all: Tümünü reddet - rejected_msg: '%{username} adlı kullanıcının kayıt başvurusu başarıyla reddedildi' + rejected_msg: "%{username} adlı kullanıcının kayıt başvurusu başarıyla reddedildi" remove_avatar: Avatarı kaldır remove_header: Üstbilgiyi kaldır - removed_avatar_msg: '%{username} hesabının avatar resmi başarıyla kaldırıldı' - removed_header_msg: '%{username} hesabının başlık resmi başarıyla kaldırıldı' + removed_avatar_msg: "%{username} hesabının avatar resmi başarıyla kaldırıldı" + removed_header_msg: "%{username} hesabının başlık resmi başarıyla kaldırıldı" resend_confirmation: already_confirmed: Bu kullanıcı zaten onaylandı send: Doğrulama epostasını yeniden gönder @@ -200,15 +201,15 @@ tr: suspended: Askıya alındı suspension_irreversible: Bu hesabın verileri geri dönüşümsüz olarak silindi. Hesabı kullanılabilir hale getirmek için hesabın askıya alınmasını kaldırabilirsiniz, ancak daha önce sahip olduğu herhangi bir veri kurtarılamaz. suspension_reversible_hint_html: Hesap askıya alındı ve veriler %{date} tarihinde tamamen kaldırılacak. O zamana kadar, hesap herhangi bir olumsuz etki olmaksızın geri yüklenebilir. Hesabın tüm verilerini hemen kaldırmak isterseniz, bunu aşağıdan yapabilirsiniz. - time_in_queue: '%{time} kuyruğunda bekliyor' + time_in_queue: "%{time} kuyruğunda bekliyor" title: Hesaplar unconfirmed_email: Onaylanmamış e-posta undo_sensitized: Hassaslığı geri al undo_silenced: Susturmayı geri al undo_suspension: Uzaklaştırmayı geri al - unsilenced_msg: '%{username} hesabı başarıyla sınırsız yapıldı' + unsilenced_msg: "%{username} hesabı başarıyla sınırsız yapıldı" unsubscribe: Abonelikten çık - unsuspended_msg: '%{username} hesabının askıya alınması başarıyla kaldırıldı' + unsuspended_msg: "%{username} hesabının askıya alınması başarıyla kaldırıldı" username: Kullanıcı adı view_domain: Alan adı için özeti görüntüleyin warn: Uyar @@ -310,7 +311,7 @@ tr: create: Duyuru oluştur title: Yeni duyuru published_msg: Duyuru başarıyla yayınlandı! - scheduled_for: '%{time} için zamanlandı' + scheduled_for: "%{time} için zamanlandı" scheduled_msg: Duyuru yayınlanmak üzere planlandı! title: Duyurular unpublished_msg: Duyuru başarıyla yayından kaldırıldı! @@ -413,11 +414,11 @@ tr: show: affected_accounts: one: Veritabanındaki bir hesap etkilendi - other: "Veritabanındaki %{count} hesap etkilendi" + other: Veritabanındaki %{count} hesap etkilendi retroactive: silence: Bu domaindeki tüm hesapların üzerindeki susturulma işlemini kaldır suspend: Bu domaindeki tüm hesapların üzerindeki uzaklaştırma işlemini kaldır - title: '%{domain} domain''i için yapılan işlemi geri al' + title: "%{domain} domain'i için yapılan işlemi geri al" undo: Geri al undo: Geri al view: Alan adı bloğunu görüntüle @@ -428,7 +429,7 @@ tr: destroyed_msg: E-posta alan adı kara listeden başarıyla silindi domain: Alan adı empty: Şu anda hiçbir e-posta alan adı kara listeye alınmadı. - from_html: '%{domain} alan adından' + from_html: "%{domain} alan adından" new: create: Alan adı ekle title: Yeni e-posta kara liste girişi @@ -481,7 +482,7 @@ tr: relays: add_new: Yeni aktarıcı ekle delete: Sil - description_html: Federasyon aktarıcısı, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık tootların değiş tokuşunu yapan aracı bir sunucudur. Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir. + description_html: "Federasyon aktarıcısı, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık tootların değiş tokuşunu yapan aracı bir sunucudur. Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir." disable: Devre dışı disabled: Devre dışı enable: Etkin @@ -646,7 +647,7 @@ tr: breakdown: Bugünkü kullanımın kaynağa göre dağılımı context: İçerik directory: Dizinde - in_directory: "Dizinde %{count}" + in_directory: Dizinde %{count} last_active: Son etkinlik most_popular: En popüler most_recent: En yeni @@ -655,7 +656,7 @@ tr: reviewed: Gözden geçirildi title: Etiketler trending_right_now: Şu anda trend - unique_uses_today: "bugün %{count} gönderi" + unique_uses_today: bugün %{count} gönderi unreviewed: Gözden geçirilmedi updated_msg: Etiket ayarları başarıyla güncellendi title: Yönetim @@ -667,14 +668,14 @@ tr: admin_mailer: new_pending_account: body: Yeni hesabın detayları aşağıdadır. Bu başvuruyu onaylayabilir ya da reddedebilirsiniz. - subject: '%{instance} üzerinde gözden geçirmek için yeni hesap (%{username})' + subject: "%{instance} üzerinde gözden geçirmek için yeni hesap (%{username})" new_report: body: "%{reporter}, %{target} kişisini bildirdi" - body_remote: '%{domain} alan adından birisi %{target} kişisini bildirdi' - subject: '%{instance} için yeni şikayet (#%{id})' + body_remote: "%{domain} alan adından birisi %{target} kişisini bildirdi" + subject: "%{instance} için yeni şikayet (#%{id})" new_trending_tag: - body: '#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin.' - subject: '%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})' + body: "#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin." + subject: "%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})" aliases: add_new: Takma ad oluştur created_msg: Yeni takma ad başarıyla oluşturuldu. Artık eski hesaptan taşınmayı başlatabilirsiniz. @@ -763,7 +764,7 @@ tr: close: Ya da, sadece bu pencereyi kapatabilirsiniz. return: Kullanıcının profilini göster web: Web'e git - title: '%{acct} takip et' + title: "%{acct} takip et" challenge: confirm: Devam et hint_html: "İpucu: Önümüzdeki saat boyunca sana parolanı sormayacağız." @@ -811,7 +812,7 @@ tr: directories: directory: Profil Dizini explanation: Kullanıcıları ilgi alanlarına göre keşfedin - explore_mastodon: '%{title} sunucusunu keşfet' + explore_mastodon: "%{title} sunucusunu keşfet" domain_validator: invalid_domain: geçerli bir alan adı değil errors: @@ -831,12 +832,12 @@ tr: noscript_html: Mastodon web uygulamasını kullanmak için lütfen JavaScript'i etkinleştirin. Alternatif olarak, platformunuz için Mastodon yerel uygulamalardan birini deneyin. existing_username_validator: not_found: bu kullanıcı adına sahip yerel bir kullanıcı bulunamadı - not_found_multiple: '%{usernames} bulunamadı' + not_found_multiple: "%{usernames} bulunamadı" exports: archive_takeout: date: Tarih download: Arşivinizi indirin - hint_html: Tootlarınızın ve yüklediğiniz ortamların bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz. + hint_html: "Tootlarınızın ve yüklediğiniz ortamların bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz." in_progress: Arşivinizi derliyoruz... request: Arşivinizi isteyin size: Boyut @@ -896,7 +897,7 @@ tr: keybase: invalid_token: Keybase belirteçleri imza hash'leridir ve 66 hex karakter içermelidir verification_failed: Keybase, bu belirteci, %{kb_username} Keybase kullanıcısının imzası olarak tanımıyor. Lütfen Keybase'den tekrar deneyin. - wrong_user: '%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin.' + wrong_user: "%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin." explanation_html: Burada, Keybase profili gibi diğer kimliklerinizi şifreli olarak bağlayabilirsiniz. Bu, diğer kişilerin size şifreli mesajlar göndermesini ve gönderdiğiniz içeriğe güvenmelerini sağlar. i_am_html: Ben %{service} üzerinde %{username}. identity: Kimlik @@ -1002,7 +1003,7 @@ tr: other: "Son ziyaretinizden bu yana %{count} yeni bildirim \U0001F418" title: Senin yokluğunda... favourite: - body: '%{name} durumunu beğendi:' + body: "%{name} durumunu beğendi:" subject: "%{name} durumunu beğendi" title: Yeni beğeni follow: @@ -1016,11 +1017,11 @@ tr: title: Yeni takip isteği mention: action: Yanıtla - body: '%{name} senden bahsetti:' - subject: '%{name} senden bahsetti' + body: "%{name} senden bahsetti:" + subject: "%{name} senden bahsetti" title: Yeni bahsetme reblog: - body: '%{name} durumunuzu boostladı:' + body: "%{name} durumunuzu boostladı:" subject: "%{name} durumunuzu boostladı" title: Yeni boost notifications: @@ -1061,7 +1062,7 @@ tr: invalid_choice: Seçilen oylama seçeneği mevcut değil over_character_limit: her biri %{max} karakterden daha uzun olamaz too_few_options: birden fazla öğeye sahip olmalı - too_many_options: '%{max} öğeden fazla öğe içeremez' + too_many_options: "%{max} öğeden fazla öğe içeremez" preferences: other: Diğer posting_defaults: Gönderi varsayılanları @@ -1091,7 +1092,7 @@ tr: missing_resource: Hesabınız için gerekli yönlendirme URL'si bulunamadı no_account_html: Hesabınız yok mu? Buradan kaydolabilirsiniz proceed: Takip etmek için devam edin - prompt: 'Bu kullanıcıyı takip etmek istediğinize emin misiniz?' + prompt: Bu kullanıcıyı takip etmek istediğinize emin misiniz? reason_html: "Bu adım neden gerekli?%{instance} kayıtlı olduğunuz sunucu olmayabilir, bu yüzden önce sizi kendi sunucunuza yönlendirmemiz gerekmektedir." remote_interaction: favourite: @@ -1105,7 +1106,7 @@ tr: prompt: 'Bu tootu yanıtlamak istiyorsunuz:' scheduled_statuses: over_daily_limit: O gün için %{limit} zamanlanmış toot sınırını aştınız - over_total_limit: '%{limit} zamanlanmış toot sınırını aştınız' + over_total_limit: "%{limit} zamanlanmış toot sınırını aştınız" too_soon: Programlanan tarih bugünden ileri bir tarihte olmalıdır sessions: activity: Son etkinlik @@ -1184,7 +1185,7 @@ tr: video: one: "%{count} video" other: "%{count} video" - boosted_from_html: '%{acct_link} kişisinden boostladı' + boosted_from_html: "%{acct_link} kişisinden boostladı" content_warning: 'İçerik uyarısı: %{warning}' disallowed_hashtags: one: 'izin verilmeyen bir etiket içeriyordu: %{tags}' @@ -1193,7 +1194,7 @@ tr: in_reply_not_found: Yanıtlamaya çalıştığınız durum yok gibi görünüyor. language_detection: Dili otomatik olarak algıla open_in_web: Web sayfasında aç - over_character_limit: '%{max} karakter limiti aşıldı' + over_character_limit: "%{max} karakter limiti aşıldı" pin_errors: limit: Hali hazırda maksimum sayıda tootu sabitlediniz ownership: Başkasının tootu sabitlenemez @@ -1349,15 +1350,15 @@ tr: sensitive: Yüklediğiniz medya dosyalarınız ve bağlantılı medyanız hassas olarak değerlendirilecektir. silence: Hesabınız sınırlı iken, yalnızca sizi takip eden kişiler bu sunucuda tootlarınızı görecek ve çeşitli halka açık listelerin dışında tutulabilirsiniz. Ancak, diğerleri hala sizi manuel olarak takip edebilir. suspend: Hesabınız askıya alındı ve tüm tootlarınız ve yüklediğiniz medya dosyalarınız bu sunucudan ve takipçilerinizin bulunduğu sunuculardan geri alınamaz şekilde kaldırıldı. - get_in_touch: '%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz.' + get_in_touch: "%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz." review_server_policies: Sunucu politikalarını inceleyin statuses: 'Özellikle, şunun için:' subject: - disable: '%{acct} hesabınız donduruldu' - none: '%{acct} için uyarı' + disable: "%{acct} hesabınız donduruldu" + none: "%{acct} için uyarı" sensitive: Hesabınızdan yayınlanan %{acct} medyanız hassas olarak işaretlendi - silence: '%{acct} hesabınız sınırlandırıldı' - suspend: '%{acct} hesabınız askıya alındı' + silence: "%{acct} hesabınız sınırlandırıldı" + suspend: "%{acct} hesabınız askıya alındı" title: disable: Hesap donduruldu none: Uyarı @@ -1383,7 +1384,7 @@ tr: title: Gemiye hoşgeldin, %{name}! users: blocked_email_provider: Bu e-posta sağlayıcısına izin verilmiyor - follow_limit_reached: '%{limit} kişiden daha fazlasını takip edemezsiniz' + follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz" generic_access_help_html: Hesabınıza erişirken sorun mu yaşıyorsunuz? Yardım için %{email} ile iletişime geçebilirsiniz invalid_email: E-posta adresi geçersiz invalid_email_mx: E-posta adresi mevcut görünmüyor @@ -1403,7 +1404,7 @@ tr: success: Güvenlik anahtarınız başarıyla eklendi. delete: Sil delete_confirmation: Bu güvenlik anahtarını silmek istediğinizden emin misiniz? - description_html: Güvenlik anahtarı kimlik doğrulamasını etkinleştirirseniz, giriş yapmak için güvenlik anahtarlarınızdan birini kullanmanız gerekir. + description_html: "Güvenlik anahtarı kimlik doğrulamasını etkinleştirirseniz, giriş yapmak için güvenlik anahtarlarınızdan birini kullanmanız gerekir." destroy: error: Güvenlik anahtarını silerken bir sorun oluştu. Lütfen tekrar deneyin. success: Güvenlik anahtarınız başarıyla silindi. @@ -1412,4 +1413,4 @@ tr: not_enabled: Henüz WebAuthn'u etkinleştirmediniz not_supported: Bu tarayıcı güvenlik anahtarlarını desteklemiyor otp_required: Güvenlik anahtarlarını kullanmak için lütfen önce iki adımlı kimlik doğrulamayı etkinleştirin. - registered_on: '%{date} tarihinde kaydoldu' + registered_on: "%{date} tarihinde kaydoldu" From 337dc6e0add164baa70bea690621fe23191d08a9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 9 Nov 2020 16:00:23 +0100 Subject: [PATCH 168/422] Fix updating account counters when account_stat is not yet created (#15108) --- app/models/account_stat.rb | 25 +++++++++++++++---------- spec/models/account_spec.rb | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index c84e4217c..e70b54d79 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -21,26 +21,26 @@ class AccountStat < ApplicationRecord def increment_count!(key) update(attributes_for_increment(key)) - rescue ActiveRecord::StaleObjectError + rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique begin reload_with_id rescue ActiveRecord::RecordNotFound - # Nothing to do - else - retry + return end + + retry end def decrement_count!(key) - update(key => [public_send(key) - 1, 0].max) - rescue ActiveRecord::StaleObjectError + update(attributes_for_decrement(key)) + rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotUnique begin reload_with_id rescue ActiveRecord::RecordNotFound - # Nothing to do - else - retry + return end + + retry end private @@ -51,8 +51,13 @@ class AccountStat < ApplicationRecord attrs end + def attributes_for_decrement(key) + attrs = { key => [public_send(key) - 1, 0].max } + attrs + end + def reload_with_id - self.id = find_by!(account: account).id if new_record? + self.id = self.class.find_by!(account: account).id if new_record? reload end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 98d29e6f3..75f628076 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -817,4 +817,27 @@ RSpec.describe Account, type: :model do include_examples 'AccountAvatar', :account include_examples 'AccountHeader', :account + + describe '#increment_count!' do + subject { Fabricate(:account) } + + it 'increments the count in multi-threaded an environment when account_stat is not yet initialized' do + subject + + increment_by = 15 + wait_for_start = true + + threads = Array.new(increment_by) do + Thread.new do + true while wait_for_start + Account.find(subject.id).increment_count!(:followers_count) + end + end + + wait_for_start = false + threads.each(&:join) + + expect(subject.reload.followers_count).to eq 15 + end + end end From 880fc9baafb2f6a1a341a2139028e385f2e877cf Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 10 Nov 2020 08:53:54 +0100 Subject: [PATCH 169/422] New Crowdin updates (#15110) * New translations doorkeeper.en.yml (Hungarian) [ci skip] * New translations doorkeeper.en.yml (Korean) [ci skip] * New translations doorkeeper.en.yml (Georgian) [ci skip] * New translations doorkeeper.en.yml (Japanese) [ci skip] * New translations doorkeeper.en.yml (Italian) [ci skip] * New translations doorkeeper.en.yml (Armenian) [ci skip] * New translations doorkeeper.en.yml (Hebrew) [ci skip] * New translations doorkeeper.en.yml (Dutch) [ci skip] * New translations doorkeeper.en.yml (Finnish) [ci skip] * New translations doorkeeper.en.yml (Basque) [ci skip] * New translations doorkeeper.en.yml (Greek) [ci skip] * New translations doorkeeper.en.yml (German) [ci skip] * New translations doorkeeper.en.yml (Danish) [ci skip] * New translations doorkeeper.en.yml (Czech) [ci skip] * New translations doorkeeper.en.yml (Catalan) [ci skip] * New translations doorkeeper.en.yml (Norwegian) [ci skip] * New translations doorkeeper.en.yml (Persian) [ci skip] * New translations doorkeeper.en.yml (Ukrainian) [ci skip] * New translations doorkeeper.en.yml (Indonesian) [ci skip] * New translations doorkeeper.en.yml (Portuguese, Brazilian) [ci skip] * New translations doorkeeper.en.yml (Galician) [ci skip] * New translations doorkeeper.en.yml (Vietnamese) [ci skip] * New translations doorkeeper.en.yml (Chinese Traditional) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations doorkeeper.en.yml (Polish) [ci skip] * New translations doorkeeper.en.yml (Swedish) [ci skip] * New translations doorkeeper.en.yml (Serbian (Cyrillic)) [ci skip] * New translations doorkeeper.en.yml (Albanian) [ci skip] * New translations doorkeeper.en.yml (Slovenian) [ci skip] * New translations doorkeeper.en.yml (Slovak) [ci skip] * New translations doorkeeper.en.yml (Russian) [ci skip] * New translations doorkeeper.en.yml (Portuguese) [ci skip] * New translations en.json (Kazakh) [ci skip] * New translations en.yml (Norwegian Nynorsk) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Bulgarian) [ci skip] * New translations simple_form.en.yml (Czech) [ci skip] * New translations en.yml (Czech) [ci skip] * New translations en.json (Czech) [ci skip] * New translations simple_form.en.yml (Catalan) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.yml (Bulgarian) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations en.json (Bulgarian) [ci skip] * New translations simple_form.en.yml (Arabic) [ci skip] * New translations en.yml (Arabic) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Danish) [ci skip] * New translations simple_form.en.yml (Danish) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations simple_form.en.yml (Hebrew) [ci skip] * New translations en.yml (Hebrew) [ci skip] * New translations simple_form.en.yml (Finnish) [ci skip] * New translations en.json (German) [ci skip] * New translations en.yml (Finnish) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations simple_form.en.yml (Basque) [ci skip] * New translations en.yml (Basque) [ci skip] * New translations en.json (Basque) [ci skip] * New translations simple_form.en.yml (Greek) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations simple_form.en.yml (French) [ci skip] * New translations en.json (French) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.json (Korean) [ci skip] * New translations simple_form.en.yml (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.yml (German) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations simple_form.en.yml (Romanian) [ci skip] * New translations simple_form.en.yml (Croatian) [ci skip] * New translations en.yml (Romanian) [ci skip] * New translations en.json (Romanian) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations simple_form.en.yml (Breton) [ci skip] * New translations en.yml (Breton) [ci skip] * New translations doorkeeper.en.yml (Croatian) [ci skip] * New translations en.yml (Croatian) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations simple_form.en.yml (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations simple_form.en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations doorkeeper.en.yml (Icelandic) [ci skip] * New translations simple_form.en.yml (Icelandic) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations simple_form.en.yml (Chinese Traditional) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations simple_form.en.yml (Galician) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.yml (Urdu (Pakistan)) [ci skip] * New translations en.json (Urdu (Pakistan)) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations simple_form.en.yml (Portuguese, Brazilian) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations simple_form.en.yml (Ukrainian) [ci skip] * New translations en.yml (Ukrainian) [ci skip] * New translations en.json (Ukrainian) [ci skip] * New translations en.yml (Portuguese, Brazilian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations en.json (Bengali) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.yml (Marathi) [ci skip] * New translations en.json (Marathi) [ci skip] * New translations simple_form.en.yml (Bengali) [ci skip] * New translations en.yml (Bengali) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations simple_form.en.yml (Tamil) [ci skip] * New translations en.yml (Tamil) [ci skip] * New translations en.json (Tamil) [ci skip] * New translations simple_form.en.yml (Persian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations en.json (Persian) [ci skip] * New translations simple_form.en.yml (Indonesian) [ci skip] * New translations simple_form.en.yml (Swedish) [ci skip] * New translations en.json (Swedish) [ci skip] * New translations simple_form.en.yml (Italian) [ci skip] * New translations en.json (Macedonian) [ci skip] * New translations en.json (Norwegian) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.yml (Macedonian) [ci skip] * New translations simple_form.en.yml (Norwegian) [ci skip] * New translations en.yml (Lithuanian) [ci skip] * New translations en.json (Lithuanian) [ci skip] * New translations simple_form.en.yml (Korean) [ci skip] * New translations simple_form.en.yml (Georgian) [ci skip] * New translations en.yml (Georgian) [ci skip] * New translations en.json (Georgian) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.yml (Norwegian) [ci skip] * New translations en.json (Polish) [ci skip] * New translations simple_form.en.yml (Serbian (Cyrillic)) [ci skip] * New translations en.json (Slovenian) [ci skip] * New translations en.yml (Serbian (Cyrillic)) [ci skip] * New translations en.json (Serbian (Cyrillic)) [ci skip] * New translations simple_form.en.yml (Albanian) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations simple_form.en.yml (Slovenian) [ci skip] * New translations en.yml (Slovenian) [ci skip] * New translations simple_form.en.yml (Slovak) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Slovak) [ci skip] * New translations en.json (Slovak) [ci skip] * New translations simple_form.en.yml (Russian) [ci skip] * New translations en.json (Russian) [ci skip] * New translations simple_form.en.yml (Portuguese) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations simple_form.en.yml (Polish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations devise.en.yml (Turkish) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations simple_form.en.yml (Japanese) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations devise.en.yml (Japanese) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations simple_form.en.yml (Icelandic) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations devise.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations activerecord.en.yml (Icelandic) [ci skip] * New translations devise.en.yml (Icelandic) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations en.json (Russian) [ci skip] * New translations simple_form.en.yml (Russian) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations devise.en.yml (Chinese Simplified) [ci skip] * New translations devise.en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations doorkeeper.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations activerecord.en.yml (Turkish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * Fix invalid syntax * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * bundle exec i18n-tasks normalize * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Icelandic) [ci skip] * bundle exec i18n-tasks normalize * New translations simple_form.en.yml (Vietnamese) [ci skip] * bundle exec i18n-tasks normalize [ci skip] Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/co.json | 2 +- app/javascript/mastodon/locales/es.json | 210 ++++++++++----------- app/javascript/mastodon/locales/ru.json | 14 +- app/javascript/mastodon/locales/sa.json | 2 +- app/javascript/mastodon/locales/szl.json | 2 +- app/javascript/mastodon/locales/tai.json | 2 +- app/javascript/mastodon/locales/tr.json | 92 ++++----- app/javascript/mastodon/locales/ug.json | 2 +- app/javascript/mastodon/locales/vi.json | 2 +- app/javascript/mastodon/locales/zgh.json | 68 +++---- app/javascript/mastodon/locales/zh-CN.json | 4 +- config/locales/devise.ja.yml | 7 + config/locales/devise.tr.yml | 4 +- config/locales/devise.zgh.yml | 7 + config/locales/devise.zh-CN.yml | 12 +- config/locales/doorkeeper.tr.yml | 18 +- config/locales/doorkeeper.zgh.yml | 41 ++++ config/locales/is.yml | 14 +- config/locales/ja.yml | 17 +- config/locales/kab.yml | 4 +- config/locales/ru.yml | 12 ++ config/locales/simple_form.is.yml | 1 + config/locales/simple_form.ja.yml | 4 + config/locales/simple_form.ru.yml | 1 + config/locales/simple_form.tr.yml | 62 +++--- config/locales/simple_form.vi.yml | 22 +-- config/locales/simple_form.zgh.yml | 40 ++++ config/locales/tr.yml | 40 ++-- config/locales/vi.yml | 28 +-- config/locales/zgh.yml | 114 +++++++++++ 30 files changed, 546 insertions(+), 302 deletions(-) diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 26e5e9f20..10d5f9008 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -134,7 +134,7 @@ "directory.new_arrivals": "Ultimi arrivi", "directory.recently_active": "Attività ricente", "embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.", - "embed.preview": "Assumiglierà à qualcosa cusì:", + "embed.preview": "Hà da parè à quessa:", "emoji_button.activity": "Attività", "emoji_button.custom": "Persunalizati", "emoji_button.flags": "Bandere", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b4bfffebe..144b14c58 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -1,131 +1,131 @@ { "account.account_note_header": "Nota", - "account.add_or_remove_from_list": "Agregar o quitar de listas", + "account.add_or_remove_from_list": "Agregar o eliminar de listas", "account.badges.bot": "Bot", "account.badges.group": "Grupo", "account.block": "Bloquear a @{name}", - "account.block_domain": "Bloquear dominio {domain}", - "account.blocked": "Cuenta bloqueada", + "account.block_domain": "Ocultar todo de {domain}", + "account.blocked": "Bloqueado", "account.browse_more_on_origin_server": "Ver más en el perfil original", - "account.cancel_follow_request": "Cancelar solicitud de seguimiento", + "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", "account.direct": "Mensaje directo a @{name}", - "account.disable_notifications": "Dejar de notificarme cuando @{name} publica", - "account.domain_blocked": "Dominio bloqueado", + "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", + "account.domain_blocked": "Dominio oculto", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notificarme cuando @{name} publica", - "account.endorse": "Recomendar en mi perfil", + "account.enable_notifications": "Notificarme cuando @{name} publique algo", + "account.endorse": "Mostrar en perfil", "account.follow": "Seguir", - "account.followers": "Seguidorxs", - "account.followers.empty": "Nadie sigue a @{name} aún.", - "account.followers_counter": "{count, plural, one {{counter} Seguidor o Seguidora} other {{counter} Seguidorxs}}", + "account.followers": "Seguidores", + "account.followers.empty": "Todavía nadie sigue a este usuario.", + "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", "account.following_counter": "{count, plural, other {{counter} Siguiendo}}", - "account.follows.empty": "@{name} no sigue a nadie aún.", + "account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.follows_you": "Te sigue", - "account.hide_reblogs": "Ocultar publicaciones compartidas por @{name}", + "account.hide_reblogs": "Ocultar retoots de @{name}", "account.last_status": "Última actividad", - "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", - "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. @{name} revisa manualmente revisa quién puede seguirle.", - "account.media": "Medios", + "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", + "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", + "account.media": "Multimedia", "account.mention": "Mencionar a @{name}", - "account.moved_to": "{name} se ha cambiado a:", + "account.moved_to": "{name} se ha mudado a:", "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}", - "account.muted": "Cuenta silenciada", + "account.muted": "Silenciado", "account.never_active": "Nunca", - "account.posts": "Publicaciones", - "account.posts_with_replies": "Publicaciones y respuestas", + "account.posts": "Toots", + "account.posts_with_replies": "Toots con respuestas", "account.report": "Reportar a @{name}", - "account.requested": "Esperando aprobación. Da clic para cancelar la solicitud de seguimiento", + "account.requested": "Esperando aprobación", "account.share": "Compartir el perfil de @{name}", - "account.show_reblogs": "Mostrar publicaciones compartidas por @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}", + "account.show_reblogs": "Mostrar retoots de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Desbloquear a @{name}", - "account.unblock_domain": "Desbloquear dominio {domain}", - "account.unendorse": "No recomendar en mi perfil", + "account.unblock_domain": "Mostrar a {domain}", + "account.unendorse": "No mostrar en el perfil", "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", - "account.unmute_notifications": "Dejar de silenciar notificaciones de @{name}", - "account_note.placeholder": "Haz clic par agregar una nota", - "alert.rate_limited.message": "Por favor, reintenta después de las {retry_time, time, medium}.", - "alert.rate_limited.title": "Acción limitada", - "alert.unexpected.message": "Ocurrió un error inesperado.", - "alert.unexpected.title": "¡Ay güey!", + "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", + "account_note.placeholder": "Clic para añadir nota", + "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", + "alert.rate_limited.title": "Tarifa limitada", + "alert.unexpected.message": "Hubo un error inesperado.", + "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", "autosuggest_hashtag.per_week": "{count} por semana", - "boost_modal.combo": "Puedes hacer clic en {combo} para saltar esto la próxima vez", + "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", - "bundle_column_error.retry": "Intentar de nuevo", + "bundle_column_error.retry": "Inténtalo de nuevo", "bundle_column_error.title": "Error de red", "bundle_modal_error.close": "Cerrar", "bundle_modal_error.message": "Algo salió mal al cargar este componente.", "bundle_modal_error.retry": "Inténtalo de nuevo", - "column.blocks": "Personas bloqueadas", + "column.blocks": "Usuarios bloqueados", "column.bookmarks": "Marcadores", "column.community": "Línea de tiempo local", "column.direct": "Mensajes directos", - "column.directory": "Ver perfiles", - "column.domain_blocks": "Dominios bloqueados", + "column.directory": "Buscar perfiles", + "column.domain_blocks": "Dominios ocultados", "column.favourites": "Favoritos", "column.follow_requests": "Solicitudes de seguimiento", - "column.home": "Principal", + "column.home": "Inicio", "column.lists": "Listas", - "column.mutes": "Cuentas silenciadas", + "column.mutes": "Usuarios silenciados", "column.notifications": "Notificaciones", - "column.pins": "Publicaciones fijadas", - "column.public": "Línea temporal federada", - "column_back_button.label": "Volver", + "column.pins": "Toots fijados", + "column.public": "Línea de tiempo federada", + "column_back_button.label": "Atrás", "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", "column_header.moveRight_settings": "Mover columna a la derecha", "column_header.pin": "Fijar", - "column_header.show_settings": "Mostrar configuración", - "column_header.unpin": "Desfijar", - "column_subheading.settings": "Configuración", - "community.column_settings.local_only": "Sólo local", - "community.column_settings.media_only": "Sólo medios", - "community.column_settings.remote_only": "Sólo remoto", - "compose_form.direct_message_warning": "Esta publicación sólo será enviada las personas mencionadas.", + "column_header.show_settings": "Mostrar ajustes", + "column_header.unpin": "Dejar de fijar", + "column_subheading.settings": "Ajustes", + "community.column_settings.local_only": "Solo local", + "community.column_settings.media_only": "Solo media", + "community.column_settings.remote_only": "Solo remoto", + "compose_form.direct_message_warning": "Este toot solo será enviado a los usuarios mencionados.", "compose_form.direct_message_warning_learn_more": "Aprender mas", - "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo hashtags porque no es público. Sólo se pueden buscar por hashtag las que son públicas.", + "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", - "compose_form.lock_disclaimer.lock": "bloqueada", - "compose_form.placeholder": "¿Qué rollo?", + "compose_form.lock_disclaimer.lock": "bloqueado", + "compose_form.placeholder": "¿En qué estás pensando?", "compose_form.poll.add_option": "Añadir una opción", "compose_form.poll.duration": "Duración de la encuesta", - "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.remove_option": "Quitar esta opción", - "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir opciones múltiples", - "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una sola opción", - "compose_form.publish": "Publicar", - "compose_form.publish_loud": "¡{publish}!", - "compose_form.sensitive.hide": "Marcar medio como sensible", - "compose_form.sensitive.marked": "Medio marcado como sensible", - "compose_form.sensitive.unmarked": "Medio no marcado como sensible", - "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", - "compose_form.spoiler.unmarked": "El texto no está oculto", - "compose_form.spoiler_placeholder": "Escribe tu advertencia aquí", + "compose_form.poll.option_placeholder": "Elección {number}", + "compose_form.poll.remove_option": "Eliminar esta opción", + "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", + "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", + "compose_form.publish": "Tootear", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Marcar multimedia como sensible", + "compose_form.sensitive.marked": "Material marcado como sensible", + "compose_form.sensitive.unmarked": "Material no marcado como sensible", + "compose_form.spoiler.marked": "Texto oculto tras la advertencia", + "compose_form.spoiler.unmarked": "Texto no oculto", + "compose_form.spoiler_placeholder": "Advertencia de contenido", "confirmation_modal.cancel": "Cancelar", - "confirmations.block.block_and_report": "Bloquear y denunciar", + "confirmations.block.block_and_report": "Bloquear y Reportar", "confirmations.block.confirm": "Bloquear", - "confirmations.block.message": "¿Estás segurx que quieres bloquear a {name}?", + "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás segurx que quieres eliminar esta publicación?", + "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", "confirmations.delete_list.confirm": "Eliminar", - "confirmations.delete_list.message": "¿Estás segurx que quieres eliminar esta lista permanentemente?", - "confirmations.domain_block.confirm": "Bloquear dominio entero", + "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", + "confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", "confirmations.logout.confirm": "Cerrar sesión", - "confirmations.logout.message": "¿Estás segurx que quieres cerrar sesión?", + "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?", "confirmations.mute.confirm": "Silenciar", "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", - "confirmations.mute.message": "¿Estás segurx que quieres silenciar a {name}?", - "confirmations.redraft.confirm": "Eliminar y volver a redactar", + "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", + "confirmations.redraft.confirm": "Borrar y volver a borrador", "confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", "confirmations.unfollow.confirm": "Dejar de seguir", - "confirmations.unfollow.message": "¿Estás seguro que quieres dejar de seguir a {name}?", - "conversation.delete": "Eliminar conversación", + "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", + "conversation.delete": "Borrar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", "conversation.with": "Con {names}", @@ -151,22 +151,22 @@ "emoji_button.travel": "Viajes y lugares", "empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_unavailable": "Perfil no disponible", - "empty_column.blocks": "No has bloqueado a nadie aún.", - "empty_column.bookmarked_statuses": "Todavía no tienes publicaciones guardadas en \"Marcadores\". Cuando guardes una, se mostrará quí.", + "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", + "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", - "empty_column.direct": "Todavía no tienes mensaje directos. Cuando envíes o recibas uno, se mostrará aquí.", + "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", - "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques un favorito, se mostrará aquí.", + "empty_column.favourited_statuses": "Aún no tienes toots preferidos. Cuando marques uno como favorito, aparecerá aquí.", "empty_column.favourites": "Nadie ha marcado este toot como preferido. Cuando alguien lo haga, aparecerá aquí.", - "empty_column.follow_requests": "Todavía no tienes solicitudes de seguimiento. Cuando recibas una, se mostrará aquí.", + "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", - "empty_column.home": "¡Tu línea de tiempo principal está vacía! Visita {public} o usa la búsqueda para comenzar y encontrar a otras personas.", + "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", "empty_column.home.public_timeline": "la línea de tiempo pública", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", - "empty_column.lists": "Todavía no tienes listas. Cuando crees una, se mostrará aquí.", - "empty_column.mutes": "No has silenciado a nadie aún.", - "empty_column.notifications": "Todavía no tienes notificaciones. Interactúa con otras personas para iniciar la conversación.", - "empty_column.public": "¡No hay nada aquí! Escribe algo público, o manualmente sigue a alguien de otros servidores para irlo llenando", + "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", + "empty_column.mutes": "Aún no has silenciado a ningún usuario.", + "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", + "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", @@ -183,7 +183,7 @@ "getting_started.heading": "Primeros pasos", "getting_started.invite": "Invitar usuarios", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", - "getting_started.security": "Configuración de cuenta", + "getting_started.security": "Seguridad", "getting_started.terms": "Términos de servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", @@ -220,9 +220,9 @@ "introduction.welcome.headline": "Primeros pasos", "introduction.welcome.text": "¡Bienvenido al fediverso! En unos momentos, podrás transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial, alberga tu perfil, así que recuerda su nombre.", "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abre la lista de personas bloqueadas", + "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", "keyboard_shortcuts.boost": "retootear", - "keyboard_shortcuts.column": "enfoca una publicación un una de las columnas", + "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "abrir la columna de mensajes directos", @@ -237,11 +237,11 @@ "keyboard_shortcuts.legend": "para mostrar esta leyenda", "keyboard_shortcuts.local": "abrir el timeline local", "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abre la lista de personas silenciadas", + "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", "keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.open_media": "para abrir archivos multimedia", - "keyboard_shortcuts.pinned": "abre la lista de publicaciones fijadas", + "keyboard_shortcuts.pinned": "abrir la lista de toots destacados", "keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", @@ -266,7 +266,7 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", - "lists.replies_policy.all_replies": "Cualquier persona seguida", + "lists.replies_policy.all_replies": "Cualquier usuario al que sigas", "lists.replies_policy.list_replies": "Miembros de la lista", "lists.replies_policy.no_replies": "Nadie", "lists.replies_policy.title": "Mostrar respuestas a:", @@ -278,10 +278,10 @@ "missing_indicator.label": "No encontrado", "missing_indicator.sublabel": "No se encontró este recurso", "mute_modal.duration": "Duración", - "mute_modal.hide_notifications": "¿Ocultar notificaciones de esta persona?", + "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?", "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicaciones móviles", - "navigation_bar.blocks": "Personas bloqueadas", + "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Historia local", "navigation_bar.compose": "Escribir un nuevo toot", @@ -297,11 +297,11 @@ "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Cerrar sesión", - "navigation_bar.mutes": "Personas silenciadas", + "navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Publicaciones fijadas", + "navigation_bar.pins": "Toots fijados", "navigation_bar.preferences": "Preferencias", - "navigation_bar.public_timeline": "Línea de tiempo federada", + "navigation_bar.public_timeline": "Historia federada", "navigation_bar.security": "Seguridad", "notification.favourite": "{name} marcó tu estado como favorito", "notification.follow": "{name} te empezó a seguir", @@ -351,10 +351,10 @@ "poll_button.add_poll": "Añadir una encuesta", "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", - "privacy.direct.long": "Sólo visible para las personas mencionadas", + "privacy.direct.long": "Sólo mostrar a los usuarios mencionados", "privacy.direct.short": "Directo", "privacy.private.long": "Sólo mostrar a seguidores", - "privacy.private.short": "Sólo a seguidorxs", + "privacy.private.short": "Privado", "privacy.public.long": "Mostrar en la historia federada", "privacy.public.short": "Público", "privacy.unlisted.long": "No mostrar en la historia federada", @@ -377,20 +377,20 @@ "report.target": "Reportando", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", - "search_popout.tips.full_text": "Las búsquedas de texto recuperan publicaciones que hayas escrito, marcado como favoritas, compartido, o en las que te hayan mencionado, así como personas, nombres y hashtags.", + "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "publicación", - "search_popout.tips.text": "Las búsquedas de texto devuelven los nombres mostrados, nombres de usuarix y hashtags que coincidan", - "search_popout.tips.user": "usuarix", + "search_popout.tips.status": "toot", + "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", + "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", - "search_results.statuses": "Publicaciones", + "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcar", + "status.bookmark": "Marcador", "status.cancel_reblog_private": "Eliminar retoot", "status.cannot_reblog": "Este toot no puede retootearse", "status.copy": "Copiar enlace al estado", @@ -408,14 +408,14 @@ "status.mute_conversation": "Silenciar conversación", "status.open": "Expandir estado", "status.pin": "Fijar", - "status.pinned": "Publicación fijada", + "status.pinned": "Toot fijado", "status.read_more": "Leer más", "status.reblog": "Retootear", "status.reblog_private": "Implusar a la audiencia original", "status.reblogged_by": "Retooteado por {name}", "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", - "status.remove_bookmark": "Quitar marcador", + "status.remove_bookmark": "Eliminar marcador", "status.reply": "Responder", "status.replyAll": "Responder al hilo", "status.report": "Reportar", @@ -428,7 +428,7 @@ "status.show_thread": "Mostrar hilo", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", - "status.unpin": "Desfijar", + "status.unpin": "Dejar de fijar", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 79b9966db..5a2d5a54e 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -254,8 +254,8 @@ "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Сжать окно просмотра изображений", + "lightbox.expand": "Развернуть окно просмотра изображений", "lightbox.next": "Далее", "lightbox.previous": "Назад", "lightbox.view_context": "Контекст", @@ -336,11 +336,11 @@ "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", "notifications.group": "{count} уведомл.", "notifications.mark_as_read": "Отмечать все уведомления прочитанными", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", + "notifications.permission_denied": "Уведомления на рабочем столе недоступны из-за ранее отклонённого запроса разрешений браузера", + "notifications.permission_denied_alert": "Уведомления на рабочем столе не могут быть включены, так как раньше было отказано в разрешении браузера", + "notifications_permission_banner.enable": "Включить уведомления на рабочем столе", + "notifications_permission_banner.how_to_control": "Чтобы получать уведомления, когда Мастодон не открыт, включите уведомления рабочего стола. Вы можете точно управлять, какие типы взаимодействия генерируют уведомления рабочего стола с помощью кнопки {icon} выше, когда они включены.", + "notifications_permission_banner.title": "Ничего не пропустите", "picture_in_picture.restore": "Вернуть обратно", "poll.closed": "Завершён", "poll.refresh": "Обновить", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index bc8463d59..a8f5171c9 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -470,7 +470,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading...", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 2e57d620b..17ffe5519 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -470,7 +470,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading...", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 2e57d620b..17ffe5519 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -470,7 +470,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading...", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 47ce6f83f..650fbe806 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -103,7 +103,7 @@ "compose_form.sensitive.unmarked": "{count, plural, one {Medya hassas olarak işaretlenmemiş} other {Medya hassas olarak işaretlenmemiş}}", "compose_form.spoiler.marked": "Metin uyarının arkasına gizlenir", "compose_form.spoiler.unmarked": "Metin gizli değil", - "compose_form.spoiler_placeholder": "İçerik uyarısı", + "compose_form.spoiler_placeholder": "Uyarınızı buraya yazın", "confirmation_modal.cancel": "İptal", "confirmations.block.block_and_report": "Engelle ve Bildir", "confirmations.block.confirm": "Engelle", @@ -164,7 +164,7 @@ "empty_column.home.public_timeline": "herkese açık zaman tüneli", "empty_column.list": "Bu listede henüz hiçbir şey yok.", "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.", - "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.", + "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.", "empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", @@ -210,7 +210,7 @@ "introduction.federation.local.headline": "Yerel", "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", "introduction.interactions.action": "Öğreticiyi bitir!", - "introduction.interactions.favourite.headline": "Favori", + "introduction.interactions.favourite.headline": "Beğeni", "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.", "introduction.interactions.reblog.headline": "Boostla", "introduction.interactions.reblog.text": "Başkalarının tootlarını boostlayarak onları kendi takipçilerinizle paylaşabillirsiniz.", @@ -220,20 +220,20 @@ "introduction.welcome.headline": "İlk adımlar", "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", "keyboard_shortcuts.back": "geriye gitmek için", - "keyboard_shortcuts.blocked": "engelli kullanıcılar listesini açmak için", + "keyboard_shortcuts.blocked": "engellenen kullanıcılar listesini açmak için", "keyboard_shortcuts.boost": "boostlamak için", "keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", - "keyboard_shortcuts.direct": "doğrudan mesajlar sütununu açmak için", + "keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için", "keyboard_shortcuts.down": "listede aşağıya inmek için", "keyboard_shortcuts.enter": "durumu açmak için", - "keyboard_shortcuts.favourite": "favorilere eklemek için", + "keyboard_shortcuts.favourite": "beğenmek için", "keyboard_shortcuts.favourites": "favoriler listesini açmak için", "keyboard_shortcuts.federated": "federe edilmiş zaman tünelini açmak için", "keyboard_shortcuts.heading": "Klavye kısayolları", - "keyboard_shortcuts.home": "ana sayfa zaman çizelgesini açmak için", - "keyboard_shortcuts.hotkey": "Kısatuş", + "keyboard_shortcuts.home": "anasayfa zaman çizelgesini açmak için", + "keyboard_shortcuts.hotkey": "Kısayol tuşu", "keyboard_shortcuts.legend": "bu efsaneyi görüntülemek için", "keyboard_shortcuts.local": "yerel zaman tünelini açmak için", "keyboard_shortcuts.mention": "yazardan bahsetmek için", @@ -246,11 +246,11 @@ "keyboard_shortcuts.reply": "yanıtlamak için", "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", "keyboard_shortcuts.search": "aramaya odaklanmak için", - "keyboard_shortcuts.spoilers": "CW akışı göster/gizle", - "keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için", + "keyboard_shortcuts.spoilers": "CW alanını göstermek/gizlemek için", + "keyboard_shortcuts.start": "\"başlarken\" sütununu açmak için", "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", "keyboard_shortcuts.toggle_sensitivity": "medyayı göstermek/gizlemek için", - "keyboard_shortcuts.toot": "yeni bir toot başlatmak için", + "keyboard_shortcuts.toot": "yepyeni bir toot başlatmak için", "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", @@ -314,8 +314,8 @@ "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.alert": "Masaüstü bildirimleri", - "notifications.column_settings.favourite": "Favoriler:", - "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri göster", + "notifications.column_settings.favourite": "Beğeniler:", + "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle", "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", "notifications.column_settings.filter_bar.show": "Göster", "notifications.column_settings.follow": "Yeni takipçiler:", @@ -324,12 +324,12 @@ "notifications.column_settings.poll": "Anket sonuçları:", "notifications.column_settings.push": "Anlık bildirimler", "notifications.column_settings.reblog": "Boostlar:", - "notifications.column_settings.show": "Bildirimlerde göster", + "notifications.column_settings.show": "Sütunda göster", "notifications.column_settings.sound": "Ses çal", - "notifications.column_settings.status": "Yeni toot'lar:", + "notifications.column_settings.status": "Yeni tootlar:", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", - "notifications.filter.favourites": "Favoriler", + "notifications.filter.favourites": "Beğeniler", "notifications.filter.follows": "Takip edilenler", "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", @@ -349,19 +349,19 @@ "poll.vote": "Oy ver", "poll.voted": "Bu cevap için oy kullandınız", "poll_button.add_poll": "Bir anket ekleyin", - "poll_button.remove_poll": "Anket kaldır", - "privacy.change": "Gönderi gizliliğini ayarla", - "privacy.direct.long": "Sadece bahsedilen kişilere gönder", - "privacy.direct.short": "Doğrudan", - "privacy.private.long": "Sadece takipçilerime gönder", + "poll_button.remove_poll": "Anketi kaldır", + "privacy.change": "Toot gizliliğini ayarlayın", + "privacy.direct.long": "Sadece bahsedilen kullanıcılar için görünür", + "privacy.direct.short": "Direkt", + "privacy.private.long": "Sadece takipçiler için görünür", "privacy.private.short": "Sadece takipçiler", - "privacy.public.long": "Herkese açık zaman tüneline gönder", + "privacy.public.long": "Herkese görünür, herkese açık zaman çizelgelerinde gösterilir", "privacy.public.short": "Herkese açık", - "privacy.unlisted.long": "Herkese açık zaman tüneline gönderme", + "privacy.unlisted.long": "Herkese görünür, ancak genel zaman çizelgelerinde gösterilmez", "privacy.unlisted.short": "Listelenmemiş", "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", - "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!", + "regeneration_indicator.sublabel": "Ana akışınız hazırlanıyor!", "relative_time.days": "{number}g", "relative_time.hours": "{number}sa", "relative_time.just_now": "şimdi", @@ -370,7 +370,7 @@ "relative_time.today": "bugün", "reply_indicator.cancel": "İptal", "report.forward": "{target} ilet", - "report.forward_hint": "Bu hesap başka bir sunucudan. Anonimleştirilmiş bir rapor oraya da gönderilsin mi?", + "report.forward_hint": "Hesap başka bir sunucudan. Raporun anonim bir kopyası da oraya gönderilsin mi?", "report.hint": "Bu rapor sunucu moderatörlerine gönderilecek. Bu hesabı neden bildirdiğiniz hakkında bilgi verebirsiniz:", "report.placeholder": "Ek yorumlar", "report.submit": "Gönder", @@ -378,7 +378,7 @@ "search.placeholder": "Ara", "search_popout.search_format": "Gelişmiş arama biçimi", "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, boostladığınız veya bunlardan bahsettiğiniz tootların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren tootları döndürür.", - "search_popout.tips.hashtag": "etiketler", + "search_popout.tips.hashtag": "etiket", "search_popout.tips.status": "toot", "search_popout.tips.text": "Basit metin, eşleşen görünen adları, kullanıcı adlarını ve hashtag'leri döndürür", "search_popout.tips.user": "kullanıcı", @@ -396,36 +396,36 @@ "status.copy": "Bağlantı durumunu kopyala", "status.delete": "Sil", "status.detailed_status": "Ayrıntılı sohbet görünümü", - "status.direct": "@{name}'e gönder", + "status.direct": "@{name} adlı kişiye direkt mesaj", "status.embed": "Gömülü", "status.favourite": "Beğen", "status.filtered": "Filtrelenmiş", - "status.load_more": "Daha fazla", + "status.load_more": "Daha fazlasını yükle", "status.media_hidden": "Gizli görsel", - "status.mention": "Bahset : @{name}", + "status.mention": "@{name} kişisinden bahset", "status.more": "Daha fazla", - "status.mute": "Sustur : @{name}", + "status.mute": "@{name} kişisini sessize al", "status.mute_conversation": "Sohbeti sessize al", - "status.open": "Bu gönderiyi genişlet", + "status.open": "Bu tootu genişlet", "status.pin": "Profile sabitle", "status.pinned": "Sabitlenmiş toot", - "status.read_more": "Daha dazla oku", + "status.read_more": "Devamını okuyun", "status.reblog": "Boostla", "status.reblog_private": "Orijinal görünürlük ile boostla", "status.reblogged_by": "{name} boostladı", "status.reblogs.empty": "Henüz kimse bu tootu boostlamadı. Biri yaptığında burada görünecek.", - "status.redraft": "Sil & tekrar taslakla", + "status.redraft": "Sil ve yeniden taslak yap", "status.remove_bookmark": "Yer imini kaldır", "status.reply": "Yanıtla", "status.replyAll": "Konuyu yanıtla", - "status.report": "@{name}'i raporla", + "status.report": "@{name} adlı kişiyi bildir", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", "status.show_less": "Daha az göster", "status.show_less_all": "Hepsi için daha az göster", - "status.show_more": "Daha fazla göster", + "status.show_more": "Daha fazlasını göster", "status.show_more_all": "Hepsi için daha fazla göster", - "status.show_thread": "Mesaj dizisini göster", + "status.show_thread": "Konuyu göster", "status.uncached_media_warning": "Mevcut değil", "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", @@ -446,22 +446,22 @@ "timeline_hint.resources.follows": "Takip Edilenler", "timeline_hint.resources.statuses": "Eski tootlar", "trends.counter_by_accounts": "{count, plural, one {{counter} kişi} other {{counter} kişi}} konuşuyor", - "trends.trending_now": "Şu an popüler", - "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.", - "units.short.billion": "{count}Mia", - "units.short.million": "{count}M", - "units.short.thousand": "{count}B", + "trends.trending_now": "Şu an gündemde", + "ui.beforeunload": "Mastodon'u terk ederseniz taslağınız kaybolacak.", + "units.short.billion": "{count}Mr", + "units.short.million": "{count}Mn", + "units.short.thousand": "{count}Mn", "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız", - "upload_button.label": "Görsel ekle", + "upload_button.label": "Resim, video veya ses dosyası ekleyin", "upload_error.limit": "Dosya yükleme sınırı aşıldı.", "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", "upload_form.audio_description": "İşitme kaybı olan kişiler için tarif edin", "upload_form.description": "Görme engelliler için açıklama", "upload_form.edit": "Düzenle", - "upload_form.thumbnail": "Küçük Resimi Değiştir", - "upload_form.undo": "Geri al", + "upload_form.thumbnail": "Küçük resmi değiştir", + "upload_form.undo": "Sil", "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için tarif edin", - "upload_modal.analyzing_picture": "Resmi analiz ediyor…", + "upload_modal.analyzing_picture": "Resim analiz ediliyor…", "upload_modal.apply": "Uygula", "upload_modal.choose_image": "Resim seç", "upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi", @@ -477,7 +477,7 @@ "video.expand": "Videoyu genişlet", "video.fullscreen": "Tam ekran", "video.hide": "Videoyu gizle", - "video.mute": "Sesi kıs", + "video.mute": "Sesi sustur", "video.pause": "Duraklat", "video.play": "Oynat", "video.unmute": "Sesi aç" diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 2e57d620b..17ffe5519 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -470,7 +470,7 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading...", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index e9d9a42d2..5a3988ce8 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -272,7 +272,7 @@ "lists.replies_policy.title": "Cho phép bình luận với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", - "load_pending": "{count, plural, one {# tút} other {# tút}}", + "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}", "loading_indicator.label": "Chờ xíu...", "media_gallery.toggle_visible": "Ẩn {number, plural, one {ảnh} other {ảnh}}", "missing_indicator.label": "Không tìm thấy", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 2e57d620b..b877d76b4 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -2,8 +2,8 @@ "account.account_note_header": "Note", "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", - "account.badges.group": "Group", - "account.block": "Block @{name}", + "account.badges.group": "ⵜⴰⵔⴰⴱⴱⵓⵜ", + "account.block": "ⴳⴷⵍ @{name}", "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.browse_more_on_origin_server": "Browse more on the original profile", @@ -11,10 +11,10 @@ "account.direct": "Direct message @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", - "account.edit_profile": "Edit profile", + "account.edit_profile": "ⵙⵏⴼⵍ ⵉⴼⵔⵙ", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", - "account.follow": "Follow", + "account.follow": "ⴹⴼⵕ", "account.followers": "Followers", "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", @@ -56,7 +56,7 @@ "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", + "bundle_modal_error.close": "ⵔⴳⵍ", "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", @@ -67,8 +67,8 @@ "column.domain_blocks": "Blocked domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", - "column.home": "Home", - "column.lists": "Lists", + "column.home": "ⴰⵙⵏⵓⴱⴳ", + "column.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ", "column.mutes": "Muted users", "column.notifications": "Notifications", "column.pins": "Pinned toot", @@ -80,7 +80,7 @@ "column_header.pin": "Pin", "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", + "column_subheading.settings": "ⵜⵉⵙⵖⴰⵍ", "community.column_settings.local_only": "Local only", "community.column_settings.media_only": "Media only", "community.column_settings.remote_only": "Remote only", @@ -108,9 +108,9 @@ "confirmations.block.block_and_report": "Block & Report", "confirmations.block.confirm": "Block", "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", + "confirmations.delete.confirm": "ⴽⴽⵙ", "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "ⴽⴽⵙ", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", @@ -121,7 +121,7 @@ "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", + "confirmations.reply.confirm": "ⵔⴰⵔ", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", @@ -137,7 +137,7 @@ "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", + "emoji_button.flags": "ⵉⵛⵏⵢⴰⵍⵏ", "emoji_button.food": "Food & Drink", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Nature", @@ -205,7 +205,7 @@ "introduction.federation.action": "Next", "introduction.federation.federated.headline": "Federated", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "ⴰⵙⵏⵓⴱⴳ", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.local.headline": "Local", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", @@ -214,7 +214,7 @@ "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", "introduction.interactions.reblog.headline": "Boost", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.headline": "ⵔⴰⵔ", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.welcome.action": "Let's go!", "introduction.welcome.headline": "First steps", @@ -253,15 +253,15 @@ "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", + "lightbox.close": "ⵔⴳⵍ", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", + "lists.account.add": "ⵔⵏⵓ ⵖⵔ ⵜⵍⴳⴰⵎⵜ", + "lists.account.remove": "ⴽⴽⵙ ⵙⴳ ⵜⵍⴳⴰⵎⵜ", + "lists.delete": "ⴽⴽⵙ ⵜⴰⵍⴳⴰⵎⵜ", "lists.edit": "Edit list", "lists.edit.submit": "Change title", "lists.new.create": "Add list", @@ -348,7 +348,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", + "poll_button.add_poll": "ⵔⵏⵓ ⵢⴰⵏ ⵢⵉⴷⵣ", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Visible for mentioned users only", @@ -360,11 +360,11 @@ "privacy.unlisted.long": "Visible for all, but not in public timelines", "privacy.unlisted.short": "Unlisted", "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", + "regeneration_indicator.label": "ⴰⵣⴷⴰⵎ…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "ⴷⵖⵉ", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "today", @@ -373,9 +373,9 @@ "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.submit": "ⴰⵣⵏ", "report.target": "Report {target}", - "search.placeholder": "Search", + "search.placeholder": "ⵔⵣⵓ", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", @@ -394,7 +394,7 @@ "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", "status.copy": "Copy link to status", - "status.delete": "Delete", + "status.delete": "ⴽⴽⵙ", "status.detailed_status": "Detailed conversation view", "status.direct": "Direct message @{name}", "status.embed": "Embed", @@ -409,14 +409,14 @@ "status.open": "Expand this status", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.read_more": "ⵖⵔ ⵓⴳⴳⴰⵔ", "status.reblog": "Boost", "status.reblog_private": "Boost with original visibility", "status.reblogged_by": "{name} boosted", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.redraft": "Delete & re-draft", "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", + "status.reply": "ⵔⴰⵔ", "status.replyAll": "Reply to thread", "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", @@ -432,10 +432,10 @@ "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", + "tabs_bar.home": "ⴰⵙⵏⵓⴱⴳ", "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", + "tabs_bar.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", + "tabs_bar.search": "ⵔⵣⵓ", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", @@ -457,9 +457,9 @@ "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", + "upload_form.edit": "ⵙⵏⴼⵍ", "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", + "upload_form.undo": "ⴽⴽⵙ", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", @@ -470,9 +470,9 @@ "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading...", - "video.close": "Close video", - "video.download": "Download file", + "upload_progress.label": "Uploading…", + "video.close": "ⵔⴳⵍ ⴰⴼⵉⴷⵢⵓ", + "video.download": "ⴰⴳⵎ ⴰⴼⴰⵢⵍⵓ", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", "video.fullscreen": "Full screen", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index ac189fda1..956067e6f 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -170,7 +170,7 @@ "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", "error.unexpected_crash.explanation_addons": "此页面无法正确显示,这个错误很可能是由浏览器附加组件或自动翻译工具造成的。", "error.unexpected_crash.next_steps": "刷新一下页面试试。如果没用,您可以换个浏览器或者用本地应用。", - "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,您仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", + "error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。", "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", "errors.unexpected_crash.report_issue": "报告问题", "follow_request.authorize": "同意", @@ -333,7 +333,7 @@ "notifications.filter.follows": "关注", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", - "notifications.filter.statuses": "您关注的人的动态", + "notifications.filter.statuses": "你关注的人的动态", "notifications.group": "{count} 条通知", "notifications.mark_as_read": "将所有通知标为已读", "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index 66b0d7fe1..880566895 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -62,14 +62,21 @@ ja: subject: 'Mastodon: アカウントのロックの解除' webauthn_credential: added: + explanation: 次のセキュリティキーがアカウントに追加されました subject: 'Mastodon: セキュリティキーが追加されました' + title: 新しいセキュリティキーが追加されました deleted: + explanation: 次のセキュリティキーがアカウントから削除されました subject: 'Mastodon: セキュリティキーが削除されました' title: セキュリティキーが削除されました webauthn_disabled: + explanation: アカウントのセキュリティキーによる認証が無効になりました。ペアリングされたTOTPアプリによって生成されたトークンのみを使用してログインが可能になりました。 subject: 'Mastodon: セキュリティキー認証が無効になりました' + title: セキュリティキーは無効になっています webauthn_enabled: + explanation: あなたのアカウントでセキュリティキー認証が有効になりました。セキュリティキーをログインに使用できるようになりました。 subject: 'Mastodon: セキュリティキー認証が有効になりました' + title: セキュリティキーは無効になっています omniauth_callbacks: failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。" success: "%{kind}からのアクセスは正常に認証されました。" diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 1255d173e..a0bc7deae 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -84,8 +84,8 @@ tr: no_token: Bu sayfaya şifre sıfırlama e-postasından gelmeden erişemezsiniz. Şifre sıfırlama e-postasından geliyorsanız lütfen sağlanan tam URL'yi kullandığınızdan emin olun. send_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. send_paranoid_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. - updated: Parolanız başarıyla değiştirildi. Şuan oturumunuz açıldı. - updated_not_active: Parolanız başarıyla değiştirildi. + updated: Şifreniz başarılı bir şekilde değiştirildi. Şu an oturum açtınız. + updated_not_active: Şifreniz başarıyla değiştirildi. registrations: destroyed: Görüşürüz! hesabın başarıyla iptal edildi. Umarız seni sonra tekrar görürüz. signed_up: Hoş geldiniz! Başarılı bir şekilde oturum açtınız. diff --git a/config/locales/devise.zgh.yml b/config/locales/devise.zgh.yml index 827155466..4d376ba8c 100644 --- a/config/locales/devise.zgh.yml +++ b/config/locales/devise.zgh.yml @@ -1 +1,8 @@ +--- zgh: + devise: + failure: + locked: ⵉⵜⵜⵓⵔⴳⵍ ⵓⵎⵉⴹⴰⵏ ⵏⵏⴽ. + mailer: + reset_password_instructions: + action: ⵙⵏⴼⵍ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index ad1f78613..a83070893 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -87,13 +87,13 @@ zh-CN: updated: 你的密码已修改成功,你现在已登录。 updated_not_active: 你的密码已修改成功。 registrations: - destroyed: 再见!你的帐户已成功销毁。我们希望很快可以再见到你。 + destroyed: 再见!你的帐户已成功注销。我们希望很快可以再见到你。 signed_up: 欢迎!你已注册成功。 - signed_up_but_inactive: 你已注册,但尚未激活帐户。 - signed_up_but_locked: 你已注册,但帐户被锁定了。 - signed_up_but_pending: 一封带有确认链接的邮件已经发送到了您的邮箱。 在您点击确认链接后,我们将会审核您的申请。审核通过后,我们将会通知您。 + signed_up_but_inactive: 你已成功注册,但因尚未激活帐户所以无法登陆。 + signed_up_but_locked: 你已成功注册,但因帐户被锁定所以无法登陆。 + signed_up_but_pending: 一封带有确认链接的邮件已经发送到了你的邮箱。 在你点击确认链接后,我们将会审核你的申请。审核通过后,我们将会通知你。 signed_up_but_unconfirmed: 一封带有确认链接的邮件已经发送至你的邮箱,请点击邮件中的链接以激活你的帐户。如果没有,请检查你的垃圾邮件。 - update_needs_confirmation: 信息更新成功,但我们需要验证你的新电子邮件地址,请点击邮件中的链接以确认。如果没有,请检查你的垃圾邮箱。 + update_needs_confirmation: 帐号信息更新成功,但我们需要验证你的新电子邮件地址,请点击邮件中的链接以确认。如果没有,请检查你的垃圾邮箱。 updated: 帐户资料更新成功。 sessions: already_signed_out: 已成功登出。 @@ -101,7 +101,7 @@ zh-CN: signed_out: 已成功登出。 unlocks: send_instructions: 几分钟后,你将收到一封解锁帐户的邮件。如果没有,请检查你的垃圾邮箱。 - send_paranoid_instructions: 如果你的邮箱存在于我们的数据库中,你将收到一封解锁帐户的邮件。如果没有,请检查你的垃圾邮箱。 + send_paranoid_instructions: 如果你的帐号存在于数据库中,你将收到一封指引你解锁帐户的邮件。如果没有,请检查你的垃圾邮箱。 unlocked: 你的帐户已成功解锁。登录以继续。 errors: messages: diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 0e2d8d2a8..45a5821e4 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -13,9 +13,9 @@ tr: attributes: redirect_uri: fragment_present: parça içeremez. - invalid_uri: geçerli bir URI olmalıdır. - relative_uri: mutlak bir URI olmalıdır. - secured_uri: HTTPS/SSL URI olması gerekir. + invalid_uri: geçerli bir URL olmalıdır. + relative_uri: mutlaka bir URL olmalıdır. + secured_uri: HTTPS/SSL URL olması gerekir. doorkeeper: applications: buttons: @@ -29,7 +29,7 @@ tr: edit: title: Uygulamayı düzenle form: - error: Tüh! Muhtemel hatalar için formunuzu kontrol edin + error: Hata! Olası hatalar için formunuzu kontrol edin help: native_redirect_uri: Yerel testler için %{native_redirect_uri} kullanın redirect_uri: URL başına bir satır kullanın @@ -79,19 +79,19 @@ tr: errors: messages: access_denied: Kaynak sahibi veya yetkilendirme sunucusu isteği reddetti. - credential_flow_not_configured: Kaynak Sahibi Şifresinin Bilgi akışı Doorkeeper.configure.resource_owner_from_credentials bilgilerinin yapılandırılmamış olması nedeniyle başarısız oldu. + credential_flow_not_configured: Kaynak Sahibi Şifresi Kimlik Bilgileri akışı Doorkeeper.configure.resource_owner_from_credentials 'ın yapılandırılmamış olması nedeniyle başarısız oldu. invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu. - invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URI'siyle eşleşmiyor veya başka bir müşteriye verilmiş. - invalid_redirect_uri: Dahil edilmiş yönlendirme Uri'si geçersiz. + invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URL'siyle eşleşmiyor veya başka bir istemciye verilmiş. + invalid_redirect_uri: Dahil edilmiş yönlendirme URL'si geçersiz. invalid_request: İstekte gerekli bir parametre eksik, desteklenmeyen bir parametre değeri içeriyor veya başka türlü hatalı biçimlendirilmiş. invalid_resource_owner: Sağlanan kaynak sahibi kimlik bilgileri geçerli değil veya kaynak sahibi bulunamıyor invalid_scope: İstenen kapsam geçersiz, bilinmeyen veya hatalı biçimlendirilmiş olabilir. invalid_token: - expired: Erişim belirtecinin süresi dolmuş + expired: Erişim belirtecinin süresi doldu revoked: Erişim belirteci iptal edildi unknown: Erişim belirteci geçersiz resource_owner_authenticator_not_configured: Kaynak Sahibi yapılandırılmamış Doorkeeper.configure.resource_owner_authenticator nedeniyle başarısız oldu. - server_error: Yetkilendirme sunucusu, isteği yerine getirmesini engelleyen beklenmeyen bir koşulla karşılaştı. + server_error: Yetkilendirme sunucunun isteği yerine getirmesini engelleyen beklenmeyen bir koşulla karşılaştı. temporarily_unavailable: Yetkilendirme sunucusu şu anda sunucunun geçici bir aşırı yüklenmesi veya bakımı nedeniyle isteği yerine getiremiyor. unauthorized_client: İstemci bu yöntemi kullanarak bu isteği gerçekleştirmek için yetkili değil. unsupported_grant_type: Yetkilendirme izni türü, yetkilendirme sunucusu tarafından desteklenmiyor. diff --git a/config/locales/doorkeeper.zgh.yml b/config/locales/doorkeeper.zgh.yml index 827155466..394184e76 100644 --- a/config/locales/doorkeeper.zgh.yml +++ b/config/locales/doorkeeper.zgh.yml @@ -1 +1,42 @@ +--- zgh: + activerecord: + attributes: + doorkeeper/application: + name: ⵉⵙⵏ ⵏ ⵜⵙⵏⵙⵉ + website: ⴰⵙⵉⵜ ⵡⵉⴱ ⵏ ⵜⵙⵏⵙⵉ + doorkeeper: + applications: + buttons: + authorize: ⵙⵙⵓⵔⴳ + cancel: ⵙⵔ + edit: ⵙⵏⴼⵍ + submit: ⴰⵣⵏ + confirmations: + destroy: ⵉⵙ ⵏⵉⵜ? + edit: + title: ⵙⵏⴼⵍ ⵜⵉⵙⵏⵙⵉ + index: + application: ⵜⵉⵙⵏⵙⵉ + delete: ⴽⴽⵙ + empty: ⵓⵔ ⵖⵓⵔⴽ ⴽⵔⴰ ⵏ ⵜⵙⵏⵙⵉⵡⵉⵏ. + name: ⵉⵙⵎ + new: ⵜⵉⵙⵏⵙⵉ ⵜⴰⵎⴰⵢⵏⵓⵜ + title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ + new: + title: ⵜⵉⵙⵏⵙⵉ ⵜⴰⵎⴰⵢⵏⵓⵜ + show: + actions: ⵜⵉⴳⴰⵡⵉⵏ + title: ⵜⵉⵙⵏⵙⵉ %{name} + authorizations: + buttons: + authorize: ⵙⵙⵓⵔⴳ + deny: ⴰⴳⵢ + authorized_applications: + confirmations: + revoke: ⵉⵙ ⵏⵉⵜ? + index: + application: ⵜⵉⵙⵏⵙⵉ + created_at: ⵜⴻⵜⵜⵓⵙⵓⵔⴳ + date_format: "%d-%m-%Y %H:%M:%S" + title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ ⵉⵜⵜⵓⵙⵓⵔⴷⵏ diff --git a/config/locales/is.yml b/config/locales/is.yml index 767034e7c..eede67bdc 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -167,7 +167,7 @@ is: redownloaded_msg: Tókst að endurlesa notandasnið %{username} úr upphaflegu sniði reject: Hafna reject_all: Hafna öllu - rejected_msg: Tókst að hafna skráningu fyrir {username} + rejected_msg: Tókst að hafna skráningu fyrir %{username} remove_avatar: Fjarlægja auðkennismynd remove_header: Fjarlægja haus removed_avatar_msg: Tókst að fjarlægja auðkennismynd notandans %{username} @@ -188,6 +188,8 @@ is: search: Leita search_same_email_domain: Aðra notendur með sama tölvupóstlén search_same_ip: Aðrir notendur með sama IP-vistfang + sensitive: Viðkvæmt + sensitized: merkt sem viðkvæmt shared_inbox_url: Slóð á sameiginlegt innhólf show: created_reports: Gerðar kærur @@ -202,6 +204,7 @@ is: time_in_queue: Bíður í biðröð %{time} title: Notandaaðgangar unconfirmed_email: Óstaðfestur tölvupóstur + undo_sensitized: Afturkalla merkingu sem viðkvæmt undo_silenced: Hætta að hylja undo_suspension: Taka úr bið unsilenced_msg: Tókst að fjarlægja takmarkanir af notandaaðgangnum fyrir %{username} @@ -243,9 +246,11 @@ is: reopen_report: Enduropna kæru reset_password_user: Endurstilla lykilorð resolve_report: Leysa kæru + sensitive_account: Merkja myndefni á aðgangnum þínum sem viðkvæmt silence_account: Hylja notandaaðgang suspend_account: Setja notandaaðgang í bið unassigned_report: Aftengja úthlutun kæru + unsensitive_account: Afmerkja myndefni á aðgangnum þínum sem viðkvæmt unsilence_account: Hætta að hylja notandaaðgang unsuspend_account: Taka notandaaðgang úr bið update_announcement: Uppfæra tilkynningu @@ -281,9 +286,11 @@ is: reopen_report: "%{name} enduropnaði skýrslu %{target}" reset_password_user: "%{name} endurstillti lykilorð fyrir notandann %{target}" resolve_report: "%{name} leysti skýrslu %{target}" + sensitive_account: "%{name} merkti myndefni frá %{target} sem viðkvæmt" silence_account: "%{name} gerði notandaaðganginn %{target} hulinn" suspend_account: "%{name} setti notandaaðganginn %{target} í bið" unassigned_report: "%{name} fjarlægði úthlutun af skýrslu %{target}" + unsensitive_account: "%{name} afmerkti myndefni frá %{target} sem viðkvæmt" unsilence_account: "%{name} hætti að hylja notandaaðganginn %{target}" unsuspend_account: "%{name} tók notandaaðganginn %{target} úr bið" update_announcement: "%{name} uppfærði auglýsingu %{target}" @@ -1202,6 +1209,8 @@ is: other: "%{count} atkvæði" vote: Greiða atkvæði show_more: Sýna meira + show_newer: Sýna nýrri + show_older: Sýna eldri show_thread: Birta þráð sign_in_to_participate: Skráðu þig inn til að taka þátt í samtalinu title: "%{name}: „%{quote}‟" @@ -1338,6 +1347,7 @@ is: warning: explanation: disable: Á meðan aðgangurinn þinn er frystur, eru gögn aðgangsins ósnert, en þú getur ekki framkvæmt neinar aðgerðir fyrr en honum hefur verið aflæst. + sensitive: Innsent myndefni sem þú sendir inn og tengt myndefni verður farið með sem viðkvæmt efni. silence: Á meðan aðgangurinn þinn er takmarkaður, mun aðeins fólk sem þegar fylgist með þér sjá tístin þín á þessum vefþjóni, auk þess sem lokað gæti verið á þig á ýmsum opinberum listum. Aftur á móti geta aðrir gerst fylgjendur þínir handvirkt. suspend: Aðgangurinn þinn hefur verið settur í biðstöðu, öll þín tíst og innsent myndefni hafa verið óafturkræft fjarlægð af þessum vefþjóni, sem og af þeim vefþjónum þar sem þú áttir þér fylgjendur. get_in_touch: Þú getur svarað þessum tölvupósti til að setja þig í samband við umsjónarmenn %{instance}. @@ -1346,11 +1356,13 @@ is: subject: disable: Notandaaðgangurinn þinn %{acct} hefur verið frystur none: Aðvörun fyrir %{acct} + sensitive: Myndefni sent frá %{acct} aðgangnum þínum hefur verið merkt sem viðkvæmt silence: Notandaaðgangurinn þinn %{acct} hefur verið takmarkaður suspend: Notandaaðgangurinn þinn %{acct} hefur verið settur í bið title: disable: Notandaaðgangur frystur none: Aðvörun + sensitive: Myndefnið þitt hefur verið merkt sem viðkvæmt silence: Notandaaðgangur takmarkaður suspend: Notandaaðgangur í bið welcome: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 682e672d1..c0e182ec7 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -108,6 +108,7 @@ ja: confirm: 確認 confirmed: 確認済み confirming: 確認中 + delete: データを削除する deleted: 削除済み demote: 降格 destroyed_msg: "%{username} のデータは完全に削除されるよう登録されました" @@ -182,7 +183,7 @@ ja: search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じ IP のユーザーを検索 sensitive: 閲覧注意 - sensitized: 閲覧注意済み + sensitized: 閲覧注意にする shared_inbox_url: Shared inbox URL show: created_reports: このアカウントで作られた通報 @@ -197,11 +198,12 @@ ja: time_in_queue: "%{time} 待ち" title: アカウント unconfirmed_email: 確認待ちのメールアドレス - undo_sensitized: 閲覧注意から戻す + undo_sensitized: 機密情報から戻す undo_silenced: サイレンスから戻す undo_suspension: 停止から戻す unsubscribe: 購読の解除 username: ユーザー名 + view_domain: ドメインの概要を表示 warn: 警告 web: Web whitelisted: 連合許可済み @@ -236,11 +238,9 @@ ja: reopen_report: 通報を再度開く reset_password_user: パスワードをリセット resolve_report: 通報を解決済みにする - sensitive_account: アカウントのメディアを閲覧注意にマーク silence_account: アカウントをサイレンス suspend_account: アカウントを停止 unassigned_report: 通報の担当を解除 - unsensitive_account: アカウントのメディアの閲覧注意マークを解除 unsilence_account: アカウントのサイレンスを解除 unsuspend_account: アカウントの停止を解除 update_announcement: お知らせを更新 @@ -276,11 +276,9 @@ ja: reopen_report: "%{name} さんが通報 %{target} を再び開きました" reset_password_user: "%{name} さんが %{target} さんのパスワードをリセットしました" resolve_report: "%{name} さんが通報 %{target} を解決済みにしました" - sensitive_account: "%{name} さんが %{target} さんのメディアを閲覧注意にマークしました" silence_account: "%{name} さんが %{target} さんをサイレンスにしました" suspend_account: "%{name} さんが %{target} さんを停止しました" unassigned_report: "%{name} さんが通報 %{target} の担当を外しました" - unsensitive_account: "%{name} さんが %{target} さんのメディアの閲覧注意を解除しました" unsilence_account: "%{name} さんが %{target} さんのサイレンスを解除しました" unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました" update_announcement: "%{name} さんがお知らせ %{target} を更新しました" @@ -708,9 +706,11 @@ ja: prefix_sign_up: 今すぐ Mastodon を始めよう! suffix: アカウントがあれば、どんな Mastodon 互換サーバーのユーザーでもフォローしたりメッセージをやり取りできるようになります! didnt_get_confirmation: 確認メールを受信できませんか? + dont_have_your_security_key: セキュリティキーを持っていませんか? forgot_password: パスワードをお忘れですか? invalid_reset_password_token: パスワードリセットトークンが正しくないか期限切れです。もう一度リクエストしてください。 link_to_otp: 携帯電話から二段階認証コードを入力するか、リカバリーコードを入力してください + link_to_webauth: セキュリティキーを使用する login: ログイン logout: ログアウト migrate_account: 別のアカウントに引っ越す @@ -736,6 +736,7 @@ ja: pending: あなたの申請は現在サーバー管理者による審査待ちです。これにはしばらくかかります。申請が承認されるとメールが届きます。 redirecting_to: アカウントは %{acct} に引っ越し設定されているため非アクティブになっています。 trouble_logging_in: ログインできませんか? + use_security_key: セキュリティキーを使用 authorize_follow: already_following: あなたは既にこのアカウントをフォローしています already_requested: 既にこのアカウントへフォローリクエストを送信しています @@ -1018,6 +1019,9 @@ ja: trillion: T otp_authentication: code_hint: 続行するには認証アプリで表示されたコードを入力してください + description_html: "二要素認証を有効にすると、ログイン時に認証アプリからコードを入力する必要があります。" + instructions_html: "Google Authenticatorか、もしくはほかのTOTPアプリでこのQRコードをスキャンしてください。これ以降、ログインするときはそのアプリで生成されるコードが必要になります。" + manual_instructions: 'QRコードがスキャンできず、手動での登録を希望の場合はこのシークレットコードを利用してください。:' setup: セットアップ wrong_code: コードが間違っています。サーバーとデバイスの時計にずれがあるかもしれません。 pagination: @@ -1289,6 +1293,7 @@ ja: two_factor_authentication: add: 追加 disable: 無効化 + disabled_success: 二要素認証が更新されました edit: 編集 enabled: 二段階認証は有効になっています enabled_success: 二段階認証が有効になりました diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 24c40e8f1..fe042301d 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -600,13 +600,13 @@ kab: one: "1 wulɣu seg tirza-inek·inm taneqqarut ar tura \U0001F418" other: "%{count} ilɣa imaynuten seg tirza-nek·inem taneggarut ar tura \U0001F418" favourite: - subject: "{name} yesmenyaf addad-ik·im" + subject: "%{name} yesmenyaf addad-ik·im" follow: body: "%{name} yeṭafaṛ-ik-id tura!" subject: "%{name} yeṭafaṛ-ik-id tura" title: Ameḍfaṛ amaynut follow_request: - body: "{name} yessuter-d ad ak·akem-yeḍfer" + body: "%{name} yessuter-d ad ak·akem-yeḍfer" title: Asuter amaynut n teḍfeṛt mention: action: Err diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b89575257..be1bf7f90 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -196,6 +196,8 @@ ru: search: Поиск search_same_email_domain: Другие пользователи с тем же доменом электронной почты search_same_ip: Другие пользователи с таким же IP + sensitive: Деликатный + sensitized: отмечено как деликатный контент shared_inbox_url: URL общих входящих show: created_reports: Жалобы, отправленные с этой учётной записи @@ -210,6 +212,7 @@ ru: time_in_queue: Ожидание в очереди %{time} title: Учётные записи unconfirmed_email: Неподтверждённый e-mail + undo_sensitized: Снять отметку "деликатный" undo_silenced: Отменить скрытие undo_suspension: Снять блокировку unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно @@ -251,9 +254,11 @@ ru: reopen_report: Возобновление жалоб reset_password_user: Сброс пароля пользователей resolve_report: Отметка жалоб «решёнными» + sensitive_account: Отметить все медиафайлы в вашей учётной записи как деликатные silence_account: Скрытие пользователей suspend_account: Блокировка пользователей unassigned_report: Снятие жалоб + unsensitive_account: Снять отметку "деликатный" с медиафайлов вашей учётной записи unsilence_account: Отмена скрытия пользователей unsuspend_account: Разблокировка пользователей update_announcement: Обновление объявлений @@ -289,9 +294,11 @@ ru: reopen_report: "%{name} переоткрыл(а) жалобу %{target}" reset_password_user: "%{name} сбросил(а) пароль пользователя %{target}" resolve_report: "%{name} решил(а) жалобу %{target}" + sensitive_account: "%{name} пометил медиа %{target} как деликатное" silence_account: "%{name} наложил(а) ограничения на видимость постов учётной записи %{target}" suspend_account: "%{name} заблокировал(а) учётную запись %{target}" unassigned_report: "%{name} сняла назначение жалобы %{target}" + unsensitive_account: '%{name} снял отметку "деликатное" с медиа %{target}' unsilence_account: "%{name} снял ограничения видимости постов пользователя %{target}" unsuspend_account: "%{name} снял(а) блокировку с пользователя %{target}" update_announcement: "%{name} обновил объявление %{target}" @@ -1243,6 +1250,8 @@ ru: other: "%{count} голосов" vote: Голосовать show_more: Развернуть + show_newer: Показать более новое + show_older: Показать старые show_thread: Открыть обсуждение sign_in_to_participate: Войдите, чтобы принять участие в дискуссии title: '%{name}: "%{quote}"' @@ -1375,6 +1384,7 @@ ru: warning: explanation: disable: Пока ваша учётная запись заморожена, ваши данные остаются нетронутыми, но вы не можете производить никаких действий до разблокировки. + sensitive: Ваши загруженные медиа-файлы и связанные с ними медиа будут рассматриваться как деликатные. silence: Пока действуют данные ограничения, публикуемые вами посты будут видеть исключительно люди, которые на вас уже подписаны на этом узле, вы также можете быть исключены из различных публичных лент. Несмотря на это, остальные пользователи по-прежнему могут подписаться на вас, чтобы читать новые посты. suspend: Ваша учётная запись заблокирована и все ваши посты и загруженные медиафайлы безвозвратно удалены с этого сервера и других серверов, где у вас были подписчики. get_in_touch: Вы можете ответить на это письмо, чтобы связаться с сотрудниками %{instance}. @@ -1383,11 +1393,13 @@ ru: subject: disable: Ваша учётная запись %{acct} заморожена none: "%{acct} вынесено предупреждение" + sensitive: Ваша учётная запись %{acct} помечена как деликатная silence: На учётную запись %{acct} наложены ограничения suspend: Ваша учётная запись %{acct} была заблокирована title: disable: Учётная запись заморожена none: Предупреждение + sensitive: Ваш медиафайл был отмечен как деликатный silence: На учётную запись наложены ограничения suspend: Учётная запись заблокирована welcome: diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index b751e5de1..ed948a699 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -100,6 +100,7 @@ is: types: disable: Gera innskráningu óvirka none: Gera ekkert + sensitive: Viðkvæmt silence: Hylja suspend: Setja í bið og eyða endanlega gögnum notandaaðgangsins warning_preset_id: Nota forstillta aðvörun diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 301dca6d8..36ee01a1f 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -75,6 +75,7 @@ ja: severity: このIPに対する措置を選択してください sessions: otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' + webauthn: USBキーの場合は、必ず挿入し、必要に応じてタップしてください。 tag: name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます user: @@ -205,4 +206,7 @@ ja: required: mark: "*" text: 必須 + title: + sessions: + webauthn: セキュリティキーを使用してサインインする 'yes': はい diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 3f00abb97..fdd60c881 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -100,6 +100,7 @@ ru: types: disable: Заморозить none: Ничего не делать + sensitive: Деликатный silence: Скрыть suspend: Заблокировать и безвозвратно удалить все данные учётной записи warning_preset_id: Использовать шаблон diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 54031a7f9..04b0f26a3 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -3,15 +3,15 @@ tr: simple_form: hints: account_alias: - acct: Taşımak istediğiniz hesabın kullanıcı-adı@alan-adını belirtin + acct: Taşımak istediğiniz hesabın kullanıcıadı@alanadını belirtin account_migration: - acct: Taşınmak istediğiniz hesabın kullanıcı-adı@alan-adını belirtin + acct: Taşımak istediğiniz hesabın kullanıcıadı@alanadını belirtin account_warning_preset: - text: URL'ler, etiketler ve bahsetmeler gibi toot sözdizimleri kullanabilirsiniz - title: İsteğe bağlı. Alıcı tarafından görülemez + text: URL'ler, etiketler ve bahsedenler gibi toot sözdizimini kullanabilirsiniz + title: İsteğe bağlı. Alıcıya görünmez admin_account_action: include_statuses: Kullanıcı hangi tootların denetleme eylemi ya da uyarısına neden olduğunu görecektir - send_email_notification: Kullanıcı, hesabına ne olduğu hakkında bir bildirim alacak + send_email_notification: Kullanıcı, hesabına ne olduğuna dair bir açıklama alacak text_html: İsteğe bağlı. Toot sözdizimleri kullanabilirsiniz. Zamandan kazanmak için uyarı ön-ayarları ekleyebilirsiniz type_html: "%{acct} ile ne yapılacağını seçin" warning_preset_id: İsteğe bağlı. Hazır ayarın sonuna hala özel metin ekleyebilirsiniz @@ -40,16 +40,16 @@ tr: password: En az 8 karakter kullanın phrase: Metnin büyük/küçük harf durumundan veya tootun içerik uyarısından bağımsız olarak eşleştirilecek scopes: Uygulamanın erişmesine izin verilen API'ler. Üst seviye bir kapsam seçtiyseniz, bireysel kapsam seçmenize gerek yoktur. - setting_aggregate_reblogs: Yakın zamanda boostlanmış tootlar için yeni boostları gösterme (yalnızca yeni alınan boostları etkiler) - setting_default_sensitive: Hassas medya varsayılan olarak gizlenir ve bir tıklama ile görüntülenebilir + setting_aggregate_reblogs: Yakın zamanda boostlanmış tootlar için yeni boostları göstermeyin (yalnızca yeni alınan boostları etkiler) + setting_default_sensitive: Hassas medya varsayılan olarak gizlidir ve bir tıklama ile gösterilebilir setting_display_media_default: Hassas olarak işaretlenmiş medyayı gizle setting_display_media_hide_all: Medyayı her zaman gizle setting_display_media_show_all: Medyayı her zaman göster - setting_hide_network: Takip edilenler ve takipçiler profilinizde gösterilmeyecek + setting_hide_network: Takip ettiğiniz ve sizi takip eden kişiler profilinizde gösterilmeyecek setting_noindex: Herkese açık profilinizi ve durum sayfalarınızı etkiler setting_show_application: Tootlamak için kullandığınız uygulama, tootlarınızın detaylı görünümünde gösterilecektir setting_use_blurhash: Gradyenler gizli görsellerin renklerine dayanır, ancak detayları gizler - setting_use_pending_items: Zaman çizelgesi güncellemelerini, akışı otomatik olarak kaydırmak yerine bir tıklamanın arkasına gizleyin + setting_use_pending_items: Akışı otomatik olarak kaydırmak yerine, zaman çizelgesi güncellemelerini tek bir tıklamayla gizleyin username: Kullanıcı adınız %{domain} alanında benzersiz olacak whole_word: Anahtar kelime veya kelime öbeği yalnızca alfasayısal olduğunda, yalnızca tüm sözcükle eşleşirse uygulanır domain_allow: @@ -90,25 +90,25 @@ tr: account_migration: acct: Yeni hesabın tanıtıcısı account_warning_preset: - text: Ön-ayar metni + text: Ön ayarlı metin title: Başlık admin_account_action: - include_statuses: Birdirilen tootları e-postaya dahil et - send_email_notification: E-postayla kullanıcıyı bilgilendir + include_statuses: Bildirilen tootları e-postaya dahil et + send_email_notification: Kullanıcıyı e-posta ile bilgilendir text: Özel uyarı type: Eylem types: - disable: Devre dışı + disable: Dondur none: Hiç birşey sensitive: Hassas - silence: Sessiz + silence: Limit suspend: Hesap verilerini askıya alın ve geri alınamaz şekilde silin - warning_preset_id: Bir uyarı ön-ayarı kullan + warning_preset_id: Bir uyarı ön ayarı kullan announcement: all_day: Tüm gün etkinliği - ends_at: Etkinlik sonu + ends_at: Etkinliğin sonu scheduled_at: Yayınlamayı zamanla - starts_at: Etkinlik başlangıcı + starts_at: Etkinliğin başlangıcı text: Duyuru defaults: autofollow: Hesabınızı takip etmeye davet edin @@ -151,7 +151,7 @@ tr: setting_display_media_hide_all: Tümünü gizle setting_display_media_show_all: Tümünü göster setting_expand_spoilers: İçerik uyarılarıyla işaretli tootları her zaman genişlet - setting_hide_network: Ağını gizle + setting_hide_network: Ağınızı gizleyin setting_noindex: Arama motoru dizinine eklemeyi iptal et setting_reduce_motion: Animasyonlarda hareketi azalt setting_show_application: Tootları göndermek için kullanılan uygulamayı belirt @@ -161,9 +161,9 @@ tr: setting_unfollow_modal: Birini takip etmeden önce onay iletişim kutusu göster setting_use_blurhash: Gizli medya için renkli gradyanlar göster setting_use_pending_items: Yavaş mod - severity: Zorluk + severity: Önem derecesi sign_in_token_attempt: Güvenlik kodu - type: Dosya türü + type: İçeri aktarma türü username: Kullanıcı adı username_or_email: Kullanıcı adı ya da e-posta whole_word: Tam sözcük @@ -174,7 +174,7 @@ tr: interactions: must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle - must_be_following_dm: Takip etmediğiniz kişilerden gelen doğrudan mesajları engelle + must_be_following_dm: Takip etmediğiniz kişilerden gelen direkt mesajları engelle invite: comment: Yorum invite_request: @@ -188,18 +188,18 @@ tr: severity: Kural notification_emails: digest: Özet e-postaları gönder - favourite: Biri durumumu favorilerine eklediginde bana e-posta gönder - follow: Biri beni takip ettiğinde bana e-posta gönder - follow_request: Biri bana takip isteği gönderdiğinde bana e-posta gönder - mention: Biri benden bahsettiğinde bana e-posta gönder - pending_account: Yeni bir hesap incelemesi gerektiğinde e-posta gönder - reblog: Biri durumumu boostladığında bana e-posta gönder - report: Yeni bir rapor gönderildiğinde e-posta gönder - trending_tag: İncelenmemiş bir hashtag trend olduğunda e-posta gönder + favourite: Birisi durumunuzu beğendi + follow: Biri seni takip etti + follow_request: Biri seni takip etmek istedi + mention: Biri senden bahsetti + pending_account: Yeni hesabın incelenmesi gerekiyor + reblog: Biri durumunuzu boostladı + report: Yeni rapor gönderildi + trending_tag: İncelenmemiş bir etiket gündem oluyor tag: listable: Bu etiketin aramalarda ve profil dizininde görünmesine izin ver name: Etiket - trendable: Bu etiketin trendlerin altında görünmesine izin ver + trendable: Bu etiketin gündem altında görünmesine izin ver usable: Tootların bu etiketi kullanmasına izin ver 'no': Hayır recommended: Önerilen @@ -208,5 +208,5 @@ tr: text: gerekli title: sessions: - webauthn: Giriş yapmak için güvenlik anahtarlarınızdan birini kullanın + webauthn: Oturum açmak için güvenlik anahtarlarınızdan birini kullanın 'yes': Evet diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index e5d42bcc6..28bf0f0d8 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -3,9 +3,9 @@ vi: simple_form: hints: account_alias: - acct: Chọn tên_người_dùng@máy chủ của tài khoản lúc trước + acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ account_migration: - acct: Chọn tên_người_dùng@máy chủ của tài khoản bạn muốn dời sang + acct: Nhập tên_người_dùng@máy chủ của tài khoản bạn muốn dời sang account_warning_preset: text: Bạn có thể sử dụng URL, hashtag và nhắc đến title: Tùy chọn. Không cho người nhận xem @@ -41,15 +41,15 @@ vi: phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi. setting_aggregate_reblogs: Nếu một tút đã được chia sẻ thì những lượt chia sẻ sau sẽ không hiển thị trên bảng tin nữa - setting_default_sensitive: Nội dung nhạy cảm sẽ mặc định là ẩn và chỉ hiển thị nếu nhấp chuột + setting_default_sensitive: Nội dung nhạy cảm mặc định là ẩn và chỉ hiển thị nếu nhấn vào setting_display_media_default: Làm mờ những thứ được đánh dấu là nhạy cảm setting_display_media_hide_all: Không hiển thị setting_display_media_show_all: Luôn luôn hiển thị setting_hide_network: Ẩn những người bạn theo dõi và những người theo dõi bạn trên trang cá nhân setting_noindex: Ảnh hưởng đến trang cá nhân và tút của bạn - setting_show_application: Tên ứng dụng bạn sử dụng để đăng tút sẽ được hiển thị trong chi tiết bài đăng + setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết bài đăng setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm - setting_use_pending_items: Ẩn cập nhật bảng tin bằng một cái nhấp chuột thay vì phải cuộn toàn bộ + setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nào nhấp chuột vào username: Tên người dùng của bạn sẽ là duy nhất trên %{domain} whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: @@ -86,9 +86,9 @@ vi: name: Nhãn value: Nội dung account_alias: - acct: Xử lý tài khoản cũ + acct: Tài khoản cũ account_migration: - acct: Xử lý tài khoản mới + acct: Tài khoản mới account_warning_preset: text: Văn bản cài sẵn title: Tựa đề @@ -120,7 +120,7 @@ vi: context: Áp dụng current_password: Mật khẩu hiện tại data: Dữ liệu - discoverable: Liệt kê tài khoản này trên danh sách thành viên + discoverable: Liệt kê tài khoản trên danh sách thành viên display_name: Tên hiển thị email: Địa chỉ email expires_in: Hết hạn sau @@ -138,7 +138,7 @@ vi: phrase: Từ khóa hoặc cụm từ setting_advanced_layout: Kích hoạt giao diện nhiều cột setting_aggregate_reblogs: Không hiện lượt chia sẻ trùng - setting_auto_play_gif: Tự động phát GIF + setting_auto_play_gif: Tự động phát ảnh GIF setting_boost_modal: Yêu cầu xác nhận trước khi chia sẻ tút setting_crop_images: Hiển thị ảnh theo tỉ lệ 16x9 setting_default_language: Ngôn ngữ đăng @@ -154,9 +154,9 @@ vi: setting_hide_network: Ẩn kết nối của bạn setting_noindex: Không xuất hiện trong công cụ tìm kiếm setting_reduce_motion: Giảm chuyển động ảnh GIF - setting_show_application: Hiện ứng dụng được sử dụng để đăng tút + setting_show_application: Hiện ứng dụng đã dùng để đăng tút setting_system_font_ui: Sử dụng phông chữ mặc định của hệ thống - setting_theme: Giao diện trang web + setting_theme: Giao diện setting_trends: Hiển thị xu hướng hôm nay setting_unfollow_modal: Yêu cầu xác nhận trước khi hủy theo dõi ai đó setting_use_blurhash: Làm mờ trước ảnh/video nhạy cảm diff --git a/config/locales/simple_form.zgh.yml b/config/locales/simple_form.zgh.yml index 827155466..ed9ea90f8 100644 --- a/config/locales/simple_form.zgh.yml +++ b/config/locales/simple_form.zgh.yml @@ -1 +1,41 @@ +--- zgh: + simple_form: + hints: + defaults: + setting_display_media_hide_all: ⵙⵏⵜⵍ ⵉⵙⵏⵖⵎⵉⵙⵏ ⴰⴱⴷⴰ + setting_display_media_show_all: ⵙⵎⴰⵍ ⵉⵙⵏⵖⵎⵉⵙⵏ ⴰⴱⴷⴰ + labels: + account_warning_preset: + title: ⴰⵣⵡⵍ + admin_account_action: + type: ⵜⵉⴳⴰⵡⵜ + defaults: + bot: ⵡⴰⴷ ⴰⵎⵉⴹⴰⵏ ⵏ ⵓⴱⵓⵜ + chosen_languages: ⵙⵜⵢ ⵜⵓⵜⵍⴰⵢⵉⵏ + confirm_new_password: ⵙⵏⵜⵎ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ + confirm_password: ⵙⵏⵜⵎ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ + data: ⵉⴼⵙⴽⴰ + email: ⵜⴰⵏⵙⴰ ⵉⵎⴰⵢⵍ + locale: ⵜⵓⵜⵍⴰⵢⵜ ⵏ ⵓⵏⴳⵔⵓⴷⵎ + locked: ⵔⴳⵍ ⴰⵎⵉⴹⴰⵏ + new_password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ + note: ⵜⴰⵔⵉⴷⵉⵔⵜ + password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ + setting_hide_network: ⴼⴼⵔ ⴰⵥⵟⵟⴰ ⵏⵏⴽ + setting_theme: ⴰⵙⴳⵓⵎ ⵏ ⵡⴰⵙⵉⵜ + username: ⵉⵙⵎ ⵏ ⵓⵏⵙⵙⵎⵔⵙ + username_or_email: ⵉⵙⵎ ⵏ ⵓⵏⵙⵙⵎⵔⵙ ⵏⵖ ⵉⵎⴰⵢⵍ + featured_tag: + name: ⵀⴰⵛⵟⴰⴳ + invite: + comment: ⴰⵖⴼⴰⵡⴰⵍ + ip_block: + comment: ⵖⴼⴰⵡⵍ + ip: ⵜⴰⵏⵙⴰ IP + tag: + name: ⵀⴰⵛⵟⴰⴳ + 'no': ⵓⵀⵓ + required: + mark: "*" + 'yes': ⵢⴰⵀ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 5bb8a087b..916cff301 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -3,10 +3,10 @@ tr: about: about_hashtag_html: Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. - about_this: Bu sunucu hakkında + about_this: Hakkında active_count_after: etkin active_footnote: Aylık Aktif Kullanıcılar (AAK) - administered_by: 'Yöneten:' + administered_by: 'Yönetici:' api: API apps: Mobil uygulamalar apps_platforms: İos, Android ve diğer platformlardaki Mastodon'u kullanın @@ -30,8 +30,8 @@ tr: server_stats: 'Sunucu istatistikleri:' source_code: Kaynak kodu status_count_after: - one: durum - other: durum + one: durum yazıldı + other: durum yazıldı status_count_before: Şu ana kadar tagline: Arkadaşlarını takip et ve yenilerini keşfet terms: Kullanım şartları @@ -74,7 +74,7 @@ tr: following: Onaylamak istediğiniz kişiyi zaten takip ediyor olmalısınız posts: one: Toot - other: Tootlar + other: Toot posts_tab_heading: Tootlar posts_with_replies: Tootlar ve yanıtlar reserved_username: Kullanıcı adı saklıdır @@ -100,8 +100,8 @@ tr: approve_all: Tümünü onayla approved_msg: "%{username} adlı kullanıcının kayıt başvurusu başarıyla onaylandı" are_you_sure: Emin misiniz? - avatar: Avatar - by_domain: Sunucu + avatar: Profil resmi + by_domain: Alan adı change_email: changed_msg: Hesap e-postası başarıyla değiştirildi! current_email: Mevcut e-posta @@ -111,16 +111,16 @@ tr: title: "%{username} için e-postayı değiştir" confirm: Onayla confirmed: Onaylandı - confirming: Onaylama + confirming: Onaylanıyor delete: Veriyi sil - deleted: Silinen + deleted: Silindi demote: Düşür destroyed_msg: "%{username} verilerinin hemen silinmesi için kuyruğa alındı" disable: Devre dışı disable_two_factor_authentication: 2AD kapat disabled: Kapalı - display_name: Görünen adınız - domain: Sunucu + display_name: Görünen isim + domain: Alan adı edit: Düzenle email: E-posta email_status: E-posta durumu @@ -168,7 +168,7 @@ tr: reject: Reddet reject_all: Tümünü reddet rejected_msg: "%{username} adlı kullanıcının kayıt başvurusu başarıyla reddedildi" - remove_avatar: Avatarı kaldır + remove_avatar: Profil resmini kaldır remove_header: Üstbilgiyi kaldır removed_avatar_msg: "%{username} hesabının avatar resmi başarıyla kaldırıldı" removed_header_msg: "%{username} hesabının başlık resmi başarıyla kaldırıldı" @@ -177,7 +177,7 @@ tr: send: Doğrulama epostasını yeniden gönder success: Onay e-postası başarıyla gönderildi! reset: Sıfırla - reset_password: Parolayı değiştir + reset_password: Şifreyi sıfırla resubscribe: Yeniden abone ol role: İzinler roles: @@ -312,7 +312,7 @@ tr: title: Yeni duyuru published_msg: Duyuru başarıyla yayınlandı! scheduled_for: "%{time} için zamanlandı" - scheduled_msg: Duyuru yayınlanmak üzere planlandı! + scheduled_msg: Duyuru yayınlanmak üzere zamanlandı! title: Duyurular unpublished_msg: Duyuru başarıyla yayından kaldırıldı! updated_msg: Duyuru başarıyla güncellendi! @@ -322,8 +322,8 @@ tr: copied_msg: Emojinin yerel kopyası başarıyla oluşturuldu copy: Kopyala copy_failed_msg: Bu emojinin yerel bir kopyası oluşturulamadı - create_new_category: Yeni kategori ekle - created_msg: Emoji başarıyla oluşturuldu! + create_new_category: Yeni kategori oluştur + created_msg: İfade başarıyla oluşturuldu! delete: Sil destroyed_msg: Emojo başarıyla yok edildi! disable: Devre dışı bırak @@ -354,7 +354,7 @@ tr: backlog: bekleyen işler config: Yapılandırma feature_deletions: Hesap silme - feature_invites: Davet linkleri + feature_invites: Davet bağlantıları feature_profile_directory: Profil Dizini feature_registrations: Kayıtlar feature_relay: Federasyon aktarıcısı @@ -372,7 +372,7 @@ tr: space: Alan kullanımı title: Kontrol Paneli total_users: toplam kullanıcı - trends: Trendler + trends: Gündemler week_interactions: bu haftaki etkileşimler week_users_active: bu hafta aktif week_users_new: bu hafta kullanıcılar @@ -1073,7 +1073,7 @@ tr: unrecognized_emoji: tanınan bir emoji değil relationships: activity: Hesap etkinliği - dormant: Atıl + dormant: Uykuda followers: Takipçiler following: Takip edilenler invited: Davet edildi @@ -1211,7 +1211,7 @@ tr: show_more: Daha fazlasını göster show_newer: Yenileri göster show_older: Eskileri göster - show_thread: Mesaj dizisini göster + show_thread: Konuyu göster sign_in_to_participate: Sohbete katılmak için oturum açın title: '%{name}: "%{quote}"' visibilities: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index a24c652a2..733521760 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -206,7 +206,7 @@ vi: unsilenced_msg: Bỏ ẩn %{username} thành công unsubscribe: Hủy đăng ký unsuspended_msg: Đã kích hoạt lại tài khoản %{username} thành công - username: ABC + username: Tài khoản view_domain: Xem mô tả tài khoản này warn: Cảnh cáo web: Web @@ -669,16 +669,16 @@ vi: body: 'Hashtag # %{name} đang là xu hướng nhưng chưa được kiểm duyệt. Nó sẽ không được hiển thị công khai trừ khi bạn cho phép. Bỏ qua nếu bạn không bao giờ muốn thấy nó xuất hiện.' subject: Hashtag mới được xem xét trên %{instance} (# %{name}) aliases: - add_new: Tạo tên hiển thị + add_new: Kết nối tài khoản created_msg: Tạo thành công một tên hiển thị mới. Bây giờ bạn có thể bắt đầu di chuyển từ tài khoản cũ. deleted_msg: Xóa thành công tên hiển thị. Chuyển từ tài khoản này sang tài khoản này sẽ không còn có thể. - empty: Bạn không tên hiển thị nào. - hint_html: Nếu bạn muốn chuyển từ máy chủ khác sang máy chủ này, tại đây bạn có thể tạo bí danh, điều này là bắt buộc trước khi bạn có thể tiến hành chuyển người theo dõi từ tài khoản cũ sang tài khoản này. Hành động này của chính nó là vô hại và có thể đảo ngược. Việc di chuyển tài khoản được bắt đầu từ tài khoản cũ. + empty: Bạn không có tài khoản cũ nào. + hint_html: Nếu bạn muốn chuyển từ máy chủ khác sang máy chủ này, bắt buộc bạn phải tạo tên người dùng mới thì mới có thể tiến hành chuyển được người theo dõi. Hành động này không ảnh hưởng gì và có thể đảo ngược. Việc di chuyển tài khoản được bắt đầu từ tài khoản cũ. remove: Bỏ liên kết bí danh appearance: advanced_web_interface: Bố cục advanced_web_interface_hint: 'Giao diện nhiều cột cho phép bạn chuyển đổi bố cục hiển thị thành nhiều cột khác nhau. Bao gồm: Bảng tin, thông báo, thế giới, cũng như danh sách và hashtag. Rất thích hợp nếu bạn sử dụng màn hình rộng.' - animations_and_accessibility: Nâng cao + animations_and_accessibility: Bảng tin confirmation_dialogs: Hộp thoại xác nhận discovery: Khám phá localization: @@ -792,7 +792,7 @@ vi: success_msg: Tài khoản của bạn đã được xóa thành công warning: before: 'Trước khi tiếp tục, xin vui lòng xem xét cẩn thận:' - caches: Nội dung đã được lưu trữ bởi các máy chủ khác có thể tồn tại + caches: Nội dung đã lưu trữ trên các máy chủ khác có thể vẫn tồn tại data_removal: Bài viết của bạn và dữ liệu khác sẽ bị xóa vĩnh viễn email_change_html: Bạn có thể thay đổi địa chỉ email mà không cần phải xóa tài khoản email_contact_html: Nếu vẫn không nhận được, bạn có thể liên hệ %{email} để được giúp đỡ @@ -966,14 +966,14 @@ vi: redirecting_to: Tài khoản của bạn đang chuyển hướng đến %{acct}. set_redirect: Thiết lập chuyển hướng warning: - backreference_required: Tài khoản mới trước tiên phải được cấu hình để tham chiếu lại tài khoản này + backreference_required: Bạn cần phải đăng ký tài khoản mới ở máy chủ khác trước before: 'Trước khi tiếp tục, xin vui lòng đọc các lưu ý:' - cooldown: Sau khi di chuyển, có thời gian chiêu hồi, trong đó bạn sẽ không thể di chuyển nữa - disabled_account: Tài khoản hiện tại của bạn sẽ không thể sử dụng đầy đủ sau đó. Tuy nhiên, bạn sẽ có quyền truy cập để xuất dữ liệu cũng như kích hoạt lại. + cooldown: Trong thời gian chuyển tài khoản, bạn sẽ không thể sử dụng tài khoản này + disabled_account: Tài khoản này sẽ không thể tiếp tục sử dụng. Tuy nhiên, bạn có quyền truy cập để xuất dữ liệu cũng như kích hoạt lại. followers: Hành động này sẽ chuyển tất cả người theo dõi từ tài khoản hiện tại sang tài khoản mới only_redirect_html: Ngoài ra, bạn có thể đặt chuyển hướng trên trang cá nhân của bạn. other_data: Dữ liệu khác sẽ không được di chuyển tự động - redirect: Trang cá nhân hiện tại của bạn sẽ được cập nhật với thông báo chuyển hướng và bị loại khỏi các tìm kiếm + redirect: Trang cá nhân hiện tại của bạn sẽ hiển thị thông báo chuyển hướng và bị loại khỏi kết quả tìm kiếm moderation: title: Kiểm duyệt move_handler: @@ -995,8 +995,8 @@ vi: subject: "%{name} vừa thích tút của bạn" title: Lượt thích mới follow: - body: Bạn vừa mới được %{name} theo dõi - subject: "%{name} vừa mới theo dõi bạn" + body: Bạn vừa được %{name} theo dõi! + subject: "%{name} vừa theo dõi bạn" title: Người theo dõi mới follow_request: action: Quản lý yêu cầu theo dõi @@ -1140,7 +1140,7 @@ vi: settings: account: Tài khoản account_settings: Cài đặt tài khoản - aliases: Định danh tài khoản + aliases: Kết nối tài khoản appearance: Giao diện authorized_apps: App đã sử dụng back: Quay lại Mastodon @@ -1221,7 +1221,7 @@ vi: time: formats: default: "%d.%m.%Y %H:%M" - month: "%b %Y" + month: "%B %Y" two_factor_authentication: add: Thêm disable: Vô hiệu hóa diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 55016da5c..ceb475b91 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -1,5 +1,91 @@ --- zgh: + about: + about_this: ⵖⴼ + unavailable_content_description: + domain: ⴰⵎⴰⴽⴽⴰⵢ + what_is_mastodon: ⵎⴰ'ⵢⴷ ⵉⴳⴰⵏ ⵎⴰⵙⵜⵔⴷⵓⵎ? + accounts: + follow: ⴹⴼⵕ + never_active: ⵓⵙⴰⵔ + roles: + group: ⵜⴰⵔⴰⴱⴱⵓⵜ + admin: + account_moderation_notes: + delete: ⴽⴽⵙ + accounts: + change_email: + label: ⵙⵏⴼⵍ ⵉⵎⴰⵢⵍ + submit: ⵙⵏⴼⵍ ⵉⵎⴰⵢⵍ + confirm: ⵙⵏⵜⵎ + delete: ⴽⴽⵙ ⵉⴼⵙⴽⴰ + edit: ⵙⵏⴼⵍ + email: ⵉⵎⴰⵢⵍ + location: + all: ⵎⴰⵕⵕⴰ + moderation: + all: ⵎⴰⵕⵕⴰ + public: ⴰⴳⴷⵓⴷⴰⵏ + reject: ⴰⴳⵢ + title: ⵉⵎⵉⴹⴰⵏⵏ + web: ⵡⵉⴱ + announcements: + live: ⵓⵙⵔⵉⴷ + custom_emojis: + copy: ⵙⵏⵖⵍ + delete: ⴽⴽⵙ + emoji: ⵉⵎⵓⵊⵉ + email_domain_blocks: + delete: ⴽⴽⵙ + instances: + moderation: + all: ⵎⴰⵕⵕⴰ + ip_blocks: + delete: ⴽⴽⵙ + expires_in: + '1209600': 2 weeks + '15778476': 6 ⵡⴰⵢⵢⵓⵔⵏ + '2629746': ⴰⵢⵢⵓⵔ + '31556952': ⴰⵙⴳⴳⵯⴰⵙ + '86400': ⴰⵙⵙ + '94670856': 3 ⵉⵙⴳⴳⵯⴰⵙⵏ + relays: + delete: ⴽⴽⵙ + status: ⴰⴷⴷⴰⴷ + reports: + notes: + delete: ⴽⴽⵙ + status: ⴰⴷⴷⴰⴷ + settings: + site_title: ⵉⵙⵎ ⵏ ⵓⵎⴰⴽⴽⴰⵢ + title: ⵜⵉⵙⵖⴰⵍ ⵏ ⵡⴰⵙⵉⵜ + statuses: + batch: + delete: ⴽⴽⵙ + media: + title: ⵉⵙⵏⵖⵎⵉⵙⵏ + with_media: ⵙ ⵉⵙⵏⵖⵎⵉⵙⵏ + tags: + name: ⵀⴰⵛⵟⴰⴳ + title: ⵉⵀⴰⵛⵟⴰⴳⵏ + warning_presets: + delete: ⴽⴽⵙ + application_mailer: + view_profile: ⵙⴽⵏ ⵉⴼⵔⵙ + auth: + change_password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ + forgot_password: ⵜⴻⵜⵜⵓⴷ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵏⵏⴽ? + login: ⴽⵛⵎ + logout: ⴼⴼⵖ + or_log_in_with: ⵏⵖ ⴽⵛⵎ ⵙ + register: ⵣⵎⵎⴻⵎ + status: + account_status: ⴰⴷⴷⴰⴷ ⵏ ⵓⵎⵉⴹⴰⵏ + authorize_follow: + follow: ⴹⴼⵕ + title: ⴹⴼⵕ %{acct} + deletes: + proceed: ⴽⴽⵙ ⴰⵎⵉⴹⴰⵏ errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -10,3 +96,31 @@ zgh: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. + exports: + archive_takeout: + date: ⴰⵣⵎⵣ + filters: + index: + delete: ⴽⴽⵙ + footer: + more: ⵓⴳⴳⴰⵔ… + generic: + all: ⵎⴰⵕⵕⴰ + copy: ⵙⵏⵖⵍ + delete: ⴽⴽⵙ + invites: + expires_in: + '1800': 30 ⵜⵓⵙⴷⵉⴷⵉⵏ + '21600': 6 ⵜⵙⵔⴰⴳⵉⵏ + '3600': ⵜⴰⵙⵔⴰⴳⵜ + '43200': 12 ⵜⵙⵔⴰⴳⵉⵏ + '604800': ⵉⵎⴰⵍⴰⵙⵙ + '86400': ⴰⵙⵙ + expires_in_prompt: ⵓⵙⴰⵔ + notification_mailer: + mention: + action: ⵔⴰⵔ + settings: + account: ⴰⵎⵉⴹⴰⵏ + account_settings: ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ + profile: ⵉⴼⵔⵙ From 21d1989b535d4d02d33612f65c74450d2045ec3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 18:20:41 +0900 Subject: [PATCH 170/422] Bump parallel from 1.19.2 to 1.20.0 (#15115) Bumps [parallel](https://github.com/grosser/parallel) from 1.19.2 to 1.20.0. - [Release notes](https://github.com/grosser/parallel/releases) - [Commits](https://github.com/grosser/parallel/compare/v1.19.2...v1.20.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 33e467732..bd34bb25d 100644 --- a/Gemfile +++ b/Gemfile @@ -71,7 +71,7 @@ gem 'nsa', '~> 0.2' gem 'oj', '~> 3.10' gem 'ox', '~> 2.13' gem 'parslet' -gem 'parallel', '~> 1.19' +gem 'parallel', '~> 1.20' gem 'posix-spawn' gem 'pundit', '~> 2.1' gem 'premailer-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 9ed0ed9ec..ae746f34d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -391,7 +391,7 @@ GEM paperclip-av-transcoder (0.6.4) av (~> 0.9.0) paperclip (>= 2.5.2) - parallel (1.19.2) + parallel (1.20.0) parallel_tests (3.3.0) parallel parser (2.7.2.0) @@ -746,7 +746,7 @@ DEPENDENCIES ox (~> 2.13) paperclip (~> 6.0) paperclip-av-transcoder (~> 0.6) - parallel (~> 1.19) + parallel (~> 1.20) parallel_tests (~> 3.3) parslet pg (~> 1.2) From 44fb2038c9b675d8c08ee68cb9629ca82de85220 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 18:23:24 +0900 Subject: [PATCH 171/422] Bump bootsnap from 1.4.9 to 1.5.0 (#15116) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.4.9 to 1.5.0. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.4.9...v1.5.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index bd34bb25d..94c1b43f9 100644 --- a/Gemfile +++ b/Gemfile @@ -30,7 +30,7 @@ gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.7' -gem 'bootsnap', '~> 1.4', require: false +gem 'bootsnap', '~> 1.5', require: false gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'iso-639' diff --git a/Gemfile.lock b/Gemfile.lock index ae746f34d..10d380231 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,7 +104,7 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.4) ffi (~> 1.10.0) - bootsnap (1.4.9) + bootsnap (1.5.0) msgpack (~> 1.0) brakeman (4.10.0) browser (4.2.0) @@ -681,7 +681,7 @@ DEPENDENCIES better_errors (~> 2.8) binding_of_caller (~> 0.7) blurhash (~> 0.1) - bootsnap (~> 1.4) + bootsnap (~> 1.5) brakeman (~> 4.10) browser bullet (~> 6.1) From c19f934fe83c57a8db5978856cfc75e4603584e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 18:28:55 +0900 Subject: [PATCH 172/422] Bump webmock from 3.9.3 to 3.9.5 (#15134) Bumps [webmock](https://github.com/bblimke/webmock) from 3.9.3 to 3.9.5. - [Release notes](https://github.com/bblimke/webmock/releases) - [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md) - [Commits](https://github.com/bblimke/webmock/compare/v3.9.3...v3.9.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 10d380231..1e9ad77d4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -649,7 +649,7 @@ GEM safety_net_attestation (~> 0.4.0) securecompare (~> 1.0) tpm-key_attestation (~> 0.9.0) - webmock (3.9.3) + webmock (3.9.5) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) From 501261cb9044faa5e0782b82b1ca4078eb4af55d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 18:29:30 +0900 Subject: [PATCH 173/422] Bump aws-sdk-s3 from 1.83.1 to 1.84.0 (#15135) Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.83.1 to 1.84.0. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 94c1b43f9..65185da26 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,7 @@ gem 'makara', '~> 0.4' gem 'pghero', '~> 2.7' gem 'dotenv-rails', '~> 2.7' -gem 'aws-sdk-s3', '~> 1.83', require: false +gem 'aws-sdk-s3', '~> 1.84', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 1e9ad77d4..48fed01e4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,8 +79,8 @@ GEM cocaine (~> 0.5.3) awrence (1.1.1) aws-eventstream (1.1.0) - aws-partitions (1.385.0) - aws-sdk-core (3.109.1) + aws-partitions (1.390.0) + aws-sdk-core (3.109.2) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -88,7 +88,7 @@ GEM aws-sdk-kms (1.39.0) aws-sdk-core (~> 3, >= 3.109.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.83.1) + aws-sdk-s3 (1.84.0) aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) @@ -677,7 +677,7 @@ DEPENDENCIES active_record_query_trace (~> 1.8) addressable (~> 2.7) annotate (~> 3.1) - aws-sdk-s3 (~> 1.83) + aws-sdk-s3 (~> 1.84) better_errors (~> 2.8) binding_of_caller (~> 0.7) blurhash (~> 0.1) From 01f18355136631311e5d52631f2896063943ca70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 19:04:35 +0900 Subject: [PATCH 174/422] Bump webpack-merge from 5.0.9 to 5.3.0 (#15130) Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.0.9 to 5.3.0. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.0.9...v5.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b51863c71..e2f027b21 100644 --- a/package.json +++ b/package.json @@ -166,7 +166,7 @@ "webpack-assets-manifest": "^3.1.1", "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^3.3.12", - "webpack-merge": "^5.0.9", + "webpack-merge": "^5.3.0", "wicg-inert": "^3.1.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index a18dd960d..c3d961f61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11046,10 +11046,10 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^5.0.9: - version "5.0.9" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.0.9.tgz#d5e0e0ae564ae704836d747893bdd2741544bf31" - integrity sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw== +webpack-merge@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.3.0.tgz#a80df44d35fabace680bf430a19fda9ec49ed8eb" + integrity sha512-4PtsBAWnmJULIJYviiPq4BxwAykbAgGMheyEVaemj2bJI54h+p/gnlbXZEH2EM0IYC3blOE1Qm6kzKlc06N1UQ== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" From ce4aa7d0cd48782d1608274f546a1190ad4605ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 19:05:51 +0900 Subject: [PATCH 175/422] Bump eslint from 7.12.1 to 7.13.0 (#15127) Bumps [eslint](https://github.com/eslint/eslint) from 7.12.1 to 7.13.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.12.1...v7.13.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e2f027b21..5228669fe 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "@testing-library/react": "^11.1.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.1", - "eslint": "^7.12.1", + "eslint": "^7.13.0", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.4.1", "eslint-plugin-promise": "~4.2.1", diff --git a/yarn.lock b/yarn.lock index c3d961f61..0daf9a801 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4222,10 +4222,10 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^7.12.1: - version "7.12.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" - integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== +eslint@^7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da" + integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.2.1" From 522e592274ab78a290066608718a1fbc34840238 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 19:16:07 +0900 Subject: [PATCH 176/422] Bump sass-loader from 10.0.4 to 10.0.5 (#15121) Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.4 to 10.0.5. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.4...v10.0.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5228669fe..6602fbd23 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "reselect": "^4.0.0", "rimraf": "^3.0.2", "sass": "^1.28.0", - "sass-loader": "^10.0.4", + "sass-loader": "^10.0.5", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", diff --git a/yarn.lock b/yarn.lock index 0daf9a801..66d2e8c60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9404,10 +9404,10 @@ sass-lint@^1.13.1: path-is-absolute "^1.0.0" util "^0.10.3" -sass-loader@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.4.tgz#ec7181096947d078d60a1d76d527f47c19b151d8" - integrity sha512-zhdZ8qvZM4iL5XjLVEjJLvKWvC+MB+hHgzL2x/Nf7UHpUNmPYsJvypW79bW39g4LZ603dH/dRSsRYzJJIljtdA== +sass-loader@^10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.5.tgz#f53505b5ddbedf43797470ceb34066ded82bb769" + integrity sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w== dependencies: klona "^2.0.4" loader-utils "^2.0.0" From 4471f5e831a71ca8a1b0a25f84ed0dfc069f39d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 20:15:54 +0900 Subject: [PATCH 177/422] Bump compression-webpack-plugin from 6.0.4 to 6.1.0 (#15136) Bumps [compression-webpack-plugin](https://github.com/webpack-contrib/compression-webpack-plugin) from 6.0.4 to 6.1.0. - [Release notes](https://github.com/webpack-contrib/compression-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/compression-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v6.0.4...v6.1.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6602fbd23..3a9d1a550 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-runtime": "^6.26.0", "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^6.0.4", + "compression-webpack-plugin": "^6.1.0", "cross-env": "^7.0.2", "css-loader": "^5.0.0", "cssnano": "^4.1.10", diff --git a/yarn.lock b/yarn.lock index 66d2e8c60..8681beb22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3004,10 +3004,10 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.0.4.tgz#524699c0ad4e94cab0eb199c734e291f6ab685b9" - integrity sha512-PViPdrF5UmqZxsr9WNoE+R6lTre6/5tC9TmWotBfhOQtWlc7oj/SXCsrecbZJ9LDpwLjHH6llPCKmw+JGPGN+A== +compression-webpack-plugin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.0.tgz#ef88a4c35e240aa14bec6cccc0582ed47e148605" + integrity sha512-RK/bBW3JwQpb7tH91trro7ulNa0ynSTPxQO48rn/oS1Y2nGUYuX6CWIOqbhUF2+b+2clqJeDGIYYckvg6WKabA== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" From 9394d8174ce373f1ed7628f7c8fee299063cb962 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 21:30:34 +0900 Subject: [PATCH 178/422] Bump mini-css-extract-plugin from 1.2.1 to 1.3.0 (#15131) Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.2.1 to 1.3.0. - [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.2.1...v1.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3a9d1a550..d1c11fdc1 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "lodash": "^4.17.19", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^1.2.1", + "mini-css-extract-plugin": "^1.3.0", "mkdirp": "^1.0.4", "npmlog": "^4.1.2", "object-assign": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index 8681beb22..fb513ed6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6997,10 +6997,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz#30ea7dee632b3002b0c77aeed447790408cb247e" - integrity sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A== +mini-css-extract-plugin@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.0.tgz#bbcba978b68c39f0a9c75822cfb2874f9cf6b018" + integrity sha512-4DKmPwFd0XKlwoqvrkLi2X8Mlosh2ey/E/OVAucnPUdzGqrSWHgSqed/p4Ue2Q39JjIvcdSDgmZDO6mir5Ovmw== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" From cc7f85f14af9ad8a76d431e078477a59ee13ab74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 21:51:22 +0900 Subject: [PATCH 179/422] Bump @babel/preset-react from 7.12.1 to 7.12.5 (#15122) Bumps [@babel/preset-react](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-react) from 7.12.1 to 7.12.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.12.5/packages/babel-preset-react) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index d1c11fdc1..73cf5daac 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "@babel/plugin-transform-react-inline-elements": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.1", + "@babel/preset-react": "^7.12.5", "@babel/runtime": "^7.12.1", "@clusterws/cws": "^3.0.0", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index fb513ed6c..35f9db026 100644 --- a/yarn.lock +++ b/yarn.lock @@ -712,10 +712,10 @@ "@babel/helper-builder-react-jsx" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-development@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz#0b8f8cd531dcf7991f1e5f2c10a2a4f1cfc78e36" - integrity sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ== +"@babel/plugin-transform-react-jsx-development@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.5.tgz#677de5b96da310430d6cfb7fee16a1603afa3d56" + integrity sha512-1JJusg3iPgsZDthyWiCr3KQiGs31ikU/mSf2N2dSYEAO0GEImmVUbWf0VoSDGDFTAn5Dj4DUiR6SdIXHY7tELA== dependencies: "@babel/helper-builder-react-jsx-experimental" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" @@ -735,10 +735,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz#c2d96c77c2b0e4362cc4e77a43ce7c2539d478cb" - integrity sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw== +"@babel/plugin-transform-react-jsx@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz#39ede0e30159770561b6963be143e40af3bde00c" + integrity sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ== dependencies: "@babel/helper-builder-react-jsx" "^7.10.4" "@babel/helper-builder-react-jsx-experimental" "^7.12.1" @@ -912,15 +912,15 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" - integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== +"@babel/preset-react@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.5.tgz#d45625f65d53612078a43867c5c6750e78772c56" + integrity sha512-jcs++VPrgyFehkMezHtezS2BpnUlR7tQFAyesJn1vGTO9aTFZrgIQrA5YydlTwxbcjMwkFY6i04flCigRRr3GA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-display-name" "^7.12.1" - "@babel/plugin-transform-react-jsx" "^7.12.1" - "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.5" + "@babel/plugin-transform-react-jsx-development" "^7.12.5" "@babel/plugin-transform-react-jsx-self" "^7.12.1" "@babel/plugin-transform-react-jsx-source" "^7.12.1" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" From 5206ede9c9c77a19a0dbcfa630f6594e6f9913b9 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Tue, 10 Nov 2020 22:44:17 +0900 Subject: [PATCH 180/422] Add missing locales (#15138) --- app/helpers/settings_helper.rb | 4 ++++ config/application.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 87718dc05..5b39497b6 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -40,6 +40,7 @@ module SettingsHelper kk: 'Қазақша', kn: 'ಕನ್ನಡ', ko: '한국어', + ku: 'سۆرانی', lt: 'Lietuvių', lv: 'Latviešu', mk: 'Македонски', @@ -56,6 +57,8 @@ module SettingsHelper pt: 'Português', ro: 'Română', ru: 'Русский', + sa: 'संस्कृतम्', + sc: 'Sardu', sk: 'Slovenčina', sl: 'Slovenščina', sq: 'Shqip', @@ -69,6 +72,7 @@ module SettingsHelper uk: 'Українська', ur: 'اُردُو', vi: 'Tiếng Việt', + zgh: 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'zh-CN': '简体中文', 'zh-HK': '繁體中文(香港)', 'zh-TW': '繁體中文(臺灣)', diff --git a/config/application.rb b/config/application.rb index bf467d6c3..de2951487 100644 --- a/config/application.rb +++ b/config/application.rb @@ -85,6 +85,7 @@ module Mastodon :kk, :kn, :ko, + :ku, :lt, :lv, :mk, @@ -100,6 +101,8 @@ module Mastodon :'pt-PT', :ro, :ru, + :sa, + :sc, :sk, :sl, :sq, @@ -113,6 +116,7 @@ module Mastodon :uk, :ur, :vi, + :zgh, :'zh-CN', :'zh-HK', :'zh-TW', From 60d40ba0bdf7a35e9d53082448aa59ce9c7c4737 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 23:03:19 +0900 Subject: [PATCH 181/422] Bump react-textarea-autosize from 8.2.0 to 8.3.0 (#15132) Bumps [react-textarea-autosize](https://github.com/Andarist/react-textarea-autosize) from 8.2.0 to 8.3.0. - [Release notes](https://github.com/Andarist/react-textarea-autosize/releases) - [Changelog](https://github.com/Andarist/react-textarea-autosize/blob/master/CHANGELOG.md) - [Commits](https://github.com/Andarist/react-textarea-autosize/compare/v8.2.0...v8.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 73cf5daac..21512a532 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "react-select": "^3.1.0", "react-sparklines": "^1.7.0", "react-swipeable-views": "^0.13.9", - "react-textarea-autosize": "^8.2.0", + "react-textarea-autosize": "^8.3.0", "react-toggle": "^4.1.1", "redis": "^3.0.2", "redux": "^4.0.5", diff --git a/yarn.lock b/yarn.lock index 35f9db026..da846fc0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8836,10 +8836,10 @@ react-test-renderer@^16.14.0: react-is "^16.8.6" scheduler "^0.19.1" -react-textarea-autosize@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.2.0.tgz#fae38653f5ec172a855fd5fffb39e466d56aebdb" - integrity sha512-grajUlVbkx6VdtSxCgzloUIphIZF5bKr21OYMceWPKkniy7H0mRAT/AXPrRtObAe+zUePnNlBwUc4ivVjUGIjw== +react-textarea-autosize@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.0.tgz#e6e2fd186d9f61bb80ac6e2dcb4c55504f93c2fa" + integrity sha512-3GLWFAan2pbwBeoeNDoqGmSbrShORtgWfaWX0RJDivsUrpShh01saRM5RU/i4Zmf+whpBVEY5cA90Eq8Ub1N3w== dependencies: "@babel/runtime" "^7.10.2" use-composed-ref "^1.0.0" From badb0fa5dd4d46a04ed1dbc2b8c2030825c7098a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 23:04:28 +0900 Subject: [PATCH 182/422] Bump babel-jest from 26.6.1 to 26.6.3 (#15125) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 26.6.1 to 26.6.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v26.6.3/packages/babel-jest) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 117 ++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 85 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 21512a532..f139a5610 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "@testing-library/jest-dom": "^5.11.5", "@testing-library/react": "^11.1.0", "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.1", + "babel-jest": "^26.6.3", "eslint": "^7.13.0", "eslint-plugin-import": "~2.22.1", "eslint-plugin-jsx-a11y": "~6.4.1", diff --git a/yarn.lock b/yarn.lock index da846fc0b..2418a8214 100644 --- a/yarn.lock +++ b/yarn.lock @@ -506,7 +506,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.1": +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== @@ -1273,21 +1273,21 @@ jest-runner "^26.6.1" jest-runtime "^26.6.1" -"@jest/transform@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.1.tgz#f70786f96e0f765947b4fb4f54ffcfb7bd783711" - integrity sha512-oNFAqVtqRxZRx6vXL3I4bPKUK0BIlEeaalkwxyQGGI8oXDQBtYQBpiMe5F7qPs4QdvvFYB42gPGIMMcxXaBBxQ== +"@jest/transform@^26.6.1", "@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.6.1" + jest-haste-map "^26.6.2" jest-regex-util "^26.0.0" - jest-util "^26.6.1" + jest-util "^26.6.2" micromatch "^4.0.2" pirates "^4.0.1" slash "^3.0.0" @@ -1304,10 +1304,10 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.3.0", "@jest/types@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.1.tgz#2638890e8031c0bc8b4681e0357ed986e2f866c5" - integrity sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg== +"@jest/types@^26.3.0", "@jest/types@^26.6.1", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -2124,16 +2124,16 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.1.tgz#07bd7bec14de47fe0f2c9a139741329f1f41788b" - integrity sha512-duMWEOKrSBYRVTTNpL2SipNIWnZOjP77auOBMPQ3zXAdnDbyZQWU8r/RxNWpUf9N6cgPFecQYelYLytTVXVDtA== +babel-jest@^26.6.1, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.5.0" + babel-preset-jest "^26.6.2" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2183,10 +2183,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz#3916b3a28129c29528de91e5784a44680db46385" - integrity sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2245,10 +2245,10 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-current-node-syntax@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" - integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -2261,14 +2261,15 @@ babel-preset-current-node-syntax@^0.1.3: "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz#f1b166045cd21437d1188d29f7fba470d5bdb0e7" - integrity sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA== +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-jest-hoist "^26.5.0" - babel-preset-current-node-syntax "^0.1.3" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.26.0: version "6.26.0" @@ -6165,6 +6166,27 @@ jest-haste-map@^26.6.1: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + jest-jasmine2@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.1.tgz#11c92603d1fa97e3c33404359e69d6cec7e57017" @@ -6329,6 +6351,14 @@ jest-serializer@^26.5.0: "@types/node" "*" graceful-fs "^4.2.4" +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + jest-snapshot@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.1.tgz#469e9d0b749496aea7dad0d7e5e5c88b91cdb4cc" @@ -6363,6 +6393,18 @@ jest-util@^26.6.1: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + jest-validate@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.1.tgz#28730eb8570d60968d9d06f1a8c94d922167bd2a" @@ -6406,6 +6448,15 @@ jest-worker@^26.6.1: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.1.tgz#821e8280d2bdeeed40ac7bc43941dceff0f1b650" From e8339b2c0da1cfa4bb6701362e52eebdf519ef18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 23:06:05 +0900 Subject: [PATCH 183/422] Bump css-loader from 5.0.0 to 5.0.1 (#15118) Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/webpack-contrib/css-loader/releases) - [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/css-loader/compare/v5.0.0...v5.0.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index f139a5610..17080bd52 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "classnames": "^2.2.5", "compression-webpack-plugin": "^6.1.0", "cross-env": "^7.0.2", - "css-loader": "^5.0.0", + "css-loader": "^5.0.1", "cssnano": "^4.1.10", "detect-passive-events": "^2.0.1", "dotenv": "^8.2.0", diff --git a/yarn.lock b/yarn.lock index 2418a8214..35f7f0a19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2679,10 +2679,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" - integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-api@^3.0.0: version "3.0.0" @@ -3279,16 +3279,16 @@ css-list-helpers@^1.0.1: dependencies: tcomb "^2.5.0" -css-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.0.tgz#f0a48dfacc3ab9936a05ee16a09e7f313872e117" - integrity sha512-9g35eXRBgjvswyJWoqq/seWp+BOxvUl8IinVNTsUBFFxtwfEYvlmEn6ciyn0liXGbGh5HyJjPGCuobDSfqMIVg== +css-loader@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.1.tgz#9e4de0d6636a6266a585bd0900b422c85539d25f" + integrity sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw== dependencies: - camelcase "^6.1.0" + camelcase "^6.2.0" cssesc "^3.0.0" icss-utils "^5.0.0" loader-utils "^2.0.0" - postcss "^8.1.1" + postcss "^8.1.4" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" @@ -7211,10 +7211,10 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== -nanoid@^3.1.12: - version "3.1.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== +nanoid@^3.1.16: + version "3.1.16" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64" + integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w== nanomatch@^1.2.9: version "1.2.13" @@ -8371,14 +8371,14 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.1.1: - version "8.1.2" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.2.tgz#9731fcaa4f7b0bef47121821bdae9eeb609a324c" - integrity sha512-mToqEVFq8jF9TFhlIK4HhE34zknFJuNTgqtsr60vUvrWn+9TIYugCwiV1JZRxCuOrej2jjstun1bn4Bc7/1HkA== +postcss@^8.1.4: + version "8.1.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.6.tgz#b022ba2cfb8701da234d073ed3128c5a384c35ff" + integrity sha512-JuifSl4h8dJ70SiMXKjzCxhalE6p2TnMHuq9G8ftyXj2jg6SXzqCsEuxMj9RkmJoO5D+Z9YrWunNkxqpRT02qg== dependencies: colorette "^1.2.1" line-column "^1.0.2" - nanoid "^3.1.12" + nanoid "^3.1.16" source-map "^0.6.1" postgres-array@~1.0.0: From e9b4d97d889474b3baaaad2869cca34b767b9a0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 23:11:15 +0900 Subject: [PATCH 184/422] Bump better_errors from 2.8.3 to 2.9.1 (#15117) Bumps [better_errors](https://github.com/BetterErrors/better_errors) from 2.8.3 to 2.9.1. - [Release notes](https://github.com/BetterErrors/better_errors/releases) - [Commits](https://github.com/BetterErrors/better_errors/compare/v2.8.3...v2.9.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 65185da26..7d21d41d8 100644 --- a/Gemfile +++ b/Gemfile @@ -133,7 +133,7 @@ end group :development do gem 'active_record_query_trace', '~> 1.8' gem 'annotate', '~> 3.1' - gem 'better_errors', '~> 2.8' + gem 'better_errors', '~> 2.9' gem 'binding_of_caller', '~> 0.7' gem 'bullet', '~> 6.1' gem 'letter_opener', '~> 1.7' diff --git a/Gemfile.lock b/Gemfile.lock index 48fed01e4..25e386f7e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -95,7 +95,7 @@ GEM aws-sigv4 (1.2.2) aws-eventstream (~> 1, >= 1.0.2) bcrypt (3.1.16) - better_errors (2.8.3) + better_errors (2.9.1) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -678,7 +678,7 @@ DEPENDENCIES addressable (~> 2.7) annotate (~> 3.1) aws-sdk-s3 (~> 1.84) - better_errors (~> 2.8) + better_errors (~> 2.9) binding_of_caller (~> 0.7) blurhash (~> 0.1) bootsnap (~> 1.5) From fc41c1f4a0932f8e6219d61a62984e9a5f6177c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 23:36:55 +0900 Subject: [PATCH 185/422] Bump webpack-bundle-analyzer from 3.9.0 to 4.1.0 (#15129) Bumps [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) from 3.9.0 to 4.1.0. - [Release notes](https://github.com/webpack-contrib/webpack-bundle-analyzer/releases) - [Changelog](https://github.com/webpack-contrib/webpack-bundle-analyzer/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/webpack-bundle-analyzer/commits/v4.1.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 139 ++++++++++++++++++++++++++++----------------------- 2 files changed, 77 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 17080bd52..928d47a2e 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "uuid": "^8.3.1", "webpack": "^4.44.2", "webpack-assets-manifest": "^3.1.1", - "webpack-bundle-analyzer": "^3.9.0", + "webpack-bundle-analyzer": "^4.1.0", "webpack-cli": "^3.3.12", "webpack-merge": "^5.3.0", "wicg-inert": "^3.1.0" diff --git a/yarn.lock b/yarn.lock index 35f7f0a19..1d2382a9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1745,6 +1745,11 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.0.0.tgz#56ae4c0f434a45fff4a125e7ea95fa9c98f67a16" + integrity sha512-oZRad/3SMOI/pxbbmqyurIx7jHw1wZDcR9G44L8pUVFEomX/0dH89SrM1KaDXuv1NpzAXz6Op/Xu/Qd5XXzdEA== + acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -1760,16 +1765,16 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.1: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== - -acorn@^7.4.0: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" + integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -2055,6 +2060,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2314,16 +2324,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -2752,11 +2752,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - "chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" @@ -2983,11 +2978,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.18.0, commander@^2.20.0, commander@^2.8.1: +commander@^2.20.0, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" + integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3813,11 +3813,18 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.3.4, ejs@^2.6.1: +ejs@^2.3.4: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== +ejs@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" + integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== + dependencies: + jake "^10.6.1" + electron-to-chromium@^1.3.571: version "1.3.574" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.574.tgz#bdd87f62fe70165e5c862a0acf0cee9889e23aa3" @@ -4435,7 +4442,7 @@ expect@^26.6.1: jest-message-util "^26.6.1" jest-regex-util "^26.0.0" -express@^4.16.3, express@^4.17.1: +express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -4604,10 +4611,17 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== +filelist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" + integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== + dependencies: + minimatch "^3.0.4" + +filesize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== fill-range@^4.0.0: version "4.0.0" @@ -5041,7 +5055,7 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gzip-size@^5.0.0: +gzip-size@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== @@ -5210,11 +5224,6 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -6020,6 +6029,16 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.6.1: + version "10.8.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" + integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jest-changed-files@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.1.tgz#2fac3dc51297977ee883347948d8e3d37c417fba" @@ -6836,7 +6855,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.3.0, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.3.0, lodash@~4.17.10: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -7562,7 +7581,7 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -opener@^1.5.1: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -10563,11 +10582,6 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - ts-essentials@^2.0.3: version "2.0.12" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" @@ -11003,24 +11017,23 @@ webpack-assets-manifest@^3.1.1: tapable "^1.0.0" webpack-sources "^1.0.0" -webpack-bundle-analyzer@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== +webpack-bundle-analyzer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.1.0.tgz#31f9e5e187ee32fae2392b21806582cc6fe74cf9" + integrity sha512-R3oQaPn7KGJGqnOyuAbdNlH4Nm+w+gvoXQZWqYjgaMnR+vY4Ga8VD5ntfkKa00GarO7LQfOlePvtGvr254Z4Ag== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^6.2.0" + ejs "^3.1.5" + express "^4.17.1" + filesize "^6.1.0" + gzip-size "^5.1.1" + lodash "^4.17.20" + mkdirp "^1.0.4" + opener "^1.5.2" + ws "^7.3.1" webpack-cli@^3.3.12: version "3.3.12" @@ -11288,17 +11301,17 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^6.0.0, ws@^6.2.1: +ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" -ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@^7.2.3, ws@^7.3.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== xml-name-validator@^3.0.0: version "3.0.0" From bb13276e53b00a382bbc0b5299544354a9d0136b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Chauvel?= Date: Wed, 11 Nov 2020 01:18:42 +0100 Subject: [PATCH 186/422] Precise that home timeline filters also apply to lists (#15139) --- config/locales/en.yml | 2 +- config/locales/en_GB.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 047ba36ac..02368d900 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -855,7 +855,7 @@ en: filters: contexts: account: Profiles - home: Home timeline + home: Home and lists notifications: Notifications public: Public timelines thread: Conversations diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 1375ebb33..d3461474b 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -600,7 +600,7 @@ en_GB: limit: You have already featured the maximum amount of hashtags filters: contexts: - home: Home timeline + home: Home and lists notifications: Notifications public: Public timelines thread: Conversations From 5eef34b15137f7090bd553a9056e88ef474a7831 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 09:32:45 +0900 Subject: [PATCH 187/422] Bump jest from 26.6.1 to 26.6.3 (#15119) Bumps [jest](https://github.com/facebook/jest) from 26.6.1 to 26.6.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v26.6.1...v26.6.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 623 ++++++++++++++++++++++++--------------------------- 2 files changed, 288 insertions(+), 337 deletions(-) diff --git a/package.json b/package.json index 928d47a2e..e1b3206ef 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,7 @@ "eslint-plugin-jsx-a11y": "~6.4.1", "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.5", - "jest": "^26.6.1", + "jest": "^26.6.3", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", diff --git a/yarn.lock b/yarn.lock index 1d2382a9e..7f44ab834 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1134,93 +1134,93 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.1.tgz#6a19eaac4aa8687b4db9130495817c65aec3d34e" - integrity sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g== +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.1" - jest-util "^26.6.1" + jest-message-util "^26.6.2" + jest-util "^26.6.2" slash "^3.0.0" -"@jest/core@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.1.tgz#77426822f667a2cda82bf917cee11cc8ba71f9ac" - integrity sha512-p4F0pgK3rKnoS9olXXXOkbus1Bsu6fd8pcvLMPsUy4CVXZ8WSeiwQ1lK5hwkCIqJ+amZOYPd778sbPha/S8Srw== +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jest/console" "^26.6.1" - "@jest/reporters" "^26.6.1" - "@jest/test-result" "^26.6.1" - "@jest/transform" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.6.1" - jest-config "^26.6.1" - jest-haste-map "^26.6.1" - jest-message-util "^26.6.1" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.6.1" - jest-resolve-dependencies "^26.6.1" - jest-runner "^26.6.1" - jest-runtime "^26.6.1" - jest-snapshot "^26.6.1" - jest-util "^26.6.1" - jest-validate "^26.6.1" - jest-watcher "^26.6.1" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" micromatch "^4.0.2" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.1.tgz#38a56f1cc66f96bf53befcc5ebeaf1c2dce90e9a" - integrity sha512-GNvHwkOFJtNgSwdzH9flUPzF9AYAZhUg124CBoQcwcZCM9s5TLz8Y3fMtiaWt4ffbigoetjGk5PU2Dd8nLrSEw== +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.1" + jest-mock "^26.6.2" -"@jest/fake-timers@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.1.tgz#5aafba1822075b7142e702b906094bea15f51acf" - integrity sha512-T/SkMLgOquenw/nIisBRD6XAYpFir0kNuclYLkse5BpzeDUukyBr+K31xgAo9M0hgjU9ORlekAYPSzc0DKfmKg== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.6.1" - jest-mock "^26.6.1" - jest-util "^26.6.1" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/globals@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.1.tgz#b232c7611d8a2de62b4bf9eb9a007138322916f4" - integrity sha512-acxXsSguuLV/CeMYmBseefw6apO7NuXqpE+v5r3yD9ye2PY7h1nS20vY7Obk2w6S7eJO4OIAJeDnoGcLC/McEQ== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^26.6.1" - "@jest/types" "^26.6.1" - expect "^26.6.1" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jest/reporters@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.1.tgz#582ede05278cf5eeffe58bc519f4a35f54fbcb0d" - integrity sha512-J6OlXVFY3q1SXWJhjme5i7qT/BAZSikdOK2t8Ht5OS32BDo6KfG5CzIzzIFnAVd82/WWbc9Hb7SJ/jwSvVH9YA== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.1" - "@jest/test-result" "^26.6.1" - "@jest/transform" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -1231,49 +1231,49 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.6.1" - jest-resolve "^26.6.1" - jest-util "^26.6.1" - jest-worker "^26.6.1" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^6.0.1" + v8-to-istanbul "^7.0.0" optionalDependencies: node-notifier "^8.0.0" -"@jest/source-map@^26.5.0": - version "26.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.5.0.tgz#98792457c85bdd902365cd2847b58fff05d96367" - integrity sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.1.tgz#d75698d8a06aa663e8936663778c831512330cc1" - integrity sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg== +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.1": - version "26.6.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.1.tgz#34216ac2c194b0eeebde30d25424d1134703fd2e" - integrity sha512-0csqA/XApZiNeTIPYh6koIDCACSoR6hi29T61tKJMtCZdEC+tF3PoNt7MS0oK/zKC6daBgCbqXxia5ztr/NyCQ== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^26.6.1" + "@jest/test-result" "^26.6.2" graceful-fs "^4.2.4" - jest-haste-map "^26.6.1" - jest-runner "^26.6.1" - jest-runtime "^26.6.1" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^26.6.1", "@jest/transform@^26.6.2": +"@jest/transform@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== @@ -1304,7 +1304,7 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.3.0", "@jest/types@^26.6.1", "@jest/types@^26.6.2": +"@jest/types@^26.3.0", "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== @@ -2134,7 +2134,7 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.6.1, babel-jest@^26.6.3: +babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== @@ -2821,10 +2821,10 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== -cjs-module-lexer@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.4.3.tgz#9e31f7fe701f5fcee5793f77ab4e58fa8dcde8bc" - integrity sha512-5RLK0Qfs0PNDpEyBXIr3bIT1Muw3ojSlvpw6dAmkUcO0+uTrsBn7GuEIgx40u+OzbCBLDta7nvmud85P4EmTsQ== +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== class-utils@^0.3.5: version "0.3.6" @@ -3659,10 +3659,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" - integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diffie-hellman@^5.0.0: version "5.0.3" @@ -4430,16 +4430,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.1.tgz#e1e053cdc43b21a452b36fc7cc9401e4603949c1" - integrity sha512-BRfxIBHagghMmr1D2MRY0Qv5d3Nc8HCqgbDwNXw/9izmM5eBb42a2YjLKSbsqle76ozGkAEPELQX4IdNHAKRNA== +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" ansi-styles "^4.0.0" jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.1" - jest-message-util "^26.6.1" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" express@^4.17.1: @@ -6039,57 +6039,57 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.1.tgz#2fac3dc51297977ee883347948d8e3d37c417fba" - integrity sha512-NhSdZ5F6b/rIN5V46x1l31vrmukD/bJUXgYAY8VtP1SknYdJwjYDRxuLt7Z8QryIdqCjMIn2C0Cd98EZ4umo8Q== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.1.tgz#8952242fa812c05bd129abf7c022424045b7fd67" - integrity sha512-aPLoEjlwFrCWhiPpW5NUxQA1X1kWsAnQcQ0SO/fHsCvczL3W75iVAcH9kP6NN+BNqZcHNEvkhxT5cDmBfEAh+w== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^26.6.1" - "@jest/test-result" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.6.1" - jest-util "^26.6.1" - jest-validate "^26.6.1" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" yargs "^15.4.1" -jest-config@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.1.tgz#8c343fbdd9c24ad003e261f73583c3c020f32b42" - integrity sha512-mtJzIynIwW1d1nMlKCNCQiSgWaqFn8cH/fOSNY97xG7Y9tBCZbCSuW2GTX0RPmceSJGO7l27JgwC18LEg0Vg+g== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.1" - "@jest/types" "^26.6.1" - babel-jest "^26.6.1" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.1" - jest-environment-node "^26.6.1" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.1" + jest-jasmine2 "^26.6.3" jest-regex-util "^26.0.0" - jest-resolve "^26.6.1" - jest-util "^26.6.1" - jest-validate "^26.6.1" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" micromatch "^4.0.2" - pretty-format "^26.6.1" + pretty-format "^26.6.2" jest-diff@^25.2.1: version "25.5.0" @@ -6101,15 +6101,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.1.tgz#38aa194979f454619bb39bdee299fb64ede5300c" - integrity sha512-BBNy/zin2m4kG5In126O8chOBxLLS/XMTuuM2+YhgyHk87ewPzKTuTJcqj3lOWOi03NNgrl+DkMeV/exdvG9gg== +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: chalk "^4.0.0" - diff-sequences "^26.5.0" + diff-sequences "^26.6.2" jest-get-type "^26.3.0" - pretty-format "^26.6.1" + pretty-format "^26.6.2" jest-docblock@^26.0.0: version "26.0.0" @@ -6118,41 +6118,41 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.1.tgz#e968e88309a3e2ae9648634af8f89d8ee5acfddd" - integrity sha512-gSn8eB3buchuq45SU7pLB7qmCGax1ZSxfaWuEFblCyNMtyokYaKFh9dRhYPujK6xYL57dLIPhLKatjmB5XWzGA== +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" chalk "^4.0.0" jest-get-type "^26.3.0" - jest-util "^26.6.1" - pretty-format "^26.6.1" + jest-util "^26.6.2" + pretty-format "^26.6.2" -jest-environment-jsdom@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.1.tgz#63093bf89daee6139616568a43633b84cf7aac21" - integrity sha512-A17RiXuHYNVlkM+3QNcQ6n5EZyAc6eld8ra9TW26luounGWpku4tj03uqRgHJCI1d4uHr5rJiuCH5JFRtdmrcA== +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== dependencies: - "@jest/environment" "^26.6.1" - "@jest/fake-timers" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.1" - jest-util "^26.6.1" + jest-mock "^26.6.2" + jest-util "^26.6.2" jsdom "^16.4.0" -jest-environment-node@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.1.tgz#4d73d8b33c26989a92a0ed3ad0bfd6f7a196d9bd" - integrity sha512-YffaCp6h0j1kbcf1NVZ7umC6CPgD67YS+G1BeornfuSkx5s3xdhuwG0DCxSiHPXyT81FfJzA1L7nXvhq50OWIg== +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== dependencies: - "@jest/environment" "^26.6.1" - "@jest/fake-timers" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.1" - jest-util "^26.6.1" + jest-mock "^26.6.2" + jest-util "^26.6.2" jest-get-type@^25.2.6: version "25.2.6" @@ -6164,27 +6164,6 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.1.tgz#97e96f5fd7576d980307fbe6160b10c016b543d4" - integrity sha512-9kPafkv0nX6ta1PrshnkiyhhoQoFWncrU/uUBt3/AP1r78WSCU5iLceYRTwDvJl67H3RrXqSlSVDDa/AsUB7OQ== - dependencies: - "@jest/types" "^26.6.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.5.0" - jest-util "^26.6.1" - jest-worker "^26.6.1" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -6206,68 +6185,69 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.1.tgz#11c92603d1fa97e3c33404359e69d6cec7e57017" - integrity sha512-2uYdT32o/ZzSxYAPduAgokO8OlAL1YdG/9oxcEY138EDNpIK5XRRJDaGzTZdIBWSxk0aR8XxN44FvfXtHB+Fiw== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.1" - "@jest/source-map" "^26.5.0" - "@jest/test-result" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.6.1" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^26.6.1" - jest-matcher-utils "^26.6.1" - jest-message-util "^26.6.1" - jest-runtime "^26.6.1" - jest-snapshot "^26.6.1" - jest-util "^26.6.1" - pretty-format "^26.6.1" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" throat "^5.0.0" -jest-leak-detector@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.1.tgz#f63e46dc4e3aa30d29b40ae49966a15730d25bbe" - integrity sha512-j9ZOtJSJKlHjrs4aIxWjiQUjyrffPdiAQn2Iw0916w7qZE5Lk0T2KhIH6E9vfhzP6sw0Q0jtnLLb4vQ71o1HlA== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: jest-get-type "^26.3.0" - pretty-format "^26.6.1" + pretty-format "^26.6.2" -jest-matcher-utils@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.1.tgz#bc90822d352c91c2ec1814731327691d06598400" - integrity sha512-9iu3zrsYlUnl8pByhREF9rr5eYoiEb1F7ymNKg6lJr/0qD37LWS5FSW/JcoDl8UdMX2+zAzabDs7sTO+QFKjCg== +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: chalk "^4.0.0" - jest-diff "^26.6.1" + jest-diff "^26.6.2" jest-get-type "^26.3.0" - pretty-format "^26.6.1" + pretty-format "^26.6.2" -jest-message-util@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.1.tgz#d62c20c0fe7be10bfd6020b675abb9b5fa933ff3" - integrity sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" + pretty-format "^26.6.2" slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.1.tgz#6c12a92a82fc833f81a5b6de6b67d78386e276a3" - integrity sha512-my0lPTBu1awY8iVG62sB2sx9qf8zxNDVX+5aFgoB8Vbqjb6LqIOsfyFA8P1z6H2IsqMbvOX9oCJnK67Y3yUIMA== +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6280,96 +6260,88 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.1.tgz#e9d091a159ad198c029279737a8b4c507791d75c" - integrity sha512-MN6lufbZJ3RBfTnJesZtHu3hUCBqPdHRe2+FhIt0yiqJ3fMgzWRqMRQyN/d/QwOE7KXwAG2ekZutbPhuD7s51A== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" jest-regex-util "^26.0.0" - jest-snapshot "^26.6.1" + jest-snapshot "^26.6.2" -jest-resolve@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.1.tgz#e9a9130cc069620d5aeeb87043dd9e130b68c6a1" - integrity sha512-hiHfQH6rrcpAmw9xCQ0vD66SDuU+7ZulOuKwc4jpbmFFsz0bQG/Ib92K+9/489u5rVw0btr/ZhiHqBpmkbCvuQ== +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" chalk "^4.0.0" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.1" + jest-util "^26.6.2" read-pkg-up "^7.0.1" resolve "^1.18.1" slash "^3.0.0" -jest-runner@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.1.tgz#a945971b5a23740c1fe20e372a38de668b7c76bf" - integrity sha512-DmpNGdgsbl5s0FGkmsInmqnmqCtliCSnjWA2TFAJS1m1mL5atwfPsf+uoZ8uYQ2X0uDj4NM+nPcDnUpbNTRMBA== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^26.6.1" - "@jest/environment" "^26.6.1" - "@jest/test-result" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.6.1" + jest-config "^26.6.3" jest-docblock "^26.0.0" - jest-haste-map "^26.6.1" - jest-leak-detector "^26.6.1" - jest-message-util "^26.6.1" - jest-resolve "^26.6.1" - jest-runtime "^26.6.1" - jest-util "^26.6.1" - jest-worker "^26.6.1" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.1.tgz#9a131e7b4f0bc6beefd62e7443f757c1d5fa9dec" - integrity sha512-7uOCNeezXDWgjEyzYbRN2ViY7xNZzusNVGAMmU0UHRUNXuY4j4GBHKGMqPo/cBPZA9bSYp+lwK2DRRBU5Dv6YQ== - dependencies: - "@jest/console" "^26.6.1" - "@jest/environment" "^26.6.1" - "@jest/fake-timers" "^26.6.1" - "@jest/globals" "^26.6.1" - "@jest/source-map" "^26.5.0" - "@jest/test-result" "^26.6.1" - "@jest/transform" "^26.6.1" - "@jest/types" "^26.6.1" +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" chalk "^4.0.0" - cjs-module-lexer "^0.4.2" + cjs-module-lexer "^0.6.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.6.1" - jest-haste-map "^26.6.1" - jest-message-util "^26.6.1" - jest-mock "^26.6.1" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.6.1" - jest-snapshot "^26.6.1" - jest-util "^26.6.1" - jest-validate "^26.6.1" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.4.1" -jest-serializer@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.5.0.tgz#f5425cc4c5f6b4b355f854b5f0f23ec6b962bc13" - integrity sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - jest-serializer@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" @@ -6378,40 +6350,28 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.1.tgz#469e9d0b749496aea7dad0d7e5e5c88b91cdb4cc" - integrity sha512-JA7bZp7HRTIJYAi85pJ/OZ2eur2dqmwIToA5/6d7Mn90isGEfeF9FvuhDLLEczgKP1ihreBzrJ6Vr7zteP5JNA== +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.6.1" + expect "^26.6.2" graceful-fs "^4.2.4" - jest-diff "^26.6.1" + jest-diff "^26.6.2" jest-get-type "^26.3.0" - jest-haste-map "^26.6.1" - jest-matcher-utils "^26.6.1" - jest-message-util "^26.6.1" - jest-resolve "^26.6.1" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^26.6.1" + pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.1.tgz#4cc0d09ec57f28d12d053887eec5dc976a352e9b" - integrity sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA== - dependencies: - "@jest/types" "^26.6.1" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -6424,29 +6384,29 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.1.tgz#28730eb8570d60968d9d06f1a8c94d922167bd2a" - integrity sha512-BEFpGbylKocnNPZULcnk+TGaz1oFZQH/wcaXlaXABbu0zBwkOGczuWgdLucUouuQqn7VadHZZeTvo8VSFDLMOA== +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" camelcase "^6.0.0" chalk "^4.0.0" jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.6.1" + pretty-format "^26.6.2" -jest-watcher@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.1.tgz#debfa34e9c5c3e735593403794fe53d2955bfabc" - integrity sha512-0LBIPPncNi9CaLKK15bnxyd2E8OMl4kJg0PTiNOI+MXztXw1zVdtX/x9Pr6pXaQYps+eS/ts43O4+HByZ7yJSw== +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^26.6.1" - "@jest/types" "^26.6.1" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.1" + jest-util "^26.6.2" string-length "^4.0.1" jest-worker@^26.5.0: @@ -6458,15 +6418,6 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" - integrity sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -6476,14 +6427,14 @@ jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.1.tgz#821e8280d2bdeeed40ac7bc43941dceff0f1b650" - integrity sha512-f+ahfqw3Ffy+9vA7sWFGpTmhtKEMsNAZiWBVXDkrpIO73zIz22iimjirnV78kh/eWlylmvLh/0WxHN6fZraZdA== +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - "@jest/core" "^26.6.1" + "@jest/core" "^26.6.3" import-local "^3.0.2" - jest-cli "^26.6.1" + jest-cli "^26.6.3" js-base64@^2.1.9: version "2.6.4" @@ -8452,12 +8403,12 @@ pretty-format@^26.4.2: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.1.tgz#af9a2f63493a856acddeeb11ba6bcf61989660a8" - integrity sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA== +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^26.6.1" + "@jest/types" "^26.6.2" ansi-regex "^5.0.0" ansi-styles "^4.0.0" react-is "^17.0.1" @@ -10883,10 +10834,10 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz#7ef0e32faa10f841fe4c1b0f8de96ed067c0be1e" - integrity sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w== +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From 7be82d9fe96e033b323fde4becc13de695885753 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 09:33:29 +0900 Subject: [PATCH 188/422] Bump @babel/runtime from 7.12.1 to 7.12.5 (#15126) Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.12.1 to 7.12.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.12.5/packages/babel-runtime) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e1b3206ef..0b6cfef3e 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", - "@babel/runtime": "^7.12.1", + "@babel/runtime": "^7.12.5", "@clusterws/cws": "^3.0.0", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", diff --git a/yarn.lock b/yarn.lock index 7f44ab834..1c945839e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -940,10 +940,10 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" - integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" From 9e9560a1b8f525a610ca6f8b33081182f8e6588d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 09:36:16 +0900 Subject: [PATCH 189/422] Bump @testing-library/react from 11.1.0 to 11.1.1 (#15124) Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 11.1.0 to 11.1.1. - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/master/CHANGELOG.md) - [Commits](https://github.com/testing-library/react-testing-library/compare/v11.1.0...v11.1.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 0b6cfef3e..4a7215ab0 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ }, "devDependencies": { "@testing-library/jest-dom": "^5.11.5", - "@testing-library/react": "^11.1.0", + "@testing-library/react": "^11.1.1", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", "eslint": "^7.13.0", diff --git a/yarn.lock b/yarn.lock index 1c945839e..b751a6337 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1341,10 +1341,10 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.26.0.tgz#da4d052dc426a4ccc916303369c6e7552126f680" - integrity sha512-fyKFrBbS1IigaE3FV21LyeC7kSGF84lqTlSYdKmGaHuK2eYQ/bXVPM5vAa2wx/AU1iPD6oQHsxy2QQ17q9AMCg== +"@testing-library/dom@^7.26.4": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.26.5.tgz#804a74fc893bf6da1a7970dbca7b94c2bbfe983d" + integrity sha512-2v/fv0s4keQjJIcD4bjfJMFtvxz5icartxUWdIZVNJR539WD9oxVrvIAPw+3Ydg4RLgxt0rvQx3L9cAjCci0Kg== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.10.3" @@ -1369,13 +1369,13 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^11.1.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.1.0.tgz#dfb4b3177d05a8ccf156b5fd14a5550e91d7ebe4" - integrity sha512-Nfz58jGzW0tgg3irmTB7sa02JLkLnCk+QN3XG6WiaGQYb0Qc4Ok00aujgjdxlIQWZHbb4Zj5ZOIeE9yKFSs4sA== +"@testing-library/react@^11.1.1": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.1.1.tgz#226d8dc7491b702fcaac2d7d88d42892e655893a" + integrity sha512-DT/P2opE9o4NWCd/oIL73b6VF/Xk9AY8iYSstKfz9cXw0XYPQ5IhA/cuYfoN9nU+mAynW8DpAVfEWdM6e7zF6g== dependencies: - "@babel/runtime" "^7.11.2" - "@testing-library/dom" "^7.26.0" + "@babel/runtime" "^7.12.1" + "@testing-library/dom" "^7.26.4" "@types/aria-query@^4.2.0": version "4.2.0" From 462fb5451dcaa9113da8d5f873113ef6baab28ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 09:37:45 +0900 Subject: [PATCH 190/422] Bump sass from 1.28.0 to 1.29.0 (#15128) Bumps [sass](https://github.com/sass/dart-sass) from 1.28.0 to 1.29.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.28.0...1.29.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4a7215ab0..2375a9ecd 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.28.0", + "sass": "^1.29.0", "sass-loader": "^10.0.5", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index b751a6337..d625b2dfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9436,10 +9436,10 @@ sass-loader@^10.0.5: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.28.0: - version "1.28.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.28.0.tgz#546f1308ff74cc4ec2ad735fd35dc18bc3f51f72" - integrity sha512-9FWX/0wuE1KxwfiP02chZhHaPzu6adpx9+wGch7WMOuHy5npOo0UapRI3FNSHva2CczaYJu2yNUBN8cCSqHz/A== +sass@^1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.29.0.tgz#ec4e1842c146d8ea9258c28c141b8c2b7c6ab7f1" + integrity sha512-ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA== dependencies: chokidar ">=2.0.0 <4.0.0" From f1858f08c2422ad63f1e6acb1670fcf35e3f8d7d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 11 Nov 2020 05:36:22 +0100 Subject: [PATCH 191/422] Remove auto-redirect to direct messages in web UI (#15142) --- app/javascript/mastodon/actions/compose.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 030922520..891403969 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -152,9 +152,7 @@ export function submitCompose(routerHistory) { 'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']), }, }).then(function (response) { - if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0 && routerHistory) { - routerHistory.push('/timelines/direct'); - } else if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { + if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { routerHistory.goBack(); } From 4790a126bebddd83cbaf1a8436611536dcc417a0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 11 Nov 2020 05:36:29 +0100 Subject: [PATCH 192/422] Add button to dismiss desktop notifications permissions banner (#15141) --- .../mastodon/actions/notifications.js | 9 ++++++-- .../notifications_permission_banner.js | 23 ++++++++++++++++--- .../picture_in_picture/components/header.js | 11 +++++++-- .../mastodon/reducers/notifications.js | 3 +++ .../styles/mastodon/components.scss | 7 ++++++ 5 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index c4fa66428..d40b65745 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -37,8 +37,9 @@ export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; -export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; -export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; +export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; +export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; +export const NOTIFICATIONS_DISMISS_BROWSER_PERMISSION = 'NOTIFICATIONS_DISMISS_BROWSER_PERMISSION'; defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, @@ -283,3 +284,7 @@ export function setBrowserPermission (value) { value, }; } + +export const dismissBrowserPermission = () => ({ + type: NOTIFICATIONS_DISMISS_BROWSER_PERMISSION, +}); diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js index 766c9bb5b..6daf75814 100644 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js @@ -1,25 +1,42 @@ import React from 'react'; import Icon from 'mastodon/components/icon'; import Button from 'mastodon/components/button'; -import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import IconButton from 'mastodon/components/icon_button'; +import { requestBrowserPermission, dismissBrowserPermission } from 'mastodon/actions/notifications'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -export default @connect(() => {}) +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +export default @connect() +@injectIntl class NotificationsPermissionBanner extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; handleClick = () => { this.props.dispatch(requestBrowserPermission()); } + handleClose = () => { + this.props.dispatch(dismissBrowserPermission()); + } + render () { + const { intl } = this.props; + return (
+
+ +
+

}} />

diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.js b/app/javascript/mastodon/features/picture_in_picture/components/header.js index 4cb6de1a4..7dd199b75 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/header.js +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.js @@ -7,12 +7,18 @@ import IconButton from 'mastodon/components/icon_button'; import { Link } from 'react-router-dom'; import Avatar from 'mastodon/components/avatar'; import DisplayName from 'mastodon/components/display_name'; +import { defineMessages, injectIntl } from 'react-intl'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); const mapStateToProps = (state, { accountId }) => ({ account: state.getIn(['accounts', accountId]), }); export default @connect(mapStateToProps) +@injectIntl class Header extends ImmutablePureComponent { static propTypes = { @@ -20,10 +26,11 @@ class Header extends ImmutablePureComponent { statusId: PropTypes.string.isRequired, account: ImmutablePropTypes.map.isRequired, onClose: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; render () { - const { account, statusId, onClose } = this.props; + const { account, statusId, onClose, intl } = this.props; return (
@@ -32,7 +39,7 @@ class Header extends ImmutablePureComponent { - +
); } diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 1d4874717..46a9d5376 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -12,6 +12,7 @@ import { NOTIFICATIONS_MARK_AS_READ, NOTIFICATIONS_SET_BROWSER_SUPPORT, NOTIFICATIONS_SET_BROWSER_PERMISSION, + NOTIFICATIONS_DISMISS_BROWSER_PERMISSION, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, @@ -250,6 +251,8 @@ export default function notifications(state = initialState, action) { return state.set('browserSupport', action.value); case NOTIFICATIONS_SET_BROWSER_PERMISSION: return state.set('browserPermission', action.value); + case NOTIFICATIONS_DISMISS_BROWSER_PERMISSION: + return state.set('browserPermission', 'denied'); default: return state; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 9cbd7505c..056ea3dd2 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7204,6 +7204,13 @@ noscript { flex-direction: column; align-items: center; justify-content: center; + position: relative; + + &__close { + position: absolute; + top: 10px; + right: 10px; + } h2 { font-size: 16px; From 2b1a6e734ff42c17fb971cf909509b6b2ad84879 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Fri, 13 Nov 2020 00:58:00 +0900 Subject: [PATCH 193/422] Add follow selected followers button (#15148) * Add follow selected followers button * Fix unused variable * Fix i18n normalize --- app/controllers/relationships_controller.rb | 4 +++- app/models/form/account_batch.rb | 8 ++++++++ app/views/relationships/show.html.haml | 2 ++ config/locales/en.yml | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index 0835758f2..031e3241f 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -49,7 +49,9 @@ class RelationshipsController < ApplicationController end def action_from_button - if params[:unfollow] + if params[:follow] + 'follow' + elsif params[:unfollow] 'unfollow' elsif params[:remove_from_followers] 'remove_from_followers' diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 7b9e40f68..882770d7c 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -9,6 +9,8 @@ class Form::AccountBatch def save case action + when 'follow' + follow! when 'unfollow' unfollow! when 'remove_from_followers' @@ -24,6 +26,12 @@ class Form::AccountBatch private + def follow! + accounts.find_each do |target_account| + FollowService.new.call(current_account, target_account) + end + end + def unfollow! accounts.find_each do |target_account| UnfollowService.new.call(current_account, target_account) diff --git a/app/views/relationships/show.html.haml b/app/views/relationships/show.html.haml index 4b1e4fd63..c82e639e0 100644 --- a/app/views/relationships/show.html.haml +++ b/app/views/relationships/show.html.haml @@ -42,6 +42,8 @@ %label.batch-table__toolbar__select.batch-checkbox-all = check_box_tag :batch_checkbox_all, nil, false .batch-table__toolbar__actions + = f.button safe_join([fa_icon('user-plus'), t('relationships.follow_selected_followers')]), name: :follow, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } if followed_by_relationship? && !mutual_relationship? + = f.button safe_join([fa_icon('user-times'), t('relationships.remove_selected_follows')]), name: :unfollow, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } unless followed_by_relationship? = f.button safe_join([fa_icon('trash'), t('relationships.remove_selected_followers')]), name: :remove_from_followers, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } unless following_relationship? diff --git a/config/locales/en.yml b/config/locales/en.yml index 02368d900..bec099082 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1075,6 +1075,7 @@ en: relationships: activity: Account activity dormant: Dormant + follow_selected_followers: Follow selected followers followers: Followers following: Following invited: Invited From 148ce97e21092500a2abeb87f6dc3c0adf5f28e4 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Fri, 13 Nov 2020 01:43:12 +0900 Subject: [PATCH 194/422] Add interrelationship icon (#15149) * Add interrelationship icon * Fix arrow for rtl * Fix to predefined color --- app/controllers/relationships_controller.rb | 5 +++++ app/helpers/application_helper.rb | 10 ++++++++++ app/javascript/styles/mastodon/variables.scss | 2 ++ app/javascript/styles/mastodon/widgets.scss | 20 +++++++++++++++++++ app/views/relationships/_account.html.haml | 2 ++ 5 files changed, 39 insertions(+) diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index 031e3241f..96cce55e9 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -5,6 +5,7 @@ class RelationshipsController < ApplicationController before_action :authenticate_user! before_action :set_accounts, only: :show + before_action :set_relationships, only: :show before_action :set_body_classes helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship? @@ -28,6 +29,10 @@ class RelationshipsController < ApplicationController @accounts = RelationshipFilter.new(current_account, filter_params).results.page(params[:page]).per(40) end + def set_relationships + @relationships = AccountRelationshipsPresenter.new(@accounts.pluck(:id), current_user.account_id) + end + def form_account_batch_params params.require(:form_account_batch).permit(:action, account_ids: []) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5512a9543..8914b015c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -89,6 +89,16 @@ module ApplicationHelper end end + def interrelationships_icon(relationships, account_id) + if relationships.following[account_id] && relationships.followed_by[account_id] + fa_icon('exchange', title: I18n.t('relationships.mutual'), class: 'fa-fw active passive') + elsif relationships.following[account_id] + fa_icon(locale_direction == 'ltr' ? 'arrow-right' : 'arrow-left', title: I18n.t('relationships.following'), class: 'fa-fw active') + elsif relationships.followed_by[account_id] + fa_icon(locale_direction == 'ltr' ? 'arrow-left' : 'arrow-right', title: I18n.t('relationships.followers'), class: 'fa-fw passive') + end + end + def custom_emoji_tag(custom_emoji, animate = true) if animate image_tag(custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:") diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 8602c3dde..f463419c8 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -36,6 +36,8 @@ $dark-text-color: $ui-base-lighter-color !default; $secondary-text-color: $ui-secondary-color !default; $highlight-text-color: $ui-highlight-color !default; $action-button-color: $ui-base-lighter-color !default; +$passive-text-color: $gold-star !default; +$active-passive-text-color: $success-green !default; // For texts on inverted backgrounds $inverted-text-color: $ui-base-color !default; $lighter-text-color: $ui-base-lighter-color !default; diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index 47e02d41d..5ee4d104b 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -446,6 +446,26 @@ vertical-align: initial !important; } + &__interrelationships { + width: 21px; + } + + .fa { + font-size: 16px; + + &.active { + color: $highlight-text-color; + } + + &.passive { + color: $passive-text-color; + } + + &.active.passive { + color: $active-passive-text-color; + } + } + @media screen and (max-width: $no-gap-breakpoint) { tbody td.optional { display: none; diff --git a/app/views/relationships/_account.html.haml b/app/views/relationships/_account.html.haml index af5a4aaf7..f521aff22 100644 --- a/app/views/relationships/_account.html.haml +++ b/app/views/relationships/_account.html.haml @@ -5,6 +5,8 @@ %table.accounts-table %tbody %tr + %td.accounts-table__interrelationships + = interrelationships_icon(@relationships, account.id) %td= account_link_to account %td.accounts-table__count.optional = number_to_human account.statuses_count, strip_insignificant_zeros: true From 9870b175b477bbc984fc7945f1ebe07e3f2b0053 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 12 Nov 2020 18:35:23 +0100 Subject: [PATCH 195/422] Fix possible inconsistencies in tag search (#14906) Do not downcase the queried tag before passing it to postgres when searching: - tags are not downcased on creation - `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway - if Postgres and Rails happen to use different case-folding rules, downcasing before query but not before insertion may mean that some tags with some casings are not searchable --- app/models/tag.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/tag.rb b/app/models/tag.rb index df2f86d95..bb93a52e2 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -126,7 +126,7 @@ class Tag < ApplicationRecord end def search_for(term, limit = 5, offset = 0, options = {}) - normalized_term = normalize(term.strip).mb_chars.downcase.to_s + normalized_term = normalize(term.strip) pattern = sanitize_sql_like(normalized_term) + '%' query = Tag.listable.where(arel_table[:name].lower.matches(pattern)) query = query.where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil))) if options[:exclude_unreviewed] From 8532429af749339a3ff6af4130de3743cd8d1c68 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 12 Nov 2020 23:05:01 +0100 Subject: [PATCH 196/422] Fix 2FA/sign-in token sessions being valid after password change (#14802) If someone tries logging in to an account and is prompted for a 2FA code or sign-in token, even if the account's password or e-mail is updated in the meantime, the session will show the prompt and allow the login process to complete with a valid 2FA code or sign-in token --- app/controllers/api/base_controller.rb | 2 +- app/controllers/auth/sessions_controller.rb | 22 ++++++++++++- .../sign_in_token_authentication_concern.rb | 16 ++++++---- .../two_factor_authentication_concern.rb | 32 +++++++++++-------- .../concerns/user_tracking_concern.rb | 7 ++-- app/models/user.rb | 25 +++++++++++---- .../auth/sessions_controller_spec.rb | 14 ++++---- 7 files changed, 78 insertions(+), 40 deletions(-) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index e962c4e97..fe199e689 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -103,7 +103,7 @@ class Api::BaseController < ApplicationController elsif !current_user.functional? render json: { error: 'Your login is currently disabled' }, status: 403 else - set_user_activity + update_user_sign_in end end diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index c1ea702ad..13d158c67 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -7,6 +7,7 @@ class Auth::SessionsController < Devise::SessionsController skip_before_action :require_no_authentication, only: [:create] skip_before_action :require_functional! + skip_before_action :update_user_sign_in include TwoFactorAuthenticationConcern include SignInTokenAuthenticationConcern @@ -24,6 +25,7 @@ class Auth::SessionsController < Devise::SessionsController def create super do |resource| + resource.update_sign_in!(request, new_sign_in: true) remember_me(resource) flash.delete(:notice) end @@ -57,7 +59,7 @@ class Auth::SessionsController < Devise::SessionsController def find_user if session[:attempt_user_id] - User.find(session[:attempt_user_id]) + User.find_by(id: session[:attempt_user_id]) else user = User.authenticate_with_ldap(user_params) if Devise.ldap_authentication user ||= User.authenticate_with_pam(user_params) if Devise.pam_authentication @@ -90,6 +92,7 @@ class Auth::SessionsController < Devise::SessionsController def require_no_authentication super + # Delete flash message that isn't entirely useful and may be confusing in # most cases because /web doesn't display/clear flash messages. flash.delete(:alert) if flash[:alert] == I18n.t('devise.failure.already_authenticated') @@ -107,13 +110,30 @@ class Auth::SessionsController < Devise::SessionsController def home_paths(resource) paths = [about_path] + if single_user_mode? && resource.is_a?(User) paths << short_account_path(username: resource.account) end + paths end def continue_after? truthy_param?(:continue) end + + def restart_session + clear_attempt_from_session + redirect_to new_user_session_path, alert: I18n.t('devise.failure.timeout') + end + + def set_attempt_session(user) + session[:attempt_user_id] = user.id + session[:attempt_user_updated_at] = user.updated_at.to_s + end + + def clear_attempt_from_session + session.delete(:attempt_user_id) + session.delete(:attempt_user_updated_at) + end end diff --git a/app/controllers/concerns/sign_in_token_authentication_concern.rb b/app/controllers/concerns/sign_in_token_authentication_concern.rb index 91f813acc..3c95a4afd 100644 --- a/app/controllers/concerns/sign_in_token_authentication_concern.rb +++ b/app/controllers/concerns/sign_in_token_authentication_concern.rb @@ -18,7 +18,9 @@ module SignInTokenAuthenticationConcern def authenticate_with_sign_in_token user = self.resource = find_user - if user_params[:sign_in_token_attempt].present? && session[:attempt_user_id] + if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s + restart_session + elsif user_params.key?(:sign_in_token_attempt) && session[:attempt_user_id] authenticate_with_sign_in_token_attempt(user) elsif user.present? && user.external_or_valid_password?(user_params[:password]) prompt_for_sign_in_token(user) @@ -27,7 +29,7 @@ module SignInTokenAuthenticationConcern def authenticate_with_sign_in_token_attempt(user) if valid_sign_in_token_attempt?(user) - session.delete(:attempt_user_id) + clear_attempt_from_session remember_me(user) sign_in(user) else @@ -42,10 +44,10 @@ module SignInTokenAuthenticationConcern UserMailer.sign_in_token(user, request.remote_ip, request.user_agent, Time.now.utc.to_s).deliver_later! end - set_locale do - session[:attempt_user_id] = user.id - @body_classes = 'lighter' - render :sign_in_token - end + set_attempt_session(user) + + @body_classes = 'lighter' + + set_locale { render :sign_in_token } end end diff --git a/app/controllers/concerns/two_factor_authentication_concern.rb b/app/controllers/concerns/two_factor_authentication_concern.rb index 8a2a86a02..4d4ccf49c 100644 --- a/app/controllers/concerns/two_factor_authentication_concern.rb +++ b/app/controllers/concerns/two_factor_authentication_concern.rb @@ -37,9 +37,11 @@ module TwoFactorAuthenticationConcern def authenticate_with_two_factor user = self.resource = find_user - if user.webauthn_enabled? && user_params[:credential].present? && session[:attempt_user_id] + if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s + restart_session + elsif user.webauthn_enabled? && user_params.key?(:credential) && session[:attempt_user_id] authenticate_with_two_factor_via_webauthn(user) - elsif user_params[:otp_attempt].present? && session[:attempt_user_id] + elsif user_params.key?(:otp_attempt) && session[:attempt_user_id] authenticate_with_two_factor_via_otp(user) elsif user.present? && user.external_or_valid_password?(user_params[:password]) prompt_for_two_factor(user) @@ -50,7 +52,7 @@ module TwoFactorAuthenticationConcern webauthn_credential = WebAuthn::Credential.from_get(user_params[:credential]) if valid_webauthn_credential?(user, webauthn_credential) - session.delete(:attempt_user_id) + clear_attempt_from_session remember_me(user) sign_in(user) render json: { redirect_path: root_path }, status: :ok @@ -61,7 +63,7 @@ module TwoFactorAuthenticationConcern def authenticate_with_two_factor_via_otp(user) if valid_otp_attempt?(user) - session.delete(:attempt_user_id) + clear_attempt_from_session remember_me(user) sign_in(user) else @@ -71,16 +73,18 @@ module TwoFactorAuthenticationConcern end def prompt_for_two_factor(user) - set_locale do - session[:attempt_user_id] = user.id - @body_classes = 'lighter' - @webauthn_enabled = user.webauthn_enabled? - @scheme_type = if user.webauthn_enabled? && user_params[:otp_attempt].blank? - 'webauthn' - else - 'totp' - end - render :two_factor + set_attempt_session(user) + + @body_classes = 'lighter' + @webauthn_enabled = user.webauthn_enabled? + @scheme_type = begin + if user.webauthn_enabled? && user_params[:otp_attempt].blank? + 'webauthn' + else + 'totp' + end end + + set_locale { render :two_factor } end end diff --git a/app/controllers/concerns/user_tracking_concern.rb b/app/controllers/concerns/user_tracking_concern.rb index be10705fc..efda37fae 100644 --- a/app/controllers/concerns/user_tracking_concern.rb +++ b/app/controllers/concerns/user_tracking_concern.rb @@ -6,14 +6,13 @@ module UserTrackingConcern UPDATE_SIGN_IN_HOURS = 24 included do - before_action :set_user_activity + before_action :update_user_sign_in end private - def set_user_activity - return unless user_needs_sign_in_update? - current_user.update_tracked_fields!(request) + def update_user_sign_in + current_user.update_sign_in!(request) if user_needs_sign_in_update? end def user_needs_sign_in_update? diff --git a/app/models/user.rb b/app/models/user.rb index 7c8124fed..94fee999a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -63,7 +63,7 @@ class User < ApplicationRecord devise :two_factor_backupable, otp_number_of_backup_codes: 10 - devise :registerable, :recoverable, :rememberable, :trackable, :validatable, + devise :registerable, :recoverable, :rememberable, :validatable, :confirmable include Omniauthable @@ -165,6 +165,24 @@ class User < ApplicationRecord prepare_new_user! if new_user && approved? end + def update_sign_in!(request, new_sign_in: false) + old_current, new_current = current_sign_in_at, Time.now.utc + self.last_sign_in_at = old_current || new_current + self.current_sign_in_at = new_current + + old_current, new_current = current_sign_in_ip, request.remote_ip + self.last_sign_in_ip = old_current || new_current + self.current_sign_in_ip = new_current + + if new_sign_in + self.sign_in_count ||= 0 + self.sign_in_count += 1 + end + + save(validate: false) unless new_record? + prepare_returning_user! + end + def pending? !approved? end @@ -196,11 +214,6 @@ class User < ApplicationRecord prepare_new_user! end - def update_tracked_fields!(request) - super - prepare_returning_user! - end - def otp_enabled? otp_required_for_login end diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 8ad9e74fc..d3a9a11eb 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -219,7 +219,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'using a valid OTP' do before do - post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id } + post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'redirects to home' do @@ -234,7 +234,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'when the server has an decryption error' do before do allow_any_instance_of(User).to receive(:validate_and_consume_otp!).and_raise(OpenSSL::Cipher::CipherError) - post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id } + post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'shows a login error' do @@ -248,7 +248,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'using a valid recovery code' do before do - post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id } + post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'redirects to home' do @@ -262,7 +262,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'using an invalid OTP' do before do - post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id } + post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'shows a login error' do @@ -334,7 +334,7 @@ RSpec.describe Auth::SessionsController, type: :controller do before do @controller.session[:webauthn_challenge] = challenge - post :create, params: { user: { credential: fake_credential } }, session: { attempt_user_id: user.id } + post :create, params: { user: { credential: fake_credential } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'instructs the browser to redirect to home' do @@ -383,7 +383,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'using a valid sign in token' do before do user.generate_sign_in_token && user.save - post :create, params: { user: { sign_in_token_attempt: user.sign_in_token } }, session: { attempt_user_id: user.id } + post :create, params: { user: { sign_in_token_attempt: user.sign_in_token } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'redirects to home' do @@ -397,7 +397,7 @@ RSpec.describe Auth::SessionsController, type: :controller do context 'using an invalid sign in token' do before do - post :create, params: { user: { sign_in_token_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id } + post :create, params: { user: { sign_in_token_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } end it 'shows a login error' do From aa10200e58ccb340b6384532ccdba6b7fbac037a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 12 Nov 2020 23:05:24 +0100 Subject: [PATCH 197/422] Fix streaming API allowing connections to persist after access token invalidation (#15111) Fix #14816 --- app/lib/access_token_extension.rb | 17 +++++++ app/models/session_activation.rb | 16 +++--- config/application.rb | 1 + streaming/index.js | 82 ++++++++++++++++++++++++++++++- 4 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 app/lib/access_token_extension.rb diff --git a/app/lib/access_token_extension.rb b/app/lib/access_token_extension.rb new file mode 100644 index 000000000..3e184e775 --- /dev/null +++ b/app/lib/access_token_extension.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module AccessTokenExtension + extend ActiveSupport::Concern + + included do + after_commit :push_to_streaming_api + end + + def revoke(clock = Time) + update(revoked_at: clock.now.utc) + end + + def push_to_streaming_api + Redis.current.publish("timeline:access_token:#{id}", Oj.dump(event: :kill)) if revoked? || destroyed? + end +end diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 34d25c83d..b0ce9d112 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -70,12 +70,16 @@ class SessionActivation < ApplicationRecord end def assign_access_token - superapp = Doorkeeper::Application.find_by(superapp: true) + self.access_token = Doorkeeper::AccessToken.create!(access_token_attributes) + end - self.access_token = Doorkeeper::AccessToken.create!(application_id: superapp&.id, - resource_owner_id: user_id, - scopes: 'read write follow', - expires_in: Doorkeeper.configuration.access_token_expires_in, - use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?) + def access_token_attributes + { + application_id: Doorkeeper::Application.find_by(superapp: true)&.id, + resource_owner_id: user_id, + scopes: 'read write follow', + expires_in: Doorkeeper.configuration.access_token_expires_in, + use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?, + } end end diff --git a/config/application.rb b/config/application.rb index de2951487..af7735221 100644 --- a/config/application.rb +++ b/config/application.rb @@ -140,6 +140,7 @@ module Mastodon Doorkeeper::AuthorizationsController.layout 'modal' Doorkeeper::AuthorizedApplicationsController.layout 'admin' Doorkeeper::Application.send :include, ApplicationExtension + Doorkeeper::AccessToken.send :include, AccessTokenExtension Devise::FailureApp.send :include, AbstractController::Callbacks Devise::FailureApp.send :include, HttpAcceptLanguage::EasyAccess Devise::FailureApp.send :include, Localized diff --git a/streaming/index.js b/streaming/index.js index 791a26941..877f45d19 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -294,7 +294,7 @@ const startWorker = (workerId) => { return; } - client.query('SELECT oauth_access_tokens.resource_owner_id, users.account_id, users.chosen_languages, oauth_access_tokens.scopes, devices.device_id FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id LEFT OUTER JOIN devices ON oauth_access_tokens.id = devices.access_token_id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token], (err, result) => { + client.query('SELECT oauth_access_tokens.id, oauth_access_tokens.resource_owner_id, users.account_id, users.chosen_languages, oauth_access_tokens.scopes, devices.device_id FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id LEFT OUTER JOIN devices ON oauth_access_tokens.id = devices.access_token_id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token], (err, result) => { done(); if (err) { @@ -310,6 +310,7 @@ const startWorker = (workerId) => { return; } + req.accessTokenId = result.rows[0].id; req.scopes = result.rows[0].scopes.split(' '); req.accountId = result.rows[0].account_id; req.chosenLanguages = result.rows[0].chosen_languages; @@ -450,6 +451,55 @@ const startWorker = (workerId) => { }); }; + /** + * @typedef SystemMessageHandlers + * @property {function(): void} onKill + */ + + /** + * @param {any} req + * @param {SystemMessageHandlers} eventHandlers + * @return {function(string): void} + */ + const createSystemMessageListener = (req, eventHandlers) => { + return message => { + const json = parseJSON(message); + + if (!json) return; + + const { event } = json; + + log.silly(req.requestId, `System message for ${req.accountId}: ${event}`); + + if (event === 'kill') { + log.verbose(req.requestId, `Closing connection for ${req.accountId} due to expired access token`); + eventHandlers.onKill(); + } + } + }; + + /** + * @param {any} req + * @param {any} res + */ + const subscribeHttpToSystemChannel = (req, res) => { + const systemChannelId = `timeline:access_token:${req.accessTokenId}`; + + const listener = createSystemMessageListener(req, { + + onKill () { + res.end(); + }, + + }); + + res.on('close', () => { + unsubscribe(`${redisPrefix}${systemChannelId}`, listener); + }); + + subscribe(`${redisPrefix}${systemChannelId}`, listener); + }; + /** * @param {any} req * @param {any} res @@ -462,6 +512,8 @@ const startWorker = (workerId) => { } accountFromRequest(req, alwaysRequireAuth).then(() => checkScopes(req, channelNameFromPath(req))).then(() => { + subscribeHttpToSystemChannel(req, res); + }).then(() => { next(); }).catch(err => { next(err); @@ -536,7 +588,9 @@ const startWorker = (workerId) => { const listener = message => { const json = parseJSON(message); + if (!json) return; + const { event, payload, queued_at } = json; const transmit = () => { @@ -902,6 +956,28 @@ const startWorker = (workerId) => { socket.send(JSON.stringify({ error: err.toString() })); }); + /** + * @param {WebSocketSession} session + */ + const subscribeWebsocketToSystemChannel = ({ socket, request, subscriptions }) => { + const systemChannelId = `timeline:access_token:${request.accessTokenId}`; + + const listener = createSystemMessageListener(request, { + + onKill () { + socket.close(); + }, + + }); + + subscribe(`${redisPrefix}${systemChannelId}`, listener); + + subscriptions[systemChannelId] = { + listener, + stopHeartbeat: () => {}, + }; + }; + /** * @param {string|string[]} arrayOrString * @return {string} @@ -948,7 +1024,9 @@ const startWorker = (workerId) => { ws.on('message', data => { const json = parseJSON(data); + if (!json) return; + const { type, stream, ...params } = json; if (type === 'subscribe') { @@ -960,6 +1038,8 @@ const startWorker = (workerId) => { } }); + subscribeWebsocketToSystemChannel(session); + if (location.query.stream) { subscribeWebsocketToChannel(session, firstParam(location.query.stream), location.query); } From 0a4d0e8320ae9fc5c446828743008db3b45bcb13 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 13 Nov 2020 22:17:04 +0100 Subject: [PATCH 198/422] Fix AccountDeletionWorker not accepting keyword arguments (#15152) --- app/workers/account_deletion_worker.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index b6016bf8c..81c3b91ad 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -5,7 +5,8 @@ class AccountDeletionWorker sidekiq_options queue: 'pull' - def perform(account_id, reserve_username: true) + def perform(account_id, options = {}) + reserve_username = options.with_indifferent_access.fetch(:reserve_username, true) DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, reserve_email: false) rescue ActiveRecord::RecordNotFound true From 8eb97e8ca2e731eba7f5be2d80e7e5254929814f Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Sun, 15 Nov 2020 03:19:23 +0900 Subject: [PATCH 199/422] Apply label automatically when issue creation from template (#15154) --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f49964bd9..8ae4bb882 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,7 +1,7 @@ --- name: Bug Report about: If something isn't working as expected - +labels: bug --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 3890729e2..ff92c0316 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,7 +1,6 @@ --- name: Feature Request about: I have a suggestion - --- From 04a079e7230bc4e73b897e3c4462011cddf36474 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 15 Nov 2020 14:24:54 +0100 Subject: [PATCH 200/422] Add hotkeys for audio/video control (#15158) Fix #14515 --- .../mastodon/features/audio/index.js | 51 +++++++++++- .../mastodon/features/video/index.js | 78 +++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js index 434148e8e..c47f55dd1 100644 --- a/app/javascript/mastodon/features/audio/index.js +++ b/app/javascript/mastodon/features/audio/index.js @@ -386,13 +386,59 @@ class Audio extends React.PureComponent { return this.props.foregroundColor || '#ffffff'; } + seekBy (time) { + const currentTime = this.audio.currentTime + time; + + if (!isNaN(currentTime)) { + this.setState({ currentTime }, () => { + this.audio.currentTime = currentTime; + }); + } + } + + handleAudioKeyDown = e => { + // On the audio element or the seek bar, we can safely use the space bar + // for playback control because there are no buttons to press + + if (e.key === ' ') { + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + } + } + + handleKeyDown = e => { + switch(e.key) { + case 'k': + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + break; + case 'm': + e.preventDefault(); + e.stopPropagation(); + this.toggleMute(); + break; + case 'j': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-10); + break; + case 'l': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(10); + break; + } + } + render () { const { src, intl, alt, editable, autoPlay } = this.props; const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state; const progress = Math.min((currentTime / duration) * 100, 100); return ( -
+
diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index 229a92140..e6c6f4b67 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -266,6 +266,81 @@ class Video extends React.PureComponent { } }, 15); + seekBy (time) { + const currentTime = this.video.currentTime + time; + + if (!isNaN(currentTime)) { + this.setState({ currentTime }, () => { + this.video.currentTime = currentTime; + }); + } + } + + handleVideoKeyDown = e => { + // On the video element or the seek bar, we can safely use the space bar + // for playback control because there are no buttons to press + + if (e.key === ' ') { + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + } + } + + handleKeyDown = e => { + const frameTime = 1 / 25; + + switch(e.key) { + case 'k': + e.preventDefault(); + e.stopPropagation(); + this.togglePlay(); + break; + case 'm': + e.preventDefault(); + e.stopPropagation(); + this.toggleMute(); + break; + case 'f': + e.preventDefault(); + e.stopPropagation(); + this.toggleFullscreen(); + break; + case 'j': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-10); + break; + case 'l': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(10); + break; + case ',': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(-frameTime); + break; + case '.': + e.preventDefault(); + e.stopPropagation(); + this.seekBy(frameTime); + break; + } + + // If we are in fullscreen mode, we don't want any hotkeys + // interacting with the UI that's not visible + + if (this.state.fullscreen) { + e.preventDefault(); + e.stopPropagation(); + + if (e.key === 'Escape') { + exitFullscreen(); + } + } + } + togglePlay = () => { if (this.state.paused) { this.setState({ paused: false }, () => this.video.play()); @@ -484,6 +559,7 @@ class Video extends React.PureComponent { onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClickRoot} + onKeyDown={this.handleKeyDown} tabIndex={0} >
From 18ca4e0e9a3f74a6f21d329882b429f8f5227b0f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 16 Nov 2020 05:16:39 +0100 Subject: [PATCH 201/422] Fix pop-out player appearing on mobile screens in web UI (#15157) Fix #15092 --- app/javascript/mastodon/actions/app.js | 7 ++ app/javascript/mastodon/components/status.js | 15 +-- .../mastodon/containers/status_container.js | 6 +- app/javascript/mastodon/features/ui/index.js | 91 ++++++++----------- app/javascript/mastodon/is_mobile.js | 25 +++-- app/javascript/mastodon/reducers/meta.js | 7 +- 6 files changed, 79 insertions(+), 72 deletions(-) diff --git a/app/javascript/mastodon/actions/app.js b/app/javascript/mastodon/actions/app.js index 414968f7d..c817c8708 100644 --- a/app/javascript/mastodon/actions/app.js +++ b/app/javascript/mastodon/actions/app.js @@ -8,3 +8,10 @@ export const focusApp = () => ({ export const unfocusApp = () => ({ type: APP_UNFOCUS, }); + +export const APP_LAYOUT_CHANGE = 'APP_LAYOUT_CHANGE'; + +export const changeLayout = layout => ({ + type: APP_LAYOUT_CHANGE, + layout, +}); diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index be4f0bcca..f4ed25f1e 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -97,7 +97,10 @@ class Status extends ImmutablePureComponent { cachedMediaWidth: PropTypes.number, scrollKey: PropTypes.string, deployPictureInPicture: PropTypes.func, - usingPiP: PropTypes.bool, + pictureInPicture: PropTypes.shape({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), }; // Avoid checking props that are functions (and whose equality will always @@ -108,7 +111,7 @@ class Status extends ImmutablePureComponent { 'muted', 'hidden', 'unread', - 'usingPiP', + 'pictureInPicture', ]; state = { @@ -277,7 +280,7 @@ class Status extends ImmutablePureComponent { let media = null; let statusAvatar, prepend, rebloggedByText; - const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, usingPiP } = this.props; + const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, pictureInPicture } = this.props; let { status, account, ...other } = this.props; @@ -348,7 +351,7 @@ class Status extends ImmutablePureComponent { status = status.get('reblog'); } - if (usingPiP) { + if (pictureInPicture.inUse) { media = ; } else if (status.get('media_attachments').size > 0) { if (this.props.muted) { @@ -375,7 +378,7 @@ class Status extends ImmutablePureComponent { width={this.props.cachedMediaWidth} height={110} cacheWidth={this.props.cacheMediaWidth} - deployPictureInPicture={this.handleDeployPictureInPicture} + deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined} /> )} @@ -397,7 +400,7 @@ class Status extends ImmutablePureComponent { sensitive={status.get('sensitive')} onOpenVideo={this.handleOpenVideo} cacheWidth={this.props.cacheMediaWidth} - deployPictureInPicture={this.handleDeployPictureInPicture} + deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined} visible={this.state.showMedia} onToggleVisibility={this.handleToggleMediaVisibility} /> diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index 7bfd66d3e..fe81981a7 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -57,7 +57,11 @@ const makeMapStateToProps = () => { const mapStateToProps = (state, props) => ({ status: getStatus(state, props), - usingPiP: state.get('picture_in_picture').statusId === props.id, + + pictureInPicture: { + inUse: state.getIn(['meta', 'layout']) !== 'mobile' && state.get('picture_in_picture').statusId === props.id, + available: state.getIn(['meta', 'layout']) !== 'mobile', + }, }); return mapStateToProps; diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index c6df49a5f..507ac1df1 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -8,14 +8,14 @@ import PropTypes from 'prop-types'; import NotificationsContainer from './containers/notifications_container'; import LoadingBarContainer from './containers/loading_bar_container'; import ModalContainer from './containers/modal_container'; -import { isMobile } from '../../is_mobile'; +import { layoutFromWindow } from 'mastodon/is_mobile'; import { debounce } from 'lodash'; import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose'; import { expandHomeTimeline } from '../../actions/timelines'; import { expandNotifications } from '../../actions/notifications'; import { fetchFilters } from '../../actions/filters'; import { clearHeight } from '../../actions/height_cache'; -import { focusApp, unfocusApp } from 'mastodon/actions/app'; +import { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app'; import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import UploadArea from './components/upload_area'; @@ -52,7 +52,7 @@ import { Search, Directory, } from './util/async-components'; -import { me, forceSingleColumn } from '../../initial_state'; +import { me } from '../../initial_state'; import { previewState as previewMediaState } from './components/media_modal'; import { previewState as previewVideoState } from './components/video_modal'; @@ -65,6 +65,7 @@ const messages = defineMessages({ }); const mapStateToProps = state => ({ + layout: state.getIn(['meta', 'layout']), isComposing: state.getIn(['compose', 'is_composing']), hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, @@ -110,17 +111,11 @@ class SwitchingColumnsArea extends React.PureComponent { static propTypes = { children: PropTypes.node, location: PropTypes.object, - onLayoutChange: PropTypes.func.isRequired, - }; - - state = { - mobile: isMobile(window.innerWidth), + mobile: PropTypes.bool, }; componentWillMount () { - window.addEventListener('resize', this.handleResize, { passive: true }); - - if (this.state.mobile || forceSingleColumn) { + if (this.props.mobile) { document.body.classList.toggle('layout-single-column', true); document.body.classList.toggle('layout-multiple-columns', false); } else { @@ -129,44 +124,21 @@ class SwitchingColumnsArea extends React.PureComponent { } } - componentDidUpdate (prevProps, prevState) { + componentDidUpdate (prevProps) { if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) { this.node.handleChildrenContentChange(); } - if (prevState.mobile !== this.state.mobile && !forceSingleColumn) { - document.body.classList.toggle('layout-single-column', this.state.mobile); - document.body.classList.toggle('layout-multiple-columns', !this.state.mobile); + if (prevProps.mobile !== this.props.mobile) { + document.body.classList.toggle('layout-single-column', this.props.mobile); + document.body.classList.toggle('layout-multiple-columns', !this.props.mobile); } } - componentWillUnmount () { - window.removeEventListener('resize', this.handleResize); - } - shouldUpdateScroll (_, { location }) { return location.state !== previewMediaState && location.state !== previewVideoState; } - handleLayoutChange = debounce(() => { - // The cached heights are no longer accurate, invalidate - this.props.onLayoutChange(); - }, 500, { - trailing: true, - }) - - handleResize = () => { - const mobile = isMobile(window.innerWidth); - - if (mobile !== this.state.mobile) { - this.handleLayoutChange.cancel(); - this.props.onLayoutChange(); - this.setState({ mobile }); - } else { - this.handleLayoutChange(); - } - } - setRef = c => { if (c) { this.node = c.getWrappedInstance(); @@ -174,13 +146,11 @@ class SwitchingColumnsArea extends React.PureComponent { } render () { - const { children } = this.props; - const { mobile } = this.state; - const singleColumn = forceSingleColumn || mobile; - const redirect = singleColumn ? : ; + const { children, mobile } = this.props; + const redirect = mobile ? : ; return ( - + {redirect} @@ -244,6 +214,7 @@ class UI extends React.PureComponent { location: PropTypes.object, intl: PropTypes.object.isRequired, dropdownMenuIsOpen: PropTypes.bool, + layout: PropTypes.string.isRequired, }; state = { @@ -273,11 +244,6 @@ class UI extends React.PureComponent { this.props.dispatch(unfocusApp()); } - handleLayoutChange = () => { - // The cached heights are no longer accurate, invalidate - this.props.dispatch(clearHeight()); - } - handleDragEnter = (e) => { e.preventDefault(); @@ -351,10 +317,28 @@ class UI extends React.PureComponent { } } - componentWillMount () { + handleLayoutChange = debounce(() => { + this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate + }, 500, { + trailing: true, + }); + + handleResize = () => { + const layout = layoutFromWindow(); + + if (layout !== this.props.layout) { + this.handleLayoutChange.cancel(); + this.props.dispatch(changeLayout(layout)); + } else { + this.handleLayoutChange(); + } + } + + componentDidMount () { window.addEventListener('focus', this.handleWindowFocus, false); window.addEventListener('blur', this.handleWindowBlur, false); window.addEventListener('beforeunload', this.handleBeforeUnload, false); + window.addEventListener('resize', this.handleResize, { passive: true }); document.addEventListener('dragenter', this.handleDragEnter, false); document.addEventListener('dragover', this.handleDragOver, false); @@ -371,9 +355,7 @@ class UI extends React.PureComponent { this.props.dispatch(expandNotifications()); setTimeout(() => this.props.dispatch(fetchFilters()), 500); - } - componentDidMount () { this.hotkeys.__mousetrap__.stopCallback = (e, element) => { return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); }; @@ -383,6 +365,7 @@ class UI extends React.PureComponent { window.removeEventListener('focus', this.handleWindowFocus); window.removeEventListener('blur', this.handleWindowBlur); window.removeEventListener('beforeunload', this.handleBeforeUnload); + window.removeEventListener('resize', this.handleResize); document.removeEventListener('dragenter', this.handleDragEnter); document.removeEventListener('dragover', this.handleDragOver); @@ -513,7 +496,7 @@ class UI extends React.PureComponent { render () { const { draggingOver } = this.state; - const { children, isComposing, location, dropdownMenuIsOpen } = this.props; + const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props; const handlers = { help: this.handleHotkeyToggleHelp, @@ -540,11 +523,11 @@ class UI extends React.PureComponent { return (
- + {children} - + {layout !== 'mobile' && } diff --git a/app/javascript/mastodon/is_mobile.js b/app/javascript/mastodon/is_mobile.js index 5a8c3db08..2926eb4b1 100644 --- a/app/javascript/mastodon/is_mobile.js +++ b/app/javascript/mastodon/is_mobile.js @@ -1,9 +1,18 @@ import { supportsPassiveEvents } from 'detect-passive-events'; +import { forceSingleColumn } from 'mastodon/initial_state'; const LAYOUT_BREAKPOINT = 630; -export function isMobile(width) { - return width <= LAYOUT_BREAKPOINT; +export const isMobile = width => width <= LAYOUT_BREAKPOINT; + +export const layoutFromWindow = () => { + if (isMobile(window.innerWidth)) { + return 'mobile'; + } else if (forceSingleColumn) { + return 'single-column'; + } else { + return 'multi-column'; + } }; const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; @@ -11,17 +20,13 @@ const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; let userTouching = false; let listenerOptions = supportsPassiveEvents ? { passive: true } : false; -function touchListener() { +const touchListener = () => { userTouching = true; window.removeEventListener('touchstart', touchListener, listenerOptions); -} +}; window.addEventListener('touchstart', touchListener, listenerOptions); -export function isUserTouching() { - return userTouching; -} +export const isUserTouching = () => userTouching; -export function isIOS() { - return iOS; -}; +export const isIOS = () => iOS; diff --git a/app/javascript/mastodon/reducers/meta.js b/app/javascript/mastodon/reducers/meta.js index 36a5a1c35..65becc44f 100644 --- a/app/javascript/mastodon/reducers/meta.js +++ b/app/javascript/mastodon/reducers/meta.js @@ -1,15 +1,20 @@ -import { STORE_HYDRATE } from '../actions/store'; +import { STORE_HYDRATE } from 'mastodon/actions/store'; +import { APP_LAYOUT_CHANGE } from 'mastodon/actions/app'; import { Map as ImmutableMap } from 'immutable'; +import { layoutFromWindow } from 'mastodon/is_mobile'; const initialState = ImmutableMap({ streaming_api_base_url: null, access_token: null, + layout: layoutFromWindow(), }); export default function meta(state = initialState, action) { switch(action.type) { case STORE_HYDRATE: return state.merge(action.state.get('meta')); + case APP_LAYOUT_CHANGE: + return state.set('layout', action.layout); default: return state; } From d8d43a427a549cf063de3f6b3c22a08a06f53ffa Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 18 Nov 2020 18:01:58 +0100 Subject: [PATCH 202/422] Fix image uploads being random data when canvas read access is blocked (#15180) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #15178 PR #11499 introduced a way to deal with all-white canvas, but newer Firefox versions set random data instead. This PR detects whether canvas operations are reliable by comparing the results on a hardcoded 2×2 pixels image, and memoizing the result. This should be both more reliable and faster than the previous check. --- app/javascript/mastodon/utils/resize_image.js | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/utils/resize_image.js b/app/javascript/mastodon/utils/resize_image.js index 6c1cb61a2..8f1485379 100644 --- a/app/javascript/mastodon/utils/resize_image.js +++ b/app/javascript/mastodon/utils/resize_image.js @@ -41,6 +41,45 @@ const dropOrientationIfNeeded = (orientation) => new Promise(resolve => { } }); +// Some browsers don't allow reading from a canvas and instead return all-white +// or randomized data. Use a pre-defined image to check if reading the canvas +// works. +const checkCanvasReliability = () => new Promise((resolve, reject) => { + switch(_browser_quirks['canvas-read-unreliable']) { + case true: + reject('Canvas reading unreliable'); + break; + case false: + resolve(); + break; + default: + // 2×2 GIF with white, red, green and blue pixels + const testImageURL = + 'data:image/gif;base64,R0lGODdhAgACAKEDAAAA//8AAAD/AP///ywAAAAAAgACAAACA1wEBQA7'; + const refData = + [255, 255, 255, 255, 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255]; + const img = new Image(); + img.onload = () => { + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + context.drawImage(img, 0, 0, 2, 2); + const imageData = context.getImageData(0, 0, 2, 2); + if (imageData.data.every((x, i) => refData[i] === x)) { + _browser_quirks['canvas-read-unreliable'] = false; + resolve(); + } else { + _browser_quirks['canvas-read-unreliable'] = true; + reject('Canvas reading unreliable'); + } + }; + img.onerror = () => { + _browser_quirks['canvas-read-unreliable'] = true; + reject('Failed to load test image'); + }; + img.src = testImageURL; + } +}); + const getImageUrl = inputFile => new Promise((resolve, reject) => { if (window.URL && URL.createObjectURL) { try { @@ -110,14 +149,6 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) = context.drawImage(img, 0, 0, width, height); - // The Tor Browser and maybe other browsers may prevent reading from canvas - // and return an all-white image instead. Assume reading failed if the resized - // image is perfectly white. - const imageData = context.getImageData(0, 0, width, height); - if (imageData.data.every(value => value === 255)) { - throw 'Failed to read from canvas'; - } - canvas.toBlob(resolve, type); }); @@ -127,7 +158,8 @@ const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) = const newWidth = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (width / height))); const newHeight = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (height / width))); - getOrientation(img, type) + checkCanvasReliability() + .then(getOrientation(img, type)) .then(orientation => processImage(img, { width: newWidth, height: newHeight, From 966593393ede79e66d443a6b299c3aa35611e3ef Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 19 Nov 2020 00:23:46 +0100 Subject: [PATCH 203/422] Fix DMs not appearing into timelines (#15182) Fixes #15179 --- app/services/fan_out_on_write_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 4f6c64de1..b72bb82d3 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -9,6 +9,7 @@ class FanOutOnWriteService < BaseService deliver_to_self(status) if status.account.local? if status.direct_visibility? + deliver_to_mentioned_followers(status) deliver_to_own_conversation(status) elsif status.limited_visibility? deliver_to_mentioned_followers(status) From feeaa6f50d125c4af6e0ecc7ea7269a9a8ee8785 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:22:24 +0900 Subject: [PATCH 204/422] Bump oj from 3.10.15 to 3.10.16 (#15175) Bumps [oj](https://github.com/ohler55/oj) from 3.10.15 to 3.10.16. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.10.15...v3.10.16) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 25e386f7e..080dfae6b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -367,7 +367,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.10.15) + oj (3.10.16) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From beddf821d7c805cac24a0f364d539b2f7f44380b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:25:12 +0900 Subject: [PATCH 205/422] Bump json-ld from 3.1.4 to 3.1.5 (#15174) Bumps [json-ld](https://github.com/ruby-rdf/json-ld) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/ruby-rdf/json-ld/releases) - [Commits](https://github.com/ruby-rdf/json-ld/compare/3.1.4...3.1.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 080dfae6b..29d61f5b5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -289,7 +289,7 @@ GEM jmespath (1.4.0) json (2.3.1) json-canonicalization (0.2.0) - json-ld (3.1.4) + json-ld (3.1.5) htmlentities (~> 4.3) json-canonicalization (~> 0.2) link_header (~> 0.0, >= 0.0.8) @@ -473,7 +473,7 @@ GEM thor (>= 0.19.0, < 2.0) rainbow (3.0.0) rake (13.0.1) - rdf (3.1.6) + rdf (3.1.7) hamster (~> 3.0) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.4.0) From 78a395672909674f12ff40cb1f029b782284aeda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:28:31 +0900 Subject: [PATCH 206/422] Bump aws-sdk-s3 from 1.84.0 to 1.84.1 (#15173) Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.84.0 to 1.84.1. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 29d61f5b5..0cca4fb3a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,7 +79,7 @@ GEM cocaine (~> 0.5.3) awrence (1.1.1) aws-eventstream (1.1.0) - aws-partitions (1.390.0) + aws-partitions (1.393.0) aws-sdk-core (3.109.2) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) @@ -88,7 +88,7 @@ GEM aws-sdk-kms (1.39.0) aws-sdk-core (~> 3, >= 3.109.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.84.0) + aws-sdk-s3 (1.84.1) aws-sdk-core (~> 3, >= 3.109.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) From d942eb23feb5cb31c852d933b6ebb43a150d36b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:32:00 +0900 Subject: [PATCH 207/422] Bump compression-webpack-plugin from 6.1.0 to 6.1.1 (#15161) Bumps [compression-webpack-plugin](https://github.com/webpack-contrib/compression-webpack-plugin) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/webpack-contrib/compression-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/compression-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v6.1.0...v6.1.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2375a9ecd..f8f8ddda4 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "babel-runtime": "^6.26.0", "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^6.1.0", + "compression-webpack-plugin": "^6.1.1", "cross-env": "^7.0.2", "css-loader": "^5.0.1", "cssnano": "^4.1.10", diff --git a/yarn.lock b/yarn.lock index d625b2dfe..0e5182eca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3005,10 +3005,10 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.0.tgz#ef88a4c35e240aa14bec6cccc0582ed47e148605" - integrity sha512-RK/bBW3JwQpb7tH91trro7ulNa0ynSTPxQO48rn/oS1Y2nGUYuX6CWIOqbhUF2+b+2clqJeDGIYYckvg6WKabA== +compression-webpack-plugin@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.1.tgz#ae8e4b2ffdb7396bb776e66918d751a20d8ccf0e" + integrity sha512-BEHft9M6lwOqVIQFMS/YJGmeCYXVOakC5KzQk05TFpMBlODByh1qNsZCWjUBxCQhUP9x0WfGidxTbGkjbWO/TQ== dependencies: cacache "^15.0.5" find-cache-dir "^3.3.1" From 3d98741639e55838619ef3e2801438bd3b83fcd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:34:31 +0900 Subject: [PATCH 208/422] Bump @testing-library/jest-dom from 5.11.5 to 5.11.6 (#15162) Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 5.11.5 to 5.11.6. - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/master/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v5.11.5...v5.11.6) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f8f8ddda4..48e3fa8d4 100644 --- a/package.json +++ b/package.json @@ -170,7 +170,7 @@ "wicg-inert": "^3.1.0" }, "devDependencies": { - "@testing-library/jest-dom": "^5.11.5", + "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.1.1", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", diff --git a/yarn.lock b/yarn.lock index 0e5182eca..8608cdbf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1355,10 +1355,10 @@ lz-string "^1.4.4" pretty-format "^26.4.2" -"@testing-library/jest-dom@^5.11.5": - version "5.11.5" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.5.tgz#44010f37f4b1e15f9d433963b515db0b05182fc8" - integrity sha512-XI+ClHR864i6p2kRCEyhvpVejuer+ObVUF4cjCvRSF88eOMIfqw7RoS9+qoRhyigGswMfT64L6Nt0Ufotxbwtg== +"@testing-library/jest-dom@^5.11.6": + version "5.11.6" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.6.tgz#782940e82e5cd17bc0a36f15156ba16f3570ac81" + integrity sha512-cVZyUNRWwUKI0++yepYpYX7uhrP398I+tGz4zOlLVlUYnZS+Svuxv4fwLeCIy7TnBYKXUaOlQr3vopxL8ZfEnA== dependencies: "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" From 9b188a65bee0e61fdde8c2932c096ad4ca2afb23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:42:05 +0900 Subject: [PATCH 209/422] Bump webmock from 3.9.5 to 3.10.0 (#15172) Bumps [webmock](https://github.com/bblimke/webmock) from 3.9.5 to 3.10.0. - [Release notes](https://github.com/bblimke/webmock/releases) - [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md) - [Commits](https://github.com/bblimke/webmock/compare/v3.9.5...v3.10.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 7d21d41d8..26bc6fd52 100644 --- a/Gemfile +++ b/Gemfile @@ -125,7 +125,7 @@ group :test do gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' gem 'simplecov', '~> 0.19', require: false - gem 'webmock', '~> 3.9' + gem 'webmock', '~> 3.10' gem 'parallel_tests', '~> 3.3' gem 'rspec_junit_formatter', '~> 0.4' end diff --git a/Gemfile.lock b/Gemfile.lock index 0cca4fb3a..c385cf493 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -649,7 +649,7 @@ GEM safety_net_attestation (~> 0.4.0) securecompare (~> 1.0) tpm-key_attestation (~> 0.9.0) - webmock (3.9.5) + webmock (3.10.0) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -798,7 +798,7 @@ DEPENDENCIES twitter-text (~> 1.14) tzinfo-data (~> 1.2020) webauthn (~> 3.0.0.alpha1) - webmock (~> 3.9) + webmock (~> 3.10) webpacker (~> 5.2) webpush xorcist (~> 1.1) From 34ced3da9f4f5fed15091f99b5764c0e864a8120 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:44:38 +0900 Subject: [PATCH 210/422] Bump yargs from 16.1.0 to 16.1.1 (#15163) Bumps [yargs](https://github.com/yargs/yargs) from 16.1.0 to 16.1.1. - [Release notes](https://github.com/yargs/yargs/releases) - [Changelog](https://github.com/yargs/yargs/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/yargs/compare/v16.1.0...v16.1.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 48e3fa8d4..2d60ed432 100644 --- a/package.json +++ b/package.json @@ -185,7 +185,7 @@ "react-test-renderer": "^16.14.0", "sass-lint": "^1.13.1", "webpack-dev-server": "^3.11.0", - "yargs": "^16.1.0" + "yargs": "^16.1.1" }, "resolutions": { "kind-of": "^6.0.3" diff --git a/yarn.lock b/yarn.lock index 8608cdbf5..ee3bde61a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11284,10 +11284,10 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -y18n@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.4.tgz#0ab2db89dd5873b5ec4682d8e703e833373ea897" - integrity sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^3.0.2: version "3.1.1" @@ -11358,17 +11358,17 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a" - integrity sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g== +yargs@^16.1.1: + version "16.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1" + integrity sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w== dependencies: cliui "^7.0.2" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.0" - y18n "^5.0.2" + y18n "^5.0.5" yargs-parser "^20.2.2" zlibjs@^0.3.1: From a3f3a9113dd02cccfe2af6142892df176b3ac15b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:45:57 +0900 Subject: [PATCH 211/422] Bump bootsnap from 1.5.0 to 1.5.1 (#15171) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.5.0 to 1.5.1. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.5.0...v1.5.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c385cf493..eaf6ebf1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,7 +104,7 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.4) ffi (~> 1.10.0) - bootsnap (1.5.0) + bootsnap (1.5.1) msgpack (~> 1.0) brakeman (4.10.0) browser (4.2.0) From e77bd9fc8acae99fd30f99616be5eea183204782 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:56:04 +0900 Subject: [PATCH 212/422] Bump mini-css-extract-plugin from 1.3.0 to 1.3.1 (#15168) Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.3.0 to 1.3.1. - [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.3.0...v1.3.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2d60ed432..b9c7d233a 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "lodash": "^4.17.19", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^1.3.0", + "mini-css-extract-plugin": "^1.3.1", "mkdirp": "^1.0.4", "npmlog": "^4.1.2", "object-assign": "^4.1.1", diff --git a/yarn.lock b/yarn.lock index ee3bde61a..a65335411 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7018,10 +7018,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.0.tgz#bbcba978b68c39f0a9c75822cfb2874f9cf6b018" - integrity sha512-4DKmPwFd0XKlwoqvrkLi2X8Mlosh2ey/E/OVAucnPUdzGqrSWHgSqed/p4Ue2Q39JjIvcdSDgmZDO6mir5Ovmw== +mini-css-extract-plugin@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.1.tgz#1375c88b2bc2a9d197670a55761edcd1b5d72f21" + integrity sha512-jIOheqh9EU98rqj6ZaFTYNNDSFqdakNqaUZfkYwaXPjI9batmXVXX+K71NrqRAgtoGefELBMld1EQ7dqSAD5SQ== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" From 8d520d4427427292de174eef8171f440936e1d06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 11:03:07 +0900 Subject: [PATCH 213/422] Bump sass-loader from 10.0.5 to 10.1.0 (#15164) Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.5 to 10.1.0. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.5...v10.1.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b9c7d233a..f6fb2528f 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "reselect": "^4.0.0", "rimraf": "^3.0.2", "sass": "^1.29.0", - "sass-loader": "^10.0.5", + "sass-loader": "^10.1.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", diff --git a/yarn.lock b/yarn.lock index a65335411..cecebe88b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9425,10 +9425,10 @@ sass-lint@^1.13.1: path-is-absolute "^1.0.0" util "^0.10.3" -sass-loader@^10.0.5: - version "10.0.5" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.5.tgz#f53505b5ddbedf43797470ceb34066ded82bb769" - integrity sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w== +sass-loader@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.0.tgz#1727fcc0c32ab3eb197cda61d78adf4e9174a4b3" + integrity sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg== dependencies: klona "^2.0.4" loader-utils "^2.0.0" From 60cc3a96d8d7fb3253dc93356009e52ccde2fc05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 11:07:57 +0900 Subject: [PATCH 214/422] Bump webpack-merge from 5.3.0 to 5.4.0 (#15166) Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/develop/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.3.0...v5.4.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f6fb2528f..d31b0de3f 100644 --- a/package.json +++ b/package.json @@ -166,7 +166,7 @@ "webpack-assets-manifest": "^3.1.1", "webpack-bundle-analyzer": "^4.1.0", "webpack-cli": "^3.3.12", - "webpack-merge": "^5.3.0", + "webpack-merge": "^5.4.0", "wicg-inert": "^3.1.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index cecebe88b..b477aae3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11061,10 +11061,10 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.3.0.tgz#a80df44d35fabace680bf430a19fda9ec49ed8eb" - integrity sha512-4PtsBAWnmJULIJYviiPq4BxwAykbAgGMheyEVaemj2bJI54h+p/gnlbXZEH2EM0IYC3blOE1Qm6kzKlc06N1UQ== +webpack-merge@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.4.0.tgz#81bef0a7d23fc1e6c24b06ad8bf22ddeb533a3a3" + integrity sha512-/scBgu8LVPlHDgqH95Aw1xS+L+PHrpHKOwYVGFaNOQl4Q4wwwWDarwB1WdZAbLQ24SKhY3Awe7VZGYAdp+N+gQ== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" From 29e76f994e3abf0146da1be3ddda9e0893f7efa5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 11:08:20 +0900 Subject: [PATCH 215/422] Bump babel-loader from 8.1.0 to 8.2.1 (#15167) Bumps [babel-loader](https://github.com/babel/babel-loader) from 8.1.0 to 8.2.1. - [Release notes](https://github.com/babel/babel-loader/releases) - [Changelog](https://github.com/babel/babel-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel-loader/compare/v8.1.0...v8.2.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d31b0de3f..3129edeb2 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "arrow-key-navigation": "^1.2.0", "autoprefixer": "^9.8.6", "axios": "^0.21.0", - "babel-loader": "^8.1.0", + "babel-loader": "^8.2.1", "babel-plugin-lodash": "^3.3.4", "babel-plugin-preval": "^5.0.0", "babel-plugin-react-intl": "^6.2.0", diff --git a/yarn.lock b/yarn.lock index b477aae3e..a36877bb1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2148,14 +2148,14 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== +babel-loader@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.1.tgz#e53313254677e86f27536f5071d807e01d24ec00" + integrity sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw== dependencies: find-cache-dir "^2.1.0" loader-utils "^1.4.0" - mkdirp "^0.5.3" + make-dir "^2.1.0" pify "^4.0.1" schema-utils "^2.6.5" @@ -6842,7 +6842,7 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= -make-dir@^2.0.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== From 1242e57c270e9ff356e8c175670d5dc3a10ad273 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 19 Nov 2020 17:37:49 +0100 Subject: [PATCH 216/422] Deal with collation-related index corruption (#14860) * Add tootctl maintenance fix-duplicates This tool goes through the database to detect and fix duplicates. This operation is very slow and may cause data loss (of data that would be inaccessible without intervention because of the existing index corruptions). It tries its best to make sensible decisions, and asks the user in some cases. * Add warning message in db:migrate hook * Clear Rails cache after being done with database deduplication Avoids followers hash cache being incorrect, among other things --- lib/cli.rb | 4 + lib/mastodon/maintenance_cli.rb | 610 ++++++++++++++++++++++++++++++++ lib/tasks/db.rake | 11 + 3 files changed, 625 insertions(+) create mode 100644 lib/mastodon/maintenance_cli.rb diff --git a/lib/cli.rb b/lib/cli.rb index 2a4dd11b2..3f1658566 100644 --- a/lib/cli.rb +++ b/lib/cli.rb @@ -14,6 +14,7 @@ require_relative 'mastodon/cache_cli' require_relative 'mastodon/upgrade_cli' require_relative 'mastodon/email_domain_blocks_cli' require_relative 'mastodon/ip_blocks_cli' +require_relative 'mastodon/maintenance_cli' require_relative 'mastodon/version' module Mastodon @@ -61,6 +62,9 @@ module Mastodon desc 'ip_blocks SUBCOMMAND ...ARGS', 'Manage IP blocks' subcommand 'ip_blocks', Mastodon::IpBlocksCLI + desc 'maintenance SUBCOMMAND ...ARGS', 'Various maintenance utilities' + subcommand 'maintenance', Mastodon::MaintenanceCLI + option :dry_run, type: :boolean desc 'self-destruct', 'Erase the server from the federation' long_desc <<~LONG_DESC diff --git a/lib/mastodon/maintenance_cli.rb b/lib/mastodon/maintenance_cli.rb new file mode 100644 index 000000000..191a3b03f --- /dev/null +++ b/lib/mastodon/maintenance_cli.rb @@ -0,0 +1,610 @@ +# frozen_string_literal: true + +require 'tty-prompt' +require_relative '../../config/boot' +require_relative '../../config/environment' +require_relative 'cli_helper' + +module Mastodon + class MaintenanceCLI < Thor + include CLIHelper + + def self.exit_on_failure? + true + end + + MIN_SUPPORTED_VERSION = 2019_10_01_213028 + MAX_SUPPORTED_VERSION = 2020_10_17_234926 + + # Stubs to enjoy ActiveRecord queries while not depending on a particular + # version of the code/database + + class Status < ApplicationRecord; end + class StatusPin < ApplicationRecord; end + class Poll < ApplicationRecord; end + class Report < ApplicationRecord; end + class Tombstone < ApplicationRecord; end + class Favourite < ApplicationRecord; end + class Follow < ApplicationRecord; end + class FollowRequest < ApplicationRecord; end + class Block < ApplicationRecord; end + class Mute < ApplicationRecord; end + class AccountIdentityProof < ApplicationRecord; end + class AccountModerationNote < ApplicationRecord; end + class AccountPin < ApplicationRecord; end + class ListAccount < ApplicationRecord; end + class PollVote < ApplicationRecord; end + class Mention < ApplicationRecord; end + class AccountDomainBlock < ApplicationRecord; end + class AnnouncementReaction < ApplicationRecord; end + class FeaturedTag < ApplicationRecord; end + class CustomEmoji < ApplicationRecord; end + class CustomEmojiCategory < ApplicationRecord; end + class Bookmark < ApplicationRecord; end + class WebauthnCredential < ApplicationRecord; end + + class PreviewCard < ApplicationRecord + self.inheritance_column = false + end + + class MediaAttachment < ApplicationRecord + self.inheritance_column = nil + end + + class AccountStat < ApplicationRecord + belongs_to :account, inverse_of: :account_stat + end + + class Account < ApplicationRecord + # Dummy class, to make migration possible across version changes + has_one :user, inverse_of: :account + has_one :account_stat, inverse_of: :account + + scope :local, -> { where(domain: nil) } + + def local? + domain.nil? + end + + def acct + local? ? username : "#{username}@#{domain}" + end + end + + class User < ApplicationRecord + belongs_to :account, inverse_of: :user + end + + desc 'fix-duplicates', 'Fix duplicates in database and rebuild indexes' + long_desc <<~LONG_DESC + Delete or merge duplicate accounts, statuses, emojis, etc. and rebuild indexes. + + This is useful if your database indexes are corrupted because of issues such as https://wiki.postgresql.org/wiki/Locale_data_changes + + Mastodon has to be stopped to run this task, which will take a long time and may be destructive. + LONG_DESC + def fix_duplicates + @prompt = TTY::Prompt.new + + if ActiveRecord::Migrator.current_version < MIN_SUPPORTED_VERSION + @prompt.warn 'Your version of the database schema is too old and is not supported by this script.' + @prompt.warn 'Please update to at least Mastodon 3.0.0 before running this script.' + exit(1) + elsif ActiveRecord::Migrator.current_version > MAX_SUPPORTED_VERSION + @prompt.warn 'Your version of the database schema is more recent than this script, this may cause unexpected errors.' + exit(1) unless @prompt.yes?('Continue anyway?') + end + + @prompt.warn 'This task will take a long time to run and is potentially destructive.' + @prompt.warn 'Please make sure to stop Mastodon and have a backup.' + exit(1) unless @prompt.yes?('Continue?') + + deduplicate_accounts! + deduplicate_users! + deduplicate_account_domain_blocks! + deduplicate_account_identity_proofs! + deduplicate_announcement_reactions! + deduplicate_conversations! + deduplicate_custom_emojis! + deduplicate_custom_emoji_categories! + deduplicate_domain_allows! + deduplicate_domain_blocks! + deduplicate_unavailable_domains! + deduplicate_email_domain_blocks! + deduplicate_media_attachments! + deduplicate_preview_cards! + deduplicate_statuses! + deduplicate_tags! + deduplicate_webauthn_credentials! + + Rails.cache.clear + + @prompt.say 'Finished!' + end + + private + + def deduplicate_accounts! + remove_index_if_exists!(:accounts, 'index_accounts_on_username_and_domain_lower') + + @prompt.say 'Deduplicating accounts… for local accounts, you will be asked to chose which account to keep unchanged.' + + find_duplicate_accounts.each do |row| + accounts = Account.where(id: row['ids'].split(',')).to_a + + if accounts.first.local? + deduplicate_local_accounts!(accounts) + else + deduplicate_remote_accounts!(accounts) + end + end + + @prompt.say 'Restoring index_accounts_on_username_and_domain_lower…' + if ActiveRecord::Migrator.current_version < 20200620164023 + ActiveRecord::Base.connection.add_index :accounts, 'lower (username), lower(domain)', name: 'index_accounts_on_username_and_domain_lower', unique: true + else + ActiveRecord::Base.connection.add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true + end + end + + def deduplicate_users! + remove_index_if_exists!(:users, 'index_users_on_confirmation_token') + remove_index_if_exists!(:users, 'index_users_on_email') + remove_index_if_exists!(:users, 'index_users_on_remember_token') + remove_index_if_exists!(:users, 'index_users_on_reset_password_token') + + @prompt.say 'Deduplicating user records…' + + # Deduplicating email + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users GROUP BY email HAVING count(*) > 1").each do |row| + users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse + ref_user = users.shift + @prompt.warn "Multiple users registered with e-mail address #{ref_user.email}." + @prompt.warn "e-mail will be disabled for the following accounts: #{user.map(&:account).map(&:acct).join(', ')}" + @prompt.warn 'Please reach out to them and set another address with `tootctl account modify` or delete them.' + + i = 0 + users.each do |user| + user.update!(email: "#{i} " + user.email) + end + end + + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row| + users = User.where(id: row['ids'].split(',')).sort_by(&:created_at).reverse.drop(1) + @prompt.warn "Unsetting confirmation token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}" + + users.each do |user| + user.update!(confirmation_token: nil) + end + end + + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE remember_token IS NOT NULL GROUP BY remember_token HAVING count(*) > 1").each do |row| + users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse.drop(1) + @prompt.warn "Unsetting remember token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}" + + users.each do |user| + user.update!(remember_token: nil) + end + end + + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row| + users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse.drop(1) + @prompt.warn "Unsetting password reset token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}" + + users.each do |user| + user.update!(reset_password_token: nil) + end + end + + @prompt.say 'Restoring users indexes…' + ActiveRecord::Base.connection.add_index :users, ['confirmation_token'], name: 'index_users_on_confirmation_token', unique: true + ActiveRecord::Base.connection.add_index :users, ['email'], name: 'index_users_on_email', unique: true + ActiveRecord::Base.connection.add_index :users, ['remember_token'], name: 'index_users_on_remember_token', unique: true + ActiveRecord::Base.connection.add_index :users, ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true + end + + def deduplicate_account_domain_blocks! + remove_index_if_exists!(:account_domain_blocks, 'index_account_domain_blocks_on_account_id_and_domain') + + @prompt.say 'Removing duplicate account domain blocks…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_domain_blocks GROUP BY account_id, domain HAVING count(*) > 1").each do |row| + AccountDomainBlock.where(id: row['ids'].split(',').drop(1)).delete_all + end + + @prompt.say 'Restoring account domain blocks indexes…' + ActiveRecord::Base.connection.add_index :account_domain_blocks, ['account_id', 'domain'], name: 'index_account_domain_blocks_on_account_id_and_domain', unique: true + end + + def deduplicate_account_identity_proofs! + remove_index_if_exists!(:account_identity_proofs, 'index_account_proofs_on_account_and_provider_and_username') + + @prompt.say 'Removing duplicate account identity proofs…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_identity_proofs GROUP BY account_id, provider, provider_username HAVING count(*) > 1").each do |row| + AccountIdentityProof.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring account identity proofs indexes…' + ActiveRecord::Base.connection.add_index :account_identity_proofs, ['account_id', 'provider', 'provider_username'], name: 'index_account_proofs_on_account_and_provider_and_username', unique: true + end + + def deduplicate_announcement_reactions! + return unless ActiveRecord::Base.connection.table_exists?(:announcement_reactions) + + remove_index_if_exists!(:announcement_reactions, 'index_announcement_reactions_on_account_id_and_announcement_id') + + @prompt.say 'Removing duplicate account identity proofs…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM announcement_reactions GROUP BY account_id, announcement_id, name HAVING count(*) > 1").each do |row| + AnnouncementReaction.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring announcement_reactions indexes…' + ActiveRecord::Base.connection.add_index :announcement_reactions, ['account_id', 'announcement_id', 'name'], name: 'index_announcement_reactions_on_account_id_and_announcement_id', unique: true + end + + def deduplicate_conversations! + remove_index_if_exists!(:conversations, 'index_conversations_on_uri') + + @prompt.say 'Deduplicating conversations…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM conversations WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row| + conversations = Conversation.where(id: row['ids'].split(',')).sort_by(&:id).reverse + + ref_conversation = conversations.shift + + conversations.each do |other| + merge_conversations!(ref_conversation, other) + other.destroy + end + end + + @prompt.say 'Restoring conversations indexes…' + ActiveRecord::Base.connection.add_index :conversations, ['uri'], name: 'index_conversations_on_uri', unique: true + end + + def deduplicate_custom_emojis! + remove_index_if_exists!(:custom_emojis, 'index_custom_emojis_on_shortcode_and_domain') + + @prompt.say 'Deduplicating custom_emojis…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emojis GROUP BY shortcode, domain HAVING count(*) > 1").each do |row| + emojis = CustomEmoji.where(id: row['ids'].split(',')).sort_by(&:id).reverse + + ref_emoji = emojis.shift + + emojis.each do |other| + merge_custom_emojis!(ref_emoji, other) + other.destroy + end + end + + @prompt.say 'Restoring custom_emojis indexes…' + ActiveRecord::Base.connection.add_index :custom_emojis, ['shortcode', 'domain'], name: 'index_custom_emojis_on_shortcode_and_domain', unique: true + end + + def deduplicate_custom_emoji_categories! + remove_index_if_exists!(:custom_emoji_categories, 'index_custom_emoji_categories_on_name') + + @prompt.say 'Deduplicating custom_emoji_categories…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emoji_categories GROUP BY name HAVING count(*) > 1").each do |row| + categories = CustomEmojiCategory.where(id: row['ids'].split(',')).sort_by(&:id).reverse + + ref_category = categories.shift + + categories.each do |other| + merge_custom_emoji_categories!(ref_category, other) + other.destroy + end + end + + @prompt.say 'Restoring custom_emoji_categories indexes…' + ActiveRecord::Base.connection.add_index :custom_emoji_categories, ['name'], name: 'index_custom_emoji_categories_on_name', unique: true + end + + def deduplicate_domain_allows! + remove_index_if_exists!(:domain_allows, 'index_domain_allows_on_domain') + + @prompt.say 'Deduplicating domain_allows…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_allows GROUP BY domain HAVING count(*) > 1").each do |row| + DomainAllow.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring domain_allows indexes…' + ActiveRecord::Base.connection.add_index :domain_allows, ['domain'], name: 'index_domain_allows_on_domain', unique: true + end + + def deduplicate_domain_blocks! + remove_index_if_exists!(:domain_blocks, 'index_domain_blocks_on_domain') + + @prompt.say 'Deduplicating domain_allows…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row| + domain_blocks = DomainBlock.where(id: row['ids'].split(',')).by_severity.reverse.to_a + + reject_media = domain_blocks.any?(&:reject_media?) + reject_reports = domain_blocks.any?(&:reject_reports?) + + reference_block = domain_blocks.shift + + private_comment = domain_blocks.reduce(reference_block.private_comment.presence) { |a, b| a || b.private_comment.presence } + public_comment = domain_blocks.reduce(reference_block.public_comment.presence) { |a, b| a || b.public_comment.presence } + + reference_block.update!(reject_media: reject_media, reject_reports: reject_reports, private_comment: private_comment, public_comment: public_comment) + + domain_blocks.each(&:destroy) + end + + @prompt.say 'Restoring domain_blocks indexes…' + ActiveRecord::Base.connection.add_index :domain_blocks, ['domain'], name: 'index_domain_blocks_on_domain', unique: true + end + + def deduplicate_unavailable_domains! + return unless ActiveRecord::Base.connection.table_exists?(:unavailable_domains) + + remove_index_if_exists!(:unavailable_domains, 'index_unavailable_domains_on_domain') + + @prompt.say 'Deduplicating unavailable_domains…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM unavailable_domains GROUP BY domain HAVING count(*) > 1").each do |row| + UnavailableDomain.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring domain_allows indexes…' + ActiveRecord::Base.connection.add_index :unavailable_domains, ['domain'], name: 'index_unavailable_domains_on_domain', unique: true + end + + def deduplicate_email_domain_blocks! + remove_index_if_exists!(:email_domain_blocks, 'index_email_domain_blocks_on_domain') + + @prompt.say 'Deduplicating email_domain_blocks…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM email_domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row| + domain_blocks = EmailDomainBlock.where(id: row['ids'].split(',')).sort_by { |b| b.parent.nil? ? 1 : 0 }.to_a + domain_blocks.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring email_domain_blocks indexes…' + ActiveRecord::Base.connection.add_index :email_domain_blocks, ['domain'], name: 'index_email_domain_blocks_on_domain', unique: true + end + + def deduplicate_media_attachments! + remove_index_if_exists!(:media_attachments, 'index_media_attachments_on_shortcode') + + @prompt.say 'Deduplicating media_attachments…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM media_attachments WHERE shortcode IS NOT NULL GROUP BY shortcode HAVING count(*) > 1").each do |row| + MediaAttachment.where(id: row['ids'].split(',').drop(1)).update_all(shortcode: nil) + end + + @prompt.say 'Restoring media_attachments indexes…' + ActiveRecord::Base.connection.add_index :media_attachments, ['shortcode'], name: 'index_media_attachments_on_shortcode', unique: true + end + + def deduplicate_preview_cards! + remove_index_if_exists!(:preview_cards, 'index_preview_cards_on_url') + + @prompt.say 'Deduplicating preview_cards…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM preview_cards GROUP BY url HAVING count(*) > 1").each do |row| + PreviewCard.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring preview_cards indexes…' + ActiveRecord::Base.connection.add_index :preview_cards, ['url'], name: 'index_preview_cards_on_url', unique: true + end + + def deduplicate_statuses! + remove_index_if_exists!(:statuses, 'index_statuses_on_uri') + + @prompt.say 'Deduplicating statuses…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM statuses WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row| + statuses = Status.where(id: row['ids'].split(',')).sort_by(&:id) + ref_status = statuses.shift + statuses.each do |status| + merge_statuses!(ref_status, status) if status.account_id == ref_status.account_id + status.destroy + end + end + + @prompt.say 'Restoring statuses indexes…' + ActiveRecord::Base.connection.add_index :statuses, ['uri'], name: 'index_statuses_on_uri', unique: true + end + + def deduplicate_tags! + remove_index_if_exists!(:tags, 'index_tags_on_name_lower') + + @prompt.say 'Deduplicating tags…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM tags GROUP BY lower((name)::text) HAVING count(*) > 1").each do |row| + tags = Tag.where(id: row['ids'].split(',')).sort_by { |t| [t.usable?, t.trendable?, t.listable?].count(false) } + ref_tag = tags.shift + tags.each do |tag| + merge_tags!(ref_tag, tag) + tag.destroy + end + end + + @prompt.say 'Restoring tags indexes…' + ActiveRecord::Base.connection.add_index :tags, 'lower((name)::text)', name: 'index_tags_on_name_lower', unique: true + end + + def deduplicate_webauthn_credentials! + return unless ActiveRecord::Base.connection.table_exists?(:webauthn_credentials) + + remove_index_if_exists!(:webauthn_credentials, 'index_webauthn_credentials_on_external_id') + + @prompt.say 'Deduplicating webauthn_credentials…' + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webauthn_credentials GROUP BY external_id HAVING count(*) > 1").each do |row| + WebauthnCredential.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy) + end + + @prompt.say 'Restoring webauthn_credentials indexes…' + ActiveRecord::Base.connection.add_index :webauthn_credentials, ['external_id'], name: 'index_webauthn_credentials_on_external_id', unique: true + end + + def deduplicate_local_accounts!(accounts) + accounts = accounts.sort_by(&:id).reverse + + @prompt.warn "Multiple local accounts were found for username '#{accounts.first.username}'." + @prompt.warn 'All those accounts are distinct accounts but only the most recently-created one is fully-functionnal.' + + accounts.each_with_index do |account, idx| + @prompt.say '%2d. %s: created at: %s; updated at: %s; last logged in at: %s; statuses: %5d; last status at: %s' % [idx, account.username, account.created_at, account.updated_at, account.user&.last_sign_in_at&.to_s || 'N/A', account.account_stat&.statuses_count || 0, account.account_stat&.last_status_at || 'N/A'] + end + + @prompt.say 'Please chose the one to keep unchanged, other ones will be automatically renamed.' + + ref_id = @prompt.ask('Account to keep unchanged:') do |q| + q.required true + q.default 0 + q.convert :int + end + + accounts.delete_at(ref_id) + + i = 0 + accounts.each do |account| + i += 1 + username = account.username + "_#{i}" + + while Account.local.exists?(username: username) + i += 1 + username = account.username + "_#{i}" + end + + account.update!(username: username) + end + end + + def deduplicate_remote_accounts!(accounts) + accounts = accounts.sort_by(&:updated_at).reverse + + reference_account = accounts.shift + + accounts.each do |other_account| + if other_account.public_key == reference_account.public_key + # The accounts definitely point to the same resource, so + # it's safe to re-attribute content and relationships + merge_accounts!(reference_account, other_account) + end + + other_account.destroy + end + end + + def merge_accounts!(main_account, duplicate_account) + # Since it's the same remote resource, the remote resource likely + # already believes we are following/blocking, so it's safe to + # re-attribute the relationships too. However, during the presence + # of the index bug users could have *also* followed the reference + # account already, therefore mass update will not work and we need + # to check for (and skip past) uniqueness errors + owned_classes = [ + Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite, + Follow, FollowRequest, Block, Mute, AccountIdentityProof, + AccountModerationNote, AccountPin, AccountStat, ListAccount, + PollVote, Mention + ] + owned_classes.each do |klass| + klass.where(account_id: duplicate_account.id).find_each do |record| + begin + record.update_attribute(:account_id, main_account.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + + target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin] + target_classes.each do |klass| + klass.where(target_account_id: duplicate_account.id).find_each do |record| + begin + record.update_attribute(:target_account_id, main_account.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + end + + def merge_conversations!(main_conv, duplicate_conv) + owned_classes = [ConversationMute, AccountConversation] + owned_classes.each do |klass| + klass.where(conversation_id: duplicate_conv.id).find_each do |record| + begin + record.update_attribute(:account_id, main_conv.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + end + + def merge_custom_emojis!(main_emoji, duplicate_emoji) + owned_classes = [AnnouncementReaction] + owned_classes.each do |klass| + klass.where(custom_emoji_id: duplicate_emoji.id).update_all(custom_emoji_id: main_emoji.id) + end + end + + def merge_custom_emoji_categories!(main_category, duplicate_category) + owned_classes = [CustomEmoji] + owned_classes.each do |klass| + klass.where(category_id: duplicate_category.id).update_all(category_id: main_category.id) + end + end + + def merge_statuses!(main_status, duplicate_status) + owned_classes = [Favourite, Mention, Poll] + owned_classes << Bookmark if ActiveRecord::Base.connection.table_exists?(:bookmarks) + owned_classes.each do |klass| + klass.where(status_id: duplicate_status.id).find_each do |record| + begin + record.update_attribute(:status_id, main_status.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + + StatusPin.where(account_id: main_status.account_id, status_id: duplicate_status.id).find_each do |record| + begin + record.update_attribute(:status_id, main_status.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + + Status.where(in_reply_to_id: duplicate_status.id).find_each do |record| + begin + record.update_attribute(:in_reply_to_id, main_status.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + + Status.where(reblog_of_id: duplicate_status.id).find_each do |record| + begin + record.update_attribute(:reblog_of_id, main_status.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + + def merge_tags!(main_tag, duplicate_tag) + [FeaturedTag].each do |klass| + klass.where(tag_id: duplicate_tag.id).find_each do |record| + begin + record.update_attribute(:tag_id, main_tag.id) + rescue ActiveRecord::RecordNotUnique + next + end + end + end + end + + def find_duplicate_accounts + ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM accounts GROUP BY lower(username), COALESCE(lower(domain), '') HAVING count(*) > 1") + end + + def remove_index_if_exists!(table, name) + ActiveRecord::Base.connection.remove_index(table, name: name) + rescue ArgumentError + nil + rescue ActiveRecord::StatementInvalid + nil + end + end +end diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index b76e90131..199155107 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -48,6 +48,17 @@ namespace :db do end end + task :post_migration_hook do + at_exit do + unless %w(C POSIX).include?(ActiveRecord::Base.connection.execute('SELECT datcollate FROM pg_database WHERE datname = current_database();').first['datcollate']) + Rails.logger.warn 'WARNING: Your database is using an unsafe collation setting, which might result in index corruption.' + Rails.logger.warn 'WARNING: See https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#am-i-affected' + end + end + end + + Rake::Task['db:migrate'].enhance(['db:post_migration_hook']) + # Before we load the schema, define the timestamp_id function. # Idiomatically, we might do this in a migration, but then it # wouldn't end up in schema.rb, so we'd need to figure out a way to From df1653174be233f2737d8ec281325dee54011947 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 19 Nov 2020 17:38:06 +0100 Subject: [PATCH 217/422] Add cache buster feature for media files (#15155) Nginx can be configured to bypass proxy cache when a special header is in the request. If the response is cacheable, it will replace the cache for that request. Proxy caching of media files is desirable when using object storage as a way of minimizing bandwidth costs, but has the drawback of leaving deleted media files for a configured amount of cache time. A cache buster can make those media files immediately unavailable. This especially makes sense when suspending and unsuspending an account. --- app/lib/cache_buster.rb | 28 +++++++++++++++++++++++ app/services/suspend_account_service.rb | 2 ++ app/services/unsuspend_account_service.rb | 2 ++ app/workers/cache_buster_worker.rb | 18 +++++++++++++++ config/initializers/cache_buster.rb | 10 ++++++++ config/initializers/paperclip.rb | 1 - 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 app/lib/cache_buster.rb create mode 100644 app/workers/cache_buster_worker.rb create mode 100644 config/initializers/cache_buster.rb diff --git a/app/lib/cache_buster.rb b/app/lib/cache_buster.rb new file mode 100644 index 000000000..035611518 --- /dev/null +++ b/app/lib/cache_buster.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +class CacheBuster + def initialize(options = {}) + @secret_header = options[:secret_header] || 'Secret-Header' + @secret = options[:secret] || 'True' + end + + def bust(url) + site = Addressable::URI.parse(url).normalized_site + + request_pool.with(site) do |http_client| + build_request(url, http_client).perform + end + end + + private + + def request_pool + RequestPool.current + end + + def build_request(url, http_client) + Request.new(:get, url, http_client: http_client).tap do |request| + request.add_headers(@secret_header => @secret) + end + end +end diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 7c70a6021..19d65280d 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -78,6 +78,8 @@ class SuspendAccountService < BaseService Rails.logger.warn "Tried to change permission on non-existent file #{attachment.path(style)}" end end + + CacheBusterWorker.perform_async(attachment.path(style)) if Rails.configuration.x.cache_buster_enabled end end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index a81d1ac4f..f07a3f053 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -69,6 +69,8 @@ class UnsuspendAccountService < BaseService Rails.logger.warn "Tried to change permission on non-existent file #{attachment.path(style)}" end end + + CacheBusterWorker.perform_async(attachment.path(style)) if Rails.configuration.x.cache_buster_enabled end end end diff --git a/app/workers/cache_buster_worker.rb b/app/workers/cache_buster_worker.rb new file mode 100644 index 000000000..5ad0a44cb --- /dev/null +++ b/app/workers/cache_buster_worker.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CacheBusterWorker + include Sidekiq::Worker + include RoutingHelper + + sidekiq_options queue: 'pull' + + def perform(path) + cache_buster.bust(full_asset_url(path)) + end + + private + + def cache_buster + CacheBuster.new(Rails.configuration.x.cache_buster) + end +end diff --git a/config/initializers/cache_buster.rb b/config/initializers/cache_buster.rb new file mode 100644 index 000000000..227e450f3 --- /dev/null +++ b/config/initializers/cache_buster.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +Rails.application.configure do + config.x.cache_buster_enabled = ENV['CACHE_BUSTER_ENABLED'] == 'true' + + config.x.cache_buster = { + secret_header: ENV['CACHE_BUSTER_SECRET_HEADER'], + secret: ENV['CACHE_BUSTER_SECRET'], + } +end diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index b841d5220..25adcd8d6 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -107,7 +107,6 @@ elsif ENV['SWIFT_ENABLED'] == 'true' else Paperclip::Attachment.default_options.merge!( storage: :filesystem, - use_timestamp: true, path: File.join(ENV.fetch('PAPERCLIP_ROOT_PATH', File.join(':rails_root', 'public', 'system')), ':prefix_path:class', ':attachment', ':id_partition', ':style', ':filename'), url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:prefix_url:class/:attachment/:id_partition/:style/:filename', ) From 2f6831f3187af0dfd9cacd7d4cba5664be7a9cbd Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 19 Nov 2020 17:39:47 +0100 Subject: [PATCH 218/422] Fix sending spurious Rejects when processing remote account deletion (#15104) * Fix sending spurious Rejects when processing remote account deletion * Make skip_side_effects imply skip_activitypub --- app/lib/activitypub/activity/delete.rb | 2 +- app/services/delete_account_service.rb | 5 ++++- app/services/resolve_account_service.rb | 2 +- app/workers/account_deletion_worker.rb | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb index 09b9e5e0e..2e5293b83 100644 --- a/app/lib/activitypub/activity/delete.rb +++ b/app/lib/activitypub/activity/delete.rb @@ -13,7 +13,7 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity def delete_person lock_or_return("delete_in_progress:#{@account.id}") do - DeleteAccountService.new.call(@account, reserve_username: false) + DeleteAccountService.new.call(@account, reserve_username: false, skip_activitypub: true) end end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index de6488c78..778d064de 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -41,6 +41,7 @@ class DeleteAccountService < BaseService # @option [Boolean] :reserve_email Keep user record. Only applicable for local accounts # @option [Boolean] :reserve_username Keep account record # @option [Boolean] :skip_side_effects Side effects are ActivityPub and streaming API payloads + # @option [Boolean] :skip_activitypub Skip sending ActivityPub payloads. Implied by :skip_side_effects # @option [Time] :suspended_at Only applicable when :reserve_username is true def call(account, **options) @account = account @@ -52,6 +53,8 @@ class DeleteAccountService < BaseService @options[:skip_side_effects] = true end + @options[:skip_activitypub] = true if @options[:skip_side_effects] + reject_follows! purge_user! purge_profile! @@ -62,7 +65,7 @@ class DeleteAccountService < BaseService private def reject_follows! - return if @account.local? || !@account.activitypub? + return if @account.local? || !@account.activitypub? || @options[:skip_activitypub] # When deleting a remote account, the account obviously doesn't # actually become deleted on its origin server, i.e. unlike a diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 4783e6d33..c5291fa67 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -145,7 +145,7 @@ class ResolveAccountService < BaseService end def queue_deletion! - AccountDeletionWorker.perform_async(@account.id, reserve_username: false) + AccountDeletionWorker.perform_async(@account.id, reserve_username: false, skip_activitypub: true) end def lock_options diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index 81c3b91ad..98b67419d 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -7,7 +7,8 @@ class AccountDeletionWorker def perform(account_id, options = {}) reserve_username = options.with_indifferent_access.fetch(:reserve_username, true) - DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, reserve_email: false) + skip_activitypub = options.with_indifferent_access.fetch(:skip_activitypub, false) + DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, skip_activitypub: skip_activitypub, reserve_email: false) rescue ActiveRecord::RecordNotFound true end From 8e2530ea16332f389edaeba7e87d7447c077bb00 Mon Sep 17 00:00:00 2001 From: Darius Kazemi Date: Thu, 19 Nov 2020 08:40:18 -0800 Subject: [PATCH 219/422] Mark correctly as read reverse-order announcements (#15070) This fixes a bug in #15065 where the "read" indicator was not getting correctly set. The ID of a dismissed announcement is now correct. --- .../features/getting_started/components/announcements.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index d53bd8055..5bc3abac6 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -396,7 +396,7 @@ class Announcements extends ImmutablePureComponent { _markAnnouncementAsRead () { const { dismissAnnouncement, announcements } = this.props; const { index } = this.state; - const announcement = announcements.get(index); + const announcement = announcements.get(announcements.size - 1 - index); if (!announcement.get('read')) dismissAnnouncement(announcement.get('id')); } From dbe5a961213c76775a46cb06bc7513053b0b4015 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 17:42:47 +0100 Subject: [PATCH 220/422] Bump @testing-library/react from 11.1.1 to 11.2.0 (#15186) Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 11.1.1 to 11.2.0. - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/master/CHANGELOG.md) - [Commits](https://github.com/testing-library/react-testing-library/compare/v11.1.1...v11.2.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 48 +++++++++++++++++++----------------------------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 3129edeb2..d2ea05d0a 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ }, "devDependencies": { "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.1.1", + "@testing-library/react": "^11.2.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", "eslint": "^7.13.0", diff --git a/yarn.lock b/yarn.lock index a36877bb1..aceae8d2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -940,7 +940,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -1304,7 +1304,7 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.3.0", "@jest/types@^26.6.2": +"@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== @@ -1341,19 +1341,19 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.26.4": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.26.5.tgz#804a74fc893bf6da1a7970dbca7b94c2bbfe983d" - integrity sha512-2v/fv0s4keQjJIcD4bjfJMFtvxz5icartxUWdIZVNJR539WD9oxVrvIAPw+3Ydg4RLgxt0rvQx3L9cAjCci0Kg== +"@testing-library/dom@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.27.1.tgz#b760182513357e4448a8461f9565d733a88d71d0" + integrity sha512-AF56RoeUU8bO4DOvLyMI44H3O1LVKZQi2D/m5fNDr+iR4drfOFikTr26hT6IY7YG+l8g69FXsHERa+uThaYYQg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.10.3" + "@babel/runtime" "^7.12.5" "@types/aria-query" "^4.2.0" aria-query "^4.2.2" chalk "^4.1.0" - dom-accessibility-api "^0.5.1" + dom-accessibility-api "^0.5.4" lz-string "^1.4.4" - pretty-format "^26.4.2" + pretty-format "^26.6.2" "@testing-library/jest-dom@^5.11.6": version "5.11.6" @@ -1369,13 +1369,13 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^11.1.1": - version "11.1.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.1.1.tgz#226d8dc7491b702fcaac2d7d88d42892e655893a" - integrity sha512-DT/P2opE9o4NWCd/oIL73b6VF/Xk9AY8iYSstKfz9cXw0XYPQ5IhA/cuYfoN9nU+mAynW8DpAVfEWdM6e7zF6g== +"@testing-library/react@^11.2.0": + version "11.2.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.0.tgz#ce977a76b6342ea95c71ccd6de3012b1635fb559" + integrity sha512-90xKYJzskZ7q/AoSuWraQL4EGZlr75uZvDt3nrO4M+rugN02zjO45tmOBq/JBOgDiMIL1tkhHioKXjJsVaSINA== dependencies: - "@babel/runtime" "^7.12.1" - "@testing-library/dom" "^7.26.4" + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.27.1" "@types/aria-query@^4.2.0": version "4.2.0" @@ -3715,10 +3715,10 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz#ef3cdb5d3f0d599d8f9c8b18df2fb63c9793739d" - integrity sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA== +dom-accessibility-api@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" + integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== dom-helpers@^3.2.1, dom-helpers@^3.4.0: version "3.4.0" @@ -8393,16 +8393,6 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.4.2: - version "26.4.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.2.tgz#d081d032b398e801e2012af2df1214ef75a81237" - integrity sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA== - dependencies: - "@jest/types" "^26.3.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" From 1a9099ca7ca42f5ca855cacc95233856668cbb08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 17:43:35 +0100 Subject: [PATCH 221/422] Bump rubocop from 0.93.1 to 1.3.0 (#15170) Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.93.1 to 1.3.0. - [Release notes](https://github.com/rubocop-hq/rubocop/releases) - [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.93.1...v1.3.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 26bc6fd52..631f1265f 100644 --- a/Gemfile +++ b/Gemfile @@ -139,7 +139,7 @@ group :development do gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.4' gem 'memory_profiler' - gem 'rubocop', '~> 0.93', require: false + gem 'rubocop', '~> 1.3', require: false gem 'rubocop-rails', '~> 2.8', require: false gem 'brakeman', '~> 4.10', require: false gem 'bundler-audit', '~> 0.7', require: false diff --git a/Gemfile.lock b/Gemfile.lock index eaf6ebf1d..558bfc2b8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -532,16 +532,16 @@ GEM rspec-support (3.9.3) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (0.93.1) + rubocop (1.3.0) parallel (~> 1.10) parser (>= 2.7.1.5) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8) rexml - rubocop-ast (>= 0.6.0) + rubocop-ast (>= 1.1.1) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (0.8.0) + rubocop-ast (1.1.1) parser (>= 2.7.1.5) rubocop-rails (2.8.1) activesupport (>= 4.2.0) @@ -775,7 +775,7 @@ DEPENDENCIES rspec-rails (~> 4.0) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.4) - rubocop (~> 0.93) + rubocop (~> 1.3) rubocop-rails (~> 2.8) ruby-progressbar (~> 1.10) sanitize (~> 5.2) From 67ace1d8907f7534ab827ed262a22df4c3de1ba6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 17:43:58 +0100 Subject: [PATCH 222/422] Bump omniauth-cas from 1.1.1 to 2.0.0 (#15165) Bumps [omniauth-cas](https://github.com/dlindahl/omniauth-cas) from 1.1.1 to 2.0.0. - [Release notes](https://github.com/dlindahl/omniauth-cas/releases) - [Changelog](https://github.com/dlindahl/omniauth-cas/blob/master/CHANGELOG.md) - [Commits](https://github.com/dlindahl/omniauth-cas/compare/v1.1.1...v2.0.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 631f1265f..330222922 100644 --- a/Gemfile +++ b/Gemfile @@ -44,7 +44,7 @@ group :pam_authentication, optional: true do end gem 'net-ldap', '~> 0.16' -gem 'omniauth-cas', '~> 1.1' +gem 'omniauth-cas', '~> 2.0' gem 'omniauth-saml', '~> 1.10' gem 'omniauth', '~> 1.9' diff --git a/Gemfile.lock b/Gemfile.lock index 558bfc2b8..dffd7d791 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -371,7 +371,7 @@ GEM omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) - omniauth-cas (1.1.1) + omniauth-cas (2.0.0) addressable (~> 2.3) nokogiri (~> 1.5) omniauth (~> 1.2) @@ -741,7 +741,7 @@ DEPENDENCIES nsa (~> 0.2) oj (~> 3.10) omniauth (~> 1.9) - omniauth-cas (~> 1.1) + omniauth-cas (~> 2.0) omniauth-saml (~> 1.10) ox (~> 2.13) paperclip (~> 6.0) From 541b9f8c1c2c987544b00f64792aa37ee7bd25a5 Mon Sep 17 00:00:00 2001 From: Daigo 3 Dango Date: Thu, 19 Nov 2020 16:46:46 +0000 Subject: [PATCH 223/422] Use Ruby 2.7.2 (#15150) thwait and e2mmap are no longer needed in Gemfile. Gems properly require those. --- .ruby-version | 2 +- Dockerfile | 2 +- Gemfile | 3 --- Gemfile.lock | 2 -- 4 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.ruby-version b/.ruby-version index 338a5b5d8..37c2961c2 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.6.6 +2.7.2 diff --git a/Dockerfile b/Dockerfile index c52f89fdc..57d061fd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,7 @@ RUN apt update && \ cd .. && rm -rf jemalloc-$JE_VER $JE_VER.tar.gz # Install Ruby -ENV RUBY_VER="2.6.6" +ENV RUBY_VER="2.7.2" ENV CPPFLAGS="-I/opt/jemalloc/include" ENV LDFLAGS="-L/opt/jemalloc/lib/" RUN apt update && \ diff --git a/Gemfile b/Gemfile index 330222922..30b5435b5 100644 --- a/Gemfile +++ b/Gemfile @@ -11,9 +11,6 @@ gem 'sprockets', '~> 3.7.2' gem 'thor', '~> 1.0' gem 'rack', '~> 2.2.3' -gem 'thwait', '~> 0.2.0' -gem 'e2mmap', '~> 0.1.0' - gem 'hamlit-rails', '~> 0.2' gem 'pg', '~> 1.2' gem 'makara', '~> 0.4' diff --git a/Gemfile.lock b/Gemfile.lock index dffd7d791..b333c4e99 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -704,7 +704,6 @@ DEPENDENCIES discard (~> 1.2) doorkeeper (~> 5.4) dotenv-rails (~> 2.7) - e2mmap (~> 0.1.0) ed25519 (~> 1.2) fabrication (~> 2.21) faker (~> 2.14) @@ -793,7 +792,6 @@ DEPENDENCIES streamio-ffmpeg (~> 3.0) strong_migrations (~> 0.7) thor (~> 1.0) - thwait (~> 0.2.0) tty-prompt (~> 0.22) twitter-text (~> 1.14) tzinfo-data (~> 1.2020) From 022d2353a77edaddd6a681405521f27f5fac11b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 17:47:20 +0100 Subject: [PATCH 224/422] Bump webpack-cli from 3.3.12 to 4.2.0 (#15123) Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.3.12 to 4.2.0. - [Release notes](https://github.com/webpack/webpack-cli/releases) - [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-cli/compare/v3.3.12...webpack-cli@4.2.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 245 +++++++++++++++++++++++++++------------------------ 2 files changed, 130 insertions(+), 117 deletions(-) diff --git a/package.json b/package.json index d2ea05d0a..28c630610 100644 --- a/package.json +++ b/package.json @@ -165,7 +165,7 @@ "webpack": "^4.44.2", "webpack-assets-manifest": "^3.1.1", "webpack-bundle-analyzer": "^4.1.0", - "webpack-cli": "^3.3.12", + "webpack-cli": "^4.2.0", "webpack-merge": "^5.4.0", "wicg-inert": "^3.1.0" }, diff --git a/yarn.lock b/yarn.lock index aceae8d2f..65cd28696 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1697,6 +1697,18 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@webpack-cli/info@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.1.0.tgz#c596d5bc48418b39df00c5ed7341bf0f102dbff1" + integrity sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.1.0.tgz#13ad38f89b6e53d1133bac0006a128217a6ebf92" + integrity sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1947,6 +1959,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-back@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" + integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2978,6 +2995,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-line-usage@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" + integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== + dependencies: + array-back "^4.0.1" + chalk "^2.4.2" + table-layout "^1.0.1" + typical "^5.2.0" + commander@^2.20.0, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3197,7 +3224,7 @@ cross-env@^7.0.2: dependencies: cross-spawn "^7.0.1" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3541,6 +3568,11 @@ deep-extend@^0.5.1: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3634,11 +3666,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -3889,7 +3916,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: +enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -3898,7 +3925,7 @@ enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3910,6 +3937,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== +envinfo@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" + integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -4380,10 +4412,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== +execa@^4.0.0, execa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -4423,13 +4455,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - expect@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" @@ -4698,16 +4723,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - flat-cache@^1.2.1: version "1.3.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" @@ -4965,42 +4980,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -5217,13 +5196,6 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -5497,11 +5469,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - inquirer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" @@ -5538,10 +5505,10 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== intersection-observer@^0.11.0: version "0.11.0" @@ -5695,6 +5662,13 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" +is-core-module@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -5939,7 +5913,7 @@ is-url@^1.2.4: resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -6951,7 +6925,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7743,11 +7717,6 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parse5@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" @@ -8975,6 +8944,13 @@ readline2@^1.0.1: is-fullwidth-code-point "^1.0.0" mute-stream "0.0.5" +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -9010,6 +8986,11 @@ redis@^3.0.2: redis-errors "^1.2.0" redis-parser "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + redux-immutable@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/redux-immutable/-/redux-immutable-4.0.0.tgz#3a1a32df66366462b63691f0e1dc35e472bbc9f3" @@ -9226,14 +9207,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -9277,6 +9250,14 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.1 is-core-module "^2.0.0" path-parse "^1.0.6" +resolve@^1.9.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -10254,6 +10235,16 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table-layout@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" + integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -10624,6 +10615,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typical@^5.0.0, typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -10819,10 +10815,10 @@ uuid@^8.3.0, uuid@^8.3.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== v8-to-istanbul@^7.0.0: version "7.0.0" @@ -10976,22 +10972,24 @@ webpack-bundle-analyzer@^4.1.0: opener "^1.5.2" ws "^7.3.1" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.2.0.tgz#10a09030ad2bd4d8b0f78322fba6ea43ec56aaaa" + integrity sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + "@webpack-cli/info" "^1.1.0" + "@webpack-cli/serve" "^1.1.0" + colorette "^1.2.1" + command-line-usage "^6.1.0" + commander "^6.2.0" + enquirer "^2.3.6" + execa "^4.1.0" + import-local "^3.0.2" + interpret "^2.2.0" + leven "^3.1.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^4.2.2" webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -11051,6 +11049,13 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + webpack-merge@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.4.0.tgz#81bef0a7d23fc1e6c24b06ad8bf22ddeb533a3a3" @@ -11143,7 +11148,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11179,6 +11184,14 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrapjs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" + integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.0.0" + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" From 96c1e7132971877fba308c51cd42306f0b1bf166 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 19 Nov 2020 17:48:13 +0100 Subject: [PATCH 225/422] Add import/export feature for bookmarks (#14956) * Add ability to export bookmarks * Add support for importing bookmarks * Add bookmark import tests * Add bookmarks export test --- .../settings/exports/bookmarks_controller.rb | 19 ++++++++ app/models/export.rb | 12 +++++ app/models/import.rb | 2 +- app/services/import_service.rb | 45 +++++++++++++++++++ app/views/settings/exports/show.html.haml | 4 ++ config/locales/en.yml | 2 + config/routes.rb | 1 + .../exports/bookmarks_controller_specs.rb | 17 +++++++ spec/fixtures/files/bookmark-imports.txt | 4 ++ spec/services/import_service_spec.rb | 42 +++++++++++++++++ 10 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 app/controllers/settings/exports/bookmarks_controller.rb create mode 100644 spec/controllers/settings/exports/bookmarks_controller_specs.rb create mode 100644 spec/fixtures/files/bookmark-imports.txt diff --git a/app/controllers/settings/exports/bookmarks_controller.rb b/app/controllers/settings/exports/bookmarks_controller.rb new file mode 100644 index 000000000..c12e2f147 --- /dev/null +++ b/app/controllers/settings/exports/bookmarks_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Settings + module Exports + class BookmarksController < BaseController + include ExportControllerConcern + + def index + send_export_file + end + + private + + def export_data + @export.to_bookmarks_csv + end + end + end +end diff --git a/app/models/export.rb b/app/models/export.rb index cab01f11a..5216eed5e 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -9,6 +9,14 @@ class Export @account = account end + def to_bookmarks_csv + CSV.generate do |csv| + account.bookmarks.includes(:status).reorder(id: :desc).each do |bookmark| + csv << [ActivityPub::TagManager.instance.uri_for(bookmark.status)] + end + end + end + def to_blocked_accounts_csv to_csv account.blocking.select(:username, :domain) end @@ -55,6 +63,10 @@ class Export account.statuses_count end + def total_bookmarks + account.bookmarks.count + end + def total_follows account.following_count end diff --git a/app/models/import.rb b/app/models/import.rb index c78a04d07..702453289 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -24,7 +24,7 @@ class Import < ApplicationRecord belongs_to :account - enum type: [:following, :blocking, :muting, :domain_blocking] + enum type: [:following, :blocking, :muting, :domain_blocking, :bookmarks] validates :type, presence: true diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 7e55452de..288e47f1e 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -18,6 +18,8 @@ class ImportService < BaseService import_mutes! when 'domain_blocking' import_domain_blocks! + when 'bookmarks' + import_bookmarks! end end @@ -88,6 +90,39 @@ class ImportService < BaseService end end + def import_bookmarks! + parse_import_data!(['#uri']) + items = @data.take(ROWS_PROCESSING_LIMIT).map { |row| row['#uri'].strip } + + if @import.overwrite? + presence_hash = items.each_with_object({}) { |id, mapping| mapping[id] = true } + + @account.bookmarks.find_each do |bookmark| + if presence_hash[bookmark.status.uri] + items.delete(bookmark.status.uri) + else + bookmark.destroy! + end + end + end + + statuses = items.map do |uri| + status = ActivityPub::TagManager.instance.uri_to_resource(uri, Status) + next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri) + + status || ActivityPub::FetchRemoteStatusService.new.call(uri) + end.compact + + account_ids = statuses.map(&:account_id) + preloaded_relations = relations_map_for_account(@account, account_ids) + + statuses.keep_if { |status| StatusPolicy.new(@account, status, preloaded_relations).show? } + + statuses.each do |status| + @account.bookmarks.find_or_create_by!(account: @account, status: status) + end + end + def parse_import_data!(default_headers) data = CSV.parse(import_data, headers: true) data = CSV.parse(import_data, headers: default_headers) unless data.headers&.first&.strip&.include?(' ') @@ -101,4 +136,14 @@ class ImportService < BaseService def follow_limit FollowLimitValidator.limit_for_account(@account) end + + def relations_map_for_account(account, account_ids) + { + blocking: {}, + blocked_by: Account.blocked_by_map(account_ids, account.id), + muting: {}, + following: Account.following_map(account_ids, account.id), + domain_blocking_by_domain: {}, + } + end end diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 0bb80e937..18b52c0c2 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -36,6 +36,10 @@ %th= t('exports.domain_blocks') %td= number_with_delimiter @export.total_domain_blocks %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv) + %tr + %th= t('exports.bookmarks') + %td= number_with_delimiter @export.total_bookmarks + %td= table_link_to 'download', t('bookmarks.csv'), settings_exports_bookmarks_path(format: :csv) %hr.spacer/ diff --git a/config/locales/en.yml b/config/locales/en.yml index bec099082..263ffcdc7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -842,6 +842,7 @@ en: request: Request your archive size: Size blocks: You block + bookmarks: Bookmarks csv: CSV domain_blocks: Domain blocks lists: Lists @@ -918,6 +919,7 @@ en: success: Your data was successfully uploaded and will now be processed in due time types: blocking: Blocking list + bookmarks: Bookmarks domain_blocking: Domain blocking list following: Following list muting: Muting list diff --git a/config/routes.rb b/config/routes.rb index 54c76799c..a534b433e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -125,6 +125,7 @@ Rails.application.routes.draw do resources :mutes, only: :index, controller: :muted_accounts resources :lists, only: :index, controller: :lists resources :domain_blocks, only: :index, controller: :blocked_domains + resources :bookmarks, only: :index, controller: :bookmarks end resources :two_factor_authentication_methods, only: [:index] do diff --git a/spec/controllers/settings/exports/bookmarks_controller_specs.rb b/spec/controllers/settings/exports/bookmarks_controller_specs.rb new file mode 100644 index 000000000..85761577b --- /dev/null +++ b/spec/controllers/settings/exports/bookmarks_controller_specs.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +describe Settings::Exports::BookmarksController do + render_views + + describe 'GET #index' do + it 'returns a csv of the bookmarked toots' do + user = Fabricate(:user) + user.account.bookmarks.create!(status: Fabricate(:status, uri: 'https://foo.bar/statuses/1312')) + + sign_in user, scope: :user + get :index, format: :csv + + expect(response.body).to eq "https://foo.bar/statuses/1312\n" + end + end +end diff --git a/spec/fixtures/files/bookmark-imports.txt b/spec/fixtures/files/bookmark-imports.txt new file mode 100644 index 000000000..7cc8901a0 --- /dev/null +++ b/spec/fixtures/files/bookmark-imports.txt @@ -0,0 +1,4 @@ +https://example.com/statuses/1312 +https://local.com/users/foo/statuses/42 +https://unknown-remote.com/users/bar/statuses/1 +https://example.com/statuses/direct diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb index b1909d4fd..764225aa7 100644 --- a/spec/services/import_service_spec.rb +++ b/spec/services/import_service_spec.rb @@ -1,6 +1,8 @@ require 'rails_helper' RSpec.describe ImportService, type: :service do + include RoutingHelper + let!(:account) { Fabricate(:account, locked: false) } let!(:bob) { Fabricate(:account, username: 'bob', locked: false) } let!(:eve) { Fabricate(:account, username: 'eve', domain: 'example.com', locked: false, protocol: :activitypub, inbox_url: 'https://example.com/inbox') } @@ -169,4 +171,44 @@ RSpec.describe ImportService, type: :service do end end end + + context 'import bookmarks' do + subject { ImportService.new } + + let(:csv) { attachment_fixture('bookmark-imports.txt') } + + around(:each) do |example| + local_before = Rails.configuration.x.local_domain + web_before = Rails.configuration.x.web_domain + Rails.configuration.x.local_domain = 'local.com' + Rails.configuration.x.web_domain = 'local.com' + example.run + Rails.configuration.x.web_domain = web_before + Rails.configuration.x.local_domain = local_before + end + + let(:local_account) { Fabricate(:account, username: 'foo', domain: '') } + let!(:remote_status) { Fabricate(:status, uri: 'https://example.com/statuses/1312') } + let!(:direct_status) { Fabricate(:status, uri: 'https://example.com/statuses/direct', visibility: :direct) } + + before do + service = double + allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service) + allow(service).to receive(:call).with('https://unknown-remote.com/users/bar/statuses/1') do + Fabricate(:status, uri: 'https://unknown-remote.com/users/bar/statuses/1') + end + end + + describe 'when no bookmarks are set' do + let(:import) { Import.create(account: account, type: 'bookmarks', data: csv) } + it 'adds the toots the user has access to to bookmarks' do + local_status = Fabricate(:status, account: local_account, uri: 'https://local.com/users/foo/statuses/42', id: 42, local: true) + subject.call(import) + expect(account.bookmarks.map(&:status).map(&:id)).to include(local_status.id) + expect(account.bookmarks.map(&:status).map(&:id)).to include(remote_status.id) + expect(account.bookmarks.map(&:status).map(&:id)).not_to include(direct_status.id) + expect(account.bookmarks.count).to eq 3 + end + end + end end From 8b8004a9626442ae31e4dffd79e874e9cde050c6 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 19 Nov 2020 19:52:06 +0100 Subject: [PATCH 226/422] Fix webfinger redirect handling in ResolveAccountService (#15187) * Fix webfinger redirect handling in ResolveAccountService ResolveAccountService#process_webfinger! handled a one-step webfinger redirection, but only accepting the result if it matched the exact URI passed as input, defeating the point of a redirection check. Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`, updating the resulting `acct:` URI with the result of the first webfinger query. * Add tests --- app/services/resolve_account_service.rb | 23 +++++--- spec/services/resolve_account_service_spec.rb | 52 ++++++++++++++++--- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index c5291fa67..74b0b82d0 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -29,6 +29,7 @@ class ResolveAccountService < BaseService # At this point we are in need of a Webfinger query, which may # yield us a different username/domain through a redirect process_webfinger!(@uri) + @domain = nil if TagManager.instance.local_domain?(@domain) # Because the username/domain pair may be different than what # we already checked, we need to check if we've already got @@ -78,25 +79,31 @@ class ResolveAccountService < BaseService @uri = [@username, @domain].compact.join('@') end - def process_webfinger!(uri, redirected = false) + def process_webfinger!(uri) @webfinger = webfinger!("acct:#{uri}") - confirmed_username, confirmed_domain = @webfinger.subject.gsub(/\Aacct:/, '').split('@') + confirmed_username, confirmed_domain = split_acct(@webfinger.subject) if confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? @username = confirmed_username @domain = confirmed_domain - @uri = uri - elsif !redirected - return process_webfinger!("#{confirmed_username}@#{confirmed_domain}", true) - else - raise Webfinger::RedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" + return end - @domain = nil if TagManager.instance.local_domain?(@domain) + # Account doesn't match, so it may have been redirected + @webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + @username, @domain = split_acct(@webfinger.subject) + + unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? + raise Webfinger::RedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" + end rescue Webfinger::GoneError @gone = true end + def split_acct(acct) + acct.gsub(/\Aacct:/, '').split('@') + end + def process_account! return unless activitypub_ready? diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index 76cb9ed8d..5bd0ec264 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -4,11 +4,8 @@ RSpec.describe ResolveAccountService, type: :service do subject { described_class.new } before do - stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt')) - stub_request(:get, "https://example.com/.well-known/webfinger?resource=acct:catsrgr8@example.com").to_return(status: 404) stub_request(:get, "https://example.com/.well-known/host-meta").to_return(status: 404) stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt')) - stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:catsrgr8@quitter.no").to_return(status: 404) stub_request(:get, "https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com").to_return(request_fixture('activitypub-webfinger.txt')) stub_request(:get, "https://ap.example.com/users/foo").to_return(request_fixture('activitypub-actor.txt')) stub_request(:get, "https://ap.example.com/users/foo.atom").to_return(request_fixture('activitypub-feed.txt')) @@ -16,12 +13,25 @@ RSpec.describe ResolveAccountService, type: :service do stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:hoge@example.com').to_return(status: 410) end - it 'returns nil if no such user can be resolved via webfinger' do - expect(subject.call('catsrgr8@quitter.no')).to be_nil + context 'when there is an LRDD endpoint but no resolvable account' do + before do + stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt')) + stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:catsrgr8@quitter.no").to_return(status: 404) + end + + it 'returns nil' do + expect(subject.call('catsrgr8@quitter.no')).to be_nil + end end - it 'returns nil if the domain does not have webfinger' do - expect(subject.call('catsrgr8@example.com')).to be_nil + context 'when there is no LRDD endpoint nor resolvable account' do + before do + stub_request(:get, "https://example.com/.well-known/webfinger?resource=acct:catsrgr8@example.com").to_return(status: 404) + end + + it 'returns nil' do + expect(subject.call('catsrgr8@example.com')).to be_nil + end end context 'when webfinger returns http gone' do @@ -48,6 +58,34 @@ RSpec.describe ResolveAccountService, type: :service do end end + context 'with a legitimate webfinger redirection' do + before do + webfinger = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + stub_request(:get, 'https://redirected.example.com/.well-known/webfinger?resource=acct:Foo@redirected.example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'returns new remote account' do + account = subject.call('Foo@redirected.example.com') + + expect(account.activitypub?).to eq true + expect(account.acct).to eq 'foo@ap.example.com' + expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + end + end + + context 'with too many webfinger redirections' do + before do + webfinger = { subject: 'acct:foo@evil.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + stub_request(:get, 'https://redirected.example.com/.well-known/webfinger?resource=acct:Foo@redirected.example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + webfinger2 = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + stub_request(:get, 'https://evil.example.com/.well-known/webfinger?resource=acct:foo@evil.example.com').to_return(body: Oj.dump(webfinger2), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'returns new remote account' do + expect { subject.call('Foo@redirected.example.com') }.to raise_error Webfinger::RedirectError + end + end + context 'with an ActivityPub account' do it 'returns new remote account' do account = subject.call('foo@ap.example.com') From c43f4cd3bbeaf4a6db5aa39477bb0c708422b49b Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 21 Nov 2020 06:18:09 +0100 Subject: [PATCH 227/422] Fix not being able to unfavorite toots one has lost access to (#15192) Fixes #15191 --- .../api/v1/statuses/favourites_controller.rb | 15 +++++++++-- .../v1/statuses/favourites_controller_spec.rb | 25 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/statuses/favourites_controller.rb b/app/controllers/api/v1/statuses/favourites_controller.rb index 7afa822ed..2e21ce6a0 100644 --- a/app/controllers/api/v1/statuses/favourites_controller.rb +++ b/app/controllers/api/v1/statuses/favourites_controller.rb @@ -5,7 +5,7 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController before_action -> { doorkeeper_authorize! :write, :'write:favourites' } before_action :require_user! - before_action :set_status + before_action :set_status, only: [:create] def create FavouriteService.new.call(current_account, @status) @@ -13,8 +13,19 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController end def destroy - UnfavouriteWorker.perform_async(current_account.id, @status.id) + fav = current_account.favourites.find_by(status_id: params[:status_id]) + + if fav + @status = fav.status + UnfavouriteWorker.perform_async(current_account.id, @status.id) + else + @status = Status.find(params[:status_id]) + authorize @status, :show? + end + render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_account.id, favourites_map: { @status.id => false }) + rescue Mastodon::NotPermittedError + not_found end private diff --git a/spec/controllers/api/v1/statuses/favourites_controller_spec.rb b/spec/controllers/api/v1/statuses/favourites_controller_spec.rb index 6e947f5d2..4716ecae3 100644 --- a/spec/controllers/api/v1/statuses/favourites_controller_spec.rb +++ b/spec/controllers/api/v1/statuses/favourites_controller_spec.rb @@ -82,6 +82,31 @@ describe Api::V1::Statuses::FavouritesController do end end + context 'with public status when blocked by its author' do + let(:status) { Fabricate(:status) } + + before do + FavouriteService.new.call(user.account, status) + status.account.block!(user.account) + post :destroy, params: { status_id: status.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'updates the favourite attribute' do + expect(user.account.favourited?(status)).to be false + end + + it 'returns json with updated attributes' do + hash_body = body_as_json + + expect(hash_body[:id]).to eq status.id.to_s + expect(hash_body[:favourited]).to be false + end + end + context 'with private status that was not favourited' do let(:status) { Fabricate(:status, visibility: :private) } From 66832cbf33c0800f53bc0beb5e684053259e2b36 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 21 Nov 2020 21:27:00 +0100 Subject: [PATCH 228/422] Undo outgoing follows when suspending a remote account (#15188) --- app/services/delete_account_service.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 778d064de..9cb80c95a 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -56,6 +56,7 @@ class DeleteAccountService < BaseService @options[:skip_activitypub] = true if @options[:skip_side_effects] reject_follows! + undo_follows! purge_user! purge_profile! purge_content! @@ -79,6 +80,20 @@ class DeleteAccountService < BaseService end end + def undo_follows! + return if @account.local? || !@account.activitypub? || @options[:skip_activitypub] + + # When deleting a remote account, the account obviously doesn't + # actually become deleted on its origin server, but following relationships + # are severed on our end. Therefore, make the remote server aware that the + # follow relationships are severed to avoid confusion and potential issues + # if the remote account gets un-suspended. + + ActivityPub::DeliveryWorker.push_bulk(Follow.where(target_account: @account)) do |follow| + [Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)), follow.account_id, @account.inbox_url] + end + end + def purge_user! return if !@account.local? || @account.user.nil? From f970e1fab6ca5d2334604b86d6e472e64510ea40 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 21 Nov 2020 23:19:04 +0100 Subject: [PATCH 229/422] Fix hardcoded frame rate for frame by frame video navigation in web UI (#15198) --- app/javascript/mastodon/components/status.js | 1 + .../status/components/detailed_status.js | 1 + .../ui/components/focal_point_modal.js | 1 + .../features/ui/components/video_modal.js | 1 + .../mastodon/features/video/index.js | 18 +++++++++++++++++- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index f4ed25f1e..8f288bdf9 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -391,6 +391,7 @@ class Status extends ImmutablePureComponent { {Component => (
); } diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index 58cef1e9d..7fe7ed094 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -12,6 +12,7 @@ import Icon from 'mastodon/components/icon'; import GIFV from 'mastodon/components/gifv'; import { disableSwiping } from 'mastodon/initial_state'; import Footer from 'mastodon/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'mastodon/blurhash'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -21,111 +22,6 @@ const messages = defineMessages({ export const previewState = 'previewMediaModal'; -const digitCharacters = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - '#', - '$', - '%', - '*', - '+', - ',', - '-', - '.', - ':', - ';', - '=', - '?', - '@', - '[', - ']', - '^', - '_', - '{', - '|', - '}', - '~', -]; - -const decode83 = (str) => { - let value = 0; - let c, digit; - - for (let i = 0; i < str.length; i++) { - c = str[i]; - digit = digitCharacters.indexOf(c); - value = value * 83 + digit; - } - - return value; -}; - -const decodeRGB = int => ({ - r: Math.max(0, (int >> 16)), - g: Math.max(0, (int >> 8) & 255), - b: Math.max(0, (int & 255)), -}); - export default @injectIntl class MediaModal extends ImmutablePureComponent { @@ -224,7 +120,7 @@ class MediaModal extends ImmutablePureComponent { const blurhash = media.getIn([index, 'blurhash']); if (blurhash) { - const backgroundColor = decodeRGB(decode83(blurhash.slice(2, 6))); + const backgroundColor = getAverageFromBlurhash(blurhash); onChangeBackgroundColor(backgroundColor); } } diff --git a/app/javascript/mastodon/features/ui/components/video_modal.js b/app/javascript/mastodon/features/ui/components/video_modal.js index 2c3c026c8..2f13a175a 100644 --- a/app/javascript/mastodon/features/ui/components/video_modal.js +++ b/app/javascript/mastodon/features/ui/components/video_modal.js @@ -3,6 +3,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'mastodon/features/video'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import Footer from 'mastodon/features/picture_in_picture/components/footer'; +import { getAverageFromBlurhash } from 'mastodon/blurhash'; export const previewState = 'previewVideoModal'; @@ -17,6 +19,7 @@ export default class VideoModal extends ImmutablePureComponent { defaultVolume: PropTypes.number, }), onClose: PropTypes.func.isRequired, + onChangeBackgroundColor: PropTypes.func.isRequired, }; static contextTypes = { @@ -24,29 +27,35 @@ export default class VideoModal extends ImmutablePureComponent { }; componentDidMount () { - if (this.context.router) { - const history = this.context.router.history; + const { router } = this.context; + const { media, onChangeBackgroundColor, onClose } = this.props; - history.push(history.location.pathname, previewState); + if (router) { + router.history.push(router.history.location.pathname, previewState); + this.unlistenHistory = router.history.listen(() => onClose()); + } + + const backgroundColor = getAverageFromBlurhash(media.get('blurhash')); - this.unlistenHistory = history.listen(() => { - this.props.onClose(); - }); + if (backgroundColor) { + onChangeBackgroundColor(backgroundColor); } } componentWillUnmount () { - if (this.context.router) { + const { router } = this.context; + + if (router) { this.unlistenHistory(); - if (this.context.router.history.location.state === previewState) { - this.context.router.history.goBack(); + if (router.history.location.state === previewState) { + router.history.goBack(); } } } render () { - const { media, onClose } = this.props; + const { media, statusId, onClose } = this.props; const options = this.props.options || {}; return ( @@ -65,6 +74,10 @@ export default class VideoModal extends ImmutablePureComponent { alt={media.get('description')} />
+ +
+ {statusId &&
} +
); } diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index 46eaebd9b..a2dccdfc0 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import { fromJS, is } from 'immutable'; +import { is } from 'immutable'; import { throttle, debounce } from 'lodash'; import classNames from 'classnames'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; @@ -495,25 +495,13 @@ class Video extends React.PureComponent { } handleOpenVideo = () => { - const { src, preview, width, height, alt } = this.props; - - const media = fromJS({ - type: 'video', - url: src, - preview_url: preview, - description: alt, - width, - height, - }); + this.video.pause(); - const options = { + this.props.onOpenVideo({ startTime: this.video.currentTime, autoPlay: !this.state.paused, defaultVolume: this.state.volume, - }; - - this.video.pause(); - this.props.onOpenVideo(media, options); + }); } handleCloseVideo = () => { From 48bef17cc990afda95c4de657f7643c321e62650 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Dec 2020 12:08:30 +0100 Subject: [PATCH 267/422] Fix slow distinct queries where grouped queries are faster (#15287) About 2x speed-up on inboxes query --- app/controllers/accounts_controller.rb | 2 +- app/controllers/admin/statuses_controller.rb | 2 +- app/models/account.rb | 2 +- app/models/form/account_batch.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index ccb5ef8e8..b902ada09 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -81,7 +81,7 @@ class AccountsController < ApplicationController end def account_media_status_ids - @account.media_attachments.attached.reorder(nil).select(:status_id).distinct + @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id) end def no_replies_scope diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index 650195034..d7c192f0d 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -14,7 +14,7 @@ module Admin @statuses = @account.statuses.where(visibility: [:public, :unlisted]) if params[:media] - account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).distinct + account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id) @statuses.merge!(Status.where(id: account_media_status_ids)) end diff --git a/app/models/account.rb b/app/models/account.rb index f794d8a29..ed11a514d 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -443,7 +443,7 @@ class Account < ApplicationRecord end def inboxes - urls = reorder(nil).where(protocol: :activitypub).pluck(Arel.sql("distinct coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url)")) + urls = reorder(nil).where(protocol: :activitypub).group(:preferred_inbox_url).pluck(Arel.sql("coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url) AS preferred_inbox_url")) DeliveryFailureTracker.without_unavailable(urls) end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 882770d7c..26d6d3abf 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -51,7 +51,7 @@ class Form::AccountBatch end def account_domains - accounts.pluck(Arel.sql('distinct domain')).compact + accounts.group(:domain).pluck(:domain).compact end def accounts From 9620ee90be7e04b3616ce4b851abb63dbba7af7f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Dec 2020 19:36:36 +0100 Subject: [PATCH 268/422] Fix unnecessary re-rendering of various components when typing in web UI (#15286) --- app/javascript/mastodon/components/status.js | 8 ++++---- .../mastodon/containers/status_container.js | 9 +++------ .../status/components/detailed_status.js | 9 ++++++--- .../mastodon/features/status/index.js | 19 ++++++++++++------- .../features/ui/components/columns_area.js | 9 +++++++-- app/javascript/mastodon/selectors/index.js | 12 +++++++++++- 6 files changed, 43 insertions(+), 23 deletions(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 22098d57e..18e0e87c8 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -97,7 +97,7 @@ class Status extends ImmutablePureComponent { cachedMediaWidth: PropTypes.number, scrollKey: PropTypes.string, deployPictureInPicture: PropTypes.func, - pictureInPicture: PropTypes.shape({ + pictureInPicture: ImmutablePropTypes.contains({ inUse: PropTypes.bool, available: PropTypes.bool, }), @@ -354,7 +354,7 @@ class Status extends ImmutablePureComponent { status = status.get('reblog'); } - if (pictureInPicture.inUse) { + if (pictureInPicture.get('inUse')) { media = ; } else if (status.get('media_attachments').size > 0) { if (this.props.muted) { @@ -381,7 +381,7 @@ class Status extends ImmutablePureComponent { width={this.props.cachedMediaWidth} height={110} cacheWidth={this.props.cacheMediaWidth} - deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined} + deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} /> )} @@ -404,7 +404,7 @@ class Status extends ImmutablePureComponent { sensitive={status.get('sensitive')} onOpenVideo={this.handleOpenVideo} cacheWidth={this.props.cacheMediaWidth} - deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined} + deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} visible={this.state.showMedia} onToggleVisibility={this.handleToggleMediaVisibility} /> diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index ef520b96a..d6bcb8973 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; import Status from '../components/status'; -import { makeGetStatus } from '../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../selectors'; import { replyCompose, mentionCompose, @@ -54,14 +54,11 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const mapStateToProps = (state, props) => ({ status: getStatus(state, props), - - pictureInPicture: { - inUse: state.getIn(['meta', 'layout']) !== 'mobile' && state.get('picture_in_picture').statusId === props.id, - available: state.getIn(['meta', 'layout']) !== 'mobile', - }, + pictureInPicture: getPictureInPicture(state, props), }); return mapStateToProps; diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index e20557eb3..043a749ed 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -41,7 +41,10 @@ class DetailedStatus extends ImmutablePureComponent { domain: PropTypes.string.isRequired, compact: PropTypes.bool, showMedia: PropTypes.bool, - usingPiP: PropTypes.bool, + pictureInPicture: ImmutablePropTypes.contains({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), onToggleMediaVisibility: PropTypes.func, }; @@ -102,7 +105,7 @@ class DetailedStatus extends ImmutablePureComponent { render () { const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status; const outerStyle = { boxSizing: 'border-box' }; - const { intl, compact, usingPiP } = this.props; + const { intl, compact, pictureInPicture } = this.props; if (!status) { return null; @@ -118,7 +121,7 @@ class DetailedStatus extends ImmutablePureComponent { outerStyle.height = `${this.state.height}px`; } - if (usingPiP) { + if (pictureInPicture.get('inUse')) { media = ; } else if (status.get('media_attachments').size > 0) { if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index c5e7ba776..09822f372 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -43,7 +43,7 @@ import { import { initMuteModal } from '../../actions/mutes'; import { initBlockModal } from '../../actions/blocks'; import { initReport } from '../../actions/reports'; -import { makeGetStatus } from '../../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../../selectors'; import { ScrollContainer } from 'react-router-scroll-4'; import ColumnBackButton from '../../components/column_back_button'; import ColumnHeader from '../../components/column_header'; @@ -72,6 +72,7 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const getAncestorsIds = createSelector([ (_, { id }) => id, @@ -129,11 +130,12 @@ const makeMapStateToProps = () => { const mapStateToProps = (state, props) => { const status = getStatus(state, { id: props.params.statusId }); - let ancestorsIds = Immutable.List(); + + let ancestorsIds = Immutable.List(); let descendantsIds = Immutable.List(); if (status) { - ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); + ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); descendantsIds = getDescendantsIds(state, { id: status.get('id') }); } @@ -143,7 +145,7 @@ const makeMapStateToProps = () => { descendantsIds, askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, domain: state.getIn(['meta', 'domain']), - usingPiP: state.get('picture_in_picture').statusId === props.params.statusId, + pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }), }; }; @@ -168,7 +170,10 @@ class Status extends ImmutablePureComponent { askReplyConfirmation: PropTypes.bool, multiColumn: PropTypes.bool, domain: PropTypes.string.isRequired, - usingPiP: PropTypes.bool, + pictureInPicture: ImmutablePropTypes.contains({ + inUse: PropTypes.bool, + available: PropTypes.bool, + }), }; state = { @@ -492,7 +497,7 @@ class Status extends ImmutablePureComponent { render () { let ancestors, descendants; - const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, usingPiP } = this.props; + const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; const { fullscreen } = this.state; if (status === null) { @@ -550,7 +555,7 @@ class Status extends ImmutablePureComponent { domain={domain} showMedia={this.state.showMedia} onToggleMediaVisibility={this.handleToggleMediaVisibility} - usingPiP={usingPiP} + pictureInPicture={pictureInPicture} /> state.getIn(['accounts', id], null); @@ -121,6 +121,16 @@ export const makeGetStatus = () => { ); }; +export const makeGetPictureInPicture = () => { + return createSelector([ + (state, { id }) => state.get('picture_in_picture').statusId === id, + (state) => state.getIn(['meta', 'layout']) !== 'mobile', + ], (inUse, available) => ImmutableMap({ + inUse: inUse && available, + available, + })); +}; + const getAlertsBase = state => state.get('alerts'); export const getAlerts = createSelector([getAlertsBase], (base) => { From 0b437325dc93a1d28202b5ff30eaafc9b4e571b7 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 7 Dec 2020 20:07:24 +0100 Subject: [PATCH 269/422] Fix column swiping animation logic (#15301) From the start, swiping columns was highly unreliable because the logic could change `ReactSwipeableViews`'s `animateTransitions` property mid-swipe. PR #11200 partially fixed this, but at the unintended cost of disabling the swipe animation altogether. This PR changes the logic behind `shouldAnimate` to only disable the swiping animation at the end of a column change not initiated by `ReactSwipeableViews`. Co-authored-by: Claire --- .../mastodon/features/ui/components/columns_area.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index cf02e9be7..6837450eb 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -75,7 +75,9 @@ class ColumnsArea extends ImmutablePureComponent { } componentWillReceiveProps() { - this.setState({ shouldAnimate: false }); + if (typeof this.pendingIndex !== 'number' && this.lastIndex !== getIndex(this.context.router.history.location.pathname)) { + this.setState({ shouldAnimate: false }); + } } componentDidMount() { From 765626a3a766ce212e73a1a51f6a048cc19ffc63 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Tue, 8 Dec 2020 20:07:54 +0900 Subject: [PATCH 270/422] Fix the Open handler for PreviewCard (#15305) --- app/javascript/mastodon/components/status.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 18e0e87c8..d9e7347f8 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -432,7 +432,7 @@ class Status extends ImmutablePureComponent { } else if (status.get('spoiler_text').length === 0 && status.get('card')) { media = ( Date: Wed, 9 Dec 2020 08:24:13 +0900 Subject: [PATCH 271/422] Fix open media hotkey (#15308) * Fix open media hotkey * Update status.js Co-authored-by: Eugen Rochko --- app/javascript/mastodon/components/status.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index d9e7347f8..295e83f58 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -203,15 +203,15 @@ class Status extends ImmutablePureComponent { handleHotkeyOpenMedia = e => { const { onOpenMedia, onOpenVideo } = this.props; - const statusId = this._properStatus().get('id'); + const status = this._properStatus(); e.preventDefault(); if (status.get('media_attachments').size > 0) { if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 }); + onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), { startTime: 0 }); } else { - onOpenMedia(statusId, status.get('media_attachments'), 0); + onOpenMedia(status.get('id'), status.get('media_attachments'), 0); } } } From f379a52d745dbd765b4ba1fb3133ed6fad3e7c1b Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Wed, 9 Dec 2020 12:33:33 +0900 Subject: [PATCH 272/422] Fix missing pictureInPicture prop in detailed status container (#15309) --- .../features/status/containers/detailed_status_container.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/status/containers/detailed_status_container.js b/app/javascript/mastodon/features/status/containers/detailed_status_container.js index 6d5c33240..0ac4519c8 100644 --- a/app/javascript/mastodon/features/status/containers/detailed_status_container.js +++ b/app/javascript/mastodon/features/status/containers/detailed_status_container.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; import DetailedStatus from '../components/detailed_status'; -import { makeGetStatus } from '../../../selectors'; +import { makeGetStatus, makeGetPictureInPicture } from '../../../selectors'; import { replyCompose, mentionCompose, @@ -40,10 +40,12 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); const mapStateToProps = (state, props) => ({ status: getStatus(state, props), domain: state.getIn(['meta', 'domain']), + pictureInPicture: getPictureInPicture(state, props), }); return mapStateToProps; From 127c543a6e59d20de68e6760e952d18ed53578e9 Mon Sep 17 00:00:00 2001 From: trwnh Date: Tue, 8 Dec 2020 21:34:17 -0600 Subject: [PATCH 273/422] rename replies_policy enumerables (#15304) --- app/javascript/mastodon/features/list_timeline/index.js | 8 ++++---- app/lib/feed_manager.rb | 4 ++-- app/models/list.rb | 4 ++-- spec/lib/feed_manager_spec.rb | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js index a3be8fbea..02b018247 100644 --- a/app/javascript/mastodon/features/list_timeline/index.js +++ b/app/javascript/mastodon/features/list_timeline/index.js @@ -20,9 +20,9 @@ import RadioButton from 'mastodon/components/radio_button'; const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' }, deleteConfirm: { id: 'confirmations.delete_list.confirm', defaultMessage: 'Delete' }, - all_replies: { id: 'lists.replies_policy.all_replies', defaultMessage: 'Any followed user' }, - no_replies: { id: 'lists.replies_policy.no_replies', defaultMessage: 'No one' }, - list_replies: { id: 'lists.replies_policy.list_replies', defaultMessage: 'Members of the list' }, + followed: { id: 'lists.replies_policy.followed', defaultMessage: 'Any followed user' }, + none: { id: 'lists.replies_policy.none', defaultMessage: 'No one' }, + list: { id: 'lists.replies_policy.list', defaultMessage: 'Members of the list' }, }); const mapStateToProps = (state, props) => ({ @@ -193,7 +193,7 @@ class ListTimeline extends React.PureComponent {
- { ['no_replies', 'list_replies', 'all_replies'].map(policy => ( + { ['none', 'list', 'followed'].map(policy => ( ))}
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 0876d107b..5e01ef67a 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -345,8 +345,8 @@ class FeedManager def filter_from_list?(status, list) if status.reply? && status.in_reply_to_account_id != status.account_id should_filter = status.in_reply_to_account_id != list.account_id - should_filter &&= !list.show_all_replies? - should_filter &&= !(list.show_list_replies? && ListAccount.where(list_id: list.id, account_id: status.in_reply_to_account_id).exists?) + should_filter &&= !list.show_followed? + should_filter &&= !(list.show_list? && ListAccount.where(list_id: list.id, account_id: status.in_reply_to_account_id).exists?) return !!should_filter end diff --git a/app/models/list.rb b/app/models/list.rb index 8493046e5..655d55ff6 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -8,7 +8,7 @@ # title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# replies_policy :integer default("list_replies"), not null +# replies_policy :integer default("list"), not null # class List < ApplicationRecord @@ -16,7 +16,7 @@ class List < ApplicationRecord PER_ACCOUNT_LIMIT = 50 - enum replies_policy: [:list_replies, :all_replies, :no_replies], _prefix: :show + enum replies_policy: [:list, :followed, :none], _prefix: :show belongs_to :account, optional: true diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 7d775a86d..0df85e5bc 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -335,7 +335,7 @@ RSpec.describe FeedManager do context 'when replies policy is set to no replies' do before do - list.replies_policy = :no_replies + list.replies_policy = :none end it 'pushes statuses that are not replies' do @@ -358,7 +358,7 @@ RSpec.describe FeedManager do context 'when replies policy is set to list-only replies' do before do - list.replies_policy = :list_replies + list.replies_policy = :list end it 'pushes statuses that are not replies' do @@ -387,7 +387,7 @@ RSpec.describe FeedManager do context 'when replies policy is set to any reply' do before do - list.replies_policy = :all_replies + list.replies_policy = :followed end it 'pushes statuses that are not replies' do From 9669167aaeaa834dcc99fa7df961c4f9b8118850 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 9 Dec 2020 19:16:30 +0100 Subject: [PATCH 274/422] Fix notifications being unnecessarily redrawn on state change (#15312) Co-authored-by: Claire --- app/javascript/mastodon/features/notifications/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 73df7f49d..2e0afd863 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -32,10 +32,16 @@ const messages = defineMessages({ markAsRead : { id: 'notifications.mark_as_read', defaultMessage: 'Mark every notification as read' }, }); +const getExcludedTypes = createSelector([ + state => state.getIn(['settings', 'notifications', 'shows']), +], (shows) => { + return ImmutableList(shows.filter(item => !item).keys()); +}); + const getNotifications = createSelector([ state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']), state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']), - state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()), + getExcludedTypes, state => state.getIn(['notifications', 'items']), ], (showFilterBar, allowedType, excludedTypes, notifications) => { if (!showFilterBar || allowedType === 'all') { From 49eb4d4ddf61e25c5aaab89aa630ddd3c7f3c23d Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 10 Dec 2020 06:27:26 +0100 Subject: [PATCH 275/422] Add honeypot fields and minimum fill-out time for sign-up form (#15276) * Add honeypot fields to limit non-specialized spam Add two honeypot fields: a fake website input and a fake password confirmation one. The label/placeholder/aria-label tells not to fill them, and they are hidden in CSS, so legitimate users should not fall into these. This should cut down on some non-Mastodon-specific spambots. * Require a 3 seconds delay before submitting the registration form * Fix tests * Move registration form time check to model validation * Give people a chance to clear the honeypot fields * Refactor honeypot translation strings Co-authored-by: Claire --- app/controllers/about_controller.rb | 5 ++++- app/controllers/auth/registrations_controller.rb | 11 +++++++---- app/controllers/concerns/registration_spam_concern.rb | 9 +++++++++ app/javascript/packs/public.js | 11 +++++++++++ app/javascript/styles/mastodon/forms.scss | 8 ++++++++ app/models/user.rb | 7 +++++++ app/validators/registration_form_time_validator.rb | 9 +++++++++ app/views/about/_registration.html.haml | 3 +++ app/views/auth/registrations/new.html.haml | 3 +++ app/views/shared/_error_messages.html.haml | 3 +++ config/locales/en.yml | 1 + config/locales/simple_form.en.yml | 1 + .../controllers/auth/registrations_controller_spec.rb | 4 ++++ 13 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 app/controllers/concerns/registration_spam_concern.rb create mode 100644 app/validators/registration_form_time_validator.rb diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index abd1ec0cb..dcad5d3b4 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -1,12 +1,15 @@ # frozen_string_literal: true class AboutController < ApplicationController + include RegistrationSpamConcern + layout 'public' before_action :require_open_federation!, only: [:show, :more] before_action :set_body_classes, only: :show before_action :set_instance_presenter - before_action :set_expires_in, only: [:show, :more, :terms] + before_action :set_expires_in, only: [:more, :terms] + before_action :set_registration_form_time, only: :show skip_before_action :require_functional!, only: [:more, :terms] diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index eb0924190..a3114ab25 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -2,6 +2,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController include Devise::Controllers::Rememberable + include RegistrationSpamConcern layout :determine_layout @@ -13,6 +14,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController before_action :set_body_classes, only: [:new, :create, :edit, :update] before_action :require_not_suspended!, only: [:update] before_action :set_cache_headers, only: [:edit, :update] + before_action :set_registration_form_time, only: :new skip_before_action :require_functional!, only: [:edit, :update] @@ -45,16 +47,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController def build_resource(hash = nil) super(hash) - resource.locale = I18n.locale - resource.invite_code = params[:invite_code] if resource.invite_code.blank? - resource.sign_up_ip = request.remote_ip + resource.locale = I18n.locale + resource.invite_code = params[:invite_code] if resource.invite_code.blank? + resource.registration_form_time = session[:registration_form_time] + resource.sign_up_ip = request.remote_ip resource.build_account if resource.account.nil? end def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up) do |u| - u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code, :agreement) + u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code, :agreement, :website, :confirm_password) end end diff --git a/app/controllers/concerns/registration_spam_concern.rb b/app/controllers/concerns/registration_spam_concern.rb new file mode 100644 index 000000000..af434c985 --- /dev/null +++ b/app/controllers/concerns/registration_spam_concern.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module RegistrationSpamConcern + extend ActiveSupport::Concern + + def set_registration_form_time + session[:registration_form_time] = Time.now.utc + end +end diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 39defa7ae..8c5c15b8f 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -280,6 +280,17 @@ function main() { target.style.display = 'block'; } }); + + // Empty the honeypot fields in JS in case something like an extension + // automatically filled them. + delegate(document, '#registration_new_user,#new_user', 'submit', () => { + ['user_website', 'user_confirm_password', 'registration_user_website', 'registration_user_confirm_password'].forEach(id => { + const field = document.getElementById(id); + if (field) { + field.value = ''; + } + }); + }); } loadPolyfills() diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index a54a5fded..92d89e6f2 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -354,6 +354,7 @@ code { input[type=number], input[type=email], input[type=password], + input[type=url], textarea { box-sizing: border-box; font-size: 16px; @@ -994,3 +995,10 @@ code { flex-direction: row; } } + +.input.user_confirm_password, +.input.user_website { + &:not(.field_with_errors) { + display: none; + } +} diff --git a/app/models/user.rb b/app/models/user.rb index 94fee999a..981dc6d47 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -89,6 +89,13 @@ class User < ApplicationRecord validates_with EmailMxValidator, if: :validate_email_dns? validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create + # Those are honeypot/antispam fields + attr_accessor :registration_form_time, :website, :confirm_password + + validates_with RegistrationFormTimeValidator, on: :create + validates :website, absence: true, on: :create + validates :confirm_password, absence: true, on: :create + scope :recent, -> { order(id: :desc) } scope :pending, -> { where(approved: false) } scope :approved, -> { where(approved: true) } diff --git a/app/validators/registration_form_time_validator.rb b/app/validators/registration_form_time_validator.rb new file mode 100644 index 000000000..ba7c7e6c6 --- /dev/null +++ b/app/validators/registration_form_time_validator.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class RegistrationFormTimeValidator < ActiveModel::Validator + REGISTRATION_FORM_MIN_TIME = 3.seconds.freeze + + def validate(user) + user.errors.add(:base, I18n.t('auth.too_fast')) if user.registration_form_time.present? && user.registration_form_time > REGISTRATION_FORM_MIN_TIME.ago + end +end diff --git a/app/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index 5d159e9e6..6160ca4d4 100644 --- a/app/views/about/_registration.html.haml +++ b/app/views/about/_registration.html.haml @@ -10,6 +10,9 @@ = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off', :minlength => User.password_length.first, :maxlength => User.password_length.last }, hint: false, disabled: closed_registrations? = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations? + = f.input :confirm_password, as: :string, placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), :autocomplete => 'off' }, hint: false, disabled: closed_registrations? + = f.input :website, as: :url, placeholder: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: 'Website'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations? + - if approved_registrations? .fields-group = f.simple_fields_for :invite_request do |invite_request_fields| diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index cc72b87ce..de541847f 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -24,6 +24,9 @@ .fields-group = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' } + = f.input :confirm_password, as: :string, wrapper: :with_label, label: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), :autocomplete => 'off' } + + = f.input :website, as: :url, wrapper: :with_label, label: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: 'Website'), :autocomplete => 'off' } - if approved_registrations? && !@invite.present? .fields-group diff --git a/app/views/shared/_error_messages.html.haml b/app/views/shared/_error_messages.html.haml index 28becd6c4..4916bd424 100644 --- a/app/views/shared/_error_messages.html.haml +++ b/app/views/shared/_error_messages.html.haml @@ -1,3 +1,6 @@ - if object.errors.any? .flash-message.alert#error_explanation %strong= t('generic.validation_errors', count: object.errors.count) +- object.errors[:base].each do |error| + .flash-message.alert + %strong= error diff --git a/config/locales/en.yml b/config/locales/en.yml index 263ffcdc7..59f561aa3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -751,6 +751,7 @@ en: functional: Your account is fully operational. pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved. redirecting_to: Your account is inactive because it is currently redirecting to %{acct}. + too_fast: Form submitted too fast, try again. trouble_logging_in: Trouble logging in? use_security_key: Use security key authorize_follow: diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 46a4759a8..20c916560 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -126,6 +126,7 @@ en: expires_in: Expire after fields: Profile metadata header: Header + honeypot: "%{label} (do not fill in)" inbox_url: URL of the relay inbox irreversible: Drop instead of hide locale: Interface language diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index bef822763..c701a3b8b 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -82,6 +82,10 @@ RSpec.describe Auth::RegistrationsController, type: :controller do describe 'POST #create' do let(:accept_language) { Rails.application.config.i18n.available_locales.sample.to_s } + before do + session[:registration_form_time] = 5.seconds.ago + end + around do |example| current_locale = I18n.locale example.run From a3b5675aa83f7fec4036888e0d94b626ad973f75 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 14 Dec 2020 05:09:14 +0100 Subject: [PATCH 276/422] Change number format on about page from full to shortened (#15327) --- app/views/about/more.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index c2168e1f5..109b5fa86 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -17,11 +17,11 @@ .row__information-board .information-board__section %span= t 'about.user_count_before' - %strong= number_with_delimiter @instance_presenter.user_count + %strong= number_to_human @instance_presenter.user_count, strip_insignificant_zeros: true %span= t 'about.user_count_after', count: @instance_presenter.user_count .information-board__section %span= t 'about.status_count_before' - %strong= number_with_delimiter @instance_presenter.status_count + %strong= number_to_human @instance_presenter.status_count, strip_insignificant_zeros: true %span= t 'about.status_count_after', count: @instance_presenter.status_count .row__mascot .landing-page__mascot From 216b85b053d091306e3311a21f5b050f70a75130 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 14 Dec 2020 09:06:34 +0100 Subject: [PATCH 277/422] Fix performance on instances list in admin UI (#15282) - Reduce duplicate queries - Remove n+1 queries - Add accounts count to detailed view - Add separate action log entry for updating existing domain blocks --- Gemfile | 1 + Gemfile.lock | 4 + .../admin/domain_blocks_controller.rb | 5 +- app/controllers/admin/instances_controller.rb | 44 +------- .../api/v1/instances/peers_controller.rb | 2 +- app/models/account.rb | 6 +- app/models/concerns/domain_materializable.rb | 13 +++ app/models/domain_allow.rb | 1 + app/models/domain_block.rb | 1 + app/models/instance.rb | 63 ++++++++--- app/models/instance_filter.rb | 31 ++++-- app/models/unavailable_domain.rb | 2 + app/policies/domain_block_policy.rb | 4 + app/presenters/instance_presenter.rb | 2 +- app/views/admin/instances/_instance.html.haml | 25 +++++ app/views/admin/instances/index.html.haml | 36 ++----- app/views/admin/instances/show.html.haml | 50 ++++----- .../scheduler/instance_refresh_scheduler.rb | 11 ++ config/brakeman.ignore | 101 +++++++++++++++--- config/locales/en.yml | 3 + config/sidekiq.yml | 3 + db/migrate/20201206004238_create_instances.rb | 9 ++ db/schema.rb | 27 ++++- db/views/instances_v01.sql | 17 +++ lib/mastodon/domains_cli.rb | 4 +- .../admin/instances_controller_spec.rb | 6 +- spec/models/account_spec.rb | 21 ---- 27 files changed, 326 insertions(+), 166 deletions(-) create mode 100644 app/models/concerns/domain_materializable.rb create mode 100644 app/views/admin/instances/_instance.html.haml create mode 100644 app/workers/scheduler/instance_refresh_scheduler.rb create mode 100644 db/migrate/20201206004238_create_instances.rb create mode 100644 db/views/instances_v01.sql diff --git a/Gemfile b/Gemfile index 63becb7cc..3aee5d7cc 100644 --- a/Gemfile +++ b/Gemfile @@ -82,6 +82,7 @@ gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'rqrcode', '~> 1.1' gem 'ruby-progressbar', '~> 1.10' gem 'sanitize', '~> 5.2' +gem 'scenic', '~> 1.5' gem 'sidekiq', '~> 6.1' gem 'sidekiq-scheduler', '~> 3.0' gem 'sidekiq-unique-jobs', '~> 6.0' diff --git a/Gemfile.lock b/Gemfile.lock index f7192d084..c4c8d9904 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -561,6 +561,9 @@ GEM crass (~> 1.0.2) nokogiri (>= 1.8.0) nokogumbo (~> 2.0) + scenic (1.5.4) + activerecord (>= 4.0.0) + railties (>= 4.0.0) securecompare (1.0.0) semantic_range (2.3.0) sidekiq (6.1.2) @@ -782,6 +785,7 @@ DEPENDENCIES rubocop-rails (~> 2.8) ruby-progressbar (~> 1.10) sanitize (~> 5.2) + scenic (~> 1.5) sidekiq (~> 6.1) sidekiq-bulk (~> 0.2.0) sidekiq-scheduler (~> 3.0) diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index 74a36b79c..6a5b41a74 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -29,6 +29,7 @@ module Admin @domain_block = existing_domain_block @domain_block.update(resource_params) end + if @domain_block.save DomainBlockWorker.perform_async(@domain_block.id) log_action :create, @domain_block @@ -40,7 +41,7 @@ module Admin end def update - authorize :domain_block, :create? + authorize :domain_block, :update? @domain_block.update(update_params) @@ -48,7 +49,7 @@ module Admin if @domain_block.save DomainBlockWorker.perform_async(@domain_block.id, severity_changed) - log_action :create, @domain_block + log_action :update, @domain_block redirect_to admin_instances_path(limited: '1'), notice: I18n.t('admin.domain_blocks.created_msg') else render :edit diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb index 1790becbf..b5918d231 100644 --- a/app/controllers/admin/instances_controller.rb +++ b/app/controllers/admin/instances_controller.rb @@ -2,65 +2,31 @@ module Admin class InstancesController < BaseController - before_action :set_domain_block, only: :show - before_action :set_domain_allow, only: :show + before_action :set_instances, only: :index before_action :set_instance, only: :show def index authorize :instance, :index? - - @instances = ordered_instances end def show authorize :instance, :show? - - @following_count = Follow.where(account: Account.where(domain: params[:id])).count - @followers_count = Follow.where(target_account: Account.where(domain: params[:id])).count - @reports_count = Report.where(target_account: Account.where(domain: params[:id])).count - @blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count - @available = DeliveryFailureTracker.available?(params[:id]) - @media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size) - @private_comment = @domain_block&.private_comment - @public_comment = @domain_block&.public_comment end private - def set_domain_block - @domain_block = DomainBlock.rule_for(params[:id]) - end - - def set_domain_allow - @domain_allow = DomainAllow.rule_for(params[:id]) - end - def set_instance - resource = Account.by_domain_accounts.find_by(domain: params[:id]) - resource ||= @domain_block - resource ||= @domain_allow + @instance = Instance.find(params[:id]) + end - if resource - @instance = Instance.new(resource) - else - not_found - end + def set_instances + @instances = filtered_instances.page(params[:page]) end def filtered_instances InstanceFilter.new(whitelist_mode? ? { allowed: true } : filter_params).results end - def paginated_instances - filtered_instances.page(params[:page]) - end - - helper_method :paginated_instances - - def ordered_instances - paginated_instances.map { |resource| Instance.new(resource) } - end - def filter_params params.slice(*InstanceFilter::KEYS).permit(*InstanceFilter::KEYS) end diff --git a/app/controllers/api/v1/instances/peers_controller.rb b/app/controllers/api/v1/instances/peers_controller.rb index 9fa440935..2877fec52 100644 --- a/app/controllers/api/v1/instances/peers_controller.rb +++ b/app/controllers/api/v1/instances/peers_controller.rb @@ -8,7 +8,7 @@ class Api::V1::Instances::PeersController < Api::BaseController def index expires_in 1.day, public: true - render_with_cache(expires_in: 1.day) { Account.remote.domains } + render_with_cache(expires_in: 1.day) { Instance.where.not(domain: DomainBlock.select(:domain)).pluck(:domain) } end private diff --git a/app/models/account.rb b/app/models/account.rb index ed11a514d..e21b353e9 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -67,6 +67,7 @@ class Account < ApplicationRecord include Paginable include AccountCounters include DomainNormalizable + include DomainMaterializable include AccountMerging TRUST_LEVELS = { @@ -103,7 +104,6 @@ class Account < ApplicationRecord scope :bots, -> { where(actor_type: %w(Application Service)) } scope :groups, -> { where(actor_type: 'Group') } scope :alphabetic, -> { order(domain: :asc, username: :asc) } - scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } scope :matches_username, ->(value) { where(arel_table[:username].matches("#{value}%")) } scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) } scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } @@ -438,10 +438,6 @@ class Account < ApplicationRecord super - %w(statuses_count following_count followers_count) end - def domains - reorder(nil).pluck(Arel.sql('distinct accounts.domain')) - end - def inboxes urls = reorder(nil).where(protocol: :activitypub).group(:preferred_inbox_url).pluck(Arel.sql("coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url) AS preferred_inbox_url")) DeliveryFailureTracker.without_unavailable(urls) diff --git a/app/models/concerns/domain_materializable.rb b/app/models/concerns/domain_materializable.rb new file mode 100644 index 000000000..88337f8c0 --- /dev/null +++ b/app/models/concerns/domain_materializable.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module DomainMaterializable + extend ActiveSupport::Concern + + included do + after_create_commit :refresh_instances_view + end + + def refresh_instances_view + Instance.refresh unless domain.nil? || Instance.where(domain: domain).exists? + end +end diff --git a/app/models/domain_allow.rb b/app/models/domain_allow.rb index 5fe0e3a29..4b0a89c18 100644 --- a/app/models/domain_allow.rb +++ b/app/models/domain_allow.rb @@ -12,6 +12,7 @@ class DomainAllow < ApplicationRecord include DomainNormalizable + include DomainMaterializable validates :domain, presence: true, uniqueness: true, domain: true diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 2b18e01fa..829d7583b 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -16,6 +16,7 @@ class DomainBlock < ApplicationRecord include DomainNormalizable + include DomainMaterializable enum severity: [:silence, :suspend, :noop] diff --git a/app/models/instance.rb b/app/models/instance.rb index 3c740f8a2..29be03662 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -1,26 +1,63 @@ # frozen_string_literal: true +# == Schema Information +# +# Table name: instances +# +# domain :string primary key +# accounts_count :bigint(8) +# -class Instance - include ActiveModel::Model +class Instance < ApplicationRecord + self.primary_key = :domain - attr_accessor :domain, :accounts_count, :domain_block + has_many :accounts, foreign_key: :domain, primary_key: :domain - def initialize(resource) - @domain = resource.domain - @accounts_count = resource.respond_to?(:accounts_count) ? resource.accounts_count : nil - @domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.rule_for(domain) - @domain_allow = resource.is_a?(DomainAllow) ? resource : DomainAllow.rule_for(domain) + belongs_to :domain_block, foreign_key: :domain, primary_key: :domain + belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain + + scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } + + def self.refresh + Scenic.database.refresh_materialized_view(table_name, concurrently: true, cascade: false) end - def countable? - @accounts_count.present? + def readonly? + true end - def to_param - domain + def delivery_failure_tracker + @delivery_failure_tracker ||= DeliveryFailureTracker.new(domain) + end + + def following_count + @following_count ||= Follow.where(account: accounts).count + end + + def followers_count + @followers_count ||= Follow.where(target_account: accounts).count + end + + def reports_count + @reports_count ||= Report.where(target_account: accounts).count end - def cache_key + def blocks_count + @blocks_count ||= Block.where(target_account: accounts).count + end + + def public_comment + domain_block&.public_comment + end + + def private_comment + domain_block&.private_comment + end + + def media_storage + @media_storage ||= MediaAttachment.where(account: accounts).sum(:file_file_size) + end + + def to_param domain end end diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 9c467bc27..0598d8fea 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -13,18 +13,27 @@ class InstanceFilter end def results - if params[:limited].present? - scope = DomainBlock - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.order(id: :desc) - elsif params[:allowed].present? - scope = DomainAllow - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.order(id: :desc) + scope = Instance.includes(:domain_block, :domain_allow).order(accounts_count: :desc) + + params.each do |key, value| + scope.merge!(scope_for(key, value.to_s.strip)) if value.present? + end + + scope + end + + private + + def scope_for(key, value) + case key.to_s + when 'limited' + Instance.joins(:domain_block).reorder(Arel.sql('domain_blocks.id desc')) + when 'allowed' + Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc')) + when 'by_domain' + Instance.matches_domain(value) else - scope = Account.remote - scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? - scope.by_domain_accounts + raise "Unknown filter: #{key}" end end end diff --git a/app/models/unavailable_domain.rb b/app/models/unavailable_domain.rb index e2918b586..5e8870bde 100644 --- a/app/models/unavailable_domain.rb +++ b/app/models/unavailable_domain.rb @@ -12,6 +12,8 @@ class UnavailableDomain < ApplicationRecord include DomainNormalizable + validates :domain, presence: true, uniqueness: true + after_commit :reset_cache! private diff --git a/app/policies/domain_block_policy.rb b/app/policies/domain_block_policy.rb index 47c0a81af..543259cce 100644 --- a/app/policies/domain_block_policy.rb +++ b/app/policies/domain_block_policy.rb @@ -13,6 +13,10 @@ class DomainBlockPolicy < ApplicationPolicy admin? end + def update? + admin? + end + def destroy? admin? end diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index c150bf742..1bfdd40ac 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -29,7 +29,7 @@ class InstancePresenter end def domain_count - Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) } + Rails.cache.fetch('distinct_domain_count') { Instance.count } end def sample_accounts diff --git a/app/views/admin/instances/_instance.html.haml b/app/views/admin/instances/_instance.html.haml new file mode 100644 index 000000000..188d0d984 --- /dev/null +++ b/app/views/admin/instances/_instance.html.haml @@ -0,0 +1,25 @@ +.directory__tag + = link_to admin_instance_path(instance) do + %h4 + = instance.domain + %small + - if instance.domain_block + - first_item = true + - if !instance.domain_block.noop? + = t("admin.domain_blocks.severity.#{instance.domain_block.severity}") + - first_item = false + - unless instance.domain_block.suspend? + - if instance.domain_block.reject_media? + - unless first_item + • + = t('admin.domain_blocks.rejecting_media') + - first_item = false + - if instance.domain_block.reject_reports? + - unless first_item + • + = t('admin.domain_blocks.rejecting_reports') + - elsif whitelist_mode? + = t('admin.accounts.whitelisted') + - else + = t('admin.accounts.no_limits_imposed') + .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml index 696ba3c7f..5f20e7ec0 100644 --- a/app/views/admin/instances/index.html.haml +++ b/app/views/admin/instances/index.html.haml @@ -32,32 +32,10 @@ %hr.spacer/ -- @instances.each do |instance| - .directory__tag - = link_to admin_instance_path(instance) do - %h4 - = instance.domain - %small - - if instance.domain_block - - first_item = true - - if !instance.domain_block.noop? - = t("admin.domain_blocks.severity.#{instance.domain_block.severity}") - - first_item = false - - unless instance.domain_block.suspend? - - if instance.domain_block.reject_media? - - unless first_item - • - = t('admin.domain_blocks.rejecting_media') - - first_item = false - - if instance.domain_block.reject_reports? - - unless first_item - • - = t('admin.domain_blocks.rejecting_reports') - - elsif whitelist_mode? - = t('admin.accounts.whitelisted') - - else - = t('admin.accounts.no_limits_imposed') - - if instance.countable? - .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true - -= paginate paginated_instances +- if @instances.empty? + %div.muted-hint.center-text + = t 'admin.instances.empty' +- else + = render @instances + += paginate @instances diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index 92e14c0df..0b9382771 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -2,58 +2,60 @@ = @instance.domain .dashboard__counters + %div + = link_to admin_accounts_path(remote: '1', by_domain: @instance.domain) do + .dashboard__counters__num= number_with_delimiter @instance.accounts_count + .dashboard__counters__label= t 'admin.accounts.title' + %div + = link_to admin_reports_path(by_target_domain: @instance.domain) do + .dashboard__counters__num= number_with_delimiter @instance.reports_count + .dashboard__counters__label= t 'admin.instances.total_reported' %div %div - .dashboard__counters__num= number_with_delimiter @following_count - .dashboard__counters__label= t 'admin.instances.total_followed_by_them' + .dashboard__counters__num= number_to_human_size @instance.media_storage + .dashboard__counters__label= t 'admin.instances.total_storage' %div %div - .dashboard__counters__num= number_with_delimiter @followers_count - .dashboard__counters__label= t 'admin.instances.total_followed_by_us' + .dashboard__counters__num= number_with_delimiter @instance.following_count + .dashboard__counters__label= t 'admin.instances.total_followed_by_them' %div %div - .dashboard__counters__num= number_to_human_size @media_storage - .dashboard__counters__label= t 'admin.instances.total_storage' + .dashboard__counters__num= number_with_delimiter @instance.followers_count + .dashboard__counters__label= t 'admin.instances.total_followed_by_us' %div %div - .dashboard__counters__num= number_with_delimiter @blocks_count + .dashboard__counters__num= number_with_delimiter @instance.blocks_count .dashboard__counters__label= t 'admin.instances.total_blocked_by_us' - %div - = link_to admin_reports_path(by_target_domain: @instance.domain) do - .dashboard__counters__num= number_with_delimiter @reports_count - .dashboard__counters__label= t 'admin.instances.total_reported' + %div %div .dashboard__counters__num - - if @available + - if @instance.delivery_failure_tracker.available? = fa_icon 'check' - else = fa_icon 'times' .dashboard__counters__label= t 'admin.instances.delivery_available' -- if @private_comment.present? +- if @instance.private_comment.present? .speech-bubble .speech-bubble__bubble - = simple_format(h(@private_comment)) + = simple_format(h(@instance.private_comment)) .speech-bubble__owner= t 'admin.instances.private_comment' -- if @public_comment.present? +- if @instance.public_comment.present? .speech-bubble .speech-bubble__bubble - = simple_format(h(@public_comment)) + = simple_format(h(@instance.public_comment)) .speech-bubble__owner= t 'admin.instances.public_comment' %hr.spacer/ %div.action-buttons %div - = link_to t('admin.accounts.title'), admin_accounts_path(remote: '1', by_domain: @instance.domain), class: 'button' - - %div - - if @domain_allow - = link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } - - elsif @domain_block - = link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@domain_block), class: 'button' - = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@domain_block), class: 'button' + - if @instance.domain_allow + = link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@instance.domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } + - elsif @instance.domain_block + = link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@instance.domain_block), class: 'button' + = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button' - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button' diff --git a/app/workers/scheduler/instance_refresh_scheduler.rb b/app/workers/scheduler/instance_refresh_scheduler.rb new file mode 100644 index 000000000..917404bec --- /dev/null +++ b/app/workers/scheduler/instance_refresh_scheduler.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Scheduler::InstanceRefreshScheduler + include Sidekiq::Worker + + sidekiq_options lock: :until_executed, retry: 0 + + def perform + Instance.refresh + end +end diff --git a/config/brakeman.ignore b/config/brakeman.ignore index baa993c78..dcbfd02b4 100644 --- a/config/brakeman.ignore +++ b/config/brakeman.ignore @@ -102,6 +102,37 @@ "confidence": "Weak", "note": "" }, + { + "warning_type": "Dynamic Render Path", + "warning_code": 15, + "fingerprint": "4704e8093e3e0561bf705f892e8fc6780419f8255f4440b1c0afd09339bd6446", + "check_name": "Render", + "message": "Render path contains parameter value", + "file": "app/views/admin/instances/index.html.haml", + "line": 39, + "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/", + "code": "render(action => filtered_instances.page(params[:page]), {})", + "render_path": [ + { + "type": "controller", + "class": "Admin::InstancesController", + "method": "index", + "line": 10, + "file": "app/controllers/admin/instances_controller.rb", + "rendered": { + "name": "admin/instances/index", + "file": "app/views/admin/instances/index.html.haml" + } + } + ], + "location": { + "type": "template", + "template": "admin/instances/index" + }, + "user_input": "params[:page]", + "confidence": "Weak", + "note": "" + }, { "warning_type": "Redirect", "warning_code": 18, @@ -122,6 +153,26 @@ "confidence": "High", "note": "" }, + { + "warning_type": "SQL Injection", + "warning_code": 0, + "fingerprint": "6e4051854bb62e2ddbc671f82d6c2328892e1134b8b28105ecba9b0122540714", + "check_name": "SQL", + "message": "Possible SQL injection", + "file": "app/models/account.rb", + "line": 491, + "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/", + "code": "find_by_sql([\" WITH first_degree AS (\\n SELECT target_account_id\\n FROM follows\\n WHERE account_id = ?\\n UNION ALL\\n SELECT ?\\n )\\n SELECT\\n accounts.*,\\n (count(f.id) + 1) * ts_rank_cd(#{textsearch}, #{query}, 32) AS rank\\n FROM accounts\\n LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?)\\n WHERE accounts.id IN (SELECT * FROM first_degree)\\n AND #{query} @@ #{textsearch}\\n AND accounts.suspended_at IS NULL\\n AND accounts.moved_to_account_id IS NULL\\n GROUP BY accounts.id\\n ORDER BY rank DESC\\n LIMIT ? OFFSET ?\\n\".squish, account.id, account.id, account.id, limit, offset])", + "render_path": null, + "location": { + "type": "method", + "class": "Account", + "method": "advanced_search_for" + }, + "user_input": "textsearch", + "confidence": "Medium", + "note": "" + }, { "warning_type": "SQL Injection", "warning_code": 0, @@ -163,23 +214,23 @@ "note": "" }, { - "warning_type": "Mass Assignment", - "warning_code": 105, - "fingerprint": "8f63dec68951d9bcf7eddb15af9392b2e1333003089c41fb76688dfd3579f394", - "check_name": "PermitAttributes", - "message": "Potentially dangerous key allowed for mass assignment", - "file": "app/controllers/api/v1/crypto/deliveries_controller.rb", - "line": 23, - "link": "https://brakemanscanner.org/docs/warning_types/mass_assignment/", - "code": "params.require(:device).permit(:account_id, :device_id, :type, :body, :hmac)", + "warning_type": "SQL Injection", + "warning_code": 0, + "fingerprint": "9251d682c4e2840e1b2fea91e7d758efe2097ecb7f6255c065e3750d25eb178c", + "check_name": "SQL", + "message": "Possible SQL injection", + "file": "app/models/account.rb", + "line": 460, + "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/", + "code": "find_by_sql([\" SELECT\\n accounts.*,\\n ts_rank_cd(#{textsearch}, #{query}, 32) AS rank\\n FROM accounts\\n WHERE #{query} @@ #{textsearch}\\n AND accounts.suspended_at IS NULL\\n AND accounts.moved_to_account_id IS NULL\\n ORDER BY rank DESC\\n LIMIT ? OFFSET ?\\n\".squish, limit, offset])", "render_path": null, "location": { "type": "method", - "class": "Api::V1::Crypto::DeliveriesController", - "method": "resource_params" + "class": "Account", + "method": "search_for" }, - "user_input": ":account_id", - "confidence": "High", + "user_input": "textsearch", + "confidence": "Medium", "note": "" }, { @@ -273,6 +324,26 @@ "confidence": "High", "note": "" }, + { + "warning_type": "SQL Injection", + "warning_code": 0, + "fingerprint": "e21d8fee7a5805761679877ca35ed1029c64c45ef3b4012a30262623e1ba8bb9", + "check_name": "SQL", + "message": "Possible SQL injection", + "file": "app/models/account.rb", + "line": 507, + "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/", + "code": "find_by_sql([\" SELECT\\n accounts.*,\\n (count(f.id) + 1) * ts_rank_cd(#{textsearch}, #{query}, 32) AS rank\\n FROM accounts\\n LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?) OR (accounts.id = f.target_account_id AND f.account_id = ?)\\n WHERE #{query} @@ #{textsearch}\\n AND accounts.suspended_at IS NULL\\n AND accounts.moved_to_account_id IS NULL\\n GROUP BY accounts.id\\n ORDER BY rank DESC\\n LIMIT ? OFFSET ?\\n\".squish, account.id, account.id, limit, offset])", + "render_path": null, + "location": { + "type": "method", + "class": "Account", + "method": "advanced_search_for" + }, + "user_input": "textsearch", + "confidence": "Medium", + "note": "" + }, { "warning_type": "Mass Assignment", "warning_code": 105, @@ -294,6 +365,6 @@ "note": "" } ], - "updated": "2020-06-01 18:18:02 +0200", - "brakeman_version": "4.8.0" + "updated": "2020-12-07 01:17:13 +0100", + "brakeman_version": "4.10.0" } diff --git a/config/locales/en.yml b/config/locales/en.yml index 59f561aa3..f89f50e4d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -255,6 +255,7 @@ en: unsuspend_account: Unsuspend Account update_announcement: Update Announcement update_custom_emoji: Update Custom Emoji + update_domain_block: Update Domain Block update_status: Update Status actions: assigned_to_self_report: "%{name} assigned report %{target} to themselves" @@ -295,6 +296,7 @@ en: unsuspend_account: "%{name} unsuspended %{target}'s account" update_announcement: "%{name} updated announcement %{target}" update_custom_emoji: "%{name} updated emoji %{target}" + update_domain_block: "%{name} updated domain block for %{target}" update_status: "%{name} updated status by %{target}" deleted_status: "(deleted status)" empty: No logs found. @@ -437,6 +439,7 @@ en: instances: by_domain: Domain delivery_available: Delivery is available + empty: No domains found. known_accounts: one: "%{count} known account" other: "%{count} known accounts" diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 5de25de23..a71c1098e 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -36,3 +36,6 @@ pghero_scheduler: cron: '0 0 * * *' class: Scheduler::PgheroScheduler + instance_refresh_scheduler: + cron: '0 * * * *' + class: Scheduler::InstanceRefreshScheduler diff --git a/db/migrate/20201206004238_create_instances.rb b/db/migrate/20201206004238_create_instances.rb new file mode 100644 index 000000000..a4b866894 --- /dev/null +++ b/db/migrate/20201206004238_create_instances.rb @@ -0,0 +1,9 @@ +class CreateInstances < ActiveRecord::Migration[5.2] + def change + create_view :instances, materialized: true + + # To be able to refresh the view concurrently, + # at least one unique index is required + safety_assured { add_index :instances, :domain, unique: true } + end +end diff --git a/db/schema.rb b/db/schema.rb index 873c37f67..2f9d369be 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_10_17_234926) do +ActiveRecord::Schema.define(version: 2020_12_06_004238) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1045,4 +1045,29 @@ ActiveRecord::Schema.define(version: 2020_10_17_234926) do add_foreign_key "web_push_subscriptions", "users", on_delete: :cascade add_foreign_key "web_settings", "users", name: "fk_11910667b2", on_delete: :cascade add_foreign_key "webauthn_credentials", "users" + + create_view "instances", materialized: true, sql_definition: <<-SQL + WITH domain_counts(domain, accounts_count) AS ( + SELECT accounts.domain, + count(*) AS accounts_count + FROM accounts + WHERE (accounts.domain IS NOT NULL) + GROUP BY accounts.domain + ) + SELECT domain_counts.domain, + domain_counts.accounts_count + FROM domain_counts + UNION + SELECT domain_blocks.domain, + COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count + FROM (domain_blocks + LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_blocks.domain)::text))) + UNION + SELECT domain_allows.domain, + COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count + FROM (domain_allows + LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_allows.domain)::text))); + SQL + add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true + end diff --git a/db/views/instances_v01.sql b/db/views/instances_v01.sql new file mode 100644 index 000000000..94acd61a1 --- /dev/null +++ b/db/views/instances_v01.sql @@ -0,0 +1,17 @@ +WITH domain_counts(domain, accounts_count) +AS ( + SELECT domain, COUNT(*) as accounts_count + FROM accounts + WHERE domain IS NOT NULL + GROUP BY domain +) +SELECT domain, accounts_count +FROM domain_counts +UNION +SELECT domain_blocks.domain, COALESCE(domain_counts.accounts_count, 0) +FROM domain_blocks +LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_blocks.domain +UNION +SELECT domain_allows.domain, COALESCE(domain_counts.accounts_count, 0) +FROM domain_allows +LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_allows.domain diff --git a/lib/mastodon/domains_cli.rb b/lib/mastodon/domains_cli.rb index 5433ddd9d..3c2dfd4ec 100644 --- a/lib/mastodon/domains_cli.rb +++ b/lib/mastodon/domains_cli.rb @@ -53,6 +53,8 @@ module Mastodon custom_emojis_count = custom_emojis.count custom_emojis.destroy_all unless options[:dry_run] + Instance.refresh unless options[:dry_run] + say("Removed #{custom_emojis_count} custom emojis", :green) end @@ -83,7 +85,7 @@ module Mastodon processed = Concurrent::AtomicFixnum.new(0) failed = Concurrent::AtomicFixnum.new(0) start_at = Time.now.to_f - seed = start ? [start] : Account.remote.domains + seed = start ? [start] : Instance.pluck(:domain) blocked_domains = Regexp.new('\\.?' + DomainBlock.where(severity: 1).pluck(:domain).join('|') + '$') progress = create_progress_bar diff --git a/spec/controllers/admin/instances_controller_spec.rb b/spec/controllers/admin/instances_controller_spec.rb index 412b81443..8c0b309f2 100644 --- a/spec/controllers/admin/instances_controller_spec.rb +++ b/spec/controllers/admin/instances_controller_spec.rb @@ -9,10 +9,10 @@ RSpec.describe Admin::InstancesController, type: :controller do describe 'GET #index' do around do |example| - default_per_page = Account.default_per_page - Account.paginates_per 1 + default_per_page = Instance.default_per_page + Instance.paginates_per 1 example.run - Account.paginates_per default_per_page + Instance.paginates_per default_per_page end it 'renders instances' do diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 75f628076..1d000ed4d 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -440,13 +440,6 @@ RSpec.describe Account, type: :model do end end - describe '.domains' do - it 'returns domains' do - Fabricate(:account, domain: 'domain') - expect(Account.remote.domains).to match_array(['domain']) - end - end - describe '#statuses_count' do subject { Fabricate(:account) } @@ -737,20 +730,6 @@ RSpec.describe Account, type: :model do end end - describe 'by_domain_accounts' do - it 'returns accounts grouped by domain sorted by accounts' do - 2.times { Fabricate(:account, domain: 'example.com') } - Fabricate(:account, domain: 'example2.com') - - results = Account.where('id > 0').by_domain_accounts - expect(results.length).to eq 2 - expect(results.first.domain).to eq 'example.com' - expect(results.first.accounts_count).to eq 2 - expect(results.last.domain).to eq 'example2.com' - expect(results.last.accounts_count).to eq 1 - end - end - describe 'local' do it 'returns an array of accounts who do not have a domain' do account_1 = Fabricate(:account, domain: nil) From 4fd306200396a17c030c53483ccd7faa6c2f7291 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 14 Dec 2020 09:08:09 +0100 Subject: [PATCH 278/422] Change "Profile unavailable" string to "Account suspended" in web UI (#15345) --- .../mastodon/features/account_gallery/index.js | 10 +++++++++- .../mastodon/features/account_timeline/index.js | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js index 597ca8af6..015a6a6d7 100644 --- a/app/javascript/mastodon/features/account_gallery/index.js +++ b/app/javascript/mastodon/features/account_gallery/index.js @@ -152,6 +152,14 @@ class AccountGallery extends ImmutablePureComponent { loadOlder = ; } + let emptyMessage; + + if (suspended) { + emptyMessage = ; + } else if (blockedBy) { + emptyMessage = ; + } + return ( @@ -162,7 +170,7 @@ class AccountGallery extends ImmutablePureComponent { {(suspended || blockedBy) ? (
- + {emptyMessage}
) : (
diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index cbc859805..fa4239d6f 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -136,7 +136,9 @@ class AccountTimeline extends ImmutablePureComponent { let emptyMessage; - if (suspended || blockedBy) { + if (suspended) { + emptyMessage = ; + } else if (blockedBy) { emptyMessage = ; } else if (remote && statusIds.isEmpty()) { emptyMessage = ; From a7e819b8a8de25414324e354baa62e9abbd3e8c4 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 14 Dec 2020 09:37:58 +0100 Subject: [PATCH 279/422] =?UTF-8?q?Fix=20dynamic=20updating=20of=20?= =?UTF-8?q?=E2=80=9CBootstrap=20timeline=20accounts=E2=80=9D=20admin=20set?= =?UTF-8?q?ting=20(#15325)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Claire --- app/javascript/packs/admin.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index 65b8dc040..1c44fb45b 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -57,8 +57,10 @@ const onEnableBootstrapTimelineAccountsChange = (target) => { bootstrapTimelineAccountsField.disabled = !target.checked; if (target.checked) { bootstrapTimelineAccountsField.parentElement.classList.remove('disabled'); + bootstrapTimelineAccountsField.parentElement.parentElement.classList.remove('disabled'); } else { bootstrapTimelineAccountsField.parentElement.classList.add('disabled'); + bootstrapTimelineAccountsField.parentElement.parentElement.classList.add('disabled'); } } }; From 47e507fa61be6dc39dd9821e1d07c33e993cc246 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 14 Dec 2020 10:03:09 +0100 Subject: [PATCH 280/422] Add ability to require invite request text (#15326) Fixes #15273 Co-authored-by: Claire --- app/javascript/packs/admin.js | 26 ++++++++++++++++++++++ app/javascript/styles/mastodon/forms.scss | 15 ++++++++----- app/models/form/admin_settings.rb | 2 ++ app/models/user.rb | 3 ++- app/views/about/_registration.html.haml | 2 +- app/views/admin/settings/edit.html.haml | 6 +++++ app/views/auth/registrations/new.html.haml | 2 +- config/locales/en.yml | 3 +++ config/settings.yml | 1 + 9 files changed, 52 insertions(+), 8 deletions(-) diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index 1c44fb45b..8fd1b8a8e 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -67,10 +67,36 @@ const onEnableBootstrapTimelineAccountsChange = (target) => { delegate(document, '#form_admin_settings_enable_bootstrap_timeline_accounts', 'change', ({ target }) => onEnableBootstrapTimelineAccountsChange(target)); +const onChangeRegistrationMode = (target) => { + const enabled = target.value === 'approved'; + + [].forEach.call(document.querySelectorAll('#form_admin_settings_require_invite_text'), (input) => { + input.disabled = !enabled; + if (enabled) { + let element = input; + do { + element.classList.remove('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } else { + let element = input; + do { + element.classList.add('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } + }); +}; + +delegate(document, '#form_admin_settings_registrations_mode', 'change', ({ target }) => onChangeRegistrationMode(target)); + ready(() => { const domainBlockSeverityInput = document.getElementById('domain_block_severity'); if (domainBlockSeverityInput) onDomainBlockSeverityChange(domainBlockSeverityInput); const enableBootstrapTimelineAccounts = document.getElementById('form_admin_settings_enable_bootstrap_timeline_accounts'); if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts); + + const registrationMode = document.getElementById('form_admin_settings_registrations_mode'); + if (registrationMode) onChangeRegistrationMode(registrationMode); }); diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 92d89e6f2..e0604303b 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -377,11 +377,6 @@ code { box-shadow: none; } - &:focus:invalid:not(:placeholder-shown), - &:required:invalid:not(:placeholder-shown) { - border-color: lighten($error-red, 12%); - } - &:required:valid { border-color: $valid-value-color; } @@ -397,6 +392,16 @@ code { } } + input[type=text], + input[type=number], + input[type=email], + input[type=password] { + &:focus:invalid:not(:placeholder-shown), + &:required:invalid:not(:placeholder-shown) { + border-color: lighten($error-red, 12%); + } + } + .input.field_with_errors { label { color: lighten($error-red, 12%); diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 390836f28..e9f78da21 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -35,6 +35,7 @@ class Form::AdminSettings show_domain_blocks show_domain_blocks_rationale noindex + require_invite_text ).freeze BOOLEAN_KEYS = %i( @@ -51,6 +52,7 @@ class Form::AdminSettings trends trendable_by_default noindex + require_invite_text ).freeze UPLOAD_KEYS = %i( diff --git a/app/models/user.rb b/app/models/user.rb index 981dc6d47..6088f1994 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -82,7 +82,8 @@ class User < ApplicationRecord has_many :webauthn_credentials, dependent: :destroy has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy - accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? } + accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text } + validates :invite_request, presence: true, on: :create, if: -> { Setting.require_invite_text } validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? validates_with BlacklistedEmailValidator, on: :create diff --git a/app/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index 6160ca4d4..e4d614d71 100644 --- a/app/views/about/_registration.html.haml +++ b/app/views/about/_registration.html.haml @@ -16,7 +16,7 @@ - if approved_registrations? .fields-group = f.simple_fields_for :invite_request do |invite_request_fields| - = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: false + = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: Setting.require_invite_text .fields-group = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), required: true, disabled: closed_registrations? diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index 9e28766b1..a162490b5 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -43,6 +43,12 @@ %hr.spacer/ + .fields-group + = f.input :require_invite_text, as: :boolean, wrapper: :with_label, label: t('admin.settings.registrations.require_invite_text.title'), hint: t('admin.settings.registrations.require_invite_text.desc_html'), disabled: !approved_registrations? + .fields-group + + %hr.spacer/ + .fields-group = f.input :enable_bootstrap_timeline_accounts, as: :boolean, wrapper: :with_label, label: t('admin.settings.enable_bootstrap_timeline_accounts.title') .fields-group diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index de541847f..6981195ed 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -31,7 +31,7 @@ - if approved_registrations? && !@invite.present? .fields-group = f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields| - = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: false + = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: Setting.require_invite_text = f.input :invite_code, as: :hidden diff --git a/config/locales/en.yml b/config/locales/en.yml index f89f50e4d..114f86fd1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -586,6 +586,9 @@ en: min_invite_role: disabled: No one title: Allow invitations by + require_invite_text: + desc_html: When registrations require manual approval, make the “Why do you want to join?” invite request text mandatory rather than optional + title: Require new users to fill an invite request text registrations_mode: modes: approved: Approval required for sign up diff --git a/config/settings.yml b/config/settings.yml index 217745f28..9cf68a096 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -70,6 +70,7 @@ defaults: &defaults spam_check_enabled: true show_domain_blocks: 'disabled' show_domain_blocks_rationale: 'disabled' + require_invite_text: false development: <<: *defaults From 9342705e6bfc4f0e4f999bd3c1bb70d425fcb598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?= Date: Tue, 15 Dec 2020 02:04:56 +0100 Subject: [PATCH 281/422] Add app shortcuts (#15234) * Add app shortcuts Signed-off-by: mkljczk * Fix codeclimate issues Signed-off-by: mkljczk * Change shortcuts Signed-off-by: mkljczk * More consistent new-status icon Signed-off-by: mkljczk --- app/serializers/manifest_serializer.rb | 40 ++++++++++++++++++++++++- public/shortcuts/direct.png | Bin 0 -> 3045 bytes public/shortcuts/new-status.png | Bin 0 -> 3031 bytes public/shortcuts/notifications.png | Bin 0 -> 3067 bytes public/shortcuts/profile.png | Bin 0 -> 4190 bytes 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 public/shortcuts/direct.png create mode 100644 public/shortcuts/new-status.png create mode 100644 public/shortcuts/notifications.png create mode 100644 public/shortcuts/profile.png diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 21ec0d4be..dafe8f55b 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -7,7 +7,7 @@ class ManifestSerializer < ActiveModel::Serializer attributes :name, :short_name, :description, :icons, :theme_color, :background_color, :display, :start_url, :scope, - :share_target + :share_target, :shortcuts def name object.site_title @@ -64,4 +64,42 @@ class ManifestSerializer < ActiveModel::Serializer }, } end + + def shortcuts + [ + { + name: 'New toot', + url: '/web/statuses/new', + icons: [ + { + src: '/shortcuts/new-status.png', + type: 'image/png', + sizes: '192x192', + }, + ], + }, + { + name: 'Notifications', + url: '/web/notifications', + icons: [ + { + src: '/shortcuts/notifications.png', + type: 'image/png', + sizes: '192x192', + }, + ], + }, + { + name: 'Direct messages', + url: '/web/timelines/direct', + icons: [ + { + src: '/shortcuts/direct.png', + type: 'image/png', + sizes: '192x192', + }, + ], + }, + ] + end end diff --git a/public/shortcuts/direct.png b/public/shortcuts/direct.png new file mode 100644 index 0000000000000000000000000000000000000000..e8772c00e664042779abc16be73407e3e2cb0e89 GIT binary patch literal 3045 zcmd_s`9Bkm9|!Pl%#}0o5h~Zm{mF_*2sIx^LJ?9#jtQBoP_dEZKIT4h)Z~ayCK{0; zlIynoca~B{G$eG*)1Jr^cYQZ>f(IjutEPv5FfALbm zBD8S9s&LV^Xz5Dv($$hBhms|y68!bjCFjy5*RrLX<#>-5_}ee=o)vhn3cPnE-lr0O zw+bKlk`Vlgcpps+ts%l|h+(gZ;jf7iwWO#zVst$zrh)jRkrdZRLNt+(P0I=YEGP23 zU4GU~PHrZrV92R0puZWQzx}e> zGQ?;ZX1p6_w2m;^Mj6;KM*G-W$G>Zx<7*!$*SjazaXeEz8$Ht-z0>Qx(;Iy=>z`&f z`e!!=zHSWi%x!*|-yB)o8e7^P!*BhI-x?=uP4E!6CyCorr0tny=Ik=_E1CI~!knY* z%u|>PROSMWxwNuFptA_8EaEDQw8~m$u$R}^B;En{4{#E`4ivm1ldG z@t?i5?Y)hiy-n8M77u%GoBdyCW0a@ayac;MU3YK>@PP$|#HEkRE1Xi%(9}8&F*Gv0 zWMk`i&BgVmra(dn;Ccmi>m zOrg?Nx0yTN_c;e{wS_$ZfKZ|>)Y2tpk>JU>lW(OMzv2Y7lmvrqowk2`YY~*|;p%#_z|-}id(hq5`kE4t#j9R21#Us8RLiqmE94jP=FTosEbJjHCO+{8 zAvX5p_c#*AYxjhekGQqbTjWGLt+8t=;_|t{*<|)qS0k-`0-$GPZ51-#@yoiV(EEs{ zZ6-S!D~;;Pi-rcsxISwb6@qJE4tFbjjO9|wA&!>asgvEQGQ}b?sok&cj}eI)^+$s( z{88B-#nvA8=lhIlrn8#G9t+~4Mupbm#a(Neis({|WT=IZjdj!*i!vn%tHo3dJMH}}Ui2MsM)qOJij$a|^8 z61jRR1v4gT?qI@A)tXPXDXA;q(n3O<{T#mzB7#o8KNC?KL^f{%EGdGg8647$B(TM# z=ga}jM;VfSy|-0GS17G+`(-`YUGA8Z=}=xI#^MVYcU2?6w>n3xd~&eHyEg~aqOC~5 zgrz)pf7t78!Oype&{cE!C772saLlQ3%32{W8EjR0!Q5E>NP6H6mb5O!1$s-JmaeOW z*iUf-$;u0V8Z^f&%c+N6=yr+%J}dN{!??%vdyL-k7WP)=JF9(J0C=4K&MCoNguism ze4Qp)rC&56+KW=^w?FjIO9y;h%ZO1c6v$QII3>y!f)qEr5&C>o84vxP;iV4zSv_lP z>8{N$CX8m#j#eos`mvs7gf4Mu?2Z&Ix}j+_TDq?no&&J?y+ppy57u$yvq4KVnDdJg zvSX_0I)KcCwyZPjf)y_^_qEQ~S6GiCf8Mb8y&BXnr88qL=>3Hef$%@IM44xDdv1O)ybsWCR?%n_5q zhSqK&`1Sp;tYgi5gDc-XG~x4ABW(x!dR+ok3PDE+#JHkJ(^v-N*g@YS?dy#8RP+uN zI+6BgAHx!~>yU_3lutN}*f6>QrXKd(1nnjtvx8%rmZv_(0uUlaKl`qW{|(gvOL0Si z*9FdaK{Z0*Y z4K@Q!v95!vKof+|892fdXC1E5Vy2r(H^36iuUYL46uNH|zq;Q!;K3mMYGT=Ox7Lk8 zXz7OjYeE*m?Q>QXNo0KZQTXdk9eV>ki>Q&u76DWzCIGy-K zYu2j|KxT@Y3XaL?%$D+32_p0>f)Ji3xJ5&^;LXv3Xy+#H`=AN@$No?IV=u{Tc@l`Z zZejEC4$gNGCV-|e7JpL5y5-f|9jki5;G;d?5ixva2%Z48&!j+#s z1QMdZnGZ^o-}0^C%J=c#Lk!TYdnCe*j{pNXT2ze-(PdPUJ$mO~0~J}&aGSj!Ul;0! za0IE$UPYIa&}?dMU=)nhXfZVeNj^$~++VbJue+7fJUd`L<|Pnf=Z86p+*Wo*-JIiBg*mA2rEK}i$`$k)h32+pAZAhiiLpo#%yPAu$MD6|6K!YDuN0b?^DXa{U8k`OTa;LBx`8c13 zgTI1n;PSeNr2visY=rdT_D?#Cjb#=g_`n=&a}GjUih~W$MW~+OV9%lu`dS?9E(&q^ z90%K)hj6y!U>_&~6@rIxZS@CbBU#9;xD}FjEPqINlMQaDU4?7NH0v0Z4CVO6eQ_U< z4@;$8FYr!@y4DDu3!{?~FXC@t)XSe1Up(?b2{y18wsQq$Wlk8k#0Z<-9d3Q6m(Fqu z5qw;Uw)<;SC-2FojDl|~{4V&!uQVuWGEK61S9BzyWn6f-)ft+|JK3*?&n4U_ks>;z zr8GzW$hK>1zu2L6ZkR-HkW$DB^#WFh58aHdSxFAccq6t_6MJ(gyc*~gnzhMY~NO zgqm6?W!Lm!-Rx|-t6LVKbltj5HvY@FG0A3U%qA-e!tL*uJ%&j#Gv1lG_nv>>AABA* z>)g3>&gVOG|D1b{5U4;Z`Q+O&;vCUV3=`wTJh4Qq5*x%GksuC<6T*|6$bU=7zuAzl zS(4irm)mTY?@@*pN2wCMm}n#hh#6v;h^NRL6><6AGjd;epNi2#sGx35Z%Ngab&UdnK+W4o!g)UMz|w>Gcil-J1Bi7_GOzi!w@^AFD3ek7-T<_m~5+3 zm}9>9)x;>V1+jBxOSWA#OfpaWdSa3|fXD@NAltGYX6Y|}9WgEMszTmiIh1W%2h;Qu zzls>cH-2Ql2;A0HFi*YsMZ^e>@s*t;aN8HbL^bkv5H}&Ba<~sVU}SXS*AjCOPdm6z zYGG)&@(&T4kWE{-Z-!uM@ZvWRS0R`&a9=gR++gJIBffxC#=(8o2ZQq$zk;|3k&K7? zumVQsCVvZY1M*k{_hk#r_9y=!aTn592lwe949_e+kJ!8bQLN_zMw-4Ve+_XNaySF` zbq&n_PW~q1I;3z8?(-(scEh78Waec$S;{GG%)Byb*fpwl(^dx$&ed>~;LdR&qJ zJh6jL2QR@+oOeO~U350cz^=6+kcU0^<_CU$33_akzZ1v&AjflpPFv(}#nm2==hdNB z)8%i%b$(FbeS#)a<*&gVUJ%e7;~LZCFU8m%5b)TcQj-FJQJo<0QKTk~=SPQuFc{Qb z{uVsU0z!VMrbSozEASX2i0JXk3LOK02iQSm58CS{e;+ypL`vKi=9%Rhup0E!t>C4Vg@ss)-%$Xlx-0GOg2=)zpo@^_%ofo60>B|k4qgq2x< zZm^R@Q3PNFjSVzqBy9P4HAXB*2XuwqtO_##V`yZcIb&hT&x=rF9bTY2>}XvW0hmVP z0z;S%TK;FkpKlm-gHKR5hmi)y;67snlf)DII9AdYNvjw0H(jf$~Ppu9?Tebj9Ksa?L zynM``Y4m2)Az1y~+5vPE*#fWz8P&-D6M40#nE$oNm7w!kpe>6f)J>^#!g5SNpYjb}z zrUqaDg6b>3su1uLD;D?3KxzPHAgOx!`3BUx|9;?Yk>tPm>$cJmT>I#r?fo*78h~Yp zs$TxoM-{Jpu&3;o;H?{bwqE{BWjQqfamcEV{GaV4pWTU7aX93N{7n2*{xZm_m;66? z^R|+60*B;3rHlh`4#Juzf6yUtP=4kd2cR9&nkj!!A#hZFrkw*Y3~|kszt9jkEI%{M z0T_q8X3L*%2ppH68Rr1ZLtyje&ou;){~7ZffF($5hx~p+aP7l;kpDZDH~_0?h-l?s z-%fbne>2=+%-KQ!p0mmU*g!+rB|k#on+*=Y9vZ?v`4IwN>~R1RXb3yycW7W+z9cvR zSpU~z`Ej);D~B9_6EpMu7Y-g8)E&=L3L4Ajt3ZArMZ2A-~fn!MF?x`JKKD ziW^~&-{~7+7zzRTogNB-!Elh@>A`SIkl#T0--G-?4TqkG{E*+}2V%w{Kje4$k;q}l z5BXhwD83!?Lw-kTcWz>=TxMyGefkjcJ1{X;8RSp@?SCpAHDSWs^V35I}wH=>kxR07Mr8$gh-2k*?@} ztRVp5hXC>`Wldx%`kxaBK)4}*{K}cg7JxPcAiNMjel2Lr7685noKf(2J@gr(#6@7xXimjLo>!-6=g=#P34fU~!~z3*=o_BqI}6TN-{ zP)-~n0NLg5xdizQgPkrHev1BZ5dnbwma!=O7X5KI0s#3fqdS)Xlo0y}0OYp>cDY34 zQuKmZ7XwfTkY8J7MXp6JYDNGcza=z_e2QKeLjWMZ;lxC~MKA7003g5N^cNC0285M;VZKRqwFtGtL4R|Y*%Q47r0PJkF2%>01lW0(27?UEX zqK(xjv7Rt62X?hy1X;AfX*4V_glQ3U(MIb`Jr@AZ9sAdbFp4%jh6Vj1CcH(HqX8(Sat+ ziKvU-w3gUJ;{(O8gSA3M(Hjq;1AtFuCXhv=Zy+Opqh&OslY==!0|;chIT8C+te6u&L++^${+AAia83YHkNJCqOC?W?adil+TX({n<0VquCvf{Z zf2(l0g4xqy*QU^wL8aJ>_!Se)osK(BRSq5Ra z|0m1vc%@yBF}A?$+(J-+2kq^6fL+^Xcnt|cALbo0cHW*o7#vIp8ZZN$Su?h2GijA& zK^Ve>yxLDxI|Nh14FS(ejj7r7gZrcwhDH|zUZevn)u@O2paVv#2>~zH#A}ve;lAkE zl5JlE6V(TSSFhwHT(ORE_#DW#u7Y{`1%Vgyo+b_CN^0RXrl)wnL!%$B25(`AqV(F9eGxBFGN6(|ug`t>eBPNJ73#4C@ zpM^hDF?tx4Yal9#E@FyUA&xbc{aEhfl-%b^^dKsXUx-FxfS4hciMRsU{`9@2Z}p$b2IIEg}DAL%wE7Zev_-vt7PN8CpD; Z`ai>UH@>A_0vG@Q002ovPDHLkV1n|Rqn-c& literal 0 HcmV?d00001 diff --git a/public/shortcuts/notifications.png b/public/shortcuts/notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9d45718c82784e5c3380dcc9e4cd3fadb9e9b2 GIT binary patch literal 3067 zcmd_s`#;nF7Xa}0=AK(a5k8EP3b`Z_G5fei5-Pe=Nh!BVH*Dm7$tBEvZZVf!L#}hb z3%NCBo6C%0wz=oB?>>LW_wjh1*E#3+a~|gvW^H9Ectr9D004sKW=1yb-27kgaS6YwMf;pOj*7=VNhdYHI4SIL$bmRvb>}>!j}2$t&@b2Jw^dgh``B zoN?l$IcmxxY3f??lyx%RCS~eo>eQ{&Df=|MLmK{0I{scd{(c7jK?eR28t;h4J7waZ zW=%V1O+U+?cFCT8l}m8@MsWW|@W>;0a*_i5? znCiK>n%VfDY;%dVbEvwxq`JA}`nlAG`LxFQ^v3xNwx;<^EIA8H&c>2+TITcH$e6YT zO#4CsTgO6S$3ju(LUAYMJ6ji}q>ED8O)2}&VtEgxqGz$9cd?SKkMg5$v8sQudSLPA zz|zlOOSQk2>IRqU2bUU$sZGOF>@c-?WVvO8+A^}-I!bLDTW%j)?igS0WSdy&npo-n zv(k%O?VDWfpIRN5qW!|J4zf+J4zUqv!vxxIB5j078zrrc&#aBlu1(C+|IE>G^J`P{ z^eHkOzd)a+FbEU|k-{J?GD%C!nI+~d8WPP$zA}vH#Szb00$QjuaM{oNhw)*#WQEmt7&QL z!OhIC->|#oaQ}hh<0ns@pTG1(1OU_|y`P*;f9E4+EY=mG35Uwb#lYZD{|&FD#)pyx z@63a*$7E;OLt^CRZzLu#PL`qA{Guy2YF^^^HG7PU zd5$T#?&DwDJtqt+=`{v815sGNH@x`F1sd zk1UYM@%dFh6h za$H%KHhWzf9b!|mG=#N?t+n~*%)^i;8pa7aoC^qhEn9nB8}u-QqS29{n?_`Xg7d(~ zB1u~Y!3FTgm-vFk)eK>B{|HafoVL9Cw!{2Mz@rP4iEaw^ zlS{omoO>u)9}*4o>rXX7c9jzYc)#un|Jmgzl?2Ija1W*S7V)w>AOWP;sZpw(rLp-HBn*>>ZJN_qd(kmV}aVo z-%LMYbcFlRwO%|}_s)Urc!OZQ2;Hibtzt3@3d;5FF=!9_=%TfH4doYQG^8`3eni1} z;M8P&p?*6klp2q{698e3l#j|cMuM$>t3Mu>Iyvjje_&h37t~zO0RzJue8q1>Z0c~s z;34~~UhjX_Jx|=r7Zs8N;?aZB+lEQ|s(Ch=6iu*yGz2Omv%+!i+MqnpF10M)+g$#| zDv{TE^MZ6{abrL$hm7k#35DNy5#VSoq_s!xlNTYGFvm>zCO_ms+gok zlVXp10G2u&2sc-icyS+rOufG{LZmV9Q6aRE2k2!WM_>(*`*}{Ui_6168rt|&358r?ptu=FXF3Qf zz}YhZ7}M2mGeOXmI&p|oG~FVtlZUR_nzI_F1dnI<020rxm$Zw@%nP6qfBC^kMMemZ zPA^}XET|bB*!)>~fwTF~89_O9Ua50wz+DL7WG1iIEo6n9fB+)q!JF?+O>Sy}Vcf&# z%Cp_a8hL>`HUh$4vWm^hoJc2|Bf=UXqM3z|!xbB_!9V&J63=PJEtxA^>XduH+Tgzg zQ}FNl(BpC6(8KP#2O}!H=o@s{ zmL5O?1^NrNU8ax z&9mX(>fhgXR_Q8k;F+#JlR;SEG~>yY9JMmxl-TBwg`W=y`Z z>G@ng@;S;z^kHctAM#Lfz*Ntj$`IAq#Tw75c86&1?jbFKsc*Y$G5abP5B$=V4^if6 z5Cyt8EbXqsXO@CZO=yFh!WrF?W!yk-f{p2{iVf;w`c>;o;m9v5MAthi3h~(FUqQaa zek|^`lCQ*>sHCw_T7_8a3C$|pl4Ac8L!x>^es1s0@a{iX2CQzE zeLuZF2;1k_>Afvbhbx2Y_|UjNP^~6Mze|XfOV|AJpw>kGlYHK^>0>>ZtQ`7aBqj9$ z@$GP##2_{-z@>8m@uv6fLc3O1Rx~<9yFQi0#P( zl3tzAs(vNe#B_*a99>s$ziu745~WU9+ya+giP+)3)JIIob-t>&C#rq2Q)?oHvqs0V zjbC&S+f;Pey5U}}BjEKZLsS>tz$j#(?z6h9b1O}73Pfg zT?vBEl3Om;mU5}XCJ@z$%=L3zDkSD zs*~Z}SB_+nKbXhs-mqdH&&<3jG9RJZ$Wdpf9mS|sjo9{t7RE%GV&*TW6P_tfG|lQ!HFFMNhl@(0dXC$Ns38GoH+HzuD{mbc-Pq20tsn)&iVpt*!6zhd-u-F zf27|-hUFLyT%D`bdnLHpzuT)D-;+ zqL^rg*rU>H+G+)qBfs!7i88_qVaJWvv|T2YB%kot5f#KVgq$?frY+Y&S?(A9TB6E) zs|xX2%e-mZwNRS-guj~DgFC)sPXxC0YA7%D!e2)0!W=(kYXr9aGAJ=M;@?cPK!_=a z$6zxQ>74Mhh*}8Gb?}&EL811Fzm)JmY_5gJrW8uGUijHW9Rwx~JXYCIt~KH>B6=Vy z>EJOdf`Stl{wiW0gd{yYhO40H_{5(_T!eU(fyXir%8pI^CBz^^qZ~Y@B~W-|;d8|1 zZU{wrb|cdCQSq-KjzS#Tz+=4z%3l!w2I34vp&dNt8*~@{M&b&@pe;Q18+8@`7NP?p z&>q&n7Tv_Zjp)VT0~6N5HeJNOo#@A)gNI;EY}Y~j0~l-&fdOTmz?}Br&JSXF5^PgV z{97>R2XU?mwx}Zhjo9r03GNPUlwJHAu+I;Yd{3}JR`IXF8(v`18{;*yiGKxRdw|8U zLn~x*07P{H%cDqTis#3G0XryhyZG~Pm<8B;s3y;?;$MYhjKHDem8;z7064%796M<5 zHt`o>P=Lb}xkdch$lJ3ty(81&vu`KF$t$Dc^>ahwl@I&HUmCsQg*vZzvB4|KPWFkt zrw7Eb7N0ox<+!-+^^1w=Td-a9yhGV;Z~$a%dx)uG5XS9gh5PY;T3`vb7^ zqm-sf{8>m;yTBw(S3aQW%@YT@EERq@UZ&|&&+s&azc?XpRw^6-DawhjdZ$G3QIGAy z59KkM9yMGV2|6CeAV{s#;@_^ zm08C8v%#rIs)QfPlLx!SHF^rc0fL%b=7a<6(%I0y$(i7t*A3zi-7&iS-6WiVv}w2a zxf-Lk1?h%w%!rb=J+2ae=uS~fhxSgu+FWg?1MJav+H))T(#nnE4_zEz?bd!ew8t*- za}jDS>+t$#=0y3a0auIv9*^(u7F|BA-xsh(*V^F#Rk|9LUv9}D{(JoT9Z&FyrLhxK zSuOr`#JrBi?CA50A69os)-_{o88apR`e?*(!baex|K4Yun&uTl=cXnvZkCSLKU5u;ijYxK{iG{)a9ny!xN z>;SCgw0In#Kv!dZ?e!}sex~~4LEVGo3gU5qMqLf{>DLoVIsi}WGU1JckAu|tm*Vv9H3BVL%n&?r=$ZgI7B~J7>fhc>ujX`X9tyafRP)sx;sF9 zH1RJd0y-P1qDfr`7#!C=!yIdS`BDy$ulvF3norbq06x=|yb%8bGQv5)Rv2b3 zm}N~x2dHQofbbu%HJk%f!Z34UXmUnL2jJ}07~lI;hI4>c7-j*tW`9eDuRO>f8bWKh z{r@{K%mPQ6hm~6ZV+UvvcNV=5p#R8$Q9^S5d(>J7RGk^bxIRiwr~~YPK^CV%{P`Qb z$~eH4|J}g2KFW?z2dIWY7Q>516~tdaj;#4{$VgO&I>31tWHB5##v#PAI{+v5!gz+| ze5eBq!60GI23(f=Y{0XJd$9P8%+NjYuY@teGw#17e(|QfYk^Cs8WW9`>;UUwh{#;| z{)Uv|=Ne`hzo@Kd2iOEds1+glv)Udpi0bmOu!$XDCkzoiQSR>~Nt4bgU9R=`F>bN3 zlO3QOhKSC<_>6c?g7p9=^~HF_OgTHi5f~yidWNUPPY<~_W%`LW1iZz`5q5wk7$SDM zebcUdOMDX1o{7-J4$uZe#7Fu$kT!OJP8cG7#{9G5wU1LFh%iZVr)Gs`>` z7w;NZh>3=e9l#Gm%mq`1a9&W(3$*R6#dG{84|XqEagk4vy?$=U5#j&pXs`Hh*VK}4 zuXlem@JL$3mrnEr(>{JbI1S-Hz|Rgaul3Fj-6c5}P_$aWe5mAdl+Xgcz9^}$zT~+%^hH#9pJ8(QyiMZAHLv=yB0uQ%W%~2Vtyi= zy*4iX{C;0jwFdZ&E}u^OhNd&orZIeoht~x0R+QI#4RP1d^~6^}5?h&nYUmT5(VH=^ zC3wnmvTaoCKRXosEC<--AM6p2?duYc@9z$lV`VXxpBfPFkl-)URE*y_#Pa>@jJ*G! zjH4ZE@o8I6SUU%}aD5^uJS)!G9&Z~F6DiEN%+(*Cw`e=|8wPNp8`g{&P(e1HF*H#jxaZ3?8tBKV@sm0$SnFguuCQJ6f{;i=RsANJeY zkH0qd>r_WzUW;u|zGLR>b1oW_rxO>*;d)1s+j8Xf!`1F7@z$q4@sxuxNL(aDr)^NB zUxe|Iz~ZBxl*Z=sbfw|)Nbo7d^Y-rs0>LfQK3Yh#ldyyGPETv+q&W4(Xt1z#s>84O zAdoIE!juk$IId{TFT3HLs&Vzt6L%^d4A(byGq_s=K_>?9a_JBZr))U1%Ed06sw}B^ zU9l!*55#Z~*kk)3Vmt++ABa)%NTlpJecS?{fKzx|v|PzU@w{iwyDtzh@(aasC|6~G^tu-8{@B5f_jjwd8+2aD0vXT0xwI zBV42Z(JpJJ+Bzp8PzNYG*(baB+l@$#{^wpl zLZJ4;so*7dfc&K#fZqoMWb7E{&VfLkLE@O8z$5$rVVs~|#?Dop!5ILj7?QUJalH|( z(H|Ac*tx%-=z};NqRSVM)d31)ae#EN*c#oSqKYU|GJiZ^b0qo-AYf_{{*<;w%=*w5T{k=fLC8S5R z15P?N;r_zetj*PiosE8Amz#|+=ARYM9!7>Zt7(xV{%4nAccUL!Mzpxu5TBz+o~8Wr zloZurSd+^PCmQ|GX15#USPNc^S;2E}_6FBh5;(wS!^uWJSnFnkOwHU9ubxJxh-7&3 zV7Dw`54DEVjeazX@VLEVWJMF4AQAY49p_t>K>V!1EF%?-ez?@_2I42daTLyoi$6Aa zMV~x%07{KiHoAa184UH^KtTNMIC2Lq#Z!lR#F_RnF?Ca#%x`r@svBKIHqj%?0f}$> z1Hn?NFVuN)ip<>KuV@+&&EHJQu+JX~YcAVxL!%2Rk}*@*4Z72DWy$_=VoWavCuYQ$ zU+TKQMTVOiUC=(oDv1O4vd?f^ql;QaT*Tl2n_-QuGThkc!t#hg3=*&j)>fY3=0+D- zf`I}yQDVr@=t6g6uzo#2rSCmQv?ND;{@5VWS|2J z8QWZwv`R5YD0O>6Ud{2OJXfa%PLSpH)a;s4o3bp;nmWSffXge@XhMtQ#VOG4I{}w# z;+kb%2+?u8rtOzOiK%x4u3pI{T&E#S+nF|Py&B4MpCfQF?nl{OWLiBNjG@^iLByMXc`rBsT*#>D)gx=1OP81ULL_lHD2h2WlU(+%2XyKe; zIgwB7CE67beY@Eg?$dINFj~A0kwI)FDv4I&j*G>9$GpZ$^O`d-f@pR;A##WvL^W}q z7)pWIhs@uuHm@ZIcX+f^I>t(3J+X<{Nt6>uh$fL&42Tof75Ax orpf${a`QVknZL0T7PqGTAIiWG;gNrqZvX%Q07*qoM6N<$g0IjP`~Uy| literal 0 HcmV?d00001 From a2ef002214572f8166413d989bf2f38768a6910d Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Tue, 15 Dec 2020 11:04:03 +0900 Subject: [PATCH 282/422] Fix to isolate the sidekiq process that runs the scheduler job (#15314) --- boxfile.yml | 1 + config/sidekiq.yml | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/boxfile.yml b/boxfile.yml index c4fd19ce6..c1d89bb15 100644 --- a/boxfile.yml +++ b/boxfile.yml @@ -110,6 +110,7 @@ worker.sidekiq: mailers: bundle exec sidekiq -c 5 -q mailers -L /app/log/sidekiq.log pull: bundle exec sidekiq -c 5 -q pull -L /app/log/sidekiq.log push: bundle exec sidekiq -c 5 -q push -L /app/log/sidekiq.log + scheduler: bundle exec sidekiq -c 5 -q scheduler -L /app/log/sidekiq.log writable_dirs: - tmp diff --git a/config/sidekiq.yml b/config/sidekiq.yml index a71c1098e..010923717 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -5,37 +5,51 @@ - [push, 4] - [mailers, 2] - [pull] + - [scheduler] +:scheduler: + :listened_queues_only: true :schedule: scheduled_statuses_scheduler: every: '5m' class: Scheduler::ScheduledStatusesScheduler + queue: scheduler trending_tags_scheduler: every: '5m' class: Scheduler::TrendingTagsScheduler + queue: scheduler media_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::MediaCleanupScheduler + queue: scheduler feed_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * *' class: Scheduler::FeedCleanupScheduler + queue: scheduler doorkeeper_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * 0' class: Scheduler::DoorkeeperCleanupScheduler + queue: scheduler user_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(4..6) %> * * *' class: Scheduler::UserCleanupScheduler + queue: scheduler ip_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::IpCleanupScheduler + queue: scheduler email_scheduler: cron: '0 10 * * 2' class: Scheduler::EmailScheduler + queue: scheduler backup_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::BackupCleanupScheduler + queue: scheduler pghero_scheduler: cron: '0 0 * * *' class: Scheduler::PgheroScheduler + queue: scheduler instance_refresh_scheduler: cron: '0 * * * *' class: Scheduler::InstanceRefreshScheduler + queue: scheduler From 7c800fa80188872805091f733c919d6b07b3936e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Dec 2020 03:17:06 +0100 Subject: [PATCH 283/422] Bump ini from 1.3.5 to 1.3.7 (#15317) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1a0ef66e2..653d67133 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5523,9 +5523,9 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== inquirer@^0.12.0: version "0.12.0" From 1390cc194bd07b85fe36e31a0cab22981315974d Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 15 Dec 2020 04:30:15 +0100 Subject: [PATCH 284/422] Add indication to admin UI of whether a report has been forwarded (#13237) * Add indication to admin UI of whether a report has been forwarded * Rework how forwarded status is displayed Co-authored-by: Claire --- app/models/report.rb | 1 + app/services/report_service.rb | 3 ++- app/views/admin/reports/index.html.haml | 4 ++++ app/views/admin/reports/show.html.haml | 10 ++++++++++ config/locales/en.yml | 2 ++ db/migrate/20200309150742_add_forwarded_to_reports.rb | 5 +++++ db/schema.rb | 1 + 7 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20200309150742_add_forwarded_to_reports.rb diff --git a/app/models/report.rb b/app/models/report.rb index f31bcfd2e..cd08120e4 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -14,6 +14,7 @@ # target_account_id :bigint(8) not null # assigned_account_id :bigint(8) # uri :string +# forwarded :boolean # class Report < ApplicationRecord diff --git a/app/services/report_service.rb b/app/services/report_service.rb index 1e955c1e7..9d9c7d6c9 100644 --- a/app/services/report_service.rb +++ b/app/services/report_service.rb @@ -24,7 +24,8 @@ class ReportService < BaseService target_account: @target_account, status_ids: @status_ids, comment: @comment, - uri: @options[:uri] + uri: @options[:uri], + forwarded: ActiveModel::Type::Boolean.new.cast(@options[:forward]) ) end diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml index bb441380e..721c55f71 100644 --- a/app/views/admin/reports/index.html.haml +++ b/app/views/admin/reports/index.html.haml @@ -59,6 +59,10 @@ = fa_icon('camera') = report.media_attachments.count + - if report.forwarded? + · + = t('admin.reports.forwarded_to', domain: target_account.domain) + .report-card__summary__item__assigned - if report.assigned_account.present? = admin_account_link_to report.assigned_account diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 2681419ca..b060c553f 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -46,6 +46,16 @@ %td{ colspan: 2 } - if @report.action_taken? = table_link_to 'envelope-open', t('admin.reports.reopen'), admin_report_path(@report, outcome: 'reopen'), method: :put + - unless @report.target_account.local? + %tr + %th= t('admin.reports.forwarded') + %td{ colspan: 3 } + - if @report.forwarded.nil? + \- + - elsif @report.forwarded? + = t('simple_form.yes') + - else + = t('simple_form.no') - if !@report.action_taken_by_account.nil? %tr %th= t('admin.reports.action_taken_by') diff --git a/config/locales/en.yml b/config/locales/en.yml index 114f86fd1..3ff01ac86 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -517,6 +517,8 @@ en: comment: none: None created_at: Reported + forwarded: Forwarded + forwarded_to: Forwarded to %{domain} mark_as_resolved: Mark as resolved mark_as_unresolved: Mark as unresolved notes: diff --git a/db/migrate/20200309150742_add_forwarded_to_reports.rb b/db/migrate/20200309150742_add_forwarded_to_reports.rb new file mode 100644 index 000000000..df278240b --- /dev/null +++ b/db/migrate/20200309150742_add_forwarded_to_reports.rb @@ -0,0 +1,5 @@ +class AddForwardedToReports < ActiveRecord::Migration[5.2] + def change + add_column :reports, :forwarded, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 2f9d369be..55822a4b3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -717,6 +717,7 @@ ActiveRecord::Schema.define(version: 2020_12_06_004238) do t.bigint "target_account_id", null: false t.bigint "assigned_account_id" t.string "uri" + t.boolean "forwarded" t.index ["account_id"], name: "index_reports_on_account_id" t.index ["target_account_id"], name: "index_reports_on_target_account_id" end From 75d2762fdf600de6785f612caf182b32064a9bf6 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Tue, 15 Dec 2020 13:28:14 +0800 Subject: [PATCH 285/422] Add "invite request content" display in user account admin page (#15265) * feat: display `invite_request_text` in admin's user account page * fix: move invite_request to the bottom of accounts page * fix: remove time display, remove formate, change code terminology * fix: remove escape --- app/views/admin/accounts/show.html.haml | 10 ++++++++++ config/locales/en.yml | 1 + 2 files changed, 11 insertions(+) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index d5978eddd..ae527cc23 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -242,3 +242,13 @@ .actions = f.button :button, t('admin.account_moderation_notes.create'), type: :submit + + %hr.spacer/ + + - if @account.user&.invite_request&.text&.present? + %div.speech-bubble + %div.speech-bubble__bubble + = @account.user&.invite_request&.text + %div.speech-bubble__owner + = admin_account_link_to @account + = t('admin.accounts.invite_request_text') diff --git a/config/locales/en.yml b/config/locales/en.yml index 3ff01ac86..1f5798fcc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -131,6 +131,7 @@ en: follows: Follows header: Header inbox_url: Inbox URL + invite_request_text: Reasons for joining invited_by: Invited by ip: IP joined: Joined From 1045549f85041b13002801808b30a332c3a68c61 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 15 Dec 2020 12:55:29 +0100 Subject: [PATCH 286/422] Add stoplight for object storage failures, return HTTP 503 (#13043) --- app/controllers/api/base_controller.rb | 2 +- app/controllers/application_controller.rb | 2 +- app/lib/activitypub/activity/create.rb | 4 ++++ config/initializers/paperclip.rb | 11 +++++++++++ lib/paperclip/attachment_extensions.rb | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index fe199e689..85f4cc768 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -40,7 +40,7 @@ class Api::BaseController < ApplicationController render json: { error: 'This action is not allowed' }, status: 403 end - rescue_from Mastodon::RaceConditionError do + rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight do render json: { error: 'There was a temporary problem serving your request, please try again' }, status: 503 end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2201e463e..44616d6e5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -28,7 +28,7 @@ class ApplicationController < ActionController::Base rescue_from ActiveRecord::RecordNotFound, with: :not_found rescue_from Mastodon::NotPermittedError, with: :forbidden rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error - rescue_from Mastodon::RaceConditionError, with: :service_unavailable + rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, with: :service_unavailable rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index c77f237f9..612744676 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -228,6 +228,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: shortcode, uri: uri) emoji.image_remote_url = image_url emoji.save + rescue Seahorse::Client::NetworkingError + nil end def process_attachments @@ -250,6 +252,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity media_attachment.save rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) + rescue Seahorse::Client::NetworkingError + nil end end diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index 25adcd8d6..9ad7fd814 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -113,3 +113,14 @@ else end Paperclip.options[:content_type_mappings] = { csv: Import::FILE_TYPES } + +# In some places in the code, we rescue this exception, but we don't always +# load the S3 library, so it may be an undefined constant: + +unless defined?(Seahorse) + module Seahorse + module Client + class NetworkingError < StandardError; end + end + end +end diff --git a/lib/paperclip/attachment_extensions.rb b/lib/paperclip/attachment_extensions.rb index 752e79e65..94f7769b6 100644 --- a/lib/paperclip/attachment_extensions.rb +++ b/lib/paperclip/attachment_extensions.rb @@ -39,6 +39,23 @@ module Paperclip def default_url(style_name = default_style) @url_generator.for_as_default(style_name) end + + STOPLIGHT_THRESHOLD = 10 + STOPLIGHT_COOLDOWN = 30 + + # We overwrite this method to put a circuit breaker around + # calls to object storage, to stop hitting APIs that are slow + # to respond or don't respond at all and as such minimize the + # impact of object storage outages on application throughput + def save + Stoplight('object-storage') { super }.with_threshold(STOPLIGHT_THRESHOLD).with_cool_off_time(STOPLIGHT_COOLDOWN).with_error_handler do |error, handle| + if error.is_a?(Seahorse::Client::NetworkingError) + handle.call(error) + else + raise error + end + end.run + end end end From 1f564051b6b447e3663852c482982b3ff5a2f238 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 15 Dec 2020 12:56:43 +0100 Subject: [PATCH 287/422] Change RTL detection to rely on unicode-bidi paragraph by paragraph (#14573) --- app/helpers/statuses_helper.rb | 20 ------------ .../mastodon/components/autosuggest_input.js | 8 +---- .../components/autosuggest_textarea.js | 8 +---- .../mastodon/components/status_content.js | 18 ++++------- .../compose/components/reply_indicator.js | 6 +--- app/javascript/mastodon/rtl.js | 32 ------------------- app/javascript/styles/mailer.scss | 12 ++++++- .../styles/mastodon/components.scss | 2 ++ .../notification_mailer/_status.html.haml | 4 +-- app/views/statuses/_detailed_status.html.haml | 2 +- app/views/statuses/_simple_status.html.haml | 2 +- spec/helpers/statuses_helper_spec.rb | 18 ----------- 12 files changed, 26 insertions(+), 106 deletions(-) delete mode 100644 app/javascript/mastodon/rtl.js diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index daed9048f..1f654f34f 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -92,22 +92,6 @@ module StatusesHelper end end - def rtl_status?(status) - status.local? ? rtl?(status.text) : rtl?(strip_tags(status.text)) - end - - def rtl?(text) - text = simplified_text(text) - rtl_words = text.scan(/[\p{Hebrew}\p{Arabic}\p{Syriac}\p{Thaana}\p{Nko}]+/m) - - if rtl_words.present? - total_size = text.size.to_f - rtl_size(rtl_words) / total_size > 0.3 - else - false - end - end - def fa_visibility_icon(status) case status.visibility when 'public' @@ -143,10 +127,6 @@ module StatusesHelper end end - def rtl_size(words) - words.reduce(0) { |acc, elem| acc + elem.size }.to_f - end - def embedded_view? params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION end diff --git a/app/javascript/mastodon/components/autosuggest_input.js b/app/javascript/mastodon/components/autosuggest_input.js index 6d2035add..5187f95c8 100644 --- a/app/javascript/mastodon/components/autosuggest_input.js +++ b/app/javascript/mastodon/components/autosuggest_input.js @@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji'; import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import classNames from 'classnames'; import { List as ImmutableList } from 'immutable'; @@ -189,11 +188,6 @@ export default class AutosuggestInput extends ImmutablePureComponent { render () { const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength } = this.props; const { suggestionsHidden } = this.state; - const style = { direction: 'ltr' }; - - if (isRtl(value)) { - style.direction = 'rtl'; - } return (
@@ -212,7 +206,7 @@ export default class AutosuggestInput extends ImmutablePureComponent { onKeyUp={onKeyUp} onFocus={this.onFocus} onBlur={this.onBlur} - style={style} + dir='auto' aria-autocomplete='list' id={id} className={className} diff --git a/app/javascript/mastodon/components/autosuggest_textarea.js b/app/javascript/mastodon/components/autosuggest_textarea.js index 58ec4f6eb..08b9cd80b 100644 --- a/app/javascript/mastodon/components/autosuggest_textarea.js +++ b/app/javascript/mastodon/components/autosuggest_textarea.js @@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji'; import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Textarea from 'react-textarea-autosize'; import classNames from 'classnames'; @@ -195,11 +194,6 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { render () { const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, children } = this.props; const { suggestionsHidden } = this.state; - const style = { direction: 'ltr' }; - - if (isRtl(value)) { - style.direction = 'rtl'; - } return [
@@ -220,7 +214,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { onFocus={this.onFocus} onBlur={this.onBlur} onPaste={this.onPaste} - style={style} + dir='auto' aria-autocomplete='list' /> diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 3200f2d82..185a2a663 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -1,7 +1,6 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; import { FormattedMessage } from 'react-intl'; import Permalink from './permalink'; import classnames from 'classnames'; @@ -186,17 +185,12 @@ export default class StatusContent extends React.PureComponent { const content = { __html: status.get('contentHtml') }; const spoilerContent = { __html: status.get('spoilerHtml') }; - const directionStyle = { direction: 'ltr' }; const classNames = classnames('status__content', { 'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--collapsed': renderReadMore, }); - if (isRtl(status.get('search_index'))) { - directionStyle.direction = 'rtl'; - } - const showThreadButton = ( + ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js index 6daf75814..df9b7fb1b 100644 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.js @@ -2,7 +2,8 @@ import React from 'react'; import Icon from 'mastodon/components/icon'; import Button from 'mastodon/components/button'; import IconButton from 'mastodon/components/icon_button'; -import { requestBrowserPermission, dismissBrowserPermission } from 'mastodon/actions/notifications'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { changeSetting } from 'mastodon/actions/settings'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -25,7 +26,7 @@ class NotificationsPermissionBanner extends React.PureComponent { } handleClose = () => { - this.props.dispatch(dismissBrowserPermission()); + this.props.dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); } render () { diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 2e0afd863..108470c9a 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -62,7 +62,7 @@ const mapStateToProps = state => ({ numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, lastReadId: state.getIn(['notifications', 'readMarkerId']), canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0), - needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default', + needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default' && !state.getIn(['settings', 'notifications', 'dismissPermissionBanner']), }); export default @connect(mapStateToProps) diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 46a9d5376..1d4874717 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -12,7 +12,6 @@ import { NOTIFICATIONS_MARK_AS_READ, NOTIFICATIONS_SET_BROWSER_SUPPORT, NOTIFICATIONS_SET_BROWSER_PERMISSION, - NOTIFICATIONS_DISMISS_BROWSER_PERMISSION, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, @@ -251,8 +250,6 @@ export default function notifications(state = initialState, action) { return state.set('browserSupport', action.value); case NOTIFICATIONS_SET_BROWSER_PERMISSION: return state.set('browserPermission', action.value); - case NOTIFICATIONS_DISMISS_BROWSER_PERMISSION: - return state.set('browserPermission', 'denied'); default: return state; } diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index 057fa353a..357ab352a 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -44,6 +44,8 @@ const initialState = ImmutableMap({ advanced: false, }), + dismissPermissionBanner: false, + shows: ImmutableMap({ follow: true, follow_request: false, diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 22bf025fb..2163d74fc 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3459,6 +3459,12 @@ a.status-card.compact:hover { } } +.column-header__permission-btn { + display: inline; + font-weight: inherit; + text-decoration: underline; +} + .column-header__setting-arrows { float: right; @@ -3857,7 +3863,7 @@ a.status-card.compact:hover { } .column-settings__row { - .text-btn { + .text-btn:not(.column-header__permission-btn) { margin-bottom: 15px; } } From 2032748050b5ed1491473886107f622eea8e0c3f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 16 Dec 2020 03:24:55 +0100 Subject: [PATCH 291/422] New Crowdin updates (#15220) * New translations doorkeeper.en.yml (Slovak) [ci skip] * New translations simple_form.en.yml (Slovak) [ci skip] * New translations en.yml (Slovak) [ci skip] * New translations en.json (Slovak) [ci skip] * New translations doorkeeper.en.yml (Russian) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations doorkeeper.en.yml (Portuguese) [ci skip] * New translations simple_form.en.yml (Portuguese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations doorkeeper.en.yml (Polish) [ci skip] * New translations simple_form.en.yml (Polish) [ci skip] * New translations en.yml (Georgian) [ci skip] * New translations doorkeeper.en.yml (Japanese) [ci skip] * New translations doorkeeper.en.yml (Catalan) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations simple_form.en.yml (Basque) [ci skip] * New translations en.yml (Basque) [ci skip] * New translations en.json (Basque) [ci skip] * New translations doorkeeper.en.yml (Greek) [ci skip] * New translations en.json (Greek) [ci skip] * New translations doorkeeper.en.yml (German) [ci skip] * New translations en.yml (German) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations doorkeeper.en.yml (Danish) [ci skip] * New translations simple_form.en.yml (Danish) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations en.json (Danish) [ci skip] * New translations doorkeeper.en.yml (Czech) [ci skip] * New translations simple_form.en.yml (Czech) [ci skip] * New translations en.yml (Czech) [ci skip] * New translations doorkeeper.en.yml (Basque) [ci skip] * New translations en.yml (Finnish) [ci skip] * New translations simple_form.en.yml (Japanese) [ci skip] * New translations doorkeeper.en.yml (Hungarian) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations doorkeeper.en.yml (Italian) [ci skip] * New translations simple_form.en.yml (Italian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations doorkeeper.en.yml (Armenian) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations simple_form.en.yml (Finnish) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations doorkeeper.en.yml (Hebrew) [ci skip] * New translations simple_form.en.yml (Hebrew) [ci skip] * New translations en.yml (Hebrew) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations doorkeeper.en.yml (Finnish) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations simple_form.en.yml (Galician) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations simple_form.en.yml (Catalan) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations simple_form.en.yml (Korean) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations simple_form.en.yml (Portuguese) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations simple_form.en.yml (Italian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations simple_form.en.yml (Swedish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations simple_form.en.yml (Polish) [ci skip] * New translations simple_form.en.yml (Russian) [ci skip] * New translations en.yml (Sardinian) [ci skip] * New translations simple_form.en.yml (Sardinian) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations simple_form.en.yml (Icelandic) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations simple_form.en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (German) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (French) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (French) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations simple_form.en.yml (Albanian) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations simple_form.en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations simple_form.en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Greek) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Turkish) [ci skip] * New translations simple_form.en.yml (Sardinian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations devise.en.yml (Hungarian) [ci skip] * New translations simple_form.en.yml (Sardinian) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (German) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations en.yml (German) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations simple_form.en.yml (Persian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations en.yml (Persian) [ci skip] * ran `yarn manage:translations` * ran `i18n-tasks normalize` * Ran `yarn manage:translations` * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Korean) [ci skip] * Ran `i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/ar.json | 10 +- app/javascript/mastodon/locales/ast.json | 10 +- app/javascript/mastodon/locales/bg.json | 10 +- app/javascript/mastodon/locales/bn.json | 10 +- app/javascript/mastodon/locales/br.json | 10 +- app/javascript/mastodon/locales/ca.json | 10 +- app/javascript/mastodon/locales/co.json | 10 +- app/javascript/mastodon/locales/cs.json | 16 +- app/javascript/mastodon/locales/cy.json | 10 +- app/javascript/mastodon/locales/da.json | 10 +- app/javascript/mastodon/locales/de.json | 12 +- .../mastodon/locales/defaultMessages.json | 53 +- app/javascript/mastodon/locales/el.json | 10 +- app/javascript/mastodon/locales/en.json | 10 +- app/javascript/mastodon/locales/eo.json | 28 +- app/javascript/mastodon/locales/es-AR.json | 10 +- app/javascript/mastodon/locales/es.json | 12 +- app/javascript/mastodon/locales/et.json | 10 +- app/javascript/mastodon/locales/eu.json | 10 +- app/javascript/mastodon/locales/fa.json | 16 +- app/javascript/mastodon/locales/fi.json | 10 +- app/javascript/mastodon/locales/fr.json | 14 +- app/javascript/mastodon/locales/ga.json | 10 +- app/javascript/mastodon/locales/gl.json | 10 +- app/javascript/mastodon/locales/he.json | 10 +- app/javascript/mastodon/locales/hi.json | 10 +- app/javascript/mastodon/locales/hr.json | 10 +- app/javascript/mastodon/locales/hu.json | 10 +- app/javascript/mastodon/locales/hy.json | 10 +- app/javascript/mastodon/locales/id.json | 10 +- app/javascript/mastodon/locales/io.json | 10 +- app/javascript/mastodon/locales/is.json | 10 +- app/javascript/mastodon/locales/it.json | 10 +- app/javascript/mastodon/locales/ja.json | 14 +- app/javascript/mastodon/locales/ka.json | 10 +- app/javascript/mastodon/locales/kab.json | 12 +- app/javascript/mastodon/locales/kk.json | 10 +- app/javascript/mastodon/locales/kn.json | 10 +- app/javascript/mastodon/locales/ko.json | 20 +- app/javascript/mastodon/locales/ku.json | 16 +- app/javascript/mastodon/locales/lt.json | 10 +- app/javascript/mastodon/locales/lv.json | 10 +- app/javascript/mastodon/locales/mk.json | 10 +- app/javascript/mastodon/locales/ml.json | 10 +- app/javascript/mastodon/locales/mr.json | 10 +- app/javascript/mastodon/locales/ms.json | 10 +- app/javascript/mastodon/locales/nl.json | 54 +- app/javascript/mastodon/locales/nn.json | 10 +- app/javascript/mastodon/locales/no.json | 10 +- app/javascript/mastodon/locales/oc.json | 10 +- app/javascript/mastodon/locales/pl.json | 12 +- app/javascript/mastodon/locales/pt-BR.json | 10 +- app/javascript/mastodon/locales/pt-PT.json | 10 +- app/javascript/mastodon/locales/ro.json | 10 +- app/javascript/mastodon/locales/ru.json | 10 +- app/javascript/mastodon/locales/sa.json | 10 +- app/javascript/mastodon/locales/sc.json | 184 +-- app/javascript/mastodon/locales/sk.json | 10 +- app/javascript/mastodon/locales/sl.json | 10 +- app/javascript/mastodon/locales/sq.json | 10 +- app/javascript/mastodon/locales/sr-Latn.json | 10 +- app/javascript/mastodon/locales/sr.json | 10 +- app/javascript/mastodon/locales/sv.json | 20 +- app/javascript/mastodon/locales/szl.json | 10 +- app/javascript/mastodon/locales/ta.json | 10 +- app/javascript/mastodon/locales/tai.json | 10 +- app/javascript/mastodon/locales/te.json | 10 +- app/javascript/mastodon/locales/th.json | 18 +- app/javascript/mastodon/locales/tr.json | 10 +- app/javascript/mastodon/locales/tt.json | 486 ++++++ app/javascript/mastodon/locales/ug.json | 10 +- app/javascript/mastodon/locales/uk.json | 10 +- app/javascript/mastodon/locales/ur.json | 10 +- app/javascript/mastodon/locales/vi.json | 94 +- .../mastodon/locales/whitelist_tt.json | 2 + app/javascript/mastodon/locales/zgh.json | 180 ++- app/javascript/mastodon/locales/zh-CN.json | 10 +- app/javascript/mastodon/locales/zh-HK.json | 232 +-- app/javascript/mastodon/locales/zh-TW.json | 38 +- config/locales/activerecord.sc.yml | 11 + config/locales/activerecord.tt.yml | 1 + config/locales/ca.yml | 11 + config/locales/co.yml | 3 + config/locales/de.yml | 11 + config/locales/devise.hu.yml | 4 +- config/locales/devise.ko.yml | 4 +- config/locales/devise.nl.yml | 17 + config/locales/devise.sc.yml | 114 ++ config/locales/devise.tt.yml | 1 + config/locales/devise.vi.yml | 10 +- config/locales/devise.zh-HK.yml | 86 +- config/locales/devise.zh-TW.yml | 17 + config/locales/doorkeeper.es.yml | 152 +- config/locales/doorkeeper.sc.yml | 150 ++ config/locales/doorkeeper.tt.yml | 1 + config/locales/doorkeeper.vi.yml | 8 +- config/locales/doorkeeper.zgh.yml | 35 + config/locales/doorkeeper.zh-HK.yml | 102 +- config/locales/el.yml | 11 + config/locales/eo.yml | 48 +- config/locales/es-AR.yml | 11 + config/locales/es.yml | 9 + config/locales/fa.yml | 22 + config/locales/fr.yml | 17 +- config/locales/gl.yml | 9 + config/locales/hu.yml | 11 + config/locales/hy.yml | 7 + config/locales/id.yml | 3 + config/locales/is.yml | 12 + config/locales/it.yml | 11 + config/locales/ja.yml | 13 + config/locales/kab.yml | 3 + config/locales/ko.yml | 12 +- config/locales/ku.yml | 16 + config/locales/nl.yml | 80 +- config/locales/oc.yml | 6 + config/locales/pl.yml | 11 + config/locales/pt-PT.yml | 1 + config/locales/ru.yml | 11 + config/locales/sc.yml | 1426 ++++++++++++++++- config/locales/simple_form.ca.yml | 1 + config/locales/simple_form.de.yml | 1 + config/locales/simple_form.el.yml | 12 + config/locales/simple_form.eo.yml | 18 +- config/locales/simple_form.es-AR.yml | 1 + config/locales/simple_form.es.yml | 1 + config/locales/simple_form.fa.yml | 1 + config/locales/simple_form.fr.yml | 19 +- config/locales/simple_form.gl.yml | 11 +- config/locales/simple_form.hu.yml | 1 + config/locales/simple_form.hy.yml | 1 + config/locales/simple_form.is.yml | 1 + config/locales/simple_form.it.yml | 1 + config/locales/simple_form.ko.yml | 1 + config/locales/simple_form.ku.yml | 1 + config/locales/simple_form.nl.yml | 16 + config/locales/simple_form.pl.yml | 1 + config/locales/simple_form.pt-PT.yml | 1 + config/locales/simple_form.ru.yml | 1 + config/locales/simple_form.sc.yml | 212 +++ config/locales/simple_form.sq.yml | 1 + config/locales/simple_form.sv.yml | 1 + config/locales/simple_form.th.yml | 10 +- config/locales/simple_form.tr.yml | 1 + config/locales/simple_form.tt.yml | 1 + config/locales/simple_form.vi.yml | 3 +- config/locales/simple_form.zh-CN.yml | 1 + config/locales/simple_form.zh-HK.yml | 162 +- config/locales/simple_form.zh-TW.yml | 11 + config/locales/sq.yml | 10 + config/locales/sv.yml | 10 + config/locales/th.yml | 19 +- config/locales/tr.yml | 4 + config/locales/tt.yml | 12 + config/locales/vi.yml | 211 +-- config/locales/zgh.yml | 13 + config/locales/zh-CN.yml | 12 +- config/locales/zh-HK.yml | 931 +++++++++-- config/locales/zh-TW.yml | 132 ++ 159 files changed, 5208 insertions(+), 1230 deletions(-) create mode 100644 app/javascript/mastodon/locales/tt.json create mode 100644 app/javascript/mastodon/locales/whitelist_tt.json create mode 100644 config/locales/activerecord.tt.yml create mode 100644 config/locales/devise.tt.yml create mode 100644 config/locales/doorkeeper.tt.yml create mode 100644 config/locales/simple_form.tt.yml create mode 100644 config/locales/tt.yml diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 8f0e04561..4d43a2720 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", "emoji_button.travel": "الأماكن والسفر", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ليس هناك تبويقات!", "empty_column.account_unavailable": "الملف التعريفي غير متوفر", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "التالي", "lightbox.previous": "العودة", - "lightbox.view_context": "اعرض السياق", "lists.account.add": "أضف إلى القائمة", "lists.account.remove": "احذف من القائمة", "lists.delete": "احذف القائمة", @@ -266,9 +266,9 @@ "lists.edit.submit": "تعديل العنوان", "lists.new.create": "إنشاء قائمة", "lists.new.title_placeholder": "عنوان القائمة الجديدة", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها", "lists.subheading": "قوائمك", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "الإشارات", "notifications.filter.polls": "نتائج استطلاع الرأي", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} إشعارات", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index e0b67d6bb..4f5fec8b1 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes y llugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "¡Equí nun hai barritos!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Entá nun bloquiesti a nunengún usuariu.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Siguiente", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Amestar a la llista", "lists.account.remove": "Desaniciar de la llista", "lists.delete": "Desaniciar la llista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "Títulu nuevu de la llista", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Guetar ente la xente que sigues", "lists.subheading": "Les tos llistes", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} avisos", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 3ffa07a71..4778d6618 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 056a3d424..9b73c3597 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "খোঁজার ফলাফল", "emoji_button.symbols": "প্রতীক", "emoji_button.travel": "ভ্রমণ এবং স্থান", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "এখানে কোনো টুট নেই!", "empty_column.account_unavailable": "নিজস্ব পাতা নেই", "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "পরবর্তী", "lightbox.previous": "পূর্ববর্তী", - "lightbox.view_context": "প্রসঙ্গটি দেখতে", "lists.account.add": "তালিকাতে যুক্ত করতে", "lists.account.remove": "তালিকা থেকে বাদ দিতে", "lists.delete": "তালিকা মুছে ফেলতে", @@ -266,9 +266,9 @@ "lists.edit.submit": "শিরোনাম সম্পাদনা করতে", "lists.new.create": "তালিকাতে যুক্ত করতে", "lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন", "lists.subheading": "আপনার তালিকা", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "উল্লেখিত", "notifications.filter.polls": "নির্বাচনের ফলাফল", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} প্রজ্ঞাপন", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index ce7260477..84c5f4523 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Disoc'hoù an enklask", "emoji_button.symbols": "Arouezioù", "emoji_button.travel": "Lec'hioù ha Beajoù", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Toud ebet amañ!", "empty_column.account_unavailable": "Profil dihegerz", "empty_column.blocks": "N'eus ket bet berzet implijer·ez ganeoc'h c'hoazh.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", - "lightbox.view_context": "Diskouez ar c'hemperzh", "lists.account.add": "Ouzhpennañ d'al listenn", "lists.account.remove": "Lemel kuit eus al listenn", "lists.delete": "Dilemel al listenn", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cheñch an titl", "lists.new.create": "Ouzhpennañ ul listenn", "lists.new.title_placeholder": "Titl nevez al listenn", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Ho listennoù", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menegoù", "notifications.filter.polls": "Disoc'hoù ar sontadegoù", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} a gemennoù", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 93bcffeaa..7066d9999 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultats de la cerca", "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i Llocs", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No hi ha tuts aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Encara no has bloquejat cap usuari.", @@ -258,7 +259,6 @@ "lightbox.expand": "Amplia el quadre de visualització de l’imatge", "lightbox.next": "Següent", "lightbox.previous": "Anterior", - "lightbox.view_context": "Veure el context", "lists.account.add": "Afegir a la llista", "lists.account.remove": "Treure de la llista", "lists.delete": "Esborrar llista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Canvi de títol", "lists.new.create": "Afegir llista", "lists.new.title_placeholder": "Nova llista", - "lists.replies_policy.all_replies": "Qualsevol usuari seguit", - "lists.replies_policy.list_replies": "Membres de la llista", - "lists.replies_policy.no_replies": "Ningú", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostra respostes a:", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats de l'enquesta", "notifications.filter.statuses": "Actualitzacions de gent que segueixes", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificacions", "notifications.mark_as_read": "Marca cada notificació com a llegida", "notifications.permission_denied": "No s’ha pogut activar les notificacions d’escriptori perquè s’ha denegat el permís.", "notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Activar les notificacions d’escriptori", "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", "notifications_permission_banner.title": "Mai et perdis res", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 10d5f9008..7058fa7b1 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Risultati di a cerca", "emoji_button.symbols": "Simbuli", "emoji_button.travel": "Lochi è Viaghju", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nisun statutu quì!", "empty_column.account_unavailable": "Prufile micca dispunibule", "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.", @@ -258,7 +259,6 @@ "lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", - "lightbox.view_context": "Vede u cuntestu", "lists.account.add": "Aghjunghje à a lista", "lists.account.remove": "Toglie di a lista", "lists.delete": "Toglie a lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambià u titulu", "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", - "lists.replies_policy.all_replies": "Tutti i vostri abbunamenti", - "lists.replies_policy.list_replies": "Membri di a lista", - "lists.replies_policy.no_replies": "Nisunu", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Vede e risposte à:", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Minzione", "notifications.filter.polls": "Risultati di u scandagliu", "notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} nutificazione", "notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette", "notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè a dumanda d'auturizazione hè stata ricusata", "notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore", "notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.", "notifications_permission_banner.title": "Ùn mancate mai nunda", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index c43b3c875..76df857d8 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -12,12 +12,12 @@ "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Oznámit mě na příspěvky @{name}", "account.endorse": "Zvýraznit na profilu", "account.follow": "Sledovat", "account.followers": "Sledující", "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nejsou tu žádné tooty!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.", @@ -176,7 +177,7 @@ "follow_request.authorize": "Autorizovat", "follow_request.reject": "Odmítnout", "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.", - "generic.saved": "Saved", + "generic.saved": "Uloženo", "getting_started.developers": "Vývojáři", "getting_started.directory": "Adresář profilů", "getting_started.documentation": "Dokumentace", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Další", "lightbox.previous": "Předchozí", - "lightbox.view_context": "Zobrazit kontext", "lists.account.add": "Přidat do seznamu", "lists.account.remove": "Odebrat ze seznamu", "lists.delete": "Smazat seznam", @@ -266,9 +266,9 @@ "lists.edit.submit": "Změnit název", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Zmínky", "notifications.filter.polls": "Výsledky anket", "notifications.filter.statuses": "Aktuality od lidí, které sledujete", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} oznámení", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index e5f2e69b0..b3c1947b4 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Canlyniadau chwilio", "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio & Llefydd", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Dim tŵtiau fama!", "empty_column.account_unavailable": "Proffil ddim ar gael", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", - "lightbox.view_context": "Gweld cyd-destyn", "lists.account.add": "Ychwanegwch at restr", "lists.account.remove": "Dileu o'r rhestr", "lists.delete": "Dileu rhestr", @@ -266,9 +266,9 @@ "lists.edit.submit": "Newid teitl", "lists.new.create": "Ychwanegu rhestr", "lists.new.title_placeholder": "Teitl rhestr newydd", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn", "lists.subheading": "Eich rhestrau", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Crybwylliadau", "notifications.filter.polls": "Canlyniadau pleidlais", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} o hysbysiadau", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 4b312a8f4..7c4b3e4ef 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser & steder", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen bidrag her!", "empty_column.account_unavailable": "Profil utilgængelig", "empty_column.blocks": "Du har ikke blokeret nogen endnu.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Næste", "lightbox.previous": "Forrige", - "lightbox.view_context": "Vis kontekst", "lists.account.add": "Tilføj til liste", "lists.account.remove": "Fjern fra liste", "lists.delete": "Slet liste", @@ -266,9 +266,9 @@ "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", "lists.new.title_placeholder": "Ny liste titel", - "lists.replies_policy.all_replies": "Enhver fulgt bruger", - "lists.replies_policy.list_replies": "Medlemmer af listen", - "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Vis svar til:", "lists.search": "Søg iblandt folk du følger", "lists.subheading": "Dine lister", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Statusser der nævner dig", "notifications.filter.polls": "Afstemningsresultat", "notifications.filter.statuses": "Opdateringer fra personer, du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifikationer", "notifications.mark_as_read": "Markér alle notifikationer som læst", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Gå aldrig glip af noget", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index ff5fec1f7..c2bb08596 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Suchergebnisse", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Reisen und Orte", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Keine Beiträge!", "empty_column.account_unavailable": "Konto nicht verfügbar", "empty_column.blocks": "Du hast keine Profile blockiert.", @@ -258,7 +259,6 @@ "lightbox.expand": "Bildansicht erweitern", "lightbox.next": "Weiter", "lightbox.previous": "Zurück", - "lightbox.view_context": "Beitrag sehen", "lists.account.add": "Zur Liste hinzufügen", "lists.account.remove": "Von der Liste entfernen", "lists.delete": "Liste löschen", @@ -266,9 +266,9 @@ "lists.edit.submit": "Titel ändern", "lists.new.create": "Liste hinzufügen", "lists.new.title_placeholder": "Neuer Titel der Liste", - "lists.replies_policy.all_replies": "Jeder gefolgte Benutzer", - "lists.replies_policy.list_replies": "Mitglieder der Liste", - "lists.replies_policy.no_replies": "Niemand", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", "notifications.filter.statuses": "Updates von Personen, denen du folgst", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} Benachrichtigungen", "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", "notifications_permission_banner.title": "Verpasse nie etwas", @@ -379,7 +381,7 @@ "search_popout.search_format": "Fortgeschrittenes Suchformat", "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", "search_popout.tips.hashtag": "Hashtag", - "search_popout.tips.status": "Beitrag", + "search_popout.tips.status": "Tröt", "search_popout.tips.text": "Einfache Texteingabe gibt Anzeigenamen, Benutzernamen und Hashtags zurück", "search_popout.tips.user": "Nutzer", "search_results.accounts": "Personen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index ae9ba853e..d9ebf0a4c 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -652,6 +652,10 @@ }, { "descriptors": [ + { + "defaultMessage": "Account suspended", + "id": "empty_column.account_suspended" + }, { "defaultMessage": "Profile unavailable", "id": "empty_column.account_unavailable" @@ -712,6 +716,10 @@ "defaultMessage": "Older toots", "id": "timeline_hint.resources.statuses" }, + { + "defaultMessage": "Account suspended", + "id": "empty_column.account_suspended" + }, { "defaultMessage": "Profile unavailable", "id": "empty_column.account_unavailable" @@ -2161,15 +2169,15 @@ }, { "defaultMessage": "Any followed user", - "id": "lists.replies_policy.all_replies" + "id": "lists.replies_policy.followed" }, { "defaultMessage": "No one", - "id": "lists.replies_policy.no_replies" + "id": "lists.replies_policy.none" }, { "defaultMessage": "Members of the list", - "id": "lists.replies_policy.list_replies" + "id": "lists.replies_policy.list" }, { "defaultMessage": "Edit list", @@ -2272,6 +2280,10 @@ "defaultMessage": "Desktop notifications are unavailable due to previously denied browser permissions request", "id": "notifications.permission_denied" }, + { + "defaultMessage": "Desktop notifications are unavailable because the required permission has not been granted.", + "id": "notifications.permission_required" + }, { "defaultMessage": "Quick filter bar", "id": "notifications.column_settings.filter_bar.category" @@ -2353,6 +2365,15 @@ ], "path": "app/javascript/mastodon/features/notifications/components/follow_request.json" }, + { + "descriptors": [ + { + "defaultMessage": "Grant permission.", + "id": "notifications.grant_permission" + } + ], + "path": "app/javascript/mastodon/features/notifications/components/grant_permission_button.json" + }, { "descriptors": [ { @@ -2478,6 +2499,10 @@ { "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "id": "confirmations.reply.message" + }, + { + "defaultMessage": "Expand this status", + "id": "status.open" } ], "path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json" @@ -2764,15 +2789,6 @@ ], "path": "app/javascript/mastodon/features/status/index.json" }, - { - "descriptors": [ - { - "defaultMessage": "View context", - "id": "lightbox.view_context" - } - ], - "path": "app/javascript/mastodon/features/ui/components/audio_modal.json" - }, { "descriptors": [ { @@ -3036,10 +3052,6 @@ { "defaultMessage": "Next", "id": "lightbox.next" - }, - { - "defaultMessage": "View context", - "id": "lightbox.view_context" } ], "path": "app/javascript/mastodon/features/ui/components/media_modal.json" @@ -3205,15 +3217,6 @@ ], "path": "app/javascript/mastodon/features/ui/components/upload_area.json" }, - { - "descriptors": [ - { - "defaultMessage": "View context", - "id": "lightbox.view_context" - } - ], - "path": "app/javascript/mastodon/features/ui/components/video_modal.json" - }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index bd9f2e7ff..4d1aa5782 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Δεν έχει τουτ εδώ!", "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", @@ -258,7 +259,6 @@ "lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", - "lightbox.view_context": "Εμφάνιση πλαισίου", "lists.account.add": "Πρόσθεσε στη λίστα", "lists.account.remove": "Βγάλε από τη λίστα", "lists.delete": "Διαγραφή λίστας", @@ -266,9 +266,9 @@ "lists.edit.submit": "Αλλαγή τίτλου", "lists.new.create": "Προσθήκη λίστας", "lists.new.title_placeholder": "Τίτλος νέας λίστα", - "lists.replies_policy.all_replies": "Οποιοσδήποτε χρήστης που ακολουθείς", - "lists.replies_policy.list_replies": "Μέλη της λίστας", - "lists.replies_policy.no_replies": "Κανείς", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Αναφορές", "notifications.filter.polls": "Αποτελέσματα ψηφοφορίας", "notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ειδοποιήσεις", "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Μη χάσετε τίποτα", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index ccc95db7a..3f8d37249 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 1b5f18884..57e3208fb 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -6,7 +6,7 @@ "account.block": "Bloki @{name}", "account.block_domain": "Bloki {domain}", "account.blocked": "Blokita", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Rigardi pli al la originala profilo", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", "empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Sekva", "lightbox.previous": "Antaŭa", - "lightbox.view_context": "Vidi kuntekston", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", "lists.delete": "Forigi la liston", @@ -266,10 +266,10 @@ "lists.edit.submit": "Ŝanĝi titolon", "lists.new.create": "Aldoni liston", "lists.new.title_placeholder": "Titolo de la nova listo", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Montri respondon al:", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", @@ -277,9 +277,9 @@ "media_gallery.toggle_visible": "Baskuligi videblecon", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Daŭro", "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Nedifinita", "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", @@ -310,7 +310,7 @@ "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Partoprenita balotenketo finiĝis", "notification.reblog": "{name} diskonigis vian mesaĝon", - "notification.status": "{name} just posted", + "notification.status": "{name} ĵus afiŝita", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.column_settings.alert": "Retumilaj sciigoj", @@ -334,13 +334,15 @@ "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} sciigoj", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Marki ĉiujn sciigojn legita", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Ebligi retumilajn sciigojn", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", + "notifications_permission_banner.title": "Neniam preterlasas iun ajn", "picture_in_picture.restore": "Put it back", "poll.closed": "Finita", "poll.refresh": "Aktualigi", @@ -448,7 +450,7 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante", "trends.trending_now": "Nunaj furoraĵoj", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Md", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Altreni kaj lasi por alŝuti", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 57115404b..5ca1d6959 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "¡No hay toots acá!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expandir cuadro de vista de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Agregar a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Eliminar lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", "lists.new.title_placeholder": "Nuevo título de lista", - "lists.replies_policy.all_replies": "Cualquier cuenta seguida", - "lists.replies_policy.list_replies": "Miembros de la lista", - "lists.replies_policy.no_replies": "Nadie", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente que seguís", "lists.subheading": "Tus listas", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de encuesta", "notifications.filter.statuses": "Actualizaciones de cuentas que seguís", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar cada notificación como leída", "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", "notifications_permission_banner.title": "No te pierdas nada", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 144b14c58..461929472 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Añadir a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Borrar lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", - "lists.replies_policy.all_replies": "Cualquier usuario al que sigas", - "lists.replies_policy.list_replies": "Miembros de la lista", - "lists.replies_policy.no_replies": "Nadie", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", "notifications.filter.statuses": "Actualizaciones de gente a la que sigues", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", @@ -390,7 +392,7 @@ "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", - "status.bookmark": "Marcador", + "status.bookmark": "Añadir marcador", "status.cancel_reblog_private": "Eliminar retoot", "status.cannot_reblog": "Este toot no puede retootearse", "status.copy": "Copiar enlace al estado", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 4e42fb999..54f4159fe 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Otsitulemused", "emoji_button.symbols": "Sümbolid", "emoji_button.travel": "Reisimine & Kohad", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Siin tuute ei ole!", "empty_column.account_unavailable": "Profiil pole saadaval", "empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", - "lightbox.view_context": "Vaata konteksti", "lists.account.add": "Lisa nimistusse", "lists.account.remove": "Eemalda nimistust", "lists.delete": "Kustuta nimistu", @@ -266,9 +266,9 @@ "lists.edit.submit": "Muuda pealkiri", "lists.new.create": "Lisa nimistu", "lists.new.title_placeholder": "Uus nimistu pealkiri", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Otsi Teie poolt jälgitavate inimese hulgast", "lists.subheading": "Teie nimistud", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mainimised", "notifications.filter.polls": "Küsitluse tulemused", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} teated", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5139d83aa..80119dc00 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Bilaketaren emaitzak", "emoji_button.symbols": "Sinboloak", "emoji_button.travel": "Bidaiak eta tokiak", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ez dago tootik hemen!", "empty_column.account_unavailable": "Profila ez dago eskuragarri", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", - "lightbox.view_context": "Ikusi testuingurua", "lists.account.add": "Gehitu zerrendara", "lists.account.remove": "Kendu zerrendatik", "lists.delete": "Ezabatu zerrenda", @@ -266,9 +266,9 @@ "lists.edit.submit": "Aldatu izenburua", "lists.new.create": "Gehitu zerrenda", "lists.new.title_placeholder": "Zerrenda berriaren izena", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.subheading": "Zure zerrendak", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Aipamenak", "notifications.filter.polls": "Inkestaren emaitza", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} jakinarazpen", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 44c936142..7bda6dcb2 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "نتایج جستجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "هیچ بوقی این‌جا نیست!", "empty_column.account_unavailable": "نمایهٔ موجود نیست", "empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.", @@ -254,11 +255,10 @@ "keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو", "keyboard_shortcuts.up": "برای بالا رفتن در فهرست", "lightbox.close": "بستن", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "فشرده‌سازی جعبه نمایش تصویر", + "lightbox.expand": "گسترش جعبه نمایش تصویر", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", - "lightbox.view_context": "نمایش گفتگو", "lists.account.add": "افزودن به فهرست", "lists.account.remove": "برداشتن از فهرست", "lists.delete": "حذف فهرست", @@ -266,9 +266,9 @@ "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", "lists.new.title_placeholder": "عنوان فهرست تازه", - "lists.replies_policy.all_replies": "هر کاربر پی‌گیری‌شده", - "lists.replies_policy.list_replies": "اعضای فهرست", - "lists.replies_policy.no_replies": "هیچ‌کس", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "نمایش پاسخ‌ها به:", "lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.subheading": "فهرست‌های شما", @@ -334,12 +334,14 @@ "notifications.filter.mentions": "نام‌بردن‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} اعلان", "notifications.mark_as_read": "نشانه‌گذاری همهٔ آگاهی‌ها به عنوان خوانده‌شده", "notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", "notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "اگر می‌خواهید حتی زمانی که ماستودون باز نیست اعلان‌ها نمایش یابند، اعلان‌های میزکار را فعال کنید. به محض فعال شدن از طریق دکمه {icon} بالا می‌توانید به دقت کنترل کنید که چه نوع از تعامل‌ها باعث صادر شدن اعلان‌ها شوند.", "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", "picture_in_picture.restore": "برگرداندن", "poll.closed": "پایان‌یافته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4a0d4aef1..8916d4339 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ei ole 'toots' täällä!", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.view_context": "Näytä kontekstissa", "lists.account.add": "Lisää listaan", "lists.account.remove": "Poista listasta", "lists.delete": "Poista lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Vaihda otsikko", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listat", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Maininnat", "notifications.filter.polls": "Kyselyn tulokset", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ilmoitusta", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 19c86722d..1376d150d 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Résultats de la recherche", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Aucun pouet ici !", "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", @@ -258,7 +259,6 @@ "lightbox.expand": "Agrandir la fenêtre de visualisation des images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", - "lightbox.view_context": "Voir le contexte", "lists.account.add": "Ajouter à la liste", "lists.account.remove": "Supprimer de la liste", "lists.delete": "Supprimer la liste", @@ -266,9 +266,9 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", - "lists.replies_policy.all_replies": "N’importe quel·le utilisateur·rice suivi·e", - "lists.replies_policy.list_replies": "Membres de la liste", - "lists.replies_policy.no_replies": "Personne", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Afficher les réponses à :", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", "notifications.filter.statuses": "Mises à jour des personnes que vous suivez", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Marquer toutes les notifications comme lues", "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Toujours au courant", @@ -448,7 +450,7 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}", "trends.trending_now": "Tendance en ce moment", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", - "units.short.billion": "{count}B", + "units.short.billion": "{count}Md", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Glissez et déposez pour envoyer", @@ -468,7 +470,7 @@ "upload_modal.detect_text": "Détecter le texte de l’image", "upload_modal.edit_media": "Modifier le média", "upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.", - "upload_modal.preparing_ocr": "Préparation de OCR…", + "upload_modal.preparing_ocr": "Préparation de l’OCR…", "upload_modal.preview_label": "Aperçu ({ratio})", "upload_progress.label": "Envoi en cours…", "video.close": "Fermer la vidéo", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 22230ab73..928742dd7 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 6fe22e1d4..771b6c990 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultados da procura", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Non hai toots aquí!", "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expandir a caixa de vista da imaxe", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ollar contexto", "lists.account.add": "Engadir á listaxe", "lists.account.remove": "Eliminar da listaxe", "lists.delete": "Eliminar listaxe", @@ -266,9 +266,9 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", - "lists.replies_policy.all_replies": "Calquera usuaria á que segues", - "lists.replies_policy.list_replies": "Membros da lista", - "lists.replies_policy.no_replies": "Ninguén", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar respostas a:", "lists.search": "Procurar entre as persoas que segues", "lists.subheading": "As túas listaxes", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", "notifications.filter.statuses": "Actualizacións de xente á que segues", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificacións", "notifications.mark_as_read": "Marcar todas as notificacións como lidas", "notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso", "notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Activar notificacións de escritorio", "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.", "notifications_permission_banner.title": "Non perder nada", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index cce1f29e7..123b2e855 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "תוצאות חיפוש", "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "הלאה", "lightbox.previous": "הקודם", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 275cc3eb9..7e0fe4e7a 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "खोज परिणाम", "emoji_button.symbols": "प्रतीक", "emoji_button.travel": "यात्रा एवं स्थान", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!", "empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं", "empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "अगला", "lightbox.previous": "पिछला", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "सूची से निकालें", "lists.delete": "सूची हटाएँ", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "सूची जोड़ें", "lists.new.title_placeholder": "नये सूची का शीर्षक", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "आपकी सूचियाँ", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "उल्लेख", "notifications.filter.polls": "चुनाव परिणाम", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} सूचनाएँ", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index d59e10a89..0b4ce2235 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Rezultati pretraživanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanje i mjesta", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ovdje nema tootova!", "empty_column.account_unavailable": "Profil nije dostupan", "empty_column.blocks": "Još niste blokirali nikoga.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Sljedeće", "lightbox.previous": "Prethodno", - "lightbox.view_context": "Prikaži kontekst", "lists.account.add": "Dodaj na listu", "lists.account.remove": "Ukloni s liste", "lists.delete": "Izbriši listu", @@ -266,9 +266,9 @@ "lists.edit.submit": "Promijeni naslov", "lists.new.create": "Dodaj listu", "lists.new.title_placeholder": "Naziv nove liste", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Traži među praćenim ljudima", "lists.subheading": "Vaše liste", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Spominjanja", "notifications.filter.polls": "Rezultati anketa", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} obavijesti", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 1c8c06284..aac91f9a0 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Keresési találatok", "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Itt nincs tülkölés!", "empty_column.account_unavailable": "A profil nem érhető el", "empty_column.blocks": "Még senkit sem tiltottál le.", @@ -258,7 +259,6 @@ "lightbox.expand": "Képnézet kinagyítása", "lightbox.next": "Következő", "lightbox.previous": "Előző", - "lightbox.view_context": "Környezet megtekintése", "lists.account.add": "Hozzáadás a listához", "lists.account.remove": "Eltávolítás a listából", "lists.delete": "Lista törlése", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", "lists.new.title_placeholder": "Új lista címe", - "lists.replies_policy.all_replies": "Bármely követett felhasználó", - "lists.replies_policy.list_replies": "A lista tagjai", - "lists.replies_policy.no_replies": "Senki", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Nekik mutassuk a válaszokat:", "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Megemlítések", "notifications.filter.polls": "Szavazások eredményei", "notifications.filter.statuses": "Frissítések azoktól, akiket követsz", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} értesítés", "notifications.mark_as_read": "Minden értesítés olvasottnak jelölése", "notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.", "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Asztali értesítések engedélyezése", "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", "notifications_permission_banner.title": "Soha ne mulassz el semmit", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index dd904bfca..91377d7c5 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Որոնման արդիւնքներ", "emoji_button.symbols": "Նշաններ", "emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։", "empty_column.account_unavailable": "Անձնական էջը հասանելի չի", "empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Հաջորդ", "lightbox.previous": "Նախորդ", - "lightbox.view_context": "Տեսնել ենթատեքստը", "lists.account.add": "Ավելացնել ցանկին", "lists.account.remove": "Հանել ցանկից", "lists.delete": "Ջնջել ցանկը", @@ -266,9 +266,9 @@ "lists.edit.submit": "Փոխել վերնագիրը", "lists.new.create": "Ավելացնել ցանկ", "lists.new.title_placeholder": "Նոր ցանկի վերնագիր", - "lists.replies_policy.all_replies": "Ում հետևում եմ", - "lists.replies_policy.list_replies": "Ցանկի անդամները", - "lists.replies_policy.no_replies": "Ոչ ոք", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.subheading": "Քո ցանկերը", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Նշումները", "notifications.filter.polls": "Հարցման արդիւնքները", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ծանուցում", "notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 562d9d038..d0ae2befc 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Hasil pencarian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Tidak ada toot di sini!", "empty_column.account_unavailable": "Profil tidak tersedia", "empty_column.blocks": "Anda belum memblokir siapapun.", @@ -258,7 +259,6 @@ "lightbox.expand": "Besarkan kotak tampilan gambar", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", - "lightbox.view_context": "Lihat konteks", "lists.account.add": "Tambah ke daftar", "lists.account.remove": "Hapus dari daftar", "lists.delete": "Hapus daftar", @@ -266,9 +266,9 @@ "lists.edit.submit": "Ubah judul", "lists.new.create": "Tambah daftar", "lists.new.title_placeholder": "Judul daftar baru", - "lists.replies_policy.all_replies": "Siapapun pengguna yang diikuti", - "lists.replies_policy.list_replies": "Anggota di daftar tersebut", - "lists.replies_policy.no_replies": "Tidak ada satu pun", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Tampilkan balasan ke:", "lists.search": "Cari di antara orang yang Anda ikuti", "lists.subheading": "Daftar Anda", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Hasil japat", "notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifikasi", "notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca", "notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.", "notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Aktifkan notifikasi desktop", "notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.", "notifications_permission_banner.title": "Jangan lewatkan apapun", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 1528dec69..998799b9f 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 43004bebb..6910e9e5f 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Leitarniðurstöður", "emoji_button.symbols": "Tákn", "emoji_button.travel": "Ferðalög og staðir", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Engin tíst hér!", "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", @@ -258,7 +259,6 @@ "lightbox.expand": "Fletta út myndskoðunarreit", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", - "lightbox.view_context": "Skoða samhengi", "lists.account.add": "Bæta á lista", "lists.account.remove": "Fjarlægja af lista", "lists.delete": "Eyða lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Breyta titli", "lists.new.create": "Bæta við lista", "lists.new.title_placeholder": "Titill á nýjum lista", - "lists.replies_policy.all_replies": "Allra notenda sem fylgst er með", - "lists.replies_policy.list_replies": "Meðlima listans", - "lists.replies_policy.no_replies": "Engra", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Sýna svör til:", "lists.search": "Leita meðal þeirra sem þú fylgist með", "lists.subheading": "Listarnir þínir", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", "notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} tilkynningar", "notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar", "notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra", "notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði", "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", "notifications_permission_banner.title": "Aldrei missa af neinu", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index c472e098f..746d33df0 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Risultati della ricerca", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi & Luoghi", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nessun toot qui!", "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato alcun utente.", @@ -258,7 +259,6 @@ "lightbox.expand": "Espandi casella di visualizzazione immagine", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", - "lightbox.view_context": "Mostra contesto", "lists.account.add": "Aggiungi alla lista", "lists.account.remove": "Togli dalla lista", "lists.delete": "Elimina lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", - "lists.replies_policy.all_replies": "Qualsiasi utente seguito", - "lists.replies_policy.list_replies": "Iscritti alla lista", - "lists.replies_policy.no_replies": "Nessuno", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostra risposte a:", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", "notifications.filter.statuses": "Aggiornamenti dalle persone che segui", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifiche", "notifications.mark_as_read": "Segna tutte le notifiche come lette", "notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.", "notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Abilita le notifiche sul desktop", "notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.", "notifications_permission_banner.title": "Non perderti mai nulla", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ec60e0782..ccf8970ea 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "検索結果", "emoji_button.symbols": "記号", "emoji_button.travel": "旅行と場所", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "トゥートがありません!", "empty_column.account_unavailable": "プロフィールは利用できません", "empty_column.blocks": "まだ誰もブロックしていません。", @@ -254,11 +255,10 @@ "keyboard_shortcuts.unfocus": "トゥート入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "lightbox.close": "閉じる", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "画像ビューボックスを閉じる", + "lightbox.expand": "画像ビューボックスを開く", "lightbox.next": "次", "lightbox.previous": "前", - "lightbox.view_context": "トゥートを表示", "lists.account.add": "リストに追加", "lists.account.remove": "リストから外す", "lists.delete": "リストを削除", @@ -266,9 +266,9 @@ "lists.edit.submit": "タイトルを変更", "lists.new.create": "リストを作成", "lists.new.title_placeholder": "新規リスト名", - "lists.replies_policy.all_replies": "フォロー中のユーザー全員", - "lists.replies_policy.list_replies": "リストのメンバー", - "lists.replies_policy.no_replies": "表示しない", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "リプライを表示:", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "返信", "notifications.filter.polls": "アンケート結果", "notifications.filter.statuses": "フォローしている人の新着情報", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} 件の通知", "notifications.mark_as_read": "すべて既読にする", "notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません", "notifications.permission_denied_alert": "ブラウザの通知が拒否されているためデスクトップ通知を有効にできません", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "デスクトップ通知を有効にする", "notifications_permission_banner.how_to_control": "Mastodon を閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", "notifications_permission_banner.title": "お見逃しなく", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 6a0b47fdc..ad3b1b033 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "ძებნის შედეგები", "emoji_button.symbols": "სიმბოლოები", "emoji_button.travel": "მოგზაურობა და ადგილები", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "შემდეგი", "lightbox.previous": "წინა", - "lightbox.view_context": "View context", "lists.account.add": "სიაში დამატება", "lists.account.remove": "სიიდან ამოშლა", "lists.delete": "სიის წაშლა", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "სიის დამატება", "lists.new.title_placeholder": "ახალი სიის სათაური", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით", "lists.subheading": "თქვენი სიები", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} შეტყობინება", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 261d003aa..cf9860f1e 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Igemmaḍ n unadi", "emoji_button.symbols": "Izamulen", "emoji_button.travel": "Imeḍqan d Yinigen", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ulac tijewwaqin dagi!", "empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi", "empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.", @@ -258,7 +259,6 @@ "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Γer zdat", "lightbox.previous": "Γer deffir", - "lightbox.view_context": "Ẓer amnaḍ", "lists.account.add": "Rnu ɣer tebdart", "lists.account.remove": "Kkes seg tebdart", "lists.delete": "Kkes tabdart", @@ -266,9 +266,9 @@ "lists.edit.submit": "Beddel azwel", "lists.new.create": "Rnu tabdart", "lists.new.title_placeholder": "Azwel amaynut n tebdart", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "Ula yiwen", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Ssken-d tiririyin i:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", "lists.subheading": "Tibdarin-ik·im", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Abdar", "notifications.filter.polls": "Igemmaḍ n usenqed", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} n tilɣa", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", @@ -468,7 +470,7 @@ "upload_modal.detect_text": "Sefru-d aḍris seg tugna", "upload_modal.edit_media": "Ẓreg taɣwalt", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Aheyyi n OCR…", "upload_modal.preview_label": "Taskant ({ratio})", "upload_progress.label": "Asali iteddu...", "video.close": "Mdel tabidyutt", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index a2c0856e5..04a0f9140 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Іздеу нәтижелері", "emoji_button.symbols": "Таңбалар", "emoji_button.travel": "Саяхат", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Жазба жоқ ешқандай!", "empty_column.account_unavailable": "Профиль қолжетімді емес", "empty_column.blocks": "Ешкімді бұғаттамағансыз.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Келесі", "lightbox.previous": "Алдыңғы", - "lightbox.view_context": "Контексті көрсет", "lists.account.add": "Тізімге қосу", "lists.account.remove": "Тізімнен шығару", "lists.delete": "Тізімді өшіру", @@ -266,9 +266,9 @@ "lists.edit.submit": "Тақырыбын өзгерту", "lists.new.create": "Тізім құру", "lists.new.title_placeholder": "Жаңа тізім аты", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Сіз іздеген адамдар арасында іздеу", "lists.subheading": "Тізімдеріңіз", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Аталымдар", "notifications.filter.polls": "Сауалнама нәтижелері", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ескертпе", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 0f6c71fb9..a5025bb72 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 24539248a..c254ef6d8 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "여긴 툿이 없어요!", "empty_column.account_unavailable": "프로필 사용 불가", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", @@ -254,11 +255,10 @@ "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "이미지 박스 압축", + "lightbox.expand": "이미지 박스 확장", "lightbox.next": "다음", "lightbox.previous": "이전", - "lightbox.view_context": "게시물 보기", "lists.account.add": "리스트에 추가", "lists.account.remove": "리스트에서 제거", "lists.delete": "리스트 삭제", @@ -266,9 +266,9 @@ "lists.edit.submit": "제목 수정", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", - "lists.replies_policy.all_replies": "팔로우 한 사용자 누구나", - "lists.replies_policy.list_replies": "목록의 멤버들", - "lists.replies_policy.no_replies": "아무도 없음", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "답글 표시:", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "멘션", "notifications.filter.polls": "투표 결과", "notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} 개의 알림", "notifications.mark_as_read": "모든 알림을 읽은 상태로 표시", "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "데스크탑 알림 활성화", "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", "notifications_permission_banner.title": "아무것도 놓치지 마세요", @@ -448,9 +450,9 @@ "trends.counter_by_accounts": "{counter} 명이 말하는 중", "trends.trending_now": "지금 유행중", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", - "units.short.billion": "{count}십억", - "units.short.million": "{count}백만", - "units.short.thousand": "{count}천", + "units.short.billion": "{count}B", + "units.short.million": "{count}B", + "units.short.thousand": "{count}K", "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index b40a15669..3c359d222 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "تێبینیتێبینی", + "account.account_note_header": "تێبینی ", "account.add_or_remove_from_list": "زیادکردن یان سڕینەوە لە پێرستەکان", "account.badges.bot": "بوت", "account.badges.group": "گرووپ", @@ -149,6 +149,7 @@ "emoji_button.search_results": "ئەنجامەکانی گەڕان", "emoji_button.symbols": "هێماکان", "emoji_button.travel": "گەشت & شوێنەکان", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "لێرە هیچ توتەک نییە!", "empty_column.account_unavailable": "پرۆفایل بەردەست نیە", "empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.", @@ -254,11 +255,10 @@ "keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان", "keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت", "lightbox.close": "دابخە", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "سندوقی نیشاندانی وێنە بپەستێنە", + "lightbox.expand": "فراوانکردنی سندوقی بینینی وێنە", "lightbox.next": "داهاتوو", "lightbox.previous": "پێشوو", - "lightbox.view_context": "پێشاندانی دەق", "lists.account.add": "زیادکردن بۆ لیست", "lists.account.remove": "لابردن لە لیست", "lists.delete": "سڕینەوەی لیست", @@ -266,9 +266,9 @@ "lists.edit.submit": "گۆڕینی ناونیشان", "lists.new.create": "زیادکردنی لیست", "lists.new.title_placeholder": "ناونیشانی لیستی نوێ", - "lists.replies_policy.all_replies": "هەربەکارهێنەرێکی شوێنکەوتوو", - "lists.replies_policy.list_replies": "ئەندامانی لیستەکە", - "lists.replies_policy.no_replies": "هیچکەس", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "پیشاندانی وەڵامەکان بۆ:", "lists.search": "بگەڕێ لەناو ئەو کەسانەی کە شوێنیان کەوتویت", "lists.subheading": "لیستەکانت", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "ئاماژەکان", "notifications.filter.polls": "ئەنجامەکانی ڕاپرسی", "notifications.filter.statuses": "نوێکردنەوەکان ئەو کەسانەی کە پەیڕەوی دەکەیت", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ئاگانامە", "notifications.mark_as_read": "هەموو ئاگانامەکان وەک خوێندراوەتەوە نیشان بکە", "notifications.permission_denied": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت وەک ڕێپێدان ڕەتکرایەوە.", "notifications.permission_denied_alert": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت، چونکە پێشتر مۆڵەتی وێبگەڕ ڕەتکرایەوە", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "چالاککردنی ئاگانامەکانی دێسکتۆپ", "notifications_permission_banner.how_to_control": "بۆ وەرگرتنی ئاگانامەکان کاتێک ماستۆدۆن نەکراوەیە، ئاگانامەکانی دێسکتۆپ چالاک بکە. دەتوانیت بە وردی کۆنترۆڵی جۆری کارلێکەکان بکەیت کە ئاگانامەکانی دێسکتۆپ دروست دەکەن لە ڕێگەی دوگمەی {icon} لەسەرەوە کاتێک چالاک دەکرێن.", "notifications_permission_banner.title": "هەرگیز شتێک لە دەست مەدە", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 6141f321e..46dc0975d 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 061ab2a83..f075731fe 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Meklēšanas rezultāti", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Ceļošana & Vietas", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Šeit ziņojumu nav!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Tu neesi vēl nevienu bloķējis.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index b640b8c66..6dac40e8b 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Резултати од барање", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Патувања и Места", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Недостапен профил", "empty_column.blocks": "Немате сеуште блокирано корисници.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Спомнувања", "notifications.filter.polls": "Резултати од анкета", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} нотификации", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 08c3cacd0..9d7b913f9 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "തിരച്ചിൽ ഫലങ്ങൾ", "emoji_button.symbols": "ചിഹ്നങ്ങൾ", "emoji_button.travel": "യാത്രയും സ്ഥലങ്ങളും", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!", "empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല", "empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "അടുത്തത്", "lightbox.previous": "പുറകോട്ട്", - "lightbox.view_context": "View context", "lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക", "lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക", "lists.delete": "പട്ടിക ഒഴിവാക്കുക", @@ -266,9 +266,9 @@ "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "എന്റെ പട്ടികകൾ", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 33f8cfd84..8559665b9 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index a4006a745..ec992c679 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index aec3e09ff..c910a28ab 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Meer op het originele profiel bekijken", "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "@{name} een direct bericht sturen", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Geef geen melding meer wanneer @{name} toot", "account.domain_blocked": "Server verborgen", "account.edit_profile": "Profiel bewerken", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Geef een melding wanneer @{name} toot", "account.endorse": "Op profiel weergeven", "account.follow": "Volgen", "account.followers": "Volgers", @@ -98,9 +98,9 @@ "compose_form.poll.switch_to_single": "Poll wijzigen om een enkele keuze toe te staan", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Media als gevoelig markeren", - "compose_form.sensitive.marked": "Media is als gevoelig gemarkeerd", - "compose_form.sensitive.unmarked": "Media is niet als gevoelig gemarkeerd", + "compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is als gevoelig gemarkeerd} other {Media is als gevoelig gemarkeerd}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is niet als gevoelig gemarkeerd} other {Media is niet als gevoelig gemarkeerd}}", "compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen", "compose_form.spoiler.unmarked": "Tekst is niet verborgen", "compose_form.spoiler_placeholder": "Waarschuwingstekst", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Hier zijn geen toots!", "empty_column.account_unavailable": "Profiel is niet beschikbaar", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", @@ -168,9 +169,9 @@ "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen", "error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Deze pagina kon niet correct geladen worden. Deze fout wordt waarschijnlijk door een browser-add-on of een automatische vertalingshulpmiddel veroorzaakt.", "error.unexpected_crash.next_steps": "Probeer deze pagina te vernieuwen. Wanneer dit niet helpt is het nog steeds mogelijk om Mastodon in een andere webbrowser of mobiele app te gebruiken.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", "errors.unexpected_crash.report_issue": "Technisch probleem melden", "follow_request.authorize": "Goedkeuren", @@ -258,7 +259,6 @@ "lightbox.expand": "Afbeelding groot weergeven", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", - "lightbox.view_context": "Context tonen", "lists.account.add": "Aan lijst toevoegen", "lists.account.remove": "Uit lijst verwijderen", "lists.delete": "Lijst verwijderen", @@ -266,10 +266,10 @@ "lists.edit.submit": "Titel veranderen", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Toon reacties aan:", "lists.search": "Zoek naar mensen die je volgt", "lists.subheading": "Jouw lijsten", "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", @@ -277,7 +277,7 @@ "media_gallery.toggle_visible": "Media verbergen", "missing_indicator.label": "Niet gevonden", "missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Duur", "mute_modal.hide_notifications": "Verberg meldingen van deze persoon?", "mute_modal.indefinite": "Voor onbepaalde tijd", "navigation_bar.apps": "Mobiele apps", @@ -310,7 +310,7 @@ "notification.own_poll": "Jouw poll is beëindigd", "notification.poll": "Een poll waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw toot", - "notification.status": "{name} just posted", + "notification.status": "{name} heeft zojuist een toot geplaatst", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", "notifications.column_settings.alert": "Desktopmeldingen", @@ -326,22 +326,24 @@ "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.sound": "Geluid afspelen", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Nieuwe toots:", "notifications.filter.all": "Alles", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favorieten", "notifications.filter.follows": "Die jij volgt", "notifications.filter.mentions": "Vermeldingen", "notifications.filter.polls": "Pollresultaten", - "notifications.filter.statuses": "Updates from people you follow", + "notifications.filter.statuses": "Updates van mensen die je volgt", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} meldingen", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications_permission_banner.enable": "Notificatie meldingen inschakelen", - "notifications_permission_banner.how_to_control": "Gebruikt notificaties om ook meldingen te ontvangen wanneer Mastodon niet open is. U kunt precies bepalen welke soort meldingen wel of geen notificaties afgeven via de bovenstaande knop {icon}.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "Markeer elke melding als gelezen", + "notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd", + "notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Desktopmeldingen inschakelen", + "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open is. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.", + "notifications_permission_banner.title": "Mis nooit meer iets", + "picture_in_picture.restore": "Terugzetten", "poll.closed": "Gesloten", "poll.refresh": "Vernieuwen", "poll.total_people": "{count, plural, one {# persoon} other {# mensen}}", @@ -448,9 +450,9 @@ "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten", "trends.trending_now": "Trends", "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", - "units.short.billion": "{count} miljard", - "units.short.million": "{count} miljoen", - "units.short.thousand": "{count} duizend", + "units.short.billion": "{count} mrd.", + "units.short.million": "{count} mln.", + "units.short.thousand": "{count}k", "upload_area.title": "Hiernaar toe slepen om te uploaden", "upload_button.label": "Afbeeldingen, een video- of een geluidsbestand toevoegen", "upload_error.limit": "Uploadlimiet van bestand overschreden.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index f6518afab..38a95533c 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symbol", "emoji_button.travel": "Reise & stader", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen tut her!", "empty_column.account_unavailable": "Profil ikkje tilgjengelig", "empty_column.blocks": "Du har ikkje blokkert nokon brukarar enno.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Førre", - "lightbox.view_context": "Sjå kontekst", "lists.account.add": "Legg til i liste", "lists.account.remove": "Fjern frå liste", "lists.delete": "Slett liste", @@ -266,9 +266,9 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.all_replies": "Enhver fulgt bruker", - "lists.replies_policy.list_replies": "Medlemmer i listen", - "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk gjennom folk du følgjer", "lists.subheading": "Dine lister", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Nemningar", "notifications.filter.polls": "Røysteresultat", "notifications.filter.statuses": "Oppdateringer fra folk du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} varsel", "notifications.mark_as_read": "Merk alle varsler som lest", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Aldri gå glipp av noe", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 46cf7c407..e64bf4a5a 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Reise & steder", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Ingen tuter er her!", "empty_column.account_unavailable": "Profilen er utilgjengelig", "empty_column.blocks": "Du har ikke blokkert noen brukere enda.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Neste", "lightbox.previous": "Forrige", - "lightbox.view_context": "Vis sammenheng", "lists.account.add": "Legg til i listen", "lists.account.remove": "Fjern fra listen", "lists.delete": "Slett listen", @@ -266,9 +266,9 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Ligg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.all_replies": "Enhver fulgt bruker", - "lists.replies_policy.list_replies": "Medlemmer i listen", - "lists.replies_policy.no_replies": "Ingen", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", "notifications.filter.statuses": "Oppdateringer fra folk du følger", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} varslinger", "notifications.mark_as_read": "Merk alle varsler som lest", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Aldri gå glipp av noe", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index f166f95e2..ba41f83d6 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultats de recèrca", "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Cap de tuts aquí !", "empty_column.account_unavailable": "Perfil pas disponible", "empty_column.blocks": "Avètz pas blocat degun pel moment.", @@ -258,7 +259,6 @@ "lightbox.expand": "Espandir la fenèstra de visualizacion d’imatge", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", - "lightbox.view_context": "Veire lo contèxt", "lists.account.add": "Ajustar a la lista", "lists.account.remove": "Levar de la lista", "lists.delete": "Suprimir la lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar lo títol", "lists.new.create": "Ajustar una lista", "lists.new.title_placeholder": "Títol de la nòva lista", - "lists.replies_policy.all_replies": "Los que sègui", - "lists.replies_policy.list_replies": "Membres d’aquesta lista", - "lists.replies_policy.no_replies": "Degun", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar las responsas a :", "lists.search": "Cercar demest lo mond que seguètz", "lists.subheading": "Vòstras listas", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats del sondatge", "notifications.filter.statuses": "Mesas a jorn del monde que seguissètz", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificacions", "notifications.mark_as_read": "Marcar totas las notificacions coma legidas", "notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas d’autorizacion navigador", "notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Activar las notificacions burèu", "notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.", "notifications_permission_banner.title": "Manquetz pas jamai res", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 3009471f4..badea8dcd 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -13,7 +13,7 @@ "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", "account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}", - "account.endorse": "Polecaj na profilu", + "account.endorse": "Wyróżnij na profilu", "account.follow": "Śledź", "account.followers": "Śledzący", "account.followers.empty": "Nikt jeszcze nie śledzi tego użytkownika.", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Brak wpisów tutaj!", "empty_column.account_unavailable": "Profil niedostępny", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", @@ -258,7 +259,6 @@ "lightbox.expand": "Rozwiń pole widoku obrazu", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", - "lightbox.view_context": "Pokaż kontekst", "lists.account.add": "Dodaj do listy", "lists.account.remove": "Usunąć z listy", "lists.delete": "Usuń listę", @@ -266,9 +266,9 @@ "lists.edit.submit": "Zmień tytuł", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", - "lists.replies_policy.all_replies": "Dowolnego obserwowanego użytkownika", - "lists.replies_policy.list_replies": "Członków listy", - "lists.replies_policy.no_replies": "Nikogo", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Pokazuj odpowiedzi dla:", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Wspomienia", "notifications.filter.polls": "Wyniki głosowania", "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", "notifications_permission_banner.title": "Nie przegap niczego", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index dda932440..4e45927a5 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagem & Lugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nada aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Nada aqui.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Excluir lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Renomear", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", - "lists.replies_policy.all_replies": "Qualquer usuário seguido", - "lists.replies_policy.list_replies": "Membros da lista", - "lists.replies_policy.no_replies": "Ninguém", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados de enquete", "notifications.filter.statuses": "Atualizações de pessoas que você segue", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificações", "notifications.mark_as_read": "Marcar todas as notificações como lidas", "notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.", "notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Habilitar notificações da área de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.", "notifications_permission_banner.title": "Nunca perca nada", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 065a6bf57..0ff168002 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Sem toots por aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Remover lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", - "lists.replies_policy.all_replies": "Qualquer utilizador seguido", - "lists.replies_policy.list_replies": "Membros da lista", - "lists.replies_policy.no_replies": "Ninguém", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Votações", "notifications.filter.statuses": "Atualizações de pessoas que você segue", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificações", "notifications.mark_as_read": "Marcar todas as notificações como lidas", "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", "notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca perca nada", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index dc1be7bc1..a80bfa822 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Rezultatele căutării", "emoji_button.symbols": "Simboluri", "emoji_button.travel": "Călătorii și Locuri", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Nicio postare aici!", "empty_column.account_unavailable": "Profil indisponibil", "empty_column.blocks": "Nu ai blocat nici un utilizator încă.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Următorul", "lightbox.previous": "Precedentul", - "lightbox.view_context": "Vizualizați contextul", "lists.account.add": "Adaugă în listă", "lists.account.remove": "Elimină din listă", "lists.delete": "Șterge lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Schimbă titlul", "lists.new.create": "Adaugă listă", "lists.new.title_placeholder": "Titlu pentru noua listă", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Caută printre persoanele pe care le urmărești", "lists.subheading": "Listele tale", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Menționări", "notifications.filter.polls": "Rezultate sondaj", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notificări", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index c0022e524..bde219846 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия и места", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Здесь нет постов!", "empty_column.account_unavailable": "Профиль недоступен", "empty_column.blocks": "Вы ещё никого не заблокировали.", @@ -258,7 +259,6 @@ "lightbox.expand": "Развернуть окно просмотра изображений", "lightbox.next": "Далее", "lightbox.previous": "Назад", - "lightbox.view_context": "Контекст", "lists.account.add": "Добавить в список", "lists.account.remove": "Убрать из списка", "lists.delete": "Удалить список", @@ -266,9 +266,9 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", - "lists.replies_policy.all_replies": "Пользователям, на которых вы подписаны", - "lists.replies_policy.list_replies": "Пользователям в списке", - "lists.replies_policy.no_replies": "Никому", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Показать ответы только:", "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} уведомл.", "notifications.mark_as_read": "Отмечать все уведомления прочитанными", "notifications.permission_denied": "Уведомления на рабочем столе недоступны из-за ранее отклонённого запроса разрешений браузера", "notifications.permission_denied_alert": "Уведомления на рабочем столе не могут быть включены, так как раньше было отказано в разрешении браузера", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Включить уведомления на рабочем столе", "notifications_permission_banner.how_to_control": "Чтобы получать уведомления, когда Мастодон не открыт, включите уведомления рабочего стола. Вы можете точно управлять, какие типы взаимодействия генерируют уведомления рабочего стола с помощью кнопки {icon} выше, когда они включены.", "notifications_permission_banner.title": "Ничего не пропустите", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index a8f5171c9..4656aa275 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "अन्वेषणपरिणामाः", "emoji_button.symbols": "चिह्नानि", "emoji_button.travel": "यात्रा च स्थानानि", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "न दौत्यान्यत्र", "empty_column.account_unavailable": "व्यक्तित्वं न प्राप्यते", "empty_column.blocks": "नैकोऽप्युपभोक्ता निषिद्धो वर्तते", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index cf4ceb5d0..e1b4e3998 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -4,42 +4,42 @@ "account.badges.bot": "Bot", "account.badges.group": "Grupu", "account.block": "Bloca @{name}", - "account.block_domain": "Bloca domìniu{domain}", + "account.block_domain": "Bloca su domìniu {domain}", "account.blocked": "Blocadu", "account.browse_more_on_origin_server": "Esplora de prus in su profilu originale", "account.cancel_follow_request": "Annulla rechesta de sighidura", "account.direct": "Messàgiu deretu a @{name}", - "account.disable_notifications": "Acaba·la de mi notificare cando @{name} publicat carchi cosa", + "account.disable_notifications": "Non mi notìfiches prus cando @{name} pùblichet messàgios", "account.domain_blocked": "Domìniu blocadu", "account.edit_profile": "Modìfica profilu", - "account.enable_notifications": "Notìfica·mi cando @{name} pùblicat carchi cosa", + "account.enable_notifications": "Notìfica·mi cando @{name} pùblicat messàgios", "account.endorse": "Cussìgia in su profilu tuo", "account.follow": "Sighi", "account.followers": "Sighiduras", "account.followers.empty": "Nemos sighit ancora custa persone.", - "account.followers_counter": "{count, plural, one {{counter} Sighidore} other {{counter} Sighidores}}", - "account.following_counter": "{count, plural, one {{counter} Sighidu} other {{counter} Sighidos}}", + "account.followers_counter": "{count, plural, one {{counter} sighidura} other {{counter} sighiduras}}", + "account.following_counter": "{count, plural, one {Sighende a {counter}} other {Sighende a {counter}}}", "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", "account.last_status": "Ùrtima atividade", - "account.link_verified_on": "Sa propiedade de custu ligàmene est istada controllada su {date}", - "account.locked_info": "Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", + "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}", + "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", "account.media": "Cuntenutu multimediale", - "account.mention": "Mentova @{name}", - "account.moved_to": "{name} est istadu trasferidu a:", - "account.mute": "Pone @name a sa muda", - "account.mute_notifications": "Notìficas disativadas dae @{name}", + "account.mention": "Mentova a @{name}", + "account.moved_to": "{name} at cambiadu a:", + "account.mute": "Pone a @{name} a sa muda", + "account.mute_notifications": "Disativa is notìficas de @{name}", "account.muted": "A sa muda", "account.never_active": "Mai", "account.posts": "Tuts", "account.posts_with_replies": "Tuts e rispostas", "account.report": "Signala @{name}", - "account.requested": "Incarca pro annullare sa rechesta de sighidura", + "account.requested": "Abetende s'aprovatzione. Incarca pro annullare sa rechesta de sighidura", "account.share": "Cumpartzi su profilu de @{name}", "account.show_reblogs": "Ammustra is cumpartziduras de @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}", - "account.unblock": "Isbloca @{name}", + "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tuts}}", + "account.unblock": "Isbloca a @{name}", "account.unblock_domain": "Isbloca su domìniu {domain}", "account.unendorse": "Non cussiges in su profilu", "account.unfollow": "Non sigas prus", @@ -49,7 +49,7 @@ "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.unexpected.message": "B'at àpidu una faddina.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Oh!", "announcement.announcement": "Annùntziu", "autosuggest_hashtag.per_week": "{count} a sa chida", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", @@ -73,7 +73,7 @@ "column.notifications": "Notìficas", "column.pins": "Tuts apicados", "column.public": "Lìnia de tempus federada", - "column_back_button.label": "In segus", + "column_back_button.label": "A coa", "column_header.hide_settings": "Cua is cunfiguratziones", "column_header.moveLeft_settings": "Moe sa colunna a manca", "column_header.moveRight_settings": "Moe sa colunna a dereta", @@ -81,13 +81,13 @@ "column_header.show_settings": "Ammustra is cunfiguratziones", "column_header.unpin": "Boga dae pitzu", "column_subheading.settings": "Cunfiguratziones", - "community.column_settings.local_only": "Locale ebbia", - "community.column_settings.media_only": "Multimediale isceti", - "community.column_settings.remote_only": "Remotu ebbia", + "community.column_settings.local_only": "Isceti locale", + "community.column_settings.media_only": "Isceti multimediale", + "community.column_settings.remote_only": "Isceti remotu", "compose_form.direct_message_warning": "Custu tut at a èssere imbiadu isceti a is persones mentovadas.", "compose_form.direct_message_warning_learn_more": "Àteras informatziones", - "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu.", - "compose_form.lock_disclaimer": "Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a is chi ti sighint.", + "compose_form.hashtag_warning": "Custu tut no at a èssere ammustradu in peruna eticheta, dae chi no est listadu. Isceti is tuts pùblicos podent èssere chircados cun etichetas.", + "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.", "compose_form.lock_disclaimer.lock": "blocadu", "compose_form.placeholder": "A ite ses pensende?", "compose_form.poll.add_option": "Agiunghe unu sèberu", @@ -98,10 +98,10 @@ "compose_form.poll.switch_to_single": "Muda su sondàgiu pro permìtere un'optzione isceti", "compose_form.publish": "Tut", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marca mèdia comente a sensìbile", - "compose_form.sensitive.marked": "Mèdia marcadu comente a sensìbile", - "compose_form.sensitive.unmarked": "Mèdia non marcadu comente a sensìbile", - "compose_form.spoiler.marked": "Su testu est cuadu dae s'avisu", + "compose_form.sensitive.hide": "{count, plural, one {Marca elementu multimediale comente a sensìbile} other {Marca elementos multimediales comente sensìbiles}}", + "compose_form.sensitive.marked": "{count, plural, one {Elementu multimediale marcadu comente a sensìbile} other {Elementos multimediales marcados comente a sensìbiles}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Elementu multimediale non marcadu comente a sensìbile} other {Elementos multimediales non marcados comente a sensìbiles}}", + "compose_form.spoiler.marked": "Su testu est cuadu in fatu de s'avisu", "compose_form.spoiler.unmarked": "Su testu no est cuadu", "compose_form.spoiler_placeholder": "Iscrie s'avisu tuo inoghe", "confirmation_modal.cancel": "Annulla", @@ -112,24 +112,24 @@ "confirmations.delete.message": "Seguru chi boles cantzellare custu tut?", "confirmations.delete_list.confirm": "Cantzella", "confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?", - "confirmations.domain_block.confirm": "Cua totu su domìniu", - "confirmations.domain_block.message": "Ses seguru a beru, ma a beru a beru, de bòlere blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de utentes sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Is sighidores tuos dae cussu domìniu ant a èssere bogados.", + "confirmations.domain_block.confirm": "Bloca totu su domìniu", + "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare su {domain} intreu? In sa parte manna de is casos pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.", "confirmations.logout.confirm": "Essi·nche", "confirmations.logout.message": "Seguru chi boles essire?", "confirmations.mute.confirm": "A sa muda", "confirmations.mute.explanation": "Custu at a cuare is publicatziones issoro e is messàgios chi ddos mentovant, ma ant a pòdere bìdere is messàgios tuos e t'ant a pòdere sighire.", - "confirmations.mute.message": "Seguru chi boles pònnere {name} a sa muda?", + "confirmations.mute.message": "Seguru chi boles pònnere a {name} a sa muda?", "confirmations.redraft.confirm": "Cantzella e torra a fàghere", - "confirmations.redraft.message": "As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", + "confirmations.redraft.message": "Seguru chi boles cantzellare a torrare a fàghere custu tut? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", "confirmations.reply.confirm": "Risponde", "confirmations.reply.message": "Rispondende immoe as a subraiscrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", "confirmations.unfollow.confirm": "Non sigas prus", - "confirmations.unfollow.message": "Seguru chi non boles sighire prus {name}?", + "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?", "conversation.delete": "Cantzella arresonada", "conversation.mark_as_read": "Signala comente lèghidu", - "conversation.open": "Bide arresonada", + "conversation.open": "Ammsutra arresonada", "conversation.with": "Cun {names}", - "directory.federated": "Dae unu fediversu connòschidu", + "directory.federated": "Dae unu fediversu connotu", "directory.local": "Isceti dae {domain}", "directory.new_arrivals": "Arribos noos", "directory.recently_active": "Ativos dae pagu", @@ -149,14 +149,15 @@ "emoji_button.search_results": "Resurtados de sa chirca", "emoji_button.symbols": "Sìmbulos", "emoji_button.travel": "Biàgios e logos", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Perunu tut inoghe!", "empty_column.account_unavailable": "Su profilu no est a disponimentu", - "empty_column.blocks": "No as isblocadu ancora nemos.", + "empty_column.blocks": "No as blocadu ancora nemos.", "empty_column.bookmarked_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", "empty_column.community": "Sa lìnia de tempus locale est bòida. Iscrie inoghe pro cumintzare sa festa!", "empty_column.direct": "Non tenes ancora perunu messàgiu deretu. Cando nd'as a imbiare o nd'as a retzire unu, at a èssere ammustradu inoghe.", "empty_column.domain_blocks": "Non tenes ancora perunu domìniu blocadu.", - "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is marcadores. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", + "empty_column.favourited_statuses": "Non tenes ancora perunu tut in is preferidos. Cando nd'as a agiùnghere unu, at a èssere ammustradu inoghe.", "empty_column.favourites": "Nemos at marcadu ancora custu tut comente preferidu. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", "empty_column.follow_requests": "Non tenes ancora peruna rechesta de sighidura. Cando nd'as a retzire una, at a èssere ammustrada inoghe.", "empty_column.hashtag": "Ancora nudda in custa eticheta.", @@ -169,8 +170,8 @@ "empty_column.public": "Nudda inoghe. Iscrie calicuna cosa pùblica, o sighi àteras persones de àteros serbidores pro prenare custu ispàtziu", "error.unexpected_crash.explanation": "A càusa de una faddina in su còdighe nostru o unu problema de cumpatibilidade de su navigadore, custa pàgina diat pòdere no èssere ammustrada in manera curreta.", "error.unexpected_crash.explanation_addons": "Custa pàgina diat pòdere no èssere ammustrada comente si tocat. Custa faddina est probàbile chi dipendat dae un'estensione de su navigadore o dae ainas automàticas de tradutzione.", - "error.unexpected_crash.next_steps": "Proa de atualizare sa pàgina. Si custu non acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", - "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e a atualizare sa pàgina. Si custu non acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", + "error.unexpected_crash.next_steps": "Proa de torrare a carrigare sa pàgina. Si custu no acontza su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", + "error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.", "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete", "errors.unexpected_crash.report_issue": "Signala unu problema", "follow_request.authorize": "Autoriza", @@ -199,14 +200,14 @@ "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", "home.show_announcements": "Ammustra annùntzios", - "intervals.full.days": "{number, plural, one {# die} other {# die}}", + "intervals.full.days": "{number, plural, one {# die} other {# dies}}", "intervals.full.hours": "{number, plural, one {# ora} other {# oras}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", "introduction.federation.action": "Sighi", "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Is publicatziones pùblicas de àteros serbidores de su fediversu ant a aparèssere in sa lìnia de tempus federada.", "introduction.federation.home.headline": "Printzipale", - "introduction.federation.home.text": "Is messàgios de gente chi sighis ant a aparèssere in lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore.", + "introduction.federation.home.text": "Is messàgios de sa gente chi sighis ant a aparèssere in sa lìnia de tempus printzipale tua. Podes sighire gente de cale si siat serbidore!", "introduction.federation.local.headline": "Locale", "introduction.federation.local.text": "Is publicatziones pùblicas de sa gente de su pròpiu serbidore tuo ant a aparèssere in sa lìnia de tempus locale.", "introduction.interactions.action": "Acabba su tutoriale!", @@ -218,16 +219,16 @@ "introduction.interactions.reply.text": "Podes rispòndere a is tuts de àtera gente e a is tuos pròpios, e ant a èssere unidos in un'arresonada.", "introduction.welcome.action": "Ajò, andamus!", "introduction.welcome.headline": "Primos passos", - "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·nde si nòmine.", + "introduction.welcome.text": "Ti donamus sa benebènnida a su fediversu. Dae immoe a pagu, as a pòdere publicare messàgios e chistionare cun is amistades tuas in meda serbidores. Però custu serbidore, {domain}, est ispetziale: allògiat su profilu tuo, duncas regorda·ti·nde su nòmine.", "keyboard_shortcuts.back": "pro navigare in segus", "keyboard_shortcuts.blocked": "pro abèrrere sa lista de persones blocadas", "keyboard_shortcuts.boost": "pro cumpartzire", - "keyboard_shortcuts.column": "pro atzentrare un'istadu in una de is colunnas", + "keyboard_shortcuts.column": "pro atzentrare unu tut in una de is colunnas", "keyboard_shortcuts.compose": "pro atzentrare in s'àrea de cumpositzione de testu", "keyboard_shortcuts.description": "Descritzione", "keyboard_shortcuts.direct": "pro abèrrere sa colunna de messàgios diretos", "keyboard_shortcuts.down": "pro mòere in bàsciu in sa lista", - "keyboard_shortcuts.enter": "pro abèrrere s'istadu", + "keyboard_shortcuts.enter": "pro abèrrere su tut", "keyboard_shortcuts.favourite": "pro marcare comente a preferidu", "keyboard_shortcuts.favourites": "pro abèrrere sa lista de preferidos", "keyboard_shortcuts.federated": "pro abèrrere sa lìnia de tempus federada", @@ -240,7 +241,7 @@ "keyboard_shortcuts.muted": "pro abèrrere sa lista de persones a sa muda", "keyboard_shortcuts.my_profile": "pro abèrrere su profilu tuo", "keyboard_shortcuts.notifications": "pro abèrrere sa colunna de notificatziones", - "keyboard_shortcuts.open_media": "pro abèrrere mèdia", + "keyboard_shortcuts.open_media": "pro abèrrere elementos multimediales", "keyboard_shortcuts.pinned": "pro abèrrere lista de tuts apicados", "keyboard_shortcuts.profile": "pro abèrrere su profilu de s'autore", "keyboard_shortcuts.reply": "pro rispòndere", @@ -249,7 +250,7 @@ "keyboard_shortcuts.spoilers": "pro ammustrare/cuare su campu AC", "keyboard_shortcuts.start": "pro abèrrere sa colunna \"Cumintza\"", "keyboard_shortcuts.toggle_hidden": "pro ammustrare o cuare testu de is AC", - "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare mèdias", + "keyboard_shortcuts.toggle_sensitivity": "pro ammustrare o cuare elementos multimediales", "keyboard_shortcuts.toot": "pro cumintzare a iscrìere unu tut nou", "keyboard_shortcuts.unfocus": "pro essire de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "pro mòere in susu in sa lista", @@ -258,26 +259,25 @@ "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines", "lightbox.next": "Sighi", "lightbox.previous": "Pretzedente", - "lightbox.view_context": "Bide su cuntestu", - "lists.account.add": "Agiùnghe a sa lista", + "lists.account.add": "Agiunghe a sa lista", "lists.account.remove": "Boga dae sa lista", "lists.delete": "Cantzella sa lista", "lists.edit": "Modìfica sa lista", "lists.edit.submit": "Muda su tìtulu", "lists.new.create": "Agiunghe lista", - "lists.new.title_placeholder": "Lista noa", - "lists.replies_policy.all_replies": "Cale si siat utente sighidu", - "lists.replies_policy.list_replies": "Membros de sa lista", - "lists.replies_policy.no_replies": "Perunu", + "lists.new.title_placeholder": "Tìtulu de sa lista noa", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Ammustra is rispostas a:", - "lists.search": "Chircare intre sa gente chi ses sighende", + "lists.search": "Chirca intre sa gente chi ses sighende", "lists.subheading": "Is listas tuas", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", "loading_indicator.label": "Carrighende...", - "media_gallery.toggle_visible": "Cua mèdia", + "media_gallery.toggle_visible": "Cua {number, plural, one {immàgine} other {immàgines}}", "missing_indicator.label": "Perunu resurtadu", "missing_indicator.sublabel": "Resursa no agatada", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Boles cuare is notìficas de custa persone?", "mute_modal.indefinite": "Indefinida", "navigation_bar.apps": "Aplicatziones mòbiles", @@ -290,7 +290,7 @@ "navigation_bar.domain_blocks": "Domìnios blocados", "navigation_bar.edit_profile": "Modìfica profilu", "navigation_bar.favourites": "Preferidos", - "navigation_bar.filters": "Paràulas a sa muda", + "navigation_bar.filters": "Faeddos a sa muda", "navigation_bar.follow_requests": "Rechestas de sighidura", "navigation_bar.follows_and_followers": "Persones chi sighis e chi ti sighint", "navigation_bar.info": "Informatziones de su serbidore", @@ -309,7 +309,7 @@ "notification.mention": "{name} t'at mentovadu", "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", - "notification.reblog": "{name} at cumpartzidu s'istadu tuo", + "notification.reblog": "{name} at cumpartzidu su tut tuo", "notification.status": "{name} at publicadu cosa", "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", @@ -318,8 +318,8 @@ "notifications.column_settings.filter_bar.advanced": "Ammustra totu is categorias", "notifications.column_settings.filter_bar.category": "Barra lestra de filtros", "notifications.column_settings.filter_bar.show": "Ammustra", - "notifications.column_settings.follow": "Gente noa chi ti sighit:", - "notifications.column_settings.follow_request": "Rechesta de sighidura noa:", + "notifications.column_settings.follow": "Sighiduras noas:", + "notifications.column_settings.follow_request": "Rechestas noas de sighidura:", "notifications.column_settings.mention": "Mentovos:", "notifications.column_settings.poll": "Resurtados de su sondàgiu:", "notifications.column_settings.push": "Notìficas push", @@ -332,20 +332,22 @@ "notifications.filter.favourites": "Preferidos", "notifications.filter.follows": "Sighende", "notifications.filter.mentions": "Mentovos", - "notifications.filter.polls": "Resurtados dae su sondàgiu", - "notifications.filter.statuses": "Agiornamentos dae is persones chi sighis", + "notifications.filter.polls": "Resurtados de su sondàgiu", + "notifications.filter.statuses": "Atualizatziones dae gente chi sighis", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notìficas", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Sinnala ònnia notìfica comente lèghida", "notifications.permission_denied": "Is notìficas de iscrivania non sunt a disponimentu pro neghe de rechestas de permissu chi sunt istadas dennegadas in antis", "notifications.permission_denied_alert": "Is notìficas de iscrivania non podent èssere abilitadas, ca su permissu de su navigadore est istadu dennegadu in antis", - "notifications_permission_banner.enable": "Abìlita is notìficas de iscrivania", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Abilita is notìficas de iscrivania", + "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.", + "notifications_permission_banner.title": "Non ti perdas mai nudda", + "picture_in_picture.restore": "Torra·ddu a ue fiat", "poll.closed": "Serradu", "poll.refresh": "Atualiza", - "poll.total_people": "{count, plurale, one {# persone} other {# persones}}", - "poll.total_votes": "{count, plurale, one {# votu} other {# votos}}", + "poll.total_people": "{count, plural, one {# persone} other {# persones}}", + "poll.total_votes": "{count, plural, one {# votu} other {# votos}}", "poll.vote": "Vota", "poll.voted": "As votadu custa risposta", "poll_button.add_poll": "Agiunghe unu sondàgiu", @@ -370,7 +372,7 @@ "relative_time.today": "oe", "reply_indicator.cancel": "Annulla", "report.forward": "Torra a imbiare a {target}", - "report.forward_hint": "Custu contu est de un'àteru serbidore. Bi boles imbiare puru una còpia anònima de custu informe?", + "report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?", "report.hint": "S'informe at a èssere imbiadu a sa moderatzione de su serbidore. Podes frunire un'ispiegatzione de sa signalatzione tua de custu contu:", "report.placeholder": "Cummentos additzionales", "report.submit": "Imbia", @@ -379,21 +381,21 @@ "search_popout.search_format": "Formadu de chirca avantzada", "search_popout.tips.full_text": "Testu sèmplitze pro agatare istados chi as iscritu, marcadu comente a preferidos, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines de utente, nòmines visualizados e etichetas chi ddu includent.", "search_popout.tips.hashtag": "eticheta", - "search_popout.tips.status": "istadu", + "search_popout.tips.status": "tut", "search_popout.tips.text": "Testu sèmplitze pro agatare nòmines visualizados, nòmines de utente e etichetas", "search_popout.tips.user": "utente", "search_results.accounts": "Gente", "search_results.hashtags": "Etichetas", "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "Sa chirca de tuts pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", - "search_results.total": "{count, number} {count, plurale, one {resurtadu} other {resurtados}}", + "search_results.total": "{count, number} {count, plural, one {resurtadu} other {resurtados}}", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", "status.admin_status": "Aberi custu istadu in s'interfache de moderatzione", "status.block": "Bloca @{name}", - "status.bookmark": "Marcadore", + "status.bookmark": "Sinnalibru", "status.cancel_reblog_private": "Iscontza sa cumpartzidura", "status.cannot_reblog": "Custa publicatzione non podet èssere cumpartzida", - "status.copy": "Còpia su ligàmene a s'istadu tuo", + "status.copy": "Còpia su ligòngiu a su tut tuo", "status.delete": "Cantzella", "status.detailed_status": "Visualizatzione de detàlliu de arresonada", "status.direct": "Messàgiu deretu a @{name}", @@ -401,24 +403,24 @@ "status.favourite": "Preferidos", "status.filtered": "Filtradu", "status.load_more": "Càrriga·nde àteros", - "status.media_hidden": "Mèdias cuados", + "status.media_hidden": "Elementos multimediales cuados", "status.mention": "Mentova @{name}", "status.more": "Àteru", - "status.mute": "Pone @name a sa muda", + "status.mute": "Pone @{name} a sa muda", "status.mute_conversation": "Pone s'arresonada a sa muda", - "status.open": "Ismànnia custu istadu", + "status.open": "Ismànnia custu tut", "status.pin": "Apica in su profilu", "status.pinned": "Tut apicadu", - "status.read_more": "Lèghe·nde àteru", + "status.read_more": "Leghe·nde àteru", "status.reblog": "Cumpartzi", "status.reblog_private": "Cumpartzi cun is utentes originales", "status.reblogged_by": "{name} at cumpartzidu", "status.reblogs.empty": "Nemos at ancora cumpartzidu custu tut. Cando calicunu dd'at a fàghere, at a èssere ammustradu inoghe.", "status.redraft": "Cantzella e torra a iscrìere", - "status.remove_bookmark": "Boga su marcadore", + "status.remove_bookmark": "Boga su sinnalibru", "status.reply": "Risponde", "status.replyAll": "Risponde a su tema", - "status.report": "Signala @{name}", + "status.report": "Sinnala @{name}", "status.sensitive_warning": "Cuntenutu sensìbile", "status.share": "Cumpartzi", "status.show_less": "Ammustra·nde prus pagu", @@ -428,7 +430,7 @@ "status.show_thread": "Ammustra su tema", "status.uncached_media_warning": "No est a disponimentu", "status.unmute_conversation": "Torra a ativare s'arresonada", - "status.unpin": "Isbloca dae pitzu de su profilu", + "status.unpin": "Boga dae pitzu de su profilu", "suggestions.dismiss": "Iscarta cussìgiu", "suggestions.header": "Est possìbile chi tèngias interessu in…", "tabs_bar.federated_timeline": "Federada", @@ -441,34 +443,34 @@ "time_remaining.minutes": "{number, plural, one {abarrat # minutu} other {abarrant # minutos}}", "time_remaining.moments": "Abarrant pagu momentos", "time_remaining.seconds": "{number, plural, one {abarrat # segundu} other {abarrant # segundos}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "timeline_hint.remote_resource_not_displayed": "{resource} dae àteros serbidores non benint ammustrados.", + "timeline_hint.resources.followers": "Sighiduras", + "timeline_hint.resources.follows": "Sighende", + "timeline_hint.resources.statuses": "Tuts prus betzos", + "trends.counter_by_accounts": "{count, plural, one {{counter} persone} other {{counter} persones}} chistionende", "trends.trending_now": "Est tendèntzia immoe", "ui.beforeunload": "S'abbotzu tuo at a èssere pèrdidu si essis dae Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}Mrd", + "units.short.million": "{count}Mln", + "units.short.thousand": "{count}m", "upload_area.title": "Traga pro carrigare", - "upload_button.label": "Agiunghe mèdias", + "upload_button.label": "Agiunghe immàgines, unu vìdeu o unu documentu sonoru", "upload_error.limit": "Lìmite de càrriga de archìvios barigadu.", "upload_error.poll": "Non si permitit s'imbiu de archìvios in is sondàgios.", "upload_form.audio_description": "Descritzione pro persones cun pèrdida auditiva", "upload_form.description": "Descritzione pro persones cun problemas visuales", "upload_form.edit": "Modìfica", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Càmbia sa miniadura", "upload_form.undo": "Cantzella", "upload_form.video_description": "Descritzione pro persones cun pèrdida auditiva o problemas visuales", "upload_modal.analyzing_picture": "Analizende immàgine…", "upload_modal.apply": "Àplica", - "upload_modal.choose_image": "Choose image", + "upload_modal.choose_image": "Sèbera un'immàgine", "upload_modal.description_placeholder": "Su margiane castàngiu brincat lestru a subra de su cane mandrone", "upload_modal.detect_text": "Rileva testu de s'immàgine", - "upload_modal.edit_media": "Modìfica su mèdia", - "upload_modal.hint": "Incarca o traga su tzìrculu in sa previsualizatzione pro seberare su puntu focale chi at a èssere semper visìbile in totu is miniaturas.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.edit_media": "Modìfica elementu multimediale", + "upload_modal.hint": "Incarca o traga su tzìrculu in sa previsualizatzione pro seberare su puntu focale chi at a èssere semper visìbile in totu is miniaduras.", + "upload_modal.preparing_ocr": "Ammaniende s'OCR…", "upload_modal.preview_label": "Previsualiza ({ratio})", "upload_progress.label": "Carrighende...", "video.close": "Serra su vìdeu", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index cf8d3e6b1..6640d5472 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Nájdené", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Niesú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", - "lightbox.view_context": "Ukáž kontext", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Iba spomenutia", "notifications.filter.polls": "Výsledky ankiet", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} oboznámení", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index dd25cbc03..ca29c4455 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Rezultati iskanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Potovanja in Kraji", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Tukaj ni tutov!", "empty_column.account_unavailable": "Profil ni na voljo", "empty_column.blocks": "Niste še blokirali nobenega uporabnika.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", - "lightbox.view_context": "Poglej kontekst", "lists.account.add": "Dodaj na seznam", "lists.account.remove": "Odstrani s seznama", "lists.delete": "Izbriši seznam", @@ -266,9 +266,9 @@ "lists.edit.submit": "Spremeni naslov", "lists.new.create": "Dodaj seznam", "lists.new.title_placeholder": "Nov naslov seznama", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Išči med ljudmi, katerim sledite", "lists.subheading": "Vaši seznami", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Omembe", "notifications.filter.polls": "Rezultati glasovanj", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} obvestil", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 63feac7ff..d73c7802b 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Përfundime kërkimi", "emoji_button.symbols": "Simbole", "emoji_button.travel": "Udhëtime & Vende", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "S’ka mesazhe këtu!", "empty_column.account_unavailable": "Profil jashtë funksionimi", "empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.", @@ -258,7 +259,6 @@ "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", - "lightbox.view_context": "Shihni kontekstin", "lists.account.add": "Shto në listë", "lists.account.remove": "Hiqe nga lista", "lists.delete": "Fshije listën", @@ -266,9 +266,9 @@ "lists.edit.submit": "Ndryshoni titullin", "lists.new.create": "Shtoni listë", "lists.new.title_placeholder": "Titull liste të re", - "lists.replies_policy.all_replies": "Cilido përdorues i ndjekur", - "lists.replies_policy.list_replies": "Anëtarë të listës", - "lists.replies_policy.no_replies": "Askush", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Shfaq përgjigje për:", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Përmendje", "notifications.filter.polls": "Përfundime pyetësori", "notifications.filter.statuses": "Përditësime prej personash që ndiqni", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count}s njoftime", "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar", "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.", "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.", "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 38fc9cdce..88c9df59b 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Rezultati pretrage", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & mesta", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Sledeći", "lightbox.previous": "Prethodni", - "lightbox.view_context": "View context", "lists.account.add": "Dodaj na listu", "lists.account.remove": "Ukloni sa liste", "lists.delete": "Obriši listu", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Dodaj listu", "lists.new.title_placeholder": "Naslov nove liste", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Pretraži među ljudima koje pratite", "lists.subheading": "Vaše liste", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 8df81fae6..2509c9085 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Резултати претраге", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Путовања и места", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Овде нема труба!", "empty_column.account_unavailable": "Профил недоступан", "empty_column.blocks": "Још увек немате блокираних корисника.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Следећи", "lightbox.previous": "Претходни", - "lightbox.view_context": "View context", "lists.account.add": "Додај на листу", "lists.account.remove": "Уклони са листе", "lists.delete": "Обриши листу", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Додај листу", "lists.new.title_placeholder": "Наслов нове листе", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Претражи међу људима које пратите", "lists.subheading": "Ваше листе", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} обавештења", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 295b98f0d..a75cca8b5 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Läs mer på original profilen", "account.cancel_follow_request": "Avbryt följarförfrågan", "account.direct": "Skicka ett direktmeddelande till @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Sluta meddela mig när @{name} tutar", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Meddela mig när @{name} tutar", "account.endorse": "Visa på profil", "account.follow": "Följ", "account.followers": "Följare", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Sökresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Resor & platser", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Inga inlägg här!", "empty_column.account_unavailable": "Profilen ej tillgänglig", "empty_column.blocks": "Du har ännu ej blockerat några användare.", @@ -168,9 +169,9 @@ "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.", "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det", "error.unexpected_crash.explanation": "På grund av en bugg i vår kod eller kompatiblitetsproblem i webbläsaren kan den här sidan inte visas korrekt.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Denna sida kunde inte visas korrekt. Detta beror troligen på ett webbläsartillägg eller ett automatiskt översättningsverktyg.", "error.unexpected_crash.next_steps": "Prova att ladda om sidan. Om det inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.", "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", "errors.unexpected_crash.report_issue": "Rapportera problem", "follow_request.authorize": "Godkänn", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", - "lightbox.view_context": "Visa kontext", "lists.account.add": "Lägg till i lista", "lists.account.remove": "Ta bort från lista", "lists.delete": "Radera lista", @@ -266,9 +266,9 @@ "lists.edit.submit": "Ändra titel", "lists.new.create": "Lägg till lista", "lists.new.title_placeholder": "Ny listrubrik", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", @@ -334,12 +334,14 @@ "notifications.filter.mentions": "Omnämningar", "notifications.filter.polls": "Omröstningsresultat", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} aviseringar", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", "poll.closed": "Stängd", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 17ffe5519..70f6ab152 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index d509b619a..8f5f06cc4 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "தேடல் முடிவுகள்", "emoji_button.symbols": "குறியீடுகள்", "emoji_button.travel": "சுற்றுலா மற்றும் இடங்கள்", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "டூட்டுகள் ஏதும் இல்லை!", "empty_column.account_unavailable": "சுயவிவரம் கிடைக்கவில்லை", "empty_column.blocks": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "அடுத்த", "lightbox.previous": "சென்ற", - "lightbox.view_context": "சூழலைக் பார்", "lists.account.add": "பட்டியலில் சேர்", "lists.account.remove": "பட்டியலில் இருந்து அகற்று", "lists.delete": "பட்டியலை நீக்கு", @@ -266,9 +266,9 @@ "lists.edit.submit": "தலைப்பு மாற்றவும்", "lists.new.create": "பட்டியலில் சேர்", "lists.new.title_placeholder": "புதிய பட்டியல் தலைப்பு", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "நீங்கள் பின்தொடரும் நபர்கள் மத்தியில் தேடுதல்", "lists.subheading": "உங்கள் பட்டியல்கள்", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "குறிப்பிடுகிறார்", "notifications.filter.polls": "கருத்துக்கணிப்பு முடிவுகள்", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} அறிவிப்புகள்", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 17ffe5519..70f6ab152 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 84e73f7e5..994682a67 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "శోధన ఫలితాలు", "emoji_button.symbols": "చిహ్నాలు", "emoji_button.travel": "ప్రయాణం & ప్రదేశాలు", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ఇక్కడ ఏ టూట్లూ లేవు!No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "మీరు ఇంకా ఏ వినియోగదారులనూ బ్లాక్ చేయలేదు.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "తరువాత", "lightbox.previous": "మునుపటి", - "lightbox.view_context": "View context", "lists.account.add": "జాబితాకు జోడించు", "lists.account.remove": "జాబితా నుండి తొలగించు", "lists.delete": "జాబితాను తొలగించు", @@ -266,9 +266,9 @@ "lists.edit.submit": "శీర్షిక మార్చు", "lists.new.create": "జాబితాను జోడించు", "lists.new.title_placeholder": "కొత్త జాబితా శీర్షిక", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "మీరు అనుసరించే వ్యక్తులలో శోధించండి", "lists.subheading": "మీ జాబితాలు", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "పేర్కొన్నవి", "notifications.filter.polls": "ఎన్నిక ఫలితాలు", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} ప్రకటనలు", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index a2add6715..d036a0896 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -98,9 +98,9 @@ "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดี่ยว", "compose_form.publish": "โพสต์", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "ทำเครื่องหมายสื่อว่าละเอียดอ่อน", - "compose_form.sensitive.marked": "มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", - "compose_form.sensitive.unmarked": "ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", + "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", + "compose_form.sensitive.marked": "{count, plural, other {มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", + "compose_form.sensitive.unmarked": "{count, plural, other {ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", "compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน", "compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ", "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่", @@ -149,6 +149,7 @@ "emoji_button.search_results": "ผลลัพธ์การค้นหา", "emoji_button.symbols": "สัญลักษณ์", "emoji_button.travel": "การเดินทางและสถานที่", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", "empty_column.account_unavailable": "ไม่มีโปรไฟล์", "empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ", @@ -258,7 +259,6 @@ "lightbox.expand": "ขยายกล่องดูภาพ", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", - "lightbox.view_context": "ดูบริบท", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", "lists.delete": "ลบรายการ", @@ -266,15 +266,15 @@ "lists.edit.submit": "เปลี่ยนชื่อเรื่อง", "lists.new.create": "เพิ่มรายการ", "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", - "lists.replies_policy.all_replies": "ผู้ใช้ใด ๆ ที่ติดตาม", - "lists.replies_policy.list_replies": "สมาชิกของรายการ", - "lists.replies_policy.no_replies": "ไม่มีใคร", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "แสดงการตอบกลับแก่:", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", "load_pending": "{count, plural, other {# รายการใหม่}}", "loading_indicator.label": "กำลังโหลด...", - "media_gallery.toggle_visible": "ซ่อน{number, plural, other {ภาพ}}", + "media_gallery.toggle_visible": "ซ่อน {number, plural, other {ภาพ}}", "missing_indicator.label": "ไม่พบ", "missing_indicator.sublabel": "ไม่พบทรัพยากรนี้", "mute_modal.duration": "ระยะเวลา", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "การกล่าวถึง", "notifications.filter.polls": "ผลลัพธ์การสำรวจความคิดเห็น", "notifications.filter.statuses": "การอัปเดตจากผู้คนที่คุณติดตาม", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} การแจ้งเตือน", "notifications.mark_as_read": "ทำเครื่องหมายทุกการแจ้งเตือนว่าอ่านแล้ว", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "ไม่พลาดสิ่งต่าง ๆ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ec5f65a0c..76407efce 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Burada hiç toot yok!", "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", @@ -258,7 +259,6 @@ "lightbox.expand": "Resim görüntüleme kutusunu genişlet", "lightbox.next": "Sonraki", "lightbox.previous": "Önceki", - "lightbox.view_context": "İçeriği görüntüle", "lists.account.add": "Listeye ekle", "lists.account.remove": "Listeden kaldır", "lists.delete": "Listeyi sil", @@ -266,9 +266,9 @@ "lists.edit.submit": "Başlığı değiştir", "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", - "lists.replies_policy.all_replies": "Takip edilen herhangi bir kullanıcı", - "lists.replies_policy.list_replies": "Listenin üyeleri", - "lists.replies_policy.no_replies": "Hiç kimse", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Yanıtları göster:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Bahsetmeler", "notifications.filter.polls": "Anket sonuçları", "notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} bildirim", "notifications.mark_as_read": "Her bildirimi okundu olarak işaretle", "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor", "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json new file mode 100644 index 000000000..224c51301 --- /dev/null +++ b/app/javascript/mastodon/locales/tt.json @@ -0,0 +1,486 @@ +{ + "account.account_note_header": "Язма", + "account.add_or_remove_from_list": "Исемлеккә кертү я бетерү", + "account.badges.bot": "Бот", + "account.badges.group": "Төркем", + "account.block": "Block @{name}", + "account.block_domain": "Block domain {domain}", + "account.blocked": "Blocked", + "account.browse_more_on_origin_server": "Тулырак оригинал профилендә карап була", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.domain_blocked": "Domain blocked", + "account.edit_profile": "Edit profile", + "account.enable_notifications": "Notify me when @{name} posts", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unblock domain {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account_note.placeholder": "Click to add a note", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "announcement.announcement": "Announcement", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Blocked domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.local_only": "Local only", + "community.column_settings.media_only": "Media only", + "community.column_settings.remote_only": "Remote only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", + "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", + "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no blocked domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "generic.saved": "Saved", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "home.hide_announcements": "Hide announcements", + "home.show_announcements": "Show announcements", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.compress": "Compress image view box", + "lightbox.expand": "Expand image view box", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", + "lists.replies_policy.title": "Show replies to:", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.indefinite": "Indefinite", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", + "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notification.status": "{name} just posted", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.status": "New toots:", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} notifications", + "notifications.mark_as_read": "Mark every notification as read", + "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", + "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.title": "Never miss a thing", + "picture_in_picture.restore": "Put it back", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Visible for mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Visible for followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Visible for all, shown in public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Visible for all, but not in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "relative_time.today": "today", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.bookmark": "Bookmark", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost with original visibility", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.follows": "Follows", + "timeline_hint.resources.statuses": "Older toots", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}K", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add images, a video or an audio file", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.thumbnail": "Change thumbnail", + "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.choose_image": "Choose image", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.download": "Download file", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 17ffe5519..70f6ab152 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index dab23f448..941e43c99 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Тут дмухалок немає!", "empty_column.account_unavailable": "Профіль недоступний", "empty_column.blocks": "Ви ще не заблокували жодного користувача.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Далі", "lightbox.previous": "Назад", - "lightbox.view_context": "Переглянути контекст", "lists.account.add": "Додати до списку", "lists.account.remove": "Видалити зі списку", "lists.delete": "Видалити список", @@ -266,9 +266,9 @@ "lists.edit.submit": "Змінити назву", "lists.new.create": "Додати список", "lists.new.title_placeholder": "Нова назва списку", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Шукати серед людей, на яких ви підписані", "lists.subheading": "Ваші списки", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Згадки", "notifications.filter.polls": "Результати опитування", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} сповіщень", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 3260a33cd..aaccf1d83 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "یہاں کوئی نوٹس نہیں ہیں!", "empty_column.account_unavailable": "مشخص دستیاب نہیں ہے", "empty_column.blocks": "آپ نے ابھی کسی صارف کو مسدود نہیں کیا ہے.", @@ -258,7 +259,6 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "Add to list", "lists.account.remove": "Remove from list", "lists.delete": "Delete list", @@ -266,9 +266,9 @@ "lists.edit.submit": "Change title", "lists.new.create": "Add list", "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 3da7cf375..005ed9923 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -6,12 +6,12 @@ "account.block": "Chặn @{name}", "account.block_domain": "Ẩn mọi thứ từ {domain}", "account.blocked": "Đã chặn", - "account.browse_more_on_origin_server": "Tìm những tài khoản có liên quan", + "account.browse_more_on_origin_server": "Truy cập trang của người này", "account.cancel_follow_request": "Hủy yêu cầu theo dõi", "account.direct": "Nhắn tin @{name}", "account.disable_notifications": "Không thông báo khi @{name} đăng tút", - "account.domain_blocked": "Đã chặn người dùng", - "account.edit_profile": "Giới thiệu bản thân", + "account.domain_blocked": "Người đã chặn", + "account.edit_profile": "Chỉnh sửa trang cá nhân", "account.enable_notifications": "Thông báo khi @{name} đăng tút", "account.endorse": "Vinh danh người này", "account.follow": "Theo dõi", @@ -19,7 +19,7 @@ "account.followers.empty": "Chưa có người theo dõi nào.", "account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}", "account.following_counter": "{count, plural, one {{counter} Theo dõi} other {{counter} Theo dõi}}", - "account.follows.empty": "Người dùng này chưa theo dõi ai.", + "account.follows.empty": "Người này chưa theo dõi ai.", "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn chia sẻ từ @{name}", "account.last_status": "Online", @@ -38,7 +38,7 @@ "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi", "account.share": "Chia sẻ hồ sơ @{name}", "account.show_reblogs": "Hiện chia sẻ từ @{name}", - "account.statuses_counter": "{count, plural, other {{counter} Tút}}", + "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", "account.unendorse": "Ngưng vinh danh người này", @@ -59,17 +59,17 @@ "bundle_modal_error.close": "Đóng", "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_modal_error.retry": "Thử lại", - "column.blocks": "Người dùng đã chặn", - "column.bookmarks": "Để dành đọc lại", + "column.blocks": "Người đã chặn", + "column.bookmarks": "Đã lưu", "column.community": "Máy chủ của bạn", - "column.direct": "Tin nhắn của bạn", + "column.direct": "Tin nhắn", "column.directory": "Tìm người cùng sở thích", "column.domain_blocks": "Máy chủ đã chặn", - "column.favourites": "Lượt thích của bạn", + "column.favourites": "Lượt thích", "column.follow_requests": "Yêu cầu theo dõi", "column.home": "Bảng tin", "column.lists": "Danh sách", - "column.mutes": "Người dùng đã ẩn", + "column.mutes": "Người đã ẩn", "column.notifications": "Thông báo", "column.pins": "Tút ghim", "column.public": "Mạng liên hợp", @@ -98,7 +98,7 @@ "compose_form.poll.switch_to_single": "Chỉ cho phép chọn duy nhất một lựa chọn", "compose_form.publish": "Tút", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Nội dung nhạy cảm", + "compose_form.sensitive.hide": "{count, plural, one {Nội dung là nhạy cảm} other {Nội dung là nhạy cảm}}", "compose_form.sensitive.marked": "{count, plural, one {Nội dung đã đánh dấu là nhạy cảm} other {Nội dung đã đánh dấu là nhạy cảm}}", "compose_form.sensitive.unmarked": "{count, plural, one {Nội dung này bình thường} other {Nội dung này bình thường}}", "compose_form.spoiler.marked": "Hủy nội dung ẩn", @@ -149,6 +149,7 @@ "emoji_button.search_results": "Kết quả tìm kiếm", "emoji_button.symbols": "Biểu tượng", "emoji_button.travel": "Du lịch", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "Chưa có tút nào!", "empty_column.account_unavailable": "Tài khoản bị đình chỉ", "empty_column.blocks": "Bạn chưa chặn bất cứ ai.", @@ -164,9 +165,9 @@ "empty_column.home.public_timeline": "tút công khai", "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", "empty_column.lists": "Bạn chưa tạo danh sách nào.", - "empty_column.mutes": "Bạn chưa ẩn người dùng nào.", + "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.", "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn tin cho một ai đó.", - "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi người dùng khác", + "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi những người khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", "error.unexpected_crash.explanation_addons": "Trang này không thể hiển thị do xung khắc với add-on của trình duyệt hoặc công cụ tự động dịch ngôn ngữ.", "error.unexpected_crash.next_steps": "Hãy thử làm mới trang. Nếu vẫn không được, bạn hãy vào Mastodon bằng một ứng dụng di động hoặc trình duyệt khác.", @@ -178,7 +179,7 @@ "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "generic.saved": "Đã lưu", "getting_started.developers": "Nhà phát triển", - "getting_started.directory": "Kết bạn", + "getting_started.directory": "Cộng đồng", "getting_started.documentation": "Tài liệu", "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", @@ -220,7 +221,7 @@ "introduction.welcome.headline": "Hướng dẫn người mới", "introduction.welcome.text": "Chào mừng bạn đến mạng xã hội liên hợp! Tại đây bạn có thể đăng tải nội dung và trao đổi với bạn bè của mình trên các máy chủ khác nhau. Máy chủ {domain} là nơi lưu trữ trang cá nhân của bạn.", "keyboard_shortcuts.back": "trở lại", - "keyboard_shortcuts.blocked": "mở danh sách người dùng đã chặn", + "keyboard_shortcuts.blocked": "mở danh sách người đã chặn", "keyboard_shortcuts.boost": "chia sẻ", "keyboard_shortcuts.column": "mở các mục", "keyboard_shortcuts.compose": "mở khung soạn tút", @@ -236,8 +237,8 @@ "keyboard_shortcuts.hotkey": "Phím tắt", "keyboard_shortcuts.legend": "hiện bảng hướng dẫn này", "keyboard_shortcuts.local": "mở máy chủ của bạn", - "keyboard_shortcuts.mention": "nhắc đến người dùng", - "keyboard_shortcuts.muted": "mở danh sách người dùng đã ẩn", + "keyboard_shortcuts.mention": "nhắc đến ai đó", + "keyboard_shortcuts.muted": "mở danh sách người đã ẩn", "keyboard_shortcuts.my_profile": "mở trang cá nhân của bạn", "keyboard_shortcuts.notifications": "mở mục thông báo", "keyboard_shortcuts.open_media": "mở ảnh hoặc video", @@ -254,11 +255,10 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", - "lightbox.compress": "Thu gọn khung hình", - "lightbox.expand": "Mở rộng khung hình", + "lightbox.compress": "Thu nhỏ hình", + "lightbox.expand": "Phóng to hình", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", - "lightbox.view_context": "Xem nội dung", "lists.account.add": "Thêm vào danh sách", "lists.account.remove": "Xóa khỏi danh sách", "lists.delete": "Xóa danh sách", @@ -266,9 +266,9 @@ "lists.edit.submit": "Thay đổi tiêu đề", "lists.new.create": "Tạo danh sách mới", "lists.new.title_placeholder": "Tên danh sách mới", - "lists.replies_policy.all_replies": "Bất cứ người dùng nào đã theo dõi", - "lists.replies_policy.list_replies": "Thành viên trong danh sách", - "lists.replies_policy.no_replies": "Tắt bình luận", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Cho phép bình luận với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", @@ -278,17 +278,17 @@ "missing_indicator.label": "Không tìm thấy", "missing_indicator.sublabel": "Nội dung này không còn tồn tại", "mute_modal.duration": "Thời hạn", - "mute_modal.hide_notifications": "Ẩn thông báo từ người dùng này?", + "mute_modal.hide_notifications": "Ẩn thông báo từ người này?", "mute_modal.indefinite": "Vĩnh viễn", "navigation_bar.apps": "Apps", - "navigation_bar.blocks": "Người dùng đã chặn", + "navigation_bar.blocks": "Người đã chặn", "navigation_bar.bookmarks": "Đã lưu", "navigation_bar.community_timeline": "Cộng đồng", "navigation_bar.compose": "Viết tút mới", "navigation_bar.direct": "Tin nhắn", "navigation_bar.discover": "Khám phá", "navigation_bar.domain_blocks": "Máy chủ đã ẩn", - "navigation_bar.edit_profile": "Giới thiệu bản thân", + "navigation_bar.edit_profile": "Trang cá nhân", "navigation_bar.favourites": "Lượt thích", "navigation_bar.filters": "Bộ lọc từ ngữ", "navigation_bar.follow_requests": "Yêu cầu theo dõi", @@ -297,7 +297,7 @@ "navigation_bar.keyboard_shortcuts": "Phím tắt", "navigation_bar.lists": "Danh sách", "navigation_bar.logout": "Đăng xuất", - "navigation_bar.mutes": "Người dùng đã ẩn", + "navigation_bar.mutes": "Người đã ẩn", "navigation_bar.personal": "Cá nhân", "navigation_bar.pins": "Tút ghim", "navigation_bar.preferences": "Cài đặt", @@ -307,8 +307,8 @@ "notification.follow": "{name} theo dõi bạn", "notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.mention": "{name} nhắc đến bạn", - "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", - "notification.poll": "Một cuộc bình chọn mà bạn tham gia đã kết thúc", + "notification.own_poll": "Cuộc bình chọn bạn tạo đã kết thúc", + "notification.poll": "Cuộc bình chọn của bạn đã kết thúc", "notification.reblog": "{name} chia sẻ tút của bạn", "notification.status": "{name} vừa đăng", "notifications.clear": "Xóa hết thông báo", @@ -321,7 +321,7 @@ "notifications.column_settings.follow": "Người theo dõi mới:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi mới:", "notifications.column_settings.mention": "Lượt nhắc đến:", - "notifications.column_settings.poll": "Kết quả bình chọn:", + "notifications.column_settings.poll": "Kết quả:", "notifications.column_settings.push": "Thông báo đẩy", "notifications.column_settings.reblog": "Lượt chia sẻ mới:", "notifications.column_settings.show": "Thông báo trên thanh menu", @@ -334,44 +334,46 @@ "notifications.filter.mentions": "Lượt nhắc đến", "notifications.filter.polls": "Kết quả bình chọn", "notifications.filter.statuses": "Cập nhật từ những người bạn theo dõi", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} thông báo", "notifications.mark_as_read": "Đánh dấu tất cả thông báo là đã đọc", "notifications.permission_denied": "Trình duyệt không cho phép hiển thị thông báo trên màn hình.", "notifications.permission_denied_alert": "Không thể bật thông báo trên màn hình bởi vì trình duyệt đã cấm trước đó", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", "picture_in_picture.restore": "Hiển thị bình thường", "poll.closed": "Kết thúc", "poll.refresh": "Làm mới", - "poll.total_people": "{count, plural, one {# người bình chọn} other {# người bình chọn}}", - "poll.total_votes": "{count, plural, one {# bình chọn} other {# bình chọn}}", - "poll.vote": "Khảo sát", - "poll.voted": "Bạn đã bình chọn câu trả lời này", - "poll_button.add_poll": "Tạo cuộc bình chọn", + "poll.total_people": "{count, plural, one {# người} other {# người}}", + "poll.total_votes": "{count, plural, one {# người} other {# người}}", + "poll.vote": "Bình chọn", + "poll.voted": "Bạn đã bình chọn rồi", + "poll_button.add_poll": "Tạo bình chọn", "poll_button.remove_poll": "Hủy cuộc bình chọn", "privacy.change": "Thay đổi quyền riêng tư", "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", "privacy.direct.short": "Tin nhắn", "privacy.private.long": "Chỉ dành cho người theo dõi", - "privacy.private.short": "Chỉ người theo dõi", + "privacy.private.short": "Người theo dõi", "privacy.public.long": "Hiện trên bảng tin máy chủ", "privacy.public.short": "Công khai", - "privacy.unlisted.long": "Công khai nhưng không hiện trên bảng tin máy chủ", - "privacy.unlisted.short": "Mở", + "privacy.unlisted.long": "Không hiện trên bảng tin máy chủ", + "privacy.unlisted.short": "Riêng tư", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", "relative_time.days": "{number} ngày", "relative_time.hours": "{number}h", - "relative_time.just_now": "vừa xong", + "relative_time.just_now": "mới", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hôm nay", "reply_indicator.cancel": "Hủy bỏ", "report.forward": "Chuyển đến {target}", - "report.forward_hint": "Người dùng này ở máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?", - "report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo người dùng này:", + "report.forward_hint": "Người này thuộc máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?", + "report.hint": "Hãy cho quản trị viên biết lý do vì sao bạn báo cáo người này:", "report.placeholder": "Bổ sung thêm", "report.submit": "Gửi đi", "report.target": "Báo cáo {target}", @@ -380,12 +382,12 @@ "search_popout.tips.full_text": "Nội dung trả về bao gồm những tút mà bạn đã viết, thích, chia sẻ hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "tút", - "search_popout.tips.text": "Nội dung trả về là địa chỉ người dùng, tên hiển thị và hashtag", + "search_popout.tips.text": "Nội dung trả về là tên người dùng, tên hiển thị và hashtag", "search_popout.tips.user": "người dùng", "search_results.accounts": "Người dùng", "search_results.hashtags": "Hashtags", "search_results.statuses": "Tút", - "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật chức năng tìm kiếm tút.", + "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật tính năng tìm kiếm tút.", "search_results.total": "{count, number} {count, plural, one {kết quả} other {kết quả}}", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_status": "Mở tút này trong giao diện quản trị", @@ -409,7 +411,7 @@ "status.open": "Xem nguyên văn", "status.pin": "Ghim lên trang cá nhân", "status.pinned": "Tút đã ghim", - "status.read_more": "Đọc thêm tút", + "status.read_more": "Đọc tiếp", "status.reblog": "Chia sẻ", "status.reblog_private": "Chia sẻ với người có thể xem", "status.reblogged_by": "{name} chia sẻ", @@ -425,7 +427,7 @@ "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Mở rộng", "status.show_more_all": "Hiển thị tất cả", - "status.show_thread": "Xem thêm", + "status.show_thread": "Liên quan", "status.uncached_media_warning": "Giới hạn", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên trang cá nhân", @@ -454,7 +456,7 @@ "upload_area.title": "Kéo và thả để tải lên", "upload_button.label": "Thêm media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Tập tin tải lên vượt quá giới hạn cho phép.", - "upload_error.poll": "Cuộc bình chọn không cho phép đính kèm tập tin.", + "upload_error.poll": "Không cho phép đính kèm tập tin.", "upload_form.audio_description": "Mô tả cho người mất thính giác", "upload_form.description": "Mô tả cho người khiếm thị", "upload_form.edit": "Biên tập", diff --git a/app/javascript/mastodon/locales/whitelist_tt.json b/app/javascript/mastodon/locales/whitelist_tt.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_tt.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index e79399ea1..e2c69c116 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -4,23 +4,23 @@ "account.badges.bot": "ⴰⴱⵓⵜ", "account.badges.group": "ⵜⴰⵔⴰⴱⴱⵓⵜ", "account.block": "ⴳⴷⵍ @{name}", - "account.block_domain": "Block domain {domain}", + "account.block_domain": "ⴳⴷⵍ ⵉⴳⵔ {domain}", "account.blocked": "ⵉⵜⵜⵓⴳⴷⵍ", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "ⵙⵜⴰⵔⴰ ⵓⴳⴳⴰⵔ ⴳ ⵉⴼⵔⵙ ⴰⵏⵚⵍⵉ", "account.cancel_follow_request": "ⵙⵔ ⵜⵓⵜⵔⴰ ⵏ ⵓⴹⴼⵕ", - "account.direct": "Direct message @{name}", + "account.direct": "ⵜⵓⵣⵉⵏⵜ ⵜⵓⵙⵔⵉⴷⵜ @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domain blocked", + "account.domain_blocked": "ⵉⵜⵜⵓⴳⴷⵍ ⵉⴳⵔ", "account.edit_profile": "ⵙⵏⴼⵍ ⵉⴼⵔⵙ", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", "account.follow": "ⴹⴼⵕ", - "account.followers": "Followers", + "account.followers": "ⵉⵎⴹⴼⴰⵕⵏ", "account.followers.empty": "No one follows this user yet.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", + "account.follows_you": "ⴹⴼⵕⵏ ⴽⵯⵏ", "account.hide_reblogs": "Hide boosts from @{name}", "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", @@ -31,18 +31,18 @@ "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", - "account.never_active": "Never", + "account.never_active": "ⵓⵙⴰⵔ", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", "account.requested": "Awaiting approval", - "account.share": "Share @{name}'s profile", + "account.share": "ⴱⴹⵓ ⵉⴼⵔⵙ ⵏ @{name}", "account.show_reblogs": "Show boosts from @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Unblock @{name}", "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", + "account.unfollow": "ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", @@ -51,21 +51,21 @@ "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", - "autosuggest_hashtag.per_week": "{count} per week", + "autosuggest_hashtag.per_week": "{count} ⵙ ⵉⵎⴰⵍⴰⵙⵙ", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", + "bundle_column_error.retry": "ⴰⵍⵙ ⴰⵔⵎ", + "bundle_column_error.title": "ⴰⵣⴳⴰⵍ ⵏ ⵓⵥⵟⵟⴰ", "bundle_modal_error.close": "ⵔⴳⵍ", "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", + "bundle_modal_error.retry": "ⴰⵍⵙ ⴰⵔⵎ", + "column.blocks": "ⵉⵏⵙⵙⵎⵔⵙⵏ ⵜⵜⵓⴳⴷⵍⵏⵉⵏ", "column.bookmarks": "Bookmarks", "column.community": "Local timeline", "column.direct": "Direct messages", "column.directory": "Browse profiles", "column.domain_blocks": "Blocked domains", - "column.favourites": "Favourites", + "column.favourites": "ⵜⵓⴼⵓⵜⵉⵏ", "column.follow_requests": "Follow requests", "column.home": "ⴰⵙⵏⵓⴱⴳ", "column.lists": "ⵜⵉⵍⴳⴰⵎⵉⵏ", @@ -73,26 +73,26 @@ "column.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", "column.pins": "Pinned toot", "column.public": "Federated timeline", - "column_back_button.label": "Back", - "column_header.hide_settings": "Hide settings", + "column_back_button.label": "ⴰⵖⵓⵍ", + "column_header.hide_settings": "ⵙⵏⵜⵍ ⵜⵉⵙⵖⴰⵍ", "column_header.moveLeft_settings": "Move column to the left", "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", + "column_header.pin": "ⵖⵏⵙ", + "column_header.show_settings": "ⵙⵎⴰⵍ ⵜⵉⵙⵖⴰⵍ", + "column_header.unpin": "ⴽⴽⵙ ⴰⵖⵏⴰⵙ", "column_subheading.settings": "ⵜⵉⵙⵖⴰⵍ", - "community.column_settings.local_only": "Local only", - "community.column_settings.media_only": "Media only", + "community.column_settings.local_only": "ⵖⴰⵙ ⴰⴷⵖⴰⵔⴰⵏ", + "community.column_settings.media_only": "ⵖⴰⵙ ⵉⵙⵏⵖⵎⵉⵙⵏ", "community.column_settings.remote_only": "Remote only", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.direct_message_warning_learn_more": "ⵙⵙⵏ ⵓⴳⴳⴰⵔ", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", - "compose_form.placeholder": "What is on your mind?", + "compose_form.placeholder": "ⵎⴰⵢⴷ ⵉⵍⵍⴰⵏ ⴳ ⵉⵅⴼ ⵏⵏⴽ?", "compose_form.poll.add_option": "Add a choice", "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.option_placeholder": "ⴰⵙⵜⵜⴰⵢ {number}", "compose_form.poll.remove_option": "Remove this choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", @@ -106,29 +106,29 @@ "compose_form.spoiler_placeholder": "Write your warning here", "confirmation_modal.cancel": "ⵙⵔ", "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.block.confirm": "ⴳⴷⵍ", + "confirmations.block.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴳⴷⵍⴷ {name}?", "confirmations.delete.confirm": "ⴽⴽⵙ", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⵜⴰⵥⵕⵉⴳⵜ ⴰ?", "confirmations.delete_list.confirm": "ⴽⴽⵙ", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", + "confirmations.logout.confirm": "ⴼⴼⵖ", + "confirmations.logout.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴼⴼⵖⴷ?", + "confirmations.mute.confirm": "ⵥⵥⵉⵥⵏ", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.reply.confirm": "ⵔⴰⵔ", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", + "confirmations.unfollow.confirm": "ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ", + "confirmations.unfollow.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⴰⴹⴼⴼⵓⵕ ⵉ {name}?", + "conversation.delete": "ⴽⴽⵙ ⴰⵎⵙⴰⵡⴰⵍ", "conversation.mark_as_read": "Mark as read", "conversation.open": "View conversation", - "conversation.with": "With {names}", + "conversation.with": "ⴰⴽⴷ {names}", "directory.federated": "From known fediverse", "directory.local": "From {domain} only", "directory.new_arrivals": "New arrivals", @@ -141,14 +141,15 @@ "emoji_button.food": "Food & Drink", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "ⵓⵍⴰ ⵉⵎⵓⵊⵉ!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objects", - "emoji_button.people": "People", + "emoji_button.people": "ⵎⵉⴷⴷⵏ", "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", + "emoji_button.search": "ⵔⵣⵓ...", "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", + "emoji_button.symbols": "ⵜⵉⵎⴰⵜⴰⵔⵉⵏ", "emoji_button.travel": "Travel & Places", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", @@ -185,11 +186,11 @@ "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", "getting_started.security": "ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ", "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.all": "ⴷ {additional}", + "hashtag.column_header.tag_mode.any": "ⵏⵖ {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.select.placeholder": "ⵙⴽⵛⵎ ⴰⵀⴰⵛⵟⴰⴳ…", "hashtag.column_settings.tag_mode.all": "All of these", "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", @@ -199,15 +200,15 @@ "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.minutes": "{number, plural, one {# ⵜⵓⵙⴷⵉⴷⵜ} other {# ⵜⵓⵙⴷⵉⴷⵉⵏ}}", "introduction.federation.action": "Next", "introduction.federation.federated.headline": "Federated", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", "introduction.federation.home.headline": "ⴰⵙⵏⵓⴱⴳ", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", + "introduction.federation.local.headline": "ⴰⴷⵖⴰⵔⴰⵏ", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.interactions.action": "Finish toot-orial!", "introduction.interactions.favourite.headline": "Favourite", @@ -258,23 +259,22 @@ "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", - "lightbox.view_context": "View context", "lists.account.add": "ⵔⵏⵓ ⵖⵔ ⵜⵍⴳⴰⵎⵜ", "lists.account.remove": "ⴽⴽⵙ ⵙⴳ ⵜⵍⴳⴰⵎⵜ", "lists.delete": "ⴽⴽⵙ ⵜⴰⵍⴳⴰⵎⵜ", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.all_replies": "Any followed user", - "lists.replies_policy.list_replies": "Members of the list", - "lists.replies_policy.no_replies": "No one", + "lists.edit": "ⵙⵏⴼⵍ ⵜⴰⵍⴳⴰⵎⵜ", + "lists.edit.submit": "ⵙⵏⴼⵍ ⴰⵣⵡⵍ", + "lists.new.create": "ⵙⴽⵔ ⵜⴰⵍⴳⴰⵎⵜ", + "lists.new.title_placeholder": "ⴰⵣⵡⵍ ⵏ ⵜⵍⴳⴰⵎⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", + "lists.subheading": "ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ", + "load_pending": "{count, plural, one {# ⵓⴼⵔⴷⵉⵙ ⴰⵎⴰⵢⵏⵓ} other {# ⵉⴼⵔⴷⴰⵙ ⵉⵎⴰⵢⵏⵓⵜⵏ}}", + "loading_indicator.label": "ⴰⵣⴷⴰⵎ...", + "media_gallery.toggle_visible": "ⴼⴼⵔ {number, plural, one {ⵜⴰⵡⵍⴰⴼⵜ} other {ⵜⵉⵡⵍⴰⴼⵉⵏ}}", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", @@ -296,7 +296,7 @@ "navigation_bar.info": "About this server", "navigation_bar.keyboard_shortcuts": "Hotkeys", "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", + "navigation_bar.logout": "ⴼⴼⵖ", "navigation_bar.mutes": "Muted users", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", @@ -325,26 +325,28 @@ "notifications.column_settings.push": "Push notifications", "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.sound": "ⵖⵔ ⵉⵎⵙⵍⵉ", "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", + "notifications.filter.all": "ⴰⴽⴽⵯ", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favourites", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", - "notifications.group": "{count} notifications", + "notifications.grant_permission": "Grant permission.", + "notifications.group": "{count} ⵜⵏⵖⵎⵉⵙⵉⵏ", "notifications.mark_as_read": "Mark every notification as read", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", + "poll.closed": "ⵉⵜⵜⵓⵔⴳⵍ", "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_people": "{count, plural, one {# ⵓⴼⴳⴰⵏ} other {# ⵉⴼⴳⴰⵏⵏ}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", @@ -352,24 +354,24 @@ "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "ⵜⵓⵔⴷⵉⵜ", "privacy.private.long": "Visible for followers only", "privacy.private.short": "Followers-only", "privacy.public.long": "Visible for all, shown in public timelines", - "privacy.public.short": "Public", + "privacy.public.short": "ⵜⴰⴳⴷⵓⴷⴰⵏⵜ", "privacy.unlisted.long": "Visible for all, but not in public timelines", "privacy.unlisted.short": "Unlisted", "refresh": "Refresh", "regeneration_indicator.label": "ⴰⵣⴷⴰⵎ…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}ⴰⵙ", + "relative_time.hours": "{number}ⵙⵔⴳ", "relative_time.just_now": "ⴷⵖⵉ", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", + "relative_time.minutes": "{number}ⵙⴷ", + "relative_time.seconds": "{number}ⵙⵏ", + "relative_time.today": "ⴰⵙⵙⴰ", + "reply_indicator.cancel": "ⵙⵔ", + "report.forward": "ⵙⵙⵉⴼⴹ ⵉ {target}", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Additional comments", @@ -382,30 +384,30 @@ "search_popout.tips.status": "status", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", + "search_results.accounts": "ⵎⵉⴷⴷⵏ", + "search_results.hashtags": "ⵀⴰⵛⵟⴰⴳ", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", + "status.block": "ⴳⴷⵍ @{name}", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", "status.copy": "Copy link to status", "status.delete": "ⴽⴽⵙ", "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", + "status.direct": "ⵜⵓⵣⵉⵏⵜ ⵜⵓⵙⵔⵉⴷⵜ ⵉ @{name}", "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", - "status.load_more": "Load more", + "status.load_more": "ⵙⵙⵉⵍⵉ ⵓⴳⴳⴰⵔ", "status.media_hidden": "Media hidden", "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", + "status.more": "ⵓⴳⴳⴰⵔ", + "status.mute": "ⵥⵥⵉⵥⵏ @{name}", + "status.mute_conversation": "ⵥⵥⵉⵥⵏ ⴰⵎⵙⴰⵡⴰⵍ", "status.open": "Expand this status", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", @@ -420,11 +422,11 @@ "status.replyAll": "Reply to thread", "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", + "status.share": "ⴱⴹⵓ", + "status.show_less": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ", + "status.show_less_all": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ ⵉ ⵎⴰⵕⵕⴰ", + "status.show_more": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ", + "status.show_more_all": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ ⵉ ⵎⴰⵕⵕⴰ", "status.show_thread": "Show thread", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", @@ -433,16 +435,16 @@ "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", "tabs_bar.home": "ⴰⵙⵏⵓⴱⴳ", - "tabs_bar.local_timeline": "Local", + "tabs_bar.local_timeline": "ⴰⴷⵖⴰⵔⴰⵏ", "tabs_bar.notifications": "ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", "tabs_bar.search": "ⵔⵣⵓ", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.days": "{number, plural, one {# ⵡⴰⵙⵙ} other {# ⵡⵓⵙⵙⴰⵏ}} ⵉⵇⵇⵉⵎⵏ", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", + "timeline_hint.resources.followers": "ⵉⵎⴹⴼⴰⵕⵏ", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", @@ -479,6 +481,6 @@ "video.hide": "Hide video", "video.mute": "Mute sound", "video.pause": "Pause", - "video.play": "Play", + "video.play": "ⵖⵔ", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 956067e6f..f6af15198 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -149,6 +149,7 @@ "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", "emoji_button.travel": "旅行和地点", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你目前没有屏蔽任何用户。", @@ -258,7 +259,6 @@ "lightbox.expand": "放大查看图片", "lightbox.next": "下一个", "lightbox.previous": "上一个", - "lightbox.view_context": "查看上下文", "lists.account.add": "添加到列表", "lists.account.remove": "从列表中移除", "lists.delete": "删除列表", @@ -266,9 +266,9 @@ "lists.edit.submit": "更改标题", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", - "lists.replies_policy.all_replies": "任何关注的用户", - "lists.replies_policy.list_replies": "列表成员", - "lists.replies_policy.no_replies": "没有人", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "显示回复给:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", @@ -334,10 +334,12 @@ "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", "notifications.filter.statuses": "你关注的人的动态", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} 条通知", "notifications.mark_as_read": "将所有通知标为已读", "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", "notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。您可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 832e2a6a0..9aa3e37bb 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -4,27 +4,27 @@ "account.badges.bot": "機械人", "account.badges.group": "群組", "account.block": "封鎖 @{name}", - "account.block_domain": "隱藏來自 {domain} 的一切文章", - "account.blocked": "封鎖", - "account.browse_more_on_origin_server": "在該服務器的個人檔案頁上瀏覽更多", + "account.block_domain": "封鎖來自 {domain} 的一切文章", + "account.blocked": "已封鎖", + "account.browse_more_on_origin_server": "瀏覽原服務站上的個人資料頁", "account.cancel_follow_request": "取消關注請求", "account.direct": "私訊 @{name}", "account.disable_notifications": "如果 @{name} 發文請不要再通知我", - "account.domain_blocked": "服務站被隱藏", + "account.domain_blocked": "服務站被封鎖", "account.edit_profile": "修改個人資料", "account.enable_notifications": "如果 @{name} 發文請通知我", - "account.endorse": "在個人資料推薦對方", - "account.follow": "關注", - "account.followers": "關注的人", - "account.followers.empty": "尚沒有人關注這位使用者。", - "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", + "account.endorse": "在個人資料頁推薦對方", + "account.follow": "正在關注", + "account.followers": "關注者", + "account.followers.empty": "尚未有人關注這位使用者。", + "account.followers_counter": "有 {count, plural,one {{counter} 個} other {{counter} 個}}關注者", "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", - "account.follows.empty": "這位使用者尚未關注任何使用者。", + "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", "account.last_status": "上次活躍時間", "account.link_verified_on": "此連結的所有權已在 {date} 檢查過", - "account.locked_info": "此用戶的私隱狀態為不公開,關注請求需經過該用戶的審核。", + "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已經遷移到:", @@ -38,15 +38,15 @@ "account.requested": "等候審批", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示 @{name} 的推文", - "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", + "account.statuses_counter": "{count, plural,one {{counter} 篇}other {{counter} 篇}}文章", "account.unblock": "解除對 @{name} 的封鎖", - "account.unblock_domain": "不再隱藏 {domain}", + "account.unblock_domain": "解除對域名 {domain} 的封鎖", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", "account_note.placeholder": "按此添加備注", - "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", + "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生不可預期的錯誤。", "alert.unexpected.title": "噢!", @@ -59,12 +59,12 @@ "bundle_modal_error.close": "關閉", "bundle_modal_error.message": "加載本組件出錯。", "bundle_modal_error.retry": "重試", - "column.blocks": "封鎖用戶", + "column.blocks": "封鎖名單", "column.bookmarks": "書籤", "column.community": "本站時間軸", "column.direct": "個人訊息", "column.directory": "瀏覽個人資料", - "column.domain_blocks": "隱藏的服務站", + "column.domain_blocks": "封鎖的服務站", "column.favourites": "最愛的文章", "column.follow_requests": "關注請求", "column.home": "主頁", @@ -77,25 +77,25 @@ "column_header.hide_settings": "隱藏設定", "column_header.moveLeft_settings": "將欄左移", "column_header.moveRight_settings": "將欄右移", - "column_header.pin": "固定", + "column_header.pin": "置頂", "column_header.show_settings": "顯示設定", - "column_header.unpin": "取下", + "column_header.unpin": "取消置頂", "column_subheading.settings": "設定", "community.column_settings.local_only": "只顯示本站", - "community.column_settings.media_only": "僅媒體", + "community.column_settings.media_only": "只顯示多媒體", "community.column_settings.remote_only": "只顯示外站", - "compose_form.direct_message_warning": "這文章只有被提及的用戶才可以看到。", + "compose_form.direct_message_warning": "這文章只有被提及的使用者才可以看到。", "compose_form.direct_message_warning_learn_more": "了解更多", "compose_form.hashtag_warning": "這文章因為不是公開,所以不會被標籤搜索。只有公開的文章才會被標籤搜索。", - "compose_form.lock_disclaimer": "你的用戶狀態為「{locked}」,任何人都能立即關注你,然後看到「只有關注者能看」的文章。", - "compose_form.lock_disclaimer.lock": "公共", + "compose_form.lock_disclaimer": "你的用戶狀態沒有{locked},任何人都能立即關注你,然後看到「只有關注者能看」的文章。", + "compose_form.lock_disclaimer.lock": "鎖定", "compose_form.placeholder": "你在想甚麼?", "compose_form.poll.add_option": "新增選擇", "compose_form.poll.duration": "投票期限", "compose_form.poll.option_placeholder": "第 {number} 個選擇", "compose_form.poll.remove_option": "移除此選擇", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", - "compose_form.poll.switch_to_single": "變更投票為允許單一選項", + "compose_form.poll.switch_to_single": "變更投票為限定單一選項", "compose_form.publish": "發文", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "標記媒體為敏感內容", @@ -112,8 +112,8 @@ "confirmations.delete.message": "你確定要刪除這文章嗎?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", - "confirmations.domain_block.confirm": "隱藏整個網站", - "confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或靜音幾個特定目標就好。你從此將不會再看到該站的內容和通知。來自該站的關注者亦會被移除。", + "confirmations.domain_block.confirm": "封鎖整個網站", + "confirmations.domain_block.message": "你真的真的確定要封鎖整個 {domain} ?多數情況下,封鎖或靜音幾個特定目標就已經有效,也是比較建議的做法。若然封鎖全站,你將不會再在這裏看到該站的內容和通知。來自該站的關注者亦會被移除。", "confirmations.logout.confirm": "登出", "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", @@ -129,9 +129,9 @@ "conversation.mark_as_read": "標為已讀", "conversation.open": "檢視對話", "conversation.with": "與 {names}", - "directory.federated": "來自已知聯邦宇宙", + "directory.federated": "來自已知的聯盟網絡", "directory.local": "僅來自 {domain}", - "directory.new_arrivals": "新貨", + "directory.new_arrivals": "新內容", "directory.recently_active": "最近活躍", "embed.instructions": "要內嵌此文章,請將以下代碼貼進你的網站。", "embed.preview": "看上去會是這樣:", @@ -141,7 +141,7 @@ "emoji_button.food": "飲飲食食", "emoji_button.label": "加入表情符號", "emoji_button.nature": "自然", - "emoji_button.not_found": "沒有表情符號!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "沒找到表情符號!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物品", "emoji_button.people": "人物", "emoji_button.recent": "常用", @@ -149,6 +149,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊景物", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", "empty_column.blocks": "你還沒有封鎖任何使用者。", @@ -156,11 +157,11 @@ "empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!", "empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。", "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。", - "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。", + "empty_column.favourited_statuses": "你還沒收藏任何文章。這裡將會顯示你收藏的嘟文。", + "empty_column.favourites": "還沒有人收藏這則文章。這裡將會顯示被收藏的嘟文。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個標籤暫時未有內容。", - "empty_column.home": "你還沒有關注任何用戶。快看看{public},向其他用戶搭訕吧。", + "empty_column.home": "你還沒有關注任何使用者。快看看{public},向其他使用者搭訕吧。", "empty_column.home.public_timeline": "公共時間軸", "empty_column.list": "這個列表暫時未有內容。", "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", @@ -171,7 +172,7 @@ "error.unexpected_crash.explanation_addons": "此頁面無法被正確顯示,這可能是由於瀏覽器的附加元件或網頁自動翻譯工具造成的。", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", + "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", @@ -182,8 +183,8 @@ "getting_started.documentation": "文件", "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", - "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub ({github}) 貢獻或者回報問題。", - "getting_started.security": "帳戶安全", + "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub {github} 貢獻或者回報問題。", + "getting_started.security": "帳戶設定", "getting_started.terms": "服務條款", "hashtag.column_header.tag_mode.all": "以及{additional}", "hashtag.column_header.tag_mode.any": "或是{additional}", @@ -193,7 +194,7 @@ "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "在這欄位加入額外的標籤", "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", @@ -203,24 +204,24 @@ "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "站台聯盟", - "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。", + "introduction.federation.federated.headline": "已知服務站", + "introduction.federation.federated.text": "來自社交聯盟其他網站的公開文章,將會顯示在站點跨站時間軸上。", "introduction.federation.home.headline": "首頁", - "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", - "introduction.federation.local.headline": "本機", - "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "關注", - "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", - "introduction.interactions.reblog.headline": "轉嘟", - "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", + "introduction.federation.home.text": "你所關注使用者的文章,將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", + "introduction.federation.local.headline": "本站", + "introduction.federation.local.text": "與你共用一個服務站使用者的公開文章,將會顯示在本站時間軸中。", + "introduction.interactions.action": "完成使用教學", + "introduction.interactions.favourite.headline": "最愛", + "introduction.interactions.favourite.text": "你能用將文章加入「最愛的文章」,一方便把儲存文章稍候觀看,也同時對作者表示支持。", + "introduction.interactions.reblog.headline": "轉推", + "introduction.interactions.reblog.text": "你可以透過「轉推文章」把文章分享給你的關注者。", "introduction.interactions.reply.headline": "回覆", - "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", + "introduction.interactions.reply.text": "你可以回覆其他人或自己的文章,這麼做會把這些回覆串成一串對話。", "introduction.welcome.action": "開始旅程吧!", "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。", - "keyboard_shortcuts.back": "後退", - "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", + "introduction.welcome.text": "歡迎來到聯盟社交網絡 (fediverse)!稍後你就可以廣播訊息,同時與多個服務站的不同朋友聊天。但留意 {domain} 這個服務站非常特別——它託管了你的個人資料啊!所以請記住它。", + "keyboard_shortcuts.back": "返回", + "keyboard_shortcuts.blocked": "開啟封鎖名單", "keyboard_shortcuts.boost": "轉推", "keyboard_shortcuts.column": "把標示移動到其中一列", "keyboard_shortcuts.compose": "把標示移動到文字輸入區", @@ -228,20 +229,20 @@ "keyboard_shortcuts.direct": "開啟私訊欄", "keyboard_shortcuts.down": "在列表往下移動", "keyboard_shortcuts.enter": "打開文章", - "keyboard_shortcuts.favourite": "收藏", - "keyboard_shortcuts.favourites": "開啟收藏名單", - "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", + "keyboard_shortcuts.favourite": "收藏文章", + "keyboard_shortcuts.favourites": "開啟最愛的內容", + "keyboard_shortcuts.federated": "打開跨站時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", - "keyboard_shortcuts.home": "開啟首頁時間軸", + "keyboard_shortcuts.home": "開啟個人時間軸", "keyboard_shortcuts.hotkey": "快速鍵", "keyboard_shortcuts.legend": "顯示這個說明", - "keyboard_shortcuts.local": "開啟本機時間軸", + "keyboard_shortcuts.local": "開啟本站時間軸", "keyboard_shortcuts.mention": "提及作者", - "keyboard_shortcuts.muted": "開啟靜音使用者名單", + "keyboard_shortcuts.muted": "開啟靜音名單", "keyboard_shortcuts.my_profile": "開啟個人資料頁面", "keyboard_shortcuts.notifications": "開啟通知欄", "keyboard_shortcuts.open_media": "開啟媒體", - "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", + "keyboard_shortcuts.pinned": "開啟釘選的文章清單", "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", "keyboard_shortcuts.reply": "回覆", "keyboard_shortcuts.requests": "開啟關注請求名單", @@ -250,7 +251,7 @@ "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示或隱藏被標為敏感的文字", "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", - "keyboard_shortcuts.toot": "新的推文", + "keyboard_shortcuts.toot": "新的文章", "keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索", "keyboard_shortcuts.up": "在列表往上移動", "lightbox.close": "關閉", @@ -258,7 +259,6 @@ "lightbox.expand": "擴大檢視", "lightbox.next": "下一頁", "lightbox.previous": "上一頁", - "lightbox.view_context": "檢視內文", "lists.account.add": "新增到列表", "lists.account.remove": "從列表刪除", "lists.delete": "刪除列表", @@ -266,28 +266,28 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", - "lists.replies_policy.all_replies": "任何關注的用戶", - "lists.replies_policy.list_replies": "列表中的用戶", - "lists.replies_policy.no_replies": "沒有人", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "顯示回應文章︰", - "lists.search": "從你關注的用戶中搜索", + "lists.search": "從你關注的人搜索", "lists.subheading": "列表", "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "載入中...", - "media_gallery.toggle_visible": "打開或關上", + "media_gallery.toggle_visible": "隱藏圖片", "missing_indicator.label": "找不到內容", "missing_indicator.sublabel": "無法找到內容", "mute_modal.duration": "時間", - "mute_modal.hide_notifications": "隱藏來自這用戶的通知嗎?", + "mute_modal.hide_notifications": "需要隱藏這使用者的通知嗎?", "mute_modal.indefinite": "沒期限", - "navigation_bar.apps": "封鎖的使用者", - "navigation_bar.blocks": "被你封鎖的用戶", + "navigation_bar.apps": "手機 App", + "navigation_bar.blocks": "封鎖名單", "navigation_bar.bookmarks": "書籤", "navigation_bar.community_timeline": "本站時間軸", - "navigation_bar.compose": "撰寫新嘟文", + "navigation_bar.compose": "撰寫新文章", "navigation_bar.direct": "個人訊息", "navigation_bar.discover": "探索", - "navigation_bar.domain_blocks": "隱藏的服務站", + "navigation_bar.domain_blocks": "封鎖的服務站", "navigation_bar.edit_profile": "修改個人資料", "navigation_bar.favourites": "最愛的內容", "navigation_bar.filters": "靜音詞彙", @@ -297,24 +297,24 @@ "navigation_bar.keyboard_shortcuts": "鍵盤快速鍵", "navigation_bar.lists": "列表", "navigation_bar.logout": "登出", - "navigation_bar.mutes": "被你靜音的用戶", + "navigation_bar.mutes": "靜音名單", "navigation_bar.personal": "個人", "navigation_bar.pins": "置頂文章", "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "跨站時間軸", "navigation_bar.security": "安全", - "notification.favourite": "{name} 收藏了你的文章", + "notification.favourite": "{name} 喜歡你的文章", "notification.follow": "{name} 開始關注你", "notification.follow_request": "{name} 要求關注你", "notification.mention": "{name} 提及你", - "notification.own_poll": "您的投票已結束", - "notification.poll": "您投過的投票已經結束", + "notification.own_poll": "你的投票已結束", + "notification.poll": "你參與過的一個投票已經結束", "notification.reblog": "{name} 轉推你的文章", - "notification.status": "{name} 剛剛發了嘟文", + "notification.status": "{name} 剛發表了文章", "notifications.clear": "清空通知紀錄", "notifications.clear_confirmation": "你確定要清空通知紀錄嗎?", "notifications.column_settings.alert": "顯示桌面通知", - "notifications.column_settings.favourite": "收藏了你的文章:", + "notifications.column_settings.favourite": "你最愛的文章:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", @@ -328,32 +328,34 @@ "notifications.column_settings.sound": "播放音效", "notifications.column_settings.status": "新的文章", "notifications.filter.all": "全部", - "notifications.filter.boosts": "轉嘟", + "notifications.filter.boosts": "轉推", "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", "notifications.filter.statuses": "已關注的用戶的最新動態", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "標記所有通知為已讀", - "notifications.permission_denied": "瀏覽器的桌面通知權限設定為拒絕,因此不可以啟用桌面通知", - "notifications.permission_denied_alert": "瀏覽器的桌面通知權限設定為拒絕,因此不可以啟用桌面通知", + "notifications.permission_denied": "本站不能發送桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", + "notifications.permission_denied_alert": "無法啟用桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "啟用桌面通知", - "notifications_permission_banner.how_to_control": "啟用桌面通知可以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", - "notifications_permission_banner.title": "不放過任何通知", + "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", + "notifications_permission_banner.title": "不放過任何事情", "picture_in_picture.restore": "還原影片播放器", "poll.closed": "已關閉", "poll.refresh": "重新整理", - "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", - "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", + "poll.total_people": "{count, plural, one {# 人投票} other {# 人投票}}", + "poll.total_votes": "{count, plural, one {# 票} other {# 票}}", "poll.vote": "投票", - "poll.voted": "你已對此問題投票", + "poll.voted": "你已投票給這答案", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整私隱設定", - "privacy.direct.long": "只有提及的用戶能看到", + "privacy.direct.long": "只有提及的使用者能看到", "privacy.direct.short": "私人訊息", - "privacy.private.long": "只有關注你用戶能看到", + "privacy.private.long": "只有你的關注者能看到", "privacy.private.short": "關注者", "privacy.public.long": "在公共時間軸顯示", "privacy.public.short": "公共", @@ -362,11 +364,11 @@ "refresh": "重新整理", "regeneration_indicator.label": "載入中……", "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", - "relative_time.days": "{number}日", - "relative_time.hours": "{number}小時", + "relative_time.days": "{number}日前", + "relative_time.hours": "{number}小時前", "relative_time.just_now": "剛剛", - "relative_time.minutes": "{number}分鐘", - "relative_time.seconds": "{number}秒", + "relative_time.minutes": "{number}分鐘前", + "relative_time.seconds": "{number}秒前", "relative_time.today": "今天", "reply_indicator.cancel": "取消", "report.forward": "轉寄到 {target}", @@ -377,28 +379,28 @@ "report.target": "舉報", "search.placeholder": "搜尋", "search_popout.search_format": "高級搜索格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的用戶名稱,帳號名稱和標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的使用者名稱,顯示名稱和標籤。", "search_popout.tips.hashtag": "標籤", "search_popout.tips.status": "文章", - "search_popout.tips.text": "輸入簡單的文字,搜索符合的用戶名稱,帳號名稱和標籤", - "search_popout.tips.user": "用戶", + "search_popout.tips.text": "輸入簡單的文字,搜索符合的顯示名稱、使用者名稱和標籤", + "search_popout.tips.user": "使用者", "search_results.accounts": "使用者", "search_results.hashtags": "標籤", "search_results.statuses": "文章", - "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", + "search_results.statuses_fts_disabled": "此 Mastodon 伺服器並未啟用「搜尋文章內章」功能。", "search_results.total": "{count, number} 項結果", "status.admin_account": "開啟 @{name} 的管理介面", - "status.admin_status": "在管理介面開啟此嘟文", + "status.admin_status": "在管理介面開啟這篇文章", "status.block": "封鎖 @{name}", "status.bookmark": "書籤", "status.cancel_reblog_private": "取消轉推", "status.cannot_reblog": "這篇文章無法被轉推", - "status.copy": "將連結複製到嘟文中", + "status.copy": "將連結複製到文章中", "status.delete": "刪除", - "status.detailed_status": "對話的詳細內容", + "status.detailed_status": "詳細對話內容", "status.direct": "私訊 @{name}", - "status.embed": "鑲嵌", - "status.favourite": "收藏", + "status.embed": "嵌入", + "status.favourite": "最愛", "status.filtered": "已過濾", "status.load_more": "載入更多", "status.media_hidden": "隱藏媒體內容", @@ -413,7 +415,7 @@ "status.reblog": "轉推", "status.reblog_private": "轉推到原讀者", "status.reblogged_by": "{name} 轉推", - "status.reblogs.empty": "還沒有人轉嘟。如果有,會顯示在這裡。", + "status.reblogs.empty": "還未有人轉推。有的話會顯示在這裡。", "status.redraft": "刪除並編輯", "status.remove_bookmark": "移除書籤", "status.reply": "回應", @@ -421,38 +423,38 @@ "status.report": "舉報 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", - "status.show_less": "減少顯示", - "status.show_less_all": "減少顯示這類文章", - "status.show_more": "顯示更多", - "status.show_more_all": "顯示更多這類文章", + "status.show_less": "收起", + "status.show_less_all": "全部收起", + "status.show_more": "展開", + "status.show_more_all": "全部展開", "status.show_thread": "顯示討論串", "status.uncached_media_warning": "無法使用", - "status.unmute_conversation": "解禁對話", + "status.unmute_conversation": "對話解除靜音", "status.unpin": "解除置頂", "suggestions.dismiss": "關閉建議", - "suggestions.header": "您可能對這些東西有興趣…", + "suggestions.header": "你可能對這些感興趣…", "tabs_bar.federated_timeline": "跨站", "tabs_bar.home": "主頁", "tabs_bar.local_timeline": "本站", "tabs_bar.notifications": "通知", "tabs_bar.search": "搜尋", - "time_remaining.days": "剩餘{number, plural, one {# 天數} other {# 天數}}", - "time_remaining.hours": "剩餘{number, plural, one {# 小時} other {# 小時}}", - "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", + "time_remaining.days": "剩餘 {number, plural, one {# 天} other {# 天}}", + "time_remaining.hours": "剩餘 {number, plural, one {# 小時} other {# 小時}}", + "time_remaining.minutes": "剩餘 {number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服務器的 {resource}", + "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他伺服器的 {resource}", "timeline_hint.resources.followers": "關注者", "timeline_hint.resources.follows": "關注中", - "timeline_hint.resources.statuses": "更早的嘟文", - "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", - "trends.trending_now": "目前趨勢", + "timeline_hint.resources.statuses": "更早的文章", + "trends.counter_by_accounts": "{count, plural, one {{counter} 個人}other {{counter} 個人}}正在討論", + "trends.trending_now": "現在流行", "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "將檔案拖放至此上載", - "upload_button.label": "上載媒體檔案", + "upload_button.label": "加入圖片、影片或音訊檔", "upload_error.limit": "已達到檔案上傳限制。", "upload_error.poll": "不允許在投票上傳檔案。", "upload_form.audio_description": "簡單描述內容給聽障人士", @@ -464,7 +466,7 @@ "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", "upload_modal.choose_image": "選擇圖片", - "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗", + "upload_modal.description_placeholder": "一隻敏捷的狐狸,輕巧地跳過那隻懶洋洋的狗", "upload_modal.detect_text": "從圖片偵測文字", "upload_modal.edit_media": "編輯媒體", "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", @@ -473,9 +475,9 @@ "upload_progress.label": "上載中……", "video.close": "關閉影片", "video.download": "下載檔案", - "video.exit_fullscreen": "退出全熒幕", + "video.exit_fullscreen": "退出全螢幕", "video.expand": "展開影片", - "video.fullscreen": "全熒幕", + "video.fullscreen": "全螢幕", "video.hide": "隱藏影片", "video.mute": "靜音", "video.pause": "暫停", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a38a7c07a..46cfc4359 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -65,7 +65,7 @@ "column.direct": "私訊", "column.directory": "瀏覽個人資料", "column.domain_blocks": "隱藏的網域", - "column.favourites": "收藏", + "column.favourites": "讚美集", "column.follow_requests": "關注請求", "column.home": "主頁", "column.lists": "名單", @@ -120,7 +120,7 @@ "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注你。", "confirmations.mute.message": "確定靜音 {name} ?", "confirmations.redraft.confirm": "刪除並重新編輯", - "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。", + "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及贊美,且回覆這則的嘟文將會變成獨立的嘟文。", "confirmations.reply.confirm": "回覆", "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消關注", @@ -149,6 +149,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", + "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", "empty_column.blocks": "你還沒有封鎖任何使用者。", @@ -156,8 +157,8 @@ "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。", - "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。", + "empty_column.favourited_statuses": "你還沒讚美过任何嘟文。這裡將會顯示你讚美过的嘟文。", + "empty_column.favourites": "還沒人讚美這則嘟文。當有人點讚後,他們將於此列出。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", @@ -210,8 +211,8 @@ "introduction.federation.local.headline": "本機", "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", "introduction.interactions.action": "完成教學!", - "introduction.interactions.favourite.headline": "關注", - "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", + "introduction.interactions.favourite.headline": "讚美", + "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者讚美嘟文,讓作者知道您喜歡這則嘟文。", "introduction.interactions.reblog.headline": "轉嘟", "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", "introduction.interactions.reply.headline": "回覆", @@ -228,8 +229,8 @@ "keyboard_shortcuts.direct": "開啟私訊欄", "keyboard_shortcuts.down": "往下移動名單項目", "keyboard_shortcuts.enter": "檢視嘟文", - "keyboard_shortcuts.favourite": "收藏", - "keyboard_shortcuts.favourites": "開啟收藏名單", + "keyboard_shortcuts.favourite": "讚美", + "keyboard_shortcuts.favourites": "開啟讚美者名錄", "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", "keyboard_shortcuts.home": "開啟首頁時間軸", @@ -258,7 +259,6 @@ "lightbox.expand": "展開圖片檢視框", "lightbox.next": "下一步", "lightbox.previous": "上一步", - "lightbox.view_context": "檢視內文", "lists.account.add": "新增至名單", "lists.account.remove": "從名單中移除", "lists.delete": "刪除名單", @@ -266,9 +266,9 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增名單", "lists.new.title_placeholder": "新名單標題", - "lists.replies_policy.all_replies": "任何跟隨的使用者", - "lists.replies_policy.list_replies": "列表成員", - "lists.replies_policy.no_replies": "沒有人", + "lists.replies_policy.followed": "Any followed user", + "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.none": "No one", "lists.replies_policy.title": "顯示回覆", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", @@ -289,7 +289,7 @@ "navigation_bar.discover": "探索", "navigation_bar.domain_blocks": "隱藏的網域", "navigation_bar.edit_profile": "編輯個人資料", - "navigation_bar.favourites": "收藏", + "navigation_bar.favourites": "讚美集", "navigation_bar.filters": "靜音詞彙", "navigation_bar.follow_requests": "關注請求", "navigation_bar.follows_and_followers": "關注及關注者", @@ -303,7 +303,7 @@ "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", - "notification.favourite": "{name} 把你的嘟文加入了最愛", + "notification.favourite": "{name} 讚美了你的嘟文", "notification.follow": "{name} 關注了你", "notification.follow_request": "{name} 要求關注你", "notification.mention": "{name} 提到了你", @@ -314,7 +314,7 @@ "notifications.clear": "清除通知", "notifications.clear_confirmation": "確定要永久清除你的通知嗎?", "notifications.column_settings.alert": "桌面通知", - "notifications.column_settings.favourite": "最愛:", + "notifications.column_settings.favourite": "被讚美:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", @@ -329,15 +329,17 @@ "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", - "notifications.filter.favourites": "最愛", + "notifications.filter.favourites": "讚美集", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", "notifications.filter.statuses": "已跟隨使用者的最新動態", + "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "將所有通知都標記為已讀", "notifications.permission_denied": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用", "notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知", + "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不要錯過任何東西!", @@ -377,7 +379,7 @@ "report.target": "檢舉 {target}", "search.placeholder": "搜尋", "search_popout.search_format": "進階搜尋格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜尋由你撰寫、最愛、轉嘟或提你的嘟文,以及符合使用者名稱、帳戶名稱和標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜尋由你撰寫、贊美、轉嘟或提你的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶名稱和標籤。", "search_popout.tips.hashtag": "主題標籤", "search_popout.tips.status": "嘟文", "search_popout.tips.text": "輸入簡單的文字,搜尋符合的使用者名稱,帳戶名稱與標籤", @@ -398,7 +400,7 @@ "status.detailed_status": "對話的詳細內容", "status.direct": "發送私訊給 @{name}", "status.embed": "嵌入", - "status.favourite": "最愛", + "status.favourite": "讚美", "status.filtered": "已過濾", "status.load_more": "載入更多", "status.media_hidden": "隱藏媒體內容", diff --git a/config/locales/activerecord.sc.yml b/config/locales/activerecord.sc.yml index 646737269..cae24d30c 100644 --- a/config/locales/activerecord.sc.yml +++ b/config/locales/activerecord.sc.yml @@ -4,3 +4,14 @@ sc: attributes: poll: expires_at: Iscadèntzia + options: Seberos + errors: + models: + account: + attributes: + username: + invalid: petzi lìteras, nùmeros e tratigheddos bassos + status: + attributes: + reblog: + taken: de s'istadu esistet giai diff --git a/config/locales/activerecord.tt.yml b/config/locales/activerecord.tt.yml new file mode 100644 index 000000000..5eab4abff --- /dev/null +++ b/config/locales/activerecord.tt.yml @@ -0,0 +1 @@ +tt: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 3de687ed6..fa49081be 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -60,6 +60,7 @@ ca: one: Seguidor other: Seguidors following: Seguint + instance_actor_flash: Aquest compte és un actor virtual usat per a representar el mateix servidor i no cap usuari individual. Es fa servir per a federar i no s'hauria d'esborrar. joined: Unit des de %{date} last_active: darrer actiu link_verified_on: La propietat d'aquest enllaç s'ha verificat el %{date} @@ -131,6 +132,7 @@ ca: follows: Segueix header: Capçalera inbox_url: URL de la safata d'entrada + invite_request_text: Motiu del registre invited_by: Convidat per ip: IP joined: Unit @@ -255,6 +257,7 @@ ca: unsuspend_account: Desfés la suspensió del compte update_announcement: Actualitza l'anunci update_custom_emoji: Actualitza l'emoji personalitzat + update_domain_block: Actualitza el Bloqueig de Domini update_status: Actualitza l'estat actions: assigned_to_self_report: "%{name} han assignat l'informe %{target} a ells mateixos" @@ -295,6 +298,7 @@ ca: unsuspend_account: "%{name} ha llevat la suspensió del compte de %{target}" update_announcement: "%{name} ha actualitzat l'anunci %{target}" update_custom_emoji: "%{name} ha actualitzat l'emoji %{target}" + update_domain_block: "%{name} ha actualitzat el bloqueig de domini per %{target}" update_status: "%{name} estat actualitzat per %{target}" deleted_status: "(tut esborrat)" empty: No s’han trobat registres. @@ -437,6 +441,7 @@ ca: instances: by_domain: Domini delivery_available: El lliurament està disponible + empty: No s'han trobat dominis. known_accounts: one: "%{count} compte conegut" other: "%{count} comptes coneguts" @@ -514,6 +519,8 @@ ca: comment: none: Cap created_at: Reportat + forwarded: Reenviat + forwarded_to: Reenviat a %{domain} mark_as_resolved: Marca com a resolt mark_as_unresolved: Marcar com a sense resoldre notes: @@ -583,6 +590,9 @@ ca: min_invite_role: disabled: Ningú title: Permet les invitacions de + require_invite_text: + desc_html: Quan el registre requereix aprovació manual, fer que sigui obligatori enlloc d'opcions l escriure el text de la solicitud d'invitació "Perquè vols unirte?" + title: Requerir als nous usuaris omplir el text de la solicitud d'invitació registrations_mode: modes: approved: Es requereix l’aprovació per registrar-se @@ -751,6 +761,7 @@ ca: functional: El teu compte és plenament operatiu. pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan sigui aprovada. redirecting_to: El teu compte és inactiu perquè actualment està redirigint a %{acct}. + too_fast: Formulari enviat massa ràpid, torna a provar-ho. trouble_logging_in: Problemes per iniciar la sessió? use_security_key: Usa clau de seguretat authorize_follow: diff --git a/config/locales/co.yml b/config/locales/co.yml index 7cf6f2108..edb8ced1d 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -255,6 +255,7 @@ co: unsuspend_account: Ùn Suspende Più u Contu update_announcement: Cambià Annunziu update_custom_emoji: Cambià Emoji Persunalizata + update_domain_block: Mette à Ghjornu Blucchime di Duminiu update_status: Cambià Statutu actions: assigned_to_self_report: "%{name} s’hè assignatu u signalamentu %{target}" @@ -842,6 +843,7 @@ co: request: Dumandà u vostr’archiviu size: Pesu blocks: Bluccate + bookmarks: Segnalibri csv: CSV domain_blocks: Blucchime di duminiu lists: Liste @@ -918,6 +920,7 @@ co: success: I vostri dati sò stati impurtati è saranu trattati da quì à pocu types: blocking: Persone chì bluccate + bookmarks: Segnalibri domain_blocking: Lista di blucchimi di duminiu following: Persone chì seguitate muting: Persone chì piattate diff --git a/config/locales/de.yml b/config/locales/de.yml index 78c7c6f15..c2013ab8b 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -60,6 +60,7 @@ de: one: Folgender other: Folgende following: Folgt + instance_actor_flash: Dieses Konto ist ein virtueller Akteur, der den Server selbst repräsentiert und nicht ein einzelner Benutzer. Es wird für Föderationszwecke verwendet und sollte nicht gesperrt werden. joined: Beigetreten am %{date} last_active: zuletzt aktiv link_verified_on: Besitz des Links wurde überprüft am %{date} @@ -131,6 +132,7 @@ de: follows: Folgt header: Titelbild inbox_url: Posteingangs-URL + invite_request_text: Begründung für das beitreten invited_by: Eingeladen von ip: IP-Adresse joined: Beigetreten @@ -255,6 +257,7 @@ de: unsuspend_account: Konto nicht mehr sperren update_announcement: Ankündigung aktualisieren update_custom_emoji: Benutzerdefiniertes Emoji aktualisieren + update_domain_block: Domain Block aktualisieren update_status: Beitrag aktualisieren actions: assigned_to_self_report: "%{name} hat sich die Meldung %{target} selbst zugewiesen" @@ -295,6 +298,7 @@ de: unsuspend_account: "%{name} hat die Verbannung von %{target} aufgehoben" update_announcement: "%{name} aktualisierte Ankündigung %{target}" update_custom_emoji: "%{name} hat das %{target} Emoji geändert" + update_domain_block: "%{name} hat den Domain-Block für %{target} aktualisiert" update_status: "%{name} hat einen Beitrag von %{target} aktualisiert" deleted_status: "(gelöschter Beitrag)" empty: Keine Protokolle gefunden. @@ -437,6 +441,7 @@ de: instances: by_domain: Domain delivery_available: Zustellung funktioniert + empty: Keine Domains gefunden. known_accounts: one: "%{count} bekanntes Konto" other: "%{count} bekannte Konten" @@ -514,6 +519,8 @@ de: comment: none: Kein created_at: Gemeldet + forwarded: Weitergeleitet + forwarded_to: Weitergeleitet an %{domain} mark_as_resolved: Als gelöst markieren mark_as_unresolved: Als ungelöst markieren notes: @@ -583,6 +590,9 @@ de: min_invite_role: disabled: Niemand title: Einladungen erlauben von + require_invite_text: + desc_html: Wenn eine Registrierung manuell genehmigt werden muss, mache den "Warum möchtest du beitreten?" Text eher obligatorisch als optional + title: Neue Benutzer müssen einen Einladungstext ausfüllen registrations_mode: modes: approved: Zustimmung benötigt zur Registrierung @@ -751,6 +761,7 @@ de: functional: Dein Konto ist voll funktionsfähig. pending: Deine Bewerbung wird von unseren Mitarbeitern noch überprüft. Dies kann einige Zeit dauern. Du erhältst eine E-Mail, wenn deine Bewerbung genehmigt wurde. redirecting_to: Dein Konto ist inaktiv, da es derzeit zu %{acct} umgeleitet wird. + too_fast: Formular zu schnell gesendet, versuchen Sie es erneut. trouble_logging_in: Schwierigkeiten beim Anmelden? use_security_key: Sicherheitsschlüssel verwenden authorize_follow: diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 7b1aa3874..a60d2e88b 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -111,5 +111,5 @@ hu: not_found: nem található not_locked: nincs lezárva not_saved: - one: '1 hiba megakadályozta %{resource} mentését:' - other: "%{count} számú hiba megakadályozta %{resource} mentését:" + one: '1 hiba megakadályozta e %{resource} mentését:' + other: "%{count} hiba megakadályozta e %{resource} mentését:" diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 3916d92b1..92cda21ef 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -82,8 +82,8 @@ ko: success: 성공적으로 %{kind} 계정을 인증 했습니다. passwords: no_token: 패스워드 재설정 이메일을 거치지 않고는 여기에 올 수 없습니다. 만약 패스워드 재설정 메일에서 온 것이라면 URL이 맞는지 확인해 주세요. - send_instructions: 당신의 이메일 주소가 우리의 DB에 있아면 패스워드 복구 링크가 몇 분 이내에 메일로 발송 됩니다. 만약 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. - send_paranoid_instructions: 당신의 이메일 주소가 우리의 DB에 있아면 패스워드 복구 링크가 몇 분 이내에 메일로 발송 됩니다. 만약 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. + send_instructions: 당신의 이메일 주소가 우리의 DB에 있다면 패스워드 복구 링크가 몇 분 이내에 메일로 발송 됩니다. 만약 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. + send_paranoid_instructions: 당신의 이메일 주소가 우리의 DB에 있다면 패스워드 복구 링크가 몇 분 이내에 메일로 발송 됩니다. 만약 메일을 받지 못 하신 경우 스팸 폴더를 확인해 주세요. updated: 패스워드가 재설정 되었습니다. 로그인 되었습니다. updated_not_active: 패스워드가 성공적으로 변경 되었습니다. registrations: diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 3ab4d9f11..fadc48126 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -60,6 +60,23 @@ nl: title: Herstelcodes tweestapsverificatie veranderd unlock_instructions: subject: 'Mastodon: Instructies om opschorten account ongedaan te maken' + webauthn_credential: + added: + explanation: De volgende beveiligingssleutel is aan uw account toegevoegd + subject: 'Mastodon: Nieuwe beveiligingssleutel' + title: Een nieuwe beveiligingssleutel is toegevoegd + deleted: + explanation: De volgende beveiligingssleutel is uit jouw account verwijderd + subject: 'Mastodon: Beveiligingssleutel verwijderd' + title: Een van jouw beveiligingssleutels is verwijderd + webauthn_disabled: + explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor jouw account. Inloggen is nu alleen mogelijk met het gebruik van een door een gepaarde TOTP-app genereerde sleutel. + subject: 'Mastodon: Verificatie met beveiligingssleutels is uitgeschakeld' + title: Beveiligingssleutels uitgeschakeld + webauthn_enabled: + explanation: Verificatie met beveiligingssleutels is ingeschakeld voor jouw account. Jouw beveiligingssleutel kan nu gebruikt worden om in te loggen. + subject: 'Mastodon: Verificatie met beveiligingssleutels is ingeschakeld' + title: Beveiligingssleutels ingeschakeld omniauth_callbacks: failure: Kon je niet inloggen met jouw %{kind} account, omdat "%{reason}". success: Succesvol met jouw %{kind} account ingelogd. diff --git a/config/locales/devise.sc.yml b/config/locales/devise.sc.yml index 91bd6d92f..0256c4674 100644 --- a/config/locales/devise.sc.yml +++ b/config/locales/devise.sc.yml @@ -1 +1,115 @@ +--- sc: + devise: + confirmations: + confirmed: S'indiritzu tuo de posta eletrònica est istadu cunfirmadu. + send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica. + send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire unu messàgiu de posta eletrònica cun is istrutziones pro sa cunfirma de s'indiritzu de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. + failure: + already_authenticated: Ses giai intradu. + inactive: Su contu tuo no est ancora ativadu. + invalid: "%{authentication_keys} o crae de intrada non vàlida." + last_attempt: Tenes ancora un'àteru tentativu, in antis chi su contu tuo bèngiat blocadu. + locked: Su contu tuo est blocadu. + not_found_in_database: "%{authentication_keys} o crae de intrada non vàlida." + pending: Su contu tuo est ancora in revisione. + timeout: Sa sessione tua est iscadida. Torra·bi a intrare pro sighire. + unauthenticated: Tocat a ti autenticare o ti registrare prima de sighire. + unconfirmed: Deves cunfirmare s'indiritzu tuo de posta eletrònica prima de sighire. + mailer: + confirmation_instructions: + action: Verìfica s'indiritzu de posta eletrònica + action_with_app: Cunfirma e torra a %{app} + explanation: As creadu unu contu in %{host} cun custu indiritzu de posta eletrònica. T'ammancat unu clic pro s'ativatzione. Si non fias tue, non càrcules custu messàgiu de posta eletrònica. + explanation_when_pending: As pedidu un'invitu a %{host} cun custu indiritzu de posta eletrònica. Cunfirmadu s'indiritzu de posta eletrònica, amus a revisionare sa dimanda tua. Podes intrare pro cambiare is detàllios o cantzellare su contu tuo, ma non podes atzèdere a sa majoria de is funtziones finas a chi su contu tuo siat aprovadu. Si sa dimanda tua est refudada, is datos ant a èssere bogados, duncas no t'ant a pedire prus peruna atzione. Si non fias tue, non càrcules custu messàgiu de posta eletrònica. + extra_html: Verìfica puru is règulas de su server e is cunditziones de servìtziu nostras. + subject: 'Mastodon: Istrutziones de cunfirma pro %{instance}' + title: Verìfica s'indiritzu de posta eletrònica + email_changed: + explanation: 'Custu indiritzu de posta eletrònica pro su contu tuo est istadu mudadu a:' + extra: Si no as mudadu indiritzu de posta, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su server si ses blocadu a foras dae su contu tuo. + subject: 'Mastodon: Indiritzu de posta mudadu' + title: Indiritzu de posta eletrònica nou + password_change: + explanation: Sa crae de su contu tuo est istada mudada. + extra: Si no as mudadu sa crae tua, forsis un'àtera persone at otentu s'atzessu de su contu tuo. Muda sa crae tua a sa lestra o chistiona cun s'amministratzione de su server si ses blocadu a foras dae su contu tuo. + subject: 'Mastodon: Crae mudada' + title: Crae mudada + reconfirmation_instructions: + explanation: Cunfirma s'indiritzu nou pro mudare s'indiritzu de posta eletrònica. + extra: Si custa muda no dd'as pedida tue, non càrcules custu messàgiu de posta eletrònica. Custu indiritzu de posta eletrònica pro su contu de Mastodon no at a mudare finas a s'atzessu tuo a su ligàmene in subra. + subject: 'Mastodon: Cunfirma indiritzu de posta eletrònica pro %{instance}' + title: Verìfica s'indiritzu de posta eletrònica + reset_password_instructions: + action: Muda sa crae + explanation: As pedidu una crae noa pro su contu tuo. + extra: Si no dd'as pedida tue, non càrcules custu messàgiu de posta eletrònica. Custa crae no at a mudare finas a s'atzessu tuo a su ligàmene in subra pro sa creatzione de una noa. + subject: 'Mastodon: Istrutziones pro resetare sa crae' + title: Crae resetada + two_factor_disabled: + explanation: S'autenticatzione a duos fatores est istada disativada pro su contu tuo. Immoe podes intrare impreende isceti indiritzu de posta eletrònica e crae. + subject: 'Mastodon: Autenticatzione a duos fatores disativada' + title: 2FA disativada + two_factor_enabled: + explanation: S'autenticatzione a duos fatores est istada ativada pro su contu tuo. Pro s'atzessu at èssere rechèdidu unu còdighe de autorizatzione generadu dae s'aplicatzione TOTP. + subject: 'Mastodon: Autenticatzione a duos fatores ativada' + title: 2FA ativada + two_factor_recovery_codes_changed: + explanation: Is còdighes de recùperu betzos sunt istados disativados e àteros noos generados. + subject: 'Mastodon: Còdighes de recùperu a duos fatores re-generados' + title: còdighes de recùperu 2FA mudados + unlock_instructions: + subject: 'Mastodon: Istrutziones pro s''isblocu' + webauthn_credential: + added: + explanation: Sa crae de seguresa chi sighit est istada agiunta a su contu tuo + subject: 'Mastodon: Crae de seguresa noa' + title: Est istada agiunta una crae de seguresa noa + deleted: + explanation: Sa crae de seguresa chi sighit est istada cantzellada dae su contu tuo + subject: 'Mastodon: Crae de seguresa cantzellada' + title: Una de is craes de seguresa tuas est istada cantzellada + webauthn_disabled: + explanation: S'autenticatzione cun craes de seguresa est istada disabilitada pro su contu tuo. S'intrada como est possìbile impreende isceti su getone ingendradu dae s'aplicatzione TOTP ligada. + subject: 'Mastodon: Autenticatzione cun craes de seguresa disabilitada' + title: Craes de seguresa disabilitadas + webauthn_enabled: + explanation: S'autenticatzione cun crae de seguresa est istada abilitada pro su contu tuo. Sa crae de seguresa tua como si podet èssere impreare pro intrare. + subject: 'Mastodon: Autenticatzione cun sa crae de seguresa ativada' + title: Craes de seguresa abilitadas + omniauth_callbacks: + failure: Autenticatzione dae %{kind} fallida, ca "%{reason}". + success: Autenticadu dae su contu de %{kind}. + passwords: + no_token: No podes intrare a custa pàgina chene passare dae unu messàgiu de posta eletrònica pro resetare sa crae. Si benes dae su messàgiu de posta pro resetare sa crae, faghe in modu de impreare s'URL intreu chi t'ant donadu. + send_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire una unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. + send_paranoid_instructions: Si s'indiritzu de posta eletrònica tuo esistit in sa base de datos nostra, as a retzire una unu ligàmene de recùperu de sa crae a s'indiritzu tuo de posta eletrònica tra pagos minutos. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. + updated: Sa crae tua est istada mudada. Immoe ses intradu. + updated_not_active: Sa crae tua est istada mudada. + registrations: + destroyed: A si bìdere! Su contu tuo est istadu cantzelladu. Isperamus de ti torrare a bìdere chitzi. + signed_up: Registratzione curreta. Ti donamus sa benebènnida! + signed_up_but_inactive: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo no est ancora ativu. + signed_up_but_locked: Registratzione curreta. Mancari de aici, si no ti faghimus intrare est ca su contu tuo est blocadu. + signed_up_but_pending: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. A pustis chi incarcas in su ligàmene, amus a revisionare sa dimanda tua. Si aprovada, t'at a arribare una notìfica. + signed_up_but_unconfirmed: Unu ligàmene de cunfirma est istadu imbiadu a s'indiritzu tuo de posta eletrònica. Sighi su ligàmene pro ativare su contu tuo. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica. + update_needs_confirmation: Su contu tuo est istadu atualizadu, ma devimus verificare s'indiritzu tuo de posta eletrònica nou. Controlla sa posta eletrònica e sighi su ligàmene pro cunfirmare s'indiritzu nou de posta eletrònica. Controlla sa cartella de s'àliga si no as retzidu custu messàgiu de posta eletrònica. + updated: Su contu tuo est istadu atualizadu. + sessions: + already_signed_out: Sessione serrada. + signed_in: Atzessu curretu. + signed_out: Sessione serrada. + unlocks: + send_instructions: As a retzire unu messàgiu de posta eletrònica cun is istrutziones pro isblocare su contu tuo tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica. + send_paranoid_instructions: Si su contu tuo esistit, as a retzire unu messàgiu de posta eletrònica cun istrutziones pro ddu isblocare tra pagos minutos. Controlla sa cartella de s'arga si no as retzidu custu messàgiu de posta eletrònica. + unlocked: Su contu tuo est istadu isblocadu. Intra pro sighire. + errors: + messages: + already_confirmed: fiat giai cunfirmadu, proa a intrare + confirmation_period_expired: tocat a ddu cunfirmare intro %{period}, pedi·nde unu nou + expired: est iscadidu, pedi·nde unu nou + not_found: no agatadu + not_locked: no fiat blocadu + not_saved: + one: '1 faddina at proibidu de sarvare custu %{resource}:' + other: "%{count} faddinas ant proibidu de sarvare %{resource}:" diff --git a/config/locales/devise.tt.yml b/config/locales/devise.tt.yml new file mode 100644 index 000000000..5eab4abff --- /dev/null +++ b/config/locales/devise.tt.yml @@ -0,0 +1 @@ +tt: diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index c1914093a..b0a240bf8 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -21,7 +21,7 @@ vi: action: Xác thực địa chỉ email action_with_app: Xác nhận và quay lại %{app} explanation: Bạn đã tạo một tài khoản trên %{host} với địa chỉ email này. Chỉ cần một cú nhấp chuột nữa để kích hoạt nó. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này. - explanation_when_pending: Bạn đã đăng ký %{host} với địa chỉ email này. Chúng tôi chỉ xem xét đơn đăng ký sau khi bạn xác thực địa chỉ email. Bạn có thể đăng nhập để thay đổi chi tiết hoặc xóa tài khoản của mình, nhưng bạn không thể truy cập hầu hết các chức năng cho đến khi tài khoản của bạn được chấp thuận. Nếu bạn bị từ chối, dữ liệu của bạn sẽ bị xóa, do đó bạn sẽ không cần phải thực hiện thêm hành động nào nữa. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này. + explanation_when_pending: Bạn vừa đăng ký %{host} với địa chỉ email này. Chúng tôi chỉ xem xét đơn đăng ký sau khi bạn xác thực địa chỉ email. Bạn có thể đăng nhập để thay đổi chi tiết hoặc xóa tài khoản của mình, nhưng bạn không thể sử dụng đầy đủ tính năng cho đến khi tài khoản được xác thực. Nếu bạn bị từ chối, dữ liệu của bạn sẽ bị xóa, do đó bạn sẽ không cần phải làm gì thêm nữa. Nếu không phải do bạn đăng ký, xin vui lòng bỏ qua email này. extra_html: Xin đọc kỹ quy tắc máy chủchính sách riêng tư của chúng tôi. subject: 'Mastodon: Xác thực email cho %{instance}' title: Xác thực địa chỉ email @@ -79,7 +79,7 @@ vi: title: Đã kích hoạt khóa bảo mật omniauth_callbacks: failure: Không thể xác thực bạn từ %{kind} bởi vì "%{reason}". - success: Xác thực thành công từ tài khoản %{kind}. + success: Xác thực tài khoản %{kind} thành công. passwords: no_token: Bạn chỉ có thể truy cập trang này khi nhận được email phục hồi mật khẩu. Nếu vẫn không được, vui lòng chắc chắn rằng bạn đã dùng chính xác URL được cung cấp. send_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này. @@ -87,7 +87,7 @@ vi: updated: Mật khẩu của bạn đã được thay đổi thành công. Hiện tại bạn đã đăng nhập. updated_not_active: Mật khẩu của bạn đã được thay đổi thành công. registrations: - destroyed: Tạm biệt! Tài khoản của bạn đã hủy thành công. Hi vọng chúng tôi sẽ sớm gặp lại bạn. + destroyed: Tạm biệt! Tài khoản của bạn đã bị hủy. Hi vọng chúng tôi sẽ sớm gặp lại bạn. signed_up: Chúc mừng! Bạn đã đăng ký thành công. signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, bạn cần phải kích hoạt tài khoản mới có thể đăng nhập. signed_up_but_locked: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn bị khóa. @@ -96,9 +96,9 @@ vi: update_needs_confirmation: Bạn đã cập nhật tài khoản thành công, nhưng chúng tôi cần xác thực địa chỉ email mới của bạn. Vui lòng kiểm tra email và nhấp vào liên kết xác thực. Nếu bạn không thấy email, hãy kiểm tra trong thư rác. updated: Tài khoản của bạn đã được cập nhật thành công. sessions: - already_signed_out: Hoàn tất đăng xuất. + already_signed_out: Đã đăng xuất. signed_in: Đã đăng nhập thành công. - signed_out: Hoàn tất đăng xuất. + signed_out: Đã đăng xuất. unlocks: send_instructions: Bạn sẽ nhận được một email hướng dẫn về cách mở khóa tài khoản của bạn trong vài phút tới. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này. send_paranoid_instructions: Nếu tài khoản của bạn tồn tại, bạn sẽ nhận được email hướng dẫn cách mở khóa trong vài phút tới. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này. diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml index 073898d1e..2d9e8ddea 100644 --- a/config/locales/devise.zh-HK.yml +++ b/config/locales/devise.zh-HK.yml @@ -2,16 +2,16 @@ zh-HK: devise: confirmations: - confirmed: 你的電郵地址成功確認。 - send_instructions: 你將會在幾分鐘內收到確認指示電郵,上面有確認你電郵地址的指示。 - send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將會在幾分鐘內收到電郵,確認你電郵地址的指示。 + confirmed: 已確認你的電郵地址。 + send_instructions: 你將會在幾分鐘內收到確認指示電郵,上面有確認你電郵地址的指示。如果它沒有出現在你的收件箱,請檢查一下你的垃圾郵件箱。 + send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將會在幾分鐘內收到電郵,確認你電郵地址的指示。如果它沒有出現在你的收件箱,請檢查一下你的垃圾郵件箱。 failure: already_authenticated: 你之前已經登入了。 - inactive: 您的帳號尚未啟用。 - invalid: 不正確的 %{authentication_keys} 或密碼。 + inactive: 你的帳號尚未被啟用。 + invalid: 不正確的%{authentication_keys}或密碼。 last_attempt: 若你再一次嘗試失敗,我們將鎖定你的帳號,以策安全。 locked: 你的帳號已被鎖定。 - not_found_in_database: 不正確的 %{authentication_keys} 或密碼。 + not_found_in_database: 不正確的%{authentication_keys}或密碼。 pending: 你的帳號仍在審核中 timeout: 你的登入階段已經過期,請重新登入以繼續使用。 unauthenticated: 你必須先登入或登記,以繼續使用。 @@ -20,46 +20,46 @@ zh-HK: confirmation_instructions: action: 驗證電子郵件地址 action_with_app: 確認並回到%{app} - explanation: 你在 %{host} 上使用這個電子郵件地址建立了一個帳戶。只需點擊下面的連結,即可啟用帳戶。如果你並沒有建立過帳戶,請忽略此郵件。 - explanation_when_pending: 您使用此電郵地址申請了%{host} 帳戶。確認電郵地址後,我們將審核您的申請。您可以登錄更改詳細信息或刪除帳戶,但在帳戶獲得批准之前,您無法訪問大部份功能。如果您的申請被拒絕,您的數據會被刪除,因此您無需採取進一步的措施。如果申請人不是您,請忽略此電郵。 - extra_html: 請記得閱讀本服務站的相關規定使用條款。 + explanation: 你已成功用這個電郵在 %{host} 上建立了帳號。只需點擊下面的連結,即可啟用帳戶。如果你並沒有建立過帳戶,請忽略此郵件。 + explanation_when_pending: 你使用此電郵地址申請了%{host} 帳戶。確認電郵地址後,我們將審核你的申請。你可在登入後更改詳細信息,或刪除帳戶,但在帳戶獲得批准之前,你將無法使用大部份功能。如果你的申請被拒絕,你的資料會被直接刪除,而無需你採取任何動作。如果申請人不是你,請忽略此電郵。 + extra_html: 請閱讀站規我們的使用條款。 subject: 'Mastodon: 確認電郵地址 %{instance}' title: 驗證電子郵件地址 email_changed: - explanation: 你的帳戶的電子郵件地址即將變更為: - extra: 如果你沒有請求更改你的電子郵件地址,則他人很有可能已經入侵你的帳戶。請立即更改你的密碼;如果你已經無法訪問你的帳戶,請聯繫服務站的管理員請求協助。 - subject: Mastodon:電子郵件地址已被更改 - title: 新電子郵件地址 + explanation: 你的帳號的電郵地址即將變更為: + extra: 如果你沒有更改你的電郵地址,那很有可能已經有其他人入侵你的帳號。請立即更改你的密碼;如果你已經無法訪問你的帳戶,請聯繫服務站的管理員請求協助。 + subject: Mastodon:電郵地址已被更改 + title: 新電郵地址 password_change: - explanation: 你的帳戶的密碼已被更改。 - extra: 如果你沒有請求更改你的密碼,則他人很有可能已經入侵你的帳戶。請立即更改你的密碼;如果你已經無法訪問你的帳戶,請聯繫服務站的管理員請求協助。 - subject: 'Mastodon: 更改密碼' - title: 密碼已被重設 + explanation: 你的帳號的密碼已被更改。 + extra: 如果你沒有更改你的密碼,那很有可能已經有其他人入侵你的帳號。請立即更改你的密碼;如果你已經無法訪問你的帳戶,請聯繫服務站的管理員請求協助。 + subject: 'Mastodon: 密碼已被更改' + title: 密碼已被更改 reconfirmation_instructions: - explanation: 點擊下面的連結來確認你的新電子郵件地址。 + explanation: 點擊下面的連結來確認你的新電郵地址。 extra: 如果你沒有請求本次變更,請忽略此郵件。 Mastodon 帳戶的電子郵件地址只有在你點擊上面的連結後才會更改。 - subject: Mastodon:確認 %{instance} 電子郵件地址 - title: 驗證電子郵件地址 + subject: Mastodon:確認 %{instance} 電郵地址 + title: 驗證電郵地址 reset_password_instructions: action: 更改密碼 - explanation: 點擊下面的連結來更改帳戶的密碼。 - extra: 如果你沒有請求本次變更,請忽略此郵件。你的密碼只有在你點擊上面的連結並輸入新密碼後才會更改。 + explanation: 點擊下面的連結來更改帳號的密碼。 + extra: 如果你沒有請求修改帳號,請忽略此郵件。在你點擊進上面連結並設定新密碼前,帳號密碼會維持不變。 subject: 'Mastodon: 重設密碼' title: 重設密碼 two_factor_disabled: - explanation: 帳號的雙重認證已禁用。現在僅使用郵箱和密碼即可登錄。 - subject: 長毛象:已關閉雙重認證 + explanation: 帳號的雙重認證已被停用。現在只需使用電郵地址和密碼,即可登入。 + subject: Mastodon:已關閉雙重認證 title: 已關閉雙重認證 two_factor_enabled: - explanation: 賬號的雙重認證已啟用。登錄時將需要用已配對的 TOTP 應用生成驗證碼。 - subject: 長毛象:已啟用雙重認證 + explanation: 賬號的雙重認證已被啟用。登錄時,將需要已配對 TOTP 應用程式生成的驗證碼。 + subject: Mastodon:已啟用雙重認證 title: 已啟用雙重認證 two_factor_recovery_codes_changed: explanation: 之前的恢復碼失效了,新的已生成。 - subject: 長毛象:已產生新的雙重認證恢復碼 + subject: Mastodon:已產生新的雙重認證恢復碼 title: 雙重認證恢復碼已更改 unlock_instructions: - subject: 'Mastodon: 解除用戶鎖定' + subject: 'Mastodon: 解除帳號鎖定' webauthn_credential: added: explanation: 以下的安全鑰匙已經加進你的帳號 @@ -72,37 +72,37 @@ zh-HK: webauthn_disabled: explanation: 你的帳號的安全鑰匙身份驗證已經停用。你只可以用過去已經配對好的基於時間一次性密碼程式生成的密碼來登錄。 subject: 'Mastodon: 安全鑰匙身份驗證已經停用' - title: 已啟用安全鑰匙 + title: 已停用安全鑰匙 webauthn_enabled: explanation: 安全鑰匙身份驗證已啟用。你的安全鑰匙現在可以用來登錄。 subject: 'Mastodon: 安全鑰匙身份驗證已啟用' title: 已啟用安全鑰匙 omniauth_callbacks: - failure: 無法以 %{kind} 登入你的用戶,原因是︰「%{reason}」。 + failure: 無法以 %{kind} 登入你的帳號,原因是︰「%{reason}」。 success: 成功以 %{kind} 登入你的用戶。 passwords: no_token: 你必須使用重設密碼電郵內的網址進入本頁。如果你確是使用電郵內的網址,請確認你用了完整的網址。 - send_instructions: 你將在幾分鐘內收到重設密碼的電郵指示。 - send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將會在幾分鐘內收到重設密碼的電郵指示。 + send_instructions: 如果你的電郵存在於我們的資料庫中,你將在幾分鐘內收到重設密碼的電郵指示。如果你未能在收件箱找到該電郵,請檢查垃圾郵件箱。 + send_paranoid_instructions: 如果你的電郵存在於我們的資料庫中,你將在幾分鐘內收到重設密碼的電郵指示。如果你未能在收件箱找到該電郵,請檢查垃圾郵件箱。 updated: 你的密碼已經更新,你現在正登入本站。 updated_not_active: 你的密碼已經更新。 registrations: - destroyed: 再見了!你的用戶已被取消,希望我們相有相見的機會吧。 - signed_up: 歡迎你!你的登記已經成功。 - signed_up_but_inactive: 你的登記已經成功,可是由於你的用戶還被被啟用,暫時還不能讓你登入。 - signed_up_but_locked: 你的登記已經成功,可是由於你的用戶已被鎖定,我們無法讓你登入。 - signed_up_but_pending: 確認連結已發送到您的電郵地址。點擊連結後我們會審核您的申請,一旦通過您將會收到通知。 - signed_up_but_unconfirmed: 一條確認連結已經電郵到你的郵址。請使用讓連結啟用你的用戶。 - update_needs_confirmation: 你的用戶已經更新,但我們需要確認你的電郵地址。請打開你的郵箱,使用確認電郵的連結來確認的地郵址。 - updated: 你的用戶已經成功更新。 + destroyed: 再見!你的帳號已被取消,希望日後能再見到你。 + signed_up: 歡迎你!你已經成功登記。 + signed_up_but_inactive: 你的登記已經成功,可是由於你的帳號還未被啟用,暫時還不能讓你登入。 + signed_up_but_locked: 你的登記已經成功,可是由於你的帳號已被鎖定,我們無法讓你登入。 + signed_up_but_pending: 確認連結已發送到你的電郵地址。在你點擊連結後,我們會審核你的申請。一旦通過審核,你將會收到進一步通知。 + signed_up_but_unconfirmed: 一條確認連結已經電郵到你的郵址。請使用讓連結啟用你的帳號。 + update_needs_confirmation: 你的帳號已經更新,但我們需要確認你的電郵地址。請打開你的郵箱,使用確認電郵的連結來確認的地郵址。如果未能在收件箱找相關電郵指示,請檢查垃圾郵件箱。 + updated: 你的帳號已經成功更新。 sessions: already_signed_out: 成功登出。 signed_in: 成功登入。 signed_out: 成功登出。 unlocks: - send_instructions: 你將在幾分鐘內收到解除用戶鎖定的電郵指示。 - send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將在幾分鐘內收到解除用戶鎖定的電郵指示。 - unlocked: 你的用戶已經解鎖,請登入以繼續。 + send_instructions: 你將在幾分鐘內收到解除用戶鎖定的電郵指示。如果未能在收件箱找到電郵指示,請檢查垃圾郵件箱。 + send_paranoid_instructions: 如果你的電郵地址已經存在於我們的資料庫,你將在幾分鐘內收到解除用戶鎖定的電郵指示。如果未能在收件箱找到電郵指示,請檢查垃圾郵件箱。 + unlocked: 你的帳號已經解鎖,請登入以繼續。 errors: messages: already_confirmed: 先前已經確認,請嘗試登入 diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index ef0da1a9c..6f652f421 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -60,6 +60,23 @@ zh-TW: title: 2FA 復原碼已變更 unlock_instructions: subject: Mastodon:解鎖指引 + webauthn_credential: + added: + explanation: 下面的安全密鑰已經新增至您的帳戶 + subject: 'Mastodon: 新安全密鑰' + title: 已新增新安全密鑰 + deleted: + explanation: 下面的安全密鑰已經從您的帳戶中移除 + subject: 'Mastodon: 安全密鑰已移除' + title: 您的一支安全密鑰已經被移除 + webauthn_disabled: + explanation: 您的帳戶並沒有啟用安全密鑰認證方式。只能以 TOTP app 產生地成對 token 登入。 + subject: 'Mastodon: 安全密鑰認證方式已關閉' + title: 已關閉安全密鑰 + webauthn_enabled: + explanation: 安全密鑰認證已在您的帳戶中啟用。您可以使用安全密鑰登入了。 + subject: 'Mastodon: 以啟用安全密鑰認證' + title: 已開啟安全密鑰 omniauth_callbacks: failure: 無法透過 %{kind} 認證是否為您,因為「%{reason}」。 success: 成功透過 %{kind} 帳戶登入。 diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 2fbf0ffd7..61e6cb6a1 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -1 +1,151 @@ ---- {} +--- +es: + activerecord: + attributes: + doorkeeper/application: + name: Nombre de aplicación + redirect_uri: URI para redirección + scopes: Ámbitos + website: Sitio web + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: no puede contener un fragmento. + invalid_uri: debe ser un URI válido. + relative_uri: debe ser una URI absoluta. + secured_uri: debe ser un URI HTTPS/SSL. + doorkeeper: + applications: + buttons: + authorize: Autorizar + cancel: Cancelar + destroy: Destruir + edit: Editar + submit: Enviar + confirmations: + destroy: "¿Está seguro?" + edit: + title: Editar aplicación + form: + error: "¡Uuups! Compruebe su formulario" + help: + native_redirect_uri: Utilice %{native_redirect_uri} para pruebas locales + redirect_uri: Utilice una línea por URI + scopes: Separe los ámbitos con espacios. Déjelo en blanco para utilizar los ámbitos por defecto. + index: + application: Aplicación + callback_url: URL de callback + delete: Eliminar + empty: No tienes aplicaciones. + name: Nombre + new: Nueva aplicación + scopes: Ámbitos + show: Mostrar + title: Sus aplicaciones + new: + title: Nueva aplicación + show: + actions: Acciones + application_id: Id de la aplicación + callback_urls: URLs de callback + scopes: Ámbitos + secret: Secreto + title: 'Aplicación: %{name}' + authorizations: + buttons: + authorize: Autorizar + deny: Desautorizar + error: + title: Ha ocurrido un error + new: + able_to: Será capaz de + prompt: La aplicación %{client_name} solicita tener acceso a su cuenta + title: Se requiere autorización + show: + title: Copia este código de autorización y pégalo en la aplicación. + authorized_applications: + buttons: + revoke: Revocar + confirmations: + revoke: "¿Está seguro?" + index: + application: Aplicación + created_at: Creado el + date_format: "%A-%m-%d %H:%M:%S" + scopes: Ámbitos + title: Sus aplicaciones autorizadas + errors: + messages: + access_denied: El propietario del recurso o servidor de autorización denegó la petición. + credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar. + invalid_client: La autentificación del cliente falló debido o a que es un cliente desconocido o no está incluída la autentificación del cliente o el método de autentificación no está confirmado. + invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente. + invalid_redirect_uri: La URI de redirección incluida no es válida. + invalid_request: En la petición falta un parámetro necesario o incluye un valor de parámetro no soportado o tiene otro tipo de formato incorrecto. + invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o el propietario del recurso no puede ser encontrado + invalid_scope: El ámbito pedido es inválido, desconocido o erróneo. + invalid_token: + expired: El autentificador de acceso expiró + revoked: El autentificador de acceso fue revocado + unknown: El autentificador de acceso es inválido + resource_owner_authenticator_not_configured: El propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_authenticator está sin configurar. + server_error: El servidor de la autorización entontró una condición inesperada que le impidió cumplir con la solicitud. + temporarily_unavailable: El servidor de la autorización es actualmente incapaz de manejar la petición debido a una sobrecarga temporal o un trabajo de mantenimiento del servidor. + unauthorized_client: El cliente no está autorizado a realizar esta petición utilizando este método. + unsupported_grant_type: El tipo de concesión de autorización no está soportado por el servidor de autorización. + unsupported_response_type: El servidor de autorización no soporta este tipo de respuesta. + flash: + applications: + create: + notice: Aplicación creada. + destroy: + notice: Aplicación eliminada. + update: + notice: Aplicación actualizada. + authorized_applications: + destroy: + notice: Aplicación revocada. + layouts: + admin: + nav: + applications: Aplicaciones + oauth2_provider: Proveedor OAuth2 + application: + title: OAuth autorización requerida + scopes: + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:reports: leer información sensible de todos los informes y cuentas reportadas + admin:write: modificar todos los datos en el servidor + admin:write:accounts: realizar acciones de moderación en cuentas + admin:write:reports: realizar acciones de moderación en informes + follow: seguir, bloquear, desbloquear y dejar de seguir cuentas + push: recibir tus notificaciones push + read: leer los datos de tu cuenta + read:accounts: ver información de cuentas + read:blocks: ver a quién has bloqueado + read:bookmarks: ver tus marcadores + read:favourites: ver tus favoritos + read:filters: ver tus filtros + read:follows: ver a quién sigues + read:lists: ver tus listas + read:mutes: ver a quién has silenciado + read:notifications: ver tus notificaciones + read:reports: ver tus informes + read:search: buscar en su nombre + read:statuses: ver todos los estados + write: publicar en tu nombre + write:accounts: modifica tu perfil + write:blocks: bloquear cuentas y dominios + write:bookmarks: guardar estados como marcadores + write:favourites: toots favoritos + write:filters: crear filtros + write:follows: seguir usuarios + write:lists: crear listas + write:media: subir archivos multimedia + write:mutes: silenciar usuarios y conversaciones + write:notifications: limpia tus notificaciones + write:reports: reportar a otras personas + write:statuses: publicar estados diff --git a/config/locales/doorkeeper.sc.yml b/config/locales/doorkeeper.sc.yml index 91bd6d92f..2a6aeb2c1 100644 --- a/config/locales/doorkeeper.sc.yml +++ b/config/locales/doorkeeper.sc.yml @@ -1 +1,151 @@ +--- sc: + activerecord: + attributes: + doorkeeper/application: + name: Nòmine de s'aplicatzione + redirect_uri: URL de re-indiritzamentu + scopes: Àmbitos + website: Situ web de s'aplicatzione + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: non podet cuntènnere un'ascra. + invalid_uri: depet èssere un'URI vàlidu. + relative_uri: devet èssere un'URI assolutu. + secured_uri: depet èssere un'URI HTTPS/SSL. + doorkeeper: + applications: + buttons: + authorize: Autoriza + cancel: Annulla + destroy: Distrue + edit: Modìfica + submit: Imbia + confirmations: + destroy: Seguru? + edit: + title: Modìfica s'aplicatzione + form: + error: Controlla si su formulàriu tuo tenet faddinas + help: + native_redirect_uri: Imprea %{native_redirect_uri} pro is tests locales + redirect_uri: Imprea una lìnia pro ogni URI + scopes: Iscroba is àmbitos cun ispàtzios. Lassa bòidu pro impreare is predefinidos. + index: + application: Aplicatzione + callback_url: URL de torrada + delete: Cantzella + empty: No tenes peruna aplicatzione. + name: Nòmine + new: Aplicatzione noa + scopes: Àmbitos + show: Ammustra + title: Is aplicatziones tuas + new: + title: Aplicatzione noa + show: + actions: Atziones + application_id: ID de s'aplicatzione + callback_urls: URLs de torrada + scopes: Àmbitos + secret: Segretu de cliente + title: 'Aplicatzione: %{name}' + authorizations: + buttons: + authorize: Autoriza + deny: Refuda + error: + title: Faddina + new: + able_to: At a pòdere + prompt: S'aplicatzione %{client_name} est preguntende atzessu a su contu tuo + title: Autorizatzione rechesta + show: + title: Còpia custu còdighe de autorizatzione e incolla·ddu a s'aplicatzione. + authorized_applications: + buttons: + revoke: Rèvoca + confirmations: + revoke: Seguru? + index: + application: Aplicatzione + created_at: Autorizada + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Àmbitos + title: Is aplicatziones autorizadas tuas + errors: + messages: + access_denied: Sa propiedade sa resursa o su serbidore de autorizatziones at refudadu sa rechesta. + credential_flow_not_configured: Su flussu de is credentziales de sa crae de intrada de su mere de sa risursa est fallidu pro neghe de su fatu chi Doorkeeper.configure.resource_owner_from_credentials no est cunfiguradu. + invalid_client: S'autenticatzione de su cliente est fallida ca su cliente est disconnotu, s'atzessu a su cliente no est istadu incluidu, o sa manera de autenticatzione no est suportada. + invalid_grant: Su permissu de autorizatzione est invàlidu, iscadidu, revocadu, non currispondet a s'URI de re-indiritzamentu impreadu in sa rechesta de autorizatzione, o est istadu frunidu a un'àteru cliente. + invalid_redirect_uri: S'URI de re-indiritzamentu no est vàlidu. + invalid_request: In sa rechesta mancat unu paràmetru netzessàriu, ddoe est unu valore de unu paràmetru non suportadu o est fata male in carchi àtera manera. + invalid_resource_owner: Is credentziales de su mere de sa risursa frunidas non sunt vàlidas, o su mere de sa risursa non podet èssere agatadu + invalid_scope: S'àmbitu pedidu est invàlidu, disconnotu, o formuladu male. + invalid_token: + expired: Su getone de atzessu est iscadidu + revoked: Su getone de atzessu est istadu revocadu + unknown: Su getone de atzessu no est vàlidu + resource_owner_authenticator_not_configured: Su mere de sa risursa no est istadu agatadu pro neghe de su fatu chi Doorkeeper.configure.resource_owner_authenticator no est configuradu. + server_error: Su serbidore de autorizatzione at agatadu una cunditzione no isetada chi dd'at impedidu de esecutare sa rechesta tua. + temporarily_unavailable: Su serbidore de autorizatzione no est, in custu momentu, in gradu de gestire sa rechesta pro neghe de unu subracàricu temporàneu o de una manutentzione. + unauthorized_client: Su cliente no est autorizadu a esecutare custa rechesta in custa manera. + unsupported_grant_type: Sa casta de modalidade de autorizatzione no est suportada dae su serbidore de atzessu. + unsupported_response_type: Su serbidore de autorizatzione non suportat custa casta de risposta. + flash: + applications: + create: + notice: Aplicatzione creada. + destroy: + notice: Aplicatzione cantzellada. + update: + notice: Aplicatzione atualizada. + authorized_applications: + destroy: + notice: Aplicatzione revocada. + layouts: + admin: + nav: + applications: Aplicatziones + oauth2_provider: Frunidore OAuth2 + application: + title: Autorizatzione OAuth netzessària + scopes: + admin:read: lèghere totu is datos de su serbidore + admin:read:accounts: lèghere informatziones sensìbiles de totu is contos + admin:read:reports: lèghere informatziones sensìbiles de totu is sinnalatziones e is contos sinnalados + admin:write: modificare totu is datos in su serbidore + admin:write:accounts: fàghere atziones de moderatzione in is contos + admin:write:reports: fàghere atziones de moderatzione in is sinnalatziones + follow: modificare is relatziones intre is contos + push: retzire is notìficas push tuas + read: lèghere totu is datos de su contu tuo + read:accounts: bìdere is informatziones in su contu + read:blocks: bìdere is blocos tuos + read:bookmarks: càstia is sinnalibros tuos + read:favourites: bìdere is preferidos tuos + read:filters: bìdere is filtros tuos + read:follows: bìdere is sighiduras tuas + read:lists: bìdere is listas tuas + read:mutes: bìdere is utentes chi as postu a sa muda + read:notifications: bìdere is notìficas tuas + read:reports: bìdere is sinnalatziones tuas + read:search: chircare a nùmene tuo + read:statuses: bìdere totu is istados + write: modificare totu is datos de su contu tuo + write:accounts: modificare su profilu tuo + write:blocks: blocare contos e domìnios + write:bookmarks: agiunghe is istados a is sinnalibros + write:favourites: pònnere istados in is preferidos + write:filters: creare filtros + write:follows: sighire persones + write:lists: creare listas + write:media: càrriga documentos multimediales + write:mutes: impostare persones e arresonadas a sa muda + write:notifications: isboidare is notìficas tuas + write:reports: sinnalare àteras persones + write:statuses: publicare istados diff --git a/config/locales/doorkeeper.tt.yml b/config/locales/doorkeeper.tt.yml new file mode 100644 index 000000000..5eab4abff --- /dev/null +++ b/config/locales/doorkeeper.tt.yml @@ -0,0 +1 @@ +tt: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index caeba3b71..a51891fd0 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -67,7 +67,7 @@ vi: title: Sao chép mã này và dán nó vào ứng dụng. authorized_applications: buttons: - revoke: Thu hồi + revoke: Gỡ confirmations: revoke: Bạn có chắc không? index: @@ -81,14 +81,14 @@ vi: access_denied: Chủ sở hữu tài nguyên hoặc máy chủ đã từ chối yêu cầu. credential_flow_not_configured: Resource Owner Password Credentials không thành công do Doorkeeper.configure.resource_owner_from_credentials không được định cấu hình. invalid_client: Xác thực ứng dụng khách không thành công do máy khách mơ hồ, không bao gồm xác thực ứng dụng khách hoặc phương thức xác thực không được hỗ trợ. - invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị thu hồi hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác. + invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị gỡ hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác. invalid_redirect_uri: URL chuyển hướng không hợp lệ. invalid_request: Yêu cầu thiếu tham số bắt buộc, bao gồm giá trị tham số không được hỗ trợ hoặc không đúng định dạng. invalid_resource_owner: Thông tin xác thực chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên invalid_scope: Quyền yêu cầu không hợp lệ, không có thật hoặc sai định dạng. invalid_token: expired: Mã thông báo truy cập đã hết hạn - revoked: Mã thông báo truy cập đã bị thu hồi + revoked: Mã token đăng nhập đã bị hủy unknown: Mã thông báo truy cập không hợp lệ resource_owner_authenticator_not_configured: Chủ sở hữu tài nguyên tìm thấy thất bại do Doorkeeper.configure.resource_owner_authenticator không được định cấu hình. server_error: Có một điều kiện không thể chấp nhận khiến máy chủ không thực hiện yêu cầu. @@ -106,7 +106,7 @@ vi: notice: Ứng dụng cập nhật. authorized_applications: destroy: - notice: Ứng dụng bị thu hồi. + notice: Ứng dụng bị gỡ. layouts: admin: nav: diff --git a/config/locales/doorkeeper.zgh.yml b/config/locales/doorkeeper.zgh.yml index 5ec7e04b4..d34b8109c 100644 --- a/config/locales/doorkeeper.zgh.yml +++ b/config/locales/doorkeeper.zgh.yml @@ -4,6 +4,7 @@ zgh: attributes: doorkeeper/application: name: ⵉⵙⵏ ⵏ ⵜⵙⵏⵙⵉ + redirect_uri: ⵜⴰⵏⵙⴰ ⵏ ⵓⵙⵉⴼⴹ website: ⴰⵙⵉⵜ ⵡⵉⴱ ⵏ ⵜⵙⵏⵙⵉ doorkeeper: applications: @@ -16,12 +17,16 @@ zgh: destroy: ⵉⵙ ⵏⵉⵜ? edit: title: ⵙⵏⴼⵍ ⵜⵉⵙⵏⵙⵉ + help: + native_redirect_uri: ⵙⵎⵔⵙ %{native_redirect_uri} ⵉ ⵉⵔⵉⵎⵏ ⵉⴷⵖⴰⵔⴰⵜⵏ + redirect_uri: ⵙⵎⵔⵙ ⵢⴰⵏ ⵓⵣⴳⵉⴳ ⵉ ⵢⴰⵜ ⵜⵖⵓⵏⵉ index: application: ⵜⵉⵙⵏⵙⵉ delete: ⴽⴽⵙ empty: ⵓⵔ ⵖⵓⵔⴽ ⴽⵔⴰ ⵏ ⵜⵙⵏⵙⵉⵡⵉⵏ. name: ⵉⵙⵎ new: ⵜⵉⵙⵏⵙⵉ ⵜⴰⵎⴰⵢⵏⵓⵜ + show: ⵙⵎⴰⵍ title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ new: title: ⵜⵉⵙⵏⵙⵉ ⵜⴰⵎⴰⵢⵏⵓⵜ @@ -32,6 +37,8 @@ zgh: buttons: authorize: ⵙⵙⵓⵔⴳ deny: ⴰⴳⵢ + new: + prompt: ⵜⵙⵙⵓⵜⵓⵔ ⵜⵙⵏⵙⵉ %{client_name} ⴰⵙⴰⴷⴼ ⵖⵔ ⵓⵎⵉⴹⴰⵏ ⵏⵏⴽ authorized_applications: confirmations: revoke: ⵉⵙ ⵏⵉⵜ? @@ -40,6 +47,34 @@ zgh: created_at: ⵜⴻⵜⵜⵓⵙⵓⵔⴳ date_format: "%d-%m-%Y %H:%M:%S" title: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ ⵏⵏⴽ ⵉⵜⵜⵓⵙⵓⵔⴷⵏ + flash: + applications: + create: + notice: ⵜⴻⵜⵜⵓⵙⵏⴼⵍⵓⵍ ⵜⵙⵏⵙⵉ. + destroy: + notice: ⵜⴻⵜⵜⵡⴰⴽⴽⵙ ⵜⵙⵏⵙⵉ. + update: + notice: ⵜⴻⵜⵜⵓⵙⴷⵖⵉ ⵜⵙⵏⵙⵉ. + layouts: + admin: + nav: + applications: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ scopes: + admin:read: ⵖⵔ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ + admin:write: ⵙⵏⴼⵍ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ + read: ⵖⵔ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⵏ ⵓⵎⵉⴹⴰⵏ + read:filters: ⵥⵕ ⵉⵙⵜⴰⵢⵏ ⵏⵏⴽ + read:follows: ⵥⵕ ⵉⵎⴹⴼⴰⵔⵏ ⵏⵏⴽ + read:lists: ⵥⵕ ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ read:notifications: ⵥⵕ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ + read:search: ⵔⵣⵓ ⵙ ⵢⵉⵙⵎ ⵏⵏⴽ + read:statuses: ⵥⵕ ⴰⴷⴷⴰⴷⵏ ⴰⴽⴽⵯ + write: ⵙⵏⴼⵍ ⵉⴼⵙⴽⴰ ⵏ ⵓⵎⵉⴹⴰⵏ ⵏⵏⴽ + write:accounts: ⵙⵏⴼⵍ ⵉⴼⵔⵙ ⵏⵏⴽ + write:blocks: ⴳⴷⵍ ⵉⵎⵉⴹⴰⵏⵏ ⴷ ⵢⵉⴳⵔⴰⵏ + write:follows: ⴹⴼⵕ ⵎⵉⴷⴷⵏ + write:lists: ⵙⵏⴼⵍⵓⵍ ⵜⵉⵍⴳⴰⵎⵉⵏ + write:mutes: ⵥⵥⵉⵥⵏ ⵎⵉⴷⴷⵏ ⴷ ⵉⵎⵙⴰⵡⴰⵍⵏ write:notifications: ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ + write:reports: ⵎⵍ ⵎⵉⴷⴷⵏ ⵏⵏⵉⴹⵏ + write:statuses: ⴼⵙⵔ ⵜⵉⵥⵕⴰⴳⵉⵏ diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml index 83c552427..872727049 100644 --- a/config/locales/doorkeeper.zh-HK.yml +++ b/config/locales/doorkeeper.zh-HK.yml @@ -3,8 +3,8 @@ zh-HK: activerecord: attributes: doorkeeper/application: - name: 應用名稱 - redirect_uri: 轉接 URI + name: 應用程式名稱 + redirect_uri: 重新導向 URI scopes: 權限範圍 website: 應用網站 errors: @@ -12,10 +12,10 @@ zh-HK: doorkeeper/application: attributes: redirect_uri: - fragment_present: URI 不可包含 "#fragment" 部份。 - invalid_uri: 必需有正確的 URI。 - relative_uri: 必需為完整 URI。 - secured_uri: 必需使用有 HTTPS/SSL 加密的 URI。 + fragment_present: 不能包含 fragment。 + invalid_uri: 必需是一個有效的 URI。 + relative_uri: 必須為絕對 URI。 + secured_uri: 必須為 HTTPS/SSL 加密的 URI。 doorkeeper: applications: buttons: @@ -32,26 +32,26 @@ zh-HK: error: 噢!請檢查你表格的錯誤訊息 help: native_redirect_uri: 使用 %{native_redirect_uri} 作局部測試 - redirect_uri: 每行輸入一個 URI + redirect_uri: 一行一個 URI scopes: 請用半形空格分開權限範圍 (scope)。留空表示使用預設的權限範圍。 index: - application: 應用 - callback_url: 回傳網址 + application: 應用程式 + callback_url: 回傳網址 (Callback URL) delete: 刪除 - empty: 您沒有申請 + empty: 你沒有應用程式 name: 名稱 new: 新增應用程式 - scopes: 權限範圍 + scopes: 權限範圍 (Scopes) show: 顯示 title: 你的應用程式 new: title: 新增應用程式 show: actions: 操作 - application_id: 應用程式 ID - callback_urls: 回傳網址 - scopes: 權限範圍 - secret: 密碼 + application_id: 用戶程式鑰匙 (Client key) + callback_urls: 回傳網址 (Callback URL) + scopes: 權限範圍 (Scopes) + secret: 用戶程式密碼 (Client secret) title: 應用程式︰ %{name} authorizations: buttons: @@ -60,7 +60,7 @@ zh-HK: error: title: 發生錯誤 new: - able_to: 要求獲取權限 + able_to: 它將可以 prompt: 應用程式 %{client_name} 要求得到你用戶的部份權限 title: 需要用戶授權 show: @@ -73,27 +73,27 @@ zh-HK: index: application: 應用程式 created_at: 授權日期 - date_format: "%Y-%m-%d %H:%M:%S" - scopes: 權限範圍 + date_format: "%Y年%m月%d日 %H:%M:%S" + scopes: 權限範圍 (Scopes) title: 已獲你授權的程用程式 errors: messages: access_denied: 資源擁有者或授權伺服器不接受請求。 - credential_flow_not_configured: 資源擁有者密碼認證程序失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 - invalid_client: 用戶程式認證失敗,原因是用戶程式未有登記、沒有指定用戶程式、或者使用了不支援的認證方法。 - invalid_grant: 授權申請不正確、過期、已被取消,或者無法對應授權請求內的轉接 URI,或者屬於別的用戶程式。 + credential_flow_not_configured: 資源擁有者密碼認證程序 (Resource Owner Password Credentials flow) 失敗,原因是 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 + invalid_client: 用戶程式認證 (Client Authentication) 失敗,原因是使用了未知的用戶程式、沒有傳回用戶認證資訊、或者使用了不支援的認證方法 (Authentication Method)。 + invalid_grant: 所提供的認證申請 (authorization grant) 不正確、過期、已被取消、或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。 invalid_redirect_uri: 不正確的轉接網址。 - invalid_request: 請求缺少了必要的參數、包含了不支援的參數、或者其他輸入錯誤。 - invalid_resource_owner: 資源擁有者的登入資訊錯誤、或者無法找到該資源擁有者 - invalid_scope: 請求的權限範圍 (scope) 不正確、未有定義、或者輸入錯誤。 + invalid_request: 請求缺少必要的參數、有不支援的參數、或包含其他格式錯誤。 + invalid_resource_owner: 資源擁有者的登入資訊無效、或者無法找到該資源擁有者 + invalid_scope: 你所請求的權限範圍 (scope) 無效、未知、或格式錯誤。 invalid_token: - expired: access token 已經過期 - revoked: access token 已被取消 - unknown: access token 不正確 + expired: 存取憑證 (access token) 已過期 + revoked: 存取憑證 (access token) 已被撤銷 + unknown: 存取憑證 (access token) 無效 resource_owner_authenticator_not_configured: 無法找到資源擁有者,原因是 Doorkeeper.configure.resource_owner_authenticator 沒有設定。 - server_error: 認證伺服器遇上未知狀況,令請求無法通過。 + server_error: 認證伺服器遇上未知狀況,令請求無法被正確處理。 temporarily_unavailable: 認證伺服器由於臨時負荷過重或者維護,目前未能處理請求。 - unauthorized_client: 用戶程式無權用此方法 (method) 請行這個請求。 + unauthorized_client: 用戶程式無權使用所選的方法 (method) 進行這個請求。 unsupported_grant_type: 授權伺服器不支援這個授權類型 (grant type)。 unsupported_response_type: 授權伺服器不支援這個回應類型 (response type)。 flash: @@ -119,33 +119,33 @@ zh-HK: admin:read:accounts: 讀取所有帳戶的敏感資訊 admin:read:reports: 讀取所有回報 / 被回報之帳戶的敏感資訊 admin:write: 修改伺服器的所有資料 - admin:write:accounts: 對帳戶進行仲裁管理動作 - admin:write:reports: 對報告進行仲裁管理動作 - follow: 關注、封鎖、解除封鎖及取消關注用戶 + admin:write:accounts: 對帳號進行仲裁管理動作 + admin:write:reports: 對回報進行仲裁管理動作 + follow: 修改帳號的對外聯繫 push: 接收你的帳號的推送通知 - read: 閱讀你的用戶資料 - read:accounts: 檢視帳戶資訊 - read:blocks: 檢視您的封鎖名單 - read:bookmarks: 檢視您的書籤 - read:favourites: 檢視您的收藏項目 - read:filters: 檢視您的過濾條件 - read:follows: 檢視您關注的人 - read:lists: 檢視您的名單 - read:mutes: 檢視您靜音的人 - read:notifications: 檢視您的通知 - read:reports: 檢視您的檢舉 - read:search: 以你的身份搜尋 - read:statuses: 檢視所有嘟文 + read: 閱讀你帳號的所有資料 + read:accounts: 檢視帳號資訊 + read:blocks: 檢視你的封鎖名單 + read:bookmarks: 檢視你的書籤 + read:favourites: 檢視你最愛的文章 + read:filters: 檢視你的過濾條件 + read:follows: 檢視你關注的人 + read:lists: 檢視你的清單 + read:mutes: 檢視被你靜音的人 + read:notifications: 檢視你的通知 + read:reports: 檢視你的檢舉 + read:search: 以你的身份進行搜尋 + read:statuses: 檢視所有文章 write: 以你的名義發佈文章 - write:accounts: 修改您的個人檔案 - write:blocks: 封鎖帳戶及站台 - write:bookmarks: 書籤狀態 - write:favourites: 收藏嘟文 + write:accounts: 修改你的個人檔案 + write:blocks: 封鎖帳號及域名 + write:bookmarks: 把文章加入最愛 + write:favourites: 喜歡的文章 write:filters: 建立過濾條件 write:follows: 關注其他人 - write:lists: 建立名單 + write:lists: 建立清單 write:media: 上傳媒體檔案 write:mutes: 靜音使用者及對話 - write:notifications: 清除您的通知 + write:notifications: 清除你的通知 write:reports: 檢舉其他人 write:statuses: 發布嘟文 diff --git a/config/locales/el.yml b/config/locales/el.yml index 9b9eeaa8d..7658efb18 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -131,6 +131,7 @@ el: follows: Ακολουθεί header: Επικεφαλίδα inbox_url: URL εισερχομένων + invite_request_text: Λόγοι για εγγραφή invited_by: Προσκλήθηκε από ip: IP joined: Γράφτηκε @@ -188,6 +189,8 @@ el: search: Αναζήτηση search_same_email_domain: Άλλοι χρήστες με τον ίδιο τομέα e-mail search_same_ip: Υπόλοιποι χρήστες με την ίδια διεύθυνση IP + sensitive: Ευαίσθητο + sensitized: σήμανση ως ευαίσθητο shared_inbox_url: URL κοινόχρηστων εισερχομένων show: created_reports: Αναφορές από αυτόν το λογαριασμό @@ -202,6 +205,7 @@ el: time_in_queue: Σε αναμονή για %{time} title: Λογαριασμοί unconfirmed_email: Ανεπιβεβαίωτο email + undo_sensitized: Αναίρεση ευαίσθητου undo_silenced: Αναίρεση αποσιώπησης undo_suspension: Αναίρεση παύσης unsilenced_msg: Επιτυχής άρση περιορισμών λογαριασμού του/της %{username} @@ -243,9 +247,11 @@ el: reopen_report: Ξανάνοιγμα Καταγγελίας reset_password_user: Επαναφορά Συνθηματικού resolve_report: Επίλυση Καταγγελίας + sensitive_account: Σήμανση των πολυμέσων στον λογαριασμό σας ως ευαίσθητων silence_account: Σίγαση Λογαριασμού suspend_account: Αναστολή Λογαριασμού unassigned_report: Αποδέσμευση Καταγγελίας + unsensitive_account: Αφαίρεση σήμανσης των πολυμέσων στον λογαριασμό σας ως ευαίσθητων unsilence_account: Άρση Σίγασης Λογαριασμού unsuspend_account: Άρση Αναστολής Λογαριασμού update_announcement: Ενημέρωση Ανακοίνωσης @@ -506,6 +512,8 @@ el: comment: none: Κανένα created_at: Καταγγέλθηκε + forwarded: Προωθημένα + forwarded_to: Προώθημένα προς %{domain} mark_as_resolved: Σημειωμένο ως επιλυμένο mark_as_unresolved: Σημειωμένο ως ανεπίλυτο notes: @@ -834,6 +842,7 @@ el: request: Αιτήσου το αρχείο σου size: Μέγεθος blocks: Μπλοκάρεις + bookmarks: Σελιδοδείκτες csv: CSV domain_blocks: Μπλοκαρίσματα κόμβων lists: Λίστες @@ -910,6 +919,7 @@ el: success: Τα δεδομένα σου μεταφορτώθηκαν επιτυχώς και θα επεξεργαστούν εν καιρώ types: blocking: Λίστα αποκλεισμού + bookmarks: Σελιδοδείκτες domain_blocking: Λίστα αποκλεισμένων τομέων following: Λίστα ακολούθων muting: Λίστα αποσιωπήσεων @@ -1344,6 +1354,7 @@ el: title: disable: Παγωμένος λογαριασμός none: Προειδοποίηση + sensitive: Το πολυμέσο σας έχει σημανθεί ως ευαίσθητο silence: Περιορισμένος λογαριασμός suspend: Λογαριασμός σε αναστολή welcome: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index e9256ad0c..64b7ccfc7 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -35,10 +35,13 @@ eo: status_count_before: Kie skribiĝis tagline: Sekvi amikojn kaj trovi iujn novajn terms: Uzkondiĉoj - unavailable_content: Nedisponebla enhavo + unavailable_content: Kontrolitaj serviloj unavailable_content_description: domain: Servilo reason: 'Kialo:' + rejecting_media_title: Filtritaj aŭdovidaĵoj + silenced_title: Silentigitaj serviloj + suspended_title: Haltigitaj serviloj user_count_after: one: uzanto other: uzantoj @@ -86,6 +89,7 @@ eo: delete: Forigi destroyed_msg: Kontrola noto sukcese detruita! accounts: + add_email_domain_block: Bloki retadresan domajnon approve: Aprobi approve_all: Aprobi ĉiujn are_you_sure: Ĉu vi certas? @@ -101,6 +105,7 @@ eo: confirm: Konfirmi confirmed: Konfirmita confirming: Konfirmante + delete: Forigi datumojn deleted: Forigita demote: Degradi disable: Malebligi @@ -117,6 +122,7 @@ eo: follows: Sekvatoj header: Kapa bildo inbox_url: Enira URL + invite_request_text: 가입하려는 이유 invited_by: Invitita de ip: IP joined: Aliĝis @@ -128,6 +134,7 @@ eo: login_status: Ensaluta stato media_attachments: Ligitaj aŭdovidaĵoj memorialize: Ŝanĝi al memoro + memorialized: Memorita moderation: active: Aktivaj all: Ĉio @@ -167,6 +174,8 @@ eo: user: Uzanto search: Serĉi search_same_ip: Aliaj uzantoj kun la sama IP + sensitive: Tikla + sensitized: markita tikla shared_inbox_url: URL de kunhavigita leterkesto show: created_reports: Kreitaj signaloj @@ -179,15 +188,19 @@ eo: time_in_queue: Atendado en atendovico %{time} title: Kontoj unconfirmed_email: Nekonfirmita retadreso + undo_sensitized: Malfari sentema undo_silenced: Malfari kaŝon undo_suspension: Malfari haltigon unsubscribe: Malaboni username: Uzantnomo + view_domain: Vidi la resumon de la domajno warn: Averti web: Reto whitelisted: En la blanka listo action_logs: action_types: + assigned_to_self_report: Atribui Raporton + change_email_user: Ŝanĝi retadreson de uzanto confirm_user: Konfermi uzanto create_account_warning: Krei Averton create_announcement: Krei Anoncon @@ -195,12 +208,14 @@ eo: create_domain_allow: Krei Domajnan Permeson create_domain_block: Krei blokadon de domajno create_email_domain_block: Krei blokadon de retpoŝta domajno + create_ip_block: Krei IP-regulon demote_user: Malpromocii uzanton destroy_announcement: Forigi Anoncon destroy_custom_emoji: Forigi Propran emoĝion destroy_domain_allow: Forigi Domajnan Permeson destroy_domain_block: Forigi blokadon de domajno destroy_email_domain_block: Forigi blokadon de retpoŝta domajno + destroy_ip_block: Forigi IP-regulon destroy_status: Forigi mesaĝon disable_2fa_user: Malebligi 2FA disable_custom_emoji: Malebligi Propran Emoĝion @@ -212,8 +227,15 @@ eo: reopen_report: Remalfermi signalon reset_password_user: Restarigi pasvorton resolve_report: Solvitaj reporto + sensitive_account: Marki tikla la aŭdovidaĵojn de via konto silence_account: Silentigi konton suspend_account: Haltigi konton + unsilence_account: Malsilentigi konton + unsuspend_account: Malhaltigi konton + update_announcement: Ĝisdatigi anoncon + update_custom_emoji: Ĝisdatigi proprajn emoĝiojn + update_domain_block: Ĝigdatigi domajnan blokadon + update_status: Ĝisdatigi staton actions: assigned_to_self_report: "%{name} asignis signalon %{target} al si mem" change_email_user: "%{name} ŝanĝis retadreson de uzanto %{target}" @@ -224,12 +246,14 @@ eo: create_domain_allow: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_block: "%{name} blokis domajnon %{target}" create_email_domain_block: "%{name} blokis retpoŝtan domajnon %{target}" + create_ip_block: "%{name} kreis regulon por IP %{target}" demote_user: "%{name} degradis uzanton %{target}" destroy_announcement: "%{name} forigis anoncon %{target}" destroy_custom_emoji: "%{name} neniigis la emoĝion %{target}" destroy_domain_allow: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block: "%{name} malblokis domajnon %{target}" destroy_email_domain_block: "%{name} malblokis retpoŝtan domajnon %{target}" + destroy_ip_block: "%{name} forigis regulon por IP %{target}" destroy_status: "%{name} forigis mesaĝojn de %{target}" disable_2fa_user: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}" disable_custom_emoji: "%{name} malebligis emoĝion %{target}" @@ -251,6 +275,9 @@ eo: update_custom_emoji: "%{name} ĝisdatigis emoĝion %{target}" update_status: "%{name} ĝisdatigis mesaĝon de %{target}" deleted_status: "(forigita mesaĝo)" + empty: Neniu protokolo trovita. + filter_by_action: Filtri per ago + filter_by_user: Filtri per uzanto title: Kontrola protokolo announcements: destroyed_msg: Anonco sukcese forigita! @@ -289,6 +316,7 @@ eo: listed: Listigita new: title: Aldoni novan propran emoĝion + not_permitted: Vi ne rajtas plenumi ĉi tiun agon overwrite: Anstataŭigi shortcode: Mallonga kodo shortcode_hint: Almenaŭ 2 signoj, nur literoj, ciferoj kaj substrekoj @@ -385,6 +413,7 @@ eo: instances: by_domain: Domajno delivery_available: Liverado disponeblas + empty: Neniuj domajnoj trovitaj. known_accounts: one: "%{count} konata konto" other: "%{count} konataj kontoj" @@ -409,6 +438,9 @@ eo: title: Filtri title: Invitoj ip_blocks: + add_new: Krei regulon + created_msg: Nova IP-regulo sukcese aldonita + delete: Forigi expires_in: '1209600': 2 semajnoj '15778476': 6 monatoj @@ -416,6 +448,10 @@ eo: '31556952': 1 jaro '86400': 1 tago '94670856': 3 jaroj + new: + title: Krei novan IP-regulon + no_ip_block_selected: Neniu IP-regulo estis ŝanĝita ĉar neniu estis elektita + title: IP-reguloj pending_accounts: title: Pritraktataj kontoj (%{count}) relationships: @@ -670,9 +706,11 @@ eo: status: account_status: Statuso de la konto functional: Via konto estas plene funkcianta. + too_fast: Formularo sendita tro rapide, klopodu denove. trouble_logging_in: Ĝeni ensaluti? authorize_follow: already_following: Vi jam sekvas tiun konton + already_requested: Vi jam sendis peton de sekvado al ĉi tiu konto error: Bedaŭrinde, estis eraro en la serĉado de la fora konto follow: Sekvi follow_request: 'Vi sendis peton de sekvado al:' @@ -753,6 +791,7 @@ eo: request: Peti vian arkivon size: Grandeco blocks: Vi blokas + bookmarks: Legosignoj csv: CSV domain_blocks: Blokoj de domajnoj lists: Listoj @@ -826,6 +865,7 @@ eo: success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite types: blocking: Listo de blokitoj + bookmarks: Legosignoj domain_blocking: Listo de blokitaj domajnoj following: Listo de sekvatoj muting: Listo de silentigitoj @@ -930,6 +970,8 @@ eo: quadrillion: Dd thousand: m trillion: Dn + otp_authentication: + enable: Ebligi pagination: newer: Pli nova next: Sekva @@ -974,7 +1016,7 @@ eo: status: Statuso de la konto remote_follow: acct: Enmetu vian uzantnomo@domajno de kie vi volas agi - missing_resource: La URL de plusendado ne estis trovita + missing_resource: La bezonata URL de plusendado por via konto ne estis trovita no_account_html: Ĉu vi ne havas konton? Vi povas registriĝi tie proceed: Daŭrigi por eksekvi prompt: 'Vi eksekvos:' @@ -1120,6 +1162,7 @@ eo: two_factor_authentication: add: Aldoni disable: Malebligi + disabled_success: Dufaktora aŭtentigo sukcese malebligita edit: Redakti enabled: Dufaktora aŭtentigo ebligita enabled_success: Dufaktora aŭtentigo sukcese ebligita @@ -1179,3 +1222,4 @@ eo: verification: Kontrolo webauthn_credentials: delete: Forigi + registered_on: Registrigita je %{date} diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 0108f0784..cb731ee4b 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -60,6 +60,7 @@ es-AR: one: Seguidor other: Seguidores following: Siguiendo + instance_actor_flash: Esta cuenta es un actor virtual usado para representar al servidor en sí mismo y no a ningún usuario individual. Se usa para propósitos de la federación y no debe ser suspendido. joined: En este servidor desde %{date} last_active: última actividad link_verified_on: La propiedad de este enlace fue verificada el %{date} @@ -131,6 +132,7 @@ es-AR: follows: Seguidores header: Cabecera inbox_url: Dirección web de la bandeja de entrada + invite_request_text: Motivos para unirte invited_by: Invitado por ip: Dirección IP joined: Se unió en @@ -255,6 +257,7 @@ es-AR: unsuspend_account: Dejar de suspender cuenta update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoji personalizado + update_domain_block: Actualizar bloque de dominio update_status: Actualizar toot actions: assigned_to_self_report: "%{name} se asignó la denuncia %{target} a sí" @@ -295,6 +298,7 @@ es-AR: unsuspend_account: "%{name} quitó la suspensión de la cuenta de %{target}" update_announcement: "%{name} actualizó el anuncio %{target}" update_custom_emoji: "%{name} actualizó el emoji %{target}" + update_domain_block: "%{name} actualizó el bloqueo de dominio para %{target}" update_status: "%{name} actualizó el toot de %{target}" deleted_status: "[toot eliminado]" empty: No se encontraron registros. @@ -437,6 +441,7 @@ es-AR: instances: by_domain: Dominio delivery_available: La entrega está disponible + empty: No se encontraron dominios. known_accounts: one: "%{count} cuenta conocida" other: "%{count} cuentas conocidas" @@ -514,6 +519,8 @@ es-AR: comment: none: Ninguno created_at: Denunciado + forwarded: Reenviado + forwarded_to: Reenviado a %{domain} mark_as_resolved: Marcar como resuelta mark_as_unresolved: Marcar como no resuelta notes: @@ -583,6 +590,9 @@ es-AR: min_invite_role: disabled: Nadie title: Permitir invitaciones de + require_invite_text: + desc_html: Cuando los registros requieran aprobación manual, hacé que la solicitud de invitación "¿Por qué querés unirte?" sea obligatoria, en vez de opcional + title: Requerir que los nuevos usuarios llenen un texto de solicitud de invitación registrations_mode: modes: approved: Se requiere aprobación para registrarse @@ -751,6 +761,7 @@ es-AR: functional: Tu cuenta está totalmente operativa. pending: Tu solicitud está pendiente de revisión por nuestra administración. Eso puede tardar algún tiempo. Si se aprueba tu solicitud, vas a recibir un correo electrónico. redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. + too_fast: Formulario enviado demasiado rápido, probá de nuevo. trouble_logging_in: "¿Tenés problemas para iniciar sesión?" use_security_key: Usar la llave de seguridad authorize_follow: diff --git a/config/locales/es.yml b/config/locales/es.yml index 46285d84f..e26cd79f2 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -60,6 +60,7 @@ es: one: Seguidor other: Seguidores following: Siguiendo + instance_actor_flash: Esta cuenta es un actor virtual utilizado para representar al servidor en sí mismo y no a ningún usuario individual. Se utiliza para propósitos de la federación y no se debe suspender. joined: Se unió el %{date} last_active: última conexión link_verified_on: La propiedad de este vínculo fue verificada el %{date} @@ -131,6 +132,7 @@ es: follows: Sigue header: Cabecera inbox_url: URL de la bandeja de entrada + invite_request_text: Razones para unirse invited_by: Invitado por ip: IP joined: Unido @@ -255,6 +257,7 @@ es: unsuspend_account: Dejar de Suspender Cuenta update_announcement: Actualizar Anuncio update_custom_emoji: Actualizar Emoji Personalizado + update_domain_block: Actualizar el Bloqueo de Dominio update_status: Actualizar Estado actions: assigned_to_self_report: "%{name} se ha asignado la denuncia %{target} a sí mismo" @@ -295,6 +298,7 @@ es: unsuspend_account: "%{name} desactivó la suspensión de la cuenta de %{target}" update_announcement: "%{name} actualizó el anuncio %{target}" update_custom_emoji: "%{name} actualizó el emoji %{target}" + update_domain_block: "%{name} actualizó el bloqueo de dominio para %{target}" update_status: "%{name} actualizó el estado de %{target}" deleted_status: "(estado borrado)" empty: No se encontraron registros. @@ -437,6 +441,7 @@ es: instances: by_domain: Dominio delivery_available: Entrega disponible + empty: No se encontraron dominios. known_accounts: one: "%{count} cuenta conocida" other: "%{count} cuentas conocidas" @@ -583,6 +588,9 @@ es: min_invite_role: disabled: Nadie title: Permitir invitaciones de + require_invite_text: + desc_html: Cuando los registros requieren aprobación manual, haga obligatorio en la invitaciones el campo "¿Por qué quieres unirte?" en lugar de opcional + title: Requiere a los nuevos usuarios rellenar un texto de solicitud de invitación registrations_mode: modes: approved: Se requiere aprobación para registrarse @@ -751,6 +759,7 @@ es: functional: Su cuenta está totalmente operativa. pending: Su solicitud está pendiente de revisión por nuestros administradores. Eso puede tardar algún tiempo. Usted recibirá un correo electrónico si el solicitud sea aprobada. redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. + too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo. trouble_logging_in: "¿Problemas para iniciar sesión?" use_security_key: Usar la clave de seguridad authorize_follow: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 77740e9e3..cf094478a 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -62,6 +62,7 @@ fa: one: پیگیر other: پیگیر following: پی می‌گیرد + instance_actor_flash: این حساب یک عامل مجازی است که به نمایندگی از خود کارساز استفاده می‌شود و نه هیچ یکی از کاربران. این حساب به منظور اتصال به فدراسیون استفاده می‌شود و نباید معلق شود. joined: کاربر از %{date} last_active: آخرین فعالیت link_verified_on: مالکیت این پیوند در %{date} بررسی شد @@ -128,10 +129,12 @@ fa: email_status: وضعیت ایمیل enable: به کار انداختن enabled: به کار افتاده + enabled_msg: حساب %{username} با موفقیت به کار انداخته شد followers: پیگیران follows: پی می‌گیرد header: تصویر زمینه inbox_url: نشانی صندوق ورودی + invite_request_text: دلایل‌تان برای پیوستن invited_by: دعوت‌شده از طرف ip: IP joined: عضو شده در @@ -143,6 +146,8 @@ fa: login_status: وضعیت ورود media_attachments: پیوست‌های رسانه‌ای memorialize: تبدیل به یادمان + memorialized: یادمان‌سازی شده + memorialized_msg: "%{username} با موفقیت به یک حساب یادمانی تبدیل شد" moderation: active: فعّال all: همه @@ -254,6 +259,7 @@ fa: unsuspend_account: رفع تعلیق حساب update_announcement: به‌روز رسانی اعلامیه update_custom_emoji: به‌روز رسانی اموجی سفارشی + update_domain_block: به‌روزرسانی مسدودسازی دامنه update_status: به‌روز رسانی وضعیت actions: assigned_to_self_report: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت" @@ -285,13 +291,16 @@ fa: reopen_report: "%{name} گزارش %{target} را دوباره به جریان انداخت" reset_password_user: "%{name} رمز کاربر %{target} را بازنشاند" resolve_report: "%{name} گزارش %{target} را رفع کرد" + sensitive_account: "%{name} رسانهٔ %{target} را به عنوان حساس علامت‌گذاری کرد" silence_account: "%{name} حساب کاربر %{target} را خاموش (بی‌صدا) کرد" suspend_account: "%{name} حساب کاربر %{target} را تعلیق کرد" unassigned_report: "%{name} بررسی گزارش %{target} را متوقف کرد" + unsensitive_account: "%{name} علامت حساس رسانهٔ %{target} را برداشت" unsilence_account: "%{name} حساب کاربر %{target} را روشن (باصدا) کرد" unsuspend_account: "%{name} حساب کاربر %{target} را از تعلیق خارج کرد" update_announcement: "%{name} اعلامیهٔ %{target} را به‌روز کرد" update_custom_emoji: "%{name} شکلک %{target} را به‌روز کرد" + update_domain_block: "%{name} مسدودسازی دامنه را برای %{target} به‌روزرسانی کرد" update_status: "%{name} نوشتهٔ %{target} را به‌روز کرد" deleted_status: "(نوشتهٔ پاک‌شده)" empty: هیچ گزارشی پیدا نشد. @@ -434,6 +443,7 @@ fa: instances: by_domain: دامین delivery_available: پیام آماده است + empty: هیج دامنه‌ای پیدا نشد. known_accounts: one: "%{count} حساب شناخته‌شده" other: "%{count} حساب شناخته‌شده" @@ -511,6 +521,8 @@ fa: comment: none: هیچ created_at: گزارش‌شده + forwarded: هدایت شده + forwarded_to: هدایت شده به %{domain} mark_as_resolved: علامت‌گذاری به عنوان حل‌شده mark_as_unresolved: علامت‌گذاری به عنوان حل‌نشده notes: @@ -580,6 +592,9 @@ fa: min_invite_role: disabled: هیچ کس title: اجازهٔ دعوت به + require_invite_text: + desc_html: زمانی که نام‌نویسی نیازمند تایید دستی است، متن «چرا می‌خواهید عضو شود؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید + title: نیازمند پر کردن متن درخواست دعوت توسط کاربران جدید registrations_mode: modes: approved: ثبت نام نیازمند تأیید مدیران است @@ -748,6 +763,7 @@ fa: functional: حساب شما قابل استفاده است. pending: درخواست شما منتظر تأیید مسئولان سایت است و این فرایند ممکن است کمی طول بکشد. اگر درخواست شما پذیرفته شود به شما ایمیلی فرستاده خواهد شد. redirecting_to: حساب شما غیرفعال است زیرا هم‌اکنون به %{acct} منتقل شده است. + too_fast: فرم با سرعت بسیار زیادی فرستاده شد، دوباره تلاش کنید. trouble_logging_in: برای ورود مشکلی دارید؟ use_security_key: استفاده از کلید امنیتی authorize_follow: @@ -1041,6 +1057,7 @@ fa: code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید description_html: اگر ورود دومرحله‌ای را با استفاده از از یک کارهٔ تأییدکننده به کار بیندازید، لازم است برای ورود، به تلفن خود که برایتان یک ژتون خواهد ساخت دسترسی داشته باشید. enable: به کار انداختن + instructions_html: "این کد QR را با برنامهٔ Google Authenticator یا برنامه‌های TOTP مشابه اسکن کنید. از این به بعد، آن برنامه کدهایی موقتی خواهد ساخت که برای ورود باید آن‌ها را وارد کنید." manual_instructions: 'اگر نمی‌توانید رمز QR را بپویید و باید دستی واردظ کنید، متن رمز این‌جاست:' setup: برپا سازی wrong_code: رمز وارد شده نامعتبر بود! آیا زمان کارساز و زمان افزاره درستند؟ @@ -1072,6 +1089,7 @@ fa: relationships: activity: فعالیت حساب dormant: غیرفعال + follow_selected_followers: پیگیری پیگیران انتخاب شده followers: پی‌گیران following: پی می‌گیرد invited: مدعو @@ -1207,6 +1225,8 @@ fa: other: "%{count} رأی" vote: رأی show_more: نمایش + show_newer: نمایش جدیدتر + show_older: نمایش قدیمی‌تر show_thread: نمایش رشته sign_in_to_participate: برای شرکت در گفتگو وارد حساب خود شوید title: '%{name}: "%{quote}"' @@ -1352,6 +1372,7 @@ fa: subject: disable: حساب %{acct} شما متوقف شده است none: هشدار برای %{acct} + sensitive: رسانه‌های فرستاده شده توسط حساب %{acct} شما برچسب حساس خورده‌اند silence: حساب %{acct} شما محدود شده است suspend: حساب %{acct} شما معلق شده است title: @@ -1399,6 +1420,7 @@ fa: success: کلید امنیتیتان با موفّقیت افزوده شد. delete: حذف delete_confirmation: مطمئنید که می‌خواهید این کلید امنیتی را حذف کنید؟ + description_html: اگر احراز هویت کلید امنیتی را فعال کنید، ورود نیازمند این خواهد بود که یکی از کلیدهای امنیتی‌تان را استفاده کنید. destroy: error: حذف کلید امنیتیتان با مشکل مواجه شد. لطفاً دوباره تلاش کنید. success: کلید امنیتیتان با موفّقیت حذف شد. diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 90ed7cbe8..52195cbef 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -15,7 +15,7 @@ fr: browse_public_posts: Parcourir un flux en direct de messages publics sur Mastodon contact: Contact contact_missing: Non défini - contact_unavailable: N/D + contact_unavailable: Non disponible discover_users: Découvrez des utilisateur·rice·s documentation: Documentation federation_hint_html: Avec un compte sur %{instance}, vous pourrez suivre les gens sur n’importe quel serveur Mastodon et au-delà. @@ -33,7 +33,7 @@ fr: one: statut other: statuts status_count_before: Ayant publié - tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles + tagline: Suivez vos ami·e·s et découvrez en de nouveaux·elles terms: Conditions d’utilisation unavailable_content: Serveurs modérés unavailable_content_description: @@ -60,6 +60,7 @@ fr: one: Abonné·e other: Abonné·e·s following: Abonnements + instance_actor_flash: Ce compte est un acteur virtuel utilisé pour représenter le serveur lui-même et non un utilisateur individuel. Il est utilisé à des fins de fédération et ne doit pas être suspendu. joined: Inscrit·e en %{date} last_active: dernière activité link_verified_on: La propriété de ce lien a été vérifiée le %{date} @@ -131,6 +132,7 @@ fr: follows: Abonnements header: Entête inbox_url: URL d’entrée + invite_request_text: Raisons de l’adhésion invited_by: Invité par ip: Adresse IP joined: Inscrit·e depuis @@ -255,6 +257,7 @@ fr: unsuspend_account: Annuler la suspension du compte update_announcement: Modifier l’annonce update_custom_emoji: Mettre à jour les émojis personnalisés + update_domain_block: Mettre à jour le blocage de domaine update_status: Mettre à jour le statut actions: assigned_to_self_report: "%{name} s’est assigné·e le signalement de %{target}" @@ -295,6 +298,7 @@ fr: unsuspend_account: "%{name} a réactivé le compte de %{target}" update_announcement: "%{name} a actualisé l’annonce %{target}" update_custom_emoji: "%{name} a mis à jour l’émoji %{target}" + update_domain_block: "%{name} a mis à jour le blocage de domaine pour %{target}" update_status: "%{name} a mis à jour le statut de %{target}" deleted_status: "(statut supprimé)" empty: Aucun journal trouvé. @@ -437,6 +441,7 @@ fr: instances: by_domain: Domaine delivery_available: Livraison disponible + empty: Aucun domaine trouvé. known_accounts: one: "%{count} compte connu" other: "%{count} comptes connus" @@ -514,6 +519,8 @@ fr: comment: none: Aucun created_at: Signalé + forwarded: Transféré + forwarded_to: Transféré à %{domain} mark_as_resolved: Marquer comme résolu mark_as_unresolved: Marquer comme non-résolu notes: @@ -583,6 +590,9 @@ fr: min_invite_role: disabled: Personne title: Autoriser les invitations par + require_invite_text: + desc_html: Lorsque les enregistrements nécessitent une approbation manuelle, rendre le texte de l’invitation "Pourquoi voulez-vous vous inscrire ?" obligatoire plutôt que facultatif + title: Exiger que les nouveaux utilisateurs remplissent un texte de demande d’invitation registrations_mode: modes: approved: Approbation requise pour s’inscrire @@ -751,6 +761,7 @@ fr: functional: Votre compte est entièrement opérationnel. pending: Votre demande est en attente d'examen par notre personnel. Cela peut prendre un certain temps. Vous recevrez un courriel si votre demande est approuvée. redirecting_to: Votre compte est inactif car il est actuellement redirigé vers %{acct}. + too_fast: Formulaire envoyé trop rapidement, veuillez réessayer. trouble_logging_in: Vous avez un problème pour vous connecter ? use_security_key: Utiliser la clé de sécurité authorize_follow: @@ -1092,7 +1103,7 @@ fr: status: État du compte remote_follow: acct: Entrez l’adresse profil@serveur depuis laquelle vous voulez effectuer cette action - missing_resource: L’URL de redirection n’a pas pu être trouvée + missing_resource: L’URL de redirection requise pour votre compte n’a pas pu être trouvée no_account_html: Vous n’avez pas de compte ? Vous pouvez vous inscrire ici proceed: Confirmer l’abonnement prompt: 'Vous allez suivre :' diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 89da4bf82..6d648082f 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -255,6 +255,7 @@ gl: unsuspend_account: Retirar suspensión de conta update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoticona personalizada + update_domain_block: Actualizar bloqueo do dominio update_status: Actualizar estado actions: assigned_to_self_report: "%{name} atribuíu a denuncia %{target} a el mesmo" @@ -295,6 +296,7 @@ gl: unsuspend_account: "%{name} desactivou a suspensión da conta de %{target}" update_announcement: "%{name} actualizou o anuncio %{target}" update_custom_emoji: "%{name} actualizou a emoticona %{target}" + update_domain_block: "%{name} actualizou o bloqueo do dominio %{target}" update_status: "%{name} actualizou o estado de %{target}" deleted_status: "(estado eliminado)" empty: Non se atoparon rexistros. @@ -437,6 +439,7 @@ gl: instances: by_domain: Dominio delivery_available: Entrega dispoñíbel + empty: Non se atopan dominios. known_accounts: one: "%{count} conta coñecida" other: "%{count} contas coñecidas" @@ -514,6 +517,8 @@ gl: comment: none: Ningún created_at: Denunciado + forwarded: Reenviado + forwarded_to: Reenviado a %{domain} mark_as_resolved: Marcar como resolto mark_as_unresolved: Marcar como non resolto notes: @@ -583,6 +588,9 @@ gl: min_invite_role: disabled: Ninguén title: Permitir convites por + require_invite_text: + desc_html: Cando os rexistros requiren aprobación manual, facer que o texto "Por que te queres rexistrar?" do convite sexa obrigatorio en lugar de optativo + title: Require que as novas usuarias completen solicitude de texto do convite registrations_mode: modes: approved: Precisa aprobación para rexistrarse @@ -751,6 +759,7 @@ gl: functional: A súa conta está totalmente operativa. pending: A túa aplicación está pendente de revisión. Poderíanos levar algún tempo. Recibirás un correo se a aplicación está aprobada. redirecting_to: A túa conta está inactiva porque está redirixida a %{acct}. + too_fast: Formulario enviado demasiado rápido, inténtao outra vez. trouble_logging_in: Problemas para conectar? use_security_key: Usa chave de seguridade authorize_follow: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 1a112c53a..ef6ec3089 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -60,6 +60,7 @@ hu: one: Követő other: Követő following: Követett + instance_actor_flash: Ez a fiók virtuális és magát a szervert reprezentálja, nem egy konkrét felhasználót. Föderációs okok miatt létezik és nem szabad felfüggeszteni. joined: Csatlakozott %{date} last_active: utoljára aktív link_verified_on: A link tulajdonosát %{date} -n ellenőriztük @@ -131,6 +132,7 @@ hu: follows: Követett header: Fejléc inbox_url: Beérkezett üzenetek URL-je + invite_request_text: Csatlakozás oka invited_by: Meghívta ip: IP joined: Csatlakozott @@ -255,6 +257,7 @@ hu: unsuspend_account: Fiók felfüggesztésének feloldása update_announcement: Közlemény frissítése update_custom_emoji: Egyéni emodzsi frissítése + update_domain_block: Domain blokkolás frissítése update_status: Állapot frissítése actions: assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte" @@ -295,6 +298,7 @@ hu: unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését" update_announcement: "%{name} frissítette a közleményt %{target}" update_custom_emoji: "%{name} frissítette az alábbi emodzsit: %{target}" + update_domain_block: "%{name} frissítette a(z) %{target} domain blokkolását" update_status: "%{name} frissítette %{target} felhasználó tülkjét" deleted_status: "(törölt tülk)" empty: Nem található napló. @@ -437,6 +441,7 @@ hu: instances: by_domain: Domain delivery_available: Kézbesítés elérhető + empty: Nem található domain. known_accounts: one: "%{count} ismert fiók" other: "%{count} ismert fiók" @@ -514,6 +519,8 @@ hu: comment: none: Egyik sem created_at: Jelentve + forwarded: Továbbítva + forwarded_to: Továbbítva neki %{domain} mark_as_resolved: Megjelölés megoldottként mark_as_unresolved: Megjelölés megoldatlanként notes: @@ -583,6 +590,9 @@ hu: min_invite_role: disabled: Senki title: Meghívások engedélyezése + require_invite_text: + desc_html: Ha a regisztrációhoz kézi jóváhagyásra van szükség, akkor a „Miért akarsz csatlakozni?” válasz kitöltése legyen kötelező, és ne opcionális + title: Az új felhasználóktól legyen megkövetelve a meghívási kérés szövegének kitöltése registrations_mode: modes: approved: A regisztráció engedélyhez kötött @@ -751,6 +761,7 @@ hu: functional: A fiókod teljesen működőképes. pending: A jelentkezésed engedélyezésre vár. Ez eltarthat egy ideig. Kapsz egy e-mailt, ha az elbírálás megtörtént. redirecting_to: A fiókod inaktív, mert jelenleg ide %{acct} van átirányítva. + too_fast: Túl gyorsan küldted el az űrlapot, próbáld később. trouble_logging_in: Problémád van a bejelentkezéssel? use_security_key: Biztonsági kulcs használata authorize_follow: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 2ea895b63..1afd4d927 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -248,6 +248,7 @@ hy: empty: Ոչ մի գրառում չկայ։ filter_by_action: Զտել ըստ գործողութեան filter_by_user: Զտել ըստ օգտատիրոջ + title: Ստուգման մատեան announcements: destroyed_msg: Յայտարարութիւնը բարեյաջող ջնջուեց edit: @@ -278,6 +279,7 @@ hy: list: Ցանկ listed: Ցուցակագրուած overwrite: Վերագրել + shortcode: Հապավում uncategorized: Չդասակարգուած unlist: Ապացուցակագրում unlisted: Ծածուկ @@ -392,6 +394,7 @@ hy: enabled: Միացված է save_and_enable: Պահպանել եւ միացնել status: Կարգավիճակ + title: Վերահեռարձակիչներ reports: account: notes: @@ -491,6 +494,7 @@ hy: subject: Նոր բողոք %{instance}ի համար(#%{id}) appearance: advanced_web_interface: Սյունակավոր ինտերֆեյս + advanced_web_interface_hint: Եթէ ցանկանում ես օգտագործել էկրանիդ ամբողջ լայնքը, ապա ընդլայնուած վեբ ինտերֆեյսով հնարաւոր է էկրանը բաժանել սիւնակների՝ զուգահեռ տեսնելու տարբեր տիպի ինֆորմացիա՝ տեղական հոսքը, ծանուցումները, ֆեդերացված հոսքը, և ցանկացած թվի ցուցակ ու հեշթեգ։ animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն discovery: Բացայայտում localization: @@ -715,6 +719,7 @@ hy: public_timelines: Հանրային հոսք relationships: activity: Հաշուի ակտիւութիւնը + dormant: Չգօրծող followers: Հետեւորդներ following: Հետեւում ես invited: Հրաւիրուած է @@ -763,6 +768,7 @@ hy: windows_mobile: Windows Mobile windows_phone: Windows Phone revoke: Չեղարկել + title: Սեսսիա settings: account: Հաշիվ appearance: Տեսք @@ -770,6 +776,7 @@ hy: development: Ծրագրավորում edit_profile: Խմբագրել պրոֆիլը export: Տվյալների արտահանում + identity_proofs: Անձի նոյնացումներ import: Ներմուծել import_and_export: Ներմուծել և արտահանել migrate: Հաշուի տեղափոխում diff --git a/config/locales/id.yml b/config/locales/id.yml index cb9dcb149..fdd87027e 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -251,6 +251,7 @@ id: unsuspend_account: Lepas Status Tangguh Akun update_announcement: Perbarui Pengumuman update_custom_emoji: Perbarui Emoji Khusus + update_domain_block: Perbarui Blokir Domain update_status: Perbarui Status actions: assigned_to_self_report: "%{name} menugaskan laporan %{target} kpd dirinya sendiri" @@ -291,6 +292,7 @@ id: unsuspend_account: "%{name} menghapus penangguhan akun %{target}" update_announcement: "%{name} memperbarui pengumuman %{target}" update_custom_emoji: "%{name} memperbarui emoji %{target}" + update_domain_block: "%{name} memperbarui blokir domain untuk %{target}" update_status: "%{name} memperbarui status %{target}" deleted_status: "(status dihapus)" empty: Log tidak ditemukan. @@ -432,6 +434,7 @@ id: instances: by_domain: Domain delivery_available: Pengiriman tersedia + empty: Domain tidak ditemukan. known_accounts: other: "%{count} akun yang dikenal" moderation: diff --git a/config/locales/is.yml b/config/locales/is.yml index a011322e4..75b80a45d 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -131,6 +131,7 @@ is: follows: Fylgist með header: Haus inbox_url: Slóð á innhólf + invite_request_text: Ástæður fyrir þátttöku invited_by: Boðið af ip: IP-vistfang joined: Gerðist þátttakandi @@ -255,6 +256,7 @@ is: unsuspend_account: Taka notandaaðgang úr bið update_announcement: Uppfæra tilkynningu update_custom_emoji: Uppfæra sérsniðið tjáningartákn + update_domain_block: Uppfæra útilokun léns update_status: Uppfæra stöðufærslu actions: assigned_to_self_report: "%{name} úthlutaði skýrslu %{target} til sín" @@ -295,6 +297,7 @@ is: unsuspend_account: "%{name} tók notandaaðganginn %{target} úr bið" update_announcement: "%{name} uppfærði auglýsingu %{target}" update_custom_emoji: "%{name} uppfærði tjáningartákn %{target}" + update_domain_block: "%{name} uppfærði útilokun lénsins %{target}" update_status: "%{name} uppfærði stöðufærslu frá %{target}" deleted_status: "(eydd stöðufærsla)" empty: Engar atvikaskrár fundust. @@ -437,6 +440,7 @@ is: instances: by_domain: Lén delivery_available: Afhending er til taks + empty: Engin lén fundust. known_accounts: one: "%{count} þekktur notandaaðgangur" other: "%{count} þekktir notendaaðgangar" @@ -514,6 +518,8 @@ is: comment: none: Ekkert created_at: Tilkynnt + forwarded: Áframsent + forwarded_to: Áframsent á %{domain} mark_as_resolved: Merkja sem leyst mark_as_unresolved: Merkja sem óleyst notes: @@ -583,6 +589,9 @@ is: min_invite_role: disabled: Enginn title: Leyfa boð frá + require_invite_text: + desc_html: Þegar nýskráningar krefjast handvirks samþykkis, skal gera "Hvers vegna viltu taka þátt?" boðstexta að skyldu fremur en valkvæðan + title: Krefja nýja notendur um að fylla út boðstexta registrations_mode: modes: approved: Krafist er samþykkt nýskráningar @@ -751,6 +760,7 @@ is: functional: Notandaaðgangurinn þinn er með fulla virkni. pending: Umsóknin þín bíður eftir að starfsfólkið okkar fari yfir hana. Það gæti tekið nokkurn tíma. Þú munt fá tölvupóst ef umsóknin er samþykkt. redirecting_to: Notandaaðgangurinn þinn er óvirkur vegna þess að hann endurbeinist á %{acct}. + too_fast: Innfyllingarform sent inn of hratt, prófaðu aftur. trouble_logging_in: Vandræði við að skrá inn? use_security_key: Nota öryggislykil authorize_follow: @@ -842,6 +852,7 @@ is: request: Biddu um safnskrána þína size: Stærð blocks: Þú útilokar + bookmarks: Bókamerki csv: CSV domain_blocks: Útilokanir á lénum lists: Listar @@ -918,6 +929,7 @@ is: success: Það tókst að senda inn gögnin þín og verður unnið með þau þegar færi gefst types: blocking: Listi yfir útilokanir + bookmarks: Bókamerki domain_blocking: Listi yfir útilokanir léna following: Listi yfir þá sem fylgst er með muting: Listi yfir þagganir diff --git a/config/locales/it.yml b/config/locales/it.yml index 24ccc7d76..5ca2fae92 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -60,6 +60,7 @@ it: one: Seguace other: Seguaci following: Segui + instance_actor_flash: Questo account è un attore virtuale usato per rappresentare il server stesso e non un singolo utente. Viene utilizzato per scopi federativi e non dovrebbe essere sospeso. joined: Dal %{date} last_active: ultima attività link_verified_on: La proprietà di questo link è stata controllata il %{date} @@ -131,6 +132,7 @@ it: follows: Segue header: Intestazione inbox_url: URL inbox + invite_request_text: Motivi per l'iscrizione invited_by: Invitato da ip: IP joined: Iscritto da @@ -255,6 +257,7 @@ it: unsuspend_account: Annulla la sospensione dell'account update_announcement: Aggiorna annuncio update_custom_emoji: Aggiorna emoji personalizzata + update_domain_block: Aggiorna blocco di dominio update_status: Aggiorna stato actions: assigned_to_self_report: "%{name} ha assegnato il rapporto %{target} a se stesso" @@ -295,6 +298,7 @@ it: unsuspend_account: "%{name} ha annullato la sospensione dell'account di %{target}" update_announcement: "%{name} ha aggiornato l'annuncio %{target}" update_custom_emoji: "%{name} ha aggiornato l'emoji %{target}" + update_domain_block: "%{name} ha aggiornato il blocco di dominio per %{target}" update_status: "%{name} stato aggiornato da %{target}" deleted_status: "(stato cancellato)" empty: Nessun log trovato. @@ -437,6 +441,7 @@ it: instances: by_domain: Dominio delivery_available: Distribuzione disponibile + empty: Nessun dominio trovato. known_accounts: one: "%{count} account noto" other: "%{count} account noti" @@ -514,6 +519,8 @@ it: comment: none: Nessuno created_at: Segnalato + forwarded: Inoltrato + forwarded_to: Inoltrato a %{domain} mark_as_resolved: Segna come risolto mark_as_unresolved: Segna come non risolto notes: @@ -583,6 +590,9 @@ it: min_invite_role: disabled: Nessuno title: Permetti inviti da + require_invite_text: + desc_html: Quando le iscrizioni richiedono l'approvazione manuale, rendere la richiesta “Perché si desidera iscriversi?” obbligatoria invece che opzionale + title: Richiedi ai nuovi utenti di rispondere alla richiesta di motivazione per l'iscrizione registrations_mode: modes: approved: Approvazione richiesta per le iscrizioni @@ -753,6 +763,7 @@ it: functional: Il tuo account è pienamente operativo. pending: La tua richiesta è in attesa di esame da parte del nostro staff. Potrebbe richiedere un po' di tempo. Riceverai una e-mail se la richiesta è approvata. redirecting_to: Il tuo account è inattivo perché attualmente reindirizza a %{acct}. + too_fast: Modulo inviato troppo velocemente, riprova. trouble_logging_in: Problemi di accesso? use_security_key: Usa la chiave di sicurezza authorize_follow: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 4d195c448..db9e41f74 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -57,6 +57,7 @@ ja: followers: other: フォロワー following: フォロー中 + instance_actor_flash: このアカウントは、個々のユーザーではなく、サーバー自体を表すために使用される仮想のユーザーです。 連合のために使用されるため、停止しないで下さい。 joined: "%{date} に登録" last_active: 最後の活動 link_verified_on: このリンクの所有権は %{date} に確認されました @@ -127,6 +128,7 @@ ja: follows: フォロー数 header: ヘッダー inbox_url: Inbox URL + invite_request_text: 登録理由 invited_by: 招待した人 ip: IP joined: 登録日 @@ -138,6 +140,7 @@ ja: login_status: ログイン media_attachments: 添付されたメディア memorialize: 追悼アカウント化 + memorialized: 追悼化済み memorialized_msg: "%{username} を追悼アカウント化しました" moderation: active: アクティブ @@ -159,6 +162,7 @@ ja: public: パブリック push_subscription_expires: PuSH購読期限 redownload: プロフィールを更新 + redownloaded_msg: "%{username} のプロフィールを正常に更新しました" reject: 却下 reject_all: すべて却下 rejected_msg: "%{username} の登録申請を却下しました" @@ -201,7 +205,9 @@ ja: undo_sensitized: 閲覧注意から戻す undo_silenced: サイレンスから戻す undo_suspension: 停止から戻す + unsilenced_msg: "%{username} のサイレンス解除に成功しました" unsubscribe: 購読の解除 + unsuspended_msg: "%{username} の無効化を解除しました" username: ユーザー名 view_domain: ドメインの概要を表示 warn: 警告 @@ -247,6 +253,7 @@ ja: unsuspend_account: アカウントの停止を解除 update_announcement: お知らせを更新 update_custom_emoji: カスタム絵文字を更新 + update_domain_block: ドメインブロックを更新 update_status: トゥートを更新 actions: assigned_to_self_report: "%{name} さんが通報 %{target} を自身の担当に割り当てました" @@ -287,6 +294,7 @@ ja: unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました" update_announcement: "%{name} さんがお知らせ %{target} を更新しました" update_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を更新しました" + update_domain_block: "%{name} が %{target} のドメインブロックを更新しました" update_status: "%{name} さんが %{target} さんのトゥートを更新しました" deleted_status: "(削除済)" empty: ログが見つかりませんでした @@ -428,6 +436,7 @@ ja: instances: by_domain: ドメイン delivery_available: 配送可能 + empty: ドメインが見つかりませんでした。 known_accounts: other: 既知のアカウント数 %{count} moderation: @@ -502,6 +511,8 @@ ja: comment: none: なし created_at: 通報日時 + forwarded: 転送済み + forwarded_to: "%{domain} に転送されました" mark_as_resolved: 解決済みとしてマーク mark_as_unresolved: 未解決として再び開く notes: @@ -739,6 +750,7 @@ ja: functional: アカウントは完全に機能しています。 pending: あなたの申請は現在サーバー管理者による審査待ちです。これにはしばらくかかります。申請が承認されるとメールが届きます。 redirecting_to: アカウントは %{acct} に引っ越し設定されているため非アクティブになっています。 + too_fast: フォームの送信が速すぎます。もう一度やり直してください。 trouble_logging_in: ログインできませんか? use_security_key: セキュリティキーを使用 authorize_follow: @@ -765,6 +777,7 @@ ja: date: formats: default: "%Y年%m月%d日" + with_month_name: "%Y年%m月%d日" datetime: distance_in_words: about_x_hours: "%{count}時間" diff --git a/config/locales/kab.yml b/config/locales/kab.yml index fe042301d..403f2b2e7 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -183,6 +183,7 @@ kab: remove_avatar_user: Kkes avaṭar reset_password_user: Ales awennez n wawal n uffir silence_account: Sgugem amiḍan + update_domain_block: Leqqem iḥder n taɣult actions: assigned_to_self_report: "%{name} imudd aneqqis %{target} i yiman-nsen" change_email_user: "%{name} ibeddel imayl n umseqdac %{target}" @@ -215,6 +216,7 @@ kab: unsilence_account: "%{name} yekkes asgugem n umiḍan n %{target}" update_announcement: "%{name} ileqqem taselɣut %{target}" update_custom_emoji: "%{name} yelqem imuji %{target}" + update_domain_block: "%{name} ileqqem iḥder n taɣult i %{target}" update_status: "%{name} yelqem tasuffeɣt n %{target}" deleted_status: "(tasuffeɣt tettwakkes)" empty: Ulac iɣmisen i yellan. @@ -304,6 +306,7 @@ kab: instances: by_domain: Taγult delivery_available: Yella usiweḍ + empty: Ulac taɣultin yettwafen. known_accounts: one: "%{count} n umiḍan i yettwasnen" other: "%{count} n yimiḍanen i yettwassnen" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index f8043534a..c7b63fbf7 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -57,6 +57,7 @@ ko: followers: other: 팔로워 following: 팔로잉 + instance_actor_flash: 이 계정은 서버 자신을 나타내기 위한 가상의 계정이며 개인 사용자가 아닙니다. 이 계정은 연합을 위해 사용되며 정지되지 않아야 합니다. joined: "%{date}에 가입함" last_active: 최근 활동 link_verified_on: "%{date}에 이 링크의 소유가 확인되었습니다" @@ -108,7 +109,7 @@ ko: confirm: 확인 confirmed: 확인됨 confirming: 확인 중 - delete: 데이터 식제 + delete: 데이터 삭제 deleted: 삭제됨 demote: 강등 destroyed_msg: "%{username}의 데이터는 곧 삭제되도록 큐에 들어갔습니다" @@ -251,6 +252,7 @@ ko: unsuspend_account: 계정 정지 취소 update_announcement: 공지사항 업데이트 update_custom_emoji: 커스텀 에모지 업데이트 + update_domain_block: 도메인 차단 갱신 update_status: 게시물 게시 actions: assigned_to_self_report: "%{name}이 리포트 %{target}을 자신에게 할당했습니다" @@ -291,6 +293,7 @@ ko: unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다" update_announcement: "%{name} 님이 공지 %{target}을 갱신했습니다" update_custom_emoji: "%{name}이 에모지 %{target}를 업데이트 했습니다" + update_domain_block: "%{name} 님이 %{target}에 대한 도메인 차단을 갱신했습니다" update_status: "%{name}이 %{target}의 상태를 업데이트 했습니다" deleted_status: "(삭제됨)" empty: 로그를 찾을 수 없습니다 @@ -434,6 +437,7 @@ ko: instances: by_domain: 도메인 delivery_available: 전송 가능 + empty: 도메인이 하나도 없습니다. known_accounts: other: 알려진 계정 %{count}개 moderation: @@ -508,6 +512,8 @@ ko: comment: none: 없음 created_at: 리포트 시각 + forwarded: 전달됨 + forwarded_to: "%{domain}에게 전달됨" mark_as_resolved: 해결 완료 처리 mark_as_unresolved: 미해결로 표시 notes: @@ -577,6 +583,9 @@ ko: min_invite_role: disabled: 아무도 못 하게 title: 초대링크를 만들 수 있는 권한 + require_invite_text: + desc_html: 가입이 수동 승인을 필요로 할 때, "왜 가입하려고 하나요?" 항목을 선택사항으로 두는 것보다는 필수로 두는 것이 낫습니다 + title: 새 사용자가 초대 요청 글을 작성해야 하도록 registrations_mode: modes: approved: 가입하려면 승인이 필요함 @@ -745,6 +754,7 @@ ko: functional: 계정이 완벽히 작동합니다. pending: 당신의 가입 신청은 스태프의 검사를 위해 대기중입니다. 이것은 시간이 다소 소요됩니다. 가입 신청이 승인 될 경우 이메일을 받게 됩니다. redirecting_to: 계정이 %{acct}로 리다이렉트 중이기 때문에 비활성 상태입니다. + too_fast: 너무 빠르게 양식이 제출되었습니다, 다시 시도하세요. trouble_logging_in: 로그인 하는데 문제가 있나요? use_security_key: 보안 키 사용 authorize_follow: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index d7232b6ff..0d76e1b97 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -188,6 +188,8 @@ ku: search: گەڕان search_same_email_domain: بەکارهێنەرانی دیکە بە ئیمەیلی یەکسان search_same_ip: بەکارهێنەرانی تر بەهەمان ئای پی + sensitive: هەستیار + sensitized: وەک هەستیار نیشان کراوە shared_inbox_url: بەستەری سندوقی هاوبەشکراو show: created_reports: گوزارشتی تۆمارکراوە @@ -202,6 +204,7 @@ ku: time_in_queue: چاوەڕوانی لە ڕیزدا %{time} title: هەژمارەکان unconfirmed_email: ئیمەیڵی پشتڕاستنەکراو + undo_sensitized: " هەستیار نەکردن" undo_silenced: بێدەنگ ببە undo_suspension: دووبارە ڕاگرتن unsilenced_msg: هەژماری %{username} بە سەرکەوتوویی بێسنوور کرا @@ -243,9 +246,11 @@ ku: reopen_report: دووبارە کردنەوەی گوزارشت reset_password_user: گەڕانەوەی تێپەڕوشە resolve_report: گوزارشت چارەسەربکە + sensitive_account: میدیاکە لە هەژمارەکەت وەک هەستیار نیشانە بکە silence_account: هەژماری بێدەنگی suspend_account: ڕاگرتنی هەژمارە unassigned_report: گوزارشتی دیارینەکراو + unsensitive_account: میدیاکە لە هەژمارەکەت وەک هەستیار نیشانە مەکە unsilence_account: هەژماری بێ دەنگ unsuspend_account: هەژماری هەڵنەوەستێنراو update_announcement: بەڕۆژکردنەوەی راگەیەندراو @@ -281,9 +286,11 @@ ku: reopen_report: "%{name} گوزارشتی %{target} دووبارە وەگڕخستەوە" reset_password_user: "%{name} تێپەروشەی بەکارهێنەری %{target} گەڕانەوە" resolve_report: "%{name} گوزارشتی %{target} دووبارە وەگڕخستەوە" + sensitive_account: "%{name} بە %{target}'s میدیا وەک هەستیار دیاری کراوە" silence_account: "%{name} هەژماری %{target}'s بێدەنگ کرا" suspend_account: "%{name} هەژماری %{target}'ی ڕاگیرا" unassigned_report: "%{name} ڕاپۆرتی دیاری نەکراوی %{target}" + unsensitive_account: "%{name} بە %{target}'s میدیا وەک هەستیار دیاری نەکراوە" unsilence_account: "%{name} هەژماری %{target}'s بێ دەنگ" unsuspend_account: "%{name} هەژماری %{target}'s هەڵنەپەسێردراو" update_announcement: "%{name} بەڕۆژکراوەی راگەیاندنی %{target}" @@ -835,6 +842,7 @@ ku: request: داوای ئەرشیفەکەت بکە size: قەبارە blocks: تۆ بلۆک دەکەیت + bookmarks: نیشانکراوەکان csv: CSV domain_blocks: دۆمەین قەپاتکرا lists: لیستەکان @@ -911,6 +919,7 @@ ku: success: داتاکەت بە سەرکەوتوویی بارکرا و ئێستا لە کاتی خۆیدا پرۆسێس دەکرێت types: blocking: لیستی بلۆککردن + bookmarks: نیشانەکان domain_blocking: لیستی بلۆککردنی دۆمەین following: لیستی خوارەوە muting: لیستی کپکردنەوە @@ -961,6 +970,7 @@ ku: incoming_migrations: گواستنەوە لە هەژمارەی جیاواز incoming_migrations_html: بۆ گواستنەوە لە هەژمارەیەکی ترەوە بۆ ئەم هەژمارە، سەرەتا پێویستە ئەژمێرێک دروست بکەی. moved_msg: هەژمارەکەت ئێستا دووبارە ئاڕاستە دەکرێتەوە بۆ %{acct} و شوێنکەوتوانی تۆ گواستراوەتەوە بۆ ئەوێ. + not_redirecting: هەژمارەکەت لە ئێستادا دووبارە ئاڕاستە ناکرێتەوە بۆ هیچ هەژمارەیەکی دیکە. on_cooldown: تۆ بەم دواییە هەژمارەکەت کۆچ کردووە. ئەم کارە لە رۆژەکانی %{count} دا جارێکی تر بەردەست دەبێت. past_migrations: گەواستنەوەکانی ڕابردوو proceed_with_move: شوێنکەوتوان بگوازەوە @@ -1066,6 +1076,7 @@ ku: relationships: activity: چالاکی هەژمارە dormant: ناچالاک + follow_selected_followers: شوێنکەوتوان دیاریکراو بکە followers: شوێنکەوتوان following: شوێن‌کەوتووی invited: بانگهێشتەکان @@ -1201,6 +1212,8 @@ ku: other: "%{count} دەنگەکان" vote: دەنگ show_more: زیاتر پیشان بدە + show_newer: نوێتر پیشان بدە + show_older: پیشاندانی کۆنتر show_thread: نیشاندانی ڕشتە sign_in_to_participate: بچۆ ژوورەوە بۆ بەشداریکردن لە گفتوگۆکەدا title: '%{name}: "%{quote}"' @@ -1333,6 +1346,7 @@ ku: warning: explanation: disable: تا کاتێک هەژمارەی ئێوە نەوێستاوە، دراوەکانی ئێوە دەستکاری ناکرێت.بەڵام تا کاتێک کە هەژمارەکەتان ناکرێتەوە. ناتوانن هیچ ئیشێکی لەسەر بکەن. + sensitive: پەڕگە میدیایە بارکراوەکانت و میدیا لینککراوەکانت وەک هەستیار مامەڵەیان لەگەڵ دەکرێت. silence: تا کاتیک هەژمارەکەتان سنووردار بێت، تەنها ئەو کەسانە کە پێشتر شوێنکەوتووی ئێوە بوون نووسراوەکانی ئێوە لەم ڕاژە دەبینن. شایەد ئێوە لە زۆر پێرستی گشتی دیار نەکەون؛ بەڵام خەڵکانی دیکە دەتوانن بە دڵی خۆیان پەیگیری ئێوە بن. suspend: هەژمارەکەتان هەڵواسراوە، وە تەواو توت و میدیاکان کە لەسەر ئەم ڕاژە بارتان کردووە یان ئەو ڕاژانە کە شوێنکەوتووتان لە سەری بووە ئیتر ناگەڕێنەوە. get_in_touch: بە وڵام دانەوەی ئەم ئیمەیلە دەتوانن لە گەڵ لیژنەی %{instance} لە پەیوەندی بن. @@ -1341,11 +1355,13 @@ ku: subject: disable: هەژمارەکەت %{acct} بەستراوە none: ئاگاداری بۆ %{acct} + sensitive: هەژمارەکەت %{acct} میدیایەکی پۆست کردن بە هەستیار نیشان کراوە silence: هەژمارەکەی %{acct} سنووردار کراوە suspend: هەژمارەکەی %{acct} ڕاگیرا title: disable: هەژمارە بەستراوە none: ئاگاداری + sensitive: میدیاکەت بە هەستیار نیشان کراوە silence: هەژماری سنووردار suspend: هەژمار ڕاگیرا welcome: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index fe268d546..d9c4e20fa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -98,6 +98,7 @@ nl: add_email_domain_block: E-maildomein blokkeren approve: Goedkeuren approve_all: Alles goedkeuren + approved_msg: Het goedkeuren van het registratieverzoek van %{username} is geslaagd are_you_sure: Weet je het zeker? avatar: Avatar by_domain: Domein @@ -111,8 +112,10 @@ nl: confirm: Bevestigen confirmed: Bevestigd confirming: Bevestiging + delete: Gegevens verwijderen deleted: Verwijderd demote: Degraderen + destroyed_msg: De verwijdering van de gegevens van %{username} staat nu in de wachtrij disable: Bevriezen disable_two_factor_authentication: 2FA uitschakelen disabled: Bevroren @@ -123,6 +126,7 @@ nl: email_status: E-mailstatus enable: Ontdooien enabled: Ingeschakeld + enabled_msg: Het ontdooien van het account van %{username} is geslaagd followers: Volgers follows: Volgt header: Omslagfoto @@ -137,7 +141,9 @@ nl: title: Locatie login_status: Loginstatus media_attachments: Mediabijlagen - memorialize: In gedenkpagina veranderen + memorialize: Naar een In memoriam veranderen + memorialized: In memoriam + memorialized_msg: Het naar een In memoriam veranderen van het account van %{username} is geslaagd moderation: active: Actief all: Alles @@ -158,10 +164,14 @@ nl: public: Openbaar push_subscription_expires: PuSH-abonnement verloopt op redownload: Profiel vernieuwen + redownloaded_msg: Het herstellen van het oorspronkelijke profiel van %{username} is geslaagd reject: Afkeuren reject_all: Alles afkeuren + rejected_msg: Het afwijzen van het registratieverzoek van %{username} is geslaagd remove_avatar: Avatar verwijderen remove_header: Omslagfoto verwijderen + removed_avatar_msg: Het verwijderen van de avatar van %{username} is geslaagd + removed_header_msg: Het verwijderen van de omslagfoto van %{username} is geslaagd resend_confirmation: already_confirmed: Deze gebruiker is al bevestigd send: Verzend bevestigingsmail opnieuw @@ -178,6 +188,8 @@ nl: search: Zoeken search_same_email_domain: Andere gebruikers met hetzelfde e-maildomein search_same_ip: Andere gebruikers met hetzelfde IP-adres + sensitive: Gevoelig + sensitized: als gevoelig gemarkeerd shared_inbox_url: Gedeelde inbox-URL show: created_reports: Aangemaakte rapportages @@ -187,9 +199,12 @@ nl: statuses: Toots subscribe: Abonneren suspended: Opgeschort + suspension_irreversible: De gegevens van dit account zijn onomkeerbaar verwijderd. Je kunt het opschorten van dit account ongedaan maken zodat het weer valt te gebruiken, maar de verwijderde gegevens worden hiermee niet hersteld. + suspension_reversible_hint_html: Dit account is opgeschort en de gegevens worden volledig verwijderd op %{date}. Tot die tijd kan dit account worden hersteld zonder nadelige gevolgen. Wanneer je alle gegevens van dit account onmiddellijk wilt verwijderen, kun je dit hieronder doen. time_in_queue: "%{time} in de wachtrij" title: Accounts unconfirmed_email: Onbevestigd e-mailadres + undo_sensitized: Niet meer als gevoelig markeren undo_silenced: Niet langer negeren undo_suspension: Niet langer opschorten unsubscribe: Opzeggen @@ -208,19 +223,21 @@ nl: create_domain_allow: Domeingoedkeuring aanmaken create_domain_block: Domeinblokkade aanmaken create_email_domain_block: E-maildomeinblokkade aanmaken + create_ip_block: IP-regel aanmaken demote_user: Gebruiker degraderen destroy_announcement: Mededeling verwijderen destroy_custom_emoji: Lokale emoji verwijderen destroy_domain_allow: Domeingoedkeuring verwijderen destroy_domain_block: Domeinblokkade verwijderen destroy_email_domain_block: E-maildomeinblokkade verwijderen + destroy_ip_block: IP-regel verwijderen destroy_status: Toot verwijderen disable_2fa_user: Tweestapsverificatie uitschakelen disable_custom_emoji: Lokale emojij uitschakelen disable_user: Gebruiker uitschakelen enable_custom_emoji: Lokale emoji inschakelen enable_user: Gebruiker inschakelen - memorialize_account: Account in gedenkpagina veranderen + memorialize_account: Het account in een In memoriam veranderen promote_user: Gebruiker promoveren remove_avatar_user: Avatar verwijderen reopen_report: Rapportage heropenen @@ -256,7 +273,7 @@ nl: disable_user: Inloggen voor %{target} is door %{name} uitgeschakeld enable_custom_emoji: Emoji %{target} is door %{name} ingeschakeld enable_user: Inloggen voor %{target} is door %{name} ingeschakeld - memorialize_account: Account %{target} is door %{name} in een gedenkpagina veranderd + memorialize_account: Het account %{target} is door %{name} in een In memoriam veranderd promote_user: Gebruiker %{target} is door %{name} gepromoveerd remove_avatar_user: "%{name} verwijderde de avatar van %{target}" reopen_report: "%{name} heeft rapportage %{target} heropend" @@ -434,6 +451,21 @@ nl: expired: Verlopen title: Filter title: Uitnodigingen + ip_blocks: + add_new: Regel aanmaken + created_msg: Het toevoegen van een nieuwe IP-regel is geslaagd + delete: Verwijderen + expires_in: + '1209600': 2 weken + '15778476': 6 maanden + '2629746': 1 maand + '31556952': 1 jaar + '86400': 1 dag + '94670856': 3 jaar + new: + title: Nieuwe IP-regel aanmaken + no_ip_block_selected: Er zijn geen IP-regels veranderd, omdat er geen een was geselecteerd + title: IP-regels pending_accounts: title: Accounts in afwachting (%{count}) relationships: @@ -681,8 +713,11 @@ nl: prefix_sign_up: Registreer je vandaag nog op Mastodon! suffix: Met een account ben je in staat om mensen te volgen, berichten te plaatsen en uit te wisselen met mensen die zich op andere Mastodonservers bevinden en meer! didnt_get_confirmation: Geen bevestigingsinstructies ontvangen? + dont_have_your_security_key: Heb je jouw beveiligingssleutel niet bij de hand? forgot_password: Wachtwoord vergeten? invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan. + link_to_otp: Voer een tweestapsverificatiecode van je telefoon of een herstelcode in + link_to_webauth: Jouw apparaat met de authenticatie-app gebruiken login: Inloggen logout: Uitloggen migrate_account: Naar een ander account verhuizen @@ -708,6 +743,7 @@ nl: pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd. redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}. trouble_logging_in: Problemen met inloggen? + use_security_key: Beveiligingssleutel gebruiken authorize_follow: already_following: Je volgt dit account al already_requested: Je hebt al een volgverzoek naar dat account verstuurd @@ -732,6 +768,7 @@ nl: date: formats: default: "%d %b %Y" + with_month_name: "%d %B %Y" datetime: distance_in_words: about_x_hours: "%{count}u" @@ -796,6 +833,7 @@ nl: request: Jouw archief opvragen size: Omvang blocks: Jij blokkeert + bookmarks: Bladwijzers csv: CSV domain_blocks: Domeinblokkades lists: Lijsten @@ -809,7 +847,7 @@ nl: filters: contexts: account: Profielen - home: Starttijdlijn + home: Starttijdlijn en lijsten notifications: Meldingen public: Openbare tijdlijnen thread: Gesprekken @@ -872,6 +910,7 @@ nl: success: Jouw gegevens zijn succesvol geüpload en worden binnenkort verwerkt types: blocking: Blokkeerlijst + bookmarks: Bladwijzers domain_blocking: Lijst met genegeerde servers following: Volglijst muting: Negeerlijst @@ -992,6 +1031,14 @@ nl: quadrillion: qdn. thousand: K trillion: bln. + otp_authentication: + code_hint: Voer de code in die door de authenticatie-app werd gegenereerd + description_html: Na het instellen van tweestapsverificatie met een authenticatie-app, kun je alleen inloggen als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode. + enable: Inschakelen + instructions_html: "Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon. Van nu af aan genereert deze app aanmeldcodes die je bij het inloggen moet invoeren." + manual_instructions: 'Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder de geheime code in platte tekst:' + setup: Instellen + wrong_code: De ingevoerde code is ongeldig! Klopt de systeemtijd van de server en die van jouw apparaat? pagination: newer: Nieuwer next: Volgende @@ -1020,6 +1067,7 @@ nl: relationships: activity: Accountactiviteit dormant: Sluimerend + follow_selected_followers: Geselecteerde volgers volgen followers: Volgers following: Volgend invited: Uitgenodigd @@ -1116,6 +1164,7 @@ nl: profile: Profiel relationships: Volgers en gevolgden two_factor_authentication: Tweestapsverificatie + webauthn_authentication: Beveiligingssleutels spam_check: spam_detected: Dit is een automatisch gegenereerde rapportage. Er is spam gedetecteerd. statuses: @@ -1154,6 +1203,8 @@ nl: other: "%{count} stemmen" vote: Stemmen show_more: Meer tonen + show_newer: Nieuwere tonen + show_older: Oudere tonen show_thread: Gesprek tonen sign_in_to_participate: Meld je aan om aan dit gesprek mee te doen title: '%{name}: "%{quote}"' @@ -1262,14 +1313,20 @@ nl: default: "%d %B %Y om %H:%M" month: "%b %Y" two_factor_authentication: + add: Toevoegen disable: Tweestapsverificatie uitschakelen + disabled_success: Uitschakelen tweestapsverificatie is geslaagd + edit: Bewerken enabled: Tweestapsverificatie is ingeschakeld enabled_success: Inschakelen tweestapsverificatie geslaagd generate_recovery_codes: Herstelcodes genereren lost_recovery_codes: Met herstelcodes kun je toegang tot jouw account krijgen wanneer je jouw telefoon bent kwijtgeraakt. Wanneer je jouw herstelcodes bent kwijtgeraakt, kan je ze hier opnieuw genereren. Jouw oude herstelcodes zijn daarna ongeldig. + methods: Methoden voor tweestapsverificatie + otp: Authenticatie-app recovery_codes: Herstelcodes back-uppen recovery_codes_regenerated: Opnieuw genereren herstelcodes geslaagd recovery_instructions_html: Wanneer je ooit de toegang verliest tot jouw telefoon, kan je met behulp van een van de herstelcodes hieronder opnieuw toegang krijgen tot jouw account. Zorg ervoor dat je de herstelcodes op een veilige plek bewaard. Je kunt ze bijvoorbeeld printen en ze samen met andere belangrijke documenten bewaren. + webauthn: Beveiligingssleutels user_mailer: backup_ready: explanation: Je hebt een volledige back-up van jouw Mastodon-account opgevraagd. Het staat nu klaar om te worden gedownload! @@ -1284,6 +1341,7 @@ nl: warning: explanation: disable: Zolang jouw account is bevroren blijven jouw accountgegevens intact, maar kun je geen handelingen uitvoeren totdat het account is vrijgegeven. + sensitive: De mediabestanden die je upload en gekoppelde media worden als gevoelig behandeld. silence: Zolang jouw account wordt beperkt, kunnen alleen mensen die jou al volgen jouw toots op deze server zien. Tevens ben je niet zichtbaar in meldingen, gesprekken en op openbare tijdlijnen. Anderen kunnen je echter wel handmatig volgen. suspend: Jouw account is opgeschort. Jouw toots en geüploade media zijn onomkeerbaar van deze server verwijderd, en ook o.a. van de servers waar jij volgers had. get_in_touch: Je kunt deze e-mail beantwoorden om in contact te komen met de medewerkers van %{instance}. @@ -1317,9 +1375,11 @@ nl: tips: Tips title: Welkom aan boord %{name}! users: + blocked_email_provider: Deze e-mailprovider is niet toegestaan follow_limit_reached: Je kunt niet meer dan %{limit} accounts volgen generic_access_help_html: Problemen met toegang tot je account? Neem dan contact op met %{email} voor assistentie invalid_email: E-mailadres is ongeldig + invalid_email_mx: Het e-mailadres lijkt niet te bestaan invalid_otp_token: Ongeldige tweestaps-aanmeldcode invalid_sign_in_token: Ongeldige beveiligingscode otp_lost_help_html: Als je toegang tot beiden kwijt bent geraakt, neem dan contact op via %{email} @@ -1329,3 +1389,15 @@ nl: verification: explanation_html: 'Je kunt jezelf verifiëren als de eigenaar van de links in de metadata van jouw profiel. Hiervoor moet op de gelinkte website een link terug naar jouw Mastodonprofiel staan. Deze link moet het rel="me"-attribuut bevatten. De omschrijving van de link maakt niet uit. Hier is een voorbeeld:' verification: Verificatie + webauthn_credentials: + add: Nieuwe beveiligingssleutel toevoegen + create: + success: Het toevoegen van je beveiligingssleutel is geslaagd. + delete: Verwijderen + delete_confirmation: Weet je zeker dat je deze beveiligingssleutel wilt verwijderen? + invalid_credential: Ongeldige beveiligingssleutel + nickname_hint: Voer de bijnaam in van jouw nieuwe beveiligingssleutel + not_enabled: Je hebt WebAuthn nog niet ingeschakeld + not_supported: Deze browser ondersteunt geen beveiligingssleutels + otp_required: Om beveiligingssleutels te kunnen gebruiken, moet je eerst tweestapsverificatie inschakelen. + registered_on: Geregistreerd op %{date} diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 18d81bae3..763a59fbb 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -953,6 +953,7 @@ oc: trillion: T otp_authentication: enable: Activar + setup: Parametrar pagination: newer: Mai recents next: Seguent @@ -1077,6 +1078,7 @@ oc: profile: Perfil relationships: Abonaments e seguidors two_factor_authentication: Autentificacion en dos temps + webauthn_authentication: Claus de seguretat spam_check: spam_detected: Aquò es un senhalament automatic. D’spam es estat detectat. statuses: @@ -1220,7 +1222,9 @@ oc: default: Lo %e %B de %Y a %Ho%M month: "%B de %Y" two_factor_authentication: + add: Ajustar disable: Desactivar + edit: Modificar enabled: Autentificacion en dos temps activada enabled_success: L’autentificacion en dos temps es ben activada generate_recovery_codes: Generar los còdis de recuperacion @@ -1279,3 +1283,5 @@ oc: verification: explanation_html: 'Podètz verificar vosautres meteisses coma proprietari dels ligams per las metadonadas de vòstre perfil. Per aquò far, lo site Web ligat deu conténer un ligam cap a vòstre perfil Mastodon. Lo ligam deu aver un atribut rel="me". Lo contengut tèxte del ligam impòrta pas. Vaquí un exemple :' verification: Verificacion + webauthn_credentials: + registered_on: Inscripcion del %{date} diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 1e77ef21d..327ad81c1 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -66,6 +66,7 @@ pl: one: śledzący other: Śledzących following: śledzonych + instance_actor_flash: To konto jest wirtualnym profilem używanym do reprezentowania samego serwera, a nie żadnego indywidualnego użytkownika. Jest ono stosowane do celów federacji i nie powinien być zawieszany. joined: Dołączył(a) %{date} last_active: ostatnio aktywny(-a) link_verified_on: Własność tego odnośnika została sprawdzona %{date} @@ -139,6 +140,7 @@ pl: follows: Śledzeni header: Nagłówek inbox_url: Adres skrzynki + invite_request_text: Powody rejestracji invited_by: Zaproszony(-a) przez ip: Adres IP joined: Dołączył(-a) @@ -263,6 +265,7 @@ pl: unsuspend_account: Cofnij zawieszenie konta update_announcement: Aktualizuj ogłoszenie update_custom_emoji: Aktualizuj niestandardowe emoji + update_domain_block: Zaktualizuj blokadę domeny update_status: Aktualizuj wpis actions: assigned_to_self_report: "%{name} przypisał(a) sobie zgłoszenie %{target}" @@ -303,6 +306,7 @@ pl: unsuspend_account: "%{name} cofnął(-ęła) zawieszenie konta %{target}" update_announcement: "%{name} zaktualizował(-a) ogłoszenie %{target}" update_custom_emoji: "%{name} zaktualizował(a) emoji %{target}" + update_domain_block: "%{name} zaktualizował(-a) blokadę domeny dla %{target}" update_status: "%{name} zaktualizował(a) wpis użytkownika %{target}" deleted_status: "(usunięty wpis)" empty: Nie znaleziono aktywności w dzienniku. @@ -447,6 +451,7 @@ pl: instances: by_domain: Domena delivery_available: Doręczanie jest dostępne + empty: Nie znaleziono domen. known_accounts: few: "%{count} znane konta" many: "%{count} znane konta" @@ -530,6 +535,8 @@ pl: comment: none: Brak created_at: Zgłoszono + forwarded: Przekazano + forwarded_to: Przekazano do %{domain} mark_as_resolved: Oznacz jako rozwiązane mark_as_unresolved: Oznacz jako nierozwiązane notes: @@ -599,6 +606,9 @@ pl: min_invite_role: disabled: Nikt title: Kto może zapraszać użytkowników + require_invite_text: + desc_html: Kiedy rejestracje wymagają ręcznego zatwierdzenia, ustaw pole "Dlaczego chcesz dołączyć?" jako obowiązkowe, a nie opcjonalne + title: Wymagaj od nowych użytkowników wypełnienia tekstu prośby o zaproszenie registrations_mode: modes: approved: Przyjęcie jest wymagane do rejestracji @@ -767,6 +777,7 @@ pl: functional: Twoje konto całkowicie funkcjonuje. pending: Twoje zgłoszenie czeka na zatwierdzenie przez nas. Może to trochę potrwać. Jeżeli zgłoszenie zostanie przyjęte, otrzymasz wiadomość e-mail. redirecting_to: Twoje konto jest nieaktywne, ponieważ obecnie przekierowuje je na %{acct}. + too_fast: Zbyt szybko przesłano formularz, spróbuj ponownie. trouble_logging_in: Masz problem z zalogowaniem się? use_security_key: Użyj klucza bezpieczeństwa authorize_follow: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 8d66efba9..ca8d75a16 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -751,6 +751,7 @@ pt-PT: functional: A sua conta está totalmente operacional. pending: A sua inscrição está pendente de revisão pela nossa equipa. Isso pode demorar algum tempo. Receberá um e-mail se a sua conta for aprovada. redirecting_to: A sua conta está inativa porque está atualmente a ser redirecionada para %{acct}. + too_fast: Formulário enviado muito rapidamente, tente novamente. trouble_logging_in: Problemas em iniciar sessão? use_security_key: Usar chave de segurança authorize_follow: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 2de389864..9895f9a55 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -66,6 +66,7 @@ ru: one: подписчик other: подписчиков following: подписки + instance_actor_flash: Эта учетная запись - виртуальный пользователь, используемый для представления самого сервера, а не отдельного пользователя. Она используется для организационных целей и не может быть заморожена. joined: 'Дата регистрации: %{date}' last_active: последняя активность link_verified_on: Владение этой ссылкой было проверено %{date} @@ -139,6 +140,7 @@ ru: follows: Подписки header: Шапка inbox_url: URL входящих + invite_request_text: Причины для присоединения invited_by: Приглашение выдал(а) ip: IP joined: Дата регистрации @@ -263,6 +265,7 @@ ru: unsuspend_account: Разблокировка пользователей update_announcement: Обновление объявлений update_custom_emoji: Обновление эмодзи + update_domain_block: Изменить блокировку домена update_status: Изменение постов actions: assigned_to_self_report: "%{name} назначил(а) себя для решения жалобы %{target}" @@ -303,6 +306,7 @@ ru: unsuspend_account: "%{name} снял(а) блокировку с пользователя %{target}" update_announcement: "%{name} обновил объявление %{target}" update_custom_emoji: "%{name} обновил(а) эмодзи %{target}" + update_domain_block: "%{name} обновил блокировку домена для %{target}" update_status: "%{name} изменил(а) пост пользователя %{target}" deleted_status: "(удалённый пост)" empty: Журнал пуст. @@ -452,6 +456,7 @@ ru: instances: by_domain: Домен delivery_available: Доставка возможна + empty: Домены не найдены. known_accounts: few: "%{count} известные учётные записи" many: "%{count} известных учётных записей" @@ -535,6 +540,8 @@ ru: comment: none: Нет created_at: Создана + forwarded: Переслано + forwarded_to: Переслано на %{domain} mark_as_resolved: Отметить как решённую mark_as_unresolved: Отметить как нерешённую notes: @@ -604,6 +611,9 @@ ru: min_invite_role: disabled: Никого title: Разрешать приглашения от + require_invite_text: + desc_html: Когда регистрация требует ручного подтверждения, сделать ответ на вопрос "Почему вы хотите присоединиться?" обязательным, а не опциональным + title: Обязать новых пользователей заполнять текст запроса на приглашение registrations_mode: modes: approved: Для регистрации требуется подтверждение @@ -772,6 +782,7 @@ ru: functional: Ваша учётная запись в полном порядке. pending: Ваша заявка ожидает одобрения администраторами, это может занять немного времени. Вы получите письмо, как только заявку одобрят. redirecting_to: Ваша учётная запись деактивированна, потому что вы настроили перенаправление на %{acct}. + too_fast: Форма отправлена слишком быстро, попробуйте еще раз. trouble_logging_in: Не удаётся войти? use_security_key: Использовать ключ безопасности authorize_follow: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 4e3322589..626c7671c 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1,12 +1,1420 @@ --- sc: + about: + about_hashtag_html: Custos sunt tuts pùblicos etichetados cun #%{hashtag}. Bi podes intrare in cuntatu si tenes unu contu in cale si siat logu de su fediversu. + about_mastodon_html: 'Sa rete sotziale de su benidore: sena publitzidade, sena vigilàntzia corporativa, disignu èticu e detzentralizatzione! Sias mere de is datos tuos cun Mastodon!' + about_this: Informatziones + active_count_after: ativu + active_footnote: Utentes Ativos Mensiles (UAM) + administered_by: 'Amministradu dae:' + api: "*API" + apps: Aplicatziones mòbiles + apps_platforms: Imprea Mastodon dae iOS, Android e àteras prataformas + browse_directory: Nàviga su diretòriu de profilos e filtra segundu interessos + browse_local_posts: Nàviga unu flussu in direta de messàgios pùblicos de custu serbidore + browse_public_posts: Nàviga unu flussu in direta de messàgios pùblicos in Mastodon + contact: Cuntatu + contact_missing: No impostadu + contact_unavailable: No a disponimentu + discover_users: Iscoberi utentes + documentation: Documentatzione + federation_hint_html: Cun unu contu in %{instance} as a pòdere sighire persones in cale si siat serbidore de Mastodon o de su fediversu. + get_apps: Proa un'aplicatzione mòbile + hosted_on: Mastodon acasagiadu in %{domain} + instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su serbidore matessi, no est un''utente individuale. Benit impreadu pro punnas de federatzione e non lu dias dèpere blocare si non cheres blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu. + +' + learn_more: Àteras informatziones + privacy_policy: Polìtica de riservadesa + see_whats_happening: Càstia su chi est acontessende + server_stats: 'Istatìsticas de su serbidore:' + source_code: Còdighe mitza + status_count_after: + one: istadu + other: istados + status_count_before: Autores de + tagline: Sighi is amigos tuos e iscoberi·nde de noos + terms: Cunditziones de su servìtziu + unavailable_content: Serbidores moderados + unavailable_content_description: + domain: Serbidore + reason: Resone + rejecting_media: 'Is documentos multimediales de custos serbidores no at a èssere protzessadu o sarvadu e peruna miniadura at a èssere ammustradas, ca tenent bisòngiu de un''incarcu manuale in su documentu originale:' + rejecting_media_title: Mèdios filtrados + silenced: 'Is messàgios dae custos serbidores ant a èssere cuados in is lìnias de tempus e is arresonadas pùblicas, e no at a èssere generada peruna notìfica dae is interatziones de is utentes, francu chi nde sias sighende:' + silenced_title: Serbidores a sa muda + suspended: 'Perunu datu de custos serbidores at a èssere protzessadu, immagasinadu o cuncambiadu; est impossìbile duncas cale si siat interatzione o comunicatzione cun is utentes de custos serbidores:' + suspended_title: Serbidores suspèndidos + unavailable_content_html: Mastodon ti permitit de bìdere su cuntenutu de utentes de cale si siat àteru serbidore de su fediversu. Custas sunt etzetziones chi fatas in custu serbidore particulare. + user_count_after: + one: utente + other: utentes + user_count_before: Allogiadu dae + what_is_mastodon: Ite est Mastodon? + accounts: + choices_html: 'Sèberos de %{name}:' + endorsements_hint: Podes cussigiare gente chi sighis dae s'interfache web, e at a aparèssere inoghe. + featured_tags_hint: Podes evidentziare etichetas ispetzìficas chi ant a èssere ammustradas inoghe. + follow: Sighi + followers: + one: Sighidura + other: Sighiduras + following: Sighende + joined: At aderidu su %{date} + last_active: ùrtima atividade + link_verified_on: Sa propiedade de custu ligàmene est istada controllada su %{date} + media: Elementos multimediales + moved_html: "%{name} est istadu trasferidu a %{new_profile_link}:" + network_hidden: Custa informatzione no a disponimentu + never_active: Mai + nothing_here: Nudda inoghe. + people_followed_by: Gente sighida dae %{name} + people_who_follow: Gente chi sighit a %{name} + pin_errors: + following: Depes sighire sa persone chi boles promòvere + posts: + one: Tut + other: Tuts + posts_tab_heading: Tuts + posts_with_replies: Tuts e rispostas + reserved_username: Custu nòmine de utente est giai impreadu + roles: + admin: Admin + bot: Bot + group: Grupu + moderator: Moderadore + unavailable: Su profilu no est a disponimentu + unfollow: Non sigas prus + admin: + account_actions: + action: Faghe un'atzione + title: Faghe un'atzione de moderatzione in %{acct} + account_moderation_notes: + create: Lassa una nota + created_msg: As creadu una nota de moderatzione. + delete: Cantzella + destroyed_msg: As cantzelladu una nota de moderatzione. + accounts: + add_email_domain_block: Bloca domìniu de posta eletrònica + approve: Aprova + approve_all: Aprova totus + approved_msg: Sa dimanda de registru de %{username} est istada aprovada + are_you_sure: Seguru? + avatar: Immàgine de profilu + by_domain: Domìniu + change_email: + changed_msg: As cambiadu s'indiritzu eletrònicu. + current_email: Indiritzu eletrònicu atuale + label: Muda s'indiritzu eletrònicu + new_email: Indiritzu de eletrònicu nou + submit: Muda s'indiritzu eletrònicu + title: Muda s'indiritzu eletrònicu de %{username} + confirm: Cunfirma + confirmed: Cunfirmadu + confirming: Cunfirmende + delete: Cantzella datos + deleted: Cantzelladu + demote: Degrada + destroyed_msg: Is datos de %{username} sunt a sa coa pro èssere cantzellados luego + disable: Disativa + disable_two_factor_authentication: Disativa 2FA + disabled: Disativadu + display_name: Nòmine visìbile + domain: Domìniu + edit: Modìfica + email: Posta eletrònica + email_status: Istadu de s'indiritzu eletrònicu + enable: Ativa + enabled: Ativadu + enabled_msg: Su contu de %{username} est istadu ativadu + followers: Sighiduras + follows: Sighende + header: Intestatzione + inbox_url: URL de intrada + invited_by: Invitu dae + ip: IP + joined: At aderidu + location: + all: Totus + local: Locale + remote: Remotu + title: Positzione + login_status: Istadu de atzessu + media_attachments: Allegados multimediales + memorialize: Cunverte in memoriam + memorialized: Memorializadu + memorialized_msg: As trasformadu %{username} in unu contu de ammentu + moderation: + active: Ativu + all: Totus + pending: De imbiare + silenced: A sa muda + suspended: Suspèndidu + title: Moderatzione + moderation_notes: Notas de moderatzione + most_recent_activity: Atividade prus reghente + most_recent_ip: IP prus reghente + no_account_selected: Perunu contu est istadu mudadu, dae chi non nd'as seletzionadu + no_limits_imposed: Sena lìmites + not_subscribed: Sena sutiscritzione + pending: De revisionare + perform_full_suspension: Suspèndidu + promote: Promove + protocol: Protocollu + public: Pùblicu + push_subscription_expires: Sa sutiscritzione PuSH iscadit + redownload: Atualiza su profilu + redownloaded_msg: Su profilu de %{username} est istadu agiornadu dae s'orìgine + reject: Refuda + reject_all: Refuda totu + rejected_msg: Sa dimanda de registru de %{username} est istada refudada + remove_avatar: Boga immàgine de profilu + remove_header: Boga s'intestatzione + removed_avatar_msg: S'immàgine de d'àvatar de %{username} est istada bogada + removed_header_msg: S'immàgine de intestatzione de %{username} est istada bogada + resend_confirmation: + already_confirmed: Custa persone est giai cunfirmada + send: Torra a imbiare messàgiu eletrònicu de cunfirmatzione + success: Messàgiu eletrònicu de cunfirmatzione imbiadu. + reset: Reseta + reset_password: Reseta sa crae + resubscribe: Torra a sutascrìere + role: Permissos + roles: + admin: Admin + moderator: Mod + staff: Personale + user: Utente + search: Chirca + search_same_email_domain: Àteras persones cun su pròpiu domìniu de posta + search_same_ip: Àteras persones cun sa pròpiu IP + sensitive: Sensìbile + sensitized: marcadu comente a sensìbile + shared_inbox_url: URL de intrada cumpartzida + show: + created_reports: Informes creados + targeted_reports: Informes de àtere + silence: Lìmita + silenced: Limitadas + statuses: Tuts + subscribe: Sutascrie·ti + suspended: Suspèndidu + suspension_irreversible: Is datos de custu contu sunt istados cantzellados in manera irreversìbile. Podes bogare sa suspensione a su contu pro chi si potzat impreare, ma no at a recuperare datu perunu de is chi teniat in antis. + suspension_reversible_hint_html: Su contu est istadu suspèndidu, e is datos ant a èssere cantzelladu de su totu su %{date}. Finas a tando, su contu si podet ripristinare sena efetu malu perunu. Si boles cantzellare totu is datos de su contu immediatamente ddu podes fàghere inoghe in bassu. + time_in_queue: Isetende in coa %{time} + title: Contos + unconfirmed_email: Posta eletrònica sena cunfirmare + undo_sensitized: Boga sa marcadura comente "sensìbile" + undo_silenced: Non pòngias a sa muda + undo_suspension: Iscontza sa suspensione + unsilenced_msg: As bogadu is lìmites a su contu de %{username} + unsubscribe: Annulla sa sutiscritzione + unsuspended_msg: As bogadu sa suspensione a su contu de %{username} + username: Nòmine utente + view_domain: Càstia unu resumu pro su domìniu + warn: Avisu + web: Web + whitelisted: Federatzione permìtida + action_logs: + action_types: + assigned_to_self_report: Assigna s'informe + change_email_user: Muda s'indiritzu eletrònicu pro s'utente + confirm_user: Cunfirma s'utente + create_account_warning: Crea un'avisu + create_announcement: Crea un'annùntziu + create_custom_emoji: Crea un'emoji personalizadu + create_domain_allow: Crea unu domìniu permìtidu + create_domain_block: Crea unu blocu de domìniu + create_email_domain_block: Crea unu blocu de domìniu de indiritzu de posta + create_ip_block: Crea una règula IP + demote_user: Degrada s'utente + destroy_announcement: Cantzella s'annùntziu + destroy_custom_emoji: Cantzella s'emoji personalizadu + destroy_domain_allow: Cantzella su domìniu permìtidu + destroy_domain_block: Cantzella su blocu de domìniu + destroy_email_domain_block: Cantzella su blocu de domìniu de s'indiritzu de posta + destroy_ip_block: Cantzella sa règula IP + destroy_status: Cantzella s'istadu + disable_2fa_user: Disativa 2FA + disable_custom_emoji: Disativa s'emoji personalizadu + disable_user: Disativa utente + enable_custom_emoji: Ativa s'emoji personalizadu + enable_user: Ativa utente + memorialize_account: Regorda su contu + promote_user: Promove utente + remove_avatar_user: Cantzella immàgine de profilu + reopen_report: Torra a abèrrere s'informe + reset_password_user: Reseta sa crae + resolve_report: Isorve s'informe + sensitive_account: Marca sos cuntenutos multimediales in su contu tuo comente sensìbile + silence_account: Pone custu contu a sa muda + suspend_account: Suspende custu contu + unassigned_report: Boga s'assignatzione de custu informe + unsensitive_account: Boga sa marcadura "sensìbiles" a is elementos multimediales in su contu tuo + unsilence_account: Boga custu contu de is contos a sa muda + unsuspend_account: Boga custu contu de is contos suspèndidos + update_announcement: Atualiza s'annùntziu + update_custom_emoji: Atualiza s'emoji personalizadu + update_status: Atualiza s'istadu + actions: + assigned_to_self_report: "%{name} s'est auto-assignadu s'informe %{target}" + change_email_user: "%{name} at mudadu s'indiritzu de posta eletrònica de s'utente %{target}" + confirm_user: "%{name} at cunfirmadu s'indiritzu de posta eletrònica de s'utente %{target}" + create_account_warning: "%{name} at imbiadu un'avisu a %{target}" + create_announcement: "%{name} at creadu un'annùntziu nou %{target}" + create_custom_emoji: "%{name} at carrigadu un'emoji nou%{target}" + create_domain_allow: "%{name} at permìtidu sa federatzione cun su domìniu %{target}" + create_domain_block: "%{name} at blocadu su domìniu %{target}" + create_email_domain_block: "%{name} at blocadu su domìniu de posta eletrònica %{target}" + create_ip_block: "%{name} at creadu una règula pro s'IP %{target}" + demote_user: "%{name} at degradadu s'utente %{target}" + destroy_announcement: "%{name} at cantzelladu s'annùntziu %{target}" + destroy_custom_emoji: "%{name} at cantzelladu s'emoji %{target}" + destroy_domain_allow: "%{name} no at permìtidu sa federatzione cun su domìniu %{target}" + destroy_domain_block: "%{name} at isblocadu su domìniu %{target}" + destroy_email_domain_block: "%{name} at isblocadu su domìniu de posta eletrònica %{target}" + destroy_ip_block: "%{name} at cantzelladu sa règula pro s'IP %{target}" + destroy_status: "%{name} at eliminadu s'istadu de %{target}" + disable_2fa_user: "%{name} at disativadu su rechisitu de duos fatores pro s'utente %{target}" + disable_custom_emoji: "%{name} at disativadu s'emoji %{target}" + disable_user: "%{name} at disativadu s'atzessu pro s'utente %{target}" + enable_custom_emoji: "%{name} at ativadu s'emoji %{target}" + enable_user: "%{name} at ativadu s'atzessu pro s'utente %{target}" + memorialize_account: "%{name} at cunvertidu su contu %{target} in una pàgina in memoriam" + promote_user: "%{name} at promòvidu s'utente %{target}" + remove_avatar_user: "%{name} at cantzelladu s'immàgine de profilu de %{target}" + reopen_report: "%{name} at torradu a abèrrere s'informe %{target}" + reset_password_user: "%{name} at restadu sa crae de s'utente %{target}" + resolve_report: "%{name} at isòrvidu s'informe %{target}" + sensitive_account: "%{name} at marcadu s'elementu multimediale de %{target} comente sensìbile" + silence_account: "%{name} at postu su contu de %{target} a sa muda" + suspend_account: "%{name} at suspèndidu su contu de %{target}" + unassigned_report: "%{name} at bogadu s'assignatzione de s'informe %{target}" + unsensitive_account: '%{name} at bogadu sa marcadura "sensìbile" a s''elementu multimediale de %{target}' + unsilence_account: "%{name} at postu su contu de %{target} a sa muda" + unsuspend_account: "%{name} at bogadu sa suspensione de su contu de %{target}" + update_announcement: "%{name} at atualizadu s'annùntziu %{target}" + update_custom_emoji: "%{name} at atualizadu s'emoji %{target}" + update_status: "%{name} at atualizadu s'istadu de %{target}" + deleted_status: "(istadu cantzelladu)" + empty: Perunu registru agatadu. + filter_by_action: Filtra pro atzione + filter_by_user: Filtra pro utente + title: Registru de controllu + announcements: + destroyed_msg: As cantzelladu s'annùntziu. + edit: + title: Modìfica s'annùntziu + empty: Perunu annùntziu agatadu. + live: In direta + new: + create: Crea un'annùntziu + title: Annùntziu nou + published_msg: As publicadu s'annùntziu. + scheduled_for: Programmadu pro %{time} + scheduled_msg: As programmadu s'annùntziu pro èssere publicadu! + title: Annùntzios + unpublished_msg: As ritiradu s'annùntziu! + updated_msg: As atualizadu s'annùntziu. + custom_emojis: + assign_category: Assigna a una categoria + by_domain: Domìniu + copied_msg: As creadu sa còpia locale de s'emoji + copy: Còpia + copy_failed_msg: Impossìbile fàghere una còpia locale de custu emoji + create_new_category: Crea una categoria noa + created_msg: As creadu s'emoji. + delete: Cantzella + destroyed_msg: As cantzelladu s'emoji. + disable: Disativa + disabled: Disativu + disabled_msg: As disativadu s'emoji + emoji: Emoji + enable: Ativa + enabled: Ativadu + enabled_msg: As ativadu s'emoji + image_hint: PNG de finas a 50 KB + list: Lista + listed: Listadu + new: + title: Agiunghe emoji personalizadu nou + not_permitted: Non tenes su permissu de fàghere custa atzione + overwrite: Subraiscrie + shortcode: Incurtzadura + shortcode_hint: Mìnimu 2 caràteres, isceti caràteres alfanumèricos e tratigheddos bàscios + title: Emojis personalizados + uncategorized: Sena categoria + unlist: Esclude de sa lista + unlisted: Esclùidu de sa lista + update_failed_msg: Impossìbile atualizare custu emoji + updated_msg: Emoji atualizadu + upload: Càrriga + dashboard: + authorized_fetch_mode: Modalidade segura + backlog: tareas arretradas + config: Cunfiguratzione + feature_deletions: Eliminatzione de contos + feature_invites: Ligàmenes de invitu + feature_profile_directory: Diretòriu de profilos + feature_registrations: Registradas + feature_relay: Ripetidore de federatzione + feature_spam_check: Anti-àliga + feature_timeline_preview: Pre-visualizatzione de sa lìnia de tempus + features: Caraterìsticas + hidden_service: Federatzione cun servìtzios cuados + open_reports: informes abertos + pending_tags: etichetas de revisionare + pending_users: persones de revisionare + recent_users: Persones reghentes + search: Chirca de testu cumpletu + single_user_mode: Modalidade de utente ùnicu + software: Programmas + space: Impreu de ispàtziu + title: Pannellu + total_users: persones in totale + trends: Tendèntzias + week_interactions: interatziones de custa chida + week_users_active: persones ativas custa chida + week_users_new: persones noas de custa chida + whitelist_mode: Modalidade de federatzione limitada + domain_allows: + add_new: Permite sa federatzione cun domìniu + created_msg: Sa federatzione cun su domìniu est istada permìtida + destroyed_msg: Sa federatzione cun su domìniu no est istada permìtida + undo: Non permitas sa federatzione cun su domìniu + domain_blocks: + add_new: Agiunghe blocu de domìniu nou + created_msg: Protzessende su blocu de domìniu + destroyed_msg: Su blocu de domìniu est istadu iscontzadu + domain: Domìniu + edit: Modìfica su blocu de su domìniu + existing_domain_block_html: As giai impostu lìmites prus astrintos a %{name}, ddu dias dèpere isblocare prima. + new: + create: Crea unu blocu + hint: Su blocu de domìniu no at a impedire sa creatzione de contos noos in sa base de datos, ma ant a èssere aplicados in manera retroativa mètodos de moderatzione ispetzìficos subra custos contos. + severity: + desc_html: "A sa muda at a pònnere is messàgios de custos contos comente invisìbiles a sa gente chi no ddi siat sighende. Sa suspensione at a cantzellare totu su cuntenutu de su contu, elementos multimediales e datos de profilu. Imprea Perunu si boles isceti refudare is archìvios multimediales." + noop: Perunu + silence: A sa muda + suspend: Suspèndidu + title: Blocu de domìniu nou + private_comment: Cummentu privadu + private_comment_hint: Lassa unu cummentu a subra de custa limitatzione de domìniu pro impreu internu de s'iscuadra de moderatzione. + public_comment: Cummentu pùblicu + public_comment_hint: Lassa unu cummentu pro su pùblicu generale a subra de custa limitatzione de su domìniu, si sa publicatzione de sa lista de limitatziones de domìniu est abilitada. + reject_media: Refuda documentos multimediales + reject_media_hint: Cantzellat documentos multimediales sarvados in locale e refudat iscarrigamentos in su benidore. Non rilevante pro is suspensiones + reject_reports: Refuda informes + reject_reports_hint: Iscarta informes chi benint de custu domìniu. Non rilevante pro is suspensiones + rejecting_media: refudende documentos multimediales + rejecting_reports: refudende informes + severity: + silence: a sa muda + suspend: suspèndidu + show: + affected_accounts: + one: Unu contu de sa base de datos implicadu + other: "%{count} contos de sa base de datos implicados" + retroactive: + silence: Boga de is contos a sa muda is contos de custu domìniu implicados + suspend: Boga sa suspensione de is contos de custu domìniu implicados + title: Iscontza su blocu de domìniu de %{domain} + undo: Iscontza + undo: Iscontza su blocu de domìniu + view: Bide su blocu de domìniu + email_domain_blocks: + add_new: Agiunghe noa + created_msg: Domìniu de posta eletrònica blocadu + delete: Cantzella + destroyed_msg: Domìniu de posta eletrònica isblocadu + domain: Domìniu + empty: Perunu domìniu de posta eletrònica blocadu. + from_html: dae %{domain} + new: + create: Agiunghe unu domìniu + title: Bloca su domìniu de posta eletrònica nou + title: Domìnios de posta eletrònica blocados + instances: + by_domain: Domìniu + delivery_available: Sa cunsigna est a disponimentu + known_accounts: + one: "%{count} contu connòschidu" + other: "%{count} contos connòschidos" + moderation: + all: Totus + limited: Limitadas + title: Moderatzione + private_comment: Cummentu privadu + public_comment: Cummentu pùblicu + title: Federatzione + total_blocked_by_us: Blocados dae nois + total_followed_by_them: Sighidos dae àtere + total_followed_by_us: Sighidos dae nois + total_reported: Informes a subra de àtere + total_storage: Allegados multimediales + invites: + deactivate_all: Disativa totu + filter: + all: Totus + available: A disponimentu + expired: Iscadidu + title: Filtru + title: Invitos + ip_blocks: + add_new: Crea una règula + created_msg: As agiuntu una règula IP noa + delete: Cantzella + expires_in: + '1209600': 2 chidas + '15778476': 6 meses + '2629746': 1 mese + '31556952': 1 annu + '86400': 1 die + '94670856': 3 annos + new: + title: Crea una règula IP noa + no_ip_block_selected: Peruna règula IP est istada mudada dae chi non nd'as seletzionadu + title: Règulas IP + pending_accounts: + title: Contos in ispera (%{count}) + relationships: + title: relatziones de %{acct} + relays: + add_new: Agiunghe unu ripetidore nou + delete: Cantzella + description_html: Unu ripetidore de federatzione est unu serbidore intermediàriu chi cuncàmbiat volùmenes mannos de tuts pùblicos intre serbidores chi si connetent e bi pùblicant. Podet agiudare a serbidores minores e medianos a iscobèrrere cuntenutu de su fediversu, in manera chi is utentes locales non tèngiant bisòngiu de sighire a manu àtera gente de serbidores remotos. + disable: Disativa + disabled: Disativu + enable: Ativa + enable_hint: Si abilitadu, su serbidore tuo at a èssere sutascritu a totu is tuts pùblicos de custu ripetidore e bi at a cumintzare a imbiare totu is tuts pùblicos de custu serbidore. + enabled: Ativadu + inbox_url: URL de su ripetidore + pending: Isetende s'aprovatzione de su ripetidore + save_and_enable: Sarva e ativa + setup: Cunfigura una connessione cun unu ripetidore + signatures_not_enabled: Is ripetidores no ant a funtzionare comente si tocat si sa modalidade segura o sa modalidade a federatzione limitada sunt abilitadas + status: Istadu + title: Ripetidores + report_notes: + created_msg: As creadu sa nota de s'informe + destroyed_msg: As cantzelladu sa nota de s'informe + reports: + account: + notes: + one: "%{count} nota" + other: "%{count} notas" + reports: + one: "%{count} informe" + other: "%{count} informes" + action_taken_by: Mesuras adotadas dae + are_you_sure: Seguru? + assign_to_self: Assigna a mie + assigned: Moderatzione assignada + by_target_domain: Domìniu de su contu signaladu + comment: + none: Perunu + created_at: Signaladu + mark_as_resolved: Marca comente a isòrvidu + mark_as_unresolved: Marcare comente a non isòrvidu + notes: + create: Agiunghe una nota + create_and_resolve: Isorve cun una nota + create_and_unresolve: Torra a abèrrere cun una nota + delete: Cantzella + placeholder: Descrie is atziones chi as pigadu o cale si siat àtera atualizatzione de importu... + reopen: Torra a abèrrere s'informe + report: 'Informe #%{id}' + reported_account: Contu signaladu + reported_by: Signaladu dae + resolved: Isòrvidu + resolved_msg: Informe isòrvidu. + status: Istadu + title: Informes + unassign: Boga s'assignatzione + unresolved: No isòrvidu + updated_at: Atualizadu + settings: + activity_api_enabled: + desc_html: Nùmeru de tuts publicados in locale, utentes ativos e registros noos in perìodos chidajolos + title: Pùblica istatìsticas agregadas subra s'atividade de s'utente + bootstrap_timeline_accounts: + desc_html: Imprea vìrgulas intre is nòmines de utente. Isceti is contos locales e isblocados ant a funtzionare. Su valore predefinidu cando est bòidu est totu is admins locales. + title: Sighidura predefinida pro persones noas + contact_information: + email: Indiritzu eletrònicu de impresa + username: Nòmine de utente de su cuntatu + custom_css: + desc_html: Modìfica s'aspetu cun CSS carrigadu in cada pàgina + title: CSS personalizadu + default_noindex: + desc_html: Ìmplicat a totu is utentes chi no apant modificadu custa cunfiguratzione + title: Esclude in manera predefinida is utentes dae s'inditzamentu de is motores de chirca + domain_blocks: + all: Pro totus + disabled: Pro nemos + title: Ammustra blocos de domìniu + users: Pro utentes locales in lìnia + domain_blocks_rationale: + title: Ammustra sa resone + enable_bootstrap_timeline_accounts: + title: Ativa s sighiduras predefinidas pro is persones noas + hero: + desc_html: Ammustradu in sa pàgina printzipale. Cussigiadu a su mancu 600x100px. Si no est cunfiguradu, at a èssere ammustradu cussu de su serbidore + title: Immàgine de eroe + mascot: + desc_html: Ammustrada in vàrias pàginas. Cussigiadu a su mancu 293x205px. Si no est cunfiguradu, torra a su personàgiu predefinidu + title: Immàgine de su personàgiu + peers_api_enabled: + desc_html: Is nòmines de domìniu chi custu serbidore at agatadu in su fediversu + title: Pùblica sa lista de serbidores iscobertos + preview_sensitive_media: + desc_html: Is antiprimas de ligòngios de àteros sitos web ant a ammustrare una miniadura mancari is mèdios de comunicatzione siant marcados comente a sensìbiles + title: Ammustra mèdios sensìbiles in sas previsualizatziones de OpenGraph + profile_directory: + desc_html: Permite a is persone de èssere iscobertas + title: Ativa diretòriu de profilos + registrations: + closed_message: + desc_html: Ammustradu in sa prima pàgina cando is registratziones sunt serradas. Podes impreare etichetas HTML + title: Messàgiu de registru serradu + deletion: + desc_html: Permite a chie si siat de cantzellare su contu suo + title: Aberi s'eliminatzione de su contu + min_invite_role: + disabled: Perunu + title: Permite invitos de + registrations_mode: + modes: + approved: Aprovatzione rechesta pro si registrare + none: Nemos si podet registrare + open: Chie si siat si podet registrare + title: Modu de registratzione + show_known_fediverse_at_about_page: + desc_html: Cando ativu, ammustrat in sa previsualizatzione is tuts de totu is istàntzias connòschidas. Si nono, ammustrat isceti is cuntenutos locales + title: Include su cuntenutu federadu in sa pàgina no autenticada de sa lìnia de tempus pùblica + show_staff_badge: + desc_html: Ammustra un'insigna de personale in sa pàgina de utente + title: Ammustra insigna de personale + site_description: + desc_html: Paràgrafu de introdutzione a s'API. Descrie ite rendet ispatziale custu serbidore de Mastodon e cale si siat àtera cosa de importu. Podes impreare etichetas HTML, mescamente <a> e <em>. + title: Descritzione de su serbidore + site_description_extended: + desc_html: Unu logu adatu pro publicare su còdighe de cumportamentu, règulas, diretivas e àteras caraterìsticas ispetzìficas de su serbidore tuo. Podes impreare etichetas HTML + title: Descritzione estèndida de su logu + site_short_description: + desc_html: Ammustradu in sa barra laterale e in is meta-etichetas. Descrie ite est Mastodon e pro ite custu serbidore est ispetziale in unu paràgrafu. + title: Descritzione curtza de su serbidore + site_terms: + desc_html: Podes iscriere sa tua normativa de riservadesa pròpia, cunditziones de servìtziu e àteras normas legales. Podes impreare etichetas HTML + title: Termes de su servìtziu personalizados + site_title: Nòmine de su serbidore + spam_check_enabled: + desc_html: Mastodon podet signalare in automàticu contos chi imbiant messàgios non rechestos in manera repetitiva. Bi podent èssere falsos positivos. + title: Automatzione anti-spam + thumbnail: + desc_html: Impreadu pro otènnere pre-visualizatziones pro mèdiu de OpenGraph e API. Cussigiadu 1200x630px + title: Miniadura de su serbidore + timeline_preview: + desc_html: Ammustra su ligàmene a sa lìnia de tempus pùblica in sa pàgina initziale e permite s'atzessu pro mèdiu de s'API a sa lìnia de tempus pùblica sena autenticatzione + title: Permite s'atzessu no autenticadu a sa lìnia de tempus pùblica + title: Cunfiguratzione de su logu + trendable_by_default: + desc_html: Tocat a is etichetas chi non siant istadas refudadas prima + title: Permite chi is etichetas divenant tendèntzia sena revisione pretzedente + trends: + desc_html: Ammustra in pùblicu is etichetas chi siant istadas revisionadas in passadu e chi oe siant in tendèntzia + title: Etichetas de tendèntzia + site_uploads: + delete: Cantzella s'archìviu carrigadu + destroyed_msg: Càrriga de su situ cantzellada. + statuses: + back_to_account: Torra a sa pàgina de su contu + batch: + delete: Cantzella + nsfw_off: Signala comente a non sensìbile + nsfw_on: Signala comente a sensìbile + deleted: Cantzelladu + failed_to_execute: Faddina in s'esecutzione + media: + title: Elementos multimediales + no_media: Perunu elementu multimediale + no_status_selected: Perunu istadu est istadu mudadu dae chi non nd'as seletzionadu + title: Istados de su contu + with_media: Cun elementos multimediales + tags: + accounts_today: Impreos ùnicos atuales + accounts_week: Impreos ùnicos de custa chida + breakdown: Detàllios de s'impreu atuale pro orìgine + context: Cuntestu + directory: In su diretòriu + in_directory: "%{count} in su diretòriu" + last_active: Ùrtima atividade + most_popular: Prus populares + most_recent: Prus reghentes + name: Eticheta + review: Revisiona s'istadu + reviewed: Revisionadas + title: Etichetas + trending_right_now: In tendèntzia immoe + unique_uses_today: "%{count} publicatziones de oe" + unreviewed: Sena revisionare + updated_msg: Cunfiguratzione de etichetas atualizada + title: Amministratzione + warning_presets: + add_new: Agiunghe noa + delete: Cantzella + edit_preset: Modìfica s'avisu predefinidu + title: Gesti is cunfiguratziones predefinidas de is avisos + admin_mailer: + new_pending_account: + body: Is detàllios de su contu nou sunt a suta. Podes aprovare o refudare custa rechesta. + subject: Contu nou de revisionare in %{instance} (%{username}) + new_report: + body: "%{reporter} at signaladu %{target}" + body_remote: Calicunu de su domìniu %{domain} at signaladu %{target} + subject: Informe nou pro %{instance} (#%{id}) + new_trending_tag: + body: 'S''eticheta #%{name} est in tendèntzia oe, ma non est istada revisionada in passadu. No at a èssere ammustrada in pùblicu francu chi ddu permitas; si sarvas formulàriu sena ddu modificare no ddu as a bìdere mai prus.' + subject: Eticheta noa de revisionare in %{instance} (#%{name}) + aliases: + add_new: Crea unu nomìngiu + created_msg: Nomìngiu creadu. Immoe podes cumintzare a tramudare dae su contu betzu. + deleted_msg: Nomìngiu bogadu. Sa tràmuda dae cussu contu a custu no at a èssere prus possìbile. + empty: No tenes perunu nomìngiu. + hint_html: Si boles mudare dae un'àteru contu a custu, inoghe as a pòdere creare unu nomìngiu, chi est rechestu in antis de sighire cun sa tràmuda de is persones chi ti sighint dae su contu betzu a custu. Custa atzione est innòcua e reversìbile. Tràmuda de su contu betzu cumintzada. + remove: Disconnete su nomìngiu + appearance: + advanced_web_interface: Interfache web avantzada + advanced_web_interface_hint: 'Si impreare totu sa largària de s''ischermu, s''interfache web avantzada ti permitit de cunfigurare diversas colunnas pro bìdere meda prus informatzione in contemporànea: printzipale, notìficas, lìnia de tempus federada e cale si siat nùmeru de listas e etichetas.' + animations_and_accessibility: Animatziones e atzessibilidade + confirmation_dialogs: Diàlogos de cunfirmatzione + discovery: Iscoberta + localization: + body: Mastodon est bortadu in manera voluntària. + guide_link: https://crowdin.com/project/mastodon + guide_link_text: Chie si siat podet contribuire. + sensitive_content: Cuntenutu sensìbile + toot_layout: Dispositzione de is tuts + application_mailer: + notification_preferences: Muda is preferèntzias de posta + salutation: "%{name}," + settings: 'Muda is preferèntzias de posta: %{link}' + view: 'Visualizatzione:' + view_profile: Visualiza profilu + view_status: Ammustra s'istadu + applications: + created: Aplicatzione creada + destroyed: Aplicatzione cantzellada + invalid_url: S'URL frunidu no est curretu + regenerate_token: Torra a generare s'identificadore de atzessu + token_regenerated: Identificadore de atzessu generadu + warning: Dae cara a custos datos. Non ddos cumpartzas mai cun nemos! + your_token: S'identificadore tuo de atzessu + auth: + apply_for_account: Pedi un'invitu + change_password: Crae + checkbox_agreement_html: So de acòrdiu cun is règulas de su serbidore e is cunditziones de su servìtziu + checkbox_agreement_without_rules_html: So de acòrdiu cun is cunditziones de su servìtziu + delete_account: Cantzella su contu + delete_account_html: Si boles cantzellare su contu, ddu podes fàghere inoghe. T'amus a dimandare una cunfirmatzione. + description: + prefix_invited_by_user: "@%{name} t'at invitadu a custu serbidore de Mastodon!" + prefix_sign_up: Registra·ti oe a Mastodon! + suffix: Cun unu contu as a pòdere sighire gente, publicare e cuncambiare messàgios cun persones de cale si siat serbidore de Mastodon e àteru! + didnt_get_confirmation: No as retzidu su messàgiu de cunfirmatzione? + dont_have_your_security_key: Non tenes sa crae de seguresa tua? + forgot_password: Ti ses iscarèssidu de sa crae? + invalid_reset_password_token: Su còdighe de autorizatzione pro resetare sa crae no est vàlidu o est iscadidu. Dimanda·nde un'àteru. + link_to_otp: Inserta unu còdighe a duas fases dae su telèfono tuo o unu còdighe de recùperu + link_to_webauth: Imprea su dispositivu tuo de crae de seguresa + login: Intra + logout: Essi + migrate_account: Moe a unu contu diferente + migrate_account_html: Si boles torrare a indiritzare custu contu a un'àteru, ddu as a pòdere fàghere inoghe. + or_log_in_with: O intra cun + providers: + cas: CAS + saml: SAML + register: Registru + registration_closed: "%{instance} no atzetat àteras persones" + resend_confirmation: Torra a imbiare is istrutziones de cunfirmatzione + reset_password: Reseta sa crae + security: Seguresa + set_new_password: Cunfigura una crae noa + setup: + email_below_hint_html: Si s'indiritzu de posta eletrònica imbeniente no est curreta, dda podes mudare inoghe e as a retzire unu messàgiu de cunfirmatzione nou. + email_settings_hint_html: Messàgiu de cunfirmatzione imbiadu a %{email}. Si custu indiritzu de posta eletrònica no est curretu, ddu podes mudare dae is cunfiguratziones de su contu. + title: Cunfiguratzione + status: + account_status: Istadu de su contu + confirming: Isetende chi sa posta eletrònica siat cumpletada. + functional: Su contu tuo est operativu. + pending: Sa dimanda tua est in protzessu de revisione dae su personale nostru. Podet serbire unu pagu de tempus. As a retzire unu messàgiu eletrònicu si sa dimanda est aprovada. + redirecting_to: Su contu tuo est inativu ca in die de oe est torrende a indiritzare a %{acct}. + too_fast: Mòdulu imbiadu tropu a lestru, torra a proare. + trouble_logging_in: Tenes problemas de atzessu? + use_security_key: Imprea una crae de seguresa + authorize_follow: + already_following: Ses giai sighende custu contu + already_requested: As giai imbiadu una dimanda de sighidura a custa persone + error: Faddina in sa chirca de su contu remotu + follow: Sighi + follow_request: 'As imbiadu una dimanda de sighidura a:' + following: 'Fatu! Immoe ses sighende:' + post_follow: + close: O, podes serrare custa ventana. + return: Ammustra su profilu de custa persone + web: Bae a su situ web + title: Sighi %{acct} + challenge: + confirm: Sighi + hint_html: "Cussìgiu: No t'amus a torrare a dimandare sa crae in s'ora imbeniente." + invalid_password: Sa crae no est vàlida + prompt: Cunfirma sa crae pro sighire + crypto: + errors: + invalid_key: no est una crae Ed25519 o Curve25519 vàlida + invalid_signature: no est una firma Ed25519 vàlida + date: + formats: + default: "%d %b %Y" + with_month_name: "%d %B %Y" + datetime: + distance_in_words: + about_x_hours: "%{count} o" + about_x_months: "%{count} me" + about_x_years: "%{count} an" + almost_x_years: "%{count} an" + half_a_minute: Immoe etotu + less_than_x_minutes: "%{count} m" + less_than_x_seconds: Immoe etotu + over_x_years: "%{count} an" + x_days: "%{count} d" + x_minutes: "%{count} m" + x_months: "%{count} me" + x_seconds: "%{count} s" + deletes: + challenge_not_passed: S'informatzione insertada no est curreta + confirm_password: Inserta·nche sa crae atuale pro verificare s'identidade + confirm_username: Iscrie su nòmine de utente tuo cunfirmare su protzedimentu + proceed: Cantzella su contu + success_msg: Contu cantzelladu + warning: + before: 'In antis de sighire, leghe custu cun atentzione:' + caches: Su cuntenutu chi siat istadu sarvadu in sa memòria temporànea de àteros serbidores podet sighire a esìstere + data_removal: Is publicatziones tuas e àteros datos ant a èssere cantzellados in manera permanente + email_change_html: Podes mudare s'indiritzu tuo de posta eletrònica sena cantzellare su contu + email_contact_html: Si no est ancora arribada, podes imbiare unu messàgiu a %{email} e dimandare agiudu + email_reconfirmation_html: Si no ses retzende su messàgiu de cunfirmatzione, ddu podes torrare a dimandare + irreversible: No as a pòdere ripristinare o torrare a ativare su contu tuo + more_details_html: Pro àteros detàllios, bide sa normativa de riservadesa. + username_available: Su nòmine de utente tuo at a torrare a èssere a disponimentu + username_unavailable: Su nòmine de utente tuo no at a abarrare a disponimentu + directories: + directory: Diretòriu de profilos + explanation: Iscoberi gente segundu is interessos suos + explore_mastodon: Esplora %{title} + domain_validator: + invalid_domain: no est unu nòmine de domìniu vàlidu errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '422': - '429': Too many requests - '500': - '503': The page could not be served due to a temporary server failure. + '400': Sa dimanda chi as imbiadu non fiat vàlida o non fiat curreta. + '403': Non tenes permissu pro bìdere custa pàgina. + '404': Sa pàgina chi ses chirchende no est inoghe. + '406': Custa pàgina no est a disponimentu in su formadu chi as pregontadu. + '410': Sa pàgina chi ses chirchende no esistet prus. + '422': + content: Faddina in sa verìfica de seguresa. Ses blochende is boboettos? + title: Faddina in sa verìfica de seguresa + '429': Tropu rechestas + '500': + content: Faddina dae s'ala nostra. + title: Custa pàgina no est curreta + '503': Faddina in sa trasmissione de sa pàgina pro more de una faddina temporànea de su serbidore. + noscript_html: Pro impreare s'aplicatzione web de Mastodon, ativa JavaScript. In alternativa, proa una de is aplicatziones nativas pro Mastodon in sa prataforma tua. + existing_username_validator: + not_found: impossìbile agatare utentes locales cun cussu nòmine + not_found_multiple: impossìbile agatare %{usernames} + exports: + archive_takeout: + date: Data + download: Iscàrriga s'archìviu + hint_html: Podes dimandare un'archìviu cun is tuts tuos e is mèdias chi as carrigadu. Is datos sunt in formadu ActivityPub, leghìbile dae is programmas cumpatìbiles. Podes pregontare un'archìviu cada 7 dies. + in_progress: Compilende s'archìviu tuo... + request: Pregonta s'archìviu tuo + size: Mannària + blocks: Ses blochende + bookmarks: Sinnalibros + csv: CSV + domain_blocks: Blocos de domìnios + lists: Listas + mutes: Ses ponende a sa muda + storage: Immagasinamentu + featured_tags: + add_new: Agiunghe noa + errors: + limit: As giai evidentziadu sa cantidade màssima de etichetas + hint_html: "Ite sunt is etichetas in evidèntzia? Sunt ammustradas in evidèntzia in su profilu pùblicu tuo e permitint a sa gente de navigare is messàgios pùblicos tuos in cussas etichetas ispetzìficas. Sunt un'aina perfeta pro tènnere unu registru de òperas creativas o progetos longos." + filters: + contexts: + account: Profilos + home: Pàgina printzipale e listas + notifications: Notìficas + public: Lìnias de tempos pùblicas + thread: Arresonadas + edit: + title: Modìfica filtru + errors: + invalid_context: Cuntestu mancante o non vàlidu + invalid_irreversible: Su filtràgiu non reversìbile funtzionat isceti in is cuntestos printzipale o de notìficas + index: + delete: Cantzella + empty: Non tenes perunu filtru. + title: Filtros + new: + title: Agiunghe unu filtru nou + footer: + developers: Iscuadra de isvilupu + more: Àteru… + resources: Resursas + trending_now: Est tendèntzia immoe + generic: + all: Totus + changes_saved_msg: Modìficas sarvadas. + copy: Còpia + delete: Cantzella + no_batch_actions_available: Peruna atzione in blocu a disponimentu dae custa pàgina + order_by: Òrdina pro + save_changes: Sarva is modìficas + validation_errors: + one: Calicuna cosa ancora no est andende. Bide sa faddina in bàsciu + other: Calicuna cosa ancora no est andende. Bide is %{count} faddinas in bàsciu + html_validator: + invalid_markup: 'cuntenet etichetas HTML non vàlidas: %{error}' + identity_proofs: + active: Ativu + authorize: Eja, autoriza + authorize_connection_prompt: Boles autorizare custa connessione critografada? + errors: + failed: Faddina in sa connessione critografada. Torra·bi a proare dae %{provider}. + keybase: + invalid_token: Is còdighes de autorizatzione de Keybase sunt hash de firmas e depent tènnere 66 caràteres esadetzimales + verification_failed: Keybase non reconnoschet custu còdighe de autorizatzione che a firma de s'utente de Keybase %{kb_username}. Torra·bi a proare dae Keybase. + wrong_user: Impossìbile creare una proa pro %{proving} cando as fatu s'atzessu che a %{current}. Intra che a %{proving} e torra·bi a proare. + explanation_html: Inoghe podes collegare critograficamente is àteras identidades tuas dae àteras prataformas, che a Keybase. Custu permitit a àteras persones de t'imbiare messàgios tzifrados in cussas prataformas e de tènnere sa seguresa chi sos cuntenutos chi lis mandas benit dae tene. + i_am_html: So %{username} in %{service}. + identity: Identidade + inactive: Inativu + publicize_checkbox: 'E imbiat custu tut:' + publicize_toot: 'Verificadu! So %{username} in %{service}: %{url}' + remove: Boga sa proa dae su contu + removed: Proa bogada dae su contu + status: Istadu de verìfica + view_proof: Bìdere sa proa + imports: + modes: + merge: Uni + merge_long: Mantene is registros chi esistint e agiunghe·nde àteros + overwrite: Subraiscrie + overwrite_long: Sostitui is registros atuales cun cussos noos + preface: Podes importare datos chi as esportadu dae unu àteru serbidore, che a sa lista de sa gente chi ses sighende o blochende. + success: Datos carrigados; ant a èssere protzessados luego + types: + blocking: Lista de blocados + bookmarks: Sinnalibros + domain_blocking: Lista domìnios blocados + following: Lista de sighiduras + muting: Lista gente a sa muda + upload: Càrriga + in_memoriam_html: In memoriam. + invites: + delete: Disativa + expired: Iscadidu + expires_in: + '1800': 30 minutos + '21600': 6 oras + '3600': 1 ora + '43200': 12 oras + '604800': 1 chida + '86400': 1 die + expires_in_prompt: Mai + generate: Gènera ligàmene de invitu + invited_by: 'As retzidu unu messàgiu de invitu dae:' + max_uses: + one: 1 impreu + other: "%{count} impreos" + max_uses_prompt: Sena lìmite + prompt: Gènera e cumpartzi ligàmenes cun àteras persones pro dare atzessu a custu serbidore + table: + expires_at: Iscadit + uses: Impreos + title: Invita gente + lists: + errors: + limit: Cantidade màssima de listas cròmpida + media_attachments: + validations: + images_and_video: Non si podet allegare unu vìdeu in una publicatzione chi cuntenet giai immàgines + not_ready: Impossìbile allegare archìvios chi no siant istados protzessados in manera totale. Torra·bi a proare a pustis + too_many: Impossìbile allegare prus de 4 archìvios + migrations: + acct: Mòidu a + cancel: Annulla s'indiritzamentu + cancel_explanation: Si annullas s'indiritzamentu, su contu tuo at a èssere torradu a ativare, però is sighiduras chi apas tramudadu a cussu contu no ant a pòdere èssere recuperadas. + cancelled_msg: Indiritzamentu annulladu. + errors: + already_moved: est su pròpiu contu a su chi as giai tramudadu + missing_also_known_as: no est unu nomìngiu de custu countu + move_to_self: non podet èssere su contu atuale + not_found: no agatadu + on_cooldown: Ses in perìodu de pàusa intre una tràmuda e s'àtera + followers_count: Gente chi ti sighiat in su momentu de sa tràmuda + incoming_migrations: Tramudada dae unu contu diferente + incoming_migrations_html: Pro tramudare cuntenutos dae un'àteru contu a custu, prima depes creare unu nomìngiu. + moved_msg: Su contu tuo immoe est torrende a indiritzare a %{acct} e sa gente chi ti sighit at a èssere tramudada. + not_redirecting: Su contu tuo no est torrende a indiritzare a perunu àteru contu immoe. + on_cooldown: As tramudadu su contu tuo de reghente. Custa funtzionalidade at a torrare a èssere a disponimentu de immoe a %{count} dies. + past_migrations: Tràmudas pretzedentes + proceed_with_move: Tràmuda sa gente chi ti sighit + redirected_msg: Su contu tuo immoe est torrende a indiritzare a %{acct}. + redirecting_to: Su contu tuo est torrende a indiritzare a %{acct}. + set_redirect: Cunfigura s'indiritzamentu + warning: + backreference_required: Su contu nou depet èssere prima cunfiguradu pro pòdere fàghere riferimentu a custu + before: 'In antis de sighire, leghe custu cun atentzione:' + cooldown: A pustis de tramudare, ddoe at a èssere unu perìodu de pàusa in su chi no as a pòdere torrare a tramudare + disabled_account: A pustis, su contu atuale tuo no at a èssere prus operativu in manera cumpleta. Sende gasi, as a tènnere atzessu a s'esportatzione de datos e a sa re-ativatzione. + followers: Custa atzione at a tramudare totu sa gente chi ti sighit dae su contu atuale a su contu nou + only_redirect_html: In alternativa, podes isceti cunfigurare un'indiritzamentu in su profilu tuo. + other_data: Perunu àteru datu at a èssere tramudadu in automàticu + redirect: Su profilu de su contu atuale tuo at a èssere atualizadu cun un'avisu de indiritzamentu e at a èssere esclùidu dae is chircas + moderation: + title: Moderatzione + move_handler: + carry_blocks_over_text: Custu utente s'est tramudadu dae %{acct}, chi as blocadu. + carry_mutes_over_text: Custu utente s'est tramudadu dae %{acct}, chi as impostadu a sa muda. + copy_account_note_text: 'Custu utente s''est tramudadu dae %{acct}, custas sunt sas notas antepostas tuas chi li pertocant:' + notification_mailer: + digest: + action: Ammustra totu is notìficas + body: Custu est unu resumu de su chi ti est sutzèdidu dae sa visita ùrtima tua su %{since} + mention: "%{name} t'at mentovadu in:" + new_followers_summary: + one: In prus, %{count} persone noa ti sighit dae cando fias assente. Incredìbile! + other: In prus, %{count} persones noas ti sighint dae cando fias assente. Incredìbile! + subject: + one: "1 notìfica noa dae s'ùrtima visita tua \U0001F418" + other: "%{count} notìficas noas dae s'ùrtima visita tua \U0001F418" + title: Durante s'ausèntzia tua... + favourite: + body: "%{name} at marcadu comente a preferidu s'istadu tuo:" + subject: "%{name} at marcadu comente a preferidu s'istadu tuo" + title: Preferidu nou + follow: + body: "%{name} t'est sighende!" + subject: "%{name} t'est sighende" + title: Una sighidura noa + follow_request: + action: Gesti is rechestas de sighidura + body: "%{name} at rechestu de ti sighire" + subject: 'Sighidura in ispera: %{name}' + title: Rechesta de sighidura noa + mention: + action: Risponde + body: "%{name} t'at mentovadu in:" + subject: "%{name} t'at mentovadu" + title: Mentovu nou + reblog: + body: "%{name} at cumpartzidu s'istadu tuo:" + subject: "%{name} at cumpartzidu s'istadu tuo" + title: Cumpartzidura noa + notifications: + email_events: Eventos pro notìficas cun posta eletrònica + email_events_hint: 'Seletziona eventos pro is chi boles retzire notìficas:' + other_settings: Àteras configuratziones de notìficas + number: + human: + decimal_units: + format: "%n%u" + units: + billion: Mrd + million: M + quadrillion: Blr + thousand: m + trillion: Bln + otp_authentication: + code_hint: Inserta·nche su còdighe generadu dae s'aplicatzione di autenticatzione pro cunfirmare + description_html: Si as a abilitare s'autenticatzione in duas fases impreende un'aplicatzione de autenticatzione, pro s'intrada as a dèpere tènnere in fatu su telèfonu tuo, chi at a ingendrare getones pro ti fàghere intrare. + enable: Ativa + instructions_html: "Iscansi custu còdighe QR in s'autenticadore de Google o in un'aplicatzione TOTP simigiante in su telèfonu tuo. Dae como a in antis, cuss'aplicatzione at a ingendrare getones chi as a dèpere insertare pro pòdere fàghere s'atzessu." + manual_instructions: 'Si non podet iscansire su còdighe QR e tenes bisòngiu de dd''insertare manualmente, inoghe ddoe est su còdighe segretu in testu craru:' + setup: Cunfigura + wrong_code: Su còdighe insertadu no est vàlidu! S'ora de su serbidore e de su dispositivu sunt curretas? + pagination: + newer: Prus reghente + next: Sighi + older: Prus betzu + prev: A coa + truncate: "…" + polls: + errors: + already_voted: As giai votadu in custu sondàgiu + duplicate_options: cuntenet elementos duplicados + duration_too_long: est tropu a tesu in su benidore + duration_too_short: est tropu chitzi + expired: Su sondàgiu est giai concruidu + invalid_choice: Su sèberu de votu chi as seberadu no esistet + over_character_limit: non podet èssere superiore a %{max} caràteres cadaunu + too_few_options: depet tènnere prus de un'elementu + too_many_options: non podet cuntènnere prus de %{max} elementos + preferences: + other: Àteru + posting_defaults: Valores predefinidos de publicatzione + public_timelines: Lìnias de tempos pùblicas + reactions: + errors: + limit_reached: Lìmite de reatziones diferentes cròmpidu + unrecognized_emoji: no est un'emoji reconnotu + relationships: + activity: Atividade de su contu + dormant: Firmu + follow_selected_followers: Sighi is persones seletzionadas + followers: Sighiduras + following: Sighende + invited: Invitos + last_active: Ùrtima atividade + most_recent: Prus reghentes + moved: Tramudadu + mutual: Pari-pari + primary: Primàriu + relationship: Relatzione + remove_selected_domains: Boga totu is sighiduras de is domìnios seletzionados + remove_selected_followers: Boga is sighiduras seletzionadas + remove_selected_follows: Non sigas prus is persones seletzionadas + status: Istadu de su contu + remote_follow: + acct: Inserta·nche s'utente@domìniu tuo dae su chi boles sighire custa persone + missing_resource: Impossìbile agatare sa rechesta de indiritzamentu URL pro su contu tuo + no_account_html: Non tenes ancora unu contu? Ti podes registrare inoghe + proceed: Cumintza a sighire + prompt: 'As a sighire a:' + reason_html: "Pro ite serbit custu? Podet èssere chi %{instance} non siat su serbidore aunde ses registradu, pro custu tenimus bisòngiu de ti torrare a indiritzare prima a su serbidore tuo." + remote_interaction: + favourite: + proceed: Sighi pro marcare che a preferidu + prompt: 'Boles marcare comente a preferidu custu tut:' + reblog: + proceed: Sighi pro cumpartzire + prompt: 'Boles cumpartzire custu tut:' + reply: + proceed: Sighi pro rispòndere + prompt: 'Boles rispòndere a custu tut:' + scheduled_statuses: + over_daily_limit: As superadu su lìmite de %{limit} tuts programmados pro cudda die + over_total_limit: As superadu su lìmite de %{limit} tuts programmados + too_soon: Sa data programmada depet èssere benidora + sessions: + activity: Ùrtima atividade + browser: Navigadore + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Navigadore disconnotu + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Navigadore Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Sessione atuale + description: "%{browser} de %{platform}" + explanation: Custos sunt is navigadores web de is chi ses intradu in su contu tuo de Mastodon. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS + other: prataforma disconnota + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Rèvoca + revoke_success: Sessione revocada + title: Sessiones + settings: + account: Contu + account_settings: Cunfiguratziones de su contu + aliases: Nomìngios de su contu + appearance: Aspetu + authorized_apps: Aplicatziones autorizadas + back: Torra a Mastodon + delete: Eliminatzione de su contu + development: Isvilupu + edit_profile: Modìfica profilu + export: Esportatzione de datos + featured_tags: Etichetas in evidèntzia + identity_proofs: Proas de identidade + import: Importatzione + import_and_export: Importatzione e esportatzione + migrate: Tràmuda de contu + notifications: Notìficas + preferences: Preferèntzias + profile: Profilu + relationships: Persones chi sighis e chi ti sighint + two_factor_authentication: Autenticatzione de duos fatores + webauthn_authentication: Craes de seguresa + spam_check: + spam_detected: Custu est un'informe automàticu. Àliga rilevada. + statuses: + attached: + audio: + one: "%{count} àudio" + other: "%{count} àudios" + description: 'Allegadu: %{attached}' + image: + one: "%{count} immàgine" + other: "%{count} immàgines" + video: + one: "%{count} vìdeu" + other: "%{count} vìdeos" + boosted_from_html: Cumpartzidu dae %{acct_link} + content_warning: 'Avisu de cuntenutu: %{warning}' + disallowed_hashtags: + one: 'cuntenet un''eticheta non permìtida: %{tags}' + other: 'cuntenet is etichetas non permìtidas: %{tags}' + errors: + in_reply_not_found: Ses chirchende de rispòndere a unu tut chi no esistit prus. + language_detection: Rileva sa limba in automàticu + open_in_web: Aberi in sa web + over_character_limit: lìmite de caràteres de %{max} superadu + pin_errors: + limit: As giai apicadu su nùmeru màssimu de tuts + ownership: Is tuts de àtere non podent èssere apicados + private: Is tuts non pùblicos non podent èssere apicados + reblog: Is cumpartziduras non podent èssere apicadas + poll: + total_people: + one: "%{count} persone" + other: "%{count} persones" + total_votes: + one: "%{count} votu" + other: "%{count} votos" + vote: Vota + show_more: Ammustra·nde prus + show_newer: Ammustra is prus noos + show_older: Ammustra is prus betzos + show_thread: Ammustra su tema + sign_in_to_participate: Cumintzat sa sessione pro partetzipare in s'arresonada + title: '%{name}: "%{quote}"' + visibilities: + private: Isceti pro chie ti sighit + private_long: Ammustra isceti a chie ti sighit + public: Pùblicu + public_long: Podet èssere bidu dae chie si siat + unlisted: Esclùidu de sa lista + unlisted_long: Podet èssere bidu dae chie si siat, però non podet èssere ammustradu in lìnias de tempus pùblicas + stream_entries: + pinned: Tut apicadu + reblogged: cumpartzidu + sensitive_content: Cuntenutu sensìbile + tags: + does_not_match_previous_name: non cointzidet cun su nòmine anteriore + terms: + body_html: | +

Polìtica de riservadesa

+

Ite informatziones collimus?

+ +
    +
  • Informatziones de base de su contu: Si t'as a registrare in custu serbidore, ti diant pòdere pedire de insertare unu nòmine utente, un'indiritzu de posta eletrònica e una crae de intrada. Dias pòdere insertare fintzas àteras informatziones de profilu, che a unu nòmine de ammustrare e una biografia, e carrigare un'immàgine de profilu e una de cobertedda. Su nòmine utente, cussu ammustradu, sa biografia, s'immàgine de profilu e de cobertedda sunt semper allistados in pùblicu.
  • +
  • Publicatziones, sighidores e àteras informatziones pùblicas: Sa lista de is persones chi sighis est allistada in pùblicu, e sa matessi cosa balet pro is chi ti sighint. Cando imbias unu messàgiu sa data e s'ora benint sarbadas, gasi comente s'aplicatzione dae sa cale as imbiadu su messàgiu. Is messàgios diant pòdere cuntènnere cuntenutos multimediales allongiados, che a immàgines e vìdeos. Is publicatziones pùblicas e no allistadas sunt a disponimentu in abertu. Cando ammustras una publicatzione in su profilu tuo, fintzas cussa est un'informatzione a disponimentu pùblicu. Is publicatziones tuas benint imbiadas a is sighidores tuos, cosa chi a bortas bolet nàrrere chi benint intregadas a serbidores diferentes chi nde sarbant còpias in cue. Cando cantzellas publicatziones, custu acontessimentu benit imbiadu fintzas issu a is sighidores tuos. S'atzione de torrare a cumpartzire o de pònnere in is preferidos un'àtera publicatzione est semper pùblica.
  • +
  • Publicatziones diretas e pro is sighidores ebbia: Totu is publicatziones benint archiviadas e protzessadas in su serbidore. Is publicatziones pro is sighidores ebbia benint intregadas a is sighidores tuos e a is utentes chi ddoe sunt mentovados in intro, e is publicatziones diretas benint intregadas isceti a is sighidores chi ddoe sunt mentovados in intro. In unos cantos casos bolet nàrrere chi benint intregados a serbidores diferentes e chi còpias issoro benint sarvadas in cue. Nois chircamus de limitare s'atzessu a custas publicatziones a is persones autorizadas ebbia, ma àteros serbidores bi diant pòdere non resessere. Pro custa resone est de importu mannu su de revisionare is serbidores a is cales faghent parte is sighidores tuos. Podes impreare un'optzione pro aprovare o refudare in manera automàtica sighidores noos in is cunfiguratziones. Ammenta·ti chi is operadores de su serbidore e cale si siat serbidore chi ddos retzit podent castiare custos messàgios, e chi is retzidores ddos diant pòdere sarvare faghende caturas, copiende·los o torrende·los a cumpartzire in àteras maneras. Non cumpartzas peruna informatzione perigulosa impreende Mastodon.
  • +
  • IP e àteros metadatos: Cando intras in su contu tuo sarvamus s'indiritzu IP dae su cale lu ses faghende, e fintzas su nòmine de s'aplicatzione chi impreas comente navigadore. Totu is sessiones de atzessu abertas sunt a disponimentu pro sa revisione e sa rèvoca in is cunfiguratziones tuas. S'ùrtimu indiritzu IP impreadu benit sarvadu finas a 12 meses. Diamus pòdere archiviare fintzas raportos chi includent is indiritzos IP de totu is rechestas a su serbidore nostru.
  • +
+ +
+ +

Pro ite cosas impreamus is informatziones tuas?

+ +

Totu is informatziones chi collimus dae tene diat pòdere èssere impreadas in is maneras chi sighint:

+ +
    +
  • Pro frunire sa funtzionalidade de base de Mastodon. Podes interagire cun is cuntenutos de is àteras persones, e cumpartzire is tuos, isceti cando ses intradu in su contu tuo. A esèmpiu, podes sighire àteras persones pro castiare is publicatziones cumbinadas issoro in sa lìnia de tempus personalizada printzipale tua.
  • +
  • Pro agiudare sa moderatzione de sa comunidade, a esèmpiu cunfrontende s'indiritzu IP tuo cun àteros giai connotos pro verificare evasiones de blocos o àteras violatziones.
  • +
  • S'indiritzu de posta eletrònica chi as a frunire diat pòdere èssere impreadu pro t'imbiare informatziones, notìficas a pitzu de àteras persones chi ant a interagire cun is cuntenutos tuos o chi t'ant a imbiare messàgios, e pro rispòndere a interrogativos e/o àteras rechestas o preguntas.
  • +
+ +
+ +

Comente amparamus is informatziones tuas?

+ +

Impreamus medidas de seguresa vàrias pro amparare sa seguresa de is informatziones personales tuas cando insertas o imbias is informatziones personales tuas, o cando b'atzedes. In paris a àteras cosas, sa sessione de su navigadore tuo, e fintzas su tràficu intre s'aplicatzione tua e s'API, benint amparados cun SSL, e sa crae tua benit tzifrada impreende un'algoritmu forte a una diretzione. Pro afortiare sa seguresa de s'atzessu a su contu tuo galu de prus podes abilitare s'autenticatzione in duos fatores.

+ +
+ +

Cale est sa polìtica nostra de archiviatzione de is datos?

+ +

Amus a fàghere un'isfortzu in fide bona pro chircare de:

+ +
    +
  • Mantènnere in archìviu is raportos chi cuntenent is indiritzos IP de totu is rechestas a custu serbidore, cando cussas rechestas benint registradas, pro non prus de 90 dies.
  • +
  • Mantènnere in archìviu is indiritzos IP assotziados a is utentes registrados pro non prus de 12 meses.
  • +
+ +

Podes pedire e iscarrigare un'archìviu de is cuntenutos tuos chi includet is publicatziones tuas, is elementos multimediales allongiados, s'immàgine de profilu e cussa de cobertedda.

+ +

Podes cantzellare su contu tuo in manera irreversìbile in cale si siat momentu.

+ +
+ +

Impreamus is testimòngios?

+ +

Eja. Is testimòngios ("cookies") sunt documentos minores chi unu situ o su frunidore de servìtzios suos tramudant a su discu tèteru de s'elaboradore tuo pro mèdiu de su navigadore web tuo (si bi lu permitis). Custos testimòngios permitint a su situ de reconnòschere su navigadore tuo e, si tenes unu contu registradu, de dd'assotziare cun su contu tuo.

+ +

Impreamus is testimòngios pro cumprèndere e sarvare is preferèntzias tuas pro is bìsitas imbenientes.

+ +
+ +

Rivelamus carchi informatzione a tertzas partes?

+ +

Non bendimus, cuncambiamus, o tramudamus in àteras maneras is informatziones tuas chi ti diant pòdere individuare in manera personale. Custu no incluit sugetos de tertzas partes fidados chi nos agiudant a amministrare su situ, fàghere is fainas nostras, o a t'agiudare, finas a cando cussos sugetos atzetant de mantènnere cunfidentziales cussas informatziones. Diamus fintzas pòdere frunire is informatziones tuas si amus a èssere cumbintos chi siat apropriadu pro sighire is leges, aplicare is polìticas de su situ nostru, e amparare is deretos, propiedades o seguresas nostros o de àteros.

+ +

Is cuntenutos pùblicos tuos diant pòdere èssere iscarrigados dae àteros serbidores in sa retza. Is publicatziones pùblicas e pro is sighidores ebbia benint intregadas a is serbidores in ue istant is retzidores, si istant in unu serbidore chi no est custu.

+ +

Cando autorizas un'aplicatzione a impreare su contu tuo, a segunda de sa mannària de is permissos chi frunis, cussa diat pòdere atzèdere a is informatziones pùblicas de profilu tuas, a sa lista de is persones chi sighis e chi ti sighint, a is listas tuas, a totu is publicatziones tuas e a is referidos tuos. Is aplicatziones non podent mai tènnere atzessu a s'indiritzu de posta eletrònica tuo e a sa crae de intrada tua.

+ +
+ +

Impreu de custu situ dae arte de pitzinnos

+ +

Si custu serbidore est in s'UE o in s'ÀEE: Su situ nostru, is produtos nostros e is servìtzios nostros sunt totu cantos pensados pro persones chi tenent a su mancu 16 annos de edade. Si tenes de mancu de 16 annos, in aplicatzione de is rechisitos de su GDPR (General Data Protection Regulation) no imprees custu situ.

+ +

Si custu serbidore est in sos IUA: Su situ nostru, is produtos e is servìtzios suos sunt totu cantos pensados pro persones chi tenent a su mancu 13 annos de edade. Si tenes de mancu de 13 annos, in aplicatzione de su COPPA (Children's Online Privacy Protection Act) no imprees custu situ.

+ +

Is rechisidos de sa lege diant pòdere èssere diferentes si custu serbidore est in suta de un'àtera giurisditzione.

+ +
+ +

Modìficas a sa polìtica de riservadesa nostra

+ +

Si amus a isseberare de cambiare sa polìtica de riservadesa nostra amus a publicare is modìficas in custa pàgina.

+ +

Custu documentu tenet una litzèntzia CC-BY-SA. Est istadu agiornadu s'ùrtima borta su 7 de martzu de su 2018.

+ +

Adatadu, in orìgine, dae sa Polìtica de riservadesa de Discourse.

+ title: "%{instance} Cunditziones de su servìtziu e polìtica de riservadesa" + themes: + contrast: Mastodon (cuntrastu artu) + default: Mastodon (iscuru) + mastodon-light: Mastodon (craru) + time: + formats: + default: "%d %b %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + add: Agiunghe + disable: Disativa 2FA + disabled_success: Autenticatzione de duos fatores disativada + edit: Modìfica + enabled: Autenticatzione de duos fatores ativada + enabled_success: Autenticatzione de duos fatores ativada + generate_recovery_codes: Gènera còdighes de recùperu + lost_recovery_codes: Is còdighes de recùperu ti permitint de recuperare s'atzessu a su contu tuo si as a pèrdere su telèfonu tuo. Si perdes is còdighes de recùperu tuos, ddos podes torrare a ingendrare inoghe. Is còdighes betzos tuos s'ant a invalidare. + methods: Mètodos in duos fatores + otp: Aplicatzione de autenticatzione + recovery_codes: Còdighes de recùperu de còpia de seguridade + recovery_codes_regenerated: Còdighes de recùperu torrados a generare + recovery_instructions_html: Si una die as a pèrdere s'atzessu a su telèfonu tuo, as a pòdere impreare unu de is còdighes de recùperu inoghe in suta pro recuperare s'atzessu a su contu tuo. Cunserva is còdighes in manera segura. A esèmpiu, ddos dias pòdere imprentare e archiviare in paris a àteros documentos de importu. + webauthn: Craes de seguresa + user_mailer: + backup_ready: + explanation: As pedidu una còpia de seguresa totale de su contu de Mastodon tuo. Como est pronta pro s'iscarrigamentu! + subject: S'archìviu tuo est prontu pro èssere iscarrigadu + title: Collida dae s'archìviu + sign_in_token: + details: 'Custos sunt is detàllios de su tentativu:' + explanation: 'Amus rilevadu unu tentativu de identificatzione in su contu tuo dae un''indiritzu IP non reconnotu. Si fias tue, inserta su còdighe de seguresa in bàsciu in sa pàgina disafiu de identificatzione:' + further_actions: 'Si no fias tue, càmbia sa crae tua e ativa s''autenticatzione in duos passos in su contu tuo. Ddu podes fàghere inoghe:' + subject: Cunfirma su tentativu de identificatzione + title: Tentativu de identificatzione + warning: + explanation: + disable: Non podes prus intrare in su contu tuo o dd'impreare in cale si siat àtera manera, ma su profilu e is àteros datos tuos abarrant intatos. + sensitive: Is elementos e documentos multimediales carrigados e ligados tuos ant a èssere tratados che a sensìbiles. + silence: Podes ancora impreare so contu tuo, ma isceti is persones chi ti sunt giai sighende ant a bìdere is tuts tuos in custu serbidore, e dias pòdere èssere esclùdidu dae unas cantas listas pùblicas. Nointames custu, is àteros ti diant pòdere galu sighire in manera manuale. + suspend: Non podes prus impreare su contu tuo, e su profilu e àteros datos non sunt prus atzessìbiles. Bi podes galu intrare pro pedire una còpia de seguresa de is datos tuos finas a cando no ant a èssere cantzellados de su totu, ma nd'amus a mantènnere unos cantos pro non ti permìtere de evàdere sa suspensione. + get_in_touch: Podes rispòndere a custu indiritzu de posta eletrònica pro cuntatare cun su personale de %{instance}. + review_server_policies: Revisionat sas polìticas de su serbidore + statuses: 'In manera cuncreta, pro:' + subject: + disable: Su contu tuo %{acct} est istadu cungeladu + none: Avisu pro %{acct} + sensitive: Is elementos multimediales de publicatzione de su contu tuo %{acct} sunt istados marcados comente sensìbiles + silence: Su contu tuo %{acct} est istadu limitadu + suspend: Su contu tuo %{acct} est istadu suspèndidu + title: + disable: Contu congeladu + none: Atentzione + sensitive: S'elementu multimediale tuo est istadu marcadu comente sensìbile + silence: Contu limitadu + suspend: Contu suspèndidu + welcome: + edit_profile_action: Cunfigura su profilu + edit_profile_step: Podes personalizare su profilu tuo carrighende un'àvatar o un'intestatzione, cambiende su nòmine visìbile tuo e faghende fintzas àteru. Si boles revisionare is sighidores noos in antis chi tèngiant su permissu de ti sighire podes blocare su contu tuo. + explanation: Inoghe b'ant una paja de impòsitos pro cumintzare + final_action: Cumintza a publicare + final_step: 'Cumintza a publicare! Fintzas si no ti sighit nemos is àteros podent bìdere is messàgios pùblicos tuos, pro esèmpiu in sa lìnia de tempus locale e in is etichetas ("hashtags"). Ti dias pòdere bòlere introduire a sa comunidade cun s''eticheta #introductions.' + full_handle: Su nòmine utente intreu tuo + full_handle_hint: Custu est su chi dias nàrrere a is amigos tuos pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore. + review_preferences_action: Muda is preferèntzias + review_preferences_step: Ammenta·ti de impostare is preferèntzias tuas, che a is lìteras de posta eletrònicas chi boles retzire, o ite livellu de riservadesa dias bòlere chi siat predefinidu pro is messàgios tuos. Si is immàgines in movimentu non ti infadant podes isseberare de abilitare sa riprodutzione automàtica de is GIF. + subject: Ti donamus su benebènnidu a Mastodon + tip_federated_timeline: Sa lìnia de tempus federada est una vista globale de sa retza de Mastodon. Ma incluit isceti is persones sighidas dae is bighinos tuos, duncas no est totale. + tip_following: Pro more de is cunfiguratziones predefinidas sighis s'amministratzione de su serbidore tuo. Pro agatare àteras persones de interessu, càstia is lìnias de su tempus locale e federada. + tip_local_timeline: Sa lìnia de tempus locale est una vista globale de is persones in %{instance}. Custos sunt is bighinos tuos! + tip_mobile_webapp: Si su navigadore mòbile tuo t'oferit de agiùnghere Mastodon a s'ischermada printzipale tua podes retzire notìficas push. Funtzionat che a un'aplicatzione nativa in maneras medas! + tips: Impòsitos + title: Bene bènnidu a bordu, %{name}! + users: + blocked_email_provider: Custu frunidore de posta eletrònica no est permìtidu + follow_limit_reached: Non podes sighire prus de %{limit} persones + generic_access_help_html: Tenes problemas a intrare in su contu tuo? Podes cuntatare a %{email} pro retzire agiudu + invalid_email: Custu indiritzu de posta eletrònica no est vàlidu + invalid_email_mx: Custu indiritzu de posta eletrònica paret chi no esistat + invalid_otp_token: Còdighe a duas fases non vàlidu + invalid_sign_in_token: Còdighe de seguresa non vàlidu + otp_lost_help_html: Si as pèrdidu s'atzessu a ambos, podes cuntatare a %{email} + seamless_external_login: Ses intradu pro mèdiu de unu servìtziu esternu, e pro custa resone is impostatziones de sa crae de intrada e de posta eletrònica non sunt a disponimentu. + signed_in_as: 'Sessione aberta comente:' + suspicious_sign_in_confirmation: Paret chi tue non sias giai intradu dae custu dispositivu e non ses intradu dae unu pagu de tempus, duncas ti semus mandende unu còdighe de seguresa a s'indiritzu de posta eletrònica tuo pro cunfirmare chi ses tue. + verification: + explanation_html: 'Ti podes verificare a sa sola comente mere de is ligòngios in is metadatos de su profilu tuo. Pro ddu fàghere su situ ligadu depet cuntènnere unu ligòngiu chi torret a su profilu de Mastodon tuo. Su ligòngiu in su situ depet tènnere un''atributu rel="me". Su testu cuntenutu in su ligòngiu no est de importu. Custu est un''esèmpiu:' + verification: Verìfica + webauthn_credentials: + add: Agiunghe una crae de seguresa noa + create: + error: Ddoe est istadu unu problema cun s'agiunta de sa crae de seguresa tua. Torra a proare. + success: Sa crae de seguresa tua est istada agiunta. + delete: Cantzella + delete_confirmation: Seguru chi boles cantzellare custa crae de seguresa? + description_html: Si permites s'autenticatzione cun crae de seguresa, as a tènnere bisòngiu de impreare una de is craes de seguresa tuas pro ti identificare. + destroy: + error: Ddoe est istadu unu problema cun sa cantzelladura de sa crae de seguresa tua. Torra a proare. + success: Sa crae de seguresa tua est istada cantzellada. + invalid_credential: Crae de seguresa non vàlida + nickname_hint: Inserta su nomìngiu de sa crae de seguresa tua noa + not_enabled: No as ativadu ancora WebAuthn + not_supported: Custu navigadore no est cumpatìbile cun is craes de seguresa + otp_required: Pro impreare is craes de seguresa depes ativare prima s'autenticatzione in duos passos. + registered_on: 'Registratzione: %{date}' diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index b4d356279..b3692f5ba 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -126,6 +126,7 @@ ca: expires_in: Expira després fields: Metadades del perfil header: Capçalera + honeypot: "%{label} (no omplir)" inbox_url: URL de la safata d'entrada del relay irreversible: Cau en lloc d'ocultar locale: Llengua de la interfície diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 72303a375..711dbf5c6 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -126,6 +126,7 @@ de: expires_in: Läuft ab fields: Tabellenfelder header: Titelbild + honeypot: "%{label} (nicht ausfüllen)" inbox_url: Inbox-URL des Relais irreversible: Verwerfen statt verstecken locale: Sprache der Benutzeroberfläche diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index aaa0d7ae0..d4c8a2da6 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -65,6 +65,12 @@ el: data: Αρχείο CSV που έχει εξαχθεί από διαφορετικό κόμβο Mastodon invite_request: text: Αυτό θα μας βοηθήσει να επιθεωρήσουμε την αίτησή σου + ip_block: + comment: Προαιρετικό. Θυμηθείτε γιατί προσθέσατε αυτόν τον κανόνα. + severities: + no_access: Αποκλεισμός πρόσβασης σε όλους τους πόρους + sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας + severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP sessions: otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:' webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά. @@ -92,6 +98,7 @@ el: types: disable: Απενεργοποίηση none: Καμία ενέργεια + sensitive: Ευαίσθητο silence: Αποσιώπηση suspend: Αναστολή και αμετάκλητη διαγραφή στοιχείων λογαριασμού warning_preset_id: Χρήση προκαθορισμένης προειδοποίησης @@ -117,6 +124,7 @@ el: expires_in: Λήξη μετά από fields: Μεταδεδομένα προφίλ header: Επικεφαλίδα + honeypot: "%{label} (μη συμπληρώνετε)" inbox_url: Το URL του inbox του ανταποκριτή (relay) irreversible: Απόρριψη αντί για κρύψιμο locale: Γλώσσα χρήσης @@ -136,6 +144,7 @@ el: setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων setting_default_sensitive: Σημείωση όλων των πολυμέσων ως ευαίσθητου περιεχομένου setting_delete_modal: Επιβεβαίωση πριν τη διαγραφή ενός τουτ + setting_disable_swiping: Απενεργοποίηση κινήσεων συρσίματος setting_display_media: Εμφάνιση πολυμέσων setting_display_media_default: Προκαθορισμένο setting_display_media_hide_all: Απόκρυψη όλων @@ -172,6 +181,9 @@ el: ip_block: comment: Σχόλιο ip: IP + severities: + no_access: Αποκλεισμός πρόσβασης + sign_up_requires_approval: Περιορισμός εγγραφών severity: Κανόνας notification_emails: digest: Αποστολή συνοπτικών email diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 98fda0916..3f399deae 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -47,6 +47,9 @@ eo: data: CSV-dosiero el alia Mastodon-servilo invite_request: text: Ĉi tio helpos nin revizii vian kandidatiĝon + ip_block: + severities: + sign_up_requires_approval: Novaj registriĝoj devigos vian aprobon sessions: otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:' user: @@ -70,6 +73,7 @@ eo: types: disable: Malebligi none: Fari nenion + sensitive: Tikla silence: Silentigi suspend: Haltigi kaj nemalfereble forigi kontajn datumojn warning_preset_id: Uzi antaŭagorditan averton @@ -95,6 +99,7 @@ eo: expires_in: Eksvalidiĝas post fields: Profilaj metadatumoj header: Fonbildo + honeypot: "%{label} (ne plenigi)" inbox_url: URL de la ripetila enirkesto irreversible: Forĵeti anstataŭ kaŝi locale: Interfaca lingvo @@ -108,12 +113,12 @@ eo: setting_advanced_layout: Ebligi altnivelan retpaĝan interfacon setting_aggregate_reblogs: Grupigi diskonigojn en tempolinioj setting_auto_play_gif: Aŭtomate ekigi GIF-ojn - setting_boost_modal: Montri fenestron por konfirmi antaŭ ol diskonigi mesaĝon + setting_boost_modal: Montri konfirman fenestron antaŭ ol diskonigi mesaĝon setting_crop_images: Stuci bildojn en negrandigitaj mesaĝoj al 16x9 setting_default_language: Publikada lingvo setting_default_privacy: Mesaĝa videbleco setting_default_sensitive: Ĉiam marki aŭdovidaĵojn tiklaj - setting_delete_modal: Montri fenestron por konfirmi antaŭ ol forigi mesaĝon + setting_delete_modal: Montri konfirman fenestron antaŭ ol forigi mesaĝon setting_display_media: Aŭdovidaĵa montrado setting_display_media_default: Dekomenca setting_display_media_hide_all: Kaŝi ĉiujn @@ -126,7 +131,7 @@ eo: setting_system_font_ui: Uzi la dekomencan tiparon de la sistemo setting_theme: Reteja etoso setting_trends: Montri hodiaŭajn furoraĵojn - setting_unfollow_modal: Montri fenestron por konfirmi antaŭ ol ĉesi sekvi iun + setting_unfollow_modal: Montri konfirman fenestron antaŭ ol ĉesi sekvi iun setting_use_blurhash: Montri buntajn transirojn por kaŝitaj aŭdovidaĵoj setting_use_pending_items: Malrapida reĝimo severity: Graveco @@ -145,6 +150,13 @@ eo: comment: Komento invite_request: text: Kial vi volas aliĝi? + ip_block: + comment: Komento + ip: IP + severities: + no_access: Bloki atingon + sign_up_requires_approval: Limigi registriĝojn + severity: Regulo notification_emails: digest: Sendi resumajn retmesaĝojn favourite: Sendi retmesaĝon kiam iu stelumas vian mesaĝon diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index cc27b9643..153c1101d 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -126,6 +126,7 @@ es-AR: expires_in: Vence después de fields: Metadatos de perfil header: Cabecera + honeypot: "%{label} (no rellenar)" inbox_url: Dirección web de la bandeja de entrada del relé irreversible: Dejar en lugar de ocultar locale: Idioma de la interface diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index f53bdd143..5da47d54a 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -126,6 +126,7 @@ es: expires_in: Expirar tras fields: Metadatos de perfil header: Img. cabecera + honeypot: "%{label} (no rellenar)" inbox_url: URL de la entrada de relés irreversible: Dejar en lugar de ocultar locale: Idioma diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 6425011b6..5960c2610 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -126,6 +126,7 @@ fa: expires_in: تاریخ انقضا fields: اطلاعات تکمیلی نمایه header: تصویر زمینه + honeypot: "%{label} (پر نکنید)" inbox_url: نشانی صندوق ورودی رله irreversible: به جای پنهان‌سازی، حذف کن locale: زبان محیط کاربری diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 51446f63c..e173dc0dc 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -126,6 +126,7 @@ fr: expires_in: Expire après fields: Métadonnées du profil header: Image d’en-tête + honeypot: "%{label} (ne pas remplir)" inbox_url: URL de la boîte de relais irreversible: Supprimer plutôt que masquer locale: Langue de l’interface @@ -172,15 +173,15 @@ fr: featured_tag: name: Hashtag interactions: - must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas - must_be_following: Masquer les notifications des personnes que vous ne suivez pas + must_be_follower: Bloquer les notifications des personnes qui ne vous suivent pas + must_be_following: Bloquer les notifications des personnes que vous ne suivez pas must_be_following_dm: Bloquer les messages directs des personnes que vous ne suivez pas invite: comment: Commentaire invite_request: text: Pourquoi voulez-vous vous inscrire ? ip_block: - comment: Commenter + comment: Commentaire ip: IP severities: no_access: Bloquer l’accès @@ -188,13 +189,13 @@ fr: severity: Règle notification_emails: digest: Envoyer des courriels récapitulatifs - favourite: Envoyer un courriel lorsque quelqu’un ajoute mes statuts à ses favoris - follow: Envoyer un courriel lorsque quelqu’un me suit - follow_request: Envoyer un courriel lorsque quelqu’un demande à me suivre - mention: Envoyer un courriel lorsque quelqu’un me mentionne + favourite: Quelqu’un ajoute mon pouet à ses favoris + follow: Quelqu’un vient de me suivre + follow_request: Quelqu’un demande à me suivre + mention: Quelqu’un me mentionne pending_account: Nouveau compte en attente d’approbation - reblog: Quelqu’un a partagé votre pouet - report: Envoyer un courriel lorsqu’un nouveau rapport est soumis + reblog: Quelqu’un partage mon pouet + report: Un nouveau rapport est envoyé trending_tag: Un hashtag non approuvé est dans les tendances tag: listable: Autoriser ce hashtag à apparaître dans les recherches et dans l’annuaire des profils diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index f2ebf1d6e..799312e33 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -56,7 +56,7 @@ gl: domain: Este dominio estará en disposición de obter datos desde este servidor e datos de entrada a el poderán ser procesados e gardados email_domain_block: domain: Esto pode ser o nome de dominio que aparece no enderezo do correo, o rexistro MX que resolve o dominio, ou o IP do servidor que resolve o rexistro MX. Estos confrontaranse contra o rexistro da usuaria e o rexistro será rexeitado. - with_dns_records: Vaise facer un intento de resolver os rexistros DNS propocionados e os resultados tamén irán a lista negra + with_dns_records: Vaise facer un intento de resolver os rexistros DNS proporcionados e os resultados tamén irán a lista de bloqueo featured_tag: name: 'Poderías usar algunha destas:' form_challenge: @@ -98,11 +98,11 @@ gl: text: Aviso personalizado type: Acción types: - disable: Desactivar conexión - none: Non facer nada + disable: Desactivar + none: Enviar un aviso sensitive: Sensible - silence: Acalar - suspend: Suspender e eliminar irreversiblemente datos da conta + silence: Limitar + suspend: Suspender warning_preset_id: Utilizar un aviso preestablecido announcement: all_day: Evento para todo o día @@ -126,6 +126,7 @@ gl: expires_in: Caduca tras fields: Metadatos do perfil header: Cabeceira + honeypot: "%{label} (non completar)" inbox_url: URL da caixa de entrada do repetidor irreversible: Soltar en lugar de agochar locale: Idioma da interface diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 242f1ffac..d5e82ecb2 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -126,6 +126,7 @@ hu: expires_in: Elévül fields: Profil metaadatok header: Fejléc + honeypot: "%{label} (ne töltsd ki)" inbox_url: Relé inbox-hoz tartozó URL irreversible: Eldobás elrejtés helyett locale: Felhasználói felület nyelve diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index aaa5d88e5..cdea55a5d 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -66,6 +66,7 @@ hy: invite_request: text: Սա կօգնի մեզ ստուգել քո յաւելուածը ip_block: + expires_in: IP հասցէները սահմանափակ են, դրանք երբեմն օգտագործուում են ընդհանուր կամ անցնում ձեռքից ձեռք։ Այդ պատճառով խորհուրդ չի տրւում IP-ների անժամկետ արգելափակումը։ ip: Ներմուծէք IPv4 կամ IPv6 հասցէն։ Նաև կարող ես արգելափակել հասցէների միջակայքեր օգտագործելով CIDR սինտաքսը։ Զգոյշ եղիր՝ ինքդ քեզ չարգելափակես։ sessions: otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝ diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index ed948a699..53e34f00c 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -126,6 +126,7 @@ is: expires_in: Rennur út eftir fields: Lýsigögn notandasniðs header: Síðuhaus + honeypot: "%{label} (ekki fylla út)" inbox_url: URL-slóð á innhólf endurvarpa irreversible: Fella niður í staðinn fyrir að fela locale: Tungumál viðmóts diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 1e79d593d..82f12861f 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -126,6 +126,7 @@ it: expires_in: Scade dopo fields: Metadati del profilo header: Intestazione + honeypot: "%{label} (non compilare)" inbox_url: URL della inbox del ripetitore irreversible: Elimina invece di nascondere locale: Lingua dell'interfaccia diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 8588073d8..5c47a99c4 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -126,6 +126,7 @@ ko: expires_in: 만료시각 fields: 프로필 메타데이터 header: 헤더 + honeypot: "%{label} (채우지 마시오)" inbox_url: 릴레이 서버의 inbox URL irreversible: 숨기는 대신 삭제 locale: 인터페이스 언어 diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index 2a0cdc66b..8ff8a5a46 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -100,6 +100,7 @@ ku: types: disable: بەستن none: ناردنی ئاگاداری + sensitive: هەستیار silence: سنوور suspend: ڕاگرتن warning_preset_id: بەکاهێنانی ئاگاداری پێش وەختە diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 7989f6981..bdaa1dd5c 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -65,6 +65,10 @@ nl: data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd invite_request: text: Dit helpt ons om jouw aanvraag te beoordelen + ip_block: + comment: Optioneel. Vergeet niet te onthouden waarom je deze regel hebt toegevoegd. + severities: + sign_up_requires_approval: Nieuwe registraties vereisen jouw goedkeuring sessions: otp: 'Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:' tag: @@ -91,6 +95,7 @@ nl: types: disable: Bevriezen none: Waarschuwing sturen + sensitive: Gevoelig silence: Beperken suspend: Opschorten en onomkeerbaar accountgegevens verwijderen warning_preset_id: Gebruik een voorinstelling van een waarschuwing @@ -135,6 +140,7 @@ nl: setting_default_privacy: Standaardzichtbaarheid van jouw toots setting_default_sensitive: Media altijd als gevoelig markeren setting_delete_modal: Vraag voor het verwijderen van een toot een bevestiging + setting_disable_swiping: Swipebewegingen uitschakelen setting_display_media: Mediaweergave setting_display_media_default: Standaard setting_display_media_hide_all: Alles verbergen @@ -168,6 +174,13 @@ nl: comment: Opmerking invite_request: text: Waarom wil jij je aanmelden? + ip_block: + comment: Opmerking + ip: IP + severities: + no_access: Toegang blokkeren + sign_up_requires_approval: Registraties beperken + severity: Regel notification_emails: digest: Periodiek e-mails met een samenvatting versturen favourite: Wanneer iemand jouw toot aan hun favorieten heeft toegevoegd @@ -188,4 +201,7 @@ nl: required: mark: "*" text: vereist + title: + sessions: + webauthn: Gebruik een van uw beveiligingssleutels om in te loggen 'yes': Ja diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index a02d0be35..6fc33ab08 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -126,6 +126,7 @@ pl: expires_in: Wygaśnie po fields: Metadane profilu header: Nagłówek + honeypot: "%{label} (nie wypełniaj)" inbox_url: Adres skrzynki przekaźnika irreversible: Usuwaj zamiast ukrywać locale: Język interfejsu diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 614d78c55..869ecaddc 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -126,6 +126,7 @@ pt-PT: expires_in: Expira em fields: Meta-dados de perfil header: Cabeçalho + honeypot: "%{label} (não preencher)" inbox_url: URL da caixa de entrada do repetidor irreversible: Expandir em vez de esconder locale: Idioma diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index fdd60c881..5baa9d46e 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -126,6 +126,7 @@ ru: expires_in: Истекает через fields: Метаданные профиля header: Шапка + honeypot: "%{label} (не заполнять)" inbox_url: URL для входящих от ретрансляторов irreversible: Удалять, а не скрывать locale: Язык интерфейса diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml index 91bd6d92f..99d5ab429 100644 --- a/config/locales/simple_form.sc.yml +++ b/config/locales/simple_form.sc.yml @@ -1 +1,213 @@ +--- sc: + simple_form: + hints: + account_alias: + acct: Dislinda su nòmineutente@domìniu de su contu dae su cale ti boles mòere + account_migration: + acct: Dislinda su nòmineutente@domìniu de su contu cara a su cale ti boles mòere + account_warning_preset: + text: Podes impreare sa sintassi de is tuts, che a is URL, is etichetas e is mentovos + title: Optzionale. Invisìbile a s'àtera persone + admin_account_action: + include_statuses: S'utente at a bìdere is tuts chi ant causadu s'atzione o s'avisu de moderatzione + send_email_notification: S'utente at a retzire un'ispiegatzione de su chi siat sutzèdidu in su contu suo + text_html: Optzionale. Podes impreare sa sintassi de is tuts. Podes agiùnghere avisos pre-impostados pro risparmiare tempus + type_html: Sèbera ite fàghere cun %{acct} + warning_preset_id: Optzionale. Podes ancora agiùnghere testu personalizadu a s'acabu de cussu predefinidu + announcement: + all_day: Si est marcadu, ant a èssere ammustradas isceti is datas de s'intervallu de tempus + ends_at: Optzionale. S'annùntziu at a acabbare de abarrare publicadu in custu momentu + scheduled_at: Lassa bòidu pro publicare s'annùntziu immediatamente + starts_at: Optzionale. S'in casu chi s'annùntziu tuo siat ligadu a un'intervallu de tempus ispetzìficu + text: Podes impreare sa sintassi de is tuts. Dae cara a su tretu chi s'annùntziu at a pigare in s'ischermu de s'utente + defaults: + autofollow: Is persones chi s'ant a registrare pro mèdiu de s'invitu t'ant a sighire in manera automàtica + avatar: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px + bot: Custu contu faghet pro su prus atziones automatizadas e diat pòdere no èssere monitoradu + context: Unu o prus cuntestos in ue su filtru si diat dèpere aplicare + current_password: Pro chistiones de seguresa inserta sa crae de intrada de su contu atuale + current_username: Pro cunfirmare inserta su nòmine utente de su contu atuale + digest: Imbiadu isceti a pustis de unu perìodu longu de inatividade, e isceti si as retzidu carchi messàgiu personale cando non bi fias + discoverable: Sa cartella de is profilos est un'àtera manera pro fàghere otènnere unu pùblicu prus mannu a su contu tuo + email: T'amus a mandare unu messàgiu eletrònicu de cunfirma + fields: Podes tènnere finas a 4 elementos ammustrados in una tabella in su profilu tuo + header: PNG, GIF o JPG. Màssimu %{size}. Ant a èssere iscaladas a %{dimensions}px + inbox_url: Còpia s'URL dae sa pàgina printzipale de su ripetidore chi boles impreare + irreversible: Is tuts filtrados ant a isparèssere in manera irreversìbile, fintzas si prus a tardu s'at a bogare su filtru + locale: Sa limba de s'interfache de s'utente, de is lìteras de posta eletrònica e de is notìficas push + locked: Tenet bisòngiu chi aproves a manu is sighiduras + password: Imprea a su mancu 8 caràteres + phrase: Su cunfrontu s'at a fàghere chena pigare in cunsideru si su testu de sa publicatzione est minùsculu o majùsculu o si tenet un'avisu de cuntenutu + scopes: A ite API s'aplicatzione at a pòdere atzèdere. Si seletziones un'àmbitu de livellu artu no tenes bisòngiu de nde seletzionare de sìngulos. + setting_aggregate_reblogs: No ammustres cumpartziduras noas pro tuts chi sunt istados cumpartzidos dae pagu (tenet efetu isceti pro is cumpartziduras retzidas noas) + setting_default_sensitive: Is elementos multimediales sensìbiles benint cuados dae is cunfiguratziones predefinidas e si podent rivelare cun un'incarcu + setting_display_media_default: Cua elementos multimediales marcados comente sensìbiles + setting_display_media_hide_all: Cua semper is elementos multimediales + setting_display_media_show_all: Ammustra semper is elementos multimediales + setting_hide_network: Sa gente chi sighis o chi ti sighit no at a èssere ammustrada in su profilu tuo + setting_noindex: Tenet efetu in su profilu pùblicu tuo e in is pàginas de is istados + setting_show_application: S'aplicatzione chi impreas pro publicare tuts at a èssere ammustrada in sa visualizatzione de detàlliu de is tuts + setting_use_blurhash: Is gradientes sunt basados in subra de is colores de is immàgines cuadas ma imbelant totu is minujas + setting_use_pending_items: Cua is atualizatziones in segus de un'incarcu imbetzes de iscùrrere in automàticu su flussu de publicatziones + username: Su nòmine de utente tuo at a èssere ùnicu in %{domain} + whole_word: Cando sa paràula o sa fràsia crae est alfanumèrica ebbia s'at a aplicare isceti si currispondet a sa paràula intrea + domain_allow: + domain: Custu domìniu at a pòdere recuperare datos dae custu serbidore e is datos in intrada dae cue ant a èssere protzessados e archiviados + email_domain_block: + domain: Custu podet èssere su nòmine de domìniu chi benit ammustradu in s'indiritzu de posta eletrònica, in su registru MX in ue si risolvet su domìniu o s'IP de su serbidore in ue si risolvet su registru MX. Custos ant a èssere verificados a pustis de sa registratzione e sa registratzione at a èssere refudada. + with_dns_records: S'at a fàghere unu tentativu de risòlvere is registros DNS de su domìniu e fintzas is risultados ant a èssere blocados + featured_tag: + name: 'Forsis boles impreare unu de custos:' + form_challenge: + current_password: Ses intrende in un'àrea segura + imports: + data: Archìviu CSV esportadu dae un'àteru serbidore de Mastodon + invite_request: + text: Custu si at a agiudare a revisionare sa dimanda tua + ip_block: + comment: Optzionale. Regorda pro ite as agiuntu custa règula. + expires_in: Is indiritzos IP sunt una risursa limitada, fatu-fatu benint cumpartzidos e podent mudare de mere. Pro custa resone is blocos indefinidos de indiritzos IP non sunt racumandados. + ip: Inserta un'indiritzu IPv4 o IPv6. Podes blocare intervallos intreos impreende sa sintassi CIDR. Dae cara e non ti bloches a sa sola! + severities: + no_access: Bloca s'atzessu a totu is resursas + sign_up_requires_approval: As a dèpere aprovare is iscritziones noas + severity: Sèbera ite at a sutzèdere cun is rechestas de custa IP + sessions: + otp: 'Inserta su còdighe de atzessu in duos passos generadu dae s''aplicatzione mòbile tua o imprea unu de custos còdighes de recùperu:' + webauthn: Si est una crae USB assegura·ti de l'insertare e, si serbit, de la tocare. + tag: + name: Podes isceti cambiare su minùsculu/maiùsculu de is lìteras, a esèmpiu, pro fàghere in manera chi siant prus fàtziles de lèghere + user: + chosen_languages: Cando est incarcadu, isceti is tuts in is limbas ischertadas ant a èssere ammustrados in is lìnias de tempus pùblicas + labels: + account: + fields: + name: Eticheta + value: Cuntenutu + account_alias: + acct: Nòmine utente de su contu betzu + account_migration: + acct: Nòmine utente de su contu nou + account_warning_preset: + text: Testu predefinidu + title: Tìtulu + admin_account_action: + include_statuses: Include is tuts sinnalados in sa lìtera eletrònica + send_email_notification: Notìfica s'utente pro mèdiu de posta eletrònica + text: Avisu personalizadu + type: Atzione + types: + disable: Disativa + none: Imbia un'avisu + sensitive: Sensìbile + silence: A sa muda + suspend: Suspende + warning_preset_id: Imprea un'avisu predefinidu + announcement: + all_day: Eventu de totu sa die + ends_at: Fine de s'eventu + scheduled_at: Programma sa publicatzione + starts_at: Cumintzu de s'eventu + text: Annùntziu + defaults: + autofollow: Invita a sighire su contu tuo + avatar: Immàgine de profilu + bot: Custu contu est unu bot + chosen_languages: Filtra limbas + confirm_new_password: Cunfirma sa crae noa + confirm_password: Cunfirma sa crae + context: Filtra cuntestos + current_password: Crae atuale + data: Data + discoverable: Ammustra custu contu in su diretòriu + display_name: Nòmine visìbile + email: Indiritzu de posta eletrònica + expires_in: Iscadit a pustis de + fields: Metadatos de su profilu + header: Intestatzione + honeypot: "%{label} (non compiles)" + inbox_url: URL de sa cartella de intrada de su ripetidore + irreversible: Cantzella imbetzes de cuare + locale: Limba de s'interfache + locked: Bloca su contu + max_uses: Nùmeru màssimu de impreos + new_password: Crae noa + note: Biografia + otp_attempt: Còdighe in duos fatores + password: Crae + phrase: Paràula o fràsia crae + setting_advanced_layout: Abìlita s'interfache web avantzada + setting_aggregate_reblogs: Agrupa is cumpartziduras in is lìnias de tempus + setting_auto_play_gif: Riprodui is GIFs animadas in manera automàtica + setting_boost_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de cumpartzire + setting_crop_images: Retàllia is immàgines in is tuts no ismanniados a 16x9 + setting_default_language: Limba de publicatzione + setting_default_privacy: Riservadesa de publicatzione + setting_default_sensitive: Marca semper is elementos multimediales comente sensìbiles + setting_delete_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de cantzellare unu tut + setting_disable_swiping: Disabìlita is movimentos de trisinadura + setting_display_media: Visualizatzione de is elementos multimediales + setting_display_media_default: Predefinida + setting_display_media_hide_all: Cua totu + setting_display_media_show_all: Ammustra totu + setting_expand_spoilers: Ismànnia semper is tuts marcados cun avisos de cuntenutu + setting_hide_network: Cua sa retza tua + setting_noindex: Pedi de non ti fàghere inditzizare dae is motores de chirca + setting_reduce_motion: Mìnima su movimentu in is animatziones + setting_show_application: Rivela s'aplicatzione impreada pro imbiare tuts + setting_system_font_ui: Imprea su caràtere predefinidu de su sistema + setting_theme: Tema de su situ + setting_trends: Ammustra is tendèntzias de oe + setting_unfollow_modal: Ammustra una ventanedda de diàlogu de cunfirma in antis de acabbare de sighire a calicunu + setting_use_blurhash: Ammustra gradientes colorados pro is elementos multimediales cuados + setting_use_pending_items: Modalidade lenta + severity: Severidade + sign_in_token_attempt: Còdighe de seguresa + type: Casta de importatzione + username: Nòmine utente + username_or_email: Nòmine utente o indiritzu de posta eletrònica + whole_word: Paràula intrea + email_domain_block: + with_dns_records: Include registros MX e indiritzos IP de su domìniu + featured_tag: + name: Eticheta + interactions: + must_be_follower: Bloca is notìficas dae chie non ti sighit + must_be_following: Bloca is notìficas dae persones chi non sighis + must_be_following_dm: Bloca is messàgios diretos dae persones chi non sighis + invite: + comment: Cummenta + invite_request: + text: Proite ti cheres iscrìere? + ip_block: + comment: Cummentu + ip: IP + severities: + no_access: Bloca s'atzessu + sign_up_requires_approval: Lìmita is registratziones + severity: Règula + notification_emails: + digest: Imbia lìteras eletrònicas de resumu + favourite: Calicunu at postu s'istadu tuo in is preferidos suos + follow: Calicunu at incumentzadu a ti sighire + follow_request: Calicunu at pedidu de ti sighire + mention: Calicunu t'at mentovadu + pending_account: Unu contu nou bisòngiat de una revisione + reblog: Calicunu at cumpartzidu s'istadu tuo + report: Est istadu imbiadu unu raportu nou + trending_tag: Un'eticheta non revisionada est in tendèntzia + tag: + listable: Permite a cust'eticheta de apàrrere in is chircas e in sa cartella de is profilos + name: Eticheta + trendable: Permite a cust'eticheta de apàrrere in is tendèntzias + usable: Permite a is tuts de impreare cust'eticheta + 'no': Nono + recommended: Racumandadu + required: + mark: "*" + text: netzessàriu + title: + sessions: + webauthn: Imprea una de is craes de seguresa tuas pro intrare + 'yes': Eja diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index ac95ab570..18211e69e 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -126,6 +126,7 @@ sq: expires_in: Skadon pas fields: Tejtëdhëna profili header: Krye + honeypot: "%{label} (mos plotësoni gjë këtu)" inbox_url: URL e Të marrëve të relesë irreversible: Heqje, në vend se fshehje locale: Gjuhë ndërfaqeje diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index dd7769fca..8500f109e 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -73,6 +73,7 @@ sv: expires_in: Förfaller efter fields: Profil-metadata header: Bakgrundsbild + honeypot: "%{label} (fyll inte i)" locale: Språk locked: Lås konto max_uses: Högst antal användningar diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 7d2116740..23add1d45 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -91,10 +91,11 @@ th: text: คำเตือนที่กำหนดเอง type: การกระทำ types: - disable: แช่แข็ง - none: ไม่ทำสิ่งใด - silence: ทำให้เงียบ - suspend: ระงับและลบข้อมูลบัญชีอย่างถาวร + disable: อายัด + none: ส่งคำเตือน + sensitive: ละเอียดอ่อน + silence: จำกัด + suspend: ระงับ warning_preset_id: ใช้คำเตือนที่ตั้งไว้ล่วงหน้า announcement: all_day: เหตุการณ์ตลอดทั้งวัน @@ -137,6 +138,7 @@ th: setting_default_privacy: ความเป็นส่วนตัวของการโพสต์ setting_default_sensitive: ทำเครื่องหมายสื่อว่าละเอียดอ่อนเสมอ setting_delete_modal: แสดงกล่องโต้ตอบการยืนยันก่อนลบโพสต์ + setting_disable_swiping: ปิดใช้งานการเคลื่อนไหวในการปัด setting_display_media: การแสดงสื่อ setting_display_media_default: ค่าเริ่มต้น setting_display_media_hide_all: ซ่อนทั้งหมด diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 04b0f26a3..39ae58dc2 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -126,6 +126,7 @@ tr: expires_in: Bitiş tarihi fields: Profil meta verisi header: Kapak resmi + honeypot: "%{label} (doldurmayın)" inbox_url: Aktarıcı gelen kutusunun URL'si irreversible: Gizlemek yerine bırak locale: Arayüz dili diff --git a/config/locales/simple_form.tt.yml b/config/locales/simple_form.tt.yml new file mode 100644 index 000000000..5eab4abff --- /dev/null +++ b/config/locales/simple_form.tt.yml @@ -0,0 +1 @@ +tt: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 99611febf..dfe1ae36e 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -10,7 +10,7 @@ vi: text: Bạn có thể dùng URL, hashtag và nhắc đến title: Tùy chọn. Không cho người nhận xem admin_account_action: - include_statuses: Người dùng sẽ thấy các tút bị kiểm duyệt + include_statuses: Người dùng sẽ thấy các tút nào của họ bị kiểm duyệt send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ text_html: Tùy chọn. Bạn nên dùng cảnh cáo cài sẵn để tiết kiệm thời gian type_html: Chọn làm gì với %{acct} @@ -126,6 +126,7 @@ vi: expires_in: Hết hạn sau fields: Metadata header: Ảnh bìa + honeypot: "%{label} (đừng điền vào)" inbox_url: Hộp thư relay irreversible: Xóa bỏ vĩnh viễn locale: Ngôn ngữ diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 6d2eb2f49..35222c076 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -126,6 +126,7 @@ zh-CN: expires_in: 失效时间 fields: 个人资料附加信息 header: 个人资料页横幅图片 + honeypot: "%{label} (请勿填写)" inbox_url: 中继站收件箱的 URL irreversible: 丢弃而非隐藏 locale: 界面语言 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index 843157815..eaed6e32b 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -3,72 +3,81 @@ zh-HK: simple_form: hints: account_alias: - acct: 指定欲移動之帳戶的 使用者名稱@站台 + acct: 指定欲移動之帳戶的「使用者名稱@域名」 account_migration: - acct: 指定欲移動至之帳戶的 使用者名稱@站台 + acct: 指定欲移動至之帳戶的「使用者名稱@域名」 account_warning_preset: - text: 您可使用嘟文語法,例如網址、「#」標籤和提及功能 - title: 可選,對接收者不可見 + text: 你可使用 toot 格式,例如網址、「#」標籤和提及功能 + title: 可選,接收者不會見到 admin_account_action: - include_statuses: 用戶將會看到哪些嘟文導致檢舉或警告 + include_statuses: 使用者將會看到哪些文章導致檢舉或警告 send_email_notification: 使用者將收到帳戶發生之事情的解釋 - text_html: 選用。您能使用嘟文語法。您可 新增警告預設 來節省時間 + text_html: 選用。你能使用 toot 語法。你可 新增警告預設 來節省時間 type_html: 設定要使用 %{acct} 做的事 - warning_preset_id: 選用。您仍可在預設的結尾新增自訂文字 + warning_preset_id: 選用。你仍可在預設訊息的結尾加入自訂文字 announcement: - all_day: 核取後,只會顯示出時間範圍中的日期部分 + all_day: 勾選後,只會顯示出時間範圍中的日期部分 ends_at: 可選,公告會在該時間點自動取消發布 - scheduled_at: 空白則立即發布公告 + scheduled_at: 留空此項以立即發布公告 starts_at: 可選,你可以讓公告在指定時間範圍內顯示 - text: 你可以使用嘟文格式,但請注意不要讓公告佔據太多用戶屏幕空間。 + text: 你可以使用文章格式,但請小心別讓公告佔據太大的使用者畫面空間。 defaults: autofollow: 通過邀請網址註冊的用戶將會自動關注你 avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px - bot: 提醒用戶本帳號是機械人 - context: 應該套用過濾器的一項或多項內容 - current_password: 因安全因素,請輸入目前帳戶的密碼 + bot: 這個帳號是機械人,所做的事情可能沒有經人為監察 + context: 過濾器應該套用的一項或多項條件 + current_password: 基於保安緣故,請輸入目前帳號的密碼 current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登錄,且收到了私信時發送 - discoverable: 用戶目錄可以讓您的帳戶被更多人知道 - email: 您將收到一封確認電子郵件 + discoverable: 個人資料目錄可以讓你的帳號更廣為人知 + email: 你將收到一封確認電郵 fields: 個人資料頁可顯示多至 4 個項目 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px - inbox_url: 從您想要使用的中繼首頁複製網址 - irreversible: 已過濾的嘟文將會不可逆的消失,即便過濾器移除之後也一樣 + inbox_url: 在你想要使用的中繼站首頁,複製它的網址 + irreversible: 文章過濾是不可還原的,即使日後過濾器被移除,也無法重新看到被它濾走的文章 locale: 使用者介面、電郵和通知的語言 - locked: 你必須人手核准每個用戶對你的關注請求,而你的文章私隱會被預設為「只有關注你的人能看」 + locked: 你必須手動審核每個人對你的關注請求 password: 使用至少 8 個字元 - phrase: 無論是嘟文的本文或是內容警告都會被過濾 - scopes: 允許讓應用程式存取的 API。 若您選擇最高階範圍,則無須選擇個別項目。 - setting_aggregate_reblogs: 請勿顯示最近已被轉嘟之嘟文的最新轉嘟(只影響最新收到的嘟文) + phrase: 過濾器會閱讀文章和內容警告標語的字眼,然後決定過濾與否 + scopes: 選擇應用程式可以存取的 API。 若你選擇最高階的權限範圍,則無須選擇個別項目。 + setting_aggregate_reblogs: 請勿顯示新近被轉推的文章(只影響最新被推的文章) setting_default_sensitive: 敏感媒體預設隱藏,且按一下即可重新顯示 setting_display_media_default: 隱藏標為敏感的媒體 setting_display_media_hide_all: 總是隱藏所有媒體 setting_display_media_show_all: 總是顯示標為敏感的媒體 - setting_hide_network: 你關注的人和關注你的人將不會在你的個人資料頁上顯示 + setting_hide_network: 你所關注的人,和關注你的人,將不會在你的個人資料頁上顯示 setting_noindex: 此設定會影響到你的公開個人資料以及文章頁面 - setting_show_application: 您用來發嘟文的應用程式將會在您嘟文的詳細檢視顯示 - setting_use_blurhash: 漸變基於隱藏的視覺效果顏色,但會模糊所有細節 + setting_show_application: 你用來發表文章的應用程式,將會顯示在你文章的詳細檢視中 + setting_use_blurhash: 漸變圖樣會基於隱藏媒體內容產生,但所有細節會變得模糊 setting_use_pending_items: 關閉自動滾動更新,時間軸會在點擊後更新 - username: 您的使用者名稱將在 %{domain} 是獨一無二的 + username: 你的使用者名稱在 %{domain} 將是獨一無二的 whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用 domain_allow: - domain: 此域將能從此站獲取數據,而此站發出的數據也會被處理和存儲。 + domain: 此網域將能從此站獲取資料,而此站發出的數據也會被處理和存儲。 email_domain_block: domain: 這裡可以是電郵地址中的域名、域名解析到的MX記錄、或MX紀錄解析到的服務器IP。如果上述資料被封禁,那麼註冊將被拒絕。 with_dns_records: Mastodon 會嘗試解析所給域名的 DNS 記錄,然後與解析結果一併封禁 featured_tag: - name: 您可能想使用其中一個: + name: 你可能想使用其中一個: form_challenge: - current_password: 您正要進入安全區域 + current_password: 你正要進入安全區域 imports: data: 自其他服務站匯出的 CSV 檔案 invite_request: - text: 這會協助我們審核您的應用程式 + text: 這將有助我們審核你的應用程式 + ip_block: + comment: 可選,但請記得自己為甚麼添加了這個規則。 + expires_in: 因為 IP 位址是經常被分享或轉手的有限資源,所以我們不建議你無限期地封鎖 IP 位址。 + ip: 請輸入 IPv4 或 IPv6 位址,你亦可以用 CIDR 語法來封鎖整個 IP 區段。請小心使用,不要把自己給一併封鎖! + severities: + no_access: 封鎖所有資源存取 + sign_up_requires_approval: 新登記申請正等候你審批 + severity: 請設定伺服器將如何處理來自這個 IP 位址的請求 sessions: otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼: + webauthn: 如果它是 USB 安全鑰匙的話,請先插入電腦。如鑰匙設計有需要,請按鍵啟用。 tag: - name: 您只能變更大小寫,例如,以使其更易讀。 + name: 你只能變更大小寫(以使其更易讀)。 user: chosen_languages: 只有被選擇的語言會在公開時間軸內顯示 labels: @@ -77,23 +86,24 @@ zh-HK: name: 標籤 value: 內容 account_alias: - acct: 處理舊帳戶 + acct: 舊帳號名稱 account_migration: - acct: 處理新帳戶 + acct: 新帳號名稱 account_warning_preset: text: 預設文字 title: 標題 admin_account_action: - include_statuses: 在電子郵件中加入檢舉的嘟文 + include_statuses: 在電郵中加入被檢舉的文章 send_email_notification: 透過電子信件通知使用者 text: 自訂警告 - type: 動作 + type: 操作 types: disable: 停用 - none: 什麼也不做 - silence: 安靜 - suspend: 停權並不可逆的刪除帳戶資料 - warning_preset_id: 使用警告預設 + none: 發送警告 + sensitive: 敏感内容 + silence: 限制 + suspend: 停權 + warning_preset_id: 使用預設警告 announcement: all_day: 全天活動 ends_at: 活動結束時間 @@ -101,25 +111,26 @@ zh-HK: starts_at: 活動開始時間 text: 公告 defaults: - autofollow: 邀請別人關注你的賬號 + autofollow: 邀請別人關注你的帳號 avatar: 個人頭像 bot: 這帳號是機械人 - chosen_languages: 語言過濾 + chosen_languages: 所過濾語言 confirm_new_password: 確認新密碼 confirm_password: 確認密碼 - context: 過濾情境 + context: 所過濾情境 current_password: 目前密碼 data: 資料 - discoverable: 在目錄列出此帳戶 + discoverable: 在目錄列出此帳號 display_name: 顯示名稱 email: 電郵地址 expires_in: 失效時間 fields: 資料 header: 個人頁面頂部 + honeypot: "%{label} (請不要填寫)" inbox_url: 中繼收件匣的 URL - irreversible: 放棄而非隱藏 + irreversible: 丟棄而非隱藏 locale: 介面語言 - locked: 將用戶轉為「私人」 + locked: 將帳號轉為「私人」 max_uses: 最大使用次數 new_password: 新密碼 note: 簡介 @@ -127,67 +138,76 @@ zh-HK: password: 密碼 phrase: 關鍵字或片語 setting_advanced_layout: 啟用進階網頁介面 - setting_aggregate_reblogs: 時間軸中的群組轉嘟 + setting_aggregate_reblogs: 時間軸中的群組轉推 setting_auto_play_gif: 自動播放 GIF setting_boost_modal: 在轉推前詢問我 - setting_crop_images: 把未展開嘟文中的圖片裁剪到 16x9 + setting_crop_images: 將未展開文章中的圖片裁剪到 16x9 setting_default_language: 文章語言 setting_default_privacy: 文章預設為 setting_default_sensitive: 預設我的內容為敏感內容 - setting_delete_modal: 刪推前詢問我 + setting_delete_modal: 刪除文章前,請要求我確認 + setting_disable_swiping: 停用滑動手勢 setting_display_media: 媒體顯示 setting_display_media_default: 預設 setting_display_media_hide_all: 全部隱藏 setting_display_media_show_all: 全部顯示 - setting_expand_spoilers: 永遠展開標有內容警告的嘟文 + setting_expand_spoilers: 永遠展開標有內容警告的文章 setting_hide_network: 隱藏你的社交網絡 - setting_noindex: 阻止搜尋引擎檢索 - setting_reduce_motion: 減低動畫效果 - setting_show_application: 顯示用來傳送嘟文的應用程式 + setting_noindex: 聲明本站不希望搜尋器讓外界搜尋 + setting_reduce_motion: 減少動畫效果 + setting_show_application: 顯示用來發表文章的應用程式 setting_system_font_ui: 使用系統預設字型 setting_theme: 網站主題 - setting_trends: 顯示本日趨勢 - setting_unfollow_modal: 取消關注前跳出詢問我 - setting_use_blurhash: 將隱藏媒體顯示為彩色漸變 + setting_trends: 顯示今天熱門主題 + setting_unfollow_modal: 取消關注前請讓我確定 + setting_use_blurhash: 將隱藏媒體以彩色漸變圖樣表示 setting_use_pending_items: 限速模式 severity: 等級 sign_in_token_attempt: 安全碼 type: 匯入資料類型 - username: 用戶名稱 - username_or_email: 用戶名稱或電郵 + username: 使用者名稱 + username_or_email: 使用者名稱或電郵 whole_word: 整個詞彙 email_domain_block: - with_dns_records: 包括域名的 MX 記錄和 IP 地址 + with_dns_records: 包括域名的 MX 記錄和 IP 位址 featured_tag: - name: "「#」標籤" + name: 主題標籤 (Hashtag) interactions: - must_be_follower: 隱藏沒有關注你的用戶的通知 - must_be_following: 隱藏你不關注的用戶的通知 - must_be_following_dm: 隱藏你不關注的用戶的私信 + must_be_follower: 隱藏你關注者以外的人的通知 + must_be_following: 隱藏你不關注的人的通知 + must_be_following_dm: 隱藏你不關注的人的私信 invite: comment: 備註 invite_request: text: 加入的原因 ip_block: - ip: IP 地址 + comment: 備註 + ip: IP 位址 + severities: + no_access: 封鎖 + sign_up_requires_approval: 限制註冊 + severity: 規則 notification_emails: digest: 定期電郵摘要 - favourite: 當有用戶喜歡你的文章時,發電郵通知 - follow: 當有用戶關注你時,發電郵通知 - follow_request: 當有用戶要求關注你時,發電郵通知 - mention: 當有用戶在文章提及你時,發電郵通知 - pending_account: 需要審核的新帳戶 - reblog: 當有用戶轉推你的文章時,發電郵通知 - report: 當提交新檢舉時傳送電子郵件 - trending_tag: 當未審核的話題成為當前熱門時發郵件提醒 + favourite: 有人喜歡你的文章 + follow: 當有人關注你時 + follow_request: 當有人要求關注你時 + mention: 當有人在文章提及你時 + pending_account: 有新帳號需要審核時 + reblog: 當有人轉推你的文章時 + report: 收到新檢舉時 + trending_tag: 當未審核的標籤成為當前熱門時 tag: listable: 允許此主題標籤在搜尋及個人檔案目錄中顯示 name: 主題標籤 trendable: 允許此主題標籤在趨勢下顯示 - usable: 允許嘟文使用此主題標籤 + usable: 允許文章使用此主題標籤 'no': 否 recommended: 建議 required: mark: "*" text: 必須填寫 + title: + sessions: + webauthn: 使用你的安全密鑰裝置來登入 'yes': 是 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 80cc8c2ee..000ec529b 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -75,6 +75,7 @@ zh-TW: types: disable: 停用 none: 什麼也不做 + sensitive: 有雷小心 silence: 安靜 suspend: 停權並不可逆的刪除帳戶資料 warning_preset_id: 使用警告預設 @@ -147,6 +148,13 @@ zh-TW: comment: 備註 invite_request: text: 加入的原因 + ip_block: + comment: 備註 + ip: IP 位址 + severities: + no_access: 封鎖 + sign_up_requires_approval: 限制註冊 + severity: 規則 notification_emails: digest: 傳送摘要信件 favourite: 當有使用者喜歡你的嘟文時,傳送電子信件通知 @@ -166,4 +174,7 @@ zh-TW: required: mark: "*" text: 必須填寫 + title: + sessions: + webauthn: 使用您的安全金鑰來登入 'yes': 是 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index d08d726c0..127495a82 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -131,6 +131,7 @@ sq: follows: Ndjekje header: Krye inbox_url: URL Mesazhesh të Marrë + invite_request_text: Arsye për pjesëmarrje invited_by: Ftuar nga ip: IP joined: U bë pjesë @@ -255,6 +256,7 @@ sq: unsuspend_account: Hiqe Pezullimin e Llogarisë update_announcement: Përditëso Lajmërimin update_custom_emoji: Përditëso Emotikon Vetjak + update_domain_block: Përditëso Bllok Përkatësish update_status: Përditëso Gjendjen actions: assigned_to_self_report: "%{name} ia kaloi raportimin %{target} në ngarkim vetvetes" @@ -295,6 +297,7 @@ sq: unsuspend_account: "%{name} hoqi pezullimin për llogarinë e %{target}" update_announcement: "%{name} përditësoi lajmërimin %{target}" update_custom_emoji: "%{name} përditësoi emotikonin %{target}" + update_domain_block: "%{name} përditësoi bllok përkatësish për %{target}" update_status: "%{name} përditësoi gjendjen me %{target}" deleted_status: "(fshiu gjendjen)" empty: S’u gjetën regjistra. @@ -437,6 +440,7 @@ sq: instances: by_domain: Përkatësi delivery_available: Ka shpërndarje të mundshme + empty: S’u gjetën përkatësi. known_accounts: one: "%{count} llogari e njohur" other: "%{count} llogari të njohura" @@ -514,6 +518,8 @@ sq: comment: none: Asnjë created_at: Raportuar më + forwarded: U përcoll + forwarded_to: U përcoll te %{domain} mark_as_resolved: Vëri shenjë si i zgjidhur mark_as_unresolved: Vëri shenjë si të pazgjidhur notes: @@ -583,6 +589,9 @@ sq: min_invite_role: disabled: Asnjë title: Lejo ftesa nga + require_invite_text: + desc_html: Kur regjistrimet lypin miratim dorazi, tekstin e kërkesës për ftesë “Pse doni të merrni pjesë?” bëje të detyrueshëm, në vend se opsional + title: Kërkoju përdoruesve të rinj të plotësojnë doemos një tekst kërkese për ftesë registrations_mode: modes: approved: Për regjistrim, lypset miratimi @@ -751,6 +760,7 @@ sq: functional: Llogaria juaj është tërësisht funksionale. pending: Aplikimi juaj është në pritje të shqyrtimit nga stafi ynë. Kjo mund të dojë ca kohë. Nëse aplikimi juaj miratohet, do të merrni një email. redirecting_to: Llogaria juaj është joaktive, ngaqë aktualisht ridrejton te %{acct}. + too_fast: Formulari u parashtrua shumë shpejt, riprovoni. trouble_logging_in: Probleme me hyrjen? use_security_key: Përdor kyç sigurie authorize_follow: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index a84d5cdbd..264170b4e 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -221,6 +221,7 @@ sv: unsuspend_account: Återaktivera konto update_announcement: Uppdatera meddelande update_custom_emoji: Uppdatera egna emojis + update_domain_block: Uppdatera blockerad domän update_status: Uppdatera status actions: assigned_to_self_report: "%{name} tilldelade anmälan %{target} till sig själv" @@ -256,6 +257,7 @@ sv: unsilence_account: "%{name} återljudade %{target}s konto" unsuspend_account: "%{name} aktiverade %{target}s konto" update_custom_emoji: "%{name} uppdaterade emoji %{target}" + update_domain_block: "%{name} uppdaterade blockerad domän för %{target}" update_status: "%{name} uppdaterade status för %{target}" deleted_status: "(raderad status)" empty: Inga loggar hittades. @@ -376,6 +378,7 @@ sv: title: E-postdomänblock instances: by_domain: Domän + empty: Inga domäner hittades. moderation: all: Alla limited: Begränsad @@ -417,6 +420,8 @@ sv: comment: none: Ingen created_at: Anmäld + forwarded: Vidarebefordrad + forwarded_to: Vidarebefordrad till %{domain} mark_as_resolved: Markera som löst mark_as_unresolved: Markera som olöst notes: @@ -479,6 +484,9 @@ sv: min_invite_role: disabled: Ingen title: Tillåt inbjudningar av + require_invite_text: + desc_html: När nyregistrering kräver manuellt godkännande, gör det obligatoriskt att fylla i text i fältet "Varför vill du gå med?" + title: Kräv att nya användare fyller i en inbjudningsförfrågan show_known_fediverse_at_about_page: desc_html: När den växlas, kommer toots från hela fediverse visas på förhandsvisning. Annars visas bara lokala toots. title: Visa det kända fediverse på tidslinjens förhandsgranskning @@ -577,6 +585,7 @@ sv: status: account_status: Kontostatus redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}. + too_fast: Formuläret har skickats för snabbt, försök igen. authorize_follow: already_following: Du följer redan detta konto already_requested: Du har redan skickat en vänförfrågan till det kontot @@ -778,6 +787,7 @@ sv: missing_resource: Det gick inte att hitta den begärda omdirigeringsadressen för ditt konto proceed: Fortsätt för att följa prompt: 'Du kommer att följa:' + reason_html: "Varför är det här steget nödvändigt? %{instance} är kanske inte den server du är registrerad vid, så vi behöver dirigera dig till din hemserver först." sessions: activity: Senaste aktivitet browser: Webbläsare diff --git a/config/locales/th.yml b/config/locales/th.yml index fcfa2fbc9..8d50e805a 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -102,15 +102,15 @@ th: delete: ลบข้อมูล deleted: ลบแล้ว demote: ลดขั้น - disable: ปิดใช้งาน + disable: อายัด disable_two_factor_authentication: ปิดใช้งาน 2FA - disabled: ปิดใช้งานอยู่ + disabled: อายัดอยู่ display_name: ชื่อที่แสดง domain: โดเมน edit: แก้ไข email: อีเมล email_status: สถานะอีเมล - enable: เปิดใช้งาน + enable: เลิกอายัด enabled: เปิดใช้งานอยู่ followers: ผู้ติดตาม follows: การติดตาม @@ -172,8 +172,8 @@ th: show: created_reports: รายงานที่สร้าง targeted_reports: รายงานโดยผู้อื่น - silence: ทำให้เงียบ - silenced: เงียบอยู่ + silence: จำกัด + silenced: จำกัดอยู่ statuses: สถานะ subscribe: บอกรับ suspended: ระงับอยู่ @@ -602,6 +602,8 @@ th: edit_preset: แก้ไขคำเตือนที่ตั้งไว้ล่วงหน้า title: จัดการคำเตือนที่ตั้งไว้ล่วงหน้า admin_mailer: + new_pending_account: + body: รายละเอียดของบัญชีใหม่อยู่ด้านล่าง คุณสามารถอนุมัติหรือปฏิเสธใบสมัครนี้ new_report: body: "%{reporter} ได้รายงาน %{target}" body_remote: ใครสักคนจาก %{domain} ได้รายงาน %{target} @@ -660,6 +662,7 @@ th: cas: CAS saml: SAML register: ลงทะเบียน + registration_closed: "%{instance} ไม่ได้กำลังเปิดรับสมาชิกใหม่" resend_confirmation: ส่งคำแนะนำการยืนยันใหม่ reset_password: ตั้งรหัสผ่านใหม่ security: ความปลอดภัย @@ -764,7 +767,7 @@ th: filters: contexts: account: โปรไฟล์ - home: เส้นเวลาหน้าแรก + home: หน้าแรกและรายการ notifications: การแจ้งเตือน public: เส้นเวลาสาธารณะ thread: การสนทนา @@ -818,6 +821,7 @@ th: in_memoriam_html: เพื่อระลึกถึง invites: delete: ปิดใช้งาน + expired: หมดอายุแล้ว expires_in: '1800': 30 นาที '21600': 6 ชั่วโมง @@ -1074,7 +1078,7 @@ th: month: "%b %Y" two_factor_authentication: add: เพิ่ม - disable: ปิดใช้งาน + disable: ปิดใช้งาน 2FA disabled_success: ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำเร็จ edit: แก้ไข enabled: เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว @@ -1129,4 +1133,5 @@ th: invalid_credential: กุญแจความปลอดภัยไม่ถูกต้อง not_enabled: คุณยังไม่ได้เปิดใช้งาน WebAuthn not_supported: เบราว์เซอร์นี้ไม่รองรับกุญแจความปลอดภัย + otp_required: เพื่อใช้กุญแจความปลอดภัย โปรดเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยก่อน registered_on: ลงทะเบียนเมื่อ %{date} diff --git a/config/locales/tr.yml b/config/locales/tr.yml index bc5c9a43f..62247bf56 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -255,6 +255,7 @@ tr: unsuspend_account: Hesabı Askıdan Kaldır update_announcement: Duyuruyu Güncelle update_custom_emoji: Özel İfadeyi Güncelle + update_domain_block: Engellenen Alan Adını Güncelle update_status: Durumu Güncelle actions: assigned_to_self_report: "%{name} kendilerine %{target} adlı raporu verdi" @@ -295,6 +296,7 @@ tr: unsuspend_account: "%{name} %{target}'in hesabının uzaklaştırmasını kaldırdı" update_announcement: "%{name}, %{target} duyurusunu güncelledi" update_custom_emoji: "%{name} %{target} emojiyi güncelledi" + update_domain_block: "%{name}, %{target} için alan adı engelini güncelledi" update_status: "%{name}, %{target} kullanıcısının durumunu güncelledi" deleted_status: "(silinmiş durum)" empty: Kayıt bulunamadı. @@ -437,6 +439,7 @@ tr: instances: by_domain: Alan adı delivery_available: Teslimat mevcut + empty: Alan adı bulunamadı. known_accounts: one: "%{count} bilinen hesap" other: "%{count} bilinen hesap" @@ -751,6 +754,7 @@ tr: functional: Hesabınız tamamen kullanıma hazır. pending: Başvurunuz personelimiz tarafından gözden geçirilmeyi beklemektedir. Bu biraz zaman alabilir. Başvurunuz onaylanırsa bir e-posta alacaksınız. redirecting_to: Hesabınız aktif değil çünkü şu anda %{acct} adresine yönlendirilmektedir. + too_fast: Form çok hızlı gönderildi, tekrar deneyin. trouble_logging_in: Oturum açarken sorun mu yaşıyorsunuz? use_security_key: Güvenlik anahtarını kullan authorize_follow: diff --git a/config/locales/tt.yml b/config/locales/tt.yml new file mode 100644 index 000000000..e35b5da21 --- /dev/null +++ b/config/locales/tt.yml @@ -0,0 +1,12 @@ +--- +tt: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Too many requests + '500': + '503': The page could not be served due to a temporary server failure. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 0170185f1..3795c171b 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1,16 +1,16 @@ --- vi: about: - about_hashtag_html: Đây là các tút công khai trong mạng liên hợp được gắn thẻ #%{hashtag}. Bạn có thể tương tác với chúng nếu đã đăng nhập. + about_hashtag_html: Đây là các tút #%{hashtag} trên mạng liên hợp. Bạn có thể tương tác với chúng sau khi đăng nhập. about_mastodon_html: 'Mạng xã hội của tương lai: Không quảng cáo, không theo dõi người dùng và phi tập quyền! Làm chủ quyền riêng tư của bạn với Mastodon!' about_this: Giới thiệu active_count_after: hoạt động - active_footnote: Người dùng hoạt động hàng tháng + active_footnote: Người dùng hoạt động hàng tháng (MAU) administered_by: 'Quản trị viên:' api: API apps: Ứng dụng di động apps_platforms: Lướt Mastodon trên iOS, Android và các nền tảng khác - browse_directory: Tìm những người có sở thích giống bạn + browse_directory: Tìm những người cùng chung sở thích browse_local_posts: Xem những gì đang xảy ra browse_public_posts: Xem thử những tút công khai trên mạng Mastodon contact: Liên lạc @@ -21,10 +21,10 @@ vi: federation_hint_html: Đăng ký tài khoản %{instance} là bạn có thể giao tiếp với mọi người trên bất kỳ máy chủ Mastodon nào và còn hơn thế nữa. get_apps: Ứng dụng di động hosted_on: "%{domain} vận hành nhờ Mastodon" - instance_actor_flash: 'Tài khoản này là một tác nhân ảo được sử dụng để đại diện cho chính máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên bị chặn trừ khi bạn muốn chặn toàn bộ máy chủ. + instance_actor_flash: 'Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. ' - learn_more: Tìm hiểu thêm + learn_more: Tìm hiểu privacy_policy: Chính sách bảo mật see_whats_happening: Dòng thời gian server_stats: 'Cộng đồng:' @@ -32,7 +32,7 @@ vi: status_count_after: other: tút status_count_before: Nơi lưu giữ - tagline: Mạng xã hội liên hợp lớn nhất + tagline: Theo dõi bạn bè và khám phá thế giới terms: Điều khoản dịch vụ unavailable_content: Giới hạn chung unavailable_content_description: @@ -57,12 +57,13 @@ vi: followers: other: Người theo dõi following: Theo dõi + instance_actor_flash: Tài khoản này được dùng để đại diện cho máy chủ và không phải là người thật. Đừng bao giờ vô hiệu hóa tài khoản này. joined: Đã tham gia %{date} last_active: online link_verified_on: Liên kết này đã được xác thực quyền sở hữu vào %{date} media: Bộ sưu tập moved_html: "%{name} đã dời sang %{new_profile_link}:" - network_hidden: Người dùng đã ẩn thông tin này + network_hidden: Dữ liệu đã bị ẩn never_active: Chưa có nothing_here: Trống trơn! people_followed_by: Những người %{name} theo dõi @@ -73,7 +74,7 @@ vi: other: Tút posts_tab_heading: Tút posts_with_replies: Tương tác - reserved_username: Tên người dùng đã có rồi + reserved_username: Tên này đã sử dụng rồi roles: admin: Quản trị viên bot: Tài khoản Bot @@ -83,7 +84,7 @@ vi: unfollow: Ngưng theo dõi admin: account_actions: - action: Thực hiện các hành động + action: Thực hiện hành động title: Áp đặt kiểm duyệt với %{acct} account_moderation_notes: create: Gửi tin nhắn kiểm duyệt @@ -91,7 +92,7 @@ vi: delete: Xóa bỏ destroyed_msg: Đã ghi chú kiểm duyệt xong! accounts: - add_email_domain_block: Chặn địa chỉ email + add_email_domain_block: Chặn tên miền email approve: Phê duyệt approve_all: Phê duyệt tất cả approved_msg: Đã phê duyệt %{username} đăng ký thành công @@ -110,7 +111,7 @@ vi: confirming: Chờ xác nhận delete: Xóa dữ liệu deleted: Đã xóa - demote: Gỡ bỏ chức vụ + demote: Xóa chức vụ destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ disable: Tạm khóa disable_two_factor_authentication: Vô hiệu hóa xác thực hai bước @@ -127,6 +128,7 @@ vi: follows: Đang theo dõi header: Ảnh bìa inbox_url: Hộp thư của người này + invite_request_text: Lý do đăng ký invited_by: Được mời bởi ip: IP joined: Đã tham gia @@ -139,7 +141,7 @@ vi: media_attachments: Tệp đính kèm memorialize: Chuyển sang tài khoản tưởng niệm memorialized: Tưởng nhớ - memorialized_msg: Đã chuyển thành công %{username} thành tài khoản tưởng nhớ + memorialized_msg: Đã chuyển %{username} thành tài khoản tưởng nhớ moderation: active: Hoạt động all: Toàn bộ @@ -160,14 +162,14 @@ vi: public: Công khai push_subscription_expires: Đăng ký PuSH hết hạn redownload: Làm mới trang cá nhân - redownloaded_msg: Đã làm tươi tài khoản %{username} thành công + redownloaded_msg: Đã tiếp nhận tài khoản %{username} thành công reject: Từ chối reject_all: Từ chối tất cả - rejected_msg: Đã từ chối đăng ký tài khoản %{username} thành công + rejected_msg: Đã từ chối đăng ký tài khoản %{username} remove_avatar: Xóa ảnh đại diện remove_header: Xóa ảnh bìa - removed_avatar_msg: Đã xóa bỏ ảnh đại diện của %{username} thành công - removed_header_msg: Đã xóa bỏ ảnh bìa của %{username} thành công + removed_avatar_msg: Đã xóa bỏ ảnh đại diện của %{username} + removed_header_msg: Đã xóa bỏ ảnh bìa của %{username} resend_confirmation: already_confirmed: Người dùng này đã được xác thực send: Gửi lại email xác nhận @@ -182,8 +184,8 @@ vi: staff: Đội ngũ quản lý user: Người dùng search: Tìm kiếm - search_same_email_domain: Tìm người dùng giống địa chỉ email - search_same_ip: Tìm người dùng giống IP + search_same_email_domain: Tra cứu email + search_same_ip: Tra cứu IP sensitive: Nhạy cảm sensitized: đánh dấu nhạy cảm shared_inbox_url: Hộp thư của máy chủ người này @@ -196,7 +198,7 @@ vi: subscribe: Đăng ký suspended: Đã vô hiệu hóa suspension_irreversible: Toàn bộ dữ liệu của người dùng này sẽ bị xóa hết. Bạn vẫn có thể ngừng vô hiệu hóa nhưng dữ liệu sẽ không thể phục hồi. - suspension_reversible_hint_html: Dữ liệu của tài khoản này sẽ bị xóa sạch vào %{date}. Trước thời hạn này, tài khoản vẫn có thể phục hồi dữ liệu. Nếu bạn muốn xóa dữ liệu của người này ngay bây giờ, hãy tiếp tục. + suspension_reversible_hint_html: Mọi dữ liệu của người này sẽ bị xóa sạch vào %{date}. Trước thời hạn này, dữ liệu vẫn có thể phục hồi. Nếu bạn muốn xóa dữ liệu của người này ngay lập tức, hãy tiếp tục. time_in_queue: Đang chờ cách đây %{time} title: Tài khoản unconfirmed_email: Email chưa được xác thực @@ -205,7 +207,7 @@ vi: undo_suspension: Ngừng vô hiệu hóa unsilenced_msg: Bỏ ẩn %{username} thành công unsubscribe: Hủy đăng ký - unsuspended_msg: Đã kích hoạt lại tài khoản %{username} thành công + unsuspended_msg: Đã kích hoạt lại %{username} thành công username: Tài khoản view_domain: Xem mô tả tài khoản này warn: Cấm upload @@ -213,19 +215,19 @@ vi: whitelisted: Danh sách trắng action_logs: action_types: - assigned_to_self_report: Báo cáo từ đội ngũ + assigned_to_self_report: Xử lý báo cáo được giao change_email_user: Đổi email cho người dùng confirm_user: Xác nhận người dùng - create_account_warning: Tạo cảnh cáo cài sẵn + create_account_warning: Gửi cảnh cáo create_announcement: Tạo thông báo create_custom_emoji: Tạo Emoji mới - create_domain_allow: Tạo danh sách máy chủ cho phép - create_domain_block: Tạo danh sách máy chủ chặn - create_email_domain_block: Tạo danh sách địa chỉ email chặn + create_domain_allow: Cho phép máy chủ + create_domain_block: Chặn máy chủ + create_email_domain_block: Chặn tên miền email create_ip_block: Chặn IP - demote_user: Gỡ bỏ chức vụ - destroy_announcement: Gỡ thông báo - destroy_custom_emoji: Gỡ Emoji + demote_user: Xóa chức vụ + destroy_announcement: Xóa thông báo + destroy_custom_emoji: Xóa Emoji destroy_domain_allow: Gỡ máy chủ cho phép destroy_domain_block: Gỡ máy chủ chặn destroy_email_domain_block: Gỡ email đã chặn @@ -233,27 +235,28 @@ vi: destroy_status: Xóa tút disable_2fa_user: Vô hiệu hóa xác thực hai bước disable_custom_emoji: Vô hiệu hóa Emoji - disable_user: Vô hiệu hóa người dùng - enable_custom_emoji: Bật Emoji - enable_user: Mở lại người dùng + disable_user: Tạm khóa người dùng + enable_custom_emoji: Cho phép Emoji + enable_user: Mở khóa người dùng memorialize_account: Tài khoản tưởng niệm promote_user: Chỉ định chức vụ - remove_avatar_user: Gỡ bỏ ảnh đại diện + remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo reset_password_user: Đặt lại mật khẩu - resolve_report: Xem xét lại báo cáo - sensitive_account: Đánh dấu nhạy cảm cho ảnh và video trên tài khoản của bạn + resolve_report: Xử lý báo cáo + sensitive_account: Đánh dấu nhạy cảm cho tài khoản silence_account: Tài khoản bị ẩn - suspend_account: Tài khoản bị vô hiệu hóa - unassigned_report: Báo cáo chưa xem - unsensitive_account: Ảnh và video trên tài khoản của bạn là bình thường + suspend_account: Vô hiệu hóa người dùng + unassigned_report: Báo cáo chưa xử lý + unsensitive_account: Đánh dấu tài khoản là bình thường unsilence_account: Tài khoản bỏ ẩn - unsuspend_account: Tài khoản đã ngừng vô hiệu hóa + unsuspend_account: Ngừng vô hiệu hóa update_announcement: Cập nhật thông báo update_custom_emoji: Cập nhật Emoji mới - update_status: Cập nhật trạng thái máy chủ + update_domain_block: Cập nhật máy chủ chặn + update_status: Cập nhật tút actions: - assigned_to_self_report: "%{name} đã xuất báo cáo %{target} cho chính họ" + assigned_to_self_report: "%{name} đã xử lý báo cáo được giao %{target}" change_email_user: "%{name} đã thay đổi địa chỉ email cho %{target}" confirm_user: "%{name} xác nhận địa chỉ email của người dùng %{target}" create_account_warning: "%{name} đã gửi cảnh cáo %{target}" @@ -261,21 +264,21 @@ vi: create_custom_emoji: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" create_domain_allow: "%{name} kích hoạt liên hợp với %{target}" create_domain_block: "%{name} chặn máy chủ %{target}" - create_email_domain_block: "%{name} chặn địa chỉ email %{target}" + create_email_domain_block: "%{name} chặn tên miền email %{target}" create_ip_block: "%{name} đã chặn IP %{target}" - demote_user: "%{name} đã gỡ bỏ chức vụ %{target}" - destroy_announcement: "%{name} gỡ thông báo %{target}" - destroy_custom_emoji: "%{name} biểu tượng cảm xúc bị phá hủy %{target}" + demote_user: "%{name} đã xóa chức vụ %{target}" + destroy_announcement: "%{name} xóa thông báo %{target}" + destroy_custom_emoji: "%{name} đã xóa emoji %{target}" destroy_domain_allow: "%{name} đã xóa tên miền %{target} khỏi danh sách trắng" destroy_domain_block: "%{name} bỏ chặn máy chủ %{target}" - destroy_email_domain_block: "%{name} bỏ chặn địa chỉ email %{target}" + destroy_email_domain_block: "%{name} bỏ chặn tên miền email %{target}" destroy_ip_block: "%{name} bỏ chặn IP %{target}" - destroy_status: "%{name} đã gỡ bỏ tút của %{target}" + destroy_status: "%{name} đã xóa tút của %{target}" disable_2fa_user: "%{name} đã vô hiệu hóa xác thực hai yếu tố của %{target}" - disable_custom_emoji: "%{name} đã gỡ bỏ Emoji %{target}" - disable_user: "%{name} vô hiệu hóa đăng nhập của người dùng %{target}" - enable_custom_emoji: "%{name} kích hoạt Emoji %{target}" - enable_user: "%{name} phê duyệt đăng nhập cho người dùng %{target}" + disable_custom_emoji: "%{name} đã ẩn emoji %{target}" + disable_user: "%{name} tạm khóa %{target}" + enable_custom_emoji: "%{name} cho phép Emoji %{target}" + enable_user: "%{name} mở khóa cho người dùng %{target}" memorialize_account: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" promote_user: "%{name} đã chỉ định chức vụ cho %{target}" remove_avatar_user: "%{name} đã xóa ảnh đại diện của %{target}" @@ -291,11 +294,12 @@ vi: unsuspend_account: "%{name} đã ngừng vô hiệu hóa %{target}" update_announcement: "%{name} cập nhật thông báo cho %{target}" update_custom_emoji: "%{name} đã cập nhật biểu tượng cảm xúc %{target}" + update_domain_block: "%{name} cập nhật chặn máy chủ %{target}" update_status: "%{name} cập nhật tút của %{target}" deleted_status: "(tút đã xóa)" empty: Không tìm thấy bản ghi. filter_by_action: Lọc theo hành động - filter_by_user: Lọc theo người dùng + filter_by_user: Lọc theo người title: Nhật ký kiểm duyệt announcements: destroyed_msg: Xóa thông báo thành công! @@ -310,7 +314,7 @@ vi: scheduled_for: Đã lên lịch %{time} scheduled_msg: Thông báo đã lên lịch! title: Thông báo - unpublished_msg: Gỡ bỏ thông báo thành xong! + unpublished_msg: Xóa bỏ thông báo thành xong! updated_msg: Cập nhật thông báo thành công! custom_emojis: assign_category: Xếp vào danh mục @@ -321,14 +325,14 @@ vi: create_new_category: Tạo danh mục mới created_msg: Emoji được tạo thành công! delete: Xóa bỏ - destroyed_msg: Đã gỡ Emoji thành công! + destroyed_msg: Đã xóa Emoji thành công! disable: Vô hiệu hóa disabled: Đã vô hiệu hóa disabled_msg: Vô hiệu hóa thành công Emoji này emoji: Emoji enable: Cho phép - enabled: Đã kích hoạt - enabled_msg: Kích hoạt thành công Emoji này + enabled: Đã cho phép + enabled_msg: Đã cho phép thành công Emoji này image_hint: PNG tối đa 50KB list: Danh sách listed: Liệt kê @@ -341,7 +345,7 @@ vi: title: Emoji uncategorized: Chưa phân loại unlist: Bỏ danh sách - unlisted: Chưa niêm yết + unlisted: Chưa cho phép update_failed_msg: Không thể cập nhật Emoji này updated_msg: Cập nhật thành công Emoji! upload: Tải lên @@ -419,21 +423,22 @@ vi: view: Xem máy chủ chặn email_domain_blocks: add_new: Thêm mới - created_msg: Đã chặn địa chỉ email này + created_msg: Đã chặn tên miền email này delete: Xóa bỏ - destroyed_msg: Đã bỏ chặn địa chỉ email này + destroyed_msg: Đã bỏ chặn tên miền email này domain: Địa chỉ email - empty: Chưa chặn địa chỉ email nào. + empty: Chưa chặn tên miền email nào. from_html: từ %{domain} new: create: Thêm địa chỉ - title: Chặn địa chỉ email mới - title: Địa chỉ email đã chặn + title: Chặn tên miền email mới + title: Tên miền email đã chặn instances: by_domain: Máy chủ delivery_available: Cho phép liên kết + empty: Không có máy chủ nào. known_accounts: - other: "%{count} tài khoản đã xác thực" + other: "%{count} tài khoản đã biết" moderation: all: Tất cả limited: Hạn chế @@ -444,7 +449,7 @@ vi: total_blocked_by_us: Bị chặn bởi chúng ta total_followed_by_them: Được họ theo dõi total_followed_by_us: Được quản trị viên theo dõi - total_reported: Báo cáo tổng hợp + total_reported: Toàn bộ báo cáo total_storage: Ảnh và video invites: deactivate_all: Vô hiệu hóa tất cả @@ -490,7 +495,7 @@ vi: status: Trạng thái hiện tại title: Mạng liên hợp report_notes: - created_msg: Báo cáo tổng hợp kiểm duyệt đã tạo xong! + created_msg: Ghi chú kiểm duyệt đã tạo xong! destroyed_msg: Đã xóa báo cáo kiểm duyệt! reports: account: @@ -506,6 +511,8 @@ vi: comment: none: Không có mô tả created_at: Báo cáo lúc + forwarded: Chuyển tiếp + forwarded_to: Chuyển tiếp tới %{domain} mark_as_resolved: Đánh dấu là đã giải quyết mark_as_unresolved: Đánh dấu là chưa giải quyết notes: @@ -527,7 +534,7 @@ vi: updated_at: Cập nhật lúc settings: activity_api_enabled: - desc_html: Số lượng trạng thái được đăng tại địa phương, người dùng hoạt động và đăng ký mới trong nhóm hàng tuần + desc_html: Thu thập số lượng tút được đăng, người dùng hoạt động và người dùng đăng ký mới hàng tuần title: Công khai số liệu thống kê về hoạt động người dùng bootstrap_timeline_accounts: desc_html: Tách tên người dùng bằng dấu phẩy. Chỉ có hiệu lực với các tài khoản công khai thuộc máy chủ. Mặc định khi trống là tất cả quản trị viên. @@ -575,6 +582,9 @@ vi: min_invite_role: disabled: Không một ai title: Cho phép lời mời bằng cách + require_invite_text: + desc_html: Khi chọn phê duyệt người dùng thủ công, hiện “Tại sao bạn muốn đăng ký?” thay cho tùy chọn nhập + title: Người đăng ký mới phải nhập mã mời tham gia registrations_mode: modes: approved: Yêu cầu phê duyệt để đăng ký @@ -743,11 +753,12 @@ vi: functional: Tài khoản của bạn đã được xác thực. pending: Đơn đăng ký của bạn đang chờ phê duyệt. Điều này có thể mất một thời gian. Bạn sẽ nhận được email nếu đơn đăng ký của bạn được chấp thuận. redirecting_to: Tài khoản của bạn không hoạt động vì hiện đang chuyển hướng đến %{acct}. + too_fast: Nghi vấn đăng ký spam, xin thử lại. trouble_logging_in: Gặp sự cố khi đăng nhập? use_security_key: Dùng khóa bảo mật authorize_follow: - already_following: Bạn đang theo dõi người dùng này - already_requested: Bạn vừa gửi một yêu cầu theo dõi tới người dùng này + already_following: Bạn đang theo dõi người này + already_requested: Bạn vừa gửi một yêu cầu theo dõi tới người này error: Rất tiếc, đã xảy ra lỗi khi tìm kiếm tài khoản từ nơi khác follow: Theo dõi follow_request: Bạn đã gửi yêu cầu theo dõi tới @@ -768,7 +779,7 @@ vi: invalid_signature: không phải là chữ ký số Ed25519 đúng date: formats: - default: "%d.%m.%Y" + default: "%-d %B, %Y" with_month_name: "%B %d, %Y" datetime: distance_in_words: @@ -802,8 +813,8 @@ vi: username_available: Tên người dùng của bạn sẽ có thể đăng ký lại username_unavailable: Tên người dùng của bạn sẽ không thể đăng ký mới directories: - directory: Kết bạn - explanation: Tìm và kết bạn với những người cùng sở thích + directory: Khám phá + explanation: Tìm và theo dõi những người cùng sở thích explore_mastodon: Thành viên %{title} domain_validator: invalid_domain: không phải là một tên miền hợp lệ @@ -890,7 +901,7 @@ vi: invalid_token: Mã đăng nhập Keybase giống như chữ ký số và phải đảm bảo 66 ký tự hex verification_failed: Keybase không nhận ra mã đăng nhập này là chữ ký của người dùng Keybase %{kb_username}. Vui lòng thử lại từ Keybase. wrong_user: Không thể tạo bằng chứng cho %{proving} trong khi đăng nhập là %{current}. Đăng nhập bằng %{proving} và thử lại. - explanation_html: Tại đây, bạn có thể kết nối mật mã các danh tính khác của mình, chẳng hạn như hồ sơ Keybase. Điều này cho phép người khác gửi cho bạn tin nhắn được mã hóa và tin tưởng nội dung bạn gửi cho họ. + explanation_html: Tại đây, bạn có thể kết nối mã hóa tài khoản của bạn trên các nền tảng khác, chẳng hạn như Keybase. Điều này cho phép người khác gửi cho bạn tin nhắn được mã hóa và tin tưởng nội dung bạn gửi cho họ. i_am_html: Tôi là %{username} trên %{service}. identity: Danh tính inactive: Không hoạt động @@ -913,7 +924,7 @@ vi: bookmarks: Đã lưu domain_blocking: Danh sách máy chủ đã chặn following: Danh sách người theo dõi - muting: Danh sách người dùng ẩn + muting: Danh sách người đã ẩn upload: Tải lên in_memoriam_html: Tưởng Niệm invites: @@ -961,7 +972,7 @@ vi: incoming_migrations_html: Để chuyển từ tài khoản khác sang tài khoản này, trước tiên bạn cần tạo tham chiếu tài khoản. moved_msg: Tài khoản của bạn hiện đang chuyển hướng đến %{acct} và những người theo dõi bạn cũng sẽ được chuyển đi. not_redirecting: Tài khoản của bạn hiện không chuyển hướng đến bất kỳ tài khoản nào khác. - on_cooldown: Gần đây bạn đã di chuyển tài khoản của bạn. Chức năng này sẽ trở nên khả dụng một lần nữa sau %{count} ngày. + on_cooldown: Bạn vừa mới chuyển tài khoản của bạn đi nơi khác. Chỉ có thể sử dụng tiếp tính năng này sau %{count} ngày. past_migrations: Những lần dời nhà cũ proceed_with_move: Chuyển hướng người theo dõi redirected_msg: Tài khoản của bạn đã chuyển hướng đến %{acct}. @@ -1044,7 +1055,7 @@ vi: truncate: "…" polls: errors: - already_voted: Bạn đã bình chọn rồi + already_voted: Bạn đã bình chọn xong rồi duplicate_options: chứa các lựa chọn trùng lặp duration_too_long: quá xa so với thời điểm hiện tại duration_too_short: quá sớm @@ -1076,7 +1087,7 @@ vi: relationship: Mối quan hệ remove_selected_domains: Xóa hết người theo dõi từ các máy chủ đã chọn remove_selected_followers: Xóa những người theo dõi đã chọn - remove_selected_follows: Hủy theo dõi người dùng đã chọn + remove_selected_follows: Ngưng theo dõi những người đã chọn status: Trạng thái tài khoản remote_follow: acct: Nhập địa chỉ Mastodon của bạn (tên@máy chủ) @@ -1137,11 +1148,11 @@ vi: windows: Windows windows_mobile: Windows Mobile windows_phone: Điện thoại Windows - revoke: Thu hồi - revoke_success: Thu hồi phiên thành công + revoke: Gỡ + revoke_success: Gỡ phiên thành công title: Phiên settings: - account: Tài khoản + account: Bảo mật account_settings: Cài đặt tài khoản aliases: Kết nối tài khoản appearance: Giao diện @@ -1149,7 +1160,7 @@ vi: back: Quay lại Mastodon delete: Xóa tài khoản development: Lập trình - edit_profile: Giới thiệu bản thân + edit_profile: Cá nhân hóa export: Xuất dữ liệu featured_tags: Hashtags thường dùng identity_proofs: Bằng chứng nhận dạng @@ -1167,7 +1178,7 @@ vi: statuses: attached: audio: - other: "%{count} bài hát" + other: "%{count} âm thanh" description: 'Đính kèm: %{attached}' image: other: "%{count} hình ảnh" @@ -1191,7 +1202,7 @@ vi: total_people: other: "%{count} người" total_votes: - other: "%{count} bình chọn" + other: "%{count} người" vote: Bình chọn show_more: Đọc thêm show_newer: Mới hơn @@ -1200,12 +1211,12 @@ vi: sign_in_to_participate: Đăng nhập để trả lời chủ đề này title: '%{name}: "%{quote}"' visibilities: - private: Đóng + private: Người theo dõi private_long: Chỉ người theo dõi mới xem được tút public: Công khai public_long: Ai cũng có thể thấy - unlisted: Mở - unlisted_long: Công khai nhưng không hiện trên bảng tin máy chủ + unlisted: Riêng tư + unlisted_long: Không hiện trên bảng tin máy chủ stream_entries: pinned: Tút được ghim reblogged: chia sẻ @@ -1219,28 +1230,28 @@ vi:
  • Thông tin tài khoản cơ bản: Nếu bạn đăng ký trên máy chủ này, bạn phải cung cấp tên người dùng, địa chỉ email và mật khẩu. Bạn cũng có thể tùy chọn bổ sung tên hiển thị, mô tả, ảnh đại diện, ảnh bìa. Tên người dùng, tên hiển thị, mô tả, ảnh hồ sơ và ảnh bìa luôn được hiển thị công khai.
  • -
  • Tút, lượt theo dõi và thông tin công khai khác: Danh sách những người bạn theo dõi được liệt kê công khai, cũng tương tự như danh sách những người theo dõi bạn. Khi bạn gửi tin nhắn, ngày giờ và ứng dụng sử dụng được lưu trữ. Tin nhắn có thể chứa tệp đính kèm hình ảnh và video. Bài viết công khai và bài viết đóng sẽ hiển thị công khai. Khi bạn đăng một tút trên trang cá nhân của bạn, đó là thông tin công khai. Tút của bạn được gửi đến những người theo dõi của bạn, điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và sẽ có các bản sao được lưu trữ ở đó. Khi bạn xóa bài viết, bản sao từ những người theo dõi của bạn cũng bị xóa theo. Hành động chia sẻ hoặc thích một tút luôn luôn là công khai.
  • -
  • Tin nhắn và tút chỉ dành cho người theo dõi: Tất cả tút được lưu trữ và xử lý trên máy chủ. Các tút chỉ dành cho người theo dõi được gửi đến những người theo dõi và người dùng của bạn được gắn thẻ trong đó. Còn các tin nhắn chỉ được gửi cho người dùng được gắn thẻ trong đó. Điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và có các bản sao được lưu trữ ở đó. Chúng tôi khuyến nghị chỉ cho những người được ủy quyền truy cập vào đó, nhưng không phải máy chủ nào cũng làm như vậy. Do đó, điều quan trọng là phải xem xét các máy chủ của người theo dõi của bạn. Bạn có thể thiết lập phê duyệt và từ chối người theo dõi mới theo cách thủ công trong cài đặt. Xin lưu ý rằng quản trị viên máy chủ của bạn và bất kỳ máy chủ của người nhận nào cũng có thể xem các tin nhắn. Người nhận tin nhắn có thể chụp màn hình, sao chép hoặc chia sẻ lại chúng. Không nên chia sẻ bất kỳ thông tin rủi ro nào trên Mastodon.
  • -
  • Địa chỉ IP và siêu dữ liệu khác: Khi bạn đăng nhập, chúng tôi ghi nhớ địa chỉ IP bạn đăng nhập cũng như tên trình duyệt của bạn. Tất cả các phiên đăng nhập sẽ để bạn xem xét và hủy bỏ trong phần cài đặt. Địa chỉ IP sử dụng được lưu trữ tối đa 12 tháng. Chúng tôi cũng có thể giữ lại nhật ký máy chủ bao gồm địa chỉ IP của những yêu cầu truy cập máy chủ của chúng tôi.
  • +
  • Tút, lượt theo dõi và nội dung công khai khác: Danh sách những người bạn theo dõi được liệt kê công khai, cũng tương tự như danh sách những người theo dõi bạn. Khi bạn đăng tút, ngày giờ và ứng dụng sử dụng được lưu trữ. Tút có thể chứa tệp đính kèm hình ảnh và video. Tút công khai và tút mở sẽ hiển thị công khai. Khi bạn đăng một tút trên trang cá nhân của bạn, đó là nội dung công khai. Tút của bạn sẽ gửi đến những người theo dõi của bạn, đồng nghĩa với việc sẽ có các bản sao được lưu trữ ở máy chủ của họ. Khi bạn xóa bài viết, bản sao từ những người theo dõi của bạn cũng bị xóa theo. Hành động chia sẻ hoặc thích một tút luôn luôn là công khai.
  • +
  • Tin nhắn và tút dành cho người theo dõi: Tất cả tút được lưu trữ và xử lý trên máy chủ. Các tút dành cho người theo dõi được gửi đến những người theo dõi và những người được gắn thẻ trong tút. Còn các tin nhắn chỉ được gửi đến cho người nhận. Điều đó có nghĩa là chúng được gửi đến các máy chủ khác nhau và có các bản sao được lưu trữ ở đó. Chúng tôi đề nghị chỉ cho những người được ủy quyền truy cập vào đó, nhưng không phải máy chủ nào cũng làm như vậy. Do đó, điều quan trọng là phải xem xét kỹ máy chủ của người theo dõi của bạn. Bạn có thể thiết lập tự mình phê duyệt và từ chối người theo dõi mới trong cài đặt. Xin lưu ý rằng quản trị viên máy chủ của bạn và bất kỳ máy chủ của người nhận nào cũng có thể xem các tin nhắn. Người nhận tin nhắn có thể chụp màn hình, sao chép hoặc chia sẻ lại chúng. Không nên chia sẻ bất kỳ thông tin rủi ro nào trên Mastodon.
  • +
  • Địa chỉ IP và siêu dữ liệu khác: Khi bạn đăng nhập, chúng tôi ghi nhớ địa chỉ IP đăng nhập cũng như tên trình duyệt của bạn. Tất cả các phiên đăng nhập sẽ để bạn xem xét và hủy bỏ trong phần cài đặt. Địa chỉ IP sử dụng được lưu trữ tối đa 12 tháng. Chúng tôi cũng có thể giữ lại nhật ký máy chủ bao gồm địa chỉ IP của những lượt đăng ký tài khoản trên máy chủ của chúng tôi.

Chúng tôi sử dụng thông tin của bạn để làm gì?

Bất kỳ thông tin nào chúng tôi thu thập từ bạn là:

    -
  • Để cung cấp các chức năng cốt lõi của Mastodon. Bạn chỉ có thể tương tác với nội dung của người khác và đăng nội dung của riêng bạn khi bạn đã đăng nhập. Ví dụ: bạn có thể theo dõi người khác để xem các tút của họ trong bảng tin cá nhân hóa của bạn.
  • -
  • Để hỗ trợ kiểm duyệt cộng đồng, ví dụ so sánh địa chỉ IP của bạn với các địa chỉ đã biết khác để xác định hacker hoặc vi phạm khác.
  • -
  • Địa chỉ email bạn cung cấp chỉ được sử dụng để gửi cho bạn thông tin, thông báo về những người khác tương tác với nội dung của bạn hoặc gửi tin nhắn cho bạn hoặc để trả lời các câu hỏi cũng như các yêu cầu khác từ chính bạn.
  • +
  • Để cung cấp các chức năng cốt lõi của Mastodon. Sau khi đăng nhập, bạn mới có thể tương tác với nội dung của người khác và đăng nội dung của riêng bạn. Ví dụ: bạn có thể theo dõi người khác để xem các tút của họ trong bảng tin của bạn.
  • +
  • Để hỗ trợ kiểm duyệt. Ví dụ so sánh địa chỉ IP của bạn với các địa chỉ đã biết khác để xác định hacker hoặc spammer.
  • +
  • Địa chỉ email bạn cung cấp chỉ được sử dụng để gửi các thông báo quan trọng, trả lời các câu hỏi cũng như yêu cầu khác từ chính bạn.

Chúng tôi bảo vệ thông tin của bạn như thế nào?

-

Chúng tôi thực hiện nhiều biện pháp bảo mật để duy trì sự an toàn khi bạn nhập, gửi hoặc truy cập thông tin cá nhân của bạn. Một vài trong số đó như là biện pháp kiểm soát phiên đăng nhập của bạn, lưu lượng giữa các ứng dụng và API của bạn, bảo mật bằng SSL và băm nhỏ mật khẩu nhờ thuật toán một chiều mạnh mẽ. Bạn có thể kích hoạt xác thực hai yếu tố để tiếp tục truy cập an toàn vào tài khoản của mình.

+

Chúng tôi thực hiện nhiều biện pháp để duy trì sự an toàn khi bạn nhập, gửi hoặc truy cập thông tin cá nhân của bạn. Một vài trong số đó như là kiểm soát phiên đăng nhập của bạn, lưu lượng giữa các ứng dụng và API, bảo mật bằng SSL và băm nhỏ mật khẩu nhờ thuật toán một chiều mạnh mẽ. Bạn có thể kích hoạt xác thực hai yếu tố để tiếp tục truy cập an toàn vào tài khoản của mình.


Chúng tôi lưu trữ dữ liệu như thế nào?

-

Chúng tôi sẽ thực hiện:

+

Chúng tôi tiến hành:

    -
  • Giữ lại nhật ký máy chủ chứa địa chỉ IP của tất cả các yêu cầu đến máy chủ này, cho đến khi các nhật ký đó được lưu giữ, không quá 90 ngày.
  • -
  • Giữ lại các địa chỉ IP được liên kết với người dùng đã đăng ký không quá 12 tháng.
  • +
  • Giữ lại nhật ký máy chủ chứa địa chỉ IP của tất cả các yêu cầu đến máy chủ này, cho đến khi các nhật ký đó bị xóa đi trong vòng 90 ngày.
  • +
  • Giữ lại các địa chỉ IP được liên kết với người dùng đã đăng ký trong vòng 12 tháng.
-

Bạn có thể tải xuống một bản sao nội dung lưu trữ của bạn, bao gồm các tút, tệp đính kèm phương tiện, ảnh đại diện và hảnh bìa.

+

Bạn có thể tải xuống một bản sao lưu trữ nội dung của bạn, bao gồm các tút, tệp đính kèm phương tiện, ảnh đại diện và ảnh bìa.

Bạn có thể xóa tài khoản của mình bất cứ lúc nào.


Chúng tôi có sử dụng cookie không?

@@ -1248,9 +1259,9 @@ vi:

Chúng tôi sử dụng cookie để hiểu và lưu các tùy chọn của bạn cho các lần truy cập trong tương lai.


Chúng tôi có tiết lộ bất cứ thông tin nào ra ngoài không?

-

Chúng tôi thề danh dự không bán, trao đổi hoặc chuyển nhượng thông tin nhận dạng cá nhân của bạn cho bên thứ ba. Trừ khi bên thứ ba đó đang hỗ trợ chúng tôi điều hành Mastodon, tiến hành kinh doanh hoặc phục vụ bạn, miễn là các bên đó đồng ý giữ bí mật thông tin này. Chúng tôi cũng có thể tiết lộ thông tin của bạn khi chúng tôi tin rằng việc công bố là để tuân thủ luật pháp, thực thi quy tắc máy chủ của chúng tôi hoặc bảo vệ quyền, tài sản hợp pháp hoặc sự an toàn của chúng tôi hoặc của ai đó.

-

Nội dung công khai của bạn có thể được tải xuống bởi các máy chủ khác trong mạng liên kết. Các tút công khai và chỉ dành cho người theo dõi của bạn được gửi đến các máy chủ nơi người theo dõi của bạn thuộc về và tin nhắn được gửi đến máy chủ của người nhận, cho đến khi những người theo dõi hoặc người nhận đó chuyển sang một máy chủ khác.

-

Khi bạn cho phép một ứng dụng sử dụng tài khoản của mình, tùy thuộc vào phạm vi quyền bạn phê duyệt, ứng dụng có thể truy cập thông tin trang cá nhân, danh sách người theo dõi, danh sách của bạn, tất cả tút và lượt thích của bạn. Các ứng dụng không bao giờ có thể truy cập địa chỉ e-mail hoặc mật khẩu của bạn.

+

Chúng tôi không bán, trao đổi hoặc chuyển nhượng thông tin nhận dạng cá nhân của bạn cho bên thứ ba. Trừ khi bên thứ ba đó đang hỗ trợ chúng tôi điều hành Mastodon, tiến hành kinh doanh hoặc phục vụ bạn, miễn là các bên đó đồng ý giữ bí mật thông tin này. Chúng tôi cũng có thể tiết lộ thông tin của bạn nếu việc công bố là để tuân thủ luật pháp, thực thi quy tắc máy chủ của chúng tôi hoặc bảo vệ quyền, tài sản hợp pháp hoặc sự an toàn của chúng tôi hoặc bất kỳ ai.

+

Nội dung công khai của bạn có thể được tải xuống bởi các máy chủ khác trong mạng liên hợp. Các tút công khai hay dành cho người theo dõi được gửi đến các máy chủ nơi người theo dõi của bạn là thành viên và tin nhắn được gửi đến máy chủ của người nhận, cho đến khi những người theo dõi hoặc người nhận đó chuyển sang một máy chủ khác.

+

Nếu bạn cho phép một ứng dụng sử dụng tài khoản của mình, tùy thuộc vào phạm vi quyền bạn phê duyệt, ứng dụng có thể truy cập thông tin trang cá nhân, danh sách người theo dõi, danh sách của bạn, tất cả tút và lượt thích của bạn. Các ứng dụng không bao giờ có thể truy cập địa chỉ e-mail hoặc mật khẩu của bạn.


Cấm trẻ em sử dụng

Nếu máy chủ này ở EU hoặc EEA: Trang web của chúng tôi, các sản phẩm và dịch vụ đều hướng đến những người trên 16 tuổi. Nếu bạn dưới 16 tuổi, theo yêu cầu của GDPR (Quy định bảo vệ dữ liệu chung) thì không được sử dụng trang web này.

@@ -1259,8 +1270,8 @@ vi:

Cập nhật thay đổi

Nếu có thay đổi chính sách bảo mật, chúng tôi sẽ đăng những thay đổi đó ở mục này.

-

Tài liệu này phát hành dưới hình thức CC-BY-SA. Nó được cập nhật lần cuối vào ngày 7 tháng 3 năm 2018.

-

Biên tập từ Discourse.

+

Tài liệu này phát hành dưới hình thức CC-BY-SA và được cập nhật lần cuối vào ngày 7 tháng 3 năm 2018.

+

Chỉnh sửa và hoàn thiện từ Discourse.

title: "%{instance} Điều khoản dịch vụ và chính sách bảo mật" themes: contrast: Mastodon (Độ tương phản cao) diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 8e4867b2f..0123836ec 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -5,15 +5,23 @@ zgh: api: API contact: ⴰⵎⵢⴰⵡⴰⴹ learn_more: ⵙⵙⵏ ⵓⴳⴳⴰⵔ + status_count_after: + one: ⴰⴷⴷⴰⴷ + other: ⴰⴷⴷⴰⴷⵏ unavailable_content_description: domain: ⴰⵎⴰⴽⴽⴰⵢ what_is_mastodon: ⵎⴰ'ⵢⴷ ⵉⴳⴰⵏ ⵎⴰⵙⵜⵔⴷⵓⵎ? accounts: follow: ⴹⴼⵕ + followers: + one: ⴰⵎⴹⴼⴰⵕ + other: ⵉⵎⴹⴼⴰⵕⵏ + media: ⵉⵙⵏⵖⵎⵉⵙⵏ never_active: ⵓⵙⴰⵔ roles: bot: ⴰⴱⵓⵜ group: ⵜⴰⵔⴰⴱⴱⵓⵜ + unfollow: ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ admin: account_moderation_notes: delete: ⴽⴽⵙ @@ -28,6 +36,7 @@ zgh: edit: ⵙⵏⴼⵍ email: ⵉⵎⴰⵢⵍ email_status: ⴰⴷⴷⴰⴷ ⵏ ⵢⵉⵍⴰⵢⵍ + followers: ⵉⵎⴹⴼⴰⵕⵏ location: all: ⵎⴰⵕⵕⴰ local: ⴰⴷⵖⴰⵔⴰⵏ @@ -137,8 +146,12 @@ zgh: notification_mailer: mention: action: ⵔⴰⵔ + relationships: + remove_selected_follows: ⴽⴽⵙ ⴰⴹⴼⴼⵓⵕ ⵉ ⵉⵏⵙⵙⵎⵔⵙⵏ ⵜⵜⵓⵙⵜⵢⵏⵉⵏ settings: account: ⴰⵎⵉⴹⴰⵏ account_settings: ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ + back: ⴰⵖⵓⵍ ⵖⵔ ⵎⴰⵙⵜⵓⴷⵓⵏ + edit_profile: ⵙⵏⴼⵍ ⵉⴼⵔⵙ notifications: ⵜⵉⵏⵖⵎⵉⵙⵉⵏ profile: ⵉⴼⵔⵙ diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index f93d6c03f..6c9079834 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -127,6 +127,7 @@ zh-CN: follows: 正在关注 header: 个人资料页横幅图片 inbox_url: 收件箱(Inbox)URL + invite_request_text: 加入理由 invited_by: 邀请者为 ip: IP 地址 joined: 加入于 @@ -251,6 +252,7 @@ zh-CN: unsuspend_account: 解除账号封禁 update_announcement: 更新公告 update_custom_emoji: 更新自定义表情符号 + update_domain_block: 更新域名屏蔽 update_status: 更新嘟文 actions: assigned_to_self_report: "%{name} 接管了举报 %{target}" @@ -291,6 +293,7 @@ zh-CN: unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态" update_announcement: "%{name} 更新了公告 %{target}" update_custom_emoji: "%{name} 更新了自定义表情 %{target}" + update_domain_block: "%{name} 更新了对 %{target} 的域名屏蔽" update_status: "%{name} 刷新了 %{target} 的嘟文" deleted_status: "(嘟文已删除)" empty: 没有找到日志 @@ -432,6 +435,7 @@ zh-CN: instances: by_domain: 域名 delivery_available: 可投递 + empty: 暂无域名。 known_accounts: other: "%{count} 个已知帐户" moderation: @@ -506,6 +510,8 @@ zh-CN: comment: none: 没有 created_at: 举报时间 + forwarded: 已转发 + forwarded_to: 转发举报至 %{domain} mark_as_resolved: 标记为“已处理” mark_as_unresolved: 标记为“未处理” notes: @@ -575,6 +581,9 @@ zh-CN: min_invite_role: disabled: 没有人 title: 允许发送邀请的用户组 + require_invite_text: + desc_html: 当注册需要手动批准时,将“你为什么想要加入?”设为必填项 + title: 要求新用户填写注册申请 registrations_mode: modes: approved: 注册时需要批准 @@ -743,6 +752,7 @@ zh-CN: functional: 您的帐号可以正常使用了。 pending: 工作人员正在审核您的申请。这需要花点时间。在申请被批准后,您将收到一封电子邮件。 redirecting_to: 您的帐户无效,因为它已被设置为跳转到 %{acct} + too_fast: 表单提交过快,请重试。 trouble_logging_in: 登录有问题? use_security_key: 使用安全密钥 authorize_follow: @@ -1332,7 +1342,7 @@ zh-CN: warning: explanation: disable: 虽然您的帐户被冻结,您的帐户数据仍然完整;但是您无法在解锁前执行任何操作。 - sensitive: 你上传的媒体文件和链接的媒体将被视作敏感内容。 + sensitive: 你上传的媒体文件和媒体链接将被视作敏感内容。 silence: 当您的帐户受限时,只有已经关注过你的人才会这台服务器上看到你的嘟文,并且您会被排除在各种公共列表之外。但是,其他人仍然可以手动关注你。 suspend: 您的帐户已被封禁,所有的嘟文和您上传的媒体文件都已经从该服务器和您的关注者的服务器上删除并且不可恢复。 get_in_touch: 您可回复该邮件以联系 %{instance} 的工作人员。 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index bb0cc716d..d34b69d46 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1,116 +1,134 @@ --- zh-HK: about: - about_hashtag_html: 這些是包含「#%{hashtag}」標籤的公開文章。只要你有任何 Mastodon 服務站、或者聯盟網站的用戶,便可以與他們互動。 - about_mastodon_html: Mastodon(萬象)是自由、開源的社交網絡。服務站各自獨立而互連,避免單一商業機構壟斷。找你所信任的服務站,建立帳號,你即可與任何服務站上的用戶溝通,享受無縫的網絡交流。 + about_hashtag_html: 這些是包含「#%{hashtag}」標籤的公開文章。只要你是任何聯盟網站的用戶,便可以與他們互動。 + about_mastodon_html: Mastodon(萬象)是屬於未來的社交網絡︰無廣告煩擾、無企業監控、設計講道義、分散無大台!立即重奪個人資料的控制權,使用 Mastodon 吧! about_this: 關於本服務站 active_count_after: 活躍 active_footnote: 每月活躍使用者 (MAU) administered_by: 管理者: api: API - apps: 行動應用程式 + apps: 手機 App apps_platforms: 在 iOS、Android 和其他平台使用 Mastodon browse_directory: 依興趣瀏覽個人資料目錄和過濾器 - browse_local_posts: 瀏覽這台伺服器中公開嘟文的直播串流 - browse_public_posts: 在 Mastodon 瀏覽公開嘟文的即時串流 + browse_local_posts: 瀏覽這個伺服器的公開文章即時串流 + browse_public_posts: 在 Mastodon 瀏覽公開文章的即時串流 contact: 聯絡 contact_missing: 未設定 - contact_unavailable: 未公開 + contact_unavailable: 不適用 discover_users: 探索使用者 - documentation: 文件 - federation_hint_html: 你只需要擁有 %{instance} 的帳戶,就可以追蹤隨便一台 Mastodon 伺服器上的人等等。 - get_apps: 嘗試行動應用程式 - hosted_on: 在 %{domain} 運作的 Mastodon 服務站 + documentation: 說明文件 + federation_hint_html: 你只需要擁有 %{instance} 的帳戶,就可以追蹤任何 Mastodon 服務站上的人! + get_apps: 嘗試使用手機 App + hosted_on: 在 %{domain} 運作的 Mastodon 伺服器 + instance_actor_flash: | + 這個帳戶是代表伺服器,而非代表任何個人用戶的虛擬帳號。 + 此帳戶是為聯盟協定而設。除非你想封鎖整個伺服器的話,否則請不要封鎖這個帳戶。如果你想封鎖伺服器,請使用網域封鎖以達到相同效果。 learn_more: 了解更多 privacy_policy: 隱私權政策 see_whats_happening: 看看發生什麼事 server_stats: 伺服器統計: source_code: 源代碼 status_count_after: - other: 條嘟文 - status_count_before: 他們共發佈了 + other: 篇文章 + status_count_before: 共發佈了 tagline: 關注朋友並探索新朋友 terms: 使用條款 - unavailable_content: 無法取得的內容 + unavailable_content: 受限制的伺服器 unavailable_content_description: domain: 伺服器 reason: 原因 + rejecting_media: 這些伺服器的媒體檔案將不會被處理或儲存,我們亦不會展示其縮圖。請手動點擊以觀看原始檔: + rejecting_media_title: 被篩選的媒體檔案 + silenced: 除非你已經關注個別使用者,否則來自這些伺服器的文章和通知將會被隱藏。 + silenced_title: 已靜音的伺服器 + suspended: 來自這些伺服器的所有數據將不會被處理。你將不可能聯絡來自這些伺服器的使用者。 + suspended_title: 已停權的伺服器 + unavailable_content_html: Mastodon 通常讓你瀏覽其他社交聯盟網站的所有內容,但是對於這個特定網站,有這些特別的例外規則。 user_count_after: other: 位使用者 - user_count_before: 這裏共註冊有 - what_is_mastodon: Mastodon 是甚麼? + user_count_before: 本站共有 + what_is_mastodon: Mastodon (萬象)是甚麼? accounts: choices_html: "%{name} 的選擇:" + endorsements_hint: 你可以推薦正在關注的人,他們會被顯示在你的個人頁面。 + featured_tags_hint: 你可以推薦不同標籤,它們也會在此處出現。 follow: 關注 followers: other: 關注者 following: 正在關注 - joined: 加入於 %{date} + joined: 於 %{date} 加入 last_active: 上次活躍時間 link_verified_on: 此連結的所有權已在 %{date} 檢查過 media: 媒體 moved_html: "%{name} 已經轉移到 %{new_profile_link}:" network_hidden: 此信息不可用 never_active: 永不 - nothing_here: 暫時未有內容可以顯示。 + nothing_here: 暫時未有內容可以顯示! people_followed_by: "%{name} 關注的人" people_who_follow: 關注 %{name} 的人 + pin_errors: + following: 你只能推薦你正在關注的使用者。 posts: - other: 嘟文 - posts_tab_heading: 嘟文 - posts_with_replies: 文章和回覆 - reserved_username: 此用戶名已被保留 + other: 文章 + posts_tab_heading: 文章 + posts_with_replies: 包含回覆的文章 + reserved_username: 這個使用者名稱已被保留 roles: admin: 管理員 bot: 機械人 group: 群組 - moderator: 監察員 + moderator: 板主 unavailable: 無法取得個人檔案 unfollow: 取消關注 admin: account_actions: action: 執行動作 - title: 在 %{acct} 執行管理員動作 + title: 在 %{acct} 執行管理操作 account_moderation_notes: - create: 記錄 - created_msg: 管理記錄已新增 + create: 加入管理紀錄 + created_msg: 已新增管理紀錄 delete: 刪除 - destroyed_msg: 管理記錄已被刪除 + destroyed_msg: 管理紀錄已被刪除 accounts: - add_email_domain_block: 將電子郵件網域加入黑名單 + add_email_domain_block: 封鎖電郵網域 approve: 核准 approve_all: 全部批准 + approved_msg: 成功審核了%{username} 的新帳號申請 are_you_sure: 你確定嗎? avatar: 頭像 by_domain: 域名 change_email: changed_msg: 帳號電郵更新成功! current_email: 現時電郵 - label: 改變電郵 + label: 更改電郵 new_email: 新的電郵 submit: 改變電郵 title: 改變 %{username} 的電郵 confirm: 確定 confirmed: 已確定 confirming: 確定 + delete: 刪除資料 deleted: 已刪除 - demote: 降任 + demote: 降權 + destroyed_msg: 即將刪除 %{username} 的數據 disable: 停用 - disable_two_factor_authentication: 停用雙重認證 - disabled: 已停用 + disable_two_factor_authentication: 關閉雙重認證 + disabled: 已凍結 display_name: 顯示名稱 domain: 域名 edit: 編輯 email: 電郵地址 - email_status: 电子邮件状态 - enable: 啟用 + email_status: 電郵狀態 + enable: 解除凍結 enabled: 已啟用 + enabled_msg: 成功解除 %{username} 帳號的凍結 followers: 關注者 follows: 正在關注 - header: 開頭 + header: 個人資料頁頂圖片 inbox_url: 收件箱(Inbox)URL invited_by: 邀請者 - ip: IP 位域 + ip: IP 位址 joined: 已加入 location: all: 全部 @@ -120,117 +138,177 @@ zh-HK: login_status: 登入狀態 media_attachments: 媒體檔案 memorialize: 設定為追悼帳戶 + memorialized: 被悼念的 + memorialized_msg: 成功將%{username} 的帳號變為紀念帳號 moderation: active: 活躍 all: 全部 - pending: 等待中 + pending: 處理中 silenced: 被靜音的 - suspended: 被停權的 + suspended: 已停權 title: 管理操作 - moderation_notes: 管理記錄 - most_recent_activity: 最新活動 - most_recent_ip: 最新 IP 位域 + moderation_notes: 管理備註 + most_recent_activity: 最近活動 + most_recent_ip: 最近的 IP 位址 + no_account_selected: 因未選擇帳號而未有任何變更 no_limits_imposed: 未受限制 not_subscribed: 未訂閱 pending: 等待審核中 - perform_full_suspension: 完全停權 - promote: 升任 + perform_full_suspension: 已停權 + promote: 提升權限 protocol: 協議 - public: 公共 + public: 公開 push_subscription_expires: PuSH 訂閱過期 - redownload: 更新頭像 + redownload: 更新頁面 + redownloaded_msg: 成功重新載入 %{username} 的個人資料頁面 reject: 拒絕 reject_all: 全部拒絕 - remove_avatar: 取消頭像 - remove_header: 移除開頭 + rejected_msg: 成功拒絕了 %{username} 的新帳號申請 + remove_avatar: 刪除頭像 + remove_header: 移除頁面頂端 + removed_avatar_msg: 成功刪除 %{username} 的頭像 + removed_header_msg: 成功刪除 %{username} 的頁面頂端圖片 resend_confirmation: - already_confirmed: 该用户已被确认 - send: 重发确认邮件 - success: 确认电子邮件成功发送! + already_confirmed: 這個使用者先前已經被確認過 + send: 重寄確認郵件 + success: 確認電郵發送成功! reset: 重設 reset_password: 重設密碼 resubscribe: 重新訂閱 - role: 身份 + role: 權限 roles: admin: 管理員 - moderator: 監察員 - staff: 管理人員 - user: 普通用戶 - search: 搜索 - search_same_email_domain: 其他有同個電子郵件網域的使用者 - search_same_ip: 其他有同個 IP 的使用者 + moderator: 管理員 + staff: 工作人員 + user: 普通使用者 + search: 搜尋 + search_same_email_domain: 其他有相同電郵網域的使用者 + search_same_ip: 其他有相同 IP 位址的使用者 sensitive: 敏感内容 sensitized: 已標記為敏感內容 shared_inbox_url: 公共收件箱(Shared Inbox)URL show: - created_reports: 此用戶所提舉報的紀錄 - targeted_reports: 此用戶被舉報的紀錄 + created_reports: 舉報紀錄 + targeted_reports: 被其他人舉報的紀錄 silence: 靜音 silenced: 已靜音 statuses: 文章 subscribe: 訂閱 suspended: 已停權 - time_in_queue: 正在佇列等待 %{time} - title: 用戶 + suspension_irreversible: 已永久刪除此帳號的數據。你可以取消此帳號的停權狀態,但帳號的資料已被永久刪除。 + suspension_reversible_hint_html: 此帳戶已被停權及所有數據將會於 %{date} 被刪除。在此之前,你仍可以完全回復帳號。如果你想即時刪除此帳戶的資料,可以在下面進行操作。 + time_in_queue: 排隊中 %{time} + title: 帳號 unconfirmed_email: 未確認的電郵 + undo_sensitized: 取消敏感狀態 undo_silenced: 解除靜音 undo_suspension: 解除停權 + unsilenced_msg: 成功取消對 %{username} 帳號的限制 unsubscribe: 取消訂閱 - username: 用戶名稱 + unsuspended_msg: 成功取消對 %{username} 帳號的停權操作 + username: 使用者名稱 + view_domain: 查看域名概要 warn: 警告 - web: 用戶頁面 - whitelisted: 已加入白名單 + web: 頁面 + whitelisted: 容許互傳文章 action_logs: + action_types: + assigned_to_self_report: 指派舉報 + change_email_user: 更改使用者的電郵 + confirm_user: 確認使用者 + create_account_warning: 新增警告 + create_announcement: 建立公告 + create_custom_emoji: 新增自訂的 Emoji + create_domain_allow: 新增允許的域名 + create_domain_block: 封鎖域名 + create_email_domain_block: 封鎖電郵域名 + create_ip_block: 新增IP規則 + demote_user: 將帳號降級 + destroy_announcement: 刪除公告 + destroy_custom_emoji: 刪除自定的 Emoji 表情符號 + destroy_domain_allow: 刪除允許的域名 + destroy_domain_block: 刪除已封鎖的域名 + destroy_email_domain_block: 刪除已封鎖的電郵城名 + destroy_ip_block: 刪除 IP 規則 + destroy_status: 刪除文章 + disable_2fa_user: 停用兩步驟驗證 + disable_custom_emoji: 停用自定的 Emoji 表情符號 + disable_user: 停用帳號 + enable_custom_emoji: 啟用自定的 Emoji 表情符號 + enable_user: 啟用帳號 + memorialize_account: 把帳號設定為悼念帳號 + promote_user: 提升帳號權限 + remove_avatar_user: 刪除頭像 + reopen_report: 重開舉報個案 + reset_password_user: 重設密碼 + resolve_report: 解決舉報個案 + sensitive_account: 把你的帳號的媒體設定為敏感內容 + silence_account: 把帳號靜音 + suspend_account: 把帳號停權 + unassigned_report: 取消指派舉報 + unsensitive_account: 取消把你帳號的媒體設定為敏感內容 + unsilence_account: 取消帳號的靜音狀態 + unsuspend_account: 取消帳號的停權狀態 + update_announcement: 更新公告 + update_custom_emoji: 更新自定的 Emoji 表情符號 + update_status: 更新文章 actions: assigned_to_self_report: "%{name} 指派了 %{target} 的舉報給自己" - change_email_user: "%{name} 改變了用戶 %{target} 的電郵地址" - confirm_user: "%{name} 確認了用戶 %{target} 的電郵地址" - create_account_warning: "%{name} 已對 %{target} 送出警告" - create_announcement: "%{name} 建立了新公告 %{target}" - create_custom_emoji: "%{name} 加入自訂表情符號 %{target}" - create_domain_allow: "%{name} 將 %{target} 網域加入黑名單了" - create_domain_block: "%{name} 阻隔了網域 %{target}" - create_email_domain_block: "%{name} 阻隔了電郵網域 %{target}" - demote_user: "%{name} 把用戶 %{target} 降任" + change_email_user: "%{name} 改變了使用者 %{target} 的電郵地址" + confirm_user: "%{name} 確認了使用者 %{target} 的電郵地址" + create_account_warning: "%{name} 已警告了 %{target}" + create_announcement: "%{name} 新增了公告 %{target}" + create_custom_emoji: "%{name} 加入了新的 Emoji %{target}" + create_domain_allow: "%{name} 和 %{target} 網域結盟了" + create_domain_block: "%{name} 封鎖了網域 %{target}" + create_email_domain_block: "%{name} 封鎖了電郵網域 %{target}" + create_ip_block: "%{name} 已經設定了針對 IP %{target} 的規則" + demote_user: "%{name} 把使用者 %{target} 降權" destroy_announcement: "%{name} 刪除了公告 %{target}" - destroy_custom_emoji: "%{name} 破壞了 %{target} 表情符號" - destroy_domain_allow: "%{name} 從白名單中移除了 %{target} 網域" - destroy_domain_block: "%{name} 取消了對網域 %{target} 的阻隔" - destroy_email_domain_block: "%{name} 取消了對電郵網域 %{target} 的阻隔" + destroy_custom_emoji: "%{name} 刪除了 Emoji %{target}" + destroy_domain_allow: "%{name} 禁止了與 %{target} 網域進行訊息聯網" + destroy_domain_block: "%{name} 取消了對網域 %{target} 的封鎖" + destroy_email_domain_block: "%{name} 取消了對電郵網域 %{target} 的封鎖" + destroy_ip_block: "%{name} 已經刪除了 IP %{target} 的規則" destroy_status: "%{name} 刪除了 %{target} 的文章" - disable_2fa_user: "%{name} 停用了用戶 %{target} 的雙重認證" - disable_custom_emoji: "%{name} 停用了自訂表情符號 %{target}" - disable_user: "%{name} 把用戶 %{target} 設定為禁止登入" - enable_custom_emoji: "%{name} 啟用了自訂表情符號 %{target}" - enable_user: "%{name} 把用戶 %{target} 設定為允許登入" + disable_2fa_user: "%{name} 停用了使用者 %{target} 的雙重認證" + disable_custom_emoji: "%{name} 停用了 Emoji %{target}" + disable_user: "%{name} 把使用者 %{target} 設定為禁止登入" + enable_custom_emoji: "%{name} 啟用了 Emoji %{target}" + enable_user: "%{name} 把使用者 %{target} 設定為允許登入" memorialize_account: "%{name} 把 %{target} 設定為追悼帳戶" - promote_user: "%{name} 對用戶 %{target} 进行了升任操作" + promote_user: "%{name} 對提升了使用者 %{target} 的權限" remove_avatar_user: "%{name} 取消了 %{target} 的頭像" - reopen_report: "%{name} 重開 %{target} 的舉報" - reset_password_user: "%{name} 重設了用戶 %{target} 的密碼" - resolve_report: "%{name} 處理了 %{target} 的舉報" - silence_account: "%{name} 靜音了用戶 %{target}" - suspend_account: "%{name} 停權了用戶 %{target}" + reopen_report: "%{name} 重開 %{target} 的舉報個案" + reset_password_user: "%{name} 重設了使用者 %{target} 的密碼" + resolve_report: "%{name} 處理了 %{target} 的舉報個案" + sensitive_account: "%{name} 將 %{target} 的媒體檔案列為敏感" + silence_account: "%{name} 靜音了帳號 %{target}" + suspend_account: "%{name} 將帳號 %{target} 停權" unassigned_report: "%{name} 取消指派 %{target} 的舉報" + unsensitive_account: "%{name} 取消將 %{target} 的媒體檔案的設為敏感" unsilence_account: "%{name} 取消了用戶 %{target} 的靜音狀態" - unsuspend_account: "%{name} 取消了用戶 %{target} 的停權狀態" + unsuspend_account: "%{name} 取消了帳號 %{target} 的停權狀態" update_announcement: "%{name} 更新了公告 %{target}" - update_custom_emoji: "%{name} 更新了自訂表情符號 %{target}" - update_status: "%{name} 刷新了 %{target} 的文章" - deleted_status: "(已刪除嘟文)" + update_custom_emoji: "%{name} 更新了 Emoji 表情符號 %{target}" + update_status: "%{name} 更新了 %{target} 的文章" + deleted_status: "(已刪除文章)" + empty: 找不到任何日誌。 + filter_by_action: 按動作篩選 + filter_by_user: 按帳號篩選 title: 營運日誌 announcements: destroyed_msg: 成功刪除公告! edit: title: 編輯公告 empty: 找不到公告。 - live: 直播 + live: 在線 new: create: 建立公告 title: 新增公告 published_msg: 成功發布公告! scheduled_for: 排定 %{time} - scheduled_msg: 公告已排定公開! + scheduled_msg: 公告已排程! title: 公告 unpublished_msg: 成功取消發布公告! updated_msg: 成功更新公告! @@ -239,7 +317,7 @@ zh-HK: by_domain: 網域 copied_msg: 成功將表情複製到本地 copy: 複製 - copy_failed_msg: 無法將表情複製到本地 + copy_failed_msg: 無法將表情符號複製到本地 create_new_category: 建立新分類 created_msg: 已新增表情符號 delete: 刪除 @@ -247,20 +325,22 @@ zh-HK: disable: 停用 disabled: 已停用 disabled_msg: 已停用表情符號 - emoji: emoji + emoji: Emoji 表情符號 enable: 啟用 enabled: 已啟用 enabled_msg: 已啟用表情符號 image_hint: PNG 格式,最大 50KB - list: 列表 - listed: 已顯示 + list: 列出 + listed: 已列出 new: - title: 加入新的自訂表情符號 + title: 加入新的自訂 Emoji 表情符號 + not_permitted: 你無權執行此操作 overwrite: 覆蓋 shortcode: 短代碼 shortcode_hint: 至少 2 個字元,只能使用字母、數字和下劃線 - title: 自訂 emoji + title: 自訂 Emoji 表情符號 uncategorized: 未分類 + unlist: 隱藏 unlisted: 已隱藏 update_failed_msg: 無法更新表情符號 updated_msg: 已更新表情符號 @@ -269,26 +349,26 @@ zh-HK: authorized_fetch_mode: 安全模式 backlog: 未處理工作數 config: 設定 - feature_deletions: 帳戶刪除 + feature_deletions: 刪除帳號功能 feature_invites: 邀請連結 feature_profile_directory: 個人資料目錄 feature_registrations: 註冊 - feature_relay: 聯邦中繼站 + feature_relay: 聯網中繼站 feature_spam_check: 防垃圾訊息 feature_timeline_preview: 時間軸預覽 features: 功能 hidden_service: 與隱密服務互連 - open_reports: 待處理檢舉數 + open_reports: 未處理的舉報個案數 pending_tags: 等待審核的主題標籤 pending_users: 等待審核的使用者 recent_users: 最近加入的使用者 search: 全文搜尋 single_user_mode: 單一使用者模式 - software: 軟體 + software: 軟件 space: 儲存空間用量 title: 儀表板 total_users: 總使用者數 - trends: 趨勢 + trends: 近期流行 week_interactions: 本週互動次數 week_users_active: 本週活躍使用者數 week_users_new: 本週新使用者數 @@ -299,22 +379,28 @@ zh-HK: destroyed_msg: 網域已成功從白名單移除 undo: 從白名單移除 domain_blocks: - add_new: 新增 - created_msg: 正處理域名阻隔 + add_new: 新增域名阻隔規則 + created_msg: 正處理阻隔域名的請求 destroyed_msg: 已撤銷域名阻隔 domain: 域名阻隔 + edit: 更改域名阻隔 + existing_domain_block_html: 你已經對 %{name} 施加了更嚴格的限制,你需要先對他取消封鎖。 new: create: 新增域名阻隔 - hint: "「域名阻隔」不會隔絕該域名用戶的用戶進入本站資料庫,而是會在時候自動套用特定的審批操作。" + hint: "「域名阻隔」不會隔絕該域名帳號進入本站資料庫,但是會在符合條件的帳號進入資料庫後,自動對它們套用特定審批操作。" severity: - desc_html: "「自動靜音」令該域名下用戶的文章,設為只對關注者顯示,沒有關注的人會看不到。 「自動刪除」會刪除將該域名下用戶的文章、媒體檔案和個人資料。「」則會拒絕接收來自該域名的媒體檔案。" + desc_html: "「自動靜音」令該域名下帳號的文章,被設為只對關注者顯示,沒有關注的人會看不到。 「自動刪除」會刪除將該域名下用戶的文章、媒體檔案和個人資料。「」則會拒絕接收來自該域名的媒體檔案。" noop: 無 silence: 自動靜音 suspend: 自動刪除 title: 新增域名阻隔 + private_comment: 私人留言 + private_comment_hint: 請提供更多有關此域名限制的資訊以供管理員作內部參考。 + public_comment: 公開留言 + public_comment_hint: 如果你已經啟用域名限制列表的公告,請為一般大眾提供更多有關此域名限制的資訊。 reject_media: 拒絕媒體檔案 reject_media_hint: 刪除本地緩存的媒體檔案,再也不在未來下載這個站點的檔案。和自動刪除無關 - reject_reports: 拒絕檢舉 + reject_reports: 拒絕檢舉個案 reject_reports_hint: 忽略所有來自此站點的檢舉。與停權無關 rejecting_media: 拒絕媒體檔案 rejecting_reports: 拒絕檢舉中 @@ -323,66 +409,117 @@ zh-HK: suspend: 已停權 show: affected_accounts: - other: 將影響到資料庫中的 %{count} 個帳戶 + other: 將影響到資料庫中的 %{count} 個帳號 retroactive: - silence: 對此域名的所有用戶取消靜音 - suspend: 對此域名的所有用戶取消除名 + silence: 對此域名的所有帳號取消靜音 + suspend: 對此域名的所有帳號取消除名 title: 撤銷 %{domain} 的域名阻隔 undo: 撤銷 - undo: 撤銷 + undo: 撤銷域名阻隔 + view: 顯示正被阻隔的網域 email_domain_blocks: - add_new: 加入新項目 + add_new: 新增 created_msg: 已新增電郵網域阻隔 delete: 刪除 destroyed_msg: 已刪除電郵網域阻隔 domain: 網域 + empty: 現時並沒有電郵域名被阻隔。 + from_html: 由%{domain} new: create: 新增網域 title: 新增電郵網域阻隔 title: 電郵網域阻隔 instances: + by_domain: 域名 + delivery_available: 傳送可用 + known_accounts: + other: "%{count} 已知的帳號" moderation: all: 全部 limited: 限制 title: 版主 + private_comment: 私人留言 + public_comment: 公開留言 title: 已知服務站 - total_followed_by_us: 開始關注你 + total_blocked_by_us: 被我們封鎖 + total_followed_by_them: 被他們關注 + total_followed_by_us: 被我們關注 + total_reported: 關於他們的舉報 + total_storage: 媒體附件 invites: + deactivate_all: 全部停用 filter: all: 全部 available: 可用 expired: 已失效 title: 篩選 - title: 邀請用戶 + title: 邀請 + ip_blocks: + add_new: 新增規則 + created_msg: 成功新增 IP 規則 + delete: 刪除 + expires_in: + '1209600': 2 週 + '15778476': 6 個月 + '2629746': 1 個月 + '31556952': 1 年 + '86400': 1 日 + '94670856': 3 年 + new: + title: 新增 IP 規則 + no_ip_block_selected: 因未選擇 IP 規則而未有任何變更。 + title: IP 規則 + pending_accounts: + title: 待處理帳戶(%{count}) + relationships: + title: "%{acct} 的關係" relays: - description_html: "聯邦中繼站 是種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦中探索內容,而無須本地使用者手動關注遠端伺服器的其他使用者。" - disabled: 停用 + add_new: 新增中繼 + delete: 刪除 + description_html: "聯盟中繼站是一種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦中探索內容,而無須本地使用者手動關注遠端伺服器的其他使用者。" + disable: 停用 + disabled: 已停用 enable: 啟用 + enable_hint: 啟用後,你的伺服器將訂閱該中繼的所有公開文章,並將會此伺服器的公開文章發送給它。 + enabled: 已啟用 + inbox_url: 中繼 URL + pending: 正在等待中繼許可 + save_and_enable: 儲存並啟用 + setup: 建立中繼通訊 + signatures_not_enabled: 中繼不會在安全模式或有限聯盟模式被開啓的情況下正常運作 + status: 狀態 + title: 中繼 report_notes: - created_msg: 舉報筆記已建立。 - destroyed_msg: 舉報筆記已刪除。 + created_msg: 舉報備註已建立! + destroyed_msg: 舉報備註已刪除! reports: + account: + notes: + other: "%{count} 則備註" + reports: + other: "%{count} 則舉報" action_taken_by: 操作執行者 are_you_sure: 你確認嗎? assign_to_self: 指派給自己 - assigned: 指派負責人 + assigned: 指派版主 + by_target_domain: 被舉報帳號的域名 comment: none: 沒有 created_at: 日期 mark_as_resolved: 標示為「已處理」 mark_as_unresolved: 標示為「未處理」 notes: - create: 建立筆記 - create_and_resolve: 建立筆記並標示為「已處理」 - create_and_unresolve: 建立筆記並標示為「未處理」 + create: 建立備註 + create_and_resolve: 標示為「已處理」並留下備註 + create_and_unresolve: 標示為「未處理」並留下備註 delete: 刪除 placeholder: 記錄已執行的動作,或其他相關的更新…… - reopen: 重開舉報 + reopen: 重開舉報個案 report: '舉報 #%{id}' reported_account: 舉報用戶 reported_by: 舉報者 resolved: 已處理 - resolved_msg: 舉報已處理。 + resolved_msg: 舉報個案已被處理! status: 狀態 title: 舉報 unassign: 取消指派 @@ -390,38 +527,51 @@ zh-HK: updated_at: 更新 settings: activity_api_enabled: - desc_html: 本站用戶發佈的文章,以及本站的活躍用戶和一週內新用戶數 - title: 公開用戶活躍度的統計數據 + desc_html: 本站的文章數量、活躍使用者數量、及每週新註冊使用者數量 + title: 公佈使用者活躍度的統計數據 bootstrap_timeline_accounts: - desc_html: 以半形逗號分隔多個用戶名。只能加入來自本站且未開啟保護的帳號。如果留空,則默認關注本站所有管理員。 - title: 新用戶默認關注 + desc_html: 以半形逗號分隔多個使用者名稱。只能加入來自本站且未開啟保護的帳號。如果留空,則默認關注本站所有管理員。 + title: 新使用者預設關注的對像 contact_information: email: 輸入一個公開的電郵地址 - username: 輸入用戶名稱 + username: 輸入使用者名稱 + custom_css: + desc_html: 透過 CSS 自訂每一頁的外觀 + title: 自訂 CSS + default_noindex: + desc_html: 影響所有未自行設定的帳號 + title: 預設帳號不在搜尋引擎索引之內 domain_blocks: all: 給任何人 disabled: 給沒有人 title: 顯示封鎖的網域 + users: 所有已登入的帳號 + domain_blocks_rationale: + title: 顯示原因予 enable_bootstrap_timeline_accounts: - title: 啟用新使用者的預設追蹤 + title: 啟用「新使用者預設關注」功能 hero: desc_html: 在首頁顯示。推薦最小 600x100px。如果留空,就會默認為服務站縮圖 title: 主題圖片 + mascot: + desc_html: 在不同頁面顯示。推薦最小 293×205px。如果留空,就會默認為伺服器縮圖。 + title: 縮圖 peers_api_enabled: desc_html: 現時本服務站在網絡中已發現的域名 title: 公開已知服務站的列表 preview_sensitive_media: + desc_html: 在其他頁面預覽的連結將會在敏感媒體的情況下顯示縮圖 title: 在 OpenGraph 預覽中顯示敏感媒體 profile_directory: - desc_html: 允許能探索使用者 + desc_html: 允許使用者被搜尋 title: 啟用個人資料目錄 registrations: closed_message: desc_html: 當本站暫停接受註冊時,會顯示這個訊息。
可使用 HTML title: 暫停註冊訊息 deletion: - desc_html: 允許所有人刪除自己的帳戶 - title: 開放刪除帳戶的權限 + desc_html: 允許所有人刪除自己的帳號 + title: 容許刪除帳號 min_invite_role: disabled: 沒有人 title: 允許發送邀請的身份 @@ -432,11 +582,11 @@ zh-HK: open: 任何人皆能註冊 title: 註冊模式 show_known_fediverse_at_about_page: - desc_html: 如果開啟,就會在時間軸預覽顯示跨站文章,否則就只會顯示本站文章。 - title: 在時間軸預覽顯示跨站文章 + desc_html: 如果停用,將會只在本站的歡迎頁顯示本站的文章。 + title: 在訪客預覽本站的時間軸上,顯示跨站文章 show_staff_badge: - desc_html: 在個人資料頁上顯示管理人員標誌 - title: 顯示管理人員標誌 + desc_html: 在個人資料頁上顯示工作人員標誌 + title: 顯示工作人員標誌 site_description: desc_html: 在首頁顯示,及在 meta 標籤使用作網站介紹。
你可以在此使用 <a><em> 等 HTML 標籤。 title: 本站介紹 @@ -444,12 +594,14 @@ zh-HK: desc_html: 本站詳細資訊頁的內文
你可以在此使用 HTML title: 本站詳細資訊 site_short_description: + desc_html: "顯示在側邊欄和網頁標籤(meta tags)。以一句話描述Mastodon是甚麼,有甚麼令這個伺服器脫\U000294D9而出。" title: 伺服器短描述 site_terms: desc_html: 可以填寫自己的隱私權政策、使用條款或其他法律文本。可以使用 HTML 標籤 title: 自訂使用條款 site_title: 本站名稱 spam_check_enabled: + desc_html: Mastodon可以自動舉報產生重複的垃圾內容的帳號,不過未必準確。 title: 自動防廣告訊息 thumbnail: desc_html: 用於在 OpenGraph 和 API 中顯示預覽圖。推薦大小 1200×630px @@ -458,7 +610,11 @@ zh-HK: desc_html: 在主頁顯示本站時間軸 title: 時間軸預覽 title: 網站設定 + trendable_by_default: + desc_html: 影響之前並未禁止的標籤 + title: 容許標籤不需要審核來成為今期流行 trends: + desc_html: 公開地顯示已審核的標籤為今期流行 title: 趨勢主題標籤 site_uploads: delete: 刪除上傳的檔案 @@ -478,13 +634,17 @@ zh-HK: title: 帳戶文章 with_media: 含有媒體檔案 tags: + accounts_today: 今日特殊使用 + accounts_week: 今週特殊使用 + breakdown: 根據來源剖析是日用量 context: 上下文 directory: 在目錄中 in_directory: 目錄中有 %{count} 個 last_active: 上次活躍 most_popular: 最熱門 most_recent: 最近 - review: 審核嘟文 + name: 主題標籤 + review: 審核文章 reviewed: 已審核 title: 主題標籤 trending_right_now: 最新趨勢 @@ -495,50 +655,100 @@ zh-HK: warning_presets: add_new: 新增 delete: 刪除 + edit_preset: 設定警告預設 + title: 管理警告預設 admin_mailer: + new_pending_account: + body: 以下是新帳戶的資訊。你可以審核這項申請。 + subject: 在 %{instance} 上未審核的新用戶(%{username}) new_report: - body: "%{reporter} 舉報了用戶 %{target}" - body_remote: 來自 %{domain} 的用戶舉報了用戶 %{target} - subject: 來自 %{instance} 的用戶舉報(#%{id}) + body: "%{reporter} 舉報了 %{target}" + body_remote: 來自 %{domain} 的人舉報了 %{target} + subject: 針對 %{instance} 的舉報(#%{id}) + new_trending_tag: + body: '今天流行使用未被審核的 #%{name} 主題標籤。在你允許之前,它不會被公開地顯示,你亦可以無視它使它不再污染你的眼睛。' + subject: 在 %{instance} 上未審核的主題標籤 (%{name}) + aliases: + add_new: 建立別名 (Alias) + created_msg: 成功建立別名 (alias)。你可以從舊帳號開始轉移。 + deleted_msg: 成功刪除別名 (alias)。你將不可以由舊帳號轉移到當前帳號。 + empty: 你沒有別名 (alias)。 + hint_html: 如果你想由另一個帳戶轉移到此帳號,你可以在此處創建別名 (alias),然後系統容許你將關注者由舊帳戶轉移到此帳號。此操作是無害且可以還原的帳號遷移程序,需要在舊帳號啟動。 + remove: 取消連結別名 (Alias) appearance: + advanced_web_interface: 進階網頁介面 + advanced_web_interface_hint: 如果你想善用整個螢幕闊度,你可以啟用「進階網頁介面」,在畫面上配置多個不同的欄目,讓你能根據需要,同時查看盡可能多的信息,支援的欄位包括:主頁、通知、其他站點和任何的列表和標籤。 + animations_and_accessibility: 動畫和輔助功能 + confirmation_dialogs: 確認對話框 + discovery: 探索 localization: body: Mastodon 是由志願者翻譯的。 + guide_link: https://crowdin.com/project/mastodon guide_link_text: 每個人都能貢獻。 + sensitive_content: 敏感內容 + toot_layout: 發文介面 application_mailer: - notification_preferences: 更改電郵首選項 + notification_preferences: 更改電郵設定 salutation: "%{name}:" settings: 修改電郵設定︰%{link} view: 進入瀏覽︰ view_profile: 檢視個人資料頁 view_status: 檢視文章 applications: - created: 已建立應用 - destroyed: 已刪除應用 + created: 已建立應用程式 + destroyed: 已刪除應用程式 invalid_url: 所提供的網址不正確 regenerate_token: 重設 token token_regenerated: 已重設 token warning: 警告,不要把它分享給任何人! your_token: token auth: + apply_for_account: 請求邀請 change_password: 密碼 - delete_account: 刪除帳戶 - delete_account_html: 如果你想刪除你的帳戶,請點擊這裡繼續。你需要確認你的操作。 + checkbox_agreement_html: 我同意 的伺服器規則服務條款 + checkbox_agreement_without_rules_html: 我同意 服務條款 + delete_account: 刪除帳號 + delete_account_html: 如果你想刪除你的帳號,請點擊這裡繼續。你需要確認你的操作。 + description: + prefix_invited_by_user: "@%{name} 邀請你加入這個 Mastodon 服務站!" + prefix_sign_up: 立即註冊 Mastodon! + suffix: 有了一個帳戶,就可以從任何Mastodon服務器關注任何人,發佈更新並與任何Mastodon服務器的用戶交流! didnt_get_confirmation: 沒有收到確認指示電郵? + dont_have_your_security_key: 找不到安全密鑰? forgot_password: 忘記了密碼? invalid_reset_password_token: 密碼重置 token 無效或已過期。請重新重設密碼。 + link_to_otp: 請輸入兩步䮕認證碼或恢復碼 + link_to_webauth: 使用你的安全密鑰裝置 login: 登入 logout: 登出 migrate_account: 轉移到另一個帳號 migrate_account_html: 想要將這個帳號指向另一個帳號可到這裡設定。 or_log_in_with: 或登入於 + providers: + cas: CAS + saml: SAML register: 登記 + registration_closed: "%{instance} 並不接受新成員請求" resend_confirmation: 重發確認指示電郵 reset_password: 重設密碼 security: 登入資訊 set_new_password: 設定新密碼 + setup: + email_below_hint_html: 如果下面的電郵地址不正確,你可在此修改,然後接收電郵進行確認。 + email_settings_hint_html: 確認電郵已發送至 %{email}。電郵地址不正確的話,你可以在帳戶設置中進行更改。 + title: 設定 + status: + account_status: 帳戶文章 + confirming: 正在等待確認電郵地址。 + functional: 你的帳戶可以正常使用。 + pending: 管理員正在處理你的申請。可能會需要一點時間處理。我們將會在申請被批準的時候馬上寄電郵給你。 + redirecting_to: 你的帳戶因為正在重新定向到 %{acct},所以暫時被停用。 + too_fast: 你太快遞交了,請再試一次。 + trouble_logging_in: 不能登入? + use_security_key: 使用安全密鑰裝置 authorize_follow: already_following: 你已經關注了這個帳號 - already_requested: 您早已向該帳戶寄送追蹤請求 + already_requested: 你先前已向該帳號發送關注請求 error: 對不起,尋找這個跨站用戶的過程發生錯誤 follow: 關注 follow_request: 關注請求已發送给: @@ -548,6 +758,19 @@ zh-HK: return: 顯示個人資料頁 web: 返回本站 title: 關注 %{acct} + challenge: + confirm: 繼續 + hint_html: "温馨提示 我們在未來一小時內不會再要求你填寫密碼。" + invalid_password: 密碼錯誤 + prompt: 確認密碼以繼續 + crypto: + errors: + invalid_key: 不是一個有效的 Ed25519 或 Curve25519 密鑰 + invalid_signature: 不是一個有效的 Ed25519 簽名 + date: + formats: + default: "%Y年%b月%d日" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}小時前" @@ -563,14 +786,33 @@ zh-HK: x_months: "%{count}個月" x_seconds: "%{count}秒" deletes: + challenge_not_passed: 你填寫的資料不正確 confirm_password: 輸入你現在的密碼來驗證身份 + confirm_username: 請填寫你的登入名稱以確認程序 proceed: 刪除帳戶 success_msg: 你的帳戶已經成功刪除 + warning: + before: 在繼續之前,請仔細閱讀以下說明: + caches: 已被其他服務器緩存的內容可能不會消失 + data_removal: 你的文章和其他資料將被永久刪除 + email_change_html: 你可以在不刪除帳戶的情況下更改電子郵件地址 + email_contact_html: 如果仍然沒有送達,你可以通過電子郵件發送到%{email}以獲得協助 + email_reconfirmation_html: 如果你沒有收到確認電郵,你可以要求再次發送它 + irreversible: 你將無法重啟你的帳戶 + more_details_html: 請參見隱私政策以瀏覽細節。 + username_available: 你的登入名稱將可被其他人使用 + username_unavailable: 你的登入名稱將不能讓其他人使用 + directories: + directory: 個人資料目錄 + explanation: 根據興趣認識新朋友 + explore_mastodon: 探索%{title} + domain_validator: + invalid_domain: 不是一個可用域名 errors: - '400': The request you submitted was invalid or malformed. + '400': 你的請求無效或格式不正確。 '403': 你沒有觀看本頁的權限。 '404': 找不到內容。 - '406': This page is not available in the requested format. + '406': 無法根據的格式顯示此頁面 '410': 內容已被刪除。 '422': content: 無法確認登入資訊。會不會你阻擋了本站使用 Cookies 的權限? @@ -579,37 +821,98 @@ zh-HK: '500': content: 抱歉,我們的後台出錯了。 title: 這個頁面有問題 - '503': The page could not be served due to a temporary server failure. + '503': 因短暫的伺服器錯誤而未能提供此頁面 noscript_html: 使用 Mastodon 網頁版應用需要啟用 JavaScript。你也可以選擇適用於你的平台的 Mastodon 應用。 + existing_username_validator: + not_found: 無法找到位於本伺服器的用戶 + not_found_multiple: 無法找到%{usernames} exports: archive_takeout: date: 日期 download: 下載檔案 - hint_html: 你可以下載包含你的文章和媒體的檔案。資料以 ActivityPub 格式儲存,可用於相容的軟體。你可以每七天下載一次。 + hint_html: 你可以下載包含你的文章和媒體的檔案。資料以 ActivityPub 格式儲存,可用於相容的軟體。你可以每 7 天下載一次。 in_progress: 檔案製作中... request: 下載檔案 size: 檔案大小 blocks: 被你封鎖的用戶 + bookmarks: 書籤 + csv: CSV + domain_blocks: 域名封鎖 lists: 列表 mutes: 你所靜音的用戶 storage: 媒體容量大小 + featured_tags: + add_new: 新增 + errors: + limit: 你所推薦的標籤數量已經達到上限 + hint_html: "甚麼是推薦主題標籤? 它們會被顯示在你的個人資料頁面,讓其他人可以根據標籤瀏覽你的公開文章,令人們更易找到你創作或者長期作品!" filters: + contexts: + account: 個人資料 + home: 主頁和列表 + notifications: 通知 + public: 公共時間軸 + thread: 對話 + edit: + title: 編輯篩選器 + errors: + invalid_context: 沒有提供內文或內文無效 + invalid_irreversible: 不可逆的篩選器只適用放主頁或通知頁面 index: - empty: 您沒有過濾器。 + delete: 刪除 + empty: 你沒有過濾器。 + title: 篩選 + new: + title: 新增篩選器 footer: + developers: 開發者 more: 更多...... + resources: 項目 + trending_now: 今期流行 generic: all: 全部 changes_saved_msg: 已成功儲存修改。 copy: 複製 + delete: 刪除 + no_batch_actions_available: 此頁目沒有可用的批次操作 + order_by: 排序 save_changes: 儲存修改 validation_errors: other: 提交的資料有 %{count} 項問題 + html_validator: + invalid_markup: 含有無效的HTML標記:%{error} + identity_proofs: + active: 活躍 + authorize: 是的,請授權 + authorize_connection_prompt: 授權此加密通訊? + errors: + failed: 加密通訊失敗。請在%{provider} 重試。 + keybase: + invalid_token: Keybase tokens必定為66個16位元字符的簽名檔散列。 + verification_failed: Keybase不能識別此令牌為Keybase用戶%{kb_username} 的簽名。請在Keybase再試一次。 + wrong_user: 未能以%{current} 為 %{proving} 建立身份驗證。請登入為%{proving} 再試一次。 + explanation_html: 在此你連結其他網路平台(如 Keybase)上的加密身份。讓其他人可以在那些平台上,傳送加密信息給你,並驗證你的身份。 + i_am_html: 我是 %{service} 上的 %{username} + identity: 身份 + inactive: 停用 + publicize_checkbox: 發表文章: + publicize_toot: 驗證成功!我在%{service} 是%{username} :%{url} + remove: 刪除帳號的驗證 + removed: 成功刪除身份驗證 + status: 確認狀態 + view_proof: 查看證明 imports: + modes: + merge: 合併 + merge_long: 留下舊有記錄並添加新的資訊 + overwrite: 覆蓋 + overwrite_long: 用新記錄覆蓋當前記錄 preface: 你可以在此匯入你在其他服務站所匯出的資料檔,包括︰你所關注的用戶,被你封鎖的用戶。 success: 你已成功上載資料檔,我們正將資料匯入,請稍候 types: blocking: 被你封鎖的用戶名單 + bookmarks: 書籤 + domain_blocking: 域名封鎖名單 following: 你所關注的用戶名單 muting: 靜音名單 upload: 上載 @@ -641,11 +944,45 @@ zh-HK: media_attachments: validations: images_and_video: 不能在已有圖片的文章上加入影片 + not_ready: 無法附加尚未處理完的檔案。 請稍後再試! too_many: 不可以加入超過 4 個檔案 migrations: acct: 新帳戶的 用戶名@域名 + cancel: 取消定向 + cancel_explanation: 取消重新定向將會重新激活當前帳戶,但並不會還原已移至該帳戶的關注者。 + cancelled_msg: 成功取消定向。 + errors: + already_moved: 是已經移至的相同帳戶 + missing_also_known_as: 不是此帳戶的別名(alias) + move_to_self: 不能移至當前帳戶 + not_found: 找不到 + on_cooldown: 你正在處於冷卻狀態 + followers_count: 轉移時的追隨者 + incoming_migrations: 由另一個帳號轉移 + incoming_migrations_html: 要由其他帳戶轉移至當前帳戶的話,首先你需要 新增帳戶別名(alias). + moved_msg: 你的帳號正被轉接至 %{acct} ,你的關注者正在同步轉移至該帳號。 + not_redirecting: 你的帳號現時並未被重新定向。 + on_cooldown: 你最近已經轉移過帳戶。此功能將在 %{count} 天後可重新使用。 + past_migrations: 以往的帳戶轉移 + proceed_with_move: 移動追隨者 + redirected_msg: 你的帳戶即將被重新定向至%{acct}。 + redirecting_to: 你的帳戶正被重新定向至%{acct}。 + set_redirect: 設定重新定向 + warning: + backreference_required: 新帳戶必須首先反向標識(back-reference)當前帳戶 + before: 在繼續之前,請仔細閱讀以下說明: + cooldown: 在轉移帳號之後將會有一段冷卻時間,在冷卻時間內你將不能再次轉移帳號 + disabled_account: 你的當前帳號將不能完整地運作。但你將會有權力匯出你的數據和重新啟用你的帳號。 + followers: 此操作將會由當前帳號轉移所有追隨者至新帳號 + only_redirect_html: 另外,你亦可只在你的個人資料頁面放上重新定向標記. + other_data: 並不會自動轉移其他數據 + redirect: 你的當前帳號的個人資料頁面將會加上一個重新定向公告,並會在搜尋結果中被剔除。 moderation: title: 營運 + move_handler: + carry_blocks_over_text: 此用戶從%{acct} 轉移,該帳號已被你封鎖。 + carry_mutes_over_text: 此用戶從%{acct} 轉移,該帳號已被你靜音。 + copy_account_note_text: 此用戶從%{acct} 轉移,這是你之前在該帳號留下的備注: notification_mailer: digest: action: 查看所有通知 @@ -657,9 +994,9 @@ zh-HK: other: "自從上次登入以來,你收到 %{count} 則新的通知 \U0001F418" title: 在你不在的這段時間…… favourite: - body: 您的文章被 %{name} 收藏: - subject: "%{name} 收藏了你的文章" - title: 新的收藏 + body: 你的文章被 %{name} 喜愛: + subject: "%{name} 喜歡你的文章" + title: 新的最愛 follow: body: "%{name} 開始關注你!" subject: "%{name} 現正關注你" @@ -675,22 +1012,94 @@ zh-HK: subject: "%{name} 在文章中提及你" title: 新的提及 reblog: - body: 您的文章被 %{name} 轉推: + body: 你的文章被 %{name} 轉推: subject: "%{name} 轉推了你的文章" title: 新的轉推 + notifications: + email_events: 電郵通知活動 + email_events_hint: 選擇你想接收通知的活動: + other_settings: 其他通知設定 + number: + human: + decimal_units: + format: "%n%u" + units: + billion: 十億 + million: 百萬 + quadrillion: 千兆 + thousand: 千 + trillion: 兆 + otp_authentication: + code_hint: 請輸入你認證器所產生的代碼,以確認設定 + description_html: 當你啟用雙重認證後,你登入時將需要使用你的手機或其他認證器所產生的代碼。 + enable: 啟用 + instructions_html: "請用你手機的認證器應用程式(如 Google Authenticator、Authy),掃描這裏的QR 圖形碼。在雙重認證啟用後,你登入時將須要使用此應用程式產生的認證碼。" + manual_instructions: 如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰ + setup: 設定 + wrong_code: 你輸入的認證碼並不正確!可能伺服器時間和你手機不一致,請檢查你手機的時鐘,或與本站管理員聯絡。 pagination: newer: 較新 next: 下一頁 older: 較舊 prev: 上一頁 truncate: "……" + polls: + errors: + already_voted: 你已投票 + duplicate_options: 含有重覆項目 + duration_too_long: 太久了! + duration_too_short: 時間太近了! + expired: 投票已結束 + invalid_choice: 你所選的投票選項不存在 + over_character_limit: 不能多於 %{max} 個字符 + too_few_options: 一定要多於一個項目 + too_many_options: 不能多於 %{max} 個項目 + preferences: + other: 其他 + posting_defaults: 發佈預設值 + public_timelines: 公共時間軸 + reactions: + errors: + limit_reached: 已達到可以給予反應極限 + unrecognized_emoji: 不能識別這個emoji relationships: + activity: 帳戶活動 + dormant: 潛在 + follow_selected_followers: 關注所選的追隨者 + followers: 追隨者 + following: 正在關注 + invited: 已邀請 + last_active: 上次活躍 + most_recent: 最近 + moved: 已轉移 + mutual: 共同 + primary: 主要 + relationship: 關係 + remove_selected_domains: 從所選伺服器清除所有追隨者 remove_selected_followers: 刪除所選選項 + remove_selected_follows: 取消關注所選用戶 + status: 帳戶帖文 remote_follow: - acct: 請輸入你的︰用戶名稱@服務點域名 + acct: 請輸入你想使用的「使用者名稱@域名」身份 missing_resource: 無法找到你用戶的轉接網址 + no_account_html: 沒有帳號?你可以在這裏註冊 proceed: 下一步 prompt: 你希望關注︰ + reason_html: "為甚麼有必要做這個步驟?因為%{instance}未必是你註冊的伺服器,所以我們首先需要將你帶回你的伺服器。" + remote_interaction: + favourite: + proceed: 下一步 + prompt: 你要求把這篇文章加入最愛: + reblog: + proceed: 繼續轉嘟 + prompt: 你想轉推: + reply: + proceed: 下一步 + prompt: 你想回覆: + scheduled_statuses: + over_daily_limit: 你已經超越了當天排定發文的限額 (%{limit}) + over_total_limit: 你已經超越了排定發文的限額 (%{limit}) + too_soon: 不可以改變過去哦,嘟文只可以排定在未來 sessions: activity: 最近活動 browser: 瀏覽器 @@ -717,24 +1126,49 @@ zh-HK: explanation: 這些是現在正登入於你的 Mastodon 帳號的瀏覽器。 ip: IP 位址 platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux mac: Mac + other: 未知平台 + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: 取消 revoke_success: 作業階段成功取消 title: 作業階段 settings: + account: 帳戶 + account_settings: 帳戶設定 + aliases: 帳戶別名(aliases) + appearance: 外觀設定 authorized_apps: 授權應用程式 back: 回到 Mastodon delete: 刪除帳戶 development: 開發 edit_profile: 修改個人資料 export: 匯出 + featured_tags: 推薦的標籤 + identity_proofs: 身份驗證 import: 匯入 + import_and_export: 匯入及匯出 migrate: 帳戶遷移 notifications: 通知 preferences: 偏好設定 + profile: 個人資料 + relationships: 關注及追隨者 two_factor_authentication: 雙重認證 + webauthn_authentication: 安全鑰匙 + spam_check: + spam_detected: 此為系統的自動報告:已發現垃圾訊息。 statuses: attached: + audio: + other: "%{count} 段影片" description: 附件: %{attached} image: other: "%{count} 幅圖片" @@ -744,6 +1178,8 @@ zh-HK: content_warning: 內容警告: %{warning} disallowed_hashtags: other: 包含不允許的標籤: %{tags} + errors: + in_reply_not_found: 你所回覆的嘟文並不存在。 language_detection: 自動偵測語言 open_in_web: 開啟網頁 over_character_limit: 超過了 %{max} 字的限制 @@ -753,8 +1189,16 @@ zh-HK: private: 不能置頂非公開的文章 reblog: 不能置頂轉推 poll: + total_people: + other: "%{count} 人" + total_votes: + other: "%{count} 票" vote: 投票 show_more: 顯示更多 + show_newer: 顯示較新嘟文 + show_older: 顯示較舊嘟文 + show_thread: 顯示討論串 + sign_in_to_participate: 登入以加入討論 title: "%{name}:「%{quote}」" visibilities: private: 關注者觀看 @@ -767,7 +1211,90 @@ zh-HK: pinned: 置頂文章 reblogged: 轉推 sensitive_content: 敏感內容 + tags: + does_not_match_previous_name: 和舊有名稱並不符合 terms: + body_html: | +

隱私權政策

+

我們蒐集甚麼資訊?

+ +
    +
  • 基本帳戶資訊:如果您在此服務器上註冊,我們可能會要求您輸入用戶名、電子郵件地址和密碼。 您還可以輸入其他個人資料信息(例如顯示名稱和自我簡介),並上傳個人資料圖片和標題圖片。 用戶名、顯示名稱、自我簡介、個人資料圖片和標題圖片會持續公開。
  • +
  • 帖文,關注和其他公共信息:您的關注和追隨者名單為公開資訊。 在發佈帖文時,我們將會存儲日期和時間,以及您用以發佈帖文的應用程序。 帖文可能包含多媒體附件,例如圖片和視頻。 公開和非公開(unlisted)的帖文為公開資訊。 您在個人資料上推薦的帖文時也是公開的資訊。 您的追隨者會收到你的帖文,在某些情況下,它們有可能會在不同的服務器互相傳遞並將儲存副本。 您刪除帖文時亦同樣會傳遞給您的追隨者。 轉發或收藏其他帖文的操作始終是公開的。
  • +
  • 私訊和追隨者限定的帖文:所有的帖子都在服務器上被儲存和處理。 追隨者限定的帖文將傳遞給您的追隨者和其中提及的用家,而私訊僅會傳遞給其中提及的用戶。 在某些情況下,它們有可能會在不同的服務器互相傳遞並將儲存副本。 我們將努力地將訪問權限制為僅授權人員,但其他服務器可能無法這樣做。 因此,請檢查您的追隨者所屬的服務器。 您可以在設置中選擇手動批准和拒絕新追隨者。請記住,服務器和任何接收服務器的操作員都可以查看此類消息,並且收件人可以截屏,複製或以其他方式重新分享。 請勿在Mastodon上分享任何危險信息。
  • +
  • IP和其他元數據:登錄時,我們會記錄您登錄時使用的IP位址以及瀏覽器應用程序的名稱。 您可以在設置中查看和撤消所有已登錄的作業階段。 最新上傳的IP位址最多可以儲存12個月。 我們還可能保留服務器日誌,其中包括對我們服務器的每個請求的IP地位。
  • +
+ +
+ +

您的資訊將會被用在甚麼用途?

+ +

我們從您那裡收集的任何資訊都可能通過以下方式使用:

+ +
    +
  • 提供Mastodon的核心功能:您只可以在登錄後與其他人的內容交流並發佈自己的內容。例如,您可以追隨其他人以在自己的個人化主頁中查看他們的帖文。
  • +
  • 社區管理:例如將您的IP位址與其他已知的IP位址進行比較來鑑定逃避封鎖或其他侵權行為。
  • +
  • 您的電郵地址:可能會被用於向您發送信息,有關其他人與您互動或向您發送消息的通知,並用於答複查詢和/或其他請求或問題。
  • +
+ +
+ +

我們如何保護您的資訊?

+ +

當您輸入,提交或訪問您的個人信息時,我們會採取各種安全措施來維護您的個人信息的安全。 除其他事項外,您的瀏覽器作業階段以及應用程序和API之間的流量均使用SSL進行保護。您的密碼也會以強大的單向算法進行散列處理。 您亦可以啟用多重驗證,以進一步安全地訪問您的帳戶。

+ +
+ +

我們的數據保留政策

+ +

我們會致力:

+ +
    +
  • 保留包含對該服務器所有請求的IP位址的服務器日誌,而保留時間將不會超過90天。
  • +
  • 保留與註冊用戶關聯的IP位址不超過12個月。
  • +
+ +

您可以請求並下載您的內容備份,包括您的帖文,媒體附件,個人資料圖片和標題圖片。

+ +

您亦可以隨時不可逆地刪除您的帳戶。

+ +
+ +

我們使用cookies嗎?

+ +

是。 Cookies是站點或其服務提供商通過Web瀏覽器(如果允許)傳輸到計算機硬盤的小文件。 這些cookies使站點能夠識別您的瀏覽器,並且如果您已經擁有註冊帳戶,會連結至您的註冊帳戶。

+ +

我們使用Cookie來了解並保存您的偏好,以供將來訪問。

+ +
+ +

我們會否透露任何信息給第三方機構?

+ +

我們不會將您的個人身份信息出售,交易或以其他方式轉讓給第三方。 這不包括同意對這些信息保密的運營方,和我們開展業務或為您提供服務的受信任的第三方。我們或會在基於對法律的尊重,或在執行我們的網站政策或保護我們或其他人的權利、財產或安全時釋出你的個人資料。

+ +

您的公開內容可能會被網絡中的其他服務器下載。 只要這些追隨者或收件人位於與之不同的服務器上,您的公開帖文和追隨者限定帖文將傳遞到您的追隨者所在的服務器,而私信將傳遞給收件人的服務器。

+ +

當您授權應用程序使用您的帳戶時,根據您批准的權限範圍,它可能會訪問您的公開資訊,您的關注列表,您的關注者,您的列表,所有帖文以及您的收藏夾。 應用程序永遠無法取得您的電子郵件地址或密碼。

+ +
+ +

兒童在網站的應用

+ +

如果此服務器位於歐盟或EEA中:我們的網站,產品和服務只為16歲或以上的人提供服務。 如果您未滿16歲,請按照GDPR的要求 (歐盟一般資料保護規範)不使用此網站。

+ +

如果此服務器位於美國:我們的網站,產品和服務只為13歲或以上的人提供服務。 如果您未滿13歲,請按照COPPA的要求 (兒童在線隱私權保護法)不使用此網站。

+ +

在其他管轄區內,法律要求可能會有所不同。

+ +
+ +

隱私權政策更改

+ +

請根據英文版本所準,此中文版本只為英文版隱私政策的翻譯版本

+ +

此文件以 CC-BY-SA 授權。英文版本的發佈日期為2018年3月7日。此中文翻譯的翻譯日期為2020年11月28日。

+ +

最初改編自 Discourse的隱私權政策.

title: "%{instance} 使用條款和隱私權政策" themes: contrast: 高對比 @@ -776,40 +1303,100 @@ zh-HK: time: formats: default: "%Y年%-m月%d日 %H:%M" + month: "%b %Y" two_factor_authentication: + add: 新增 disable: 停用 + disabled_success: 已成功啟用雙重認證 + edit: 編輯 enabled: 雙重認證已啟用 enabled_success: 已成功啟用雙重認證 generate_recovery_codes: 產生備用驗證碼 lost_recovery_codes: 讓你可以在遺失電話時,使用備用驗證碼登入。如果你遺失了備用驗證碼,可以在這裏產生一批新的,舊有的備用驗證碼將會失效。 + methods: 雙重認證 + otp: 多重認證軟件 recovery_codes: 備份恢復驗證碼 recovery_codes_regenerated: 成功產生新的備用驗證碼 recovery_instructions_html: 如果你遺失了安裝認證器的裝置(如︰你的電話),你可以使用備用驗證碼進行登入。請確保將備用驗證碼收藏穩當,(如列印出來,和你其他重要文件一起存放)。 + webauthn: 安全密鑰 user_mailer: backup_ready: explanation: 你要求的 Mastodon 帳號完整備份檔案現已就緒,可供下載。 subject: 你的備份檔已可供下載 title: 檔案匯出 + sign_in_token: + details: 這是嘗試的詳細資訊 + explanation: 我們發現有人嘗試以未使用過的 IP 位址登入到你的帳號。 如果這個登入的人是你,請在「登入請求」頁面上輸入以下安全代碼: + further_actions: 如果這不是你,請到這裏更改你的密碼,並啟用雙重認證: + subject: 請確認登入請求 + title: 登入請求 + warning: + explanation: + disable: 你不能以任何方式登入或使用你的帳號,但你的個人資料頁面和其他資料仍保持完整。 + sensitive: 你上載的媒體檔案和連結媒體將被標記為敏感項目。 + silence: 你仍然可以使用你的帳號,但只有你現時的追隨者會看見你在此伺服器的嘟文。你或從公開名冊中被剔除。但是其他人仍然可以主動關注你。 + suspend: 你將不能使用您的帳號,你的個人資料頁面及其他資料將不能再被取得。你仍可在資料被完全刪除前請求下載你的數據,但我們仍會保留一部份資料,以防止有人規避停權處罰。 + get_in_touch: 你可以回覆此電郵來跟我們(%{instance})聯絡 + review_server_policies: 審視伺服器政策 + statuses: 特別是: + subject: + disable: 你的帳號 %{acct} 已經被涷結 + none: 警告帳號%{acct} + sensitive: 你的帳號 %{acct} 的媒體已被標記為敏感內容 + silence: 你的帳號 %{acct} 已經被限制 + suspend: 你的帳號 %{acct} 已經被停權 + title: + disable: 帳號涷結 + none: 警告 + sensitive: 你的媒體已被標記為敏感內容 + silence: 賬戶已被限制 + suspend: 帳號已停用 welcome: edit_profile_action: 設定個人資料 edit_profile_step: 你可以設定你的個人資料,包括上傳頭像、橫幅圖片、更改顯示名稱等等。如果你想在新的關注者關注你之前對他們進行審核,你也可以選擇為你的帳戶設為「私人」。 explanation: 下面是幾個小貼士,希望它們能幫到你 final_action: 開始發文 final_step: '開始發文吧!即使你現在沒有關注者,其他人仍然能在本站時間軸或者話題標籤等地方看到你的公開文章。試著用 #introductions 這個話題標籤介紹一下自己吧。' - full_handle: 你的完整用戶地址 - full_handle_hint: 你需要把這個告訴你的朋友們,這樣他們就能從另一個實例向你發送信息或者關注你。 - review_preferences_action: 更改首選項 - review_preferences_step: 記得調整你的偏好設置,比如你想接收什麼類型的郵件,或者你想把你的文章可見範圍默認設定為什麼級別。如果你沒有暈車的話,考慮一下啟用「自動播放 GIF 動畫」這個選項吧。 - subject: 歡迎來到 Mastodon - tip_federated_timeline: 跨站公共時間軸可以讓你一窺更廣闊的 Mastodon 網絡。不過,由於它只顯示你的鄰居們所訂閱的內容,所以並不是全部。 - tip_following: 默認情況下,你會自動關注你所在服務站的管理員。想結交更多有趣的人的話,記得多逛逛本站時間軸和跨站公共時間軸哦。 - tip_local_timeline: 本站時間軸可以讓你一窺 %{instance} 上的用戶。他們就是離你最近的鄰居! - tip_mobile_webapp: 如果你的移動設備瀏覽器允許你將 Mastodon 添加到主屏幕,你就能夠接收推送消息。它就像本地應用一樣好使! + full_handle: 你的完整 Mastodon 地址 + full_handle_hint: 這訊息將顯示給你朋友們,讓他們能從另一個服務站發信息給你,或者關注你的。 + review_preferences_action: 更改偏好設定 + review_preferences_step: 記得調整你的偏好設定,比如你想接收什麼類型的郵件,或者你想把你的文章可見範圍默認設定為什麼級別。如果你沒有暈車的話,考慮一下啟用「自動播放 GIF 動畫」這個選項吧。 + subject: 歡迎來到 Mastodon (萬象) + tip_federated_timeline: 跨站時間軸可以讓你一窺更廣闊的 Mastodon 網絡。不過,由於它只顯示你的鄰居們所訂閱的內容,所以並不是全部。 + tip_following: 你會預設關注你服務站的管理員。想結交更多有趣的人的話,記得多逛逛本站時間軸和跨站時間軸哦。 + tip_local_timeline: 本站時間軸可以讓你一窺 %{instance} 本站上的用戶。他們就是離你最近的鄰居! + tip_mobile_webapp: 如果你的移動設備瀏覽器支援,你可以將 Mastodon 加到裝置的主畫面,讓你可以選擇接收推送通知,就像本機的 App 一樣方便! tips: 小貼士 - title: "%{name},歡迎你的加入!" + title: 歡迎 %{name} 加入! users: + blocked_email_provider: 此電郵提供商並不被允許 + follow_limit_reached: 你不能關注多於%{limit} 人 + generic_access_help_html: 不能登入?你可以寄電郵至 %{email} 尋求協助 invalid_email: 電郵地址格式不正確 - invalid_otp_token: 雙重認證確認碼不正確 - otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫 - seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼和電郵。 + invalid_email_mx: 此電郵地址不存在 + invalid_otp_token: 雙重認證碼不正確 + invalid_sign_in_token: 無效的安全碼 + otp_lost_help_html: 如果這兩者你均無法登入,你可以聯繫 %{email} + seamless_external_login: 因為你正在使用第三方服務登入,所以不能設定密碼和電郵。 signed_in_as: 目前登入的帳戶: + suspicious_sign_in_confirmation: 你似乎未曾從此設備登入,而你又有一段時間沒有登入了。我們剛剛把安全碼傳送到你的電郵地址,請查看你的電郵信箱,以確認你是帳號擁有者本人。 + verification: + explanation_html: 你可以認證個人資料頁面的元數據 (Metadata) 連結是屬於你的。要認證,那些連結的目的地網站必須有一條回到你 Mastodon 個人頁面的連結,而且連結必須具有rel="me"屬性。連結的文字內容都不會影響認證。這裏有一個例子: + verification: 驗證 + webauthn_credentials: + add: 新增安全密鑰裝置 + create: + error: 新增安全密鑰裝置時出現了問題。請重新再試一次。 + success: 你已成功將安全密鑰裝置加入帳號。 + delete: 刪除 + delete_confirmation: 你確定要刪除這個安全密鑰裝置嗎? + description_html: 如果你啟用安全密鑰驗證的話,登入時你將需要使用其中一個安全密鑰。 + destroy: + error: 刪除安全密鑰裝置時出現了問題。請重新再試一次。 + success: 你已成功將安全密鑰裝置從帳號移除。 + invalid_credential: 無效的安全密鑰裝置 + nickname_hint: 請為你的安全密鑰裝置命名 + not_enabled: 你還未啟用 WebAuthn + not_supported: 這個瀏覽器並不支援安全密鑰裝置 + otp_required: 請開啟雙重認證以使用安全密鑰裝置 + registered_on: 在 %{date} 注冊 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 0f761a03e..a2ad6fbde 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -21,6 +21,9 @@ zh-TW: federation_hint_html: 你只需要擁有 %{instance} 的帳戶,就可以追蹤隨便一台 Mastodon 伺服器上的人等等。 get_apps: 嘗試行動應用程式 hosted_on: 在 %{domain} 運作的 Mastodon 站點 + instance_actor_flash: '這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 + +' learn_more: 了解詳細 privacy_policy: 隱私權政策 see_whats_happening: 看看發生什麼事 @@ -37,14 +40,19 @@ zh-TW: reason: 原因 rejecting_media: 不會處理或儲存這些伺服器的媒體檔案,也不會顯示縮圖,需要手動點選原始檔: rejecting_media_title: 過濾的媒體 + silenced: 這些伺服器的嘟文會被從公開時間軸與對話中隱藏,而且與它們的使用者互動並不會產生任何通知,除非您追蹤他們: silenced_title: 靜音的伺服器 + suspended: 來自這些伺服器的資料都不會被處理、儲存或交換,也無法和這些伺服器上的使用者互動與溝通: suspended_title: 暫停的伺服器 + unavailable_content_html: Mastodon 一般來說允許您閱讀並和任何聯盟伺服器上的使用者互動。這些伺服器是這個站台設下的例外。 user_count_after: other: 位使用者 user_count_before: 註冊使用者數 what_is_mastodon: 什麼是 Mastodon? accounts: choices_html: "%{name} 的選擇:" + endorsements_hint: 推薦您已經關注的人,把他們釘在您的個人頁面。 + featured_tags_hint: 您可以推薦不同主題標籤,它們也會在此處出現。 follow: 關注 followers: other: 關注者 @@ -59,6 +67,8 @@ zh-TW: nothing_here: 暫時沒有內容可供顯示! people_followed_by: "%{name} 關注的人" people_who_follow: 關注 %{name} 的人 + pin_errors: + following: 你只能推薦你正在關注的使用者。 posts: other: 嘟文 posts_tab_heading: 嘟文 @@ -84,6 +94,7 @@ zh-TW: add_email_domain_block: 將電子郵件網域加入黑名單 approve: 核准 approve_all: 全部批准 + approved_msg: 成功審核了%{username} 的新帳戶申請 are_you_sure: 您確定嗎? avatar: 頭像 by_domain: 站點 @@ -97,8 +108,10 @@ zh-TW: confirm: 確定 confirmed: 已確定 confirming: 確定 + delete: 刪除資料 deleted: 已刪除 demote: 降級 + destroyed_msg: 即將刪除 %{username} 的數據 disable: 停用 disable_two_factor_authentication: 停用兩階段認證 disabled: 已停用 @@ -109,6 +122,7 @@ zh-TW: email_status: 電子信箱狀態 enable: 啟用 enabled: 已啟用 + enabled_msg: 成功解除 %{username} 帳戶的凍結 followers: 關注者 follows: 正在關注 header: 開頭 @@ -124,6 +138,8 @@ zh-TW: login_status: 登入狀態 media_attachments: 多媒體附件 memorialize: 設定為追悼帳戶 + memorialized: 被悼念的 + memorialized_msg: 成功將%{username} 的帳號變為紀念帳號 moderation: active: 活躍 all: 全部 @@ -144,10 +160,14 @@ zh-TW: public: 公開 push_subscription_expires: PuSH 訂閱過期 redownload: 重新整理個人資料 + redownloaded_msg: 成功重新載入%{username} 的個人資料頁面 reject: 拒絕 reject_all: 全部拒絕 + rejected_msg: 成功拒絕了%{username} 的新帳號申請 remove_avatar: 取消頭像 remove_header: 移除開頭 + removed_avatar_msg: 成功刪除了 %{username} 的頭像 + removed_header_msg: 成功刪除了 %{username} 的頁面頂端 resend_confirmation: already_confirmed: 此使用者已被確認 send: 重新發送驗證信 @@ -164,6 +184,8 @@ zh-TW: search: 搜尋 search_same_email_domain: 其他有同個電子郵件網域的使用者 search_same_ip: 其他有同個 IP 的使用者 + sensitive: 敏感内容 + sensitized: 已標記為敏感內容 shared_inbox_url: 共享收件箱網址 show: created_reports: 建立檢舉 @@ -173,13 +195,19 @@ zh-TW: statuses: 嘟文 subscribe: 訂閱 suspended: 已停權 + suspension_irreversible: 已永久刪除這個帳戶的數據。雖然這個帳戶的數據已被永久刪除,但是您仍然可以取消暫停這個帳戶。 + suspension_reversible_hint_html: 這個帳戶已被暫停,所有數據將會在 %{date} 被刪除。在此之前,您可以完全回復您的帳戶。如果您想即時刪除這個帳戶的數據,您可以在下面進行操作。 time_in_queue: 正在佇列等待 %{time} title: 帳戶 unconfirmed_email: 未確認的電子信箱位址 + undo_sensitized: 取消敏感狀態 undo_silenced: 取消靜音 undo_suspension: 取消停權 + unsilenced_msg: 成功解除 %{username} 的帳戶限制 unsubscribe: 取消訂閱 + unsuspended_msg: 成功取消暫停 %{username} 的帳戶 username: 使用者名稱 + view_domain: 查看站台概要 warn: 警告 web: 頁面 whitelisted: 已加入白名單 @@ -193,17 +221,37 @@ zh-TW: create_custom_emoji: 建立自訂顏文字 create_domain_allow: 建立允許網域 create_domain_block: 建立阻擋網域 + create_email_domain_block: 封鎖電子郵件站台 + create_ip_block: 新增IP規則 + demote_user: 把用戶降級 destroy_announcement: 刪除公告 destroy_custom_emoji: 刪除自訂顏文字 destroy_domain_allow: 刪除允許網域 destroy_domain_block: 刪除阻擋網域 destroy_email_domain_block: 刪除阻擋電郵網域 + destroy_ip_block: 刪除 IP 規則 destroy_status: 刪除狀態 disable_2fa_user: 停用兩階段認證 disable_custom_emoji: 停用自訂顏文字 disable_user: 停用帳戶 enable_custom_emoji: 啓用自訂顏文字 enable_user: 啓用帳戶 + memorialize_account: 設定成紀念帳號 + promote_user: 把用戶升級 + remove_avatar_user: 刪除大頭貼 + reopen_report: 重開舉報 + reset_password_user: 重設密碼 + resolve_report: 消除舉報 + sensitive_account: 把您的帳號的媒體標記為敏感內容 + silence_account: 靜音用戶 + suspend_account: 暫停用戶 + unassigned_report: 取消指派舉報 + unsensitive_account: 取消把您的帳號的媒體設定為敏感內容 + unsilence_account: 取消用戶的靜音狀態 + unsuspend_account: 取消用戶的暫停狀態 + update_announcement: 更新公告 + update_custom_emoji: 更新自訂顏文字 + update_status: 更新狀態 actions: assigned_to_self_report: "%{name} 接受了檢舉 %{target}" change_email_user: "%{name} 變更了使用者 %{target} 的電子信箱位址" @@ -214,12 +262,14 @@ zh-TW: create_domain_allow: "%{name} 將 %{target} 網域加入黑名單了" create_domain_block: "%{name} 封鎖了站點 %{target}" create_email_domain_block: "%{name} 封鎖了電子信箱網域 %{target}" + create_ip_block: "%{name} 已經設定了IP %{target} 的規則" demote_user: "%{name} 把使用者 %{target} 降級" destroy_announcement: "%{name} 刪除了公告 %{target}" destroy_custom_emoji: "%{name} 破壞了 %{target} 表情符號" destroy_domain_allow: "%{name} 從白名單中移除了 %{target} 網域" destroy_domain_block: "%{name} 取消了對站點 %{target} 的封鎖" destroy_email_domain_block: "%{name} 取消了對電子信箱網域 %{target} 的封鎖" + destroy_ip_block: "%{name} 已經刪除了 IP %{target} 的規則" destroy_status: "%{name} 刪除了 %{target} 的嘟文" disable_2fa_user: "%{name} 停用了使用者 %{target} 的兩階段認證" disable_custom_emoji: "%{name} 停用了自訂表情符號 %{target}" @@ -232,15 +282,20 @@ zh-TW: reopen_report: "%{name} 重新開啟 %{target} 的檢舉" reset_password_user: "%{name} 重新設定了使用者 %{target} 的密碼" resolve_report: "%{name} 處理了 %{target} 的檢舉" + sensitive_account: "%{name} 將 %{target} 的媒體檔案標記為敏感內容" silence_account: "%{name} 靜音了使用者 %{target}" suspend_account: "%{name} 停權了使用者 %{target}" unassigned_report: "%{name} 取消指派 %{target} 的檢舉" + unsensitive_account: "%{name} 將 %{target} 的媒體檔案的敏感狀態取消" unsilence_account: "%{name} 取消了使用者 %{target} 的靜音狀態" unsuspend_account: "%{name} 取消了使用者 %{target} 的停權狀態" update_announcement: "%{name} 更新了公告 %{target}" update_custom_emoji: "%{name} 更新了自訂表情符號 %{target}" update_status: "%{name} 重整了 %{target} 的嘟文" deleted_status: "(已刪除嘟文)" + empty: 找不到 log + filter_by_action: 按動作篩選 + filter_by_user: 按使用者篩選 title: 營運日誌 announcements: destroyed_msg: 成功刪除公告! @@ -279,11 +334,13 @@ zh-TW: listed: 已顯示 new: title: 加入新的自訂表情符號 + not_permitted: 您無權執行此操作 overwrite: 覆蓋 shortcode: 短代碼 shortcode_hint: 至少 2 個字元,只能使用字母、數字和下劃線 title: 自訂表情符號 uncategorized: 未分類 + unlist: 不公開 unlisted: 已隱藏 update_failed_msg: 無法更新表情符號 updated_msg: 已更新表情符號! @@ -326,6 +383,8 @@ zh-TW: created_msg: 正在進行站點封鎖 destroyed_msg: 已撤銷站點封鎖 domain: 站點 + edit: 更改封鎖的站台 + existing_domain_block_html: 您已經對 %{name} 施加了更嚴格的限制,您需要先把他取消封鎖。 new: create: 新增封鎖 hint: 站點封鎖動作並不會阻止帳戶紀錄被新增至資料庫,但會自動回溯性地對那些帳戶套用特定管理設定。 @@ -335,6 +394,10 @@ zh-TW: silence: 靜音 suspend: 停權 title: 新增封鎖站點 + private_comment: 私人留言 + private_comment_hint: 請提供更多有關此站台限制的資訊以供版主作內部參考。 + public_comment: 公開留言 + public_comment_hint: 如果你已經啟用站台限制列表的公告,請為一般大眾提供更多有關此站台限制的資訊。 reject_media: 拒絕媒體檔案 reject_media_hint: 刪除本地快取的媒體檔案,並且不再接收來自該站點的任何媒體檔案。與停權無關 reject_reports: 拒絕檢舉 @@ -353,33 +416,75 @@ zh-TW: title: 撤銷 %{domain} 的站點封鎖 undo: 撤銷 undo: 復原欲封鎖域名 + view: 顯示阻擋的網域 email_domain_blocks: add_new: 加入新項目 created_msg: 已成功將電子信箱網域加入黑名單 delete: 刪除 destroyed_msg: 已成功從黑名單刪除電子信箱網域 domain: 站點 + empty: 現在沒有阻擋任何 e-mail 網域。 + from_html: 由 %{domain} new: create: 新增站點 title: 新增電子信箱黑名單項目 title: 電子信箱黑名單 instances: + by_domain: 站台 + delivery_available: 可傳送 + known_accounts: + other: "%{count} 已知的帳戶" moderation: all: 全部 limited: 限制 title: 版主 + private_comment: 私人留言 + public_comment: 公開留言 title: 聯邦 + total_blocked_by_us: 被我們封鎖 + total_followed_by_them: 被他們關注 + total_followed_by_us: 被我們關注 + total_reported: 關於他們的舉報 + total_storage: 多媒體附檔 invites: + deactivate_all: 全部停用 filter: all: 全部 available: 可用 expired: 已失效 title: 篩選 title: 邀請使用者 + ip_blocks: + add_new: 建立規則 + created_msg: 更新 IP 規則成功 + delete: 刪除 + expires_in: + '1209600': 2 個星期 + '15778476': 6 個月 + '2629746': 1 個月 + '31556952': 1 年 + '86400': 1 天 + '94670856': 3 年 + new: + title: 建立新的 IP 規則 + no_ip_block_selected: 因為沒有選擇任何 IP 規則,所以什麼事都沒發生 + title: IP 規則 + pending_accounts: + title: 待處理帳戶(%{count}) + relationships: + title: "%{acct} 的關係" relays: + add_new: 新增中繼站 + delete: 刪除 description_html: "聯邦中繼站 是種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦中探索內容,而無須本地使用者手動關注遠端伺服器的其他使用者。" + disable: 停用 disabled: 停用 enable: 啟用 + enable_hint: 啟用後,你的伺服器將訂閱該中繼的所有公開文章,並將會此伺服器的公開文章發送給它。 + enabled: 已啟用 + inbox_url: 中繼URL + save_and_enable: 儲存並啟用 + status: 狀態 report_notes: created_msg: 檢舉記錄建立成功! destroyed_msg: 檢舉記錄刪除成功! @@ -420,6 +525,8 @@ zh-TW: contact_information: email: 用於聯絡的公開電子信箱位址 username: 請輸入使用者名稱 + custom_css: + title: 自訂 CSS domain_blocks: all: 給任何人 disabled: 給沒有人 @@ -429,6 +536,9 @@ zh-TW: hero: desc_html: 在首頁顯示。推薦最小 600x100px。如果留空,就會重設回伺服器預覽圖 title: 主題圖片 + mascot: + desc_html: 在許多頁面都會顯示。推薦最小 293x205px。如果留空,將採用預設的吉祥物 + title: 吉祥物圖片 peers_api_enabled: desc_html: 本伺服器在聯邦中發現的站點 title: 發布已知伺服器的列表 @@ -447,6 +557,8 @@ zh-TW: min_invite_role: disabled: 沒有人 title: 允許發送邀請的身份 + require_invite_text: + title: 要求新使用者填申請書以索取邀請 registrations_mode: modes: approved: 註冊需要核准 @@ -480,6 +592,8 @@ zh-TW: desc_html: 在主頁顯示本站時間軸 title: 時間軸預覽 title: 網站設定 + trendable_by_default: + title: 允許熱門的主題標籤直接顯示於趨勢區,不需經過審核 trends: title: 趨勢主題標籤 site_uploads: @@ -500,6 +614,8 @@ zh-TW: title: 帳戶嘟文 with_media: 含有媒體檔案 tags: + accounts_today: 本日不重複使用者數 + accounts_week: 本週不重複使用者數 context: 上下文 directory: 在目錄中 in_directory: 目錄中有 %{count} 個 @@ -527,6 +643,7 @@ zh-TW: advanced_web_interface: 進階網頁介面 advanced_web_interface_hint: 進階網頁界面可讓您配置許多不同的欄位來善用多餘的螢幕空間,依需要同時查看盡可能多的資訊如:首頁、通知、站點聯邦時間軸、任意數量的列表和主題標籤。 animations_and_accessibility: 動畫與可用性 + discovery: 探索 localization: body: Mastodon 是由志願者翻譯的。 guide_link: https://crowdin.com/project/mastodon @@ -549,12 +666,16 @@ zh-TW: warning: 警告,不要把它分享給任何人! your_token: 你的 token auth: + apply_for_account: 索取註冊邀請 change_password: 密碼 delete_account: 刪除帳戶 delete_account_html: 如果你想刪除你的帳戶,請點擊這裡繼續。你需要確認你的操作。 + description: + prefix_sign_up: 現在就註冊 Mastodon 帳號吧! didnt_get_confirmation: 沒有收到驗證信? forgot_password: 忘記密碼? invalid_reset_password_token: 密碼重設 token 無效或已過期。請重新設定密碼。 + link_to_webauth: 使用您的安全金鑰 login: 登入 logout: 登出 migrate_account: 轉移到另一個帳戶 @@ -563,10 +684,14 @@ zh-TW: providers: saml: SAML register: 註冊 + registration_closed: "%{instance} 現在不開放新成員" resend_confirmation: 重新寄送確認指引 reset_password: 重設密碼 security: 登入資訊 set_new_password: 設定新密碼 + setup: + email_settings_hint_html: 請確認 e-mail 是否傳送到 %{email} 。如果不對的話,可以從帳號設定修改。 + title: 設定 authorize_follow: already_following: 你已經關注了這個使用者 already_requested: 您早已向該帳戶寄送追蹤請求 @@ -630,12 +755,15 @@ zh-TW: filters: index: empty: 您沒有過濾器。 + title: 過濾器 footer: more: 更多...... + trending_now: 現正熱門 generic: all: 全部 changes_saved_msg: 已成功儲存修改! copy: 複製 + delete: 刪除 save_changes: 儲存修改 imports: preface: 您可以在此匯入您在其他伺服器所匯出的資料檔,包括關注的使用者、封鎖的使用者名單。 @@ -674,6 +802,8 @@ zh-TW: too_many: 無法加入超過 4 個檔案 migrations: acct: 新帳戶的 使用者名稱@站點網域 + proceed_with_move: 移動關注者 + redirected_msg: 您的帳號現在指向 %{acct} moderation: title: 營運 notification_mailer: @@ -855,3 +985,5 @@ zh-TW: verification: explanation_html: 您在 Mastodon 個人資料頁上所列出的連結,可以用此方式驗證您確實掌控該連結網頁的內容。您可以在連結的網頁上加上一個連回 Mastodon 個人資料頁的連結,該連結的原始碼 必須包含rel="me"屬性。連結的顯示文字可自由發揮,以下為範例: verification: 驗證連結 + webauthn_credentials: + registered_on: 註冊於 %{date} From b1feb47055c121c1b6949bd7ef6734bf56c847bd Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 17 Dec 2020 06:51:49 +0100 Subject: [PATCH 292/422] Improve searching for private toots from URL (#14856) * Improve searching for private toots from URL Most of the time, when sharing toots, people use the toot URL rather than the toot URI, which makes sense since it is the user-facing URL. In Mastodon's case, the URL and URI are different, and Mastodon does not have an index on URL, which means searching a private toot by URL is done with a slow query that will only succeed for very recent toots. This change gets rid of the slow query, and attempts to guess the URI from URL instead, as Mastodon's are predictable. * Add tests * Only return status with guessed uri if url matches Co-authored-by: Claire --- app/services/resolve_url_service.rb | 12 ++- spec/services/resolve_url_service_spec.rb | 97 +++++++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb index 78080d878..5981e4d98 100644 --- a/app/services/resolve_url_service.rb +++ b/app/services/resolve_url_service.rb @@ -34,7 +34,17 @@ class ResolveURLService < BaseService # It may happen that the resource is a private toot, and thus not fetchable, # but we can return the toot if we already know about it. - status = Status.find_by(uri: @url) || Status.find_by(url: @url) + scope = Status.where(uri: @url) + + # We don't have an index on `url`, so try guessing the `uri` from `url` + parsed_url = Addressable::URI.parse(@url) + parsed_url.path.match(%r{/@(?#{Account::USERNAME_RE})/(?[0-9]+)\Z}) do |matched| + parsed_url.path = "/users/#{matched[:username]}/statuses/#{matched[:status_id]}" + scope = scope.or(Status.where(uri: parsed_url.to_s, url: @url)) + end + + status = scope.first + authorize_with @on_behalf_of, status, :show? unless status.nil? status rescue Mastodon::NotPermittedError diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb index aa4204637..a38b23590 100644 --- a/spec/services/resolve_url_service_spec.rb +++ b/spec/services/resolve_url_service_spec.rb @@ -15,5 +15,102 @@ describe ResolveURLService, type: :service do expect(subject.call(url)).to be_nil end + + context 'searching for a remote private status' do + let(:account) { Fabricate(:account) } + let(:poster) { Fabricate(:account, domain: 'example.com') } + let(:url) { 'https://example.com/@foo/42' } + let(:uri) { 'https://example.com/users/foo/statuses/42' } + let!(:status) { Fabricate(:status, url: url, uri: uri, account: poster, visibility: :private) } + + before do + stub_request(:get, url).to_return(status: 404) if url.present? + stub_request(:get, uri).to_return(status: 404) + end + + context 'when the account follows the poster' do + before do + account.follow!(poster) + end + + context 'when the status uses Mastodon-style URLs' do + let(:url) { 'https://example.com/@foo/42' } + let(:uri) { 'https://example.com/users/foo/statuses/42' } + + it 'returns status by url' do + expect(subject.call(url, on_behalf_of: account)).to eq(status) + end + + it 'returns status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to eq(status) + end + end + + context 'when the status uses pleroma-style URLs' do + let(:url) { nil } + let(:uri) { 'https://example.com/objects/0123-456-789-abc-def' } + + it 'returns status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to eq(status) + end + end + end + + context 'when the account does not follow the poster' do + context 'when the status uses Mastodon-style URLs' do + let(:url) { 'https://example.com/@foo/42' } + let(:uri) { 'https://example.com/users/foo/statuses/42' } + + it 'does not return the status by url' do + expect(subject.call(url, on_behalf_of: account)).to be_nil + end + + it 'does not return the status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to be_nil + end + end + + context 'when the status uses pleroma-style URLs' do + let(:url) { nil } + let(:uri) { 'https://example.com/objects/0123-456-789-abc-def' } + + it 'returns status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to be_nil + end + end + end + end + + context 'searching for a local private status' do + let(:account) { Fabricate(:account) } + let(:poster) { Fabricate(:account) } + let!(:status) { Fabricate(:status, account: poster, visibility: :private) } + let(:url) { ActivityPub::TagManager.instance.url_for(status) } + let(:uri) { ActivityPub::TagManager.instance.uri_for(status) } + + context 'when the account follows the poster' do + before do + account.follow!(poster) + end + + it 'returns status by url' do + expect(subject.call(url, on_behalf_of: account)).to eq(status) + end + + it 'returns status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to eq(status) + end + end + + context 'when the account does not follow the poster' do + it 'does not return the status by url' do + expect(subject.call(url, on_behalf_of: account)).to be_nil + end + + it 'does not return the status by uri' do + expect(subject.call(uri, on_behalf_of: account)).to be_nil + end + end + end end end From 8a95867693dfe072241d5ddcd0ba7ed8546eab1e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 18 Dec 2020 08:30:41 +0100 Subject: [PATCH 293/422] Add option to obfuscate domain name in public list of domain blocks (#15355) - Replace the middle of the domain with * characters (except for periods) - Add SHA-256 digest of the domain name in tooltip --- .../admin/domain_blocks_controller.rb | 4 ++-- app/models/domain_block.rb | 20 +++++++++++++++++++ app/views/about/_domain_blocks.html.haml | 2 +- app/views/admin/domain_blocks/edit.html.haml | 3 +++ app/views/admin/domain_blocks/new.html.haml | 3 +++ config/locales/en.yml | 2 ++ ...18054746_add_obfuscate_to_domain_blocks.rb | 15 ++++++++++++++ db/schema.rb | 3 ++- 8 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index 6a5b41a74..ba927b04a 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -74,11 +74,11 @@ module Admin end def update_params - params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment) + params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate) end def resource_params - params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment) + params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate) end end end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 829d7583b..bba04c603 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -12,6 +12,7 @@ # reject_reports :boolean default(FALSE), not null # private_comment :text # public_comment :text +# obfuscate :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord @@ -73,4 +74,23 @@ class DomainBlock < ApplicationRecord scope = suspend? ? accounts.where(suspended_at: created_at) : accounts.where(silenced_at: created_at) scope.count end + + def public_domain + return domain unless obfuscate? + + length = domain.size + visible_ratio = length / 4 + + domain.chars.map.with_index do |chr, i| + if i > visible_ratio && i < length - visible_ratio && chr != '.' + '*' + else + chr + end + end.join + end + + def domain_digest + Digest::SHA256.hexdigest(domain) + end end diff --git a/app/views/about/_domain_blocks.html.haml b/app/views/about/_domain_blocks.html.haml index e0c5df41d..35a30f16e 100644 --- a/app/views/about/_domain_blocks.html.haml +++ b/app/views/about/_domain_blocks.html.haml @@ -7,6 +7,6 @@ - domain_blocks.each do |domain_block| %tr %td.nowrap - %span{ title: domain_block.domain }= domain_block.domain + %span{ title: "SHA-256: #{domain_block.domain_digest}" }= domain_block.public_domain %td = domain_block.public_comment if display_blocks_rationale? diff --git a/app/views/admin/domain_blocks/edit.html.haml b/app/views/admin/domain_blocks/edit.html.haml index d5868070a..6fe2edc82 100644 --- a/app/views/admin/domain_blocks/edit.html.haml +++ b/app/views/admin/domain_blocks/edit.html.haml @@ -20,6 +20,9 @@ .fields-group = f.input :reject_reports, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reports'), hint: I18n.t('admin.domain_blocks.reject_reports_hint') + .fields-group + = f.input :obfuscate, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.obfuscate'), hint: I18n.t('admin.domain_blocks.obfuscate_hint') + .field-group = f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6 diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml index f503f9b77..8b78f71f2 100644 --- a/app/views/admin/domain_blocks/new.html.haml +++ b/app/views/admin/domain_blocks/new.html.haml @@ -20,6 +20,9 @@ .fields-group = f.input :reject_reports, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reports'), hint: I18n.t('admin.domain_blocks.reject_reports_hint') + .fields-group + = f.input :obfuscate, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.obfuscate'), hint: I18n.t('admin.domain_blocks.obfuscate_hint') + .field-group = f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6 diff --git a/config/locales/en.yml b/config/locales/en.yml index 83f75b28f..e91f4344f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -402,6 +402,8 @@ en: silence: Silence suspend: Suspend title: New domain block + obfuscate: Obfuscate domain name + obfuscate_hint: Partially obfuscate the domain name in the list if advertising the list of domain limitations is enabled private_comment: Private comment private_comment_hint: Comment about this domain limitation for internal use by the moderators. public_comment: Public comment diff --git a/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb b/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb new file mode 100644 index 000000000..26f4ddb85 --- /dev/null +++ b/db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb @@ -0,0 +1,15 @@ +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddObfuscateToDomainBlocks < ActiveRecord::Migration[5.2] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured { add_column_with_default :domain_blocks, :obfuscate, :boolean, default: false, allow_null: false } + end + + def down + remove_column :domain_blocks, :obfuscate + end +end diff --git a/db/schema.rb b/db/schema.rb index 55822a4b3..18bf1d4ca 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_12_06_004238) do +ActiveRecord::Schema.define(version: 2020_12_18_054746) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -360,6 +360,7 @@ ActiveRecord::Schema.define(version: 2020_12_06_004238) do t.boolean "reject_reports", default: false, null: false t.text "private_comment" t.text "public_comment" + t.boolean "obfuscate", default: false, null: false t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end From 941ff04b03a8a3e3f03e95c108f0cfa621226fb1 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 18 Dec 2020 08:47:36 +0100 Subject: [PATCH 294/422] Fix styles for RTL languages and the light theme (#15356) --- .../styles/mastodon-light/diff.scss | 42 ++++++++++++++++- app/javascript/styles/mastodon/rtl.scss | 46 ++++++++++++++++++- 2 files changed, 86 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 64f4adb84..d4290d7e6 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -355,11 +355,45 @@ html { .error-modal, .onboarding-modal, .report-modal__comment .setting-text__wrapper, -.report-modal__comment .setting-text { +.report-modal__comment .setting-text, +.announcements, +.picture-in-picture__header, +.picture-in-picture__footer, +.reactions-bar__item { background: $white; border: 1px solid lighten($ui-base-color, 8%); } +.reactions-bar__item { + &:hover, + &:focus, + &:active { + background-color: $ui-base-color; + } +} + +.reactions-bar__item.active { + background-color: mix($white, $ui-highlight-color, 80%); + border-color: mix(lighten($ui-base-color, 8%), $ui-highlight-color, 80%); +} + +.media-modal__overlay .picture-in-picture__footer { + border: 0; +} + +.picture-in-picture__header { + border-bottom: 0; +} + +.announcements, +.picture-in-picture__footer { + border-top: 0; +} + +.icon-with-badge__badge { + border-color: $white; +} + .report-modal__comment { border-right-color: lighten($ui-base-color, 8%); } @@ -512,6 +546,12 @@ html { } } +.picture-in-picture-placeholder { + background: $white; + border-color: lighten($ui-base-color, 8%); + color: lighten($ui-base-color, 8%); +} + .brand__tagline { color: $ui-secondary-color; } diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index fbf26e30b..8051e4edb 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -17,15 +17,38 @@ body.rtl { margin-right: 15px; } - .display-name { + .display-name, + .announcements__item { text-align: right; } + .announcements__item__range { + padding-right: 0; + padding-left: 18px; + } + + .reactions-bar { + margin-left: auto; + margin-right: -2px; + direction: rtl; + } + + .reactions-bar__item__count { + margin-left: 0; + margin-right: 6px; + } + + .announcements__pagination { + right: auto; + left: 0; + } + .notification__message { margin-left: 0; margin-right: 68px; } + .announcements__mastodon, .drawer__inner__mastodon > img { transform: scaleX(-1); } @@ -195,6 +218,7 @@ body.rtl { margin-right: 0; } + .picture-in-picture__header__account .display-name, .detailed-status__display-name .display-name { text-align: right; } @@ -205,6 +229,21 @@ body.rtl { float: right; } + .picture-in-picture__header__account .account__avatar { + margin-right: 0; + margin-left: 10px; + } + + .icon-button__counter { + margin-left: 0; + margin-right: 4px; + } + + .notifications-permission-banner__close { + right: auto; + left: 10px; + } + .detailed-status__favorites, .detailed-status__reblogs { margin-left: 0; @@ -416,4 +455,9 @@ body.rtl { left: auto; right: 0; } + + .picture-in-picture { + right: auto; + left: 20px; + } } From eb35be0431b2cdd2bbf3339beb9c5a0839e1088b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 18 Dec 2020 09:18:31 +0100 Subject: [PATCH 295/422] Fix follow limit preventing re-following of a moved account (#14207) --- app/models/follow.rb | 2 +- app/models/follow_request.rb | 2 +- app/models/import.rb | 1 + app/services/import_service.rb | 7 ++--- app/validators/import_validator.rb | 44 ++++++++++++++++++++++++++++++ config/locales/en.yml | 2 ++ spec/models/follow_spec.rb | 2 +- spec/models/import_spec.rb | 10 +++++++ 8 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 app/validators/import_validator.rb diff --git a/app/models/follow.rb b/app/models/follow.rb index 55a9da792..69a1722b3 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -26,7 +26,7 @@ class Follow < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy validates :account_id, uniqueness: { scope: :target_account_id } - validates_with FollowLimitValidator, on: :create + validates_with FollowLimitValidator, on: :create, if: :rate_limit? scope :recent, -> { reorder(id: :desc) } diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index c1f19149b..2d2a77b59 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -26,7 +26,7 @@ class FollowRequest < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy validates :account_id, uniqueness: { scope: :target_account_id } - validates_with FollowLimitValidator, on: :create + validates_with FollowLimitValidator, on: :create, if: :rate_limit? def authorize! account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri) diff --git a/app/models/import.rb b/app/models/import.rb index 702453289..00a54892e 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -27,6 +27,7 @@ class Import < ApplicationRecord enum type: [:following, :blocking, :muting, :domain_blocking, :bookmarks] validates :type, presence: true + validates_with ImportValidator, on: :create has_attached_file :data validates_attachment_content_type :data, content_type: FILE_TYPES diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 288e47f1e..0c6ef2238 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -27,7 +27,7 @@ class ImportService < BaseService def import_follows! parse_import_data!(['Account address']) - import_relationships!('follow', 'unfollow', @account.following, follow_limit, reblogs: { header: 'Show boosts', default: true }) + import_relationships!('follow', 'unfollow', @account.following, ROWS_PROCESSING_LIMIT, reblogs: { header: 'Show boosts', default: true }) end def import_blocks! @@ -85,6 +85,7 @@ class ImportService < BaseService head_items = items.uniq { |acct, _| acct.split('@')[1] } tail_items = items - head_items + Import::RelationshipWorker.push_bulk(head_items + tail_items) do |acct, extra| [@account.id, acct, action, extra] end @@ -133,10 +134,6 @@ class ImportService < BaseService Paperclip.io_adapters.for(@import.data).read end - def follow_limit - FollowLimitValidator.limit_for_account(@account) - end - def relations_map_for_account(account, account_ids) { blocking: {}, diff --git a/app/validators/import_validator.rb b/app/validators/import_validator.rb new file mode 100644 index 000000000..a182abfa5 --- /dev/null +++ b/app/validators/import_validator.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class ImportValidator < ActiveModel::Validator + KNOWN_HEADERS = [ + 'Account address', + '#domain', + '#uri', + ].freeze + + def validate(import) + return if import.type.blank? || import.data.blank? + + # We parse because newlines could be part of individual rows. This + # runs on create so we should be reading the local file here before + # it is uploaded to object storage or moved anywhere... + csv_data = CSV.parse(import.data.queued_for_write[:original].read) + + row_count = csv_data.size + row_count -= 1 if KNOWN_HEADERS.include?(csv_data.first&.first) + + import.errors.add(:data, I18n.t('imports.errors.over_rows_processing_limit', count: ImportService::ROWS_PROCESSING_LIMIT)) if row_count > ImportService::ROWS_PROCESSING_LIMIT + + case import.type + when 'following' + validate_following_import(import, row_count) + end + end + + private + + def validate_following_import(import, row_count) + base_limit = FollowLimitValidator.limit_for_account(import.account) + + limit = begin + if import.overwrite? + base_limit + else + base_limit - import.account.following_count + end + end + + import.errors.add(:data, I18n.t('users.follow_limit_reached', limit: base_limit)) if row_count > limit + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index e91f4344f..18a207f5e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -923,6 +923,8 @@ en: status: Verification status view_proof: View proof imports: + errors: + over_rows_processing_limit: contains more than %{count} rows modes: merge: Merge merge_long: Keep existing records and add new ones diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index 0c84e5e7b..e723a1ef2 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Follow, type: :model do let(:bob) { Fabricate(:account, username: 'bob') } describe 'validations' do - subject { Follow.new(account: alice, target_account: bob) } + subject { Follow.new(account: alice, target_account: bob, rate_limit: true) } it 'has a valid fabricator' do follow = Fabricate.build(:follow) diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index 321761166..a5eec1722 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -20,5 +20,15 @@ RSpec.describe Import, type: :model do import = Import.create(account: account, type: type) expect(import).to model_have_error_on_field(:data) end + + it 'is invalid with too many rows in data' do + import = Import.create(account: account, type: type, data: StringIO.new("foo@bar.com\n" * (ImportService::ROWS_PROCESSING_LIMIT + 10))) + expect(import).to model_have_error_on_field(:data) + end + + it 'is invalid when there are more rows when following limit' do + import = Import.create(account: account, type: type, data: StringIO.new("foo@bar.com\n" * (FollowLimitValidator.limit_for_account(account) + 10))) + expect(import).to model_have_error_on_field(:data) + end end end From 47c6c54d31fe43cdda2fab55d39ad5f99c0538be Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 18 Dec 2020 09:43:33 +0100 Subject: [PATCH 296/422] Fix styling issue on /about when server admin has a long username (#15357) Co-authored-by: Claire --- app/javascript/styles/mastodon/about.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 3be0aee49..d6bd9e3c6 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -732,6 +732,7 @@ $small-breakpoint: 960px; &__column { flex: 1 1 50%; + overflow-x: hidden; } } From 75944a2f2dc83d1b12fa7cbddb18f673513fbb45 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 18 Dec 2020 09:46:59 +0100 Subject: [PATCH 297/422] Bump max supported schema version in maintenance script (#15359) Co-authored-by: Claire --- lib/mastodon/maintenance_cli.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/maintenance_cli.rb b/lib/mastodon/maintenance_cli.rb index ffad3f6a2..822051ceb 100644 --- a/lib/mastodon/maintenance_cli.rb +++ b/lib/mastodon/maintenance_cli.rb @@ -14,7 +14,7 @@ module Mastodon end MIN_SUPPORTED_VERSION = 2019_10_01_213028 - MAX_SUPPORTED_VERSION = 2020_12_06_004238 + MAX_SUPPORTED_VERSION = 2020_12_18_054746 # Stubs to enjoy ActiveRecord queries while not depending on a particular # version of the code/database From 1a028822442f10416f3782341307b4b759681b58 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 18 Dec 2020 09:57:54 +0100 Subject: [PATCH 298/422] Reword invite text settings in admin views for consistency (#15358) For consistency with #15265 Co-authored-by: Claire --- config/locales/en.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 18a207f5e..7ea4ea154 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -593,8 +593,8 @@ en: disabled: No one title: Allow invitations by require_invite_text: - desc_html: When registrations require manual approval, make the “Why do you want to join?” invite request text mandatory rather than optional - title: Require new users to fill an invite request text + desc_html: When registrations require manual approval, make the “Why do you want to join?” text input mandatory rather than optional + title: Require new users to enter a reason to join registrations_mode: modes: approved: Approval required for sign up From 052249588b77fe3d8e29658076eb385f64511d6b Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 18 Dec 2020 17:51:24 +0100 Subject: [PATCH 299/422] Fix old migration script not being able to run if it fails midway (#15361) * Fix old migration script not being able to run if it fails midway Improve the robustness of a migration script likely to fail because of database corruption so it can run again once database corruptions are fixed. * Display a specific error message in case of index corruption Co-authored-by: Eugen Rochko Co-authored-by: Claire --- ...3_add_fixed_lowercase_index_to_accounts.rb | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb b/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb index c5688681f..c3aa8e33c 100644 --- a/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb +++ b/db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb @@ -1,10 +1,30 @@ class AddFixedLowercaseIndexToAccounts < ActiveRecord::Migration[5.2] disable_ddl_transaction! + class CorruptionError < StandardError + def cause + nil + end + + def backtrace + [] + end + end + def up - rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower' unless index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower') - add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently - remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower' + if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower') && index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower') + remove_index :accounts, name: 'index_accounts_on_username_and_domain_lower' + elsif index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower') + rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower' + end + + begin + add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently + rescue ActiveRecord::RecordNotUnique + raise CorruptionError, 'Migration failed because of index corruption, see https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#fixing' + end + + remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower' if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower') end def down From a60d9335d8e7c4aa070f081719ee2a438b0e0202 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 18 Dec 2020 23:26:26 +0100 Subject: [PATCH 300/422] Fix resolving accounts sometimes creating duplicate records for a given AP id (#15364) * Fix ResolveAccountService accepting mismatching acct: URI * Set attributes that should be updated regardless of suspension * Fix key fetching * Automatically merge remote accounts with duplicate `uri` * Add tests * Add "tootctl accounts fix-duplicates" Finds duplicate accounts sharing a same ActivityPub `id`, re-fetch them and merge them under the canonical `acct:` URI. Co-authored-by: Claire --- .../fetch_remote_account_service.rb | 2 +- .../activitypub/process_account_service.rb | 28 ++++++++-- app/services/resolve_account_service.rb | 17 +----- app/workers/account_merging_worker.rb | 18 ++++++ lib/mastodon/accounts_cli.rb | 19 +++++++ spec/services/resolve_account_service_spec.rb | 56 ++++++++++++++++++- 6 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 app/workers/account_merging_worker.rb diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb index e5bd0c47c..9d01f5386 100644 --- a/app/services/activitypub/fetch_remote_account_service.rb +++ b/app/services/activitypub/fetch_remote_account_service.rb @@ -28,7 +28,7 @@ class ActivityPub::FetchRemoteAccountService < BaseService return unless only_key || verified_webfinger? - ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key) + ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key, verified_webfinger: !only_key) rescue Oj::ParseError nil end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 4cb8e09db..6afeb92d6 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -28,6 +28,8 @@ class ActivityPub::ProcessAccountService < BaseService update_account process_tags process_attachments + + process_duplicate_accounts! if @options[:verified_webfinger] else raise Mastodon::RaceConditionError end @@ -69,34 +71,42 @@ class ActivityPub::ProcessAccountService < BaseService @account.protocol = :activitypub set_suspension! + set_immediate_protocol_attributes! + set_fetchable_key! unless @account.suspended? && @account.suspension_origin_local? set_immediate_attributes! unless @account.suspended? - set_fetchable_attributes! unless @options[:only_keys] || @account.suspended? + set_fetchable_attributes! unless @options[:only_key] || @account.suspended? @account.save_with_optional_media! end - def set_immediate_attributes! + def set_immediate_protocol_attributes! @account.inbox_url = @json['inbox'] || '' @account.outbox_url = @json['outbox'] || '' @account.shared_inbox_url = (@json['endpoints'].is_a?(Hash) ? @json['endpoints']['sharedInbox'] : @json['sharedInbox']) || '' @account.followers_url = @json['followers'] || '' - @account.featured_collection_url = @json['featured'] || '' - @account.devices_url = @json['devices'] || '' @account.url = url || @uri @account.uri = @uri + @account.actor_type = actor_type + end + + def set_immediate_attributes! + @account.featured_collection_url = @json['featured'] || '' + @account.devices_url = @json['devices'] || '' @account.display_name = @json['name'] || '' @account.note = @json['summary'] || '' @account.locked = @json['manuallyApprovesFollowers'] || false @account.fields = property_values || {} @account.also_known_as = as_array(@json['alsoKnownAs'] || []).map { |item| value_or_id(item) } - @account.actor_type = actor_type @account.discoverable = @json['discoverable'] || false end + def set_fetchable_key! + @account.public_key = public_key || '' + end + def set_fetchable_attributes! @account.avatar_remote_url = image_url('icon') || '' unless skip_download? @account.header_remote_url = image_url('image') || '' unless skip_download? - @account.public_key = public_key || '' @account.statuses_count = outbox_total_items if outbox_total_items.present? @account.following_count = following_total_items if following_total_items.present? @account.followers_count = followers_total_items if followers_total_items.present? @@ -140,6 +150,12 @@ class ActivityPub::ProcessAccountService < BaseService VerifyAccountLinksWorker.perform_async(@account.id) end + def process_duplicate_accounts! + return unless Account.where(uri: @account.uri).where.not(id: @account.id).exists? + + AccountMergingWorker.perform_async(@account.id) + end + def actor_type if @json['type'].is_a?(Array) @json['type'].find { |type| ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(type) } diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 74b0b82d0..3301aaf51 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -49,7 +49,7 @@ class ResolveAccountService < BaseService # Now it is certain, it is definitely a remote account, and it # either needs to be created, or updated from fresh data - process_account! + fetch_account! rescue Webfinger::Error, Oj::ParseError => e Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}" nil @@ -104,16 +104,12 @@ class ResolveAccountService < BaseService acct.gsub(/\Aacct:/, '').split('@') end - def process_account! + def fetch_account! return unless activitypub_ready? RedisLock.acquire(lock_options) do |lock| if lock.acquired? - @account = Account.find_remote(@username, @domain) - - next if actor_json.nil? - - @account = ActivityPub::ProcessAccountService.new.call(@username, @domain, actor_json) + @account = ActivityPub::FetchRemoteAccountService.new.call(actor_url) else raise Mastodon::RaceConditionError end @@ -136,13 +132,6 @@ class ResolveAccountService < BaseService @actor_url ||= @webfinger.link('self', 'href') end - def actor_json - return @actor_json if defined?(@actor_json) - - json = fetch_resource(actor_url, false) - @actor_json = supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) ? json : nil - end - def gone_from_origin? @gone end diff --git a/app/workers/account_merging_worker.rb b/app/workers/account_merging_worker.rb new file mode 100644 index 000000000..8c234e7ac --- /dev/null +++ b/app/workers/account_merging_worker.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AccountMergingWorker + include Sidekiq::Worker + + sidekiq_options queue: 'pull' + + def perform(account_id) + account = Account.find(account_id) + + return true if account.nil? || account.local? + + Account.where(uri: account.uri).where.not(id: account.id).find_each do |duplicate| + account.merge_with!(duplicate) + duplicate.destroy + end + end +end diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index bef4093a8..474643869 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -236,6 +236,25 @@ module Mastodon say('OK', :green) end + desc 'fix-duplicates', 'Find duplicate remote accounts and merge them' + option :dry_run, type: :boolean + long_desc <<-LONG_DESC + Merge known remote accounts sharing an ActivityPub actor identifier. + + Such duplicates can occur when a remote server admin misconfigures their + domain configuration. + LONG_DESC + def fix_duplicates + Account.remote.select(:uri, 'count(*)').group(:uri).having('count(*) > 1').pluck_each(:uri) do |uri| + say("Duplicates found for #{uri}") + begin + ActivityPub::FetchRemotAccountService.new.call(uri) unless options[:dry_run] + rescue => e + say("Error processing #{uri}: #{e}", :red) + end + end + end + desc 'backup USERNAME', 'Request a backup for a user' long_desc <<-LONG_DESC Request a new backup for an account with a given USERNAME. diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index 5bd0ec264..a604e90b5 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -60,7 +60,22 @@ RSpec.describe ResolveAccountService, type: :service do context 'with a legitimate webfinger redirection' do before do - webfinger = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + webfinger = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo', type: 'application/activity+json' }] } + stub_request(:get, 'https://redirected.example.com/.well-known/webfinger?resource=acct:Foo@redirected.example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'returns new remote account' do + account = subject.call('Foo@redirected.example.com') + + expect(account.activitypub?).to eq true + expect(account.acct).to eq 'foo@ap.example.com' + expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + end + end + + context 'with a misconfigured redirection' do + before do + webfinger = { subject: 'acct:Foo@redirected.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo', type: 'application/activity+json' }] } stub_request(:get, 'https://redirected.example.com/.well-known/webfinger?resource=acct:Foo@redirected.example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) end @@ -75,9 +90,9 @@ RSpec.describe ResolveAccountService, type: :service do context 'with too many webfinger redirections' do before do - webfinger = { subject: 'acct:foo@evil.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + webfinger = { subject: 'acct:foo@evil.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo', type: 'application/activity+json' }] } stub_request(:get, 'https://redirected.example.com/.well-known/webfinger?resource=acct:Foo@redirected.example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) - webfinger2 = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo' }] } + webfinger2 = { subject: 'acct:foo@ap.example.com', links: [{ rel: 'self', href: 'https://ap.example.com/users/foo', type: 'application/activity+json' }] } stub_request(:get, 'https://evil.example.com/.well-known/webfinger?resource=acct:foo@evil.example.com').to_return(body: Oj.dump(webfinger2), headers: { 'Content-Type': 'application/jrd+json' }) end @@ -111,6 +126,41 @@ RSpec.describe ResolveAccountService, type: :service do end end + context 'with an already-known actor changing acct: URI' do + let!(:duplicate) { Fabricate(:account, username: 'foo', domain: 'old.example.com', uri: 'https://ap.example.com/users/foo') } + let!(:status) { Fabricate(:status, account: duplicate, text: 'foo') } + + it 'returns new remote account' do + account = subject.call('foo@ap.example.com') + + expect(account.activitypub?).to eq true + expect(account.domain).to eq 'ap.example.com' + expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account.uri).to eq 'https://ap.example.com/users/foo' + end + + it 'merges accounts' do + account = subject.call('foo@ap.example.com') + + expect(status.reload.account_id).to eq account.id + expect(Account.where(uri: account.uri).count).to eq 1 + end + end + + context 'with an already-known acct: URI changing ActivityPub id' do + let!(:old_account) { Fabricate(:account, username: 'foo', domain: 'ap.example.com', uri: 'https://old.example.com/users/foo', last_webfingered_at: nil) } + let!(:status) { Fabricate(:status, account: old_account, text: 'foo') } + + it 'returns new remote account' do + account = subject.call('foo@ap.example.com') + + expect(account.activitypub?).to eq true + expect(account.domain).to eq 'ap.example.com' + expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account.uri).to eq 'https://ap.example.com/users/foo' + end + end + it 'processes one remote account at a time using locks' do wait_for_start = true fail_occurred = false From 59343ef4d19b104deb2751399846823675772df3 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 Dec 2020 00:19:15 +0100 Subject: [PATCH 301/422] Fix missing description on enable bootstrap timeline accounts toggle in admin UI (#15367) --- app/views/admin/settings/edit.html.haml | 3 ++- config/locales/en.yml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index a162490b5..159bd4b0a 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -50,7 +50,8 @@ %hr.spacer/ .fields-group - = f.input :enable_bootstrap_timeline_accounts, as: :boolean, wrapper: :with_label, label: t('admin.settings.enable_bootstrap_timeline_accounts.title') + = f.input :enable_bootstrap_timeline_accounts, as: :boolean, wrapper: :with_label, label: t('admin.settings.enable_bootstrap_timeline_accounts.title'), hint: t('admin.settings.enable_bootstrap_timeline_accounts.desc_html') + .fields-group = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label, label: t('admin.settings.bootstrap_timeline_accounts.title'), hint: t('admin.settings.bootstrap_timeline_accounts.desc_html'), disabled: !Setting.enable_bootstrap_timeline_accounts diff --git a/config/locales/en.yml b/config/locales/en.yml index 7ea4ea154..8245397d7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -566,6 +566,7 @@ en: domain_blocks_rationale: title: Show rationale enable_bootstrap_timeline_accounts: + desc_html: Make new users automatically follow configured accounts so their home feed doesn't start out empty title: Enable default follows for new users hero: desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail From 1c41ce32175931981dff9f9705a8a8ecfb465749 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 Dec 2020 00:21:01 +0100 Subject: [PATCH 302/422] New Crowdin updates (#15353) * New translations en.json (Danish) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations simple_form.en.yml (Danish) [ci skip] * New translations doorkeeper.en.yml (Danish) [ci skip] * New translations en.yml (German) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations en.json (Greek) [ci skip] * New translations simple_form.en.yml (Czech) [ci skip] * New translations doorkeeper.en.yml (Greek) [ci skip] * New translations en.json (Basque) [ci skip] * New translations en.yml (Basque) [ci skip] * New translations simple_form.en.yml (Basque) [ci skip] * New translations doorkeeper.en.yml (Basque) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations doorkeeper.en.yml (Czech) [ci skip] * New translations en.yml (Czech) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Bulgarian) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations en.yml (Arabic) [ci skip] * New translations simple_form.en.yml (Arabic) [ci skip] * New translations doorkeeper.en.yml (Arabic) [ci skip] * New translations en.yml (Bulgarian) [ci skip] * New translations simple_form.en.yml (Bulgarian) [ci skip] * New translations doorkeeper.en.yml (Bulgarian) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations simple_form.en.yml (Catalan) [ci skip] * New translations doorkeeper.en.yml (Catalan) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations doorkeeper.en.yml (Breton) [ci skip] * New translations simple_form.en.yml (Breton) [ci skip] * New translations en.json (Kannada) [ci skip] * New translations en.yml (Breton) [ci skip] * New translations en.json (Hindi) [ci skip] * New translations en.yml (Hindi) [ci skip] * New translations doorkeeper.en.yml (Hindi) [ci skip] * New translations en.json (Malay) [ci skip] * New translations en.yml (Malay) [ci skip] * New translations en.json (Telugu) [ci skip] * New translations en.yml (Telugu) [ci skip] * New translations en.json (Welsh) [ci skip] * New translations en.json (Breton) [ci skip] * New translations en.yml (Welsh) [ci skip] * New translations simple_form.en.yml (Welsh) [ci skip] * New translations doorkeeper.en.yml (Welsh) [ci skip] * New translations doorkeeper.en.yml (Esperanto) [ci skip] * New translations en.json (Uyghur) [ci skip] * New translations en.yml (Uyghur) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations simple_form.en.yml (Malayalam) [ci skip] * New translations doorkeeper.en.yml (Malayalam) [ci skip] * New translations en.yml (Kannada) [ci skip] * New translations en.yml (Serbian (Latin)) [ci skip] * New translations en.json (Taigi) [ci skip] * New translations simple_form.en.yml (Kabyle) [ci skip] * New translations doorkeeper.en.yml (Kabyle) [ci skip] * New translations en.json (Ido) [ci skip] * New translations en.yml (Ido) [ci skip] * New translations simple_form.en.yml (Ido) [ci skip] * New translations doorkeeper.en.yml (Ido) [ci skip] * New translations en.yml (Taigi) [ci skip] * New translations en.json (Silesian) [ci skip] * New translations en.yml (Silesian) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations en.json (Asturian) [ci skip] * New translations en.json (Serbian (Latin)) [ci skip] * New translations en.yml (Asturian) [ci skip] * New translations simple_form.en.yml (Asturian) [ci skip] * New translations doorkeeper.en.yml (Asturian) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations simple_form.en.yml (Occitan) [ci skip] * New translations doorkeeper.en.yml (Occitan) [ci skip] * New translations en.yml (Latvian) [ci skip] * New translations en.yml (Sanskrit) [ci skip] * New translations simple_form.en.yml (Serbian (Latin)) [ci skip] * New translations doorkeeper.en.yml (Serbian (Latin)) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations simple_form.en.yml (Corsican) [ci skip] * New translations doorkeeper.en.yml (Corsican) [ci skip] * New translations en.json (Sanskrit) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Latvian) [ci skip] * New translations en.json (Chinese Traditional, Hong Kong) [ci skip] * New translations simple_form.en.yml (Sorani (Kurdish)) [ci skip] * New translations en.yml (Sorani (Kurdish)) [ci skip] * New translations en.json (Sorani (Kurdish)) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations en.yml (Sardinian) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations doorkeeper.en.yml (Indonesian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations simple_form.en.yml (Persian) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations simple_form.en.yml (Sardinian) [ci skip] * New translations en.json (Tamil) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Thai) [ci skip] * New translations simple_form.en.yml (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.yml (Tatar) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Tatar) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations doorkeeper.en.yml (Sardinian) [ci skip] * New translations doorkeeper.en.yml (Sorani (Kurdish)) [ci skip] * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations doorkeeper.en.yml (Persian) [ci skip] * New translations en.yml (Tamil) [ci skip] * New translations doorkeeper.en.yml (Estonian) [ci skip] * New translations doorkeeper.en.yml (Norwegian Nynorsk) [ci skip] * New translations en.yml (Croatian) [ci skip] * New translations simple_form.en.yml (Croatian) [ci skip] * New translations doorkeeper.en.yml (Croatian) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations en.yml (Norwegian Nynorsk) [ci skip] * New translations simple_form.en.yml (Norwegian Nynorsk) [ci skip] * New translations en.json (Kazakh) [ci skip] * New translations doorkeeper.en.yml (Thai) [ci skip] * New translations en.yml (Kazakh) [ci skip] * New translations simple_form.en.yml (Kazakh) [ci skip] * New translations doorkeeper.en.yml (Kazakh) [ci skip] * New translations en.json (Estonian) [ci skip] * New translations en.yml (Estonian) [ci skip] * New translations simple_form.en.yml (Estonian) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations doorkeeper.en.yml (Marathi) [ci skip] * New translations simple_form.en.yml (Tamil) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Tamil) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations simple_form.en.yml (Spanish, Argentina) [ci skip] * New translations doorkeeper.en.yml (Spanish, Argentina) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.json (Bengali) [ci skip] * New translations en.yml (Bengali) [ci skip] * New translations simple_form.en.yml (Bengali) [ci skip] * New translations en.json (Marathi) [ci skip] * New translations en.yml (Marathi) [ci skip] * New translations simple_form.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Polish) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Portuguese, Brazilian) [ci skip] * New translations simple_form.en.yml (Portuguese, Brazilian) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.yml (Portuguese, Brazilian) [ci skip] * New translations simple_form.en.yml (Portuguese, Brazilian) [ci skip] * New translations en.yml (Portuguese, Brazilian) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations simple_form.en.yml (Corsican) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.json (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations simple_form.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.json (Spanish, Mexico) [ci skip] * New translations en.yml (Spanish, Mexico) [ci skip] * New translations doorkeeper.en.yml (Spanish, Mexico) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Swedish) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations simple_form.en.yml (Indonesian) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.yml (Thai) [ci skip] * i18n-tasks normalize * yarn manage:translations --- app/javascript/mastodon/locales/ca.json | 12 ++++++------ app/javascript/mastodon/locales/co.json | 14 +++++++------- app/javascript/mastodon/locales/el.json | 12 ++++++------ app/javascript/mastodon/locales/es-AR.json | 12 ++++++------ app/javascript/mastodon/locales/es.json | 12 ++++++------ app/javascript/mastodon/locales/fa.json | 14 +++++++------- app/javascript/mastodon/locales/fr.json | 12 ++++++------ app/javascript/mastodon/locales/gl.json | 14 +++++++------- app/javascript/mastodon/locales/hu.json | 12 ++++++------ app/javascript/mastodon/locales/id.json | 12 ++++++------ app/javascript/mastodon/locales/is.json | 12 ++++++------ app/javascript/mastodon/locales/it.json | 12 ++++++------ app/javascript/mastodon/locales/ja.json | 12 ++++++------ app/javascript/mastodon/locales/ko.json | 12 ++++++------ app/javascript/mastodon/locales/pl.json | 12 ++++++------ app/javascript/mastodon/locales/pt-BR.json | 12 ++++++------ app/javascript/mastodon/locales/pt-PT.json | 12 ++++++------ app/javascript/mastodon/locales/ru.json | 12 ++++++------ app/javascript/mastodon/locales/sq.json | 12 ++++++------ app/javascript/mastodon/locales/th.json | 8 ++++---- app/javascript/mastodon/locales/vi.json | 12 ++++++------ app/javascript/mastodon/locales/zh-HK.json | 12 ++++++------ config/locales/bn.yml | 2 +- config/locales/ca.yml | 4 ++++ config/locales/co.yml | 11 ++++++++++- config/locales/doorkeeper.hy.yml | 6 +++--- config/locales/el.yml | 2 ++ config/locales/es-AR.yml | 4 ++++ config/locales/es.yml | 6 ++++++ config/locales/eu.yml | 2 +- config/locales/fr.yml | 4 ++++ config/locales/gl.yml | 10 ++++++---- config/locales/hu.yml | 18 +++++++++++------- config/locales/hy.yml | 2 +- config/locales/id.yml | 12 +++++++++++- config/locales/is.yml | 5 +++++ config/locales/it.yml | 4 ++++ config/locales/ja.yml | 2 +- config/locales/kab.yml | 3 +++ config/locales/nl.yml | 2 +- config/locales/no.yml | 2 +- config/locales/pl.yml | 4 ++++ config/locales/pt-BR.yml | 13 +++++++++++++ config/locales/pt-PT.yml | 14 ++++++++++++++ config/locales/sc.yml | 2 +- config/locales/simple_form.co.yml | 1 + config/locales/simple_form.id.yml | 1 + config/locales/simple_form.pt-BR.yml | 3 ++- config/locales/sq.yml | 5 +++++ config/locales/sv.yml | 6 +++++- config/locales/th.yml | 8 ++++++++ config/locales/uk.yml | 2 +- config/locales/vi.yml | 16 ++++++++++------ config/locales/zh-CN.yml | 2 +- config/locales/zh-HK.yml | 12 +++++++++++- config/locales/zh-TW.yml | 2 +- 56 files changed, 290 insertions(+), 168 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 7066d9999..13e9e885b 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultats de la cerca", "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i Llocs", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Compte suspès", "empty_column.account_timeline": "No hi ha tuts aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Encara no has bloquejat cap usuari.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Canvi de títol", "lists.new.create": "Afegir llista", "lists.new.title_placeholder": "Nova llista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Qualsevol usuari seguit", + "lists.replies_policy.list": "Membres de la llista", + "lists.replies_policy.none": "Ningú", "lists.replies_policy.title": "Mostra respostes a:", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats de l'enquesta", "notifications.filter.statuses": "Actualitzacions de gent que segueixes", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Concedir permís.", "notifications.group": "{count} notificacions", "notifications.mark_as_read": "Marca cada notificació com a llegida", "notifications.permission_denied": "No s’ha pogut activar les notificacions d’escriptori perquè s’ha denegat el permís.", "notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.", "notifications_permission_banner.enable": "Activar les notificacions d’escriptori", "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", "notifications_permission_banner.title": "Mai et perdis res", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 7058fa7b1..43e1f6c10 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Risultati di a cerca", "emoji_button.symbols": "Simbuli", "emoji_button.travel": "Lochi è Viaghju", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Contu suspesu", "empty_column.account_timeline": "Nisun statutu quì!", "empty_column.account_unavailable": "Prufile micca dispunibule", "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambià u titulu", "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Tutti i vostri abbunamenti", + "lists.replies_policy.list": "Membri di a lista", + "lists.replies_policy.none": "Nimu", "lists.replies_policy.title": "Vede e risposte à:", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Minzione", "notifications.filter.polls": "Risultati di u scandagliu", "notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Auturizà.", "notifications.group": "{count} nutificazione", "notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette", - "notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè a dumanda d'auturizazione hè stata ricusata", + "notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè l'auturizazione hè stata ricusata", "notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Ùn si po micca attivà e nutificazione desktop perchè a l'auturizazione richiesta ùn hè micca stata data.", "notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore", "notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.", "notifications_permission_banner.title": "Ùn mancate mai nunda", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 4d1aa5782..7b7373165 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Λογαριασμός σε αναστολή", "empty_column.account_timeline": "Δεν έχει τουτ εδώ!", "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Αλλαγή τίτλου", "lists.new.create": "Προσθήκη λίστας", "lists.new.title_placeholder": "Τίτλος νέας λίστα", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Οποιοσδήποτε χρήστης που ακολουθείς", + "lists.replies_policy.list": "Μέλη της λίστας", + "lists.replies_policy.none": "Κανένας", "lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Αναφορές", "notifications.filter.polls": "Αποτελέσματα ψηφοφορίας", "notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Χορήγηση άδειας.", "notifications.group": "{count} ειδοποιήσεις", "notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.", "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Μη χάσετε τίποτα", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 5ca1d6959..434382e20 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay toots acá!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Agregar lista", "lists.new.title_placeholder": "Nuevo título de lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Cualquier cuenta seguida", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Nadie", "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente que seguís", "lists.subheading": "Tus listas", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de encuesta", "notifications.filter.statuses": "Actualizaciones de cuentas que seguís", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar cada notificación como leída", "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", "notifications_permission_banner.title": "No te pierdas nada", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 461929472..dfad44c6d 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay toots aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Cualquier usuario seguido", + "lists.replies_policy.list": "Miembros de la lista", + "lists.replies_policy.none": "Nadie", "lists.replies_policy.title": "Mostrar respuestas a:", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", "notifications.filter.statuses": "Actualizaciones de gente a la que sigues", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 7bda6dcb2..b062ec18b 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -81,7 +81,7 @@ "column_header.show_settings": "نمایش تنظیمات", "column_header.unpin": "رهاکردن", "column_subheading.settings": "ساماندهی", - "community.column_settings.local_only": "تنها بومی", + "community.column_settings.local_only": "فقط محلّی", "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", "compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.", @@ -149,7 +149,7 @@ "emoji_button.search_results": "نتایج جستجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "حساب معلق شد", "empty_column.account_timeline": "هیچ بوقی این‌جا نیست!", "empty_column.account_unavailable": "نمایهٔ موجود نیست", "empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.", @@ -266,9 +266,9 @@ "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", "lists.new.title_placeholder": "عنوان فهرست تازه", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "هر کاربر پیگرفته", + "lists.replies_policy.list": "اعضای فهرست", + "lists.replies_policy.none": "هیچ کدام", "lists.replies_policy.title": "نمایش پاسخ‌ها به:", "lists.search": "بین کسانی که پی می‌گیرید بگردید", "lists.subheading": "فهرست‌های شما", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "نام‌بردن‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "اعطای مجوز.", "notifications.group": "{count} اعلان", "notifications.mark_as_read": "نشانه‌گذاری همهٔ آگاهی‌ها به عنوان خوانده‌شده", "notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", "notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "اعلان‌های میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.", "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار", "notifications_permission_banner.how_to_control": "اگر می‌خواهید حتی زمانی که ماستودون باز نیست اعلان‌ها نمایش یابند، اعلان‌های میزکار را فعال کنید. به محض فعال شدن از طریق دکمه {icon} بالا می‌توانید به دقت کنترل کنید که چه نوع از تعامل‌ها باعث صادر شدن اعلان‌ها شوند.", "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 1376d150d..0ea82acbc 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Résultats de la recherche", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Compte suspendu", "empty_column.account_timeline": "Aucun pouet ici !", "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "N’importe quel·le utilisateur·rice suivi·e", + "lists.replies_policy.list": "Membres de la liste", + "lists.replies_policy.none": "Personne", "lists.replies_policy.title": "Afficher les réponses à :", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", "notifications.filter.statuses": "Mises à jour des personnes que vous suivez", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Accorder l’autorisation.", "notifications.group": "{count} notifications", "notifications.mark_as_read": "Marquer toutes les notifications comme lues", "notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.", "notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Toujours au courant", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 771b6c990..854e31554 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultados da procura", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Conta suspendida", "empty_column.account_timeline": "Non hai toots aquí!", "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Toda usuaria seguida", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguén", "lists.replies_policy.title": "Mostrar respostas a:", "lists.search": "Procurar entre as persoas que segues", "lists.subheading": "As túas listaxes", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", "notifications.filter.statuses": "Actualizacións de xente á que segues", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificacións", "notifications.mark_as_read": "Marcar todas as notificacións como lidas", "notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso", "notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "As notificacións de escritorio non están dispoñibles porque non se concedeu o permiso necesario.", "notifications_permission_banner.enable": "Activar notificacións de escritorio", "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.", "notifications_permission_banner.title": "Non perder nada", @@ -362,7 +362,7 @@ "privacy.unlisted.long": "Non publicar nas cronoloxías públicas", "privacy.unlisted.short": "Non listado", "refresh": "Actualizar", - "regeneration_indicator.label": "Cargando…", + "regeneration_indicator.label": "Estase a cargar…", "regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index aac91f9a0..a0ae7305c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Keresési találatok", "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Fiók felfüggesztve", "empty_column.account_timeline": "Itt nincs tülkölés!", "empty_column.account_unavailable": "A profil nem érhető el", "empty_column.blocks": "Még senkit sem tiltottál le.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", "lists.new.title_placeholder": "Új lista címe", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Bármely követett felhasználó", + "lists.replies_policy.list": "A lista tagjai", + "lists.replies_policy.none": "Senki", "lists.replies_policy.title": "Nekik mutassuk a válaszokat:", "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Megemlítések", "notifications.filter.polls": "Szavazások eredményei", "notifications.filter.statuses": "Frissítések azoktól, akiket követsz", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Engedély megadása.", "notifications.group": "{count} értesítés", "notifications.mark_as_read": "Minden értesítés olvasottnak jelölése", "notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.", "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Az asztali értesítések nem elérhetőek, mert a szükséges engedélyt nem adtad meg.", "notifications_permission_banner.enable": "Asztali értesítések engedélyezése", "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", "notifications_permission_banner.title": "Soha ne mulassz el semmit", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index d0ae2befc..24f100b6a 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Hasil pencarian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Akun ditangguhkan", "empty_column.account_timeline": "Tidak ada toot di sini!", "empty_column.account_unavailable": "Profil tidak tersedia", "empty_column.blocks": "Anda belum memblokir siapapun.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Ubah judul", "lists.new.create": "Tambah daftar", "lists.new.title_placeholder": "Judul daftar baru", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Siapapun pengguna yang diikuti", + "lists.replies_policy.list": "Anggota di daftar tersebut", + "lists.replies_policy.none": "Tidak ada satu pun", "lists.replies_policy.title": "Tampilkan balasan ke:", "lists.search": "Cari di antara orang yang Anda ikuti", "lists.subheading": "Daftar Anda", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Hasil japat", "notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Setujui izin.", "notifications.group": "{count} notifikasi", "notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca", "notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.", "notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Notifikasi desktop tidak tersedia karena izin yang dibutuhkan belum disetujui.", "notifications_permission_banner.enable": "Aktifkan notifikasi desktop", "notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.", "notifications_permission_banner.title": "Jangan lewatkan apapun", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 6910e9e5f..d90156835 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Leitarniðurstöður", "emoji_button.symbols": "Tákn", "emoji_button.travel": "Ferðalög og staðir", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Notandaaðgangur í bið", "empty_column.account_timeline": "Engin tíst hér!", "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Breyta titli", "lists.new.create": "Bæta við lista", "lists.new.title_placeholder": "Titill á nýjum lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Allra notenda sem fylgst er með", + "lists.replies_policy.list": "Meðlima listans", + "lists.replies_policy.none": "Engra", "lists.replies_policy.title": "Sýna svör til:", "lists.search": "Leita meðal þeirra sem þú fylgist með", "lists.subheading": "Listarnir þínir", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", "notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Veita heimild.", "notifications.group": "{count} tilkynningar", "notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar", "notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra", "notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Tilkynningar á skjáborði eru ekki aðgengilegar þar sem nauðsynlegar heimildir hafa ekki verið veittar.", "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði", "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", "notifications_permission_banner.title": "Aldrei missa af neinu", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 746d33df0..b63b231ae 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Risultati della ricerca", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi & Luoghi", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Account sospeso", "empty_column.account_timeline": "Nessun toot qui!", "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato alcun utente.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Qualsiasi utente seguito", + "lists.replies_policy.list": "Iscritti alla lista", + "lists.replies_policy.none": "Nessuno", "lists.replies_policy.title": "Mostra risposte a:", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Menzioni", "notifications.filter.polls": "Risultati del sondaggio", "notifications.filter.statuses": "Aggiornamenti dalle persone che segui", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Dai il permesso.", "notifications.group": "{count} notifiche", "notifications.mark_as_read": "Segna tutte le notifiche come lette", "notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.", "notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Le notifiche desktop non sono disponibili perché l'autorizzazione richiesta non è stata concessa.", "notifications_permission_banner.enable": "Abilita le notifiche sul desktop", "notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.", "notifications_permission_banner.title": "Non perderti mai nulla", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ccf8970ea..012f88a68 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "検索結果", "emoji_button.symbols": "記号", "emoji_button.travel": "旅行と場所", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "アカウントは停止されています", "empty_column.account_timeline": "トゥートがありません!", "empty_column.account_unavailable": "プロフィールは利用できません", "empty_column.blocks": "まだ誰もブロックしていません。", @@ -266,9 +266,9 @@ "lists.edit.submit": "タイトルを変更", "lists.new.create": "リストを作成", "lists.new.title_placeholder": "新規リスト名", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "フォロー中のユーザー全員", + "lists.replies_policy.list": "リストのメンバー", + "lists.replies_policy.none": "表示しない", "lists.replies_policy.title": "リプライを表示:", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "返信", "notifications.filter.polls": "アンケート結果", "notifications.filter.statuses": "フォローしている人の新着情報", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "権限の付与", "notifications.group": "{count} 件の通知", "notifications.mark_as_read": "すべて既読にする", "notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません", "notifications.permission_denied_alert": "ブラウザの通知が拒否されているためデスクトップ通知を有効にできません", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "必要な権限が付与されていないため、デスクトップ通知は利用できません。", "notifications_permission_banner.enable": "デスクトップ通知を有効にする", "notifications_permission_banner.how_to_control": "Mastodon を閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", "notifications_permission_banner.title": "お見逃しなく", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index c254ef6d8..10f7eabcf 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "계정 정지됨", "empty_column.account_timeline": "여긴 툿이 없어요!", "empty_column.account_unavailable": "프로필 사용 불가", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", @@ -266,9 +266,9 @@ "lists.edit.submit": "제목 수정", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "팔로우 한 사용자 누구나", + "lists.replies_policy.list": "리스트의 구성원들", + "lists.replies_policy.none": "아무도 없음", "lists.replies_policy.title": "답글 표시:", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "멘션", "notifications.filter.polls": "투표 결과", "notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "권한 부여.", "notifications.group": "{count} 개의 알림", "notifications.mark_as_read": "모든 알림을 읽은 상태로 표시", "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", "notifications_permission_banner.enable": "데스크탑 알림 활성화", "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", "notifications_permission_banner.title": "아무것도 놓치지 마세요", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index badea8dcd..0af58e351 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Konto zawieszone", "empty_column.account_timeline": "Brak wpisów tutaj!", "empty_column.account_unavailable": "Profil niedostępny", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Zmień tytuł", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Dowolny obserwowany użytkownik", + "lists.replies_policy.list": "Członkowie listy", + "lists.replies_policy.none": "Nikt", "lists.replies_policy.title": "Pokazuj odpowiedzi dla:", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Wspomienia", "notifications.filter.polls": "Wyniki głosowania", "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Przyznaj uprawnienia.", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.", "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", "notifications_permission_banner.title": "Nie przegap niczego", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 4e45927a5..65d5815ed 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagem & Lugares", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Conta suspensa", "empty_column.account_timeline": "Nada aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Nada aqui.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Renomear", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Qualquer usuário seguido", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguém", "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados de enquete", "notifications.filter.statuses": "Atualizações de pessoas que você segue", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Conceder permissão.", "notifications.group": "{count} notificações", "notifications.mark_as_read": "Marcar todas as notificações como lidas", "notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.", "notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Notificações da área de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", "notifications_permission_banner.enable": "Habilitar notificações da área de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.", "notifications_permission_banner.title": "Nunca perca nada", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 0ff168002..dd3b4eba2 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Conta suspensa", "empty_column.account_timeline": "Sem toots por aqui!", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Qualquer utilizador seguido", + "lists.replies_policy.list": "Membros da lista", + "lists.replies_policy.none": "Ninguém", "lists.replies_policy.title": "Mostrar respostas para:", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Votações", "notifications.filter.statuses": "Atualizações de pessoas que você segue", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Conceder permissões.", "notifications.group": "{count} notificações", "notifications.mark_as_read": "Marcar todas as notificações como lidas", "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", "notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca perca nada", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index bde219846..2853b3302 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия и места", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Учетная запись заблокирована", "empty_column.account_timeline": "Здесь нет постов!", "empty_column.account_unavailable": "Профиль недоступен", "empty_column.blocks": "Вы ещё никого не заблокировали.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Любой подписанный пользователь", + "lists.replies_policy.list": "Пользователи в списке", + "lists.replies_policy.none": "Никого", "lists.replies_policy.title": "Показать ответы только:", "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Дать разрешение.", "notifications.group": "{count} уведомл.", "notifications.mark_as_read": "Отмечать все уведомления прочитанными", "notifications.permission_denied": "Уведомления на рабочем столе недоступны из-за ранее отклонённого запроса разрешений браузера", "notifications.permission_denied_alert": "Уведомления на рабочем столе не могут быть включены, так как раньше было отказано в разрешении браузера", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Десктоп нотификации недоступны, потому что требуемое разрешение не было предоставлено.", "notifications_permission_banner.enable": "Включить уведомления на рабочем столе", "notifications_permission_banner.how_to_control": "Чтобы получать уведомления, когда Мастодон не открыт, включите уведомления рабочего стола. Вы можете точно управлять, какие типы взаимодействия генерируют уведомления рабочего стола с помощью кнопки {icon} выше, когда они включены.", "notifications_permission_banner.title": "Ничего не пропустите", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index d73c7802b..b45f62cd5 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Përfundime kërkimi", "emoji_button.symbols": "Simbole", "emoji_button.travel": "Udhëtime & Vende", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Llogaria u pezullua", "empty_column.account_timeline": "S’ka mesazhe këtu!", "empty_column.account_unavailable": "Profil jashtë funksionimi", "empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Ndryshoni titullin", "lists.new.create": "Shtoni listë", "lists.new.title_placeholder": "Titull liste të re", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Cilido përdorues i ndjekur", + "lists.replies_policy.list": "Anëtarë të listës", + "lists.replies_policy.none": "Askush", "lists.replies_policy.title": "Shfaq përgjigje për:", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Përmendje", "notifications.filter.polls": "Përfundime pyetësori", "notifications.filter.statuses": "Përditësime prej personash që ndiqni", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Akordoji leje.", "notifications.group": "{count}s njoftime", "notifications.mark_as_read": "Vëri shenjë çdo njoftimi si të lexuar", "notifications.permission_denied": "S’mund të aktivizohen njoftime në desktop, ngaqë janë mohuar lejet për këtë.", "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.", "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në dekstop, pasi të jenë aktivizuar.", "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d036a0896..30ec26809 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "ผลลัพธ์การค้นหา", "emoji_button.symbols": "สัญลักษณ์", "emoji_button.travel": "การเดินทางและสถานที่", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "ระงับบัญชีอยู่", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", "empty_column.account_unavailable": "ไม่มีโปรไฟล์", "empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ", @@ -266,9 +266,9 @@ "lists.edit.submit": "เปลี่ยนชื่อเรื่อง", "lists.new.create": "เพิ่มรายการ", "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "ผู้ใช้ใด ๆ ที่ติดตาม", + "lists.replies_policy.list": "สมาชิกของรายการ", + "lists.replies_policy.none": "ไม่มีใคร", "lists.replies_policy.title": "แสดงการตอบกลับแก่:", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 005ed9923..4814dda91 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Kết quả tìm kiếm", "emoji_button.symbols": "Biểu tượng", "emoji_button.travel": "Du lịch", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Tài khoản vô hiệu hóa", "empty_column.account_timeline": "Chưa có tút nào!", "empty_column.account_unavailable": "Tài khoản bị đình chỉ", "empty_column.blocks": "Bạn chưa chặn bất cứ ai.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Thay đổi tiêu đề", "lists.new.create": "Tạo danh sách mới", "lists.new.title_placeholder": "Tên danh sách mới", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Người theo dõi", + "lists.replies_policy.list": "Người trong danh sách", + "lists.replies_policy.none": "Không ai", "lists.replies_policy.title": "Cho phép bình luận với:", "lists.search": "Tìm kiếm những người mà bạn quan tâm", "lists.subheading": "Danh sách của bạn", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Lượt nhắc đến", "notifications.filter.polls": "Kết quả bình chọn", "notifications.filter.statuses": "Cập nhật từ những người bạn theo dõi", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Cho phép.", "notifications.group": "{count} thông báo", "notifications.mark_as_read": "Đánh dấu tất cả thông báo là đã đọc", "notifications.permission_denied": "Trình duyệt không cho phép hiển thị thông báo trên màn hình.", "notifications.permission_denied_alert": "Không thể bật thông báo trên màn hình bởi vì trình duyệt đã cấm trước đó", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Không hiện thông báo trên màn hình bởi vì chưa cho phép.", "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 9aa3e37bb..1a62ccbb3 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊景物", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "帳號已停權", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", "empty_column.blocks": "你還沒有封鎖任何使用者。", @@ -266,9 +266,9 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "任何已關注的用戶", + "lists.replies_policy.list": "列表中的用戶", + "lists.replies_policy.none": "無人", "lists.replies_policy.title": "顯示回應文章︰", "lists.search": "從你關注的人搜索", "lists.subheading": "列表", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", "notifications.filter.statuses": "已關注的用戶的最新動態", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "授予權限", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "標記所有通知為已讀", "notifications.permission_denied": "本站不能發送桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", "notifications.permission_denied_alert": "無法啟用桌面通知,因為瀏覽器先前拒絕了本站的桌面通知權限請求", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "由於瀏覽器未有授予桌面通知權限,本站暫未能發送桌面通知。", "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不放過任何事情", diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 0cf936d68..a79f10131 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -23,7 +23,7 @@ bn: hosted_on: এই মাস্টাডনটি আছে %{domain} এ instance_actor_flash: 'এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। -' + ' learn_more: বিস্তারিত জানুন privacy_policy: গোপনীয়তা নীতি see_whats_happening: কী কী হচ্ছে দেখুন diff --git a/config/locales/ca.yml b/config/locales/ca.yml index fa49081be..439249d1b 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -402,6 +402,8 @@ ca: silence: Silenci suspend: Suspensió title: Bloqueig de domini nou + obfuscate: Oculta el nom del domini + obfuscate_hint: Oculta parcialment el nom del domini si està activat mostrar la llista de dominis limitats private_comment: Comentari privat private_comment_hint: Comentari sobre aquesta limitació del domini per a ús intern dels moderadors. public_comment: Comentari públic @@ -921,6 +923,8 @@ ca: status: Estat de verificació view_proof: Veure la prova imports: + errors: + over_rows_processing_limit: conté més de %{count} files modes: merge: Fusionar merge_long: Mantenir els registres existents i afegir-ne de nous diff --git a/config/locales/co.yml b/config/locales/co.yml index edb8ced1d..29ba79688 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -60,6 +60,7 @@ co: one: Abbunatu·a other: Abbunati following: Abbunamenti + instance_actor_flash: Stu contu virtuale riprisenta u servore stessu, micca un'utilizatore individuale. Hè utilizatu per scopi di federazione è ùn duveria mai esse suspesu. joined: Quì dapoi %{date} last_active: ultima attività link_verified_on: A pruprietà d'issu ligame hè stata verificata u %{date} @@ -131,6 +132,7 @@ co: follows: Abbunamenti header: Ritrattu di cuprendula inbox_url: URL di l’inbox + invite_request_text: Ragione di l'arregistramentu invited_by: Invitatu da ip: IP joined: Ghjuntu @@ -296,6 +298,7 @@ co: unsuspend_account: "%{name} hà fattu che u contu di %{target} ùn hè più suspesu" update_announcement: "%{name} hà cambiatu u novu annunziu %{target}" update_custom_emoji: "%{name} hà messu à ghjornu l’emoji %{target}" + update_domain_block: "%{name} hà messu à ghjornu u blucchime di duminiu per %{target}" update_status: "%{name} hà cambiatu u statutu di %{target}" deleted_status: "(statutu sguassatu)" empty: Nunda trovu. @@ -438,6 +441,7 @@ co: instances: by_domain: Duminiu delivery_available: Rimessa dispunibule + empty: Mancun duminiu trovu. known_accounts: one: "%{count} contu cunnisciutu" other: "%{count} conti cunnisciuti" @@ -515,6 +519,8 @@ co: comment: none: Nisunu created_at: Palisatu + forwarded: Trasferitu + forwarded_to: Trasferistu à %{domain} mark_as_resolved: Indicà cum’è chjosu mark_as_unresolved: Indicà cum’è sempre apertu notes: @@ -582,8 +588,10 @@ co: desc_html: Auturizà tuttu u mondu à sguassà u so propiu contu title: Auturizà à sguassà i conti min_invite_role: - disabled: Nisunu + disabled: Nimu title: Auturizà l’invitazione da + require_invite_text: + title: Richiede chì i novi utilizatori empiinu una dumanda d'invitazione registrations_mode: modes: approved: Apprubazione necessaria per arregistrassi @@ -752,6 +760,7 @@ co: functional: U vostru contu hè uperaziunale. pending: A vostra dumanda hè in attesa di rivista da a squadra di muderazione. Quessa pò piglià un certu tempu. Avete da riceve un'e-mail s'ella hè appruvata. redirecting_to: U vostru contu hè inattivu perchè riindirizza versu %{acct}. + too_fast: Furmulariu mandatu troppu prestu, ripruvate. trouble_logging_in: Difficultà per cunnettavi? use_security_key: Utilizà a chjave di sicurità authorize_follow: diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml index ba3f4e124..7b0e1f03c 100644 --- a/config/locales/doorkeeper.hy.yml +++ b/config/locales/doorkeeper.hy.yml @@ -8,7 +8,7 @@ hy: scopes: Դաշտեր website: 'Յաւելուածի վէբկայք -' + ' errors: models: doorkeeper/application: @@ -52,7 +52,7 @@ hy: actions: Գործողութիւններ application_id: 'Կլիենտի բանալի -' + ' callback_urls: URL֊ների ետկանչ scopes: Դաշտեր secret: Կլիենտի գաղտնիք @@ -147,7 +147,7 @@ hy: write:favourites: հաւանել գրառումները write:filters: 'ստեղծել ֆիլտրեր -' + ' write:follows: հետեւել write:lists: ստեղծել ցանկեր write:media: բեռնել մեդիա ֆայլեր diff --git a/config/locales/el.yml b/config/locales/el.yml index 7658efb18..837d6f416 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -910,6 +910,8 @@ el: status: Κατάσταση επαλήθευσης view_proof: Εμφάνιση απόδειξης imports: + errors: + over_rows_processing_limit: περιέχει περισσότερες από %{count} γραμμές modes: merge: Συγχώνευση merge_long: Διατήρηση των εγγράφων που υπάρχουν και προσθηκη των νέων diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index cb731ee4b..93f663641 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -402,6 +402,8 @@ es-AR: silence: Silenciar suspend: Suspender title: Nuevo bloqueo de dominio + obfuscate: Obfuscar nombre de dominio + obfuscate_hint: Obfusca parcialmente el nombre de dominio en la lista si el anuncio de la lista de limitaciones de dominio está habilitado private_comment: Comentario privado private_comment_hint: Comentario sobre la limitación de este dominio, para uso interno de los moderadores. public_comment: Comentario público @@ -921,6 +923,8 @@ es-AR: status: Estado de verificación view_proof: Ver prueba imports: + errors: + over_rows_processing_limit: contiene más de %{count} filas modes: merge: Combinar merge_long: Mantener registros existentes y agregar nuevos diff --git a/config/locales/es.yml b/config/locales/es.yml index e26cd79f2..8d458edc6 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -402,6 +402,8 @@ es: silence: Silenciar suspend: Suspender title: Nuevo bloque de dominio + obfuscate: Ocultar nombre de dominio + obfuscate_hint: Oculta parcialmente el nombre de dominio en la lista si mostrar la lista de limitaciones de dominio está habilitado private_comment: Comentario privado private_comment_hint: Comentario sobre esta limitación de dominio para el uso interno por parte de los moderadores. public_comment: Comentario público @@ -519,6 +521,8 @@ es: comment: none: Ninguno created_at: Denunciado + forwarded: Reenviado + forwarded_to: Reenviado a %{domain} mark_as_resolved: Marcar como resuelto mark_as_unresolved: Marcar como no resuelto notes: @@ -919,6 +923,8 @@ es: status: Estado de la verificación view_proof: Ver prueba imports: + errors: + over_rows_processing_limit: contiene más de %{count} filas modes: merge: Unir merge_long: Mantener registros existentes y añadir nuevos diff --git a/config/locales/eu.yml b/config/locales/eu.yml index cd82a5d9a..4cd4c00f8 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -23,7 +23,7 @@ eu: hosted_on: Mastodon %{domain} domeinuan ostatatua instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. -' + ' learn_more: Ikasi gehiago privacy_policy: Pribatutasun politika see_whats_happening: Ikusi zer gertatzen ari den diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 52195cbef..bed43fee1 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -402,6 +402,8 @@ fr: silence: Masqué suspend: Suspendre title: Nouveau blocage de domaine + obfuscate: Obfusquer le nom de domaine + obfuscate_hint: Obfusquer partiellement le nom de domaine dans la liste si la liste des limitations de domaine est activée private_comment: Commentaire privé private_comment_hint: Commenter sur cette limitation de domaine pour informer les modérateurs internes. public_comment: Commentaire public @@ -921,6 +923,8 @@ fr: status: État de la vérification view_proof: Voir la preuve imports: + errors: + over_rows_processing_limit: contient plus de %{count} lignes modes: merge: Fusionner merge_long: Garder les enregistrements existants et ajouter les nouveaux diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 6d648082f..597a05d23 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -23,7 +23,7 @@ gl: hosted_on: Mastodon aloxado en %{domain} instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. -' + ' learn_more: Saber máis privacy_policy: Política de privacidade see_whats_happening: Ver o que está a acontecer @@ -60,6 +60,7 @@ gl: one: Seguidora other: Seguidoras following: Seguindo + instance_actor_flash: Esta conta é un actor virtual utilizado para representar ó servidor mesmo e non a unha usuaria individual. Utilízase por motivos de federación e non debería estar suspendida. joined: Uniuse en %{date} last_active: última actividade link_verified_on: A propiedade desta ligazón foi verificada en %{date} @@ -131,6 +132,7 @@ gl: follows: Seguindo header: Cabeceira inbox_url: URL da caixa de entrada + invite_request_text: Razóns para unirte invited_by: Convidada por ip: IP joined: Uniuse @@ -1347,8 +1349,8 @@ gl: webauthn: Chaves de seguridade user_mailer: backup_ready: - explanation: Solicitou un respaldo completo da súa conta de Mastodon. Xa está listo para descargar! - subject: O seu ficheiro xa está listo para descargar + explanation: Solicitaches os datos completos da túa conta de Mastodon. Xa está preparados para descargar! + subject: O teu ficheiro xa está preparado para descargar title: Leve o ficheiro sign_in_token: details: 'Detalles sobre o intento:' @@ -1379,7 +1381,7 @@ gl: suspend: Conta suspendida welcome: edit_profile_action: Configurar perfil - edit_profile_step: Podes personalizar o teu perfil subindo un avatar, cabeceira, cambiar o nome público e aínda máis. Se restrinxes a tua conta podes revisar a conta das persoas que solicitan seguirte antes de permitirlles o acceso aos teus toots. + edit_profile_step: Podes personalizar o teu perfil subindo un avatar, cabeceira, cambiar o nome público e aínda máis. Se restrinxes a túa conta podes revisar a conta das persoas que solicitan seguirte antes de permitirlles o acceso aos teus toots. explanation: Aquí ten alunhas endereitas para ir aprendendo final_action: Comece a publicar final_step: 'Publica! Incluso sen seguidoras as túas mensaxes serán vistas por outras, por exemplo na liña temporal local e nos cancelos. Poderías presentarte ao #fediverso utilizando o cancelo #introductions.' diff --git a/config/locales/hu.yml b/config/locales/hu.yml index ef6ec3089..01fecb99c 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -23,7 +23,7 @@ hu: hosted_on: "%{domain} Mastodon szerver" instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. -' + ' learn_more: Tudj meg többet privacy_policy: Adatvédelmi szabályzat see_whats_happening: Nézd, mi történik @@ -60,7 +60,7 @@ hu: one: Követő other: Követő following: Követett - instance_actor_flash: Ez a fiók virtuális és magát a szervert reprezentálja, nem egy konkrét felhasználót. Föderációs okok miatt létezik és nem szabad felfüggeszteni. + instance_actor_flash: Ez a fiók virtuális és magát a kiszolgálót reprezentálja, nem egy konkrét felhasználót. Föderációs célokból használt, és nem szabad felfüggeszteni. joined: Csatlakozott %{date} last_active: utoljára aktív link_verified_on: A link tulajdonosát %{date} -n ellenőriztük @@ -142,7 +142,7 @@ hu: remote: Távoli title: Hely login_status: Bejelentkezési állapot - media_attachments: Média-csatolmányok + media_attachments: Médiamellékletek memorialize: Emlékállítás memorialized: Emlékezetünkben memorialized_msg: A %{username} fiókot sikeresen emlékké nyilvánítottuk @@ -402,6 +402,8 @@ hu: silence: Némítás suspend: Felfüggesztés title: Új domain tiltása + obfuscate: Domain név álcázása + obfuscate_hint: Részlegesen álcázza a domain nevet a listában, ha a domain korlátozások listájának közzététele engedélyezett private_comment: Privát megjegyzés private_comment_hint: Megjegyzés domain tiltásával kapcsolatban belső használatra, a többi moderátor részére. public_comment: Nyilvános megjegyzés @@ -520,7 +522,7 @@ hu: none: Egyik sem created_at: Jelentve forwarded: Továbbítva - forwarded_to: Továbbítva neki %{domain} + forwarded_to: 'Továbbítva ide: %{domain}' mark_as_resolved: Megjelölés megoldottként mark_as_unresolved: Megjelölés megoldatlanként notes: @@ -896,8 +898,8 @@ hu: order_by: Rendezés save_changes: Változások mentése validation_errors: - one: Valami nincs rendjén! Kérlek tekintsd meg a hibát alant - other: Valami nincs rendjén! Kérlek tekintsd meg a %{count} darab hibát alant + one: Valami nincs rendjén! Tekintsd meg a hibát lent + other: Valami nincs rendjén! Tekintsd meg a(z) %{count} hibát lent html_validator: invalid_markup: 'hibás HTML leíró: %{error}' identity_proofs: @@ -921,6 +923,8 @@ hu: status: Ellenőrzés állapota view_proof: Tanúsítás megtekintése imports: + errors: + over_rows_processing_limit: több mint %{count} sort tartalmaz modes: merge: Összefésülés merge_long: Megtartjuk a meglévő bejegyzéseket és hozzávesszük az újakat @@ -1222,7 +1226,7 @@ hu: one: "%{count} szavazat" other: "%{count} szavazat" vote: Szavazás - show_more: Mutass többet + show_more: Több megjelenítése show_newer: Újabbak mutatása show_older: Régebbiek mutatása show_thread: Szál mutatása diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 1afd4d927..049044627 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -23,7 +23,7 @@ hy: hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում instance_actor_flash: 'Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ -' + ' learn_more: Իմանալ ավելին privacy_policy: Գաղտնիության քաղաքականություն see_whats_happening: Տես ինչ ա կատարվում diff --git a/config/locales/id.yml b/config/locales/id.yml index fdd87027e..498c285d7 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -23,7 +23,7 @@ id: hosted_on: Mastodon dihosting di %{domain} instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. -' + ' learn_more: Pelajari selengkapnya privacy_policy: Kebijakan Privasi see_whats_happening: Lihat apa yang sedang terjadi @@ -57,6 +57,7 @@ id: followers: other: Pengikut following: Mengikuti + instance_actor_flash: Akun ini adalah aktor virtual yang merepresentasikan server itu sendiri dan bukan pengguna individu. Ini dipakai untuk tujuan gabungan dan seharusnya tidak ditangguhkan. joined: Bergabung pada %{date} last_active: terakhir aktif link_verified_on: Kepemilikan tautan ini telah dicek pada %{date} @@ -127,6 +128,7 @@ id: follows: Mengikut header: Tajuk inbox_url: URL Kotak masuk + invite_request_text: Alasan bergabung invited_by: Diundang oleh ip: IP joined: Bergabung @@ -509,6 +511,8 @@ id: comment: none: Tidak ada created_at: Dilaporkan + forwarded: Diteruskan + forwarded_to: Diteruskan ke %{domain} mark_as_resolved: Tandai telah diseleseikan mark_as_unresolved: Tandai belum terselesaikan notes: @@ -578,6 +582,9 @@ id: min_invite_role: disabled: Tidak ada satu pun title: Izinkan undangan oleh + require_invite_text: + desc_html: Saat pendaftaran harus disetujui manual, buat input teks "Mengapa Anda ingin bergabung?" sebagai hal wajib bukan opsional + title: Pengguna baru harus memasukkan alasan bergabung registrations_mode: modes: approved: Persetujuan diperlukan untuk mendaftar @@ -746,6 +753,7 @@ id: functional: Akun Anda kini beroperasi penuh. pending: Permintaan Anda sedang ditinjau oleh staf kami. Ini mungkin butuh beberapa waktu. Anda akan menerima email jika permintaan Anda diterima. redirecting_to: Akun Anda tidak aktif karena sekarang dialihkan ke %{acct}. + too_fast: Formulir dikirim terlalu cepat, coba lagi. trouble_logging_in: Kesulitan masuk? use_security_key: Gunakan kunci keamanan authorize_follow: @@ -904,6 +912,8 @@ id: status: Status verifikasi view_proof: Lihat bukti imports: + errors: + over_rows_processing_limit: berisi lebih dari %{count} baris modes: merge: Gabung merge_long: Pertahankan rekaman yang sudah ada dan buat baru diff --git a/config/locales/is.yml b/config/locales/is.yml index 75b80a45d..97ac62a4d 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -60,6 +60,7 @@ is: one: fylgjandi other: fylgjendur following: Fylgist með + instance_actor_flash: Þessi notandaaðgangur er sýndarnotandi sem stendur fyrir sjálfan netþjóninn en ekki neinn einstakling. Hann er notaður við skýjasambandsmiðlun og ætti ekki að setja hann í bið eða banna. joined: Gerðist þátttakandi %{date} last_active: síðasta virkni link_verified_on: Eignarhald á þessum tengli var athugað þann %{date} @@ -401,6 +402,8 @@ is: silence: Hylja suspend: Setja í bið title: Ný útilokun á léni + obfuscate: Gera heiti léns ólæsilegt + obfuscate_hint: Gera heiti léns ólæsilegt að hluta í listanum ef auglýsing er virk fyrir lista yfir takmarkanir léna private_comment: Einkaathugasemd private_comment_hint: Athugasemd um þessa útilokun á léni til innanhússnotkunar fyrir umsjónarmenn. public_comment: Opinber athugasemd @@ -920,6 +923,8 @@ is: status: Staða sannvottunar view_proof: Skoða sönnun imports: + errors: + over_rows_processing_limit: inniheldur meira en %{count} raðir modes: merge: Sameina merge_long: Halda fyrirliggjandi færslum og bæta við nýjum diff --git a/config/locales/it.yml b/config/locales/it.yml index 5ca2fae92..65e24a4c7 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -402,6 +402,8 @@ it: silence: Silenzia suspend: Sospendi title: Nuovo blocco dominio + obfuscate: Nascondi nome di dominio + obfuscate_hint: Nascondere parzialmente il nome di dominio, se è abilitata la visualizzazione pubblica dell'elenco delle limitazioni di dominio private_comment: Commento privato private_comment_hint: Commento su questa limitazione di dominio per uso interno da parte dei moderatori. public_comment: Commento pubblico @@ -923,6 +925,8 @@ it: status: Stato della verifica view_proof: Vedi prova imports: + errors: + over_rows_processing_limit: contiene più di %{count} righe modes: merge: Fondi merge_long: Mantieni record esistenti e aggiungine di nuovi diff --git a/config/locales/ja.yml b/config/locales/ja.yml index db9e41f74..3a929c6ca 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -23,7 +23,7 @@ ja: hosted_on: Mastodon hosted on %{domain} instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 -' + ' learn_more: もっと詳しく privacy_policy: プライバシーポリシー see_whats_happening: やりとりを見てみる diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 403f2b2e7..af83d5fc6 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -72,6 +72,8 @@ kab: unavailable: Ur nufi ara amaɣnu-a unfollow: Ur ṭṭafaṛ ara admin: + account_actions: + action: Eg tigawt account_moderation_notes: create: Eǧǧ tazmilt delete: Kkes @@ -108,6 +110,7 @@ kab: follows: Yeṭafaṛ header: Ixef inbox_url: URL n yinekcam + invite_request_text: Timental n tmerna invited_by: Inced-it-id ip: Tansa IP joined: Ikcemed deg diff --git a/config/locales/nl.yml b/config/locales/nl.yml index d9c4e20fa..e1f10c813 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -23,7 +23,7 @@ nl: hosted_on: Mastodon op %{domain} instance_actor_flash: 'Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken. -' + ' learn_more: Meer leren privacy_policy: Privacybeleid see_whats_happening: Kijk wat er aan de hand is diff --git a/config/locales/no.yml b/config/locales/no.yml index b70eb167c..3d51fc6cd 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -23,7 +23,7 @@ hosted_on: Mastodon driftet på %{domain} instance_actor_flash: 'Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. -' + ' learn_more: Lær mer privacy_policy: Privatlivsretningslinjer see_whats_happening: Se hva som skjer diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 327ad81c1..6b0f5ae58 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -410,6 +410,8 @@ pl: silence: Wycisz suspend: Zawieś title: Nowa blokada domen + obfuscate: Ukryj nazwę domeny + obfuscate_hint: Częściowo ukryj nazwę domeny na liście, gdy reklamowanie listy limitów domen jest włączone private_comment: Prywatny komentarz private_comment_hint: Komentarz na temat ograniczeń dla tej domeny do wewnętrznej informacji dla moderatorów. public_comment: Publiczny komentarz @@ -939,6 +941,8 @@ pl: status: Stan weryfikacji view_proof: Wyświetl dowód imports: + errors: + over_rows_processing_limit: zawiera więcej niż %{count} wierszy modes: merge: Połącz merge_long: Zachowaj obecne wpisy i dodaj nowe diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 28c7a3204..529548225 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -60,6 +60,7 @@ pt-BR: one: Seguidor other: Seguidores following: Seguindo + instance_actor_flash: Esta conta é um ator virtual usado para representar o próprio servidor e não um usuário individual. É utilizada para fins de federação e não deve ser suspensa. joined: Entrou em %{date} last_active: última atividade link_verified_on: O link foi verificado em %{date} @@ -131,6 +132,7 @@ pt-BR: follows: Seguindo header: Capa inbox_url: URL da caixa de entrada + invite_request_text: Motivos para entrar invited_by: Convidado por ip: IP joined: Entrou @@ -255,6 +257,7 @@ pt-BR: unsuspend_account: Remover suspensão de conta update_announcement: Editar anúncio update_custom_emoji: Editar Emoji Personalizado + update_domain_block: Atualizar bloqueio de domínio update_status: Editar Status actions: assigned_to_self_report: "%{name} pegou a denúncia %{target}" @@ -295,6 +298,7 @@ pt-BR: unsuspend_account: "%{name} removeu a suspensão da conta de %{target}" update_announcement: "%{name} atualizou o anúncio %{target}" update_custom_emoji: "%{name} atualizou o emoji %{target}" + update_domain_block: "%{name} atualizou o bloqueio de domínio para %{target}" update_status: "%{name} atualizou o status de %{target}" deleted_status: "(status excluído)" empty: Nenhum registro encontrado. @@ -437,6 +441,7 @@ pt-BR: instances: by_domain: Domínio delivery_available: Envio disponível + empty: Nenhum domínio encontrado. known_accounts: one: "%{count} conta conhecida" other: "%{count} contas conhecidas" @@ -514,6 +519,8 @@ pt-BR: comment: none: Nenhum created_at: Denunciado + forwarded: Encaminhados + forwarded_to: Encaminhado para %{domain} mark_as_resolved: Marcar como resolvido mark_as_unresolved: Marcar como não resolvido notes: @@ -583,6 +590,9 @@ pt-BR: min_invite_role: disabled: Ninguém title: Permitir convites de + require_invite_text: + desc_html: Quando o cadastro de novas contas exigir aprovação manual, tornar obrigatório, ao invés de opcional, o texto de solicitação de convite em "Por que você deseja criar uma conta aqui?" + title: Exigir que novos usuários preencham um texto de solicitação de convite registrations_mode: modes: approved: Aprovação necessária para criar conta @@ -751,6 +761,7 @@ pt-BR: functional: Sua conta está totalmente operacional. pending: Sua solicitação está com revisão pendente por parte de nossa equipe. Você receberá um e-mail se ela for aprovada. redirecting_to: Sua conta está inativa porque atualmente está redirecionando para %{acct}. + too_fast: O formulário foi enviado muito rapidamente, tente novamente. trouble_logging_in: Problemas para entrar? use_security_key: Usar chave de segurança authorize_follow: @@ -842,6 +853,7 @@ pt-BR: request: Solicitar o seu arquivo size: Tamanho blocks: Você bloqueou + bookmarks: Marcadores csv: CSV domain_blocks: Bloqueios de domínio lists: Listas @@ -918,6 +930,7 @@ pt-BR: success: Os seus dados foram enviados com sucesso e serão processados em instantes types: blocking: Lista de bloqueio + bookmarks: Marcadores domain_blocking: Lista de domínios bloqueados following: Pessoas que você segue muting: Lista de silenciados diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index ca8d75a16..19584201f 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -60,6 +60,7 @@ pt-PT: one: Seguidor other: Seguidores following: A seguir + instance_actor_flash: Esta conta é um actor virtual usado para representar a própria instância e não um utilizador individual. É usada para motivos de federação e não deve ser suspenso. joined: Aderiu %{date} last_active: última vez activo link_verified_on: A posse deste link foi verificada em %{date} @@ -131,6 +132,7 @@ pt-PT: follows: A seguir header: Cabeçalho inbox_url: URL da caixa de entrada + invite_request_text: Razões para se juntar a nós invited_by: Convidado(a) por ip: IP joined: Aderiu @@ -255,6 +257,7 @@ pt-PT: unsuspend_account: Retirar Suspensão à Conta update_announcement: Atualizar Anúncio update_custom_emoji: Atualizar Emoji Personalizado + update_domain_block: Atualizar Bloqueio de Domínio update_status: Atualizar Estado actions: assigned_to_self_report: "%{name} atribuiu o relatório %{target} a si próprios" @@ -295,6 +298,7 @@ pt-PT: unsuspend_account: "%{name} desativou a suspensão de %{target}" update_announcement: "%{name} atualizou o anúncio %{target}" update_custom_emoji: "%{name} atualizou o emoji %{target}" + update_domain_block: "%{name} atualizou o bloqueio de domínio para %{target}" update_status: "%{name} atualizou o estado de %{target}" deleted_status: "(apagou a publicação)" empty: Não foram encontrados registos. @@ -398,6 +402,8 @@ pt-PT: silence: Silenciar suspend: Suspender title: Novo bloqueio de domínio + obfuscate: Ofuscar nome de domínio + obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, se estiverem habilitadas as limitações na publicação da lista de domínios private_comment: Comentário privado private_comment_hint: Comentário sobre essa limitação de domínio para uso interno pelos moderadores. public_comment: Comentário público @@ -437,6 +443,7 @@ pt-PT: instances: by_domain: Domínio delivery_available: Entrega disponível + empty: Não foram encontrados domínios. known_accounts: one: "%{count} conta conhecida" other: "%{count} contas conhecidas" @@ -514,6 +521,8 @@ pt-PT: comment: none: Nenhum created_at: Relatado + forwarded: Encaminhado + forwarded_to: Encaminhado para %{domain} mark_as_resolved: Marcar como resolvido mark_as_unresolved: Marcar como não resolvido notes: @@ -583,6 +592,9 @@ pt-PT: min_invite_role: disabled: Ninguém title: Permitir convites de + require_invite_text: + desc_html: Quando os registos exigirem aprovação manual, faça o texto "Porque se quer juntar a nós?" da solicitação de convite obrigatório, em vez de opcional + title: Exigir que novos utilizadores preencham um texto de solicitação de convite registrations_mode: modes: approved: Registo sujeito a aprovação @@ -911,6 +923,8 @@ pt-PT: status: Estado da verificação view_proof: Ver prova imports: + errors: + over_rows_processing_limit: contém mais de %{count} linhas modes: merge: Juntar merge_long: Manter os registos existentes e adicionar novos registos diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 626c7671c..492474d7a 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -23,7 +23,7 @@ sc: hosted_on: Mastodon acasagiadu in %{domain} instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su serbidore matessi, no est un''utente individuale. Benit impreadu pro punnas de federatzione e non lu dias dèpere blocare si non cheres blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu. -' + ' learn_more: Àteras informatziones privacy_policy: Polìtica de riservadesa see_whats_happening: Càstia su chi est acontessende diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 508ecbc5f..1d41066d1 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -126,6 +126,7 @@ co: expires_in: Spira dopu à fields: Metadata di u prufile header: Ritrattu di cuprendula + honeypot: "%{label} (ùn empie micca)" inbox_url: URL di l'inbox di u ripetitore irreversible: Sguassà invece di piattà locale: Lingua di l'interfaccia diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index c94a5377a..4b469cd93 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -126,6 +126,7 @@ id: expires_in: Kedaluwarsa setelah fields: Metadata profil header: Tajuk + honeypot: "%{label} (jangan diisi)" inbox_url: URL kotak relai irreversible: Hapus alih-alih sembunyikan locale: Bahasa diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index ea53a3c83..574a3e3dc 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -67,7 +67,7 @@ pt-BR: text: Isso vai nos ajudar a revisar sua aplicação ip_block: comment: Opcional. Lembrar de por que você adicionou esta regra. - expires_in: Endereços IP são um recurso limitado, algumas vezes são compartilhados e muitas vezes mudam de mãos. Por essa razão, blocos de IP indefinidos não são recomendados. + expires_in: Endereços IP são um recurso limitado, algumas vezes são compartilhados e muitas vezes mudam de mãos. Por esse motivo, blocos de IP indefinidos não são recomendados. ip: Digite um endereço IPv4 ou IPv6. Você pode bloquear intervalos inteiros usando a sintaxe CIDR. Tenha cuidado para não bloquear a si mesmo! severities: no_access: Bloquear o acesso a todos os recursos @@ -126,6 +126,7 @@ pt-BR: expires_in: Expira em fields: Metadados do perfil header: Cabeçalho + honeypot: "%{label} (não preencher)" inbox_url: Link da caixa de entrada do repetidor irreversible: Ignorar ao invés de ocultar locale: Idioma da interface diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 127495a82..a46c3a586 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -60,6 +60,7 @@ sq: one: Ndjekës other: Ndjekës following: Ndjekje + instance_actor_flash: Kjo llogari është një aktor virtual, i përdorur për të përfaqësuar vetë shërbyesin dhe jo ndonjë përdorues individual. Përdoret për qëllime federimi dhe s’duhet pezulluar. joined: U bë pjesë më %{date} last_active: aktiv së fundi link_verified_on: Pronësia e kësaj lidhjeje qe kontrolluar më %{date} @@ -401,6 +402,8 @@ sq: silence: Heshtoji suspend: Pezulloje title: Bllokim i ri përkatësie + obfuscate: Errësoje emrin e përkatësisë + obfuscate_hint: Errësoje pjesërisht emrin e përkatësisë te lista, nëse është aktivizuar publikimi i listës së kufizimeve të përkatësive private_comment: Koment privat private_comment_hint: Koment mbi këtë kufizim përkatësie për përdorim të brendshëm nga moderatorët. public_comment: Koment publik @@ -920,6 +923,8 @@ sq: status: Gjendje verifikimi view_proof: Shihni provën imports: + errors: + over_rows_processing_limit: përmban më shumë se %{count} rreshta modes: merge: Përzieji merge_long: Mbaji zërat ekzistues dhe shto të rinjtë diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 264170b4e..3fff6517c 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -23,7 +23,7 @@ sv: hosted_on: Mastodon-värd på %{domain} instance_actor_flash: 'Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. -' + ' learn_more: Lär dig mer privacy_policy: Integritetspolicy see_whats_happening: Se vad som händer @@ -346,6 +346,8 @@ sv: silence: Tysta ner suspend: Suspendera title: Nytt domänblock + obfuscate: Dölj domännamn + obfuscate_hint: Dölj domännamnet i listan till viss del, om underrättelser för listan över domänbegränsningar aktiverats private_comment: Privat kommentar private_comment_hint: Kommentar för moderatorer om denna domänbegränsning. public_comment: Offentlig kommentar @@ -684,6 +686,8 @@ sv: active: Aktiv inactive: Inaktiv imports: + errors: + over_rows_processing_limit: innehåller fler än %{count} rader preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. success: Dina uppgifter har laddats upp och kommer nu att behandlas snarast types: diff --git a/config/locales/th.yml b/config/locales/th.yml index 8d50e805a..63ce98d4b 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -116,6 +116,7 @@ th: follows: การติดตาม header: ส่วนหัว inbox_url: URL กล่องขาเข้า + invite_request_text: เหตุผลสำหรับการเข้าร่วม invited_by: เชิญโดย ip: IP joined: เข้าร่วมเมื่อ @@ -228,6 +229,7 @@ th: unsuspend_account: เลิกระงับบัญชี update_announcement: อัปเดตประกาศ update_custom_emoji: อัปเดตอีโมจิที่กำหนดเอง + update_domain_block: อัปเดตการปิดกั้นโดเมน update_status: อัปเดตสถานะ actions: assigned_to_self_report: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง" @@ -268,6 +270,7 @@ th: unsuspend_account: "%{name} ได้เลิกระงับบัญชีของ %{target}" update_announcement: "%{name} ได้อัปเดตประกาศ %{target}" update_custom_emoji: "%{name} ได้อัปเดตอีโมจิ %{target}" + update_domain_block: "%{name} ได้อัปเดตการปิดกั้นโดเมนสำหรับ %{target}" update_status: "%{name} ได้อัปเดตสถานะโดย %{target}" deleted_status: "(สถานะที่ลบแล้ว)" empty: ไม่พบรายการบันทึก @@ -403,6 +406,7 @@ th: title: โดเมนอีเมลที่ปิดกั้นอยู่ instances: by_domain: โดเมน + empty: ไม่พบโดเมน known_accounts: other: "%{count} บัญชีที่รู้จัก" moderation: @@ -471,6 +475,8 @@ th: comment: none: ไม่มี created_at: รายงานเมื่อ + forwarded: ส่งต่อแล้ว + forwarded_to: ส่งต่อไปยัง %{domain} แล้ว mark_as_resolved: ทำเครื่องหมายว่าแก้ปัญหาแล้ว mark_as_unresolved: ทำเครื่องหมายว่ายังไม่ได้แก้ปัญหา notes: @@ -806,6 +812,8 @@ th: status: สถานะการตรวจสอบ view_proof: ดูการพิสูจน์ imports: + errors: + over_rows_processing_limit: มีมากกว่า %{count} แถว modes: merge: ผสาน merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่ diff --git a/config/locales/uk.yml b/config/locales/uk.yml index dee947dc6..8f11ce76c 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -23,7 +23,7 @@ uk: hosted_on: Mastodon розміщено на %{domain} instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. -' + ' learn_more: Дізнатися більше privacy_policy: Політика приватності see_whats_happening: Погляньте, що відбувається diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 3795c171b..e9842acf6 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -23,7 +23,7 @@ vi: hosted_on: "%{domain} vận hành nhờ Mastodon" instance_actor_flash: 'Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. -' + ' learn_more: Tìm hiểu privacy_policy: Chính sách bảo mật see_whats_happening: Dòng thời gian @@ -398,6 +398,8 @@ vi: silence: Ẩn suspend: Vô hiệu hóa title: Máy chủ bị chặn mới + obfuscate: Làm mờ tên máy chủ + obfuscate_hint: Làm mờ tên máy chủ trong danh sách nếu giới hạn máy chủ đã bật private_comment: Bình luận riêng private_comment_hint: Cho biết vì sao chặn máy chủ này để tiện kiểm duyệt viên tham khảo. public_comment: Bình luận công khai @@ -506,7 +508,7 @@ vi: action_taken_by: Hành động được thực hiện bởi are_you_sure: Bạn có chắc không? assign_to_self: Giao cho tôi - assigned: Phân công kiểm duyệt + assigned: Người xử lý by_target_domain: Tên tài khoản bị báo cáo comment: none: Không có mô tả @@ -754,7 +756,7 @@ vi: pending: Đơn đăng ký của bạn đang chờ phê duyệt. Điều này có thể mất một thời gian. Bạn sẽ nhận được email nếu đơn đăng ký của bạn được chấp thuận. redirecting_to: Tài khoản của bạn không hoạt động vì hiện đang chuyển hướng đến %{acct}. too_fast: Nghi vấn đăng ký spam, xin thử lại. - trouble_logging_in: Gặp sự cố khi đăng nhập? + trouble_logging_in: Quên mật khẩu? use_security_key: Dùng khóa bảo mật authorize_follow: already_following: Bạn đang theo dõi người này @@ -912,6 +914,8 @@ vi: status: Tình trạng xác minh view_proof: Xem bằng chứng imports: + errors: + over_rows_processing_limit: chứa nhiều hơn %{count} hàng modes: merge: Hợp nhất merge_long: Giữ hồ sơ hiện có và thêm hồ sơ mới @@ -1082,7 +1086,7 @@ vi: last_active: Hoạt động lần cuối most_recent: Mới nhất moved: Đã xóa - mutual: Cả hai + mutual: Đồng thời primary: Bình thường relationship: Mối quan hệ remove_selected_domains: Xóa hết người theo dõi từ các máy chủ đã chọn @@ -1165,7 +1169,7 @@ vi: featured_tags: Hashtags thường dùng identity_proofs: Bằng chứng nhận dạng import: Nhập dữ liệu - import_and_export: Nhập và xuất dữ liệu + import_and_export: Dữ liệu migrate: Chuyển tài khoản sang máy chủ khác notifications: Thông báo preferences: Chung @@ -1191,7 +1195,7 @@ vi: errors: in_reply_not_found: Bạn đang trả lời một tút không còn tồn tại. language_detection: Tự động phát hiện ngôn ngữ - open_in_web: Mở trên web + open_in_web: Xem trong Mastodon over_character_limit: vượt quá giới hạn %{max} ký tự pin_errors: limit: Bạn đã ghim quá số lượng tút cho phép diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 6c9079834..56d1962b2 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -23,7 +23,7 @@ zh-CN: hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例 instance_actor_flash: '这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 -' + ' learn_more: 了解详情 privacy_policy: 隐私政策 see_whats_happening: 看一看现在在发生什么 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index d34b69d46..2140db4aa 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -57,6 +57,7 @@ zh-HK: followers: other: 關注者 following: 正在關注 + instance_actor_flash: 這個帳戶是結盟用的本伺服器的虛擬象徵,並不代表任何個別用戶。請不要把帳號停權。 joined: 於 %{date} 加入 last_active: 上次活躍時間 link_verified_on: 此連結的所有權已在 %{date} 檢查過 @@ -127,6 +128,7 @@ zh-HK: follows: 正在關注 header: 個人資料頁頂圖片 inbox_url: 收件箱(Inbox)URL + invite_request_text: 加入的原因 invited_by: 邀請者 ip: IP 位址 joined: 已加入 @@ -251,6 +253,7 @@ zh-HK: unsuspend_account: 取消帳號的停權狀態 update_announcement: 更新公告 update_custom_emoji: 更新自定的 Emoji 表情符號 + update_domain_block: 更新域名阻隔 update_status: 更新文章 actions: assigned_to_self_report: "%{name} 指派了 %{target} 的舉報給自己" @@ -291,6 +294,7 @@ zh-HK: unsuspend_account: "%{name} 取消了帳號 %{target} 的停權狀態" update_announcement: "%{name} 更新了公告 %{target}" update_custom_emoji: "%{name} 更新了 Emoji 表情符號 %{target}" + update_domain_block: "%{name} 更新了對 %{target} 的域名阻隔" update_status: "%{name} 更新了 %{target} 的文章" deleted_status: "(已刪除文章)" empty: 找不到任何日誌。 @@ -431,7 +435,8 @@ zh-HK: title: 電郵網域阻隔 instances: by_domain: 域名 - delivery_available: 傳送可用 + delivery_available: 可傳送 + empty: 找不到域名。 known_accounts: other: "%{count} 已知的帳號" moderation: @@ -506,6 +511,8 @@ zh-HK: comment: none: 沒有 created_at: 日期 + forwarded: 已轉寄 + forwarded_to: 已轉寄到 %{domain} mark_as_resolved: 標示為「已處理」 mark_as_unresolved: 標示為「未處理」 notes: @@ -575,6 +582,9 @@ zh-HK: min_invite_role: disabled: 沒有人 title: 允許發送邀請的身份 + require_invite_text: + desc_html: 如果已設定為手動審核注冊,請把「加入的原因」設定為必填項目。 + title: 要求新用戶填寫注冊申請 registrations_mode: modes: approved: 註冊需要核准 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index a2ad6fbde..5420f40e8 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -23,7 +23,7 @@ zh-TW: hosted_on: 在 %{domain} 運作的 Mastodon 站點 instance_actor_flash: '這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 -' + ' learn_more: 了解詳細 privacy_policy: 隱私權政策 see_whats_happening: 看看發生什麼事 From c6598b17d9212c2d48395da73fa9529025d704cc Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 Dec 2020 00:28:38 +0100 Subject: [PATCH 303/422] Bump version to 3.3.0rc2 (#15365) --- AUTHORS.md | 81 +++++++++++++++++++++++------------------ CHANGELOG.md | 42 ++++++++++++++++----- lib/mastodon/version.rb | 2 +- 3 files changed, 80 insertions(+), 45 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 12d0736bd..a2913bfe9 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,38 +5,39 @@ Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon) and provided thanks to the work of the following contributors: * [Gargron](https://github.com/Gargron) -* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview) * [ThibG](https://github.com/ThibG) -* [ykzts](https://github.com/ykzts) +* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview) * [dependabot[bot]](https://github.com/apps/dependabot) +* [ykzts](https://github.com/ykzts) * [akihikodaki](https://github.com/akihikodaki) * [mjankowski](https://github.com/mjankowski) * [unarist](https://github.com/unarist) * [yiskah](https://github.com/yiskah) * [nolanlawson](https://github.com/nolanlawson) * [abcang](https://github.com/abcang) -* [ysksn](https://github.com/ysksn) * [mayaeh](https://github.com/mayaeh) +* [ysksn](https://github.com/ysksn) * [sorin-davidoi](https://github.com/sorin-davidoi) +* [noellabo](https://github.com/noellabo) * [lynlynlynx](https://github.com/lynlynlynx) * [m4sk1n](mailto:me@m4sk.in) * [Marcin Mikołajczak](mailto:me@m4sk.in) * [Kjwon15](https://github.com/Kjwon15) -* [noellabo](https://github.com/noellabo) * [renatolond](https://github.com/renatolond) * [alpaca-tc](https://github.com/alpaca-tc) * [jeroenpraat](https://github.com/jeroenpraat) * [nclm](https://github.com/nclm) * [ineffyble](https://github.com/ineffyble) -* [shleeable](https://github.com/shleeable) * [zunda](https://github.com/zunda) +* [shleeable](https://github.com/shleeable) * [Masoud Abkenar](mailto:ampbox@gmail.com) * [blackle](https://github.com/blackle) * [Quent-in](https://github.com/Quent-in) * [JantsoP](https://github.com/JantsoP) * [nullkal](https://github.com/nullkal) * [yookoala](https://github.com/yookoala) -* [Sasha-Sorokin](https://github.com/Sasha-Sorokin) +* [Brawaru](https://github.com/Brawaru) +* [ariasuni](https://github.com/ariasuni) * [Aditoo17](https://github.com/Aditoo17) * [Quenty31](https://github.com/Quenty31) * [marek-lach](https://github.com/marek-lach) @@ -45,7 +46,6 @@ and provided thanks to the work of the following contributors: * [danhunsaker](https://github.com/danhunsaker) * [eramdam](https://github.com/eramdam) * [takayamaki](https://github.com/takayamaki) -* [ariasuni](https://github.com/ariasuni) * [masarakki](https://github.com/masarakki) * [ticky](https://github.com/ticky) * [ThisIsMissEm](https://github.com/ThisIsMissEm) @@ -53,14 +53,15 @@ and provided thanks to the work of the following contributors: * [hcmiya](https://github.com/hcmiya) * [stephenburgess8](https://github.com/stephenburgess8) * [Wonderfall](mailto:wonderfall@targaryen.house) +* [trwnh](https://github.com/trwnh) * [matteoaquila](https://github.com/matteoaquila) * [yukimochi](https://github.com/yukimochi) * [palindromordnilap](https://github.com/palindromordnilap) * [rkarabut](https://github.com/rkarabut) -* [trwnh](https://github.com/trwnh) * [nightpool](https://github.com/nightpool) * [Artoria2e5](https://github.com/Artoria2e5) * [marrus-sh](https://github.com/marrus-sh) +* [dunn](https://github.com/dunn) * [krainboltgreene](https://github.com/krainboltgreene) * [pfigel](https://github.com/pfigel) * [BoFFire](https://github.com/BoFFire) @@ -84,25 +85,25 @@ and provided thanks to the work of the following contributors: * [ashleyhull-versent](https://github.com/ashleyhull-versent) * [yhirano55](https://github.com/yhirano55) * [rinsuki](https://github.com/rinsuki) -* [dunn](https://github.com/dunn) * [devkral](https://github.com/devkral) * [camponez](https://github.com/camponez) * [hugogameiro](https://github.com/hugogameiro) * [SerCom_KC](mailto:szescxz@gmail.com) * [aschmitz](https://github.com/aschmitz) +* [mfmfuyu](https://github.com/mfmfuyu) +* [kedamaDQ](https://github.com/kedamaDQ) * [fpiesche](https://github.com/fpiesche) * [gandaro](https://github.com/gandaro) * [johnsudaar](https://github.com/johnsudaar) * [trebmuh](https://github.com/trebmuh) * [rmhasan](https://github.com/rmhasan) -* [kedamaDQ](https://github.com/kedamaDQ) * [lindwurm](https://github.com/lindwurm) * [victorhck](mailto:victorhck@geeko.site) * [voidsatisfaction](https://github.com/voidsatisfaction) +* [mkljczk](https://github.com/mkljczk) * [hikari-no-yume](https://github.com/hikari-no-yume) * [seefood](https://github.com/seefood) * [jackjennings](https://github.com/jackjennings) -* [mfmfuyu](https://github.com/mfmfuyu) * [puckipedia](https://github.com/puckipedia) * [spla](mailto:spla@mastodont.cat) * [walf443](https://github.com/walf443) @@ -111,14 +112,15 @@ and provided thanks to the work of the following contributors: * [Ashley](mailto:expenses@airmail.cc) * [xqus](https://github.com/xqus) * [pfm-eyesightjp](https://github.com/pfm-eyesightjp) -* [Samy KACIMI](mailto:samy.kacimi@gmail.com) +* [fakenine](https://github.com/fakenine) * [tsuwatch](https://github.com/tsuwatch) * [victorhck](https://github.com/victorhck) -* [mkljczk](https://github.com/mkljczk) * [manuelviens](https://github.com/manuelviens) +* [tateisu](https://github.com/tateisu) * [fvh-P](https://github.com/fvh-P) * [rtucker](https://github.com/rtucker) * [Anna e só](mailto:contraexemplos@gmail.com) +* [dariusk](https://github.com/dariusk) * [kazu9su](https://github.com/kazu9su) * [Komic](https://github.com/Komic) * [lmorchard](https://github.com/lmorchard) @@ -145,9 +147,9 @@ and provided thanks to the work of the following contributors: * [fhemberger](https://github.com/fhemberger) * [Gomasy](https://github.com/Gomasy) * [greysteil](https://github.com/greysteil) -* [hencatsmith](https://github.com/hencatsmith) +* [hendotcat](https://github.com/hendotcat) * [d6rkaiz](https://github.com/d6rkaiz) -* [Reverite](https://github.com/Reverite) +* [ladyisatis](https://github.com/ladyisatis) * [JohnD28](https://github.com/JohnD28) * [znz](https://github.com/znz) * [saper](https://github.com/saper) @@ -160,14 +162,14 @@ and provided thanks to the work of the following contributors: * [leopku](https://github.com/leopku) * [SansPseudoFix](https://github.com/SansPseudoFix) * [spla](mailto:sp@mastodont.cat) -* [tateisu](https://github.com/tateisu) * [tomfhowe](https://github.com/tomfhowe) * [noraworld](https://github.com/noraworld) * [lfuelling](https://github.com/lfuelling) -* [theboss](https://github.com/theboss) +* [aji-su](https://github.com/aji-su) * [nzws](https://github.com/nzws) * [duxovni](https://github.com/duxovni) * [smorimoto](https://github.com/smorimoto) +* [mashirozx](https://github.com/mashirozx) * [178inaba](https://github.com/178inaba) * [acid-chicken](https://github.com/acid-chicken) * [xgess](https://github.com/xgess) @@ -175,7 +177,6 @@ and provided thanks to the work of the following contributors: * [aablinov](https://github.com/aablinov) * [stalker314314](https://github.com/stalker314314) * [cutls](https://github.com/cutls) -* [dariusk](https://github.com/dariusk) * [huertanix](https://github.com/huertanix) * [eleboucher](https://github.com/eleboucher) * [halkeye](https://github.com/halkeye) @@ -183,7 +184,7 @@ and provided thanks to the work of the following contributors: * [treby](https://github.com/treby) * [jpdevries](https://github.com/jpdevries) * [gdpelican](https://github.com/gdpelican) -* [kmichl](https://github.com/kmichl) +* [Korbinian](mailto:kontakt@korbinian-michl.de) * [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name) * [panarom](https://github.com/panarom) * [Dar13](https://github.com/Dar13) @@ -225,6 +226,7 @@ and provided thanks to the work of the following contributors: * [aaribaud](https://github.com/aaribaud) * [pointlessone](https://github.com/pointlessone) * [Andrew](mailto:andrewlchronister@gmail.com) +* [arielrodrigues](https://github.com/arielrodrigues) * [aurelien-reeves](https://github.com/aurelien-reeves) * [elegaanz](https://github.com/elegaanz) * [estuans](https://github.com/estuans) @@ -238,6 +240,7 @@ and provided thanks to the work of the following contributors: * [muffinista](https://github.com/muffinista) * [cdutson](https://github.com/cdutson) * [farlistener](https://github.com/farlistener) +* [divergentdave](https://github.com/divergentdave) * [DavidLibeau](https://github.com/DavidLibeau) * [dmerejkowsky](https://github.com/dmerejkowsky) * [ddevault](https://github.com/ddevault) @@ -276,7 +279,7 @@ and provided thanks to the work of the following contributors: * [xPaw](https://github.com/xPaw) * [petzah](https://github.com/petzah) * [ignisf](https://github.com/ignisf) -* [raymestalez](https://github.com/raymestalez) +* [lumenwrites](https://github.com/lumenwrites) * [remram44](https://github.com/remram44) * [sts10](https://github.com/sts10) * [SuperSandro2000](https://github.com/SuperSandro2000) @@ -286,8 +289,9 @@ and provided thanks to the work of the following contributors: * [Sir-Boops](https://github.com/Sir-Boops) * [stemid](https://github.com/stemid) * [sumdog](https://github.com/sumdog) +* [OmmyZhang](https://github.com/OmmyZhang) * [ThomasLeister](https://github.com/ThomasLeister) -* [mcat-ee](https://github.com/mcat-ee) +* [Tom McAtee](mailto:a1608768@student.adelaide.edu.au) * [tototoshi](https://github.com/tototoshi) * [TrashMacNugget](https://github.com/TrashMacNugget) * [VirtuBox](https://github.com/VirtuBox) @@ -314,11 +318,13 @@ and provided thanks to the work of the following contributors: * [matsurai25](https://github.com/matsurai25) * [mecab](https://github.com/mecab) * [nicobz25](https://github.com/nicobz25) +* [niwatori24](https://github.com/niwatori24) * [oliverkeeble](https://github.com/oliverkeeble) * [partev](https://github.com/partev) * [pinfort](https://github.com/pinfort) * [rbaumert](https://github.com/rbaumert) * [rhoio](https://github.com/rhoio) +* [santiagorodriguez96](https://github.com/santiagorodriguez96) * [sclaire-1](https://github.com/sclaire-1) * [umonaca](https://github.com/umonaca) * [usagi-f](https://github.com/usagi-f) @@ -327,7 +333,7 @@ and provided thanks to the work of the following contributors: * [wxcafe](https://github.com/wxcafe) * [Grawl](https://github.com/Grawl) * [新都心(Neet Shin)](mailto:nucx@dio-vox.com) -* [clarfon](https://github.com/clarfon) +* [clarfonthey](https://github.com/clarfonthey) * [cygnan](https://github.com/cygnan) * [Awea](https://github.com/Awea) * [eai04191](https://github.com/eai04191) @@ -358,11 +364,11 @@ and provided thanks to the work of the following contributors: * [schas002](https://github.com/schas002) * [contraexemplo](https://github.com/contraexemplo) * [abackstrom](https://github.com/abackstrom) -* [arielrodrigues](https://github.com/arielrodrigues) * [orlea](https://github.com/orlea) * [armandfardeau](https://github.com/armandfardeau) * [raboof](https://github.com/raboof) * [jumbosushi](https://github.com/jumbosushi) +* [acuteaura](https://github.com/acuteaura) * [ayumin](https://github.com/ayumin) * [bzg](https://github.com/bzg) * [BastienDurel](https://github.com/BastienDurel) @@ -389,7 +395,7 @@ and provided thanks to the work of the following contributors: * [colindean](https://github.com/colindean) * [DeeUnderscore](https://github.com/DeeUnderscore) * [dachinat](https://github.com/dachinat) -* [shapeshifter-system](https://github.com/shapeshifter-system) +* [monsterpit-firedemon](https://github.com/monsterpit-firedemon) * [watilde](https://github.com/watilde) * [daprice](https://github.com/daprice) * [da2x](https://github.com/da2x) @@ -400,14 +406,13 @@ and provided thanks to the work of the following contributors: * [singingwolfboy](https://github.com/singingwolfboy) * [caldwell](https://github.com/caldwell) * [davidcelis](https://github.com/davidcelis) -* [divergentdave](https://github.com/divergentdave) * [davefp](https://github.com/davefp) * [yipdw](https://github.com/yipdw) * [debanshuk](https://github.com/debanshuk) * [mascali33](https://github.com/mascali33) * [DerekNonGeneric](https://github.com/DerekNonGeneric) * [dblandin](https://github.com/dblandin) -* [Drew Gates](mailto:aranaur@users.noreply.github.com) +* [Aranaur](https://github.com/Aranaur) * [dtschust](https://github.com/dtschust) * [Dryusdan](https://github.com/Dryusdan) * [d3vgru](https://github.com/d3vgru) @@ -451,22 +456,25 @@ and provided thanks to the work of the following contributors: * [J Yeary](mailto:usbsnowcrash@users.noreply.github.com) * [jack-michaud](https://github.com/jack-michaud) * [Floppy](https://github.com/Floppy) -* [loomchild](https://github.com/loomchild) -* [jglauche](https://github.com/jglauche) -* [jenkr55](https://github.com/jenkr55) -* [hyenagirl64](https://github.com/hyenagirl64) -* [press5](https://github.com/press5) -* [TrollDecker](https://github.com/TrollDecker) -* [jmontane](https://github.com/jmontane) +* [Jarek Lipski](mailto:pub@loomchild.net) +* [Jennifer Glauche](mailto:=^.^=@github19.jglauche.de) +* [Jennifer Kruse](mailto:jenkr55@gmail.com) +* [Jeremy Rose](mailto:nornagon@nornagon.net) +* [Jessica](mailto:46502909+hyenagirl64@users.noreply.github.com) +* [Jessica K. Litwin](mailto:jessica@litw.in) +* [Jo Decker](mailto:trolldecker@users.noreply.github.com) +* [Joan Montané](mailto:jmontane@users.noreply.github.com) * [Jonathan Klee](mailto:klee.jonathan@gmail.com) * [Jordan Guerder](mailto:jguerder@fr.pulseheberg.net) * [Joseph Mingrone](mailto:jehops@users.noreply.github.com) +* [Josh Leeb-du Toit](mailto:mail@joshleeb.com) * [Joshua Wood](mailto:josh@joshuawood.net) * [Julien](mailto:tiwy57@users.noreply.github.com) * [Julien Deswaef](mailto:juego@requiem4tv.com) * [June Sallou](mailto:jnsll@users.noreply.github.com) * [Jérémy Benoist](mailto:j0k3r@users.noreply.github.com) * [KEINOS](mailto:github@keinos.com) +* [Kairui Song | 宋恺睿](mailto:ryncsn@gmail.com) * [Keiji Matsuzaki](mailto:futoase@gmail.com) * [Kevin Liu](mailto:kevin@potatofrom.space) * [Kit Redgrave](mailto:qwertyitis@gmail.com) @@ -482,7 +490,6 @@ and provided thanks to the work of the following contributors: * [Lukas Burk](mailto:jemus42@users.noreply.github.com) * [Manato Kameya](mailto:grabacr07+github@gmail.com) * [Mantas](mailto:mistermantas@users.noreply.github.com) -* [Marcin Mikołajczak](mailto:me@mkljczk.pl) * [Mareena Kunjachan](mailto:mareenakunjachan@gmail.com) * [Marek Lach](mailto:marek.brohatwack.lach@gmail.com) * [Markus R](mailto:wirehack7@users.noreply.github.com) @@ -529,10 +536,12 @@ and provided thanks to the work of the following contributors: * [Norayr Chilingarian](mailto:norayr@arnet.am) * [Noëlle Anthony](mailto:noelle.d.anthony@gmail.com) * [N氏](mailto:uenok.htc@gmail.com) +* [OSAMU SATO](mailto:satosamu@gmail.com) * [Olivier Nicole](mailto:olivierthnicole@gmail.com) * [Oskari Noppa](mailto:noppa@users.noreply.github.com) * [Otakan](mailto:otakan951@gmail.com) * [Padraig Fahy](mailto:tech@padraigfahy.com) +* [Patrice Ferlet](mailto:metal3d@gmail.com) * [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com) * [Paul](mailto:naydex.mc+github@gmail.com) * [Pete Keen](mailto:pete@petekeen.net) @@ -574,7 +583,6 @@ and provided thanks to the work of the following contributors: * [TakesxiSximada](mailto:takesxi.sximada@gmail.com) * [Tao Bror Bojlén](mailto:brortao@users.noreply.github.com) * [Taras Gogol](mailto:taras2358@gmail.com) -* [Tdxdxoz](mailto:tdxdxoz@gmail.com) * [TheInventrix](mailto:theinventrix@users.noreply.github.com) * [TheMainOne](mailto:50847364+theevilskeleton@users.noreply.github.com) * [Thomas Alberola](mailto:thomas@needacoffee.fr) @@ -594,6 +602,7 @@ and provided thanks to the work of the following contributors: * [Wesley Ellis](mailto:tahnok@gmail.com) * [Wiktor](mailto:wiktor@metacode.biz) * [Wonderfall](mailto:wonderfall@schrodinger.io) +* [Y.Yamashiro](mailto:shukukei@mojizuri.jp) * [YDrogen](mailto:ydrogen45@gmail.com) * [YMHuang](mailto:ymhuang@fmbase.tw) * [YOSHIOKA Eiichiro](mailto:yoshioka.eiichiro@gmail.com) @@ -638,6 +647,7 @@ and provided thanks to the work of the following contributors: * [jumoru](mailto:jumoru@mailbox.org) * [kaiyou](mailto:pierre@jaury.eu) * [karlyeurl](mailto:karl.yeurl@gmail.com) +* [kawaguchi](mailto:jiikko@users.noreply.github.com) * [kedama](mailto:32974885+kedamadq@users.noreply.github.com) * [kuro5hin](mailto:rusty@kuro5hin.org) * [leo60228](mailto:leo@60228.dev) @@ -655,6 +665,7 @@ and provided thanks to the work of the following contributors: * [notozeki](mailto:notozeki@users.noreply.github.com) * [ntl-purism](mailto:57806346+ntl-purism@users.noreply.github.com) * [nzws](mailto:git-yuzu@svk.jp) +* [proxy](mailto:51172302+3n-k1@users.noreply.github.com) * [rch850](mailto:rich850@gmail.com) * [roikale](mailto:roikale@users.noreply.github.com) * [rysiekpl](mailto:rysiek@hackerspace.pl) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe2c1b8b3..64bf6655c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ All notable changes to this project will be documented in this file. - Add border around 🐞 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14712)) - Add home link to the getting started column when home isn't mounted ([ThibG](https://github.com/tootsuite/mastodon/pull/14707)) - Add option to disable swiping motions across the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13885)) -- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915)) +- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915), [noellabo](https://github.com/tootsuite/mastodon/pull/15309)) - Continue watching/listening when you scroll away - Action bar to interact with/open toot from the pop-out player - Add unread notification markers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14818), [ThibG](https://github.com/tootsuite/mastodon/pull/14960), [ThibG](https://github.com/tootsuite/mastodon/pull/14954), [noellabo](https://github.com/tootsuite/mastodon/pull/14897), [noellabo](https://github.com/tootsuite/mastodon/pull/14907)) @@ -27,14 +27,16 @@ All notable changes to this project will be documented in this file. - If you have a proxy cache in front of object storage, deleted files will persist until the cache expires - If enabled, cache buster will make a special request to the proxy to signal a cache reset - Add duration option to the mute function ([aquarla](https://github.com/tootsuite/mastodon/pull/13831)) -- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205)) +- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205), [trwnh](https://github.com/tootsuite/mastodon/pull/15304)) - Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/tootsuite/mastodon/pull/14865)) - **Add option to be notified when a followed user posts** ([Gargron](https://github.com/tootsuite/mastodon/pull/13546), [ThibG](https://github.com/tootsuite/mastodon/pull/14896), [Gargron](https://github.com/tootsuite/mastodon/pull/14822)) - If you don't want to miss a toot, click the bell button! - Add client-side validation in password change forms ([ThibG](https://github.com/tootsuite/mastodon/pull/14564)) - Add client-side validation in the registration form ([ThibG](https://github.com/tootsuite/mastodon/pull/14560), [ThibG](https://github.com/tootsuite/mastodon/pull/14599)) - Add support for Gemini URLs ([joshleeb](https://github.com/tootsuite/mastodon/pull/15013)) +- Add app shortcuts to web app manifest ([mkljczk](https://github.com/tootsuite/mastodon/pull/15234)) - Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/tootsuite/mastodon/pull/14466), [jiikko](https://github.com/tootsuite/mastodon/pull/14806)) +- Add honeypot fields and minimum fill-out time for sign-up form ([ThibG](https://github.com/tootsuite/mastodon/pull/15276)) - Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15149)) - Add follow selected followers button in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15148)) - **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/tootsuite/mastodon/pull/15096)) @@ -42,7 +44,7 @@ All notable changes to this project will be documented in this file. - Subresource integrity compares server-generated asset digests with what's actually served from the CDN and prevents such attacks - Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/tootsuite/mastodon/pull/15138)) - Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/tootsuite/mastodon/pull/14361)) -- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963)) +- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963), [ThibG](https://github.com/tootsuite/mastodon/pull/15263)) - Add rules for IPs or CIDR ranges that automatically expire after a configurable amount of time - Choose the severity of the rule, either blocking all access or merely limiting sign-ups - **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/tootsuite/mastodon/pull/14989)) @@ -50,14 +52,18 @@ All notable changes to this project will be documented in this file. - During suspension, the account can only delete its own content - A reversal of the suspension can be signalled the same way - A local suspension always overrides a remote one +- Add indication to admin UI of whether a report has been forwarded ([ThibG](https://github.com/tootsuite/mastodon/pull/13237)) +- Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15265)) +- Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/15355)) +- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358)) - Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026)) - Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721)) -- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595)) +- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595), [noellabo](https://github.com/tootsuite/mastodon/pull/15277)) - Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/tootsuite/mastodon/pull/14683), [noellabo](https://github.com/tootsuite/mastodon/pull/14981)) - Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/14952)) - Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ThibG](https://github.com/tootsuite/mastodon/pull/14722)) - Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/14383), [uist1idrju3i](https://github.com/tootsuite/mastodon/pull/14715)) -- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201)) +- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201), [ThibG](https://github.com/tootsuite/mastodon/pull/15264), [ThibG](https://github.com/tootsuite/mastodon/pull/15256)) - Has someone changed their domain or subdomain thereby creating two accounts where there should be one? - This command will fix it on your end - Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223)) @@ -68,12 +74,13 @@ All notable changes to this project will be documented in this file. - More connections means more resource consumption on both ends, not to mention the (ever so slight) delay when establishing a new connection - Now, with just a single WebSocket connection you can subscribe and unsubscribe to and from multiple streams - Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/tootsuite/mastodon/pull/14776)) -- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817)) +- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817), [noellabo](https://github.com/tootsuite/mastodon/pull/15270)) +- Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13043)) - Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396)) ### Changed -- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221)) +- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221), [Gargron](https://github.com/tootsuite/mastodon/pull/15284), [Gargron](https://github.com/tootsuite/mastodon/pull/15283), [Kjwon15](https://github.com/tootsuite/mastodon/pull/15308), [noellabo](https://github.com/tootsuite/mastodon/pull/15305)) - Background of the overlay matches the color of the image - Action bar to interact with or open the toot from the modal - Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091)) @@ -83,7 +90,7 @@ All notable changes to this project will be documented in this file. - Immediate deletion of data is still available as an explicit option - Suspended accounts can request an archive of their data through the UI - Change REST API to return empty data for suspended accounts (14765) -- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766)) +- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766), [Gargron](https://github.com/tootsuite/mastodon/pull/15345)) - Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/tootsuite/mastodon/pull/14760)) - Change direct toots to appear in the home feed again ([Gargron](https://github.com/tootsuite/mastodon/pull/14711), [ThibG](https://github.com/tootsuite/mastodon/pull/15182), [noellabo](https://github.com/tootsuite/mastodon/pull/14727)) - Return to treating all toots the same instead of trying to retrofit direct visibility into an instant messaging model @@ -96,7 +103,14 @@ All notable changes to this project will be documented in this file. - Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/tootsuite/mastodon/pull/14598)) - Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/tootsuite/mastodon/pull/15052)) - Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/tootsuite/mastodon/pull/15065), [dariusk](https://github.com/tootsuite/mastodon/pull/15070)) +- Change RTL detection to rely on unicode-bidi paragraph by paragraph in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14573)) - Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15053), [mayaeh](https://github.com/tootsuite/mastodon/pull/15055)) +- Change public thread view to hide "Show thread" link ([ThibG](https://github.com/tootsuite/mastodon/pull/15266)) +- Change number format on about page from full to shortened ([Gargron](https://github.com/tootsuite/mastodon/pull/15327)) +- Change how scheduled tasks run in multi-process environments ([noellabo](https://github.com/tootsuite/mastodon/pull/15314)) + - New dedicated queue `scheduler` + - Runs by default when Sidekiq is executed with no options + - Has to be added manually in a multi-process environment ### Removed @@ -107,6 +121,8 @@ All notable changes to this project will be documented in this file. ### Fixed +- Fix layout on about page when contact account has a long username ([ThibG](https://github.com/tootsuite/mastodon/pull/15357)) +- Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/tootsuite/mastodon/pull/14207)) - **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200)) - Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot - Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned @@ -123,7 +139,7 @@ All notable changes to this project will be documented in this file. - Fix poll ending notifications being created for each vote ([ThibG](https://github.com/tootsuite/mastodon/pull/15071)) - Fix multiple boosts of a same toot erroneously appearing in TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14759)) - Fix asset builds not picking up `CDN_HOST` change ([ThibG](https://github.com/tootsuite/mastodon/pull/14381)) -- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543)) +- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543), [ThibG](https://github.com/tootsuite/mastodon/pull/15176)) - Some time ago, browsers added a requirement that desktop notification prompts could only be displayed in response to a user-generated event (such as a click) - This means that for some time, users who haven't already given the permission before were not getting a prompt and as such were not receiving desktop notifications - Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15051)) @@ -139,11 +155,18 @@ All notable changes to this project will be documented in this file. - Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14456)) - Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/14484), [ThibG](https://github.com/tootsuite/mastodon/pull/14513)) - Fix home last read marker mishandling gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14809)) +- Fix unnecessary re-rendering of various components when typing in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15286)) +- Fix notifications being unnecessarily re-rendered in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15312)) +- Fix column swiping animation logic in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15301)) - Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/14861), [akihikodaki](https://github.com/tootsuite/mastodon/pull/14662)) - Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674)) - Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673)) - Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675)) - Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534)) +- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) +- Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282)) +- Fix server actor appearing in list of accounts in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14567)) +- Fix "bootstrap timeline accounts" toggle in site settings in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15325)) - Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/tootsuite/mastodon/pull/15072)) - Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/tootsuite/mastodon/pull/12685)) - Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/tootsuite/mastodon/pull/14686)) @@ -152,6 +175,7 @@ All notable changes to this project will be documented in this file. - Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/tootsuite/mastodon/pull/15111)) - Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802)) +- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364)) ## [3.2.1] - 2020-10-19 ### Added diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 46aed7d8d..7282ea7b5 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ module Mastodon end def flags - 'rc1' + 'rc2' end def suffix From 2dd3643dbcea7a08335405243b48234d916442a5 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Sat, 19 Dec 2020 10:23:42 +0900 Subject: [PATCH 304/422] Ran `i18n-tasks normalize` (#15372) --- config/locales/bn.yml | 2 +- config/locales/doorkeeper.hy.yml | 6 +++--- config/locales/eu.yml | 2 +- config/locales/gl.yml | 2 +- config/locales/hu.yml | 2 +- config/locales/hy.yml | 2 +- config/locales/id.yml | 2 +- config/locales/ja.yml | 2 +- config/locales/nl.yml | 2 +- config/locales/no.yml | 2 +- config/locales/sc.yml | 2 +- config/locales/sv.yml | 2 +- config/locales/uk.yml | 2 +- config/locales/vi.yml | 2 +- config/locales/zh-CN.yml | 2 +- config/locales/zh-TW.yml | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/config/locales/bn.yml b/config/locales/bn.yml index a79f10131..0cf936d68 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -23,7 +23,7 @@ bn: hosted_on: এই মাস্টাডনটি আছে %{domain} এ instance_actor_flash: 'এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। - ' +' learn_more: বিস্তারিত জানুন privacy_policy: গোপনীয়তা নীতি see_whats_happening: কী কী হচ্ছে দেখুন diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml index 7b0e1f03c..ba3f4e124 100644 --- a/config/locales/doorkeeper.hy.yml +++ b/config/locales/doorkeeper.hy.yml @@ -8,7 +8,7 @@ hy: scopes: Դաշտեր website: 'Յաւելուածի վէբկայք - ' +' errors: models: doorkeeper/application: @@ -52,7 +52,7 @@ hy: actions: Գործողութիւններ application_id: 'Կլիենտի բանալի - ' +' callback_urls: URL֊ների ետկանչ scopes: Դաշտեր secret: Կլիենտի գաղտնիք @@ -147,7 +147,7 @@ hy: write:favourites: հաւանել գրառումները write:filters: 'ստեղծել ֆիլտրեր - ' +' write:follows: հետեւել write:lists: ստեղծել ցանկեր write:media: բեռնել մեդիա ֆայլեր diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 4cd4c00f8..cd82a5d9a 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -23,7 +23,7 @@ eu: hosted_on: Mastodon %{domain} domeinuan ostatatua instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. - ' +' learn_more: Ikasi gehiago privacy_policy: Pribatutasun politika see_whats_happening: Ikusi zer gertatzen ari den diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 597a05d23..36980f800 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -23,7 +23,7 @@ gl: hosted_on: Mastodon aloxado en %{domain} instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. - ' +' learn_more: Saber máis privacy_policy: Política de privacidade see_whats_happening: Ver o que está a acontecer diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 01fecb99c..0fc35c9ac 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -23,7 +23,7 @@ hu: hosted_on: "%{domain} Mastodon szerver" instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. - ' +' learn_more: Tudj meg többet privacy_policy: Adatvédelmi szabályzat see_whats_happening: Nézd, mi történik diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 049044627..1afd4d927 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -23,7 +23,7 @@ hy: hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում instance_actor_flash: 'Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ - ' +' learn_more: Իմանալ ավելին privacy_policy: Գաղտնիության քաղաքականություն see_whats_happening: Տես ինչ ա կատարվում diff --git a/config/locales/id.yml b/config/locales/id.yml index 498c285d7..8d3291adf 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -23,7 +23,7 @@ id: hosted_on: Mastodon dihosting di %{domain} instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. - ' +' learn_more: Pelajari selengkapnya privacy_policy: Kebijakan Privasi see_whats_happening: Lihat apa yang sedang terjadi diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 3a929c6ca..db9e41f74 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -23,7 +23,7 @@ ja: hosted_on: Mastodon hosted on %{domain} instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 - ' +' learn_more: もっと詳しく privacy_policy: プライバシーポリシー see_whats_happening: やりとりを見てみる diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e1f10c813..d9c4e20fa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -23,7 +23,7 @@ nl: hosted_on: Mastodon op %{domain} instance_actor_flash: 'Dit account is een virtuel actor dat wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wilt blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken. - ' +' learn_more: Meer leren privacy_policy: Privacybeleid see_whats_happening: Kijk wat er aan de hand is diff --git a/config/locales/no.yml b/config/locales/no.yml index 3d51fc6cd..b70eb167c 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -23,7 +23,7 @@ hosted_on: Mastodon driftet på %{domain} instance_actor_flash: 'Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. - ' +' learn_more: Lær mer privacy_policy: Privatlivsretningslinjer see_whats_happening: Se hva som skjer diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 492474d7a..626c7671c 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -23,7 +23,7 @@ sc: hosted_on: Mastodon acasagiadu in %{domain} instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su serbidore matessi, no est un''utente individuale. Benit impreadu pro punnas de federatzione e non lu dias dèpere blocare si non cheres blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu. - ' +' learn_more: Àteras informatziones privacy_policy: Polìtica de riservadesa see_whats_happening: Càstia su chi est acontessende diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 3fff6517c..36154b49b 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -23,7 +23,7 @@ sv: hosted_on: Mastodon-värd på %{domain} instance_actor_flash: 'Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. - ' +' learn_more: Lär dig mer privacy_policy: Integritetspolicy see_whats_happening: Se vad som händer diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 8f11ce76c..dee947dc6 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -23,7 +23,7 @@ uk: hosted_on: Mastodon розміщено на %{domain} instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. - ' +' learn_more: Дізнатися більше privacy_policy: Політика приватності see_whats_happening: Погляньте, що відбувається diff --git a/config/locales/vi.yml b/config/locales/vi.yml index e9842acf6..be681b3a6 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -23,7 +23,7 @@ vi: hosted_on: "%{domain} vận hành nhờ Mastodon" instance_actor_flash: 'Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. - ' +' learn_more: Tìm hiểu privacy_policy: Chính sách bảo mật see_whats_happening: Dòng thời gian diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 56d1962b2..6c9079834 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -23,7 +23,7 @@ zh-CN: hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例 instance_actor_flash: '这个账号是个虚拟帐号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 - ' +' learn_more: 了解详情 privacy_policy: 隐私政策 see_whats_happening: 看一看现在在发生什么 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 5420f40e8..a2ad6fbde 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -23,7 +23,7 @@ zh-TW: hosted_on: 在 %{domain} 運作的 Mastodon 站點 instance_actor_flash: '這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 - ' +' learn_more: 了解詳細 privacy_policy: 隱私權政策 see_whats_happening: 看看發生什麼事 From 3561f8fabed2a6c40130cb5f1d1d732393dc0200 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 19 Dec 2020 03:13:50 +0100 Subject: [PATCH 305/422] Forward-port v3.2.2 changelog (#15370) --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ chart/Chart.yaml | 4 ++-- chart/values.yaml.template | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64bf6655c..4396dc96c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -177,6 +177,32 @@ All notable changes to this project will be documented in this file. - Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802)) - Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364)) +## [3.2.2] - 2020-12-19 +### Added + +- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223)) + - Index corruption in the database? + - This command is for you + +### Removed + +- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574)) + +### Fixed + +- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107)) +- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867)) +- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906)) +- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108)) +- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027)) +- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187)) +- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) + +### Security + +- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802)) +- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364)) + ## [3.2.1] - 2020-10-19 ### Added diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 783569451..19f9c64c7 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -15,12 +15,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 +version: 0.1.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 3.1.5 +appVersion: 3.3.0 dependencies: - name: elasticsearch diff --git a/chart/values.yaml.template b/chart/values.yaml.template index c1dc29f57..9e50c6dac 100644 --- a/chart/values.yaml.template +++ b/chart/values.yaml.template @@ -4,7 +4,7 @@ image: repository: tootsuite/mastodon pullPolicy: Always # https://hub.docker.com/r/tootsuite/mastodon/tags - tag: v3.2.1 + tag: v3.3.0 # alternatively, use `latest` for the latest release or `edge` for the image # built from the most recent commit # From c4e860277dbc391a0c6ec0311f66a8484cca862b Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 19 Dec 2020 13:34:16 +0100 Subject: [PATCH 306/422] Fix "tootctl accounts fix-duplicates" (#15373) - `pluck_each` cannot be used this way with `group` - typo Co-authored-by: Claire --- lib/mastodon/accounts_cli.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 474643869..5275f04cf 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -245,10 +245,10 @@ module Mastodon domain configuration. LONG_DESC def fix_duplicates - Account.remote.select(:uri, 'count(*)').group(:uri).having('count(*) > 1').pluck_each(:uri) do |uri| + Account.remote.select(:uri, 'count(*)').group(:uri).having('count(*) > 1').pluck(:uri).each do |uri| say("Duplicates found for #{uri}") begin - ActivityPub::FetchRemotAccountService.new.call(uri) unless options[:dry_run] + ActivityPub::FetchRemoteAccountService.new.call(uri) unless options[:dry_run] rescue => e say("Error processing #{uri}: #{e}", :red) end From 9734c9b6fe2d2e4a980d8ad94c5de0300b23c809 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 20 Dec 2020 18:05:03 +0100 Subject: [PATCH 307/422] Add clean error message when RAILS_ENV is unset (#15381) By default, an unset RAILS_ENV is understood as RAILS_ENV=development. However, this is not what most people expect, and due to development-only dependencies, users are often left with confusing error messages. This commit changes it so that an explicit RAILS_ENV is required, and failing that, an error message is displayed before loading the app. Co-authored-by: Claire --- config/boot.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/boot.rb b/config/boot.rb index f3e36203a..6cde5319d 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,3 +1,8 @@ +unless ENV.key?('RAILS_ENV') + STDERR.puts 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".' + exit 1 +end + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) require 'bundler/setup' # Set up gems listed in the Gemfile. From 7bf3c6e57b52cd9390f2140a1cc17292c281aacf Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 20 Dec 2020 18:25:00 +0100 Subject: [PATCH 308/422] Fix AccountDeletionWorker crashing and clogging sidekiq queues (#15380) * Fix account deletion workers being queued multiple times for a single account * Fix poll votes being unnecessarily instantiated on poll deletion * Fix favourites being unnecessarily instantiated on status deletion * Remove inaccurate comments * Delete polls instead of destroying them Co-authored-by: Claire --- app/models/poll.rb | 2 +- app/models/status.rb | 2 +- app/services/batched_remove_status_service.rb | 3 --- app/services/delete_account_service.rb | 4 +++- app/workers/account_deletion_worker.rb | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/models/poll.rb b/app/models/poll.rb index b5deafcc2..e1ca55252 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -25,7 +25,7 @@ class Poll < ApplicationRecord belongs_to :account belongs_to :status - has_many :votes, class_name: 'PollVote', inverse_of: :poll, dependent: :destroy + has_many :votes, class_name: 'PollVote', inverse_of: :poll, dependent: :delete_all has_many :notifications, as: :activity, dependent: :destroy diff --git a/app/models/status.rb b/app/models/status.rb index 96d90e1c2..f1b3b75ce 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -56,7 +56,7 @@ class Status < ApplicationRecord belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true - has_many :favourites, inverse_of: :status, dependent: :destroy + has_many :favourites, inverse_of: :status, dependent: :delete_all has_many :bookmarks, inverse_of: :status, dependent: :destroy has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 2295a01dc..28e5468b3 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -4,8 +4,6 @@ class BatchedRemoveStatusService < BaseService include Redisable # Delete given statuses and reblogs of them - # Dispatch PuSH updates of the deleted statuses, but only local ones - # Dispatch Salmon deletes, unique per domain, of the deleted statuses, but only local ones # Remove statuses from home feeds # Push delete events to streaming API for home feeds and public feeds # @param [Enumerable] statuses A preferably batched array of statuses @@ -19,7 +17,6 @@ class BatchedRemoveStatusService < BaseService @json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } - # Ensure that rendered XML reflects destroyed state statuses.each do |status| status.mark_for_mass_destruction! status.destroy diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 9cb80c95a..fe9b30b17 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -122,7 +122,9 @@ class DeleteAccountService < BaseService @account.polls.reorder(nil).find_each do |poll| next if @options[:reserve_username] && reported_status_ids.include?(poll.status_id) - poll.destroy + # We can safely delete the poll rather than destroy it, as any non-reported + # status should have been deleted already + poll.delete end associations_for_destruction.each do |association_name| diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index 98b67419d..fdf013e01 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -3,7 +3,7 @@ class AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull' + sidekiq_options queue: 'pull', lock: :until_executed def perform(account_id, options = {}) reserve_username = options.with_indifferent_access.fetch(:reserve_username, true) From 6f51fd743590c8fd8dd95e48dc24e4472d46480b Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 21 Dec 2020 00:47:02 +0100 Subject: [PATCH 309/422] Fix invitation links not working when invite request text is required (#15385) Fixes #15383 Co-authored-by: Claire --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 6088f1994..dd96bbf8c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -83,7 +83,7 @@ class User < ApplicationRecord has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text } - validates :invite_request, presence: true, on: :create, if: -> { Setting.require_invite_text } + validates :invite_request, presence: true, on: :create, if: -> { Setting.require_invite_text && !invited? } validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? validates_with BlacklistedEmailValidator, on: :create From 43961035a906cd8bccdf4c1ac023980b37823bb3 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 21 Dec 2020 18:22:17 +0100 Subject: [PATCH 310/422] Fix some notifications not being deleted on poll/status deletion (#15402) * Fix deleting polls not deleting notifications * Fix fav notification deletion when deleting a toot * Refactor DeleteAccountService spec * Add DeleteAccountService tests for other associations and notifications * Add favourite handling spec in status removal Co-authored-by: Claire --- app/models/status.rb | 2 +- app/services/delete_account_service.rb | 4 +- spec/services/delete_account_service_spec.rb | 108 ++++++++++--------- spec/services/remove_status_service_spec.rb | 14 ++- 4 files changed, 76 insertions(+), 52 deletions(-) diff --git a/app/models/status.rb b/app/models/status.rb index f1b3b75ce..96d90e1c2 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -56,7 +56,7 @@ class Status < ApplicationRecord belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true - has_many :favourites, inverse_of: :status, dependent: :delete_all + has_many :favourites, inverse_of: :status, dependent: :destroy has_many :bookmarks, inverse_of: :status, dependent: :destroy has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index fe9b30b17..fa834e775 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -123,7 +123,9 @@ class DeleteAccountService < BaseService next if @options[:reserve_username] && reported_status_ids.include?(poll.status_id) # We can safely delete the poll rather than destroy it, as any non-reported - # status should have been deleted already + # status should have been deleted already, as long as we take care of + # notifications. + Notification.where(poll: poll).delete_all poll.delete end diff --git a/spec/services/delete_account_service_spec.rb b/spec/services/delete_account_service_spec.rb index d208b25b8..cd7d32d59 100644 --- a/spec/services/delete_account_service_spec.rb +++ b/spec/services/delete_account_service_spec.rb @@ -1,28 +1,31 @@ require 'rails_helper' RSpec.describe DeleteAccountService, type: :service do - describe '#call on local account' do - before do - stub_request(:post, "https://alice.com/inbox").to_return(status: 201) - stub_request(:post, "https://bob.com/inbox").to_return(status: 201) - end + shared_examples 'common behavior' do + let!(:status) { Fabricate(:status, account: account) } + let!(:mention) { Fabricate(:mention, account: local_follower) } + let!(:status_with_mention) { Fabricate(:status, account: account, mentions: [mention]) } + let!(:media_attachment) { Fabricate(:media_attachment, account: account) } + let!(:notification) { Fabricate(:notification, account: account) } + let!(:favourite) { Fabricate(:favourite, account: account, status: Fabricate(:status, account: local_follower)) } + let!(:poll) { Fabricate(:poll, account: account) } + let!(:poll_vote) { Fabricate(:poll_vote, account: local_follower, poll: poll) } + + let!(:active_relationship) { Fabricate(:follow, account: account, target_account: local_follower) } + let!(:passive_relationship) { Fabricate(:follow, account: local_follower, target_account: account) } + let!(:endorsement) { Fabricate(:account_pin, account: local_follower, target_account: account) } + + let!(:mention_notification) { Fabricate(:notification, account: local_follower, activity: mention, type: :mention) } + let!(:status_notification) { Fabricate(:notification, account: local_follower, activity: status, type: :status) } + let!(:poll_notification) { Fabricate(:notification, account: local_follower, activity: poll, type: :poll) } + let!(:favourite_notification) { Fabricate(:notification, account: local_follower, activity: favourite, type: :favourite) } + let!(:follow_notification) { Fabricate(:notification, account: local_follower, activity: active_relationship, type: :follow) } subject do -> { described_class.new.call(account) } end - let!(:account) { Fabricate(:account) } - let!(:status) { Fabricate(:status, account: account) } - let!(:media_attachment) { Fabricate(:media_attachment, account: account) } - let!(:notification) { Fabricate(:notification, account: account) } - let!(:favourite) { Fabricate(:favourite, account: account) } - let!(:active_relationship) { Fabricate(:follow, account: account) } - let!(:passive_relationship) { Fabricate(:follow, target_account: account) } - let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } - let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } - let!(:endorsment) { Fabricate(:account_pin, account: passive_relationship.account, target_account: account) } - - it 'deletes associated records' do + it 'deletes associated owned records' do is_expected.to change { [ account.statuses, @@ -31,54 +34,63 @@ RSpec.describe DeleteAccountService, type: :service do account.favourites, account.active_relationships, account.passive_relationships, + account.polls, + ].map(&:count) + }.from([2, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0]) + end + + it 'deletes associated target records' do + is_expected.to change { + [ AccountPin.where(target_account: account), ].map(&:count) - }.from([1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0]) + }.from([1]).to([0]) end - it 'sends a delete actor activity to all known inboxes' do - subject.call - expect(a_request(:post, "https://alice.com/inbox")).to have_been_made.once - expect(a_request(:post, "https://bob.com/inbox")).to have_been_made.once + it 'deletes associated target notifications' do + is_expected.to change { + [ + 'poll', 'favourite', 'status', 'mention', 'follow' + ].map { |type| Notification.where(type: type).count } + }.from([1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0]) end end - describe '#call on remote account' do + describe '#call on local account' do before do stub_request(:post, "https://alice.com/inbox").to_return(status: 201) stub_request(:post, "https://bob.com/inbox").to_return(status: 201) end - subject do - -> { described_class.new.call(remote_bob) } - end - - let!(:account) { Fabricate(:account) } let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } - let!(:status) { Fabricate(:status, account: remote_bob) } - let!(:media_attachment) { Fabricate(:media_attachment, account: remote_bob) } - let!(:notification) { Fabricate(:notification, account: remote_bob) } - let!(:favourite) { Fabricate(:favourite, account: remote_bob) } - let!(:active_relationship) { Fabricate(:follow, account: remote_bob, target_account: account) } - let!(:passive_relationship) { Fabricate(:follow, target_account: remote_bob) } - it 'deletes associated records' do - is_expected.to change { - [ - remote_bob.statuses, - remote_bob.media_attachments, - remote_bob.notifications, - remote_bob.favourites, - remote_bob.active_relationships, - remote_bob.passive_relationships, - ].map(&:count) - }.from([1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0]) + include_examples 'common behavior' do + let!(:account) { Fabricate(:account) } + let!(:local_follower) { Fabricate(:account) } + + it 'sends a delete actor activity to all known inboxes' do + subject.call + expect(a_request(:post, "https://alice.com/inbox")).to have_been_made.once + expect(a_request(:post, "https://bob.com/inbox")).to have_been_made.once + end + end + end + + describe '#call on remote account' do + before do + stub_request(:post, "https://alice.com/inbox").to_return(status: 201) + stub_request(:post, "https://bob.com/inbox").to_return(status: 201) end - it 'sends a reject follow to follwer inboxes' do - subject.call - expect(a_request(:post, remote_bob.inbox_url)).to have_been_made.once + include_examples 'common behavior' do + let!(:account) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } + let!(:local_follower) { Fabricate(:account) } + + it 'sends a reject follow to follwer inboxes' do + subject.call + expect(a_request(:post, account.inbox_url)).to have_been_made.once + end end end end diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index 06676ec45..7ce75b2c7 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe RemoveStatusService, type: :service do subject { RemoveStatusService.new } - let!(:alice) { Fabricate(:account) } + let!(:alice) { Fabricate(:account, user: Fabricate(:user)) } let!(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://example.com/salmon') } let!(:jeff) { Fabricate(:account) } let!(:hank) { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } @@ -17,23 +17,33 @@ RSpec.describe RemoveStatusService, type: :service do hank.follow!(alice) @status = PostStatusService.new.call(alice, text: 'Hello @bob@example.com') + FavouriteService.new.call(jeff, @status) Fabricate(:status, account: bill, reblog: @status, uri: 'hoge') - subject.call(@status) end it 'removes status from author\'s home feed' do + subject.call(@status) expect(HomeFeed.new(alice).get(10)).to_not include(@status.id) end it 'removes status from local follower\'s home feed' do + subject.call(@status) expect(HomeFeed.new(jeff).get(10)).to_not include(@status.id) end it 'sends delete activity to followers' do + subject.call(@status) expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.twice end it 'sends delete activity to rebloggers' do + subject.call(@status) expect(a_request(:post, 'http://example2.com/inbox')).to have_been_made end + + it 'remove status from notifications' do + expect { subject.call(@status) }.to change { + Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count + }.from(1).to(0) + end end From 67ebd61f1180e63fcc671c583e7251e1e09755d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Dec 2020 05:12:11 +0100 Subject: [PATCH 311/422] Bump node-notifier from 8.0.0 to 8.0.1 (#15404) Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/mikaelbr/node-notifier/releases) - [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md) - [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 653d67133..4aa8f6380 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7303,9 +7303,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" - integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + version "8.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" + integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -9551,9 +9551,11 @@ semver@^6.0.0, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" send@0.17.1: version "0.17.1" @@ -10845,9 +10847,9 @@ uuid@^3.3.2, uuid@^3.4.0: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.3.0, uuid@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: version "2.2.0" From 9915d11c0d7a15b6775af8e78fcc4d836368f88d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 22 Dec 2020 17:13:55 +0100 Subject: [PATCH 312/422] Fix unnecessary queries when batch-removing statuses, 100x faster (#15387) --- app/models/favourite.rb | 2 +- app/models/status.rb | 12 +- app/services/batched_remove_status_service.rb | 91 +++++++------ app/services/delete_account_service.rb | 126 ++++++++++++++---- config/initializers/chewy.rb | 5 + lib/chewy/strategy/custom_sidekiq.rb | 25 +--- .../batched_remove_status_service_spec.rb | 5 + 7 files changed, 167 insertions(+), 99 deletions(-) diff --git a/app/models/favourite.rb b/app/models/favourite.rb index bf0ec4449..35028b7dd 100644 --- a/app/models/favourite.rb +++ b/app/models/favourite.rb @@ -36,7 +36,7 @@ class Favourite < ApplicationRecord end def decrement_cache_counters - return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?) + return if association(:status).loaded? && status.marked_for_destruction? status&.decrement_count!(:favourites_count) end end diff --git a/app/models/status.rb b/app/models/status.rb index 96d90e1c2..b426f9d5b 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -228,14 +228,6 @@ class Status < ApplicationRecord @emojis = CustomEmoji.from_text(fields.join(' '), account.domain) end - def mark_for_mass_destruction! - @marked_for_mass_destruction = true - end - - def marked_for_mass_destruction? - @marked_for_mass_destruction - end - def replies_count status_stat&.replies_count || 0 end @@ -430,7 +422,7 @@ class Status < ApplicationRecord end def decrement_counter_caches - return if direct_visibility? || marked_for_mass_destruction? + return if direct_visibility? account&.decrement_count!(:statuses_count) reblog&.decrement_count!(:reblogs_count) if reblog? @@ -440,7 +432,7 @@ class Status < ApplicationRecord def unlink_from_conversations return unless direct_visibility? - mentioned_accounts = mentions.includes(:account).map(&:account) + mentioned_accounts = (association(:mentions).loaded? ? mentions : mentions.includes(:account)).map(&:account) inbox_owners = mentioned_accounts.select(&:local?) + (account.local? ? [account] : []) inbox_owners.each do |inbox_owner| diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 28e5468b3..63ab89f2d 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -3,29 +3,45 @@ class BatchedRemoveStatusService < BaseService include Redisable - # Delete given statuses and reblogs of them - # Remove statuses from home feeds - # Push delete events to streaming API for home feeds and public feeds - # @param [Enumerable] statuses A preferably batched array of statuses + # Delete multiple statuses and reblogs of them as efficiently as possible + # @param [Enumerable] statuses An array of statuses # @param [Hash] options - # @option [Boolean] :skip_side_effects + # @option [Boolean] :skip_side_effects Do not modify feeds and send updates to streaming API def call(statuses, **options) - statuses = Status.where(id: statuses.map(&:id)).includes(:account).flat_map { |status| [status] + status.reblogs.includes(:account).to_a } + ActiveRecord::Associations::Preloader.new.preload(statuses, options[:skip_side_effects] ? :reblogs : [:account, reblogs: :account]) - @mentions = statuses.each_with_object({}) { |s, h| h[s.id] = s.active_mentions.includes(:account).to_a } - @tags = statuses.each_with_object({}) { |s, h| h[s.id] = s.tags.pluck(:name) } + statuses_and_reblogs = statuses.flat_map { |status| [status] + status.reblogs } - @json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } + # The conversations for direct visibility statuses also need + # to be manually updated. This part is not efficient but we + # rely on direct visibility statuses being relatively rare. + statuses_with_account_conversations = statuses.select(&:direct_visibility?) - statuses.each do |status| - status.mark_for_mass_destruction! - status.destroy + ActiveRecord::Associations::Preloader.new.preload(statuses_with_account_conversations, [mentions: :account]) + + statuses_with_account_conversations.each do |status| + status.send(:unlink_from_conversations) end + # We do not batch all deletes into one to avoid having a long-running + # transaction lock the database, but we use the delete method instead + # of destroy to avoid all callbacks. We rely on foreign keys to + # cascade the delete faster without loading the associations. + statuses_and_reblogs.each(&:delete) + + # Since we skipped all callbacks, we also need to manually + # deindex the statuses + Chewy.strategy.current.update(StatusesIndex, statuses_and_reblogs) + return if options[:skip_side_effects] + ActiveRecord::Associations::Preloader.new.preload(statuses_and_reblogs, :tags) + + @tags = statuses_and_reblogs.each_with_object({}) { |s, h| h[s.id] = s.tags.map { |tag| tag.name.mb_chars.downcase } } + @json_payloads = statuses_and_reblogs.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } + # Batch by source account - statuses.group_by(&:account_id).each_value do |account_statuses| + statuses_and_reblogs.group_by(&:account_id).each_value do |account_statuses| account = account_statuses.first.account next unless account @@ -35,27 +51,31 @@ class BatchedRemoveStatusService < BaseService end # Cannot be batched - statuses.each do |status| - unpush_from_public_timelines(status) + redis.pipelined do + statuses_and_reblogs.each do |status| + unpush_from_public_timelines(status) + end end end private def unpush_from_home_timelines(account, statuses) - recipients = account.followers_for_local_distribution.to_a - - recipients << account if account.local? - - recipients.each do |follower| + account.followers_for_local_distribution.includes(:user).find_each do |follower| statuses.each do |status| FeedManager.instance.unpush_from_home(follower, status) end end + + return unless account.local? + + statuses.each do |status| + FeedManager.instance.unpush_from_home(account, status) + end end def unpush_from_list_timelines(account, statuses) - account.lists_for_local_distribution.select(:id, :account_id).each do |list| + account.lists_for_local_distribution.select(:id, :account_id).includes(account: :user).find_each do |list| statuses.each do |status| FeedManager.instance.unpush_from_list(list, status) end @@ -67,26 +87,17 @@ class BatchedRemoveStatusService < BaseService payload = @json_payloads[status.id] - redis.pipelined do - redis.publish('timeline:public', payload) - if status.local? - redis.publish('timeline:public:local', payload) - else - redis.publish('timeline:public:remote', payload) - end - if status.media_attachments.any? - redis.publish('timeline:public:media', payload) - if status.local? - redis.publish('timeline:public:local:media', payload) - else - redis.publish('timeline:public:remote:media', payload) - end - end + redis.publish('timeline:public', payload) + redis.publish(status.local? ? 'timeline:public:local' : 'timeline:public:remote', payload) - @tags[status.id].each do |hashtag| - redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", payload) - redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", payload) if status.local? - end + if status.media_attachments.any? + redis.publish('timeline:public:media', payload) + redis.publish(status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', payload) + end + + @tags[status.id].each do |hashtag| + redis.publish("timeline:hashtag:#{hashtag}", payload) + redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local? end end end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index fa834e775..5123a4697 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -6,15 +6,21 @@ class DeleteAccountService < BaseService ASSOCIATIONS_ON_SUSPEND = %w( account_pins active_relationships + aliases block_relationships blocked_by_relationships + bookmarks conversation_mutes conversations custom_filters + devices domain_blocks favourites + featured_tags follow_requests + identity_proofs list_accounts + migrations mute_relationships muted_by_relationships notifications @@ -25,6 +31,29 @@ class DeleteAccountService < BaseService status_pins ).freeze + # The following associations have no important side-effects + # in callbacks and all of their own associations are secured + # by foreign keys, making them safe to delete without loading + # into memory + ASSOCIATIONS_WITHOUT_SIDE_EFFECTS = %w( + account_pins + aliases + conversation_mutes + conversations + custom_filters + devices + domain_blocks + featured_tags + follow_requests + identity_proofs + migrations + mute_relationships + muted_by_relationships + notifications + scheduled_statuses + status_pins + ) + ASSOCIATIONS_ON_DESTROY = %w( reports targeted_moderation_notes @@ -55,19 +84,25 @@ class DeleteAccountService < BaseService @options[:skip_activitypub] = true if @options[:skip_side_effects] - reject_follows! - undo_follows! - purge_user! - purge_profile! + distribute_activities! purge_content! fulfill_deletion_request! end private - def reject_follows! - return if @account.local? || !@account.activitypub? || @options[:skip_activitypub] + def distribute_activities! + return if skip_activitypub? + if @account.local? + delete_actor! + elsif @account.activitypub? + reject_follows! + undo_follows! + end + end + + def reject_follows! # When deleting a remote account, the account obviously doesn't # actually become deleted on its origin server, i.e. unlike a # locally deleted account it continues to have access to its home @@ -81,8 +116,6 @@ class DeleteAccountService < BaseService end def undo_follows! - return if @account.local? || !@account.activitypub? || @options[:skip_activitypub] - # When deleting a remote account, the account obviously doesn't # actually become deleted on its origin server, but following relationships # are severed on our end. Therefore, make the remote server aware that the @@ -97,7 +130,7 @@ class DeleteAccountService < BaseService def purge_user! return if !@account.local? || @account.user.nil? - if @options[:reserve_email] + if keep_user_record? @account.user.disable! @account.user.invites.where(uses: 0).destroy_all else @@ -106,34 +139,52 @@ class DeleteAccountService < BaseService end def purge_content! - distribute_delete_actor! if @account.local? && !@options[:skip_side_effects] + purge_user! + purge_profile! + purge_statuses! + purge_media_attachments! + purge_polls! + purge_generated_notifications! + purge_other_associations! + @account.destroy unless keep_account_record? + end + + def purge_statuses! @account.statuses.reorder(nil).find_in_batches do |statuses| - statuses.reject! { |status| reported_status_ids.include?(status.id) } if @options[:reserve_username] - BatchedRemoveStatusService.new.call(statuses, skip_side_effects: @options[:skip_side_effects]) + statuses.reject! { |status| reported_status_ids.include?(status.id) } if keep_account_record? + + BatchedRemoveStatusService.new.call(statuses, skip_side_effects: skip_side_effects?) end + end + def purge_media_attachments! @account.media_attachments.reorder(nil).find_each do |media_attachment| - next if @options[:reserve_username] && reported_status_ids.include?(media_attachment.status_id) + next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id) media_attachment.destroy end + end + def purge_polls! @account.polls.reorder(nil).find_each do |poll| - next if @options[:reserve_username] && reported_status_ids.include?(poll.status_id) + next if keep_account_record? && reported_status_ids.include?(poll.status_id) - # We can safely delete the poll rather than destroy it, as any non-reported - # status should have been deleted already, as long as we take care of - # notifications. - Notification.where(poll: poll).delete_all poll.delete end + end + def purge_generated_notifications! + # By deleting polls and statuses without callbacks, we've left behind + # polymorphically associated notifications generated by this account + + Notification.where(from_account: @account).in_batches.delete_all + end + + def purge_other_associations! associations_for_destruction.each do |association_name| - destroy_all(@account.public_send(association_name)) + purge_association(association_name) end - - @account.destroy unless @options[:reserve_username] end def purge_profile! @@ -141,7 +192,7 @@ class DeleteAccountService < BaseService # there is no point wasting time updating # its values first - return unless @options[:reserve_username] + return unless keep_account_record? @account.silenced_at = nil @account.suspended_at = @options[:suspended_at] || Time.now.utc @@ -156,6 +207,7 @@ class DeleteAccountService < BaseService @account.followers_count = 0 @account.following_count = 0 @account.moved_to_account = nil + @account.also_known_as = [] @account.trust_level = :untrusted @account.avatar.destroy @account.header.destroy @@ -166,11 +218,17 @@ class DeleteAccountService < BaseService @account.deletion_request&.destroy end - def destroy_all(association) - association.in_batches.destroy_all + def purge_association(association_name) + association = @account.public_send(association_name) + + if ASSOCIATIONS_WITHOUT_SIDE_EFFECTS.include?(association_name) + association.in_batches.delete_all + else + association.in_batches.destroy_all + end end - def distribute_delete_actor! + def delete_actor! ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url| [delete_actor_json, @account.id, inbox_url] end @@ -197,10 +255,26 @@ class DeleteAccountService < BaseService end def associations_for_destruction - if @options[:reserve_username] + if keep_account_record? ASSOCIATIONS_ON_SUSPEND else ASSOCIATIONS_ON_SUSPEND + ASSOCIATIONS_ON_DESTROY end end + + def keep_user_record? + @options[:reserve_email] + end + + def keep_account_record? + @options[:reserve_username] + end + + def skip_side_effects? + @options[:skip_side_effects] + end + + def skip_activitypub? + @options[:skip_activitypub] + end end diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb index 8f54abf77..9fc9b2f1a 100644 --- a/config/initializers/chewy.rb +++ b/config/initializers/chewy.rb @@ -12,6 +12,10 @@ Chewy.settings = { sidekiq: { queue: 'pull' }, } +# We use our own async strategy even outside the request-response +# cycle, which takes care of checking if ElasticSearch is enabled +# or not. However, mind that for the Rails console, the :urgent +# strategy is set automatically with no way to override it. Chewy.root_strategy = :custom_sidekiq Chewy.request_strategy = :custom_sidekiq Chewy.use_after_commit_callbacks = false @@ -37,6 +41,7 @@ Elasticsearch::Transport::Client.prepend Module.new { super arguments end } + Elasticsearch::API::Indices::IndicesClient.prepend Module.new { def create(arguments = {}) arguments[:include_type_name] = true diff --git a/lib/chewy/strategy/custom_sidekiq.rb b/lib/chewy/strategy/custom_sidekiq.rb index 3e54326ba..794ae4ed4 100644 --- a/lib/chewy/strategy/custom_sidekiq.rb +++ b/lib/chewy/strategy/custom_sidekiq.rb @@ -2,29 +2,10 @@ module Chewy class Strategy - class CustomSidekiq < Base - class Worker - include ::Sidekiq::Worker - - sidekiq_options queue: 'pull' - - def perform(type, ids, options = {}) - options[:refresh] = !Chewy.disable_refresh_async if Chewy.disable_refresh_async - type.constantize.import!(ids, options) - end - end - - def update(type, objects, _options = {}) - return unless Chewy.enabled? - - ids = type.root.id ? Array.wrap(objects) : type.adapter.identify(objects) - - return if ids.empty? - - Worker.perform_async(type.name, ids) + class CustomSidekiq < Sidekiq + def update(_type, _objects, _options = {}) + super if Chewy.enabled? end - - def leave; end end end end diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index f84256f18..239859f06 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -26,6 +26,11 @@ RSpec.describe BatchedRemoveStatusService, type: :service do subject.call([status1, status2]) end + it 'removes statuses' do + expect { Status.find(status1.id) }.to raise_error ActiveRecord::RecordNotFound + expect { Status.find(status2.id) }.to raise_error ActiveRecord::RecordNotFound + end + it 'removes statuses from author\'s home feed' do expect(HomeFeed.new(alice).get(10)).to_not include([status1.id, status2.id]) end From 1cf2c3a810bba937c7702c342a3ff37c3d37391a Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 22 Dec 2020 17:14:32 +0100 Subject: [PATCH 313/422] Fix external user creation failing when invite request text is required (#15405) * Fix external user creation failing when invite request text is required Also fixes tootctl-based user creation. * Add test about invites when invite request text is otherwise required Co-authored-by: Claire --- app/models/user.rb | 12 ++++++++++-- lib/mastodon/accounts_cli.rb | 2 +- lib/tasks/mastodon.rake | 2 +- .../auth/registrations_controller_spec.rb | 5 ++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index dd96bbf8c..f8c8a6ab5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -83,7 +83,7 @@ class User < ApplicationRecord has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text } - validates :invite_request, presence: true, on: :create, if: -> { Setting.require_invite_text && !invited? } + validates :invite_request, presence: true, on: :create, if: :invite_text_required? validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? validates_with BlacklistedEmailValidator, on: :create @@ -128,7 +128,7 @@ class User < ApplicationRecord to: :settings, prefix: :setting, allow_nil: false attr_reader :invite_code, :sign_in_token_attempt - attr_writer :external + attr_writer :external, :bypass_invite_request_check def confirmed? confirmed_at.present? @@ -429,6 +429,10 @@ class User < ApplicationRecord !!@external end + def bypass_invite_request_check? + @bypass_invite_request_check + end + def sanitize_languages return if chosen_languages.nil? chosen_languages.reject!(&:blank?) @@ -466,4 +470,8 @@ class User < ApplicationRecord def validate_email_dns? email_changed? && !(Rails.env.test? || Rails.env.development?) end + + def invite_text_required? + Setting.require_invite_text && !invited? && !external? && !bypass_invite_request_check? + end end diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 5275f04cf..cdd1db995 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -77,7 +77,7 @@ module Mastodon def create(username) account = Account.new(username: username) password = SecureRandom.hex - user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil) + user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil, bypass_invite_request_check: true) if options[:reattach] account = Account.find_local(username) || Account.new(username: username) diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index 9e80989ef..2ad1e778b 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -412,7 +412,7 @@ namespace :mastodon do password = SecureRandom.hex(16) - user = User.new(admin: true, email: email, password: password, confirmed_at: Time.now.utc, account_attributes: { username: username }) + user = User.new(admin: true, email: email, password: password, confirmed_at: Time.now.utc, account_attributes: { username: username }, bypass_invite_request_check: true) user.save(validate: false) prompt.ok "You can login with the password: #{password}" diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index c701a3b8b..ccf304a93 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -195,16 +195,19 @@ RSpec.describe Auth::RegistrationsController, type: :controller do end end - context 'approval-based registrations with valid invite' do + context 'approval-based registrations with valid invite and required invite text' do around do |example| registrations_mode = Setting.registrations_mode + require_invite_text = Setting.require_invite_text example.run + Setting.require_invite_text = require_invite_text Setting.registrations_mode = registrations_mode end subject do inviter = Fabricate(:user, confirmed_at: 2.days.ago) Setting.registrations_mode = 'approved' + Setting.require_invite_text = true request.headers["Accept-Language"] = accept_language invite = Fabricate(:invite, user: inviter, max_uses: nil, expires_at: 1.hour.from_now) post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', 'invite_code': invite.code, agreement: 'true' } } From f18349640b686a3c3866711bfcd1d14edd5bc41a Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 22 Dec 2020 20:24:55 +0100 Subject: [PATCH 314/422] Fix batch order warnings in BatchedRemoveStatusService (#15409) Co-authored-by: Claire --- app/services/batched_remove_status_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 63ab89f2d..3ec000110 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -61,7 +61,7 @@ class BatchedRemoveStatusService < BaseService private def unpush_from_home_timelines(account, statuses) - account.followers_for_local_distribution.includes(:user).find_each do |follower| + account.followers_for_local_distribution.includes(:user).reorder(nil).find_each do |follower| statuses.each do |status| FeedManager.instance.unpush_from_home(follower, status) end @@ -75,7 +75,7 @@ class BatchedRemoveStatusService < BaseService end def unpush_from_list_timelines(account, statuses) - account.lists_for_local_distribution.select(:id, :account_id).includes(account: :user).find_each do |list| + account.lists_for_local_distribution.select(:id, :account_id).includes(account: :user).reorder(nil).find_each do |list| statuses.each do |status| FeedManager.instance.unpush_from_list(list, status) end From 3249d35bdcd9a495af3277dfb4b2129d7ef80f15 Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 22 Dec 2020 23:57:46 +0100 Subject: [PATCH 315/422] Improve account deletion performances further (#15407) * Delete status records by batches of 50 * Do not precompute values that are only used once * Do not generate redis events for removal of public toots older than two weeks * Filter reported toots a priori for polls and status deletion * Do not process reblogs when cleaning up public timelines As in Mastodon proper, reblogs don't appear in public TLs * Clean the deleted account's own feed in one go * Refactor Account#clean_feed_manager and List#clean_feed_manager * Delete instead of destroy a few more associations * Fix preloading Co-authored-by: Claire --- app/lib/feed_manager.rb | 30 +++++++++++++++++++ app/models/account.rb | 13 +------- app/models/list.rb | 13 +------- app/services/batched_remove_status_service.rb | 24 +++++---------- app/services/delete_account_service.rb | 20 ++++++++----- .../scheduler/feed_cleanup_scheduler.rb | 30 ++----------------- .../batched_remove_status_service_spec.rb | 4 --- 7 files changed, 53 insertions(+), 81 deletions(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 5e01ef67a..f0ad3e21f 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -230,6 +230,36 @@ class FeedManager end end + # Completely clear multiple feeds at once + # @param [Symbol] type + # @param [Array] ids + # @return [void] + def clean_feeds!(type, ids) + reblogged_id_sets = {} + + redis.pipelined do + ids.each do |feed_id| + redis.del(key(type, feed_id)) + reblog_key = key(type, feed_id, 'reblogs') + # We collect a future for this: we don't block while getting + # it, but we can iterate over it later. + reblogged_id_sets[feed_id] = redis.zrange(reblog_key, 0, -1) + redis.del(reblog_key) + end + end + + # Remove all of the reblog tracking keys we just removed the + # references to. + redis.pipelined do + reblogged_id_sets.each do |feed_id, future| + future.value.each do |reblogged_id| + reblog_set_key = key(type, feed_id, "reblogs:#{reblogged_id}") + redis.del(reblog_set_key) + end + end + end + end + private # Trim a feed to maximum size by removing older items diff --git a/app/models/account.rb b/app/models/account.rb index 80eb92a71..e6cf03fa8 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -578,17 +578,6 @@ class Account < ApplicationRecord end def clean_feed_manager - reblog_key = FeedManager.instance.key(:home, id, 'reblogs') - reblogged_id_set = Redis.current.zrange(reblog_key, 0, -1) - - Redis.current.pipelined do - Redis.current.del(FeedManager.instance.key(:home, id)) - Redis.current.del(reblog_key) - - reblogged_id_set.each do |reblogged_id| - reblog_set_key = FeedManager.instance.key(:home, id, "reblogs:#{reblogged_id}") - Redis.current.del(reblog_set_key) - end - end + FeedManager.instance.clean_feeds!(:home, [id]) end end diff --git a/app/models/list.rb b/app/models/list.rb index 655d55ff6..cdc6ebdb3 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -34,17 +34,6 @@ class List < ApplicationRecord private def clean_feed_manager - reblog_key = FeedManager.instance.key(:list, id, 'reblogs') - reblogged_id_set = Redis.current.zrange(reblog_key, 0, -1) - - Redis.current.pipelined do - Redis.current.del(FeedManager.instance.key(:list, id)) - Redis.current.del(reblog_key) - - reblogged_id_set.each do |reblogged_id| - reblog_set_key = FeedManager.instance.key(:list, id, "reblogs:#{reblogged_id}") - Redis.current.del(reblog_set_key) - end - end + FeedManager.instance.clean_feeds!(:list, [id]) end end diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 3ec000110..61617d958 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -8,7 +8,7 @@ class BatchedRemoveStatusService < BaseService # @param [Hash] options # @option [Boolean] :skip_side_effects Do not modify feeds and send updates to streaming API def call(statuses, **options) - ActiveRecord::Associations::Preloader.new.preload(statuses, options[:skip_side_effects] ? :reblogs : [:account, reblogs: :account]) + ActiveRecord::Associations::Preloader.new.preload(statuses, options[:skip_side_effects] ? :reblogs : [:account, :tags, reblogs: :account]) statuses_and_reblogs = statuses.flat_map { |status| [status] + status.reblogs } @@ -27,7 +27,7 @@ class BatchedRemoveStatusService < BaseService # transaction lock the database, but we use the delete method instead # of destroy to avoid all callbacks. We rely on foreign keys to # cascade the delete faster without loading the associations. - statuses_and_reblogs.each(&:delete) + statuses_and_reblogs.each_slice(50) { |slice| Status.where(id: slice.map(&:id)).delete_all } # Since we skipped all callbacks, we also need to manually # deindex the statuses @@ -35,11 +35,6 @@ class BatchedRemoveStatusService < BaseService return if options[:skip_side_effects] - ActiveRecord::Associations::Preloader.new.preload(statuses_and_reblogs, :tags) - - @tags = statuses_and_reblogs.each_with_object({}) { |s, h| h[s.id] = s.tags.map { |tag| tag.name.mb_chars.downcase } } - @json_payloads = statuses_and_reblogs.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } - # Batch by source account statuses_and_reblogs.group_by(&:account_id).each_value do |account_statuses| account = account_statuses.first.account @@ -51,8 +46,9 @@ class BatchedRemoveStatusService < BaseService end # Cannot be batched + @status_id_cutoff = Mastodon::Snowflake.id_at(2.weeks.ago) redis.pipelined do - statuses_and_reblogs.each do |status| + statuses.each do |status| unpush_from_public_timelines(status) end end @@ -66,12 +62,6 @@ class BatchedRemoveStatusService < BaseService FeedManager.instance.unpush_from_home(follower, status) end end - - return unless account.local? - - statuses.each do |status| - FeedManager.instance.unpush_from_home(account, status) - end end def unpush_from_list_timelines(account, statuses) @@ -83,9 +73,9 @@ class BatchedRemoveStatusService < BaseService end def unpush_from_public_timelines(status) - return unless status.public_visibility? + return unless status.public_visibility? && status.id > @status_id_cutoff - payload = @json_payloads[status.id] + payload = Oj.dump(event: :delete, payload: status.id.to_s) redis.publish('timeline:public', payload) redis.publish(status.local? ? 'timeline:public:local' : 'timeline:public:remote', payload) @@ -95,7 +85,7 @@ class BatchedRemoveStatusService < BaseService redis.publish(status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', payload) end - @tags[status.id].each do |hashtag| + status.tags.map { |tag| tag.name.mb_chars.downcase }.each do |hashtag| redis.publish("timeline:hashtag:#{hashtag}", payload) redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local? end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 5123a4697..58f6ef2ab 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -46,10 +46,12 @@ class DeleteAccountService < BaseService featured_tags follow_requests identity_proofs + list_accounts migrations mute_relationships muted_by_relationships notifications + owned_lists scheduled_statuses status_pins ) @@ -145,15 +147,14 @@ class DeleteAccountService < BaseService purge_media_attachments! purge_polls! purge_generated_notifications! + purge_feeds! purge_other_associations! @account.destroy unless keep_account_record? end def purge_statuses! - @account.statuses.reorder(nil).find_in_batches do |statuses| - statuses.reject! { |status| reported_status_ids.include?(status.id) } if keep_account_record? - + @account.statuses.reorder(nil).where.not(id: reported_status_ids).in_batches do |statuses| BatchedRemoveStatusService.new.call(statuses, skip_side_effects: skip_side_effects?) end end @@ -167,11 +168,7 @@ class DeleteAccountService < BaseService end def purge_polls! - @account.polls.reorder(nil).find_each do |poll| - next if keep_account_record? && reported_status_ids.include?(poll.status_id) - - poll.delete - end + @account.polls.reorder(nil).where.not(status_id: reported_status_ids).in_batches.delete_all end def purge_generated_notifications! @@ -187,6 +184,13 @@ class DeleteAccountService < BaseService end end + def purge_feeds! + return unless @account.local? + + FeedManager.instance.clean_feeds!(:home, [@account.id]) + FeedManager.instance.clean_feeds!(:list, @account.owned_lists.pluck(:id)) + end + def purge_profile! # If the account is going to be destroyed # there is no point wasting time updating diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb index 458fe6193..42b29f4ec 100644 --- a/app/workers/scheduler/feed_cleanup_scheduler.rb +++ b/app/workers/scheduler/feed_cleanup_scheduler.rb @@ -14,37 +14,11 @@ class Scheduler::FeedCleanupScheduler private def clean_home_feeds! - clean_feeds!(inactive_account_ids, :home) + feed_manager.clean_feeds!(:home, inactive_account_ids) end def clean_list_feeds! - clean_feeds!(inactive_list_ids, :list) - end - - def clean_feeds!(ids, type) - reblogged_id_sets = {} - - redis.pipelined do - ids.each do |feed_id| - redis.del(feed_manager.key(type, feed_id)) - reblog_key = feed_manager.key(type, feed_id, 'reblogs') - # We collect a future for this: we don't block while getting - # it, but we can iterate over it later. - reblogged_id_sets[feed_id] = redis.zrange(reblog_key, 0, -1) - redis.del(reblog_key) - end - end - - # Remove all of the reblog tracking keys we just removed the - # references to. - redis.pipelined do - reblogged_id_sets.each do |feed_id, future| - future.value.each do |reblogged_id| - reblog_set_key = feed_manager.key(type, feed_id, "reblogs:#{reblogged_id}") - redis.del(reblog_set_key) - end - end - end + feed_manager.clean_feeds!(:list, inactive_list_ids) end def inactive_account_ids diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index 239859f06..c1f54a6fd 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -43,10 +43,6 @@ RSpec.describe BatchedRemoveStatusService, type: :service do expect(Redis.current).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once) end - it 'notifies streaming API of author' do - expect(Redis.current).to have_received(:publish).with("timeline:#{alice.id}", any_args).at_least(:once) - end - it 'notifies streaming API of public timeline' do expect(Redis.current).to have_received(:publish).with('timeline:public', any_args).at_least(:once) end From 2ab3e91eaf6c386f3933d79007ca87215397f06c Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 23 Dec 2020 00:04:52 +0100 Subject: [PATCH 316/422] Fix BatchedRemoveStatusService not working without ES in rails console (#15408) Not a huge deal but may cause surprising failures in custom scripts and development. Co-authored-by: Claire --- app/services/batched_remove_status_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 61617d958..5000062e4 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -31,7 +31,7 @@ class BatchedRemoveStatusService < BaseService # Since we skipped all callbacks, we also need to manually # deindex the statuses - Chewy.strategy.current.update(StatusesIndex, statuses_and_reblogs) + Chewy.strategy.current.update(StatusesIndex, statuses_and_reblogs) if Chewy.enabled? return if options[:skip_side_effects] From 62e42bd15be081596773d2b29009e437ebf27d8b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 23 Dec 2020 00:10:58 +0100 Subject: [PATCH 317/422] New Crowdin updates (#15369) * New translations doorkeeper.en.yml (Esperanto) [ci skip] * New translations doorkeeper.en.yml (Albanian) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Romanian) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Thai) [ci skip] * New translations simple_form.en.yml (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations simple_form.en.yml (Galician) [ci skip] * New translations simple_form.en.yml (Romanian) [ci skip] * New translations en.yml (Tatar) [ci skip] * New translations en.json (Tatar) [ci skip] * New translations en.yml (Standard Moroccan Tamazight) [ci skip] * New translations en.json (Standard Moroccan Tamazight) [ci skip] * New translations doorkeeper.en.yml (Sardinian) [ci skip] * New translations en.yml (Romanian) [ci skip] * New translations doorkeeper.en.yml (Romanian) [ci skip] * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.json (Bulgarian) [ci skip] * New translations simple_form.en.yml (Catalan) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations doorkeeper.en.yml (Bulgarian) [ci skip] * New translations simple_form.en.yml (Bulgarian) [ci skip] * New translations en.yml (Bulgarian) [ci skip] * New translations doorkeeper.en.yml (Arabic) [ci skip] * New translations en.yml (French) [ci skip] * New translations simple_form.en.yml (Arabic) [ci skip] * New translations en.yml (Arabic) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations doorkeeper.en.yml (Spanish) [ci skip] * New translations simple_form.en.yml (Spanish) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations doorkeeper.en.yml (French) [ci skip] * New translations doorkeeper.en.yml (Sorani (Kurdish)) [ci skip] * New translations doorkeeper.en.yml (Vietnamese) [ci skip] * New translations en.yml (Czech) [ci skip] * New translations simple_form.en.yml (Greek) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.json (German) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.json (Czech) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations simple_form.en.yml (French) [ci skip] * New translations en.yml (Corsican) [ci skip] * New translations en.yml (Japanese) [ci skip] * New translations en.json (Swedish) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations simple_form.en.yml (Sardinian) [ci skip] * New translations en.yml (Sardinian) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations simple_form.en.yml (Sorani (Kurdish)) [ci skip] * New translations en.yml (Sorani (Kurdish)) [ci skip] * New translations en.json (Sorani (Kurdish)) [ci skip] * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional, Hong Kong) [ci skip] * New translations simple_form.en.yml (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations simple_form.en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations doorkeeper.en.yml (Catalan) [ci skip] * New translations simple_form.en.yml (Czech) [ci skip] * New translations doorkeeper.en.yml (Norwegian) [ci skip] * New translations simple_form.en.yml (Norwegian) [ci skip] * New translations en.yml (Norwegian) [ci skip] * New translations en.json (Norwegian) [ci skip] * New translations doorkeeper.en.yml (Dutch) [ci skip] * New translations en.yml (Macedonian) [ci skip] * New translations simple_form.en.yml (Polish) [ci skip] * New translations en.json (Macedonian) [ci skip] * New translations en.yml (Lithuanian) [ci skip] * New translations en.json (Lithuanian) [ci skip] * New translations doorkeeper.en.yml (Korean) [ci skip] * New translations simple_form.en.yml (Korean) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations doorkeeper.en.yml (Polish) [ci skip] * New translations doorkeeper.en.yml (Georgian) [ci skip] * New translations en.yml (Slovak) [ci skip] * New translations doorkeeper.en.yml (Slovenian) [ci skip] * New translations simple_form.en.yml (Slovenian) [ci skip] * New translations en.yml (Slovenian) [ci skip] * New translations en.json (Slovenian) [ci skip] * New translations doorkeeper.en.yml (Slovak) [ci skip] * New translations simple_form.en.yml (Slovak) [ci skip] * New translations en.json (Slovak) [ci skip] * New translations doorkeeper.en.yml (Russian) [ci skip] * New translations simple_form.en.yml (Russian) [ci skip] * New translations en.yml (Russian) [ci skip] * New translations doorkeeper.en.yml (Portuguese) [ci skip] * New translations simple_form.en.yml (Portuguese) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations simple_form.en.yml (Georgian) [ci skip] * New translations doorkeeper.en.yml (Czech) [ci skip] * New translations doorkeeper.en.yml (Greek) [ci skip] * New translations en.yml (Finnish) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations doorkeeper.en.yml (Basque) [ci skip] * New translations simple_form.en.yml (Basque) [ci skip] * New translations en.yml (Basque) [ci skip] * New translations en.json (Basque) [ci skip] * New translations en.json (Greek) [ci skip] * New translations doorkeeper.en.yml (Finnish) [ci skip] * New translations doorkeeper.en.yml (German) [ci skip] * New translations simple_form.en.yml (German) [ci skip] * New translations en.yml (German) [ci skip] * New translations doorkeeper.en.yml (Danish) [ci skip] * New translations simple_form.en.yml (Danish) [ci skip] * New translations en.yml (Danish) [ci skip] * New translations en.json (Danish) [ci skip] * New translations simple_form.en.yml (Finnish) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.yml (Georgian) [ci skip] * New translations en.json (Georgian) [ci skip] * New translations doorkeeper.en.yml (Japanese) [ci skip] * New translations simple_form.en.yml (Japanese) [ci skip] * New translations doorkeeper.en.yml (Italian) [ci skip] * New translations simple_form.en.yml (Italian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations doorkeeper.en.yml (Armenian) [ci skip] * New translations en.yml (Hebrew) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations doorkeeper.en.yml (Hungarian) [ci skip] * New translations simple_form.en.yml (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations doorkeeper.en.yml (Hebrew) [ci skip] * New translations simple_form.en.yml (Hebrew) [ci skip] * New translations simple_form.en.yml (Vietnamese) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.yml (Spanish, Argentina) [ci skip] * New translations en.json (French) [ci skip] * New translations en.yml (Vietnamese) [ci skip] * New translations en.json (French) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations en.yml (Galician) [ci skip] * New translations en.yml (Catalan) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.yml (Polish) [ci skip] * New translations en.yml (Greek) [ci skip] * New translations en.yml (Albanian) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (German) [ci skip] * New translations en.yml (Spanish) [ci skip] * New translations en.yml (German) [ci skip] * New translations devise.en.yml (German) [ci skip] * New translations en.yml (Icelandic) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Italian) [ci skip] * New translations en.yml (Portuguese) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations simple_form.en.yml (Armenian) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.yml (Korean) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations simple_form.en.yml (Occitan) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations simple_form.en.yml (Malayalam) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations devise.en.yml (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations devise.en.yml (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations devise.en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations devise.en.yml (Chinese Traditional) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations en.yml (Chinese Traditional) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations en.yml (Malayalam) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Indonesian) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations en.yml (Hungarian) [ci skip] * New translations activerecord.en.yml (Kabyle) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.yml (Armenian) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Esperanto) [ci skip] * i18n-tasks normalize * yarn manage:translations --- app/javascript/mastodon/locales/de.json | 12 +- app/javascript/mastodon/locales/eo.json | 10 +- app/javascript/mastodon/locales/fr.json | 2 +- app/javascript/mastodon/locales/hr.json | 20 +- app/javascript/mastodon/locales/hy.json | 10 +- app/javascript/mastodon/locales/ml.json | 264 ++++++++++----------- app/javascript/mastodon/locales/nl.json | 12 +- app/javascript/mastodon/locales/oc.json | 12 +- app/javascript/mastodon/locales/tr.json | 4 +- app/javascript/mastodon/locales/vi.json | 2 +- app/javascript/mastodon/locales/zh-CN.json | 22 +- app/javascript/mastodon/locales/zh-TW.json | 256 ++++++++++---------- config/locales/activerecord.kab.yml | 2 +- config/locales/ca.yml | 1 + config/locales/de.yml | 5 + config/locales/devise.zh-TW.yml | 30 +-- config/locales/el.yml | 1 + config/locales/es-AR.yml | 1 + config/locales/es.yml | 1 + config/locales/fr.yml | 1 + config/locales/gl.yml | 5 + config/locales/hu.yml | 41 ++-- config/locales/hy.yml | 48 +++- config/locales/id.yml | 1 + config/locales/is.yml | 1 + config/locales/it.yml | 1 + config/locales/ko.yml | 4 + config/locales/ml.yml | 89 ++++++- config/locales/nl.yml | 21 ++ config/locales/oc.yml | 10 + config/locales/pl.yml | 1 + config/locales/pt-PT.yml | 1 + config/locales/simple_form.hy.yml | 2 + config/locales/simple_form.ml.yml | 4 + config/locales/simple_form.nl.yml | 3 +- config/locales/simple_form.oc.yml | 1 + config/locales/sq.yml | 1 + config/locales/vi.yml | 1 + config/locales/zh-CN.yml | 8 +- config/locales/zh-TW.yml | 28 +++ 40 files changed, 587 insertions(+), 352 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index c2bb08596..1c1773029 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Suchergebnisse", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Reisen und Orte", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Konto gesperrt", "empty_column.account_timeline": "Keine Beiträge!", "empty_column.account_unavailable": "Konto nicht verfügbar", "empty_column.blocks": "Du hast keine Profile blockiert.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Titel ändern", "lists.new.create": "Liste hinzufügen", "lists.new.title_placeholder": "Neuer Titel der Liste", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Jeder gefolgte Benutzer", + "lists.replies_policy.list": "Mitglieder der Liste", + "lists.replies_policy.none": "Niemand", "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", "notifications.filter.statuses": "Updates von Personen, denen du folgst", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Zugriff gewährt.", "notifications.group": "{count} Benachrichtigungen", "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", "notifications_permission_banner.title": "Verpasse nie etwas", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 57e3208fb..5cff6c5af 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -353,13 +353,13 @@ "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", "privacy.change": "Agordi mesaĝan privatecon", - "privacy.direct.long": "Afiŝi nur al menciitaj uzantoj", + "privacy.direct.long": "Videbla nur al menciitaj uzantoj", "privacy.direct.short": "Rekta", - "privacy.private.long": "Afiŝi nur al sekvantoj", - "privacy.private.short": "Nur por sekvantoj", - "privacy.public.long": "Afiŝi en publikaj tempolinioj", + "privacy.private.long": "Videbla nur al viaj sekvantoj", + "privacy.private.short": "Nur al sekvantoj", + "privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj tempolinioj", "privacy.public.short": "Publika", - "privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj", + "privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj tempolinioj", "privacy.unlisted.short": "Nelistigita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 0ea82acbc..214f3aeea 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -438,7 +438,7 @@ "tabs_bar.local_timeline": "Fil public local", "tabs_bar.notifications": "Notifications", "tabs_bar.search": "Chercher", - "time_remaining.days": "{number, plural, one {# day} other {# days}} restants", + "time_remaining.days": "{number, plural, one {# jour} other {# jours}} restant·s", "time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes", "time_remaining.moments": "Encore quelques instants", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 0b4ce2235..f1b78eda4 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -134,7 +134,7 @@ "directory.new_arrivals": "New arrivals", "directory.recently_active": "Nedavno aktivni", "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", + "embed.preview": "Evo kako će izgledati:", "emoji_button.activity": "Aktivnost", "emoji_button.custom": "Prilagođeno", "emoji_button.flags": "Zastave", @@ -149,7 +149,7 @@ "emoji_button.search_results": "Rezultati pretraživanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanje i mjesta", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Račun je suspendiran", "empty_column.account_timeline": "Ovdje nema tootova!", "empty_column.account_unavailable": "Profil nije dostupan", "empty_column.blocks": "Još niste blokirali nikoga.", @@ -165,7 +165,7 @@ "empty_column.home.public_timeline": "javnu vremensku crtu", "empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.mutes": "Niste utišali nijednog korisnika.", "empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.", "empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Promijeni naslov", "lists.new.create": "Dodaj listu", "lists.new.title_placeholder": "Naziv nove liste", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Bilo koji praćeni korisnik", + "lists.replies_policy.list": "Članovi liste", + "lists.replies_policy.none": "Nitko", "lists.replies_policy.title": "Show replies to:", "lists.search": "Traži među praćenim ljudima", "lists.subheading": "Vaše liste", @@ -277,10 +277,10 @@ "media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}", "missing_indicator.label": "Nije pronađeno", "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Trajanje", "mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", + "navigation_bar.apps": "Mobilne aplikacije", "navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.bookmarks": "Bookmarks", "navigation_bar.community_timeline": "Lokalna vremenska crta", @@ -336,7 +336,7 @@ "notifications.filter.statuses": "Updates from people you follow", "notifications.grant_permission": "Grant permission.", "notifications.group": "{count} obavijesti", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Označi sve obavijesti kao pročitane", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", @@ -384,7 +384,7 @@ "search_popout.tips.status": "toot", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "korisnik", - "search_results.accounts": "People", + "search_results.accounts": "Ljudi", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 91377d7c5..4d9d0b63e 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -128,7 +128,7 @@ "conversation.delete": "Ջնջել խօսակցութիւնը", "conversation.mark_as_read": "Նշել որպէս ընթերցուած", "conversation.open": "Դիտել խօսակցութիւնը", - "conversation.with": "{names}֊երի հետ", + "conversation.with": "{names}-ի հետ", "directory.federated": "Յայտնի դաշնեզերքից", "directory.local": "{domain} տիրոյթից միայն", "directory.new_arrivals": "Նորեկներ", @@ -268,7 +268,7 @@ "lists.new.title_placeholder": "Նոր ցանկի վերնագիր", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "Ոչ ոք", "lists.replies_policy.title": "Show replies to:", "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.subheading": "Քո ցանկերը", @@ -334,7 +334,7 @@ "notifications.filter.mentions": "Նշումները", "notifications.filter.polls": "Հարցման արդիւնքները", "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Թոյլատրել։", "notifications.group": "{count} ծանուցում", "notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", @@ -343,7 +343,7 @@ "notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "picture_in_picture.restore": "Հետ բերել", "poll.closed": "Փակ", "poll.refresh": "Թարմացնել", "poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}", @@ -470,7 +470,7 @@ "upload_modal.detect_text": "Հայտնբերել տեքստը նկարից", "upload_modal.edit_media": "Խմբագրել մեդիան", "upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…", "upload_modal.preview_label": "Նախադիտում ({ratio})", "upload_progress.label": "Վերբեռնվում է…", "video.close": "Փակել տեսագրութիւնը", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 9d7b913f9..97b4ec401 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -2,17 +2,17 @@ "account.account_note_header": "കുറിപ്പ്", "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക", "account.badges.bot": "റോബോട്ട്", - "account.badges.group": "കൂട്ടം", - "account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക", + "account.badges.group": "ഗ്രൂപ്പ്", + "account.block": "@{name} -നെ തടയുക", "account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക", "account.blocked": "തടഞ്ഞു", "account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക", "account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക", "account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക", "account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക", "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക", "account.follow": "പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", @@ -67,7 +67,7 @@ "column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ", "column.favourites": "പ്രിയപ്പെട്ടവ", "column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", - "column.home": "ഭവനം", + "column.home": "ഹോം", "column.lists": "പട്ടികകൾ", "column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "column.notifications": "അറിയിപ്പുകൾ", @@ -105,17 +105,17 @@ "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "compose_form.spoiler_placeholder": "നിങ്ങളുടെ മുന്നറിയിപ്പ് ഇവിടെ എഴുതുക", "confirmation_modal.cancel": "റദ്ദാക്കുക", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "തടയുകയും റിപ്പോർട്ടും ചെയ്യുക", "confirmations.block.confirm": "തടയുക", - "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.block.message": "{name} തടയാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", "confirmations.delete.confirm": "മായ്ക്കുക", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "confirmations.delete_list.confirm": "മായ്ക്കുക", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", + "confirmations.domain_block.confirm": "മുഴുവൻ ഡൊമെയ്‌നും തടയുക", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?", "confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -133,7 +133,7 @@ "directory.local": "{domain} ൽ നിന്ന് മാത്രം", "directory.new_arrivals": "പുതിയ വരവുകൾ", "directory.recently_active": "അടുത്തിടെയായി സജീവമായ", - "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.", "embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:", "emoji_button.activity": "പ്രവര്‍ത്തനം", "emoji_button.custom": "സ്വന്തമായ ഭേദഗതി", @@ -141,7 +141,7 @@ "emoji_button.food": "ഭക്ഷണവും പാനീയവും", "emoji_button.label": "ഇമോജി ചേർക്കുക", "emoji_button.nature": "പ്രകൃതി", - "emoji_button.not_found": "എമോജി പാടില്ല (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "ഇമോജി പാടില്ല (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "വസ്തുക്കൾ", "emoji_button.people": "ആളുകൾ", "emoji_button.recent": "അടിക്കടി ഉപയോഗിക്കുന്നവ", @@ -149,7 +149,7 @@ "emoji_button.search_results": "തിരച്ചിൽ ഫലങ്ങൾ", "emoji_button.symbols": "ചിഹ്നങ്ങൾ", "emoji_button.travel": "യാത്രയും സ്ഥലങ്ങളും", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "അക്കൗണ്ട് താൽക്കാലികമായി നിർത്തിവച്ചു", "empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!", "empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല", "empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.", @@ -160,7 +160,7 @@ "empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.hashtag": "ഈ ഹാഷ്‌ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home.public_timeline": "പൊതു സമയരേഖ", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", @@ -179,7 +179,7 @@ "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.developers": "വികസിപ്പിക്കുന്നവർ", - "getting_started.directory": "രൂപരേഖ നാമഗൃഹസൂചി", + "getting_started.directory": "പ്രൊഫൈൽ ഡയറക്ടറി", "getting_started.documentation": "രേഖാ സമാഹരണം", "getting_started.heading": "തുടക്കം കുറിക്കുക", "getting_started.invite": "ആളുകളെ ക്ഷണിക്കുക", @@ -190,7 +190,7 @@ "hashtag.column_header.tag_mode.any": "അല്ലെങ്കിൽ {additional}", "hashtag.column_header.tag_mode.none": "{additional} ഇല്ലാതെ", "hashtag.column_settings.select.no_options_message": "ഒരു സൂചനയും കണ്ടെത്തിയില്ല", - "hashtag.column_settings.select.placeholder": "ചർച്ചാവിഷയങ്ങൾ എഴുതുക…", + "hashtag.column_settings.select.placeholder": "ഹാഷ്ടാഗുകൾ എഴുതുക…", "hashtag.column_settings.tag_mode.all": "ഇവയെല്ലാം", "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", @@ -206,7 +206,7 @@ "introduction.federation.action": "അടുത്തത്", "introduction.federation.federated.headline": "സംയുക്തമാക്കിയ", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "ഭവനം", + "introduction.federation.home.headline": "ഹോം", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.local.headline": "പ്രാദേശികം", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", @@ -233,17 +233,17 @@ "keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്", "keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ", "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", + "keyboard_shortcuts.open_media": "മീഡിയ തുറക്കാൻ", "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്", "keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", @@ -268,7 +268,7 @@ "lists.new.title_placeholder": "New list title", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "ആരുമില്ല", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "എന്റെ പട്ടികകൾ", @@ -277,208 +277,208 @@ "media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}", "missing_indicator.label": "കാണാനില്ല", "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", + "mute_modal.duration": "കാലാവധി", "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "അടയാളങ്ങൾ", - "navigation_bar.community_timeline": "Local timeline", + "mute_modal.indefinite": "അനിശ്ചിതകാല", + "navigation_bar.apps": "മൊബൈൽ ആപ്പുകൾ", + "navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", + "navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ", + "navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ", "navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "navigation_bar.direct": "നേരിട്ടുള്ള സന്ദേശങ്ങൾ", + "navigation_bar.discover": "കണ്ടെത്തുക", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", + "navigation_bar.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", + "navigation_bar.favourites": "പ്രിയപ്പെട്ടവ", "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", + "navigation_bar.info": "ഈ സെർവറിനെക്കുറിച്ച്", "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", + "navigation_bar.lists": "ലിസ്റ്റുകൾ", + "navigation_bar.logout": "ലോഗൗട്ട്", + "navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", + "navigation_bar.preferences": "ക്രമീകരണങ്ങൾ", "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", + "navigation_bar.security": "സുരക്ഷ", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", + "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", + "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", + "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", + "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു", + "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", + "notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:", + "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക", "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.show": "കാണിക്കുക", "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:", "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New toots:", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", + "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", + "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", + "notifications.filter.all": "എല്ലാം", + "notifications.filter.boosts": "ബൂസ്റ്റുകൾ", + "notifications.filter.favourites": "പ്രിയപ്പെട്ടവ", + "notifications.filter.follows": "പിന്തുടരുന്നു", "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.filter.polls": "പോൾ ഫലങ്ങൾ", + "notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്‌ഡേറ്റുകൾ", + "notifications.grant_permission": "അനുമതി നൽകുക.", + "notifications.group": "{count} അറിയിപ്പുകൾ", + "notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "picture_in_picture.restore": "തിരികെ വയ്ക്കുക", + "poll.closed": "അടച്ചു", + "poll.refresh": "പുതുക്കുക", "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", + "poll.vote": "വോട്ട് ചെയ്യുക", "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", + "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "നേരിട്ട്", "privacy.private.long": "Post to followers only", "privacy.private.short": "Followers-only", "privacy.public.long": "Post to public timelines", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "refresh": "പുതുക്കുക", + "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", + "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "ഇപ്പോൾ", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", + "relative_time.today": "ഇന്ന്", + "reply_indicator.cancel": "റദ്ദാക്കുക", "report.forward": "Forward to {target}", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ", + "report.submit": "സമർപ്പിക്കുക", "report.target": "Report {target}", - "search.placeholder": "Search", + "search.placeholder": "തിരയുക", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.hashtag": "ഹാഷ്ടാഗ്", + "search_popout.tips.status": "ടൂട്ട്", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_popout.tips.user": "ഉപയോക്താവ്", + "search_results.accounts": "ആളുകൾ", + "search_results.hashtags": "ഹാഷ്ടാഗുകൾ", + "search_results.statuses": "ടൂട്ടുകൾ", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", + "status.block": "@{name} -നെ തടയുക", + "status.bookmark": "ബുക്ക്മാർക്ക്", "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", + "status.cannot_reblog": "ഈ പോസ്റ്റ് ബൂസ്റ്ചെയ്യാൻ കഴിയില്ല", + "status.copy": "ടൂട്ടിലേക്ക് ലിങ്ക് പകർത്തുക", "status.delete": "മായ്ക്കുക", "status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്‌ച", "status.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക", "status.embed": "ഉൾച്ചേർക്കുക", "status.favourite": "പ്രിയപ്പെട്ടത്", - "status.filtered": "Filtered", + "status.filtered": "ഫിൽട്ടർ ചെയ്‌തു", "status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക", - "status.media_hidden": "Media hidden", + "status.media_hidden": "മീഡിയ മറച്ചു", "status.mention": "@{name} സൂചിപ്പിക്കുക", - "status.more": "More", - "status.mute": "Mute @{name}", + "status.more": "കൂടുതൽ", + "status.mute": "@{name}-നെ നിശ്ശബ്ദമാക്കുക", "status.mute_conversation": "Mute conversation", "status.open": "Expand this status", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", + "status.read_more": "കൂടുതൽ വായിക്കുക", + "status.reblog": "ബൂസ്റ്റ്", "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", + "status.reblogged_by": "{name} ബൂസ്റ്റ് ചെയ്തു", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", + "status.redraft": "ഇല്ലാതാക്കുക & വീണ്ടും ഡ്രാഫ്റ്റ് ചെയ്യുക", + "status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക", + "status.reply": "മറുപടി", "status.replyAll": "Reply to thread", "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", + "status.share": "പങ്കിടുക", + "status.show_less": "കുറച്ച് കാണിക്കുക", "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", + "status.show_more": "കൂടുതകൽ കാണിക്കുക", + "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", + "status.uncached_media_warning": "ലഭ്യമല്ല", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", + "suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…", + "tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ", + "tabs_bar.home": "ഹോം", + "tabs_bar.local_timeline": "പ്രാദേശികം", + "tabs_bar.notifications": "അറിയിപ്പുകൾ", + "tabs_bar.search": "തിരയുക", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "പിന്തുടരുന്നവർ", + "timeline_hint.resources.follows": "പിന്തുടരുന്നു", + "timeline_hint.resources.statuses": "പഴയ ടൂട്ടുകൾ", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", + "trends.trending_now": "ഇപ്പോൾ ട്രെൻഡിംഗ്", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", - "units.short.million": "{count}M", + "units.short.million": "{count}ദശലക്ഷം", "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", + "upload_area.title": "അപ്‌ലോഡുചെയ്യാൻ വലിച്ചിടുക", + "upload_button.label": "ഇമേജുകൾ, ഒരു വീഡിയോ അല്ലെങ്കിൽ ഓഡിയോ ഫയൽ ചേർക്കുക", + "upload_error.limit": "ഫയൽ അപ്‌ലോഡ് പരിധി കവിഞ്ഞു.", "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", + "upload_form.audio_description": "കേൾവിശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ", + "upload_form.description": "കാഴ്ചശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ", + "upload_form.edit": "തിരുത്തുക", + "upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക", + "upload_form.undo": "ഇല്ലാതാക്കുക", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", + "upload_modal.apply": "പ്രയോഗിക്കുക", + "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", + "upload_modal.edit_media": "മീഡിയ തിരുത്തുക", "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", + "video.close": "വീഡിയോ അടയ്ക്കുക", + "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", + "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", + "video.hide": "വീഡിയോ മറയ്ക്കുക", "video.mute": "Mute sound", "video.pause": "Pause", "video.play": "Play", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index c910a28ab..e19f0b6d3 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Account opgeschort", "empty_column.account_timeline": "Hier zijn geen toots!", "empty_column.account_unavailable": "Profiel is niet beschikbaar", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Titel veranderen", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Elke gevolgde gebruiker", + "lists.replies_policy.list": "Leden van de lijst", + "lists.replies_policy.none": "Niemand", "lists.replies_policy.title": "Toon reacties aan:", "lists.search": "Zoek naar mensen die je volgt", "lists.subheading": "Jouw lijsten", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Vermeldingen", "notifications.filter.polls": "Pollresultaten", "notifications.filter.statuses": "Updates van mensen die je volgt", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Toestemming geven.", "notifications.group": "{count} meldingen", "notifications.mark_as_read": "Markeer elke melding als gelezen", "notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd", "notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Desktopmeldingen zijn niet beschikbaar omdat de benodigde toestemming niet is verleend.", "notifications_permission_banner.enable": "Desktopmeldingen inschakelen", "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open is. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.", "notifications_permission_banner.title": "Mis nooit meer iets", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index ba41f83d6..f56d337d3 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Resultats de recèrca", "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Compte suspendut", "empty_column.account_timeline": "Cap de tuts aquí !", "empty_column.account_unavailable": "Perfil pas disponible", "empty_column.blocks": "Avètz pas blocat degun pel moment.", @@ -266,9 +266,9 @@ "lists.edit.submit": "Cambiar lo títol", "lists.new.create": "Ajustar una lista", "lists.new.title_placeholder": "Títol de la nòva lista", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Quin seguidor que siá", + "lists.replies_policy.list": "Membres de la lista", + "lists.replies_policy.none": "Degun", "lists.replies_policy.title": "Mostrar las responsas a :", "lists.search": "Cercar demest lo mond que seguètz", "lists.subheading": "Vòstras listas", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "Mencions", "notifications.filter.polls": "Resultats del sondatge", "notifications.filter.statuses": "Mesas a jorn del monde que seguissètz", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Acordar l’autorizacion.", "notifications.group": "{count} notificacions", "notifications.mark_as_read": "Marcar totas las notificacions coma legidas", "notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas d’autorizacion navigador", "notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "Las notificacions de burèu son pas indisponiblas perque las permissions requeridas son pas estadas acordadas.", "notifications_permission_banner.enable": "Activar las notificacions burèu", "notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.", "notifications_permission_banner.title": "Manquetz pas jamai res", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 76407efce..1d56d169c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -149,7 +149,7 @@ "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Hesap askıya alındı", "empty_column.account_timeline": "Burada hiç toot yok!", "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", @@ -267,7 +267,7 @@ "lists.new.create": "Liste ekle", "lists.new.title_placeholder": "Yeni liste başlığı", "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.list": "Listenin üyeleri", "lists.replies_policy.none": "No one", "lists.replies_policy.title": "Yanıtları göster:", "lists.search": "Takip ettiğiniz kişiler arasından arayın", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 4814dda91..14c74830b 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -179,7 +179,7 @@ "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "generic.saved": "Đã lưu", "getting_started.developers": "Nhà phát triển", - "getting_started.directory": "Cộng đồng", + "getting_started.directory": "Mạng lưới", "getting_started.documentation": "Tài liệu", "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index f6af15198..6c746bf96 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -133,7 +133,7 @@ "directory.local": "仅来自 {domain}", "directory.new_arrivals": "新来者", "directory.recently_active": "最近活跃", - "embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。", + "embed.instructions": "要在你的网站上嵌入此嘟文,请复制以下代码。", "embed.preview": "它会像这样显示出来:", "emoji_button.activity": "活动", "emoji_button.custom": "自定义", @@ -149,7 +149,7 @@ "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", "emoji_button.travel": "旅行和地点", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "账户被封禁", "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你目前没有屏蔽任何用户。", @@ -163,7 +163,7 @@ "empty_column.hashtag": "这个话题标签下暂时没有内容。", "empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。", "empty_column.home.public_timeline": "公共时间轴", - "empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", + "empty_column.list": "此列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", @@ -266,9 +266,9 @@ "lists.edit.submit": "更改标题", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "任何被关注的用户", + "lists.replies_policy.list": "列表成员", + "lists.replies_policy.none": "没有人", "lists.replies_policy.title": "显示回复给:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", @@ -334,12 +334,12 @@ "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", "notifications.filter.statuses": "你关注的人的动态", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "授予权限", "notifications.group": "{count} 条通知", "notifications.mark_as_read": "将所有通知标为已读", "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", "notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "所需权限未被授予,所以桌面通知不可用", "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。您可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", @@ -403,7 +403,7 @@ "status.favourite": "喜欢", "status.filtered": "已过滤", "status.load_more": "加载更多", - "status.media_hidden": "隐藏媒体内容", + "status.media_hidden": "已隐藏的媒体内容", "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "隐藏 @{name}", @@ -429,7 +429,7 @@ "status.show_more_all": "显示所有内容", "status.show_thread": "显示全部对话", "status.uncached_media_warning": "暂不可用", - "status.unmute_conversation": "不再隐藏此对话", + "status.unmute_conversation": "将此对话解除静音", "status.unpin": "在个人资料页面取消置顶", "suggestions.dismiss": "关闭建议", "suggestions.header": "您可能会感兴趣…", @@ -454,7 +454,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "将文件拖放到此处开始上传", - "upload_button.label": "上传媒体文件", + "upload_button.label": "上传图片、视频或音频", "upload_error.limit": "文件大小超过限制。", "upload_error.poll": "投票中不允许上传文件。", "upload_form.audio_description": "为听障人士添加文字描述", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 46cfc4359..cc996e91b 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -4,27 +4,27 @@ "account.badges.bot": "機器人", "account.badges.group": "群組", "account.block": "封鎖 @{name}", - "account.block_domain": "隱藏來自 {domain} 的所有內容", + "account.block_domain": "封鎖來自 {domain} 網域的所有內容", "account.blocked": "已封鎖", - "account.browse_more_on_origin_server": "在該服務器的個人檔案頁上瀏覽更多", + "account.browse_more_on_origin_server": "在該伺服器的個人檔案頁上瀏覽更多", "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", - "account.disable_notifications": "當 @{name} 嘟文時不要再通知我", - "account.domain_blocked": "已隱藏網域", + "account.disable_notifications": "取消來自 @{name} 嘟文的通知", + "account.domain_blocked": "已封鎖網域", "account.edit_profile": "編輯個人資料", "account.enable_notifications": "當 @{name} 嘟文時通知我", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注者", - "account.followers.empty": "尚沒有人關注這位使用者。", + "account.followers.empty": "尚未有人關注這位使用者。", "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", - "account.follows.empty": "這位使用者尚未關注任何使用者。", - "account.follows_you": "關注了你", - "account.hide_reblogs": "隱藏來自 @{name} 的轉推", - "account.last_status": "上次活躍", + "account.follows.empty": "這位使用者尚未關注任何人。", + "account.follows_you": "關注了您", + "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", + "account.last_status": "上次活躍時間", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", - "account.locked_info": "這隻帳戶的隱私狀態被設成鎖定。該擁有者會手動審核能關注這隻帳號的人。", + "account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已遷移至:", @@ -40,13 +40,13 @@ "account.show_reblogs": "顯示來自 @{name} 的嘟文", "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", "account.unblock": "取消封鎖 @{name}", - "account.unblock_domain": "取消隱藏 {domain}", + "account.unblock_domain": "取消封鎖域名 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消靜音 @{name}", "account.unmute_notifications": "重新接收來自 @{name} 的通知", "account_note.placeholder": "按此添加備注", - "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", + "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生了非預期的錯誤。", "alert.unexpected.title": "哎呀!", @@ -59,17 +59,17 @@ "bundle_modal_error.close": "關閉", "bundle_modal_error.message": "載入此元件時發生錯誤。", "bundle_modal_error.retry": "重試", - "column.blocks": "封鎖的使用者", + "column.blocks": "已封鎖的使用者", "column.bookmarks": "書籤", "column.community": "本機時間軸", "column.direct": "私訊", "column.directory": "瀏覽個人資料", - "column.domain_blocks": "隱藏的網域", - "column.favourites": "讚美集", + "column.domain_blocks": "已封鎖的網域", + "column.favourites": "收藏", "column.follow_requests": "關注請求", - "column.home": "主頁", + "column.home": "首頁", "column.lists": "名單", - "column.mutes": "被靜音的使用者", + "column.mutes": "已靜音的使用者", "column.notifications": "通知", "column.pins": "釘選的嘟文", "column.public": "聯邦時間軸", @@ -81,116 +81,116 @@ "column_header.show_settings": "顯示設定", "column_header.unpin": "取消釘選", "column_subheading.settings": "設定", - "community.column_settings.local_only": "只有本地", + "community.column_settings.local_only": "只有本機", "community.column_settings.media_only": "只有媒體", "community.column_settings.remote_only": "只有遠端", "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。", "compose_form.direct_message_warning_learn_more": "了解更多", - "compose_form.hashtag_warning": "由於這則嘟文被設定成「不公開」,所以它將不會被列在任何主題標籤下。只有公開的嘟文才能藉主題標籤找到。", + "compose_form.hashtag_warning": "由於這則嘟文設定為「不公開」,它將不會被列於任何主題標籤下。只有公開的嘟文才能藉由主題標籤找到。", "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有關注者能看的嘟文。", "compose_form.lock_disclaimer.lock": "上鎖", - "compose_form.placeholder": "您正在想些什麼?", - "compose_form.poll.add_option": "新增選擇", + "compose_form.placeholder": "正在想些什麼嗎?", + "compose_form.poll.add_option": "新增選項", "compose_form.poll.duration": "投票期限", - "compose_form.poll.option_placeholder": "第 {number} 個選擇", - "compose_form.poll.remove_option": "移除此選擇", + "compose_form.poll.option_placeholder": "第 {number} 個選項", + "compose_form.poll.remove_option": "移除此選項", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為允許單一選項", "compose_form.publish": "嘟出去", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "標記媒體為敏感內容", "compose_form.sensitive.marked": "此媒體被標記為敏感內容", - "compose_form.sensitive.unmarked": "此媒體未標記為敏感內容", + "compose_form.sensitive.unmarked": "此媒體未被標記為敏感內容", "compose_form.spoiler.marked": "正文已隱藏到警告之後", "compose_form.spoiler.unmarked": "正文未被隱藏", "compose_form.spoiler_placeholder": "請在此處寫入警告訊息", "confirmation_modal.cancel": "取消", "confirmations.block.block_and_report": "封鎖並檢舉", "confirmations.block.confirm": "封鎖", - "confirmations.block.message": "確定封鎖 {name} ?", + "confirmations.block.message": "確定要封鎖 {name} 嗎?", "confirmations.delete.confirm": "刪除", - "confirmations.delete.message": "你確定要刪除這條嘟文?", + "confirmations.delete.message": "您確定要刪除這則嘟文?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "確定永久刪除此名單?", - "confirmations.domain_block.confirm": "隱藏整個網域", - "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。", + "confirmations.domain_block.confirm": "隱藏整個域名", + "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳號就能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。", "confirmations.logout.confirm": "登出", "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", - "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注你。", + "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注您。", "confirmations.mute.message": "確定靜音 {name} ?", "confirmations.redraft.confirm": "刪除並重新編輯", - "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及贊美,且回覆這則的嘟文將會變成獨立的嘟文。", + "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。", "confirmations.reply.confirm": "回覆", "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消關注", - "confirmations.unfollow.message": "真的要取消關注 {name} 嗎?", + "confirmations.unfollow.message": "確定要取消關注 {name} 嗎?", "conversation.delete": "刪除對話", - "conversation.mark_as_read": "標為已讀", + "conversation.mark_as_read": "標記為已讀", "conversation.open": "檢視對話", "conversation.with": "與 {names}", "directory.federated": "來自已知聯邦宇宙", - "directory.local": "僅來自 {domain}", + "directory.local": "僅來自 {domain} 網域", "directory.new_arrivals": "新人", "directory.recently_active": "最近活躍", - "embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。", - "embed.preview": "他會顯示成這樣:", + "embed.instructions": "要在您的網站嵌入此嘟文,請複製以下程式碼。", + "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", "emoji_button.custom": "自訂", - "emoji_button.flags": "旗標", - "emoji_button.food": "飲食", + "emoji_button.flags": "旗幟", + "emoji_button.food": "食物 & 飲料", "emoji_button.label": "插入表情符號", - "emoji_button.nature": "大自然", + "emoji_button.nature": "自然", "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", - "emoji_button.people": "使用者", + "emoji_button.people": "人物", "emoji_button.recent": "最常使用", "emoji_button.search": "搜尋…", "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "帳號被暫停", "empty_column.account_timeline": "這裡還沒有嘟文!", "empty_column.account_unavailable": "無法取得個人資料", - "empty_column.blocks": "你還沒有封鎖任何使用者。", - "empty_column.bookmarked_statuses": "你還沒建立任何書籤。這裡將會顯示你建立的書籤。", - "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!", + "empty_column.blocks": "您還沒有封鎖任何使用者。", + "empty_column.bookmarked_statuses": "您還沒建立任何書籤。當您建立書簽時,它將於此顯示。", + "empty_column.community": "本機時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", - "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒讚美过任何嘟文。這裡將會顯示你讚美过的嘟文。", - "empty_column.favourites": "還沒人讚美這則嘟文。當有人點讚後,他們將於此列出。", + "empty_column.domain_blocks": "尚未封鎖任何網域。", + "empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。", + "empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", "empty_column.home.public_timeline": "公開時間軸", "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。", - "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", - "empty_column.mutes": "你尚未靜音任何使用者。", + "empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。", + "empty_column.mutes": "您尚未靜音任何使用者。", "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", - "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,故無法正常顯示頁面。", + "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。", "error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。", - "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "error.unexpected_crash.next_steps_addons": "請嘗試重新整理頁面。如果狀況沒有進展,您可以嘗試使用不同的瀏覽器或 Mastodon 應用程式來檢視。", - "errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿", - "errors.unexpected_crash.report_issue": "舉報問題", + "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", + "error.unexpected_crash.next_steps_addons": "請嘗試關閉他們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", + "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", + "errors.unexpected_crash.report_issue": "回報問題", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", - "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。", + "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳號的追蹤請求。", "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", "getting_started.documentation": "文件", "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", - "getting_started.open_source_notice": "Mastodon 是開源軟體。你可以在 GitHub {github} 上貢獻或是回報問題。", - "getting_started.security": "安全性", + "getting_started.open_source_notice": "Mastodon 是開源軟體。您可以在 GitHub {github} 上貢獻或是回報問題。", + "getting_started.security": "帳號安全性設定", "getting_started.terms": "服務條款", - "hashtag.column_header.tag_mode.all": "以及{additional}", - "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而無需{additional}", + "hashtag.column_header.tag_mode.all": "以及 {additional}", + "hashtag.column_header.tag_mode.any": "或是 {additional}", + "hashtag.column_header.tag_mode.none": "而無需 {additional}", "hashtag.column_settings.select.no_options_message": "找不到建議", - "hashtag.column_settings.select.placeholder": "輸入主題標籤…", + "hashtag.column_settings.select.placeholder": "請輸入主題標籤…", "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", @@ -204,38 +204,38 @@ "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "站台聯盟", - "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。", + "introduction.federation.federated.headline": "聯邦", + "introduction.federation.federated.text": "來自聯盟宇宙中其他伺服器的公開嘟文將會在聯邦時間軸中顯示。", "introduction.federation.home.headline": "首頁", "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", "introduction.federation.local.headline": "本機", "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", "introduction.interactions.action": "完成教學!", - "introduction.interactions.favourite.headline": "讚美", - "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者讚美嘟文,讓作者知道您喜歡這則嘟文。", + "introduction.interactions.favourite.headline": "收藏", + "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", "introduction.interactions.reblog.headline": "轉嘟", "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", "introduction.interactions.reply.headline": "回覆", "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", "introduction.welcome.action": "開始旅程吧!", "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。", + "introduction.welcome.text": "歡迎來到聯盟宇宙!稍候您就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它承載了您的個人資料,所以請記住它的名字。", "keyboard_shortcuts.back": "返回上一頁", "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", "keyboard_shortcuts.boost": "轉嘟", "keyboard_shortcuts.column": "將焦點放在其中一欄的嘟文", "keyboard_shortcuts.compose": "將焦點移至撰寫文字區塊", - "keyboard_shortcuts.description": "描述", + "keyboard_shortcuts.description": "說明", "keyboard_shortcuts.direct": "開啟私訊欄", - "keyboard_shortcuts.down": "往下移動名單項目", + "keyboard_shortcuts.down": "在名單中往下移動", "keyboard_shortcuts.enter": "檢視嘟文", - "keyboard_shortcuts.favourite": "讚美", - "keyboard_shortcuts.favourites": "開啟讚美者名錄", - "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", + "keyboard_shortcuts.favourite": "加到收藏", + "keyboard_shortcuts.favourites": "開啟收藏名單", + "keyboard_shortcuts.federated": "開啟聯邦時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", "keyboard_shortcuts.home": "開啟首頁時間軸", "keyboard_shortcuts.hotkey": "快速鍵", - "keyboard_shortcuts.legend": "顯示此列表", + "keyboard_shortcuts.legend": "顯示此圖例", "keyboard_shortcuts.local": "開啟本機時間軸", "keyboard_shortcuts.mention": "提及作者", "keyboard_shortcuts.muted": "開啟靜音使用者名單", @@ -244,7 +244,7 @@ "keyboard_shortcuts.open_media": "開啟媒體", "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", - "keyboard_shortcuts.reply": "回覆", + "keyboard_shortcuts.reply": "回應嘟文", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "將焦點移至搜尋框", "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", @@ -253,7 +253,7 @@ "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", "keyboard_shortcuts.toot": "開始發出新嘟文", "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點", - "keyboard_shortcuts.up": "往上移動名單項目", + "keyboard_shortcuts.up": "在名單中往上移動", "lightbox.close": "關閉", "lightbox.compress": "折疊圖片檢視框", "lightbox.expand": "展開圖片檢視框", @@ -266,13 +266,13 @@ "lists.edit.submit": "變更標題", "lists.new.create": "新增名單", "lists.new.title_placeholder": "新名單標題", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "顯示回覆", + "lists.replies_policy.followed": "任何跟隨的使用者", + "lists.replies_policy.list": "列表成員", + "lists.replies_policy.none": "沒有人", + "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", - "load_pending": "{count, plural, other {# 個新項目}}", + "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", "loading_indicator.label": "讀取中...", "media_gallery.toggle_visible": "切換可見性", "missing_indicator.label": "找不到", @@ -289,7 +289,7 @@ "navigation_bar.discover": "探索", "navigation_bar.domain_blocks": "隱藏的網域", "navigation_bar.edit_profile": "編輯個人資料", - "navigation_bar.favourites": "讚美集", + "navigation_bar.favourites": "收藏", "navigation_bar.filters": "靜音詞彙", "navigation_bar.follow_requests": "關注請求", "navigation_bar.follows_and_followers": "關注及關注者", @@ -303,45 +303,45 @@ "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", - "notification.favourite": "{name} 讚美了你的嘟文", - "notification.follow": "{name} 關注了你", - "notification.follow_request": "{name} 要求關注你", - "notification.mention": "{name} 提到了你", + "notification.favourite": "{name} 把您的嘟文加入了最愛", + "notification.follow": "{name} 關注了您", + "notification.follow_request": "{name} 要求關注您", + "notification.mention": "{name} 提到了您", "notification.own_poll": "您的投票已結束", - "notification.poll": "您投過的投票已經結束", - "notification.reblog": "{name}轉嘟了你的嘟文", + "notification.poll": "您曾投過的投票已經結束", + "notification.reblog": "{name} 轉嘟了您的嘟文", "notification.status": "{name} 剛剛嘟文", "notifications.clear": "清除通知", - "notifications.clear_confirmation": "確定要永久清除你的通知嗎?", + "notifications.clear_confirmation": "確定要永久清除您的通知嗎?", "notifications.column_settings.alert": "桌面通知", - "notifications.column_settings.favourite": "被讚美:", + "notifications.column_settings.favourite": "最愛:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", "notifications.column_settings.follow": "新關注者:", - "notifications.column_settings.follow_request": "新的關注請求:", + "notifications.column_settings.follow_request": "新的關注請求:", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票結果:", - "notifications.column_settings.push": "推送通知", + "notifications.column_settings.push": "推播通知", "notifications.column_settings.reblog": "轉嘟:", "notifications.column_settings.show": "在欄位中顯示", - "notifications.column_settings.sound": "播放音效", - "notifications.column_settings.status": "新嘟文:", + "notifications.column_settings.sound": "播放聲音", + "notifications.column_settings.status": "新嘟文:", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", - "notifications.filter.favourites": "讚美集", + "notifications.filter.favourites": "最愛", "notifications.filter.follows": "關注的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", "notifications.filter.statuses": "已跟隨使用者的最新動態", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "授予權限", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "將所有通知都標記為已讀", "notifications.permission_denied": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用", "notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_required": "因為尚未授予所需的權限,所以桌面通知不可用。", "notifications_permission_banner.enable": "啟用桌面通知", - "notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", + "notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不要錯過任何東西!", "picture_in_picture.restore": "還原", "poll.closed": "已關閉", @@ -349,37 +349,37 @@ "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.vote": "投票", - "poll.voted": "你已對此問題投票", + "poll.voted": "您已對此問題投票", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", - "privacy.change": "調整隱私狀態", - "privacy.direct.long": "只有被提到的使用者能看到", + "privacy.change": "調整嘟文隱私狀態", + "privacy.direct.long": "只有被提及的使用者能看到", "privacy.direct.short": "私訊", - "privacy.private.long": "只有關注你的使用者能看到", + "privacy.private.long": "只有關注您的使用者能看到", "privacy.private.short": "僅關注者", - "privacy.public.long": "嘟到公開時間軸", + "privacy.public.long": "公開,且顯示於公開時間軸", "privacy.public.short": "公開", "privacy.unlisted.long": "公開,但不會顯示在公開時間軸", "privacy.unlisted.short": "不公開", "refresh": "重新整理", "regeneration_indicator.label": "載入中…", - "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", + "regeneration_indicator.sublabel": "您的主頁時間軸正在準備中!", "relative_time.days": "{number} 天", - "relative_time.hours": "{number} 小時", + "relative_time.hours": "{number}小時前", "relative_time.just_now": "剛剛", - "relative_time.minutes": "{number} 分", + "relative_time.minutes": "{number} 分前", "relative_time.seconds": "{number} 秒", "relative_time.today": "今天", "reply_indicator.cancel": "取消", "report.forward": "轉寄到 {target}", - "report.forward_hint": "這個帳戶屬於其他站點。要像該站點發送匿名的檢舉訊息嗎?", - "report.hint": "這項訊息會發送到您伺服器的管理員。你可以提供檢舉這個帳戶的理由:", - "report.placeholder": "更多訊息", + "report.forward_hint": "這個帳戶屬於其他伺服器。要像該伺服器發送匿名的檢舉訊息嗎?", + "report.hint": "這項訊息會發送到您伺服器的管理員。您可以提供檢舉這個帳戶的理由:", + "report.placeholder": "其他備註", "report.submit": "送出", "report.target": "檢舉 {target}", "search.placeholder": "搜尋", "search_popout.search_format": "進階搜尋格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜尋由你撰寫、贊美、轉嘟或提你的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶名稱和標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、收藏、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶顯示名稱和主題標籤。", "search_popout.tips.hashtag": "主題標籤", "search_popout.tips.status": "嘟文", "search_popout.tips.text": "輸入簡單的文字,搜尋符合的使用者名稱,帳戶名稱與標籤", @@ -394,32 +394,32 @@ "status.block": "封鎖 @{name}", "status.bookmark": "書籤", "status.cancel_reblog_private": "取消轉嘟", - "status.cannot_reblog": "這篇嘟文無法被轉嘟", + "status.cannot_reblog": "這則嘟文無法被轉嘟", "status.copy": "複製嘟文連結", "status.delete": "刪除", - "status.detailed_status": "對話的詳細內容", + "status.detailed_status": "詳細的對話內容", "status.direct": "發送私訊給 @{name}", - "status.embed": "嵌入", - "status.favourite": "讚美", + "status.embed": "內嵌", + "status.favourite": "最愛", "status.filtered": "已過濾", "status.load_more": "載入更多", "status.media_hidden": "隱藏媒體內容", - "status.mention": "提到 @{name}", + "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "靜音 @{name}", "status.mute_conversation": "靜音對話", - "status.open": "展開嘟文", + "status.open": "展開此嘟文", "status.pin": "釘選到個人資料頁", "status.pinned": "釘選的嘟文", "status.read_more": "閱讀更多", "status.reblog": "轉嘟", "status.reblog_private": "轉嘟給原有關注者", "status.reblogged_by": "{name} 轉嘟了", - "status.reblogs.empty": "還沒有人轉嘟。如果有,會顯示在這裡。", + "status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。", "status.redraft": "刪除 & 編輯", "status.remove_bookmark": "移除書籤", "status.reply": "回覆", - "status.replyAll": "回覆所有人", + "status.replyAll": "回覆討論串", "status.report": "檢舉 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", @@ -430,15 +430,15 @@ "status.show_thread": "顯示討論串", "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", - "status.unpin": "解除置頂", + "status.unpin": "從個人頁面解除釘選", "suggestions.dismiss": "關閉建議", "suggestions.header": "您可能對這些東西有興趣…", - "tabs_bar.federated_timeline": "其他站點", - "tabs_bar.home": "主頁", - "tabs_bar.local_timeline": "本站", + "tabs_bar.federated_timeline": "聯邦宇宙", + "tabs_bar.home": "首頁", + "tabs_bar.local_timeline": "本機", "tabs_bar.notifications": "通知", "tabs_bar.search": "搜尋", - "time_remaining.days": "剩餘{number, plural, one {# 天數} other {# 天數}}", + "time_remaining.days": "剩餘{number, plural, one {# 天} other {# 天}}", "time_remaining.hours": "剩餘{number, plural, one {# 小時} other {# 小時}}", "time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}", "time_remaining.moments": "剩餘時間", @@ -449,27 +449,27 @@ "timeline_hint.resources.statuses": "更早的嘟文", "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", "trends.trending_now": "目前趨勢", - "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。", + "ui.beforeunload": "如果離開 Mastodon,您的草稿將會不見。", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "拖放來上傳", - "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "上傳圖像、影片、或音樂檔案", "upload_error.limit": "已達到檔案上傳限制。", - "upload_error.poll": "不允許在投票上傳檔案。", - "upload_form.audio_description": "簡單描述內容給聽障人士", + "upload_error.poll": "不允許在投票中上傳檔案。", + "upload_form.audio_description": "描述內容給聽障人士", "upload_form.description": "為視障人士增加文字說明", "upload_form.edit": "編輯", "upload_form.thumbnail": "更改預覽圖", "upload_form.undo": "刪除", - "upload_form.video_description": "簡單描述給聽障或視障人士", + "upload_form.video_description": "描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", "upload_modal.choose_image": "選擇圖片", - "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗", - "upload_modal.detect_text": "從圖片偵測文字", + "upload_modal.description_placeholder": "我能吞下玻璃而不傷身體", + "upload_modal.detect_text": "從圖片中偵測文字", "upload_modal.edit_media": "編輯媒體", - "upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。", + "upload_modal.hint": "於預覽中點擊或拖曳圓圈以選擇將於所有縮圖中顯示的焦點。", "upload_modal.preparing_ocr": "準備 OCR 中……", "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上傳中...", diff --git a/config/locales/activerecord.kab.yml b/config/locales/activerecord.kab.yml index 24e2760da..d6b3c40e4 100644 --- a/config/locales/activerecord.kab.yml +++ b/config/locales/activerecord.kab.yml @@ -3,7 +3,7 @@ kab: activerecord: attributes: poll: - expires_at: Azemz n tagara + expires_at: Azemz n taggara options: Tifranin errors: models: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 439249d1b..ee3c554b4 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -566,6 +566,7 @@ ca: domain_blocks_rationale: title: Mostra el raonament enable_bootstrap_timeline_accounts: + desc_html: Fer que els nous usuaris segueixin automàticament als comptes configurats i la seva línia de temps no arrenqui buida title: Activa els seguiments per defecte per els usuaris nous hero: desc_html: Es mostra en pàgina frontal. Recomanat al menys 600x100px. Si no es configura es mostrarà el del servidor diff --git a/config/locales/de.yml b/config/locales/de.yml index c2013ab8b..34d03f808 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -402,6 +402,8 @@ de: silence: Stummschaltung suspend: Sperre title: Neue Domain-Blockade + obfuscate: Domainname verschleiern + obfuscate_hint: Den Domainnamen in der Liste teilweise verschleiern, wenn die Liste der Domänenbeschränkungen aktiviert ist private_comment: Privater Kommentar private_comment_hint: Kommentar zu dieser Domain-Beschränkung für die interne Nutzung durch die Moderatoren. public_comment: Öffentlicher Kommentar @@ -564,6 +566,7 @@ de: domain_blocks_rationale: title: Rationale anzeigen enable_bootstrap_timeline_accounts: + desc_html: Neue Benutzer automatisch den konfigurierten Konten folgen lassen, sodass ihr Home-Feed nicht leer startet title: Aktiviere die Option "Konten, denen Neu-Angemeldete automatisch folgen" hero: desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Server-Thumbnail dafür verwendet @@ -921,6 +924,8 @@ de: status: Verifizierungsstatus view_proof: Zeige Nachweis imports: + errors: + over_rows_processing_limit: enthält mehr als %{count} Zeilen modes: merge: Zusammenführen merge_long: Behalte existierende Datensätze und füge neue hinzu diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index 6f652f421..f7b087824 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -21,18 +21,18 @@ zh-TW: action: 驗證電子信箱位址 action_with_app: 確認並返回 %{app} explanation: 您已經在 %{host} 上以此電子信箱位址建立了一支帳戶。您距離啟用它只剩一點之遙了。若這不是您,請忽略此信件。 - explanation_when_pending: 您使用此電子信箱位址申請了 %{host} 的邀請。當您確認電子信箱後我們將審核您的申請,而直到核准前您都無法登入。當您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您,請忽略此信件。 + explanation_when_pending: 您使用此電子信箱位址申請了 %{host} 的邀請。當您確認電子信箱後我們將審核您的申請。您可以登入以改變您的細節或刪除您的帳號,但直到您的帳號被核准之前,您無法操作大部分的功能。若您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您,請忽略此信件。 extra_html: 同時也請看看伺服器規則服務條款。 subject: Mastodon:%{instance} 確認說明 title: 驗證電子信箱位址 email_changed: explanation: 您帳戶的電子信箱位址將變更為: - extra: 若您未變更電子信箱,那麼很有可能是某人取得了你帳戶的存取權限。請立刻變更密碼,或當帳戶被鎖定時,請聯絡伺服器的管理員。 + extra: 若您未變更電子信箱,那麼很有可能是某人取得了您帳戶的存取權限。請立刻變更密碼,或當帳戶被鎖定時,請聯絡伺服器的管理員。 subject: Mastodon:已變更電子信箱 title: 新電子信箱位址 password_change: explanation: 您帳戶的密碼已變更。 - extra: 如果您未變更密碼,那麼很有可能是某人取得了帳戶的存取權限。請立刻變更密碼,或若帳戶被鎖定時,請聯絡伺服器的管理員。 + extra: 若您未變更密碼,那麼很有可能是某人取得了您帳戶的存取權限。請立刻變更密碼,或若帳戶被鎖定時,請聯絡伺服器的管理員。 subject: Mastodon:已變更密碼 title: 密碼已變更 reconfirmation_instructions: @@ -43,7 +43,7 @@ zh-TW: reset_password_instructions: action: 變更密碼 explanation: 您已請求帳戶的新密碼。 - extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新連結前不會變更。 + extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新密碼前不會變更。 subject: Mastodon:重設密碼指引 title: 重設密碼 two_factor_disabled: @@ -63,27 +63,27 @@ zh-TW: webauthn_credential: added: explanation: 下面的安全密鑰已經新增至您的帳戶 - subject: 'Mastodon: 新安全密鑰' + subject: Mastodon:新安全密鑰 title: 已新增新安全密鑰 deleted: - explanation: 下面的安全密鑰已經從您的帳戶中移除 - subject: 'Mastodon: 安全密鑰已移除' + explanation: 以下的安全密鑰已經從您的帳戶中移除 + subject: Mastodon:安全密鑰已移除 title: 您的一支安全密鑰已經被移除 webauthn_disabled: explanation: 您的帳戶並沒有啟用安全密鑰認證方式。只能以 TOTP app 產生地成對 token 登入。 - subject: 'Mastodon: 安全密鑰認證方式已關閉' + subject: Mastodon:安全密鑰認證方式已關閉 title: 已關閉安全密鑰 webauthn_enabled: - explanation: 安全密鑰認證已在您的帳戶中啟用。您可以使用安全密鑰登入了。 - subject: 'Mastodon: 以啟用安全密鑰認證' - title: 已開啟安全密鑰 + explanation: 您的帳戶已啟用安全密鑰認證。您可以使用安全密鑰登入了。 + subject: Mastodon:已啟用安全密鑰認證 + title: 已啟用安全密鑰 omniauth_callbacks: failure: 無法透過 %{kind} 認證是否為您,因為「%{reason}」。 success: 成功透過 %{kind} 帳戶登入。 passwords: no_token: 您必須透過密碼重設信件才能存取此頁面。若確實如此,請確定輸入的網址是完整的。 - send_instructions: 若電子信箱位址存在於資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。 - send_paranoid_instructions: 若電子信箱位址存在於資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。 + send_instructions: 若電子信箱位址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。 + send_paranoid_instructions: 若電子信箱位址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。 updated: 您的密碼已成功變更,現在已經登入。 updated_not_active: 您的密碼已成功變更。 registrations: @@ -93,14 +93,14 @@ zh-TW: signed_up_but_locked: 您已註冊成功,但由於您的帳戶已被鎖定,我們無法讓您登入。 signed_up_but_pending: 包含確認連結的訊息已寄到您的電子信箱。按下此連結後我們將審核您的申請。核准後將通知您。 signed_up_but_unconfirmed: 包含確認連結的訊息已寄到您的電子信箱。請前往連結以啟用帳號。若未收到請檢查垃圾郵件資料夾。 - update_needs_confirmation: 已更新您的帳號,但仍需驗證您的新信箱。請檢查電子信箱並前往確認連結來確認新信箱位址。若未收到請檢查垃圾郵件資料夾。 + update_needs_confirmation: 已成功更新您的帳號,但仍需驗證您的新信箱。請檢查電子信箱並前往確認連結來確認新信箱位址。若未收到請檢查垃圾郵件資料夾。 updated: 您的帳戶已成功更新。 sessions: already_signed_out: 已成功登出。 signed_in: 已成功登入。 signed_out: 已成功登出。 unlocks: - send_instructions: 幾分鐘後您將收到確認信件。若未收到此信件,請檢查垃圾郵件資料夾。 + send_instructions: 幾分鐘後您將收到解鎖帳號的指引信件。若未收到請檢查垃圾郵件資料夾。 send_paranoid_instructions: 若此帳號存在,您將在幾分鐘後收到解鎖指引信件。若未收到請檢查垃圾郵件資料夾。 unlocked: 已解鎖您的帳戶,請登入繼續。 errors: diff --git a/config/locales/el.yml b/config/locales/el.yml index 837d6f416..5442d38b8 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -557,6 +557,7 @@ el: domain_blocks_rationale: title: Εμφάνιση σκεπτικού enable_bootstrap_timeline_accounts: + desc_html: Οι νέοι χρήστες να ακολουθούν τους προρυθμισμένουνς λογαριασμούς ώστε η αρχική ροή τους να μην είναι άδεια title: Προεπιλογή παρακολούθησης για τους νέους χρήστες hero: desc_html: Εμφανίζεται στην μπροστινή σελίδα. Συνίσταται τουλάχιστον 600x100px. Όταν λείπει, χρησιμοποιείται η μικρογραφία του κόμβου diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 93f663641..32e079074 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -566,6 +566,7 @@ es-AR: domain_blocks_rationale: title: Mostrar razonamiento enable_bootstrap_timeline_accounts: + desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal principal no comience vacía title: Habilitar seguimientos predeterminados para nuevas cuentas hero: desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor diff --git a/config/locales/es.yml b/config/locales/es.yml index 8d458edc6..0582fd1f1 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -566,6 +566,7 @@ es: domain_blocks_rationale: title: Mostrar la razón de ser enable_bootstrap_timeline_accounts: + desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal de inicio no comience vacía title: Habilitar seguimientos predeterminados para usuarios nuevos hero: desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia diff --git a/config/locales/fr.yml b/config/locales/fr.yml index bed43fee1..0c96d462d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -566,6 +566,7 @@ fr: domain_blocks_rationale: title: Montrer la raison enable_bootstrap_timeline_accounts: + desc_html: Faire suivre automatiquement les comptes configurés aux nouveaux·lles utilisateurs·rices afin que leur flux personnel ne démarre pas vide title: Activer les abonnements par défaut pour les nouveaux·elles utilisateur·rice·s hero: desc_html: Affichée sur la page d’accueil. Au moins 600x100px recommandé. Lorsqu’elle n’est pas définie, se rabat sur la vignette du serveur diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 36980f800..48aaff0ad 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -402,6 +402,8 @@ gl: silence: Silenciar suspend: Suspender title: Novo bloqueo de dominio + obfuscate: Ofuscar o nome de dominio + obfuscate_hint: Ofuscar parcialmente o nome do dominio na lista se está activada a publicación da lista de limitacións de dominio private_comment: Comentario privado private_comment_hint: Comentar sobre esta limitación de dominio para uso interno polos moderadores. public_comment: Comentario público @@ -564,6 +566,7 @@ gl: domain_blocks_rationale: title: Amosar motivo enable_bootstrap_timeline_accounts: + desc_html: Facer que as novas usuarias sigan automáticamente certas contas para que así a cronoloxía inicial non esté baleira title: Activar seguimentos por omisión para novas usuarias hero: desc_html: Amosado na páxina principal. Polo menos 600x100px recomendados. Se non está definido, estará por defecto a miniatura do servidor @@ -921,6 +924,8 @@ gl: status: Estado da validación view_proof: Ver proba imports: + errors: + over_rows_processing_limit: contén máis de %{count} filas modes: merge: Fusionar merge_long: Manter os rexistros actuais e engadir novos diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 0fc35c9ac..97596ff0c 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -21,9 +21,9 @@ hu: federation_hint_html: Egy %{instance} fiókkal bármely más Mastodon szerveren vagy a föderációban lévő felhasználót követni tudsz. get_apps: Próbálj ki egy mobil appot hosted_on: "%{domain} Mastodon szerver" - instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. - -' + instance_actor_flash: | + Ez a fiók virtuális, magát a szervert reprezentálja, nem pedig konkrét + felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni, hacsak nem akarod a teljes szervert kitiltani, mely esetben a domain tiltásának használata javasolt. learn_more: Tudj meg többet privacy_policy: Adatvédelmi szabályzat see_whats_happening: Nézd, mi történik @@ -60,7 +60,9 @@ hu: one: Követő other: Követő following: Követett - instance_actor_flash: Ez a fiók virtuális és magát a kiszolgálót reprezentálja, nem egy konkrét felhasználót. Föderációs célokból használt, és nem szabad felfüggeszteni. + instance_actor_flash: |- + Ez a fiók virtuális, magát a szervert reprezentálja, nem pedig konkrét + felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni. joined: Csatlakozott %{date} last_active: utoljára aktív link_verified_on: A link tulajdonosát %{date} -n ellenőriztük @@ -226,15 +228,15 @@ hu: create_announcement: Közlemény létrehozása create_custom_emoji: Egyéni emodzsi létrehozása create_domain_allow: Domain engedélyezés létrehozása - create_domain_block: Domain blokkolás létrehozása - create_email_domain_block: E-mail domain blokkolás létrehozása + create_domain_block: Domain tiltás létrehozása + create_email_domain_block: E-mail domain tiltás létrehozása create_ip_block: IP szabály létrehozása demote_user: Felhasználó lefokozása destroy_announcement: Közlemény törlése destroy_custom_emoji: Egyéni emodzsi törlése destroy_domain_allow: Domain engedélyezés törlése - destroy_domain_block: Domain blokkolás törlése - destroy_email_domain_block: E-mail domain blokkolás törlése + destroy_domain_block: Domain tiltás törlése + destroy_email_domain_block: E-mail domain tiltás törlése destroy_ip_block: IP szabály törlése destroy_status: Állapot törlése disable_2fa_user: Kétlépcsős hitelesítés letiltása @@ -257,7 +259,7 @@ hu: unsuspend_account: Fiók felfüggesztésének feloldása update_announcement: Közlemény frissítése update_custom_emoji: Egyéni emodzsi frissítése - update_domain_block: Domain blokkolás frissítése + update_domain_block: Domain tiltás frissítése update_status: Állapot frissítése actions: assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte" @@ -268,14 +270,14 @@ hu: create_custom_emoji: "%{name} új emodzsit töltött fel: %{target}" create_domain_allow: "%{name} engedélyező listára vette %{target} domaint" create_domain_block: "%{name} letiltotta az alábbi domaint: %{target}" - create_email_domain_block: "%{name} feketelistára tette az alábbi e-mail domaint: %{target}" + create_email_domain_block: "%{name} letiltotta az e-mail domaint: %{target}" create_ip_block: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban" demote_user: "%{name} lefokozta az alábbi felhasználót: %{target}" destroy_announcement: "%{name} törölte a közleményt %{target}" destroy_custom_emoji: "%{name} törölte az emodzsit: %{target}" destroy_domain_allow: "%{name} leszedte %{target} domaint az engedélyező listáról" destroy_domain_block: "%{name} engedélyezte az alábbi domaint: %{target}" - destroy_email_domain_block: "%{name} fehérlistára tette az alábbi e-mail domaint: %{target}" + destroy_email_domain_block: "%{name} engedélyezte az e-mail domaint: %{target}" destroy_ip_block: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban" destroy_status: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}" disable_2fa_user: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján" @@ -298,7 +300,7 @@ hu: unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését" update_announcement: "%{name} frissítette a közleményt %{target}" update_custom_emoji: "%{name} frissítette az alábbi emodzsit: %{target}" - update_domain_block: "%{name} frissítette a(z) %{target} domain blokkolását" + update_domain_block: "%{name} frissítette a %{target} domain tiltását" update_status: "%{name} frissítette %{target} felhasználó tülkjét" deleted_status: "(törölt tülk)" empty: Nem található napló. @@ -430,16 +432,16 @@ hu: view: Domain tiltásának megtekintése email_domain_blocks: add_new: Új hozzáadása - created_msg: E-mail domain sikeresen hozzáadva a feketelistához + created_msg: E-mail domain sikeresen letiltva delete: Törlés - destroyed_msg: E-mail domain sikeresen eltávolítva a feketelistáról + destroyed_msg: E-mail domain sikeresen engedélyezve domain: Domain - empty: Nincs email domain a feketelistán. + empty: Nincs letiltott email domain. from_html: "%{domain}-ról" new: create: Domain hozzáadása - title: Új e-mail feketelista bejegyzés - title: E-mail feketelista + title: Új e-mail domain tiltása + title: Tiltott e-mail domainek instances: by_domain: Domain delivery_available: Kézbesítés elérhető @@ -566,6 +568,7 @@ hu: domain_blocks_rationale: title: Mutasd meg az indokolást enable_bootstrap_timeline_accounts: + desc_html: Az új felhasználók automatikusan követik a beállított fiókokat, így a Saját idővonaluk kezdéskor nem lesz üres title: Alapértelmezett követés engedélyezése új felhasználóknak hero: desc_html: A kezdőoldalon látszik. Legalább 600x100px méret javasolt. Ha nincs beállítva, a szerver bélyegképet használjuk @@ -1004,7 +1007,7 @@ hu: moderation: title: Moderáció move_handler: - carry_blocks_over_text: Ez a fiók elköltözött innen %{acct}, melyet blokkoltatok. + carry_blocks_over_text: Ez a fiók elköltözött innen %{acct}, melyet letiltottatok. carry_mutes_over_text: Ez a fiók elköltözött innen %{acct}, melyet lenémítottatok. copy_account_note_text: 'Ez a fiók elköltözött innen %{acct}, itt vannak a bejegyzéseitek róla:' notification_mailer: @@ -1187,7 +1190,7 @@ hu: preferences: Beállítások profile: Profil relationships: Követések és követők - two_factor_authentication: Kétlépcsős azonosítás + two_factor_authentication: Kétlépcsős hitelesítés webauthn_authentication: Biztonsági kulcsok spam_check: spam_detected: Ez egy automatikus jelentés. Spamet érzékeltünk. diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 1afd4d927..48050d6a2 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -166,10 +166,12 @@ hy: roles: admin: Ադմինիստրատոր moderator: Մոդերատոր + staff: Անձնակազմ user: Oգտատէր search: Որոնել search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով search_same_ip: Այլ օգտատէրեր նոյն IP֊ով + sensitive: Զգայուն show: created_reports: Կազմել բողոքներ targeted_reports: Այլոց կողմից բողոքարկուած @@ -194,6 +196,7 @@ hy: confirm_user: Հաստատել օգտատիրոջը create_account_warning: Ստեղծել զգուշացում create_announcement: Ստեղծել յայտարարութիւն + create_custom_emoji: Ստեղծել սեփական էմոջիները create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում create_ip_block: Ստեղծել IP կանոն destroy_announcement: Ջնջել յայտարարութիւնը @@ -278,8 +281,11 @@ hy: image_hint: PNG մինչեւ 50KB list: Ցանկ listed: Ցուցակագրուած + new: + title: Աւելացնել նոր էմոջի overwrite: Վերագրել shortcode: Հապավում + title: Սեփական էմօջիներ uncategorized: Չդասակարգուած unlist: Ապացուցակագրում unlisted: Ծածուկ @@ -290,6 +296,7 @@ hy: feature_invites: Հրաւէրի յղումներ feature_profile_directory: Օգտատիրոջ մատեան feature_registrations: Գրանցումներ + feature_spam_check: Հակա-սպամ feature_timeline_preview: Հոսքի նախադիտում features: Յատկանիշներ open_reports: բաց բողոքներ @@ -346,6 +353,7 @@ hy: title: էլ․ փոստի արգելափակուած տիրոյթներ instances: by_domain: Դոմեն + empty: Դոմեյնները չեն գտնուել known_accounts: one: "%{count} յայտնի հաշիւ" other: "%{count} յայտնի հաշիւներ" @@ -387,6 +395,7 @@ hy: relationships: title: "%{acct}ի յարաբերութիւններ" relays: + add_new: Աւելացնել նոր վերահեռարձակուիչ delete: Ջնջել disable: Անջատել disabled: Անջատված է @@ -424,6 +433,7 @@ hy: updated_at: Թարմացուած settings: contact_information: + email: Գործնական էլփոստ username: Կոնտակտի ծածկանուն custom_css: title: Սեփական CSS @@ -449,6 +459,10 @@ hy: approved: Գրանցման համար անհրաժեշտ է հաստատում none: Ոչ ոք չի կարող գրանցուել open: Բոլորը կարող են գրանցուել + title: Գրանցումային ռեժիմ + show_staff_badge: + desc_html: Ցուցադրել անձնակազմի անդամի նշանը օգտատիրոջ էջում + title: Ցուցադրել անձնակազմի անդամի նշանը site_description: title: Կայքի նկարագրութիւն site_short_description: @@ -468,10 +482,13 @@ hy: back_to_account: Վերադառնալ անձնական էջ batch: delete: Ջնջել + nsfw_on: Նշել որպէս դիւրազգաց deleted: Ջնջված է + failed_to_execute: Կատարումը ձախողուեց media: title: Մեդիա no_media: Մեդիա չկայ + title: Օգտատիրոջ գրառումները with_media: Մեդիայի հետ tags: context: Համատեքստ @@ -509,6 +526,7 @@ hy: view_status: Նայել գրառումը applications: invalid_url: Տրամադրուած URL անվաւեր է + your_token: Քո մուտքի բանալին auth: apply_for_account: Հրաւէրի հարցում change_password: Գաղտնաբառ @@ -519,6 +537,7 @@ hy: login: Մտնել logout: Դուրս գալ migrate_account: Տեղափոխուել այլ հաշիւ + or_log_in_with: Կամ մուտք գործել օգտագործելով՝ providers: cas: CAS saml: SAML @@ -531,6 +550,7 @@ hy: title: Կարգավորում status: account_status: Հաշուի կարգավիճակ + pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։ authorize_follow: follow: Հետևել following: Յաջողութի՜ւն։ Դու այժմ հետեւում ես․ @@ -578,7 +598,7 @@ hy: errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. + '404': Էջը, որը փնտրում ես գոյութիւն չունի։ '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': @@ -633,6 +653,7 @@ hy: identity_proofs: active: Ակտիվ authorize: Այո, նոյնականացնել + authorize_connection_prompt: Հաւաստագրէ՞լ այս ծածկագրման կապակցումը i_am_html: Ես %{username}ն եմ %{service}ում։ identity: Ինքնութիւն inactive: Ոչ ակտիւ @@ -650,6 +671,7 @@ hy: blocking: Արգելափակումների ցուցակ bookmarks: Էջանիշեր domain_blocking: Տիրոյթի արգելափակումների ցուցակ + following: Հետեւումների ցանկ upload: Վերբեռնել invites: delete: Ապաակտիւացնել @@ -680,11 +702,14 @@ hy: not_found: չգտնուեց past_migrations: Նախոդ միգրացիաները proceed_with_move: Տեղափոխել հետեւորդներին + redirecting_to: Քո հաշիւը վերահասցեաորում է %{acct}-ին warning: followers: Այս քայլով քո բոլոր հետեւորդներին այս հաշուից կը տեղափոխես դէպի նորը moderation: title: Մոդերացիա notification_mailer: + digest: + title: Երբ բացակայ էիր... favourite: title: Նոր հաւանում follow: @@ -695,6 +720,8 @@ hy: title: Նոր հետեւելու հայցեր mention: action: Պատասխանել + notifications: + other_settings: Ծանուցումների այլ կարգաւորումներ number: human: decimal_units: @@ -714,8 +741,12 @@ hy: older: Ավելի հին prev: Նախորդ truncate: "…" + polls: + errors: + duration_too_short: շատ կարճ է preferences: other: Այլ + posting_defaults: Կանխադիր կարգաւորումներ public_timelines: Հանրային հոսք relationships: activity: Հաշուի ակտիւութիւնը @@ -732,6 +763,8 @@ hy: remove_selected_domains: Հեռացնել բոլոր հետեւորդներին նշուած դոմեյններից remove_selected_followers: Հեռացնել նշուած հետեւորդներին status: Հաշուի կարգավիճակ + scheduled_statuses: + too_soon: Նախադրուած ամսաթիւը պէտք է լինի ապագայում sessions: activity: Վերջին թութը browser: Դիտարկիչ @@ -771,11 +804,14 @@ hy: title: Սեսսիա settings: account: Հաշիվ + account_settings: Հաշուի կարգաւորումներ appearance: Տեսք + back: Ետ գնալ մաստադոն delete: Հաշուի ջնջում development: Ծրագրավորում edit_profile: Խմբագրել պրոֆիլը export: Տվյալների արտահանում + featured_tags: Ընտրուած հէշթեգեր identity_proofs: Անձի նոյնացումներ import: Ներմուծել import_and_export: Ներմուծել և արտահանել @@ -926,12 +962,21 @@ hy: otp: Նոյնականացման հավելված recovery_codes: Վերականգնման կոդեր recovery_codes_regenerated: Վերականգման կոդերը հաջողութեամբ ստեղծուել են + webauthn: Անվտանգութեան բանալիներ user_mailer: + sign_in_token: + title: Մուտքի փորձ warning: + get_in_touch: Կարող էք կապուել %{instance} հանգոյցի անձնակազմի հետ պատասխանելով այս նամակին։ + statuses: Մասնաւորապէս, միայն՝ title: none: Զգուշացում + sensitive: Մեդիաֆայլը պիտակուել է որպէս զգայուն։ + suspend: Հաշիւը արգելափակուած է welcome: + edit_profile_action: Կարգաւորել հաշիւը final_action: Սկսել թթել + review_preferences_action: Փոփոխել կարգաւորումները subject: Բարի գալուստ Մաստոդոն tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։ tip_following: Դու հետեւում էս քո հանգոյցի ադմին(ներ)ին լռելայն։ Այլ հետաքրքիր անձանց գտնելու համար՝ թերթիր տեղական և դաշնային հոսքերը։ @@ -949,3 +994,4 @@ hy: verification: Ստուգում webauthn_credentials: delete: Ջնջել + registered_on: Գրանցուել է %{date} diff --git a/config/locales/id.yml b/config/locales/id.yml index 8d3291adf..bf63f62a4 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -556,6 +556,7 @@ id: domain_blocks_rationale: title: Tampilkan alasan enable_bootstrap_timeline_accounts: + desc_html: Buat pengguna baru mengikuti akun yang sudah dipilih agar beranda mereka tidak kosong title: Aktifkan opsi ikuti otomatis untuk pengguna baru hero: desc_html: Ditampilkan di halaman depan. Direkomendasikan minimal 600x100px. Jika tidak diatur, kembali ke server gambar kecil diff --git a/config/locales/is.yml b/config/locales/is.yml index 97ac62a4d..2d6102d98 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -566,6 +566,7 @@ is: domain_blocks_rationale: title: Birta röksemdafærslu enable_bootstrap_timeline_accounts: + desc_html: Láta nýja notendur sjálfkrafa fylgjast með uppsettum aðgöngum svo að heimastreymi þeirra byrji ekki autt title: Virkja sjálfgefnar fylgnistillingar fyrir nýja notendur hero: desc_html: Birt á forsíðunni. Mælt með að hún sé a.m.k. 600×100 mynddílar. Þegar þetta er ekki stillt, er notuð smámynd netþjónsins diff --git a/config/locales/it.yml b/config/locales/it.yml index 65e24a4c7..1e0ab42f0 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -566,6 +566,7 @@ it: domain_blocks_rationale: title: Mostra motivazione enable_bootstrap_timeline_accounts: + desc_html: I nuovi utenti seguiranno automaticamente gli account configurati, in modo che il loro home feed all'inizio non sia vuoto title: Abilita seguiti predefiniti per i nuovi utenti hero: desc_html: Mostrata nella pagina iniziale. Almeno 600x100 px consigliati. Se non impostata, sarà usato il thumbnail del server diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c7b63fbf7..cc4ec52cd 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -128,6 +128,7 @@ ko: follows: 팔로잉 수 header: 헤더 inbox_url: 수신함 URL + invite_request_text: 가입 하려는 이유 invited_by: 초대자 ip: IP joined: 가입 @@ -399,6 +400,8 @@ ko: silence: 침묵 suspend: 정지 title: 새로운 도메인 차단 + obfuscate: 도메인 이름 난독화 + obfuscate_hint: 도메인 제한 목록을 공개하는 경우 도메인 이름의 일부를 난독화 합니다 private_comment: 비공개 주석 private_comment_hint: 이 도메인 제한에 대한 주석은 중재자를 위해 내부적으로 사용 됩니다. public_comment: 공개 주석 @@ -557,6 +560,7 @@ ko: domain_blocks_rationale: title: 사유 보여주기 enable_bootstrap_timeline_accounts: + desc_html: 새 사용자들이 자동으로 설정 된 계정들을 팔로우 하도록 해서 그들의 홈 피드가 빈 상태로 시작하지 않도록 합니다 title: 새 유저가 팔로우할 계정을 보여주기 hero: desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 서버의 썸네일이 사용 됩니다 diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 603bf157a..2f24ee3ec 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -1,32 +1,52 @@ --- ml: about: + about_this: കുറിച്ച് + api: API + apps: മൊബൈൽ ആപ്പുകൾ + contact: ബന്ധപ്പെടുക contact_missing: സജ്ജമാക്കിയിട്ടില്ല contact_unavailable: ലഭ്യമല്ല discover_users: ഉപയോഗ്‌താക്കളെ കണ്ടെത്തുക + get_apps: മൊബൈൽ ആപ്പ് പരീക്ഷിക്കുക learn_more: കൂടുതൽ പഠിക്കുക privacy_policy: സ്വകാര്യതാ നയം see_whats_happening: എന്തൊക്കെ സംഭവിക്കുന്നു എന്ന് കാണുക + source_code: സോഴ്സ് കോഡ് status_count_before: ആരാൽ എഴുതപ്പെട്ടു tagline: സുഹൃത്തുക്കളെ പിന്തുടരുകയും പുതിയവരെ കണ്ടെത്തുകയും ചെയ്യുക terms: സേവന വ്യവസ്ഥകൾ unavailable_content: ലഭ്യമല്ലാത്ത ഉള്ളടക്കം unavailable_content_description: + domain: സെർവർ reason: കാരണം what_is_mastodon: എന്താണ് മാസ്റ്റഡോൺ? accounts: follow: പിന്തുടരുക - following: നിങ്ങൾ പിന്തുടരുന്നവർ + following: പിന്തുടരുന്നു joined: "%{date} ൽ ചേർന്നു" last_active: അവസാനം സജീവമായിരുന്നത് link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്‌കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു media: മാധ്യമങ്ങൾ moved_html: "%{name}, %{new_profile_link} ലേക്ക് നീങ്ങിയിരിക്കുന്നു:" + network_hidden: ഈ വിവരം ലഭ്യമല്ല + nothing_here: ഇവിടെ ഒന്നുമില്ല! + posts_tab_heading: ടൂട്ടുകൾ + posts_with_replies: ടൂട്ടുകളും മറുപടികളും + roles: + admin: അഡ്‌മിന്‍ + bot: ബോട്ട് + group: ഗ്രൂപ്പ് + unavailable: പ്രൊഫൈൽ ലഭ്യമല്ല admin: account_moderation_notes: delete: മായ്ക്കുക accounts: + add_email_domain_block: ഇ-മെയിൽ ഡൊമെയ്ൻ തടയുക approve: അംഗീകരിക്കുക + approve_all: എല്ലാം അംഗീകരിക്കുക + are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ? + avatar: അവതാർ by_domain: മേഖല change_email: changed_msg: അംഗത്തിന്റെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം വിജയകരമായി മാറ്റിയിരിക്കുന്നു! @@ -37,6 +57,8 @@ ml: title: "%{username} ന്റെ ഇലക്ട്രോണിക് കത്ത് മേൽവിലാസം മാറ്റുക" confirm: നിജപ്പെടുത്തുക confirmed: നിജപ്പെടുത്തി + confirming: സ്ഥിരീകരിക്കുന്നു + delete: ഡാറ്റ ഇല്ലാതാക്കുക deleted: മായിച്ചു demote: തരം താഴ്ത്തുക disable: പ്രവര്‍ത്തന രഹിതമാക്കുക @@ -44,6 +66,56 @@ ml: disabled: പ്രവർത്തന രഹിതമാക്കപ്പെട്ടിരിക്കുന്നു display_name: കാണപ്പെടുന്ന നാമം domain: മേഖല + edit: തിരുത്തുക + email: ഇമെയിൽ + header: തലക്കെട്ട് + location: + all: എല്ലാം + moderation: + active: സജീവമാണ് + all: എല്ലാം + resend_confirmation: + send: സ്ഥിരീകരണ ഇമെയിൽ വീണ്ടും അയയ്ക്കുക + success: സ്ഥിരീകരണ ഇമെയിൽ വിജയകരമായി അയച്ചു! + reset: പുനഃക്രമീകരിക്കുക + reset_password: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക + role: അനുമതികൾ + roles: + user: ഉപയോക്താവ് + search: തിരയുക + title: അക്കൗണ്ടുകൾ + unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ + username: ഉപയോക്തൃനാമം + web: വെബ് + action_logs: + action_types: + confirm_user: ഉപയോക്താവിനെ സ്ഥിരീകരിക്കുക + remove_avatar_user: അവതാർ നീക്കംചെയ്യുക + reset_password_user: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക + custom_emojis: + copy: പകര്‍ത്തുക + create_new_category: പുതിയ വിഭാഗം സൃഷ്ടിക്കുക + delete: ഇല്ലാതാക്കുക + emoji: ഇമോജി + dashboard: + feature_profile_directory: പ്രൊഫൈൽ ഡയറക്ടറി + features: സവിശേഷതകൾ + title: ഡാഷ്ബോർഡ് + total_users: മൊത്തം ഉപയോക്താക്കൾ + trends: ട്രെൻഡുകൾ + email_domain_blocks: + add_new: പുതിയത് ചേര്‍ക്കുക + delete: ഇല്ലാതാക്കുക + domain: ഡൊമൈന്‍ + new: + create: ഡൊമൈൻ ചേര്‍ക്കുക + invites: + filter: + all: എല്ലാം + authorize_follow: + following: 'വിജയകരം! നിങ്ങൾ ഇപ്പോൾ പിന്തുടരുന്നു:' + directories: + directory: പ്രൊഫൈൽ ഡയറക്ടറി errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -54,3 +126,18 @@ ml: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. + filters: + contexts: + notifications: അറിയിപ്പുകൾ + generic: + all: എല്ലാം + notification_mailer: + digest: + action: എല്ലാ അറിയിപ്പുകളും കാണിക്കുക + follow: + body: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു!" + subject: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു" + relationships: + following: പിന്തുടരുന്നു + settings: + notifications: അറിയിപ്പുകൾ diff --git a/config/locales/nl.yml b/config/locales/nl.yml index d9c4e20fa..a419e0b47 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -60,6 +60,7 @@ nl: one: Volger other: Volgers following: Volgend + instance_actor_flash: Dit account is een 'virtual actor' waarmee de server zichzelf vertegenwoordigd en is dus geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden opgeschort. joined: Geregistreerd in %{date} last_active: laatst actief link_verified_on: Eigendom van deze link is gecontroleerd op %{date} @@ -131,6 +132,7 @@ nl: follows: Volgt header: Omslagfoto inbox_url: Inbox-URL + invite_request_text: Redenen om te registreren invited_by: Uitgenodigd door ip: IP joined: Geregistreerd in @@ -207,8 +209,11 @@ nl: undo_sensitized: Niet meer als gevoelig markeren undo_silenced: Niet langer negeren undo_suspension: Niet langer opschorten + unsilenced_msg: Het opheffen van de beperkingen van %{username} zijn geslaagd unsubscribe: Opzeggen + unsuspended_msg: Het niet langer opschorten van %{username} is geslaagd username: Gebruikersnaam + view_domain: Samenvatting voor domein bekijken warn: Waarschuwen web: Webapp whitelisted: Goedgekeurd voor federatie @@ -243,13 +248,16 @@ nl: reopen_report: Rapportage heropenen reset_password_user: Wachtwoord opnieuw instellen resolve_report: Rapportage oplossen + sensitive_account: De media in jouw account als gevoelig markeren silence_account: Account negeren suspend_account: Account opschorten unassigned_report: Rapportage niet langer toewijzen + unsensitive_account: De media in jouw account niet langer als gevoelig markeren unsilence_account: Account niet langer negeren unsuspend_account: Account niet langer opschorten update_announcement: Mededeling bijwerken update_custom_emoji: Lokale emoji bijwerken + update_domain_block: Domeinblokkade bijwerken update_status: Toot bijwerken actions: assigned_to_self_report: "%{name} heeft rapportage %{target} aan zichzelf toegewezen" @@ -428,6 +436,7 @@ nl: instances: by_domain: Domein delivery_available: Bezorging is mogelijk + empty: Geen domeinen gevonden. known_accounts: one: "%{count} bekend account" other: "%{count} bekende accounts" @@ -505,6 +514,8 @@ nl: comment: none: Geen created_at: Gerapporteerd op + forwarded: Doorgestuurd + forwarded_to: Doorgestuurd naar %{domain} mark_as_resolved: Markeer als opgelost mark_as_unresolved: Markeer als onopgelost notes: @@ -742,6 +753,7 @@ nl: functional: Jouw account is volledig operationeel. pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd. redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}. + too_fast: Formulier is te snel ingediend. Probeer het nogmaals. trouble_logging_in: Problemen met inloggen? use_security_key: Beveiligingssleutel gebruiken authorize_follow: @@ -901,6 +913,8 @@ nl: status: Verificatiestatus view_proof: Bekijk bewijs imports: + errors: + over_rows_processing_limit: bevat meer dan %{count} rijen modes: merge: Samenvoegen merge_long: Bestaande gegevens behouden en nieuwe toevoegen @@ -1350,11 +1364,13 @@ nl: subject: disable: Jouw account %{acct} is bevroren none: Waarschuwing voor %{acct} + sensitive: De door jouw account %{acct} geplaatste media is als gevoelig gemarkeerd silence: Jouw account %{acct} is nu beperkt suspend: Jouw account %{acct} is opgeschort title: disable: Account bevroren none: Waarschuwing + sensitive: Jouw media is als gevoelig gemarkeerd silence: Account beperkt suspend: Account opgeschort welcome: @@ -1392,9 +1408,14 @@ nl: webauthn_credentials: add: Nieuwe beveiligingssleutel toevoegen create: + error: Er deed zich een probleem voor met het toevoegen van jouw beveiligingssleutel. Probeer het nogmaals. success: Het toevoegen van je beveiligingssleutel is geslaagd. delete: Verwijderen delete_confirmation: Weet je zeker dat je deze beveiligingssleutel wilt verwijderen? + description_html: Wanneer je verificatie met beveiligingssleutels inschakelt, moet je tijdens het inloggen een van jouw beveiligingssleutels gebruiken. + destroy: + error: Er deed zich een probleem voor met het verwijderen van jouw beveiligingssleutel. Probeer het nogmaals. + success: Het verwijderen van jouw beveiligingssleutel is geslaagd. invalid_credential: Ongeldige beveiligingssleutel nickname_hint: Voer de bijnaam in van jouw nieuwe beveiligingssleutel not_enabled: Je hebt WebAuthn nog niet ingeschakeld diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 763a59fbb..a53f0cee7 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -132,6 +132,7 @@ oc: login_status: Estat formulari de connexion media_attachments: Mèdias enviats memorialize: Passar en memorial + memorialized: Memorizat moderation: active: Actius all: Totes @@ -773,6 +774,7 @@ oc: request: Demandar vòstre archiu size: Talha blocks: Personas que blocatz + bookmarks: Marcadors csv: CSV domain_blocks: Blocatge de domenis lists: Listas @@ -847,6 +849,7 @@ oc: success: Vòstras donadas son ben estadas mandadas e seràn tractadas tre que possible types: blocking: Lista de blocatge + bookmarks: Marcadors domain_blocking: Lista dels domenis blocats following: Lista de monde que seguètz muting: Lista de monde que volètz pas legir @@ -1083,6 +1086,9 @@ oc: spam_detected: Aquò es un senhalament automatic. D’spam es estat detectat. statuses: attached: + audio: + one: "%{count} àudio" + other: "%{count} àudios" description: 'Ajustat : %{attached}' image: one: "%{count} imatge" @@ -1232,6 +1238,7 @@ oc: recovery_codes: Salvar los còdis de recuperacion recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. Gardatz los còdis en seguretat, per exemple, imprimissètz los e gardatz los amb vòstres documents importants. + webauthn: Claus de seguretat user_mailer: backup_ready: explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament ! @@ -1284,4 +1291,7 @@ oc: explanation_html: 'Podètz verificar vosautres meteisses coma proprietari dels ligams per las metadonadas de vòstre perfil. Per aquò far, lo site Web ligat deu conténer un ligam cap a vòstre perfil Mastodon. Lo ligam deu aver un atribut rel="me". Lo contengut tèxte del ligam impòrta pas. Vaquí un exemple :' verification: Verificacion webauthn_credentials: + add: Apondre una clau de seguretat novèla + delete: Suprimir + invalid_credential: Cau de seguretat invalida registered_on: Inscripcion del %{date} diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 6b0f5ae58..23c67267e 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -582,6 +582,7 @@ pl: domain_blocks_rationale: title: Pokaż uzasadnienia enable_bootstrap_timeline_accounts: + desc_html: Niech nowi użytkownicy automatycznie śledzą ustawione konta, aby ich główna oś czasu nie był początkowo pusta title: Dodawaj domyślne obserwacje nowym użytkownikom hero: desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura serwera diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 19584201f..f7b47fb10 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -566,6 +566,7 @@ pt-PT: domain_blocks_rationale: title: Mostrar motivo enable_bootstrap_timeline_accounts: + desc_html: Faça com que novos utilizadores sigam automaticamente contas configuradas, para que a cronologia destes não se apresente inicialmente vazia title: Habilitar seguidores predefinidos para novos utilizadores hero: desc_html: Apresentado na primeira página. Pelo menos 600x100px recomendados. Quando não é definido, é apresentada a miniatura da instância diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index cdea55a5d..65cd315ac 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -94,6 +94,7 @@ hy: types: disable: Փակել մուտքը none: Ոչինչ չանել + sensitive: Զգայուն silence: Լուռ suspend: Արգելափակել եւ անվերադարձ ջնջել հաշուի ամբողջ ինֆորմացիան warning_preset_id: Օգտագործել զգուշացնող նախադիր @@ -119,6 +120,7 @@ hy: expires_in: Սպառուում է fields: Հաշուի մետադատա header: Վերնագիր + honeypot: "%{label} (չլրացնել)" inbox_url: Ներմուծման շերտի URL irreversible: Թաքցնելու փոխարէն ջնջել locale: Ինտերֆեյսի լեզու diff --git a/config/locales/simple_form.ml.yml b/config/locales/simple_form.ml.yml index df04a15e8..c60cd9699 100644 --- a/config/locales/simple_form.ml.yml +++ b/config/locales/simple_form.ml.yml @@ -14,3 +14,7 @@ ml: acct: പഴയ അംഗത്വത്തിലേക്കുള്ള പിടി account_migration: acct: പുതിയ അംഗത്വത്തിലേക്കുള്ള പിടി + defaults: + email: ഇ-മെയിൽ വിലാസം + notification_emails: + follow: ആരോ നിങ്ങളെ പിന്തുടർന്നു diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index bdaa1dd5c..8abc9448c 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -121,6 +121,7 @@ nl: expires_in: Vervalt na fields: Metadata profiel header: Omslagfoto + honeypot: "%{label} (niet invullen)" inbox_url: Inbox-URL van de relayserver irreversible: Verwijderen in plaats van verbergen locale: Taal van de gebruikersomgeving @@ -173,7 +174,7 @@ nl: invite: comment: Opmerking invite_request: - text: Waarom wil jij je aanmelden? + text: Waarom wil je je hier registreren? ip_block: comment: Opmerking ip: IP diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 120ddfbe0..79c621ee2 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -126,6 +126,7 @@ oc: expires_in: Expira aprèp fields: Metadonada del perfil header: Bandièra + honeypot: "%{label} (emplenar pas)" inbox_url: URL de la bóstia de recepcion del relai irreversible: Suprimir allòc de rescondre locale: Lenga de l’interfàcia diff --git a/config/locales/sq.yml b/config/locales/sq.yml index a46c3a586..e841ab690 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -566,6 +566,7 @@ sq: domain_blocks_rationale: title: Shfaq arsye enable_bootstrap_timeline_accounts: + desc_html: Bëj që përdoruesit e rinj automatikisht të ndjekin llogaritë e formësuara, që prurja e tyre bazë të mos nisë e zbrazët title: Aktivizo ndjekje parazgjedhje për përdorues të rinj hero: desc_html: E shfaqur në faqen ballore. Këshillohet të paktën 600x100px. Kur nuk caktohet gjë, përdoret miniaturë e shërbyesit diff --git a/config/locales/vi.yml b/config/locales/vi.yml index be681b3a6..48bc6c844 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -558,6 +558,7 @@ vi: domain_blocks_rationale: title: Hiển thị lý do enable_bootstrap_timeline_accounts: + desc_html: Thiết lập người mới đăng ký sẽ tự động theo dõi những tài khoản cho trước nhằm tránh việc bảng tin trống title: Gợi ý theo dõi cho người dùng mới hero: desc_html: Hiển thị trên trang chủ. Kích cỡ tối thiểu 600x100px. Mặc định dùng hình thu nhỏ của máy chủ diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 6c9079834..c44e2ce5b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -57,6 +57,7 @@ zh-CN: followers: other: 关注者 following: 正在关注 + instance_actor_flash: 这个账户是虚拟账户,用来代表服务器自身,不代表任何实际用户。它用于互通功能,不应该封禁。 joined: 加入于 %{date} last_active: 最近活动 link_verified_on: 此链接的所有权已在 %{date} 检查 @@ -397,6 +398,8 @@ zh-CN: silence: 自动隐藏 suspend: 自动封禁 title: 新增域名屏蔽 + obfuscate: 混淆域名 + obfuscate_hint: 如果启用了域名列表公开限制,就部分混淆列表中的域名 private_comment: 私密评论 private_comment_hint: 给这一域名限制添加备注,供监察员内部使用 public_comment: 公开评论 @@ -555,6 +558,7 @@ zh-CN: domain_blocks_rationale: title: 显示理由 enable_bootstrap_timeline_accounts: + desc_html: 让新用户自动关注指定用户,这样,他们的主页时间线就不会在一开始的时候空空荡荡 title: 开启新用户默认关注功能 hero: desc_html: 将用于在首页展示。推荐使用分辨率 600×100px 以上的图片。如未设置,将默认使用本站缩略图。 @@ -583,7 +587,7 @@ zh-CN: title: 允许发送邀请的用户组 require_invite_text: desc_html: 当注册需要手动批准时,将“你为什么想要加入?”设为必填项 - title: 要求新用户填写注册申请 + title: 要求新用户填写申请注册的原因 registrations_mode: modes: approved: 注册时需要批准 @@ -911,6 +915,8 @@ zh-CN: status: 验证状态 view_proof: 查看证明 imports: + errors: + over_rows_processing_limit: 包含行数超过了 %{count} modes: merge: 合并 merge_long: 保留现有记录并添加新的记录 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index a2ad6fbde..da340a1bc 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -57,6 +57,7 @@ zh-TW: followers: other: 關注者 following: 正在關注 + instance_actor_flash: 這個帳號是一個用來代表此伺服器的虛擬執行者,而非真實使用者。它用途為站點聯盟且不應被停權。 joined: 加入於 %{date} last_active: 上次活躍時間 link_verified_on: 此連結的所有權已在 %{date} 檢查過 @@ -127,6 +128,7 @@ zh-TW: follows: 正在關注 header: 開頭 inbox_url: 收件箱 (Inbox) URL + invite_request_text: 加入原因 invited_by: 邀請者 ip: IP 位址 joined: 已加入 @@ -251,6 +253,7 @@ zh-TW: unsuspend_account: 取消用戶的暫停狀態 update_announcement: 更新公告 update_custom_emoji: 更新自訂顏文字 + update_domain_block: 更新封鎖網域 update_status: 更新狀態 actions: assigned_to_self_report: "%{name} 接受了檢舉 %{target}" @@ -291,6 +294,7 @@ zh-TW: unsuspend_account: "%{name} 取消了使用者 %{target} 的停權狀態" update_announcement: "%{name} 更新了公告 %{target}" update_custom_emoji: "%{name} 更新了自訂表情符號 %{target}" + update_domain_block: "%{name} 更新封鎖網域 %{target}" update_status: "%{name} 重整了 %{target} 的嘟文" deleted_status: "(已刪除嘟文)" empty: 找不到 log @@ -394,6 +398,8 @@ zh-TW: silence: 靜音 suspend: 停權 title: 新增封鎖站點 + obfuscate: 混淆網域名稱 + obfuscate_hint: 若啟用網域廣告列表限制,於列表部份混淆網域名稱 private_comment: 私人留言 private_comment_hint: 請提供更多有關此站台限制的資訊以供版主作內部參考。 public_comment: 公開留言 @@ -432,6 +438,7 @@ zh-TW: instances: by_domain: 站台 delivery_available: 可傳送 + empty: 找不到網域 known_accounts: other: "%{count} 已知的帳戶" moderation: @@ -483,19 +490,31 @@ zh-TW: enable_hint: 啟用後,你的伺服器將訂閱該中繼的所有公開文章,並將會此伺服器的公開文章發送給它。 enabled: 已啟用 inbox_url: 中繼URL + pending: 等待中繼站審核 save_and_enable: 儲存並啟用 + setup: 設定中繼連結 + signatures_not_enabled: 若啟用安全模式或受限的站點聯盟模式,中繼將不會正常運作 status: 狀態 + title: 中繼 report_notes: created_msg: 檢舉記錄建立成功! destroyed_msg: 檢舉記錄刪除成功! reports: + account: + notes: + other: "%{count} 則備註" + reports: + other: "%{count} 則檢舉" action_taken_by: 操作執行者 are_you_sure: 你確定嗎? assign_to_self: 指派給自己 assigned: 指派負責人 + by_target_domain: 檢舉帳號之網域 comment: none: 無 created_at: 日期 + forwarded: 已轉寄 + forwarded_to: 轉寄到 %{domain} mark_as_resolved: 標記為「已解決」 mark_as_unresolved: 標記為「未解決」 notes: @@ -526,12 +545,20 @@ zh-TW: email: 用於聯絡的公開電子信箱位址 username: 請輸入使用者名稱 custom_css: + desc_html: 透過於每個頁面都載入的 CSS 調整外觀 title: 自訂 CSS + default_noindex: + desc_html: 影響所有沒有變更此設定的使用者 + title: 預設將使用者退出搜尋引擎索引 domain_blocks: all: 給任何人 disabled: 給沒有人 title: 顯示封鎖的網域 + users: 套用至所有登入的本機使用者 + domain_blocks_rationale: + title: 顯示解釋原因 enable_bootstrap_timeline_accounts: + desc_html: 使新使用者自動跟隨設定之帳號,所以他們的首頁動態一開始不會空白 title: 啟用新使用者的預設追蹤 hero: desc_html: 在首頁顯示。推薦最小 600x100px。如果留空,就會重設回伺服器預覽圖 @@ -543,6 +570,7 @@ zh-TW: desc_html: 本伺服器在聯邦中發現的站點 title: 發布已知伺服器的列表 preview_sensitive_media: + desc_html: 連結來自其他網站的預覽將顯示於縮圖,即使這些媒體被標記為敏感 title: 在 OpenGraph 預覽中顯示敏感媒體 profile_directory: desc_html: 允許能探索使用者 From 814b7775fbb175bf6fb30e7f775b77c334658a8a Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 23 Dec 2020 01:35:02 +0100 Subject: [PATCH 318/422] Improve performances of deleting favourites when deleting accounts (#15412) Co-authored-by: Claire --- app/services/delete_account_service.rb | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 58f6ef2ab..2bb533cfb 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -9,13 +9,11 @@ class DeleteAccountService < BaseService aliases block_relationships blocked_by_relationships - bookmarks conversation_mutes conversations custom_filters devices domain_blocks - favourites featured_tags follow_requests identity_proofs @@ -147,6 +145,8 @@ class DeleteAccountService < BaseService purge_media_attachments! purge_polls! purge_generated_notifications! + purge_favourites! + purge_bookmarks! purge_feeds! purge_other_associations! @@ -178,6 +178,24 @@ class DeleteAccountService < BaseService Notification.where(from_account: @account).in_batches.delete_all end + def purge_favourites! + @account.favourites.in_batches do |favourites| + ids = favourites.pluck(:status_id) + StatusStat.where(status_id: ids).update_all('favourites_count = GREATEST(0, favourites_count - 1)') + Chewy.strategy.current.update(StatusesIndex, ids) if Chewy.enabled? + # Rails.cache.delete_multi would be better, but we don't have it yet + ids.each { |id| Rails.cache.delete("statuses/#{id}") } + favourites.delete_all + end + end + + def purge_bookmarks! + @account.bookmarks.in_batches do |bookmarks| + Chewy.strategy.current.update(StatusesIndex, bookmarks.pluck(:status_id)) if Chewy.enabled? + bookmarks.delete_all + end + end + def purge_other_associations! associations_for_destruction.each do |association_name| purge_association(association_name) From 444b21b55ff5768e4cbbaf7cfa8285c65a4b54f9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 23 Dec 2020 01:36:13 +0100 Subject: [PATCH 319/422] Bump version to 3.3.0rc3 (#15411) --- CHANGELOG.md | 8 +++++--- lib/mastodon/version.rb | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4396dc96c..12c996641 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,7 @@ All notable changes to this project will be documented in this file. - Add indication to admin UI of whether a report has been forwarded ([ThibG](https://github.com/tootsuite/mastodon/pull/13237)) - Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15265)) - Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/15355)) -- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358)) +- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358), [ThibG](https://github.com/tootsuite/mastodon/pull/15385), [ThibG](https://github.com/tootsuite/mastodon/pull/15405)) - Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026)) - Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721)) - Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595), [noellabo](https://github.com/tootsuite/mastodon/pull/15277)) @@ -66,7 +66,7 @@ All notable changes to this project will be documented in this file. - Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201), [ThibG](https://github.com/tootsuite/mastodon/pull/15264), [ThibG](https://github.com/tootsuite/mastodon/pull/15256)) - Has someone changed their domain or subdomain thereby creating two accounts where there should be one? - This command will fix it on your end -- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223)) +- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223), [ThibG](https://github.com/tootsuite/mastodon/pull/15373)) - Index corruption in the database? - This command is for you - **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608)) @@ -77,6 +77,7 @@ All notable changes to this project will be documented in this file. - Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817), [noellabo](https://github.com/tootsuite/mastodon/pull/15270)) - Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13043)) - Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396)) +- Add clean error message when `RAILS_ENV` is unset ([ThibG](https://github.com/tootsuite/mastodon/pull/15381)) ### Changed @@ -84,7 +85,7 @@ All notable changes to this project will be documented in this file. - Background of the overlay matches the color of the image - Action bar to interact with or open the toot from the modal - Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091)) -- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855)) +- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380)) - Suspensions no longer equal deletions - A suspended account can be unsuspended with minimal consequences for 30 days - Immediate deletion of data is still available as an explicit option @@ -162,6 +163,7 @@ All notable changes to this project will be documented in this file. - Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674)) - Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673)) - Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675)) +- Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402)) - Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534)) - Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) - Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282)) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 7282ea7b5..95ae777f2 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ module Mastodon end def flags - 'rc2' + 'rc3' end def suffix From 473abc35a19771304839dc57dc41ef309a826658 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 23 Dec 2020 07:47:03 +0100 Subject: [PATCH 320/422] Fix trying to privatize empty media attachments (#15414) --- app/services/suspend_account_service.rb | 2 ++ app/services/unsuspend_account_service.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 19d65280d..22e519708 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -65,6 +65,8 @@ class SuspendAccountService < BaseService attachment = media_attachment.public_send(attachment_name) styles = [:original] | attachment.styles.keys + next if attachment.blank? + styles.each do |style| case Paperclip::Attachment.default_options[:storage] when :s3 diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index f07a3f053..be7ad9df3 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -56,6 +56,8 @@ class UnsuspendAccountService < BaseService attachment = media_attachment.public_send(attachment_name) styles = [:original] | attachment.styles.keys + next if attachment.blank? + styles.each do |style| case Paperclip::Attachment.default_options[:storage] when :s3 From de57efd055c8c6af9e6e2aa450cea790546aabbc Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 23 Dec 2020 16:43:11 +0100 Subject: [PATCH 321/422] Fix mentions not being deleted efficiently (#15416) As a regression from the recent optimizations, mentions were left untouched until `account.destroy`, which would then delete them individually, and executing queries to find and delete associated notifications, resulting in a massive slowdown. Co-authored-by: Claire --- app/services/delete_account_service.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 2bb533cfb..f8154cc3e 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -142,6 +142,7 @@ class DeleteAccountService < BaseService purge_user! purge_profile! purge_statuses! + purge_mentions! purge_media_attachments! purge_polls! purge_generated_notifications! @@ -159,6 +160,10 @@ class DeleteAccountService < BaseService end end + def purge_mentions! + @account.mentions.reorder(nil).where.not(status_id: reported_status_ids).in_batches.delete_all + end + def purge_media_attachments! @account.media_attachments.reorder(nil).find_each do |media_attachment| next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id) From 4950e59cdcd59a181238d3d504398de188e19319 Mon Sep 17 00:00:00 2001 From: trwnh Date: Wed, 23 Dec 2020 09:43:38 -0600 Subject: [PATCH 322/422] Use existing FeaturedTag serializer and delete AccountFeaturedTag serializer (#15415) * Update featured_tags_controller.rb * Update featured_tag_serializer.rb * Update featured_tag_serializer.rb * Delete account_featured_tag_serializer.rb * please codeclimate * please codeclimate --- .../api/v1/accounts/featured_tags_controller.rb | 2 +- .../rest/account_featured_tag_serializer.rb | 15 --------------- app/serializers/rest/featured_tag_serializer.rb | 8 +++++++- 3 files changed, 8 insertions(+), 17 deletions(-) delete mode 100644 app/serializers/rest/account_featured_tag_serializer.rb diff --git a/app/controllers/api/v1/accounts/featured_tags_controller.rb b/app/controllers/api/v1/accounts/featured_tags_controller.rb index dc01b577c..0101fb469 100644 --- a/app/controllers/api/v1/accounts/featured_tags_controller.rb +++ b/app/controllers/api/v1/accounts/featured_tags_controller.rb @@ -7,7 +7,7 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController respond_to :json def index - render json: @featured_tags, each_serializer: REST::AccountFeaturedTagSerializer + render json: @featured_tags, each_serializer: REST::FeaturedTagSerializer end private diff --git a/app/serializers/rest/account_featured_tag_serializer.rb b/app/serializers/rest/account_featured_tag_serializer.rb deleted file mode 100644 index 84bef2e62..000000000 --- a/app/serializers/rest/account_featured_tag_serializer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -class REST::AccountFeaturedTagSerializer < ActiveModel::Serializer - include RoutingHelper - - attributes :id, :name, :url - - def id - object.tag.id.to_s - end - - def url - short_account_tag_url(object.account, object.tag) - end -end diff --git a/app/serializers/rest/featured_tag_serializer.rb b/app/serializers/rest/featured_tag_serializer.rb index 08121ff16..96adcc7d0 100644 --- a/app/serializers/rest/featured_tag_serializer.rb +++ b/app/serializers/rest/featured_tag_serializer.rb @@ -1,9 +1,15 @@ # frozen_string_literal: true class REST::FeaturedTagSerializer < ActiveModel::Serializer - attributes :id, :name, :statuses_count, :last_status_at + include RoutingHelper + + attributes :id, :name, :url, :statuses_count, :last_status_at def id object.id.to_s end + + def url + short_account_tag_url(object.account, object.tag) + end end From b08d2d4f78e143189c0dc3470a8dc186bf441419 Mon Sep 17 00:00:00 2001 From: ThibG Date: Wed, 23 Dec 2020 19:55:23 +0100 Subject: [PATCH 323/422] Fix media modal buttons not showing up on mobile (#15417) Fixes #15374 When the pop-out player was introduced, it had tweaks for the mobile view, but it's now disabled in mobile mode and the styling was reused for modals, causing the footer to be hidden on mobile without a good reason. Co-authored-by: Claire --- app/javascript/styles/mastodon/components.scss | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2163d74fc..c248f681e 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7194,21 +7194,6 @@ noscript { .audio-player { border-radius: 0; } - - @media screen and (max-width: 415px) { - width: 210px; - bottom: 10px; - right: 10px; - - &__footer { - display: none; - } - - .video-player, - .audio-player { - border-radius: 0 0 4px 4px; - } - } } .picture-in-picture-placeholder { From 7e6d3a7d9ad3343c7147032fef50bf1cc308a872 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 24 Dec 2020 07:47:50 +0900 Subject: [PATCH 324/422] Fix unfollow action button style (#15418) --- app/javascript/mastodon/features/account/components/header.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 2b97af4e6..c8fd85e1d 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -170,7 +170,7 @@ class Header extends ImmutablePureComponent { } else if (account.getIn(['relationship', 'requested'])) { actionBtn = @@ -95,13 +53,6 @@ exports[` diff --git a/app/javascript/mastodon/components/button.js b/app/javascript/mastodon/components/button.js index eb8dd7dc8..85b2d78ca 100644 --- a/app/javascript/mastodon/components/button.js +++ b/app/javascript/mastodon/components/button.js @@ -10,17 +10,11 @@ export default class Button extends React.PureComponent { disabled: PropTypes.bool, block: PropTypes.bool, secondary: PropTypes.bool, - size: PropTypes.number, className: PropTypes.string, title: PropTypes.string, - style: PropTypes.object, children: PropTypes.node, }; - static defaultProps = { - size: 36, - }; - handleClick = (e) => { if (!this.props.disabled) { this.props.onClick(e); @@ -36,13 +30,6 @@ export default class Button extends React.PureComponent { } render () { - const style = { - padding: `0 ${this.props.size / 2.25}px`, - height: `${this.props.size}px`, - lineHeight: `${this.props.size}px`, - ...this.props.style, - }; - const className = classNames('button', this.props.className, { 'button-secondary': this.props.secondary, 'button--block': this.props.block, @@ -54,7 +41,6 @@ export default class Button extends React.PureComponent { disabled={this.props.disabled} onClick={this.handleClick} ref={this.setRef} - style={style} title={this.props.title} > {this.props.text || this.props.children} diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index c8fd85e1d..b47ebed62 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -164,13 +164,17 @@ class Header extends ImmutablePureComponent { info.push(); } + if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) { + bellBtn = ; + } + if (me !== account.get('id')) { if (!account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn =
From a50fe47a77118dba043143c01d0d6ad6c82f9b31 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Wed, 6 Jan 2021 04:00:42 +0900 Subject: [PATCH 398/422] Fix defaultProps of frameRate to string (#15493) --- app/javascript/mastodon/features/video/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index d8a6c4f50..70e3cd6e8 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -125,7 +125,7 @@ class Video extends React.PureComponent { }; static defaultProps = { - frameRate: 25, + frameRate: '25', }; state = { From 15be57059dcfe99539edda6d4c33f1677b88520e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:01:31 +0100 Subject: [PATCH 399/422] Bump nokogiri from 1.10.10 to 1.11.0 (#15487) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.10 to 1.11.0. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.10...v1.11.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 6180a1d11..8bab6e2e7 100644 --- a/Gemfile +++ b/Gemfile @@ -64,7 +64,7 @@ gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar' gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532' -gem 'nokogiri', '~> 1.10' +gem 'nokogiri', '~> 1.11' gem 'nsa', '~> 0.2' gem 'oj', '~> 3.10' gem 'ox', '~> 2.14' diff --git a/Gemfile.lock b/Gemfile.lock index 46207d01c..25c035ae1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -349,7 +349,7 @@ GEM mime-types-data (3.2020.0512) mimemagic (0.3.5) mini_mime (1.0.2) - mini_portile2 (2.4.0) + mini_portile2 (2.5.0) minitest (5.14.2) msgpack (1.3.3) multi_json (1.15.0) @@ -359,8 +359,9 @@ GEM net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) nio4r (2.5.4) - nokogiri (1.10.10) - mini_portile2 (~> 2.4.0) + nokogiri (1.11.0) + mini_portile2 (~> 2.5.0) + racc (~> 1.4) nokogumbo (2.0.2) nokogiri (~> 1.8, >= 1.8.4) nsa (0.2.7) @@ -433,6 +434,7 @@ GEM pundit (2.1.0) activesupport (>= 3.0.0) raabro (1.3.3) + racc (1.5.2) rack (2.2.3) rack-attack (6.3.1) rack (>= 1.0, < 3) @@ -745,7 +747,7 @@ DEPENDENCIES mime-types (~> 3.3.1) net-ldap (~> 0.17) nilsimsa! - nokogiri (~> 1.10) + nokogiri (~> 1.11) nsa (~> 0.2) oj (~> 3.10) omniauth (~> 1.9) From 38bc4b95625e14c542fc09f8b302f8ca6b92f6ee Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Tue, 5 Jan 2021 16:25:07 -0500 Subject: [PATCH 400/422] Set X-Forwarded-Proto to request scheme (#15310) (#15498) This fixes a bug that prevents logins to mastodon onion services. The nginx directive assumed all requests were made over https, causing a domain mismatch for onion services that have https redirects disabled. The fix more correctly sets X-Forwarded-Proto to the actual scheme used in the request. --- dist/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/nginx.conf b/dist/nginx.conf index 2d5f3a389..a0429d2aa 100644 --- a/dist/nginx.conf +++ b/dist/nginx.conf @@ -73,7 +73,7 @@ server { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Proxy ""; proxy_pass_header Server; @@ -98,7 +98,7 @@ server { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Proxy ""; proxy_pass http://streaming; From 69763b6385250902fdb329d030457159976f70ed Mon Sep 17 00:00:00 2001 From: abcang Date: Wed, 6 Jan 2021 15:49:48 +0900 Subject: [PATCH 401/422] update codeclimate-rubocop (#15500) --- .codeclimate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index dc8ca9a6f..2d1de877c 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -30,7 +30,7 @@ plugins: channel: eslint-7 rubocop: enabled: true - channel: rubocop-0-92 + channel: rubocop-1-70 sass-lint: enabled: true exclude_patterns: From 58e452beb891da7fcb54d78f6f482f39607a833d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Jan 2021 14:06:15 +0900 Subject: [PATCH 402/422] Bump webpack-assets-manifest from 3.1.1 to 4.0.0 (#15288) Bumps [webpack-assets-manifest](https://github.com/webdeveric/webpack-assets-manifest) from 3.1.1 to 4.0.0. - [Release notes](https://github.com/webdeveric/webpack-assets-manifest/releases) - [Commits](https://github.com/webdeveric/webpack-assets-manifest/compare/v3.1.1...v4.0.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 47 +++++++++++++++++++++++++++++++---------------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 30926b651..24cc953e2 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "tiny-queue": "^0.2.1", "uuid": "^8.3.1", "webpack": "^4.44.2", - "webpack-assets-manifest": "^3.1.1", + "webpack-assets-manifest": "^4.0.0", "webpack-bundle-analyzer": "^4.3.0", "webpack-cli": "^3.3.12", "webpack-merge": "^5.7.3", diff --git a/yarn.lock b/yarn.lock index 450363e30..59199e93d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2793,7 +2793,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0, chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2810,7 +2810,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -6821,6 +6821,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + lodash.capitalize@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" @@ -6831,6 +6838,11 @@ lodash.defaults@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= +lodash.escaperegexp@^4.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + lodash.get@^4.0: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -7189,14 +7201,14 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -9551,7 +9563,7 @@ schema-utils@^2.2.0, schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: +schema-utils@^3.0, schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== @@ -10367,7 +10379,7 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" -tapable@^1.0.0, tapable@^1.1.3: +tapable@^1.0, tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== @@ -11041,18 +11053,21 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-assets-manifest@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" - integrity sha512-JV9V2QKc5wEWQptdIjvXDUL1ucbPLH2f27toAY3SNdGZp+xSaStAgpoMcvMZmqtFrBc9a5pTS1058vxyMPOzRQ== +webpack-assets-manifest@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-4.0.0.tgz#6c906f6a77945aa326822e158f22d172ccc59f0f" + integrity sha512-zbozd1Cr6gS5XMWWHfISusocOO2bO05ktpJXWdoYtv12/FSXsNqyVjNwLE9ehBXDsEOwRtqd3kPDdTZKFjjD/w== dependencies: - chalk "^2.0" + chalk "^4.0" + deepmerge "^4.2.2" + lockfile "^1.0.4" + lodash.escaperegexp "^4.0" lodash.get "^4.0" lodash.has "^4.0" - mkdirp "^0.5" - schema-utils "^1.0.0" - tapable "^1.0.0" - webpack-sources "^1.0.0" + mkdirp "^1.0" + schema-utils "^3.0" + tapable "^1.0" + webpack-sources "^1.0" webpack-bundle-analyzer@^4.3.0: version "4.3.0" @@ -11152,7 +11167,7 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== From 32df8950ae8aad25d33c379f1f2fb2ea302053ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Jan 2021 14:10:49 +0900 Subject: [PATCH 403/422] Bump binding_of_caller from 0.8.0 to 1.0.0 (#15489) Bumps [binding_of_caller](https://github.com/banister/binding_of_caller) from 0.8.0 to 1.0.0. - [Release notes](https://github.com/banister/binding_of_caller/releases) - [Commits](https://github.com/banister/binding_of_caller/compare/v0.8.0...v1.0.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 8bab6e2e7..75ecbda04 100644 --- a/Gemfile +++ b/Gemfile @@ -133,7 +133,7 @@ group :development do gem 'active_record_query_trace', '~> 1.8' gem 'annotate', '~> 3.1' gem 'better_errors', '~> 2.9' - gem 'binding_of_caller', '~> 0.7' + gem 'binding_of_caller', '~> 1.0' gem 'bullet', '~> 6.1' gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.4' diff --git a/Gemfile.lock b/Gemfile.lock index 25c035ae1..24954ebe9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,7 +100,7 @@ GEM erubi (>= 1.0.0) rack (>= 0.9.0) bindata (2.4.8) - binding_of_caller (0.8.0) + binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) blurhash (0.1.4) ffi (~> 1.10.0) @@ -165,7 +165,7 @@ GEM crass (1.0.6) css_parser (1.7.1) addressable - debug_inspector (0.0.3) + debug_inspector (1.0.0) devise (4.7.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -690,7 +690,7 @@ DEPENDENCIES annotate (~> 3.1) aws-sdk-s3 (~> 1.87) better_errors (~> 2.9) - binding_of_caller (~> 0.7) + binding_of_caller (~> 1.0) blurhash (~> 0.1) bootsnap (~> 1.5) brakeman (~> 4.10) From 7cb72956a672a54ba5e308c0dec25ed5c8a25bfe Mon Sep 17 00:00:00 2001 From: abcang Date: Thu, 7 Jan 2021 17:30:12 +0900 Subject: [PATCH 404/422] Set RAILS_ENV in Procfile.dev (#15502) * Set RAILS_ENV in Procfile.dev * Also set on sidekiq --- Procfile.dev | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Procfile.dev b/Procfile.dev index e589bbf63..ba04fb661 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1,4 +1,4 @@ -web: env PORT=3000 bundle exec puma -C config/puma.rb -sidekiq: env PORT=3000 bundle exec sidekiq +web: env PORT=3000 RAILS_ENV=development bundle exec puma -C config/puma.rb +sidekiq: env PORT=3000 RAILS_ENV=development bundle exec sidekiq stream: env PORT=4000 yarn run start webpack: ./bin/webpack-dev-server --listen-host 0.0.0.0 From 066dbe1e699775f59f02298c369225277aac234b Mon Sep 17 00:00:00 2001 From: Asier Iturralde Sarasola Date: Thu, 7 Jan 2021 09:32:16 +0100 Subject: [PATCH 405/422] Fix typo: you -> your (#15476) --- config/locales/devise.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml index a3f2c5796..cc4140d14 100644 --- a/config/locales/devise.en.yml +++ b/config/locales/devise.en.yml @@ -68,7 +68,7 @@ en: deleted: explanation: The following security key has been deleted from your account subject: 'Mastodon: Security key deleted' - title: One of you security keys has been deleted + title: One of your security keys has been deleted webauthn_disabled: explanation: Authentication with security keys has been disabled for your account. Login is now possible using only the token generated by the paired TOTP app. subject: 'Mastodon: Authentication with security keys disabled' From efffdd3778fc960280c7677906ed43dae5a952b0 Mon Sep 17 00:00:00 2001 From: abcang Date: Thu, 7 Jan 2021 17:40:55 +0900 Subject: [PATCH 406/422] Fix rubocop config and warnings (#15503) * disable NewCops * update TargetRubyVersion * Fix Lint/MissingSuper for ActiveModelSerializers::Model * Fix Lint/MissingSuper for feed * Fix Lint/FloatComparison * Do not use instance variables --- .rubocop.yml | 3 ++- app/models/account.rb | 32 +++++++++++------------------- app/models/home_feed.rb | 5 ++--- app/models/list_feed.rb | 3 +-- app/models/poll.rb | 10 ++++++---- app/models/public_feed.rb | 22 ++++++++++---------- app/models/tag_feed.rb | 11 +++++----- app/services/keys/claim_service.rb | 12 ++++++----- app/services/keys/query_service.rb | 18 ++++++++++------- lib/paperclip/color_extractor.rb | 2 +- 10 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 14728bf0e..2af0f59bb 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,7 +2,8 @@ require: - rubocop-rails AllCops: - TargetRubyVersion: 2.4 + TargetRubyVersion: 2.5 + NewCops: disable Exclude: - 'spec/**/*' - 'db/**/*' diff --git a/app/models/account.rb b/app/models/account.rb index e6cf03fa8..1f723e206 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -385,15 +385,17 @@ class Account < ApplicationRecord end class Field < ActiveModelSerializers::Model - attributes :name, :value, :verified_at, :account, :errors + attributes :name, :value, :verified_at, :account def initialize(account, attributes) - @account = account - @attributes = attributes - @name = attributes['name'].strip[0, string_limit] - @value = attributes['value'].strip[0, string_limit] - @verified_at = attributes['verified_at']&.to_datetime - @errors = {} + @original_field = attributes + string_limit = account.local? ? 255 : 2047 + super( + account: account, + name: attributes['name'].strip[0, string_limit], + value: attributes['value'].strip[0, string_limit], + verified_at: attributes['verified_at']&.to_datetime, + ) end def verified? @@ -415,22 +417,12 @@ class Account < ApplicationRecord end def mark_verified! - @verified_at = Time.now.utc - @attributes['verified_at'] = @verified_at + self.verified_at = Time.now.utc + @original_field['verified_at'] = verified_at end def to_h - { name: @name, value: @value, verified_at: @verified_at } - end - - private - - def string_limit - if account.local? - 255 - else - 2047 - end + { name: name, value: value, verified_at: verified_at } end end diff --git a/app/models/home_feed.rb b/app/models/home_feed.rb index 0fe9dae46..d6ebb5fa6 100644 --- a/app/models/home_feed.rb +++ b/app/models/home_feed.rb @@ -2,12 +2,11 @@ class HomeFeed < Feed def initialize(account) - @type = :home - @id = account.id @account = account + super(:home, account.id) end def regenerating? - redis.exists?("account:#{@id}:regeneration") + redis.exists?("account:#{@account.id}:regeneration") end end diff --git a/app/models/list_feed.rb b/app/models/list_feed.rb index f371e4ed9..47b9281b8 100644 --- a/app/models/list_feed.rb +++ b/app/models/list_feed.rb @@ -2,7 +2,6 @@ class ListFeed < Feed def initialize(list) - @type = :list - @id = list.id + super(:list, list.id) end end diff --git a/app/models/poll.rb b/app/models/poll.rb index e1ca55252..d2a17277b 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -73,10 +73,12 @@ class Poll < ApplicationRecord attributes :id, :title, :votes_count, :poll def initialize(poll, id, title, votes_count) - @poll = poll - @id = id - @title = title - @votes_count = votes_count + super( + poll: poll, + id: id, + title: title, + votes_count: votes_count, + ) end end diff --git a/app/models/public_feed.rb b/app/models/public_feed.rb index c8ce1a140..5e4c3e1ce 100644 --- a/app/models/public_feed.rb +++ b/app/models/public_feed.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class PublicFeed < Feed +class PublicFeed # @param [Account] account # @param [Hash] options # @option [Boolean] :with_replies @@ -33,28 +33,30 @@ class PublicFeed < Feed private + attr_reader :account, :options + def with_reblogs? - @options[:with_reblogs] + options[:with_reblogs] end def with_replies? - @options[:with_replies] + options[:with_replies] end def local_only? - @options[:local] + options[:local] end def remote_only? - @options[:remote] + options[:remote] end def account? - @account.present? + account.present? end def media_only? - @options[:only_media] + options[:only_media] end def public_scope @@ -82,9 +84,9 @@ class PublicFeed < Feed end def account_filters_scope - Status.not_excluded_by_account(@account).tap do |scope| - scope.merge!(Status.not_domain_blocked_by_account(@account)) unless local_only? - scope.merge!(Status.in_chosen_languages(@account)) if @account.chosen_languages.present? + Status.not_excluded_by_account(account).tap do |scope| + scope.merge!(Status.not_domain_blocked_by_account(account)) unless local_only? + scope.merge!(Status.in_chosen_languages(account)) if account.chosen_languages.present? end end end diff --git a/app/models/tag_feed.rb b/app/models/tag_feed.rb index 9a16ffc82..b8cd63557 100644 --- a/app/models/tag_feed.rb +++ b/app/models/tag_feed.rb @@ -13,9 +13,8 @@ class TagFeed < PublicFeed # @option [Boolean] :remote # @option [Boolean] :only_media def initialize(tag, account, options = {}) - @tag = tag - @account = account - @options = options + @tag = tag + super(account, options) end # @param [Integer] limit @@ -40,15 +39,15 @@ class TagFeed < PublicFeed private def tagged_with_any_scope - Status.group(:id).tagged_with(tags_for(Array(@tag.name) | Array(@options[:any]))) + Status.group(:id).tagged_with(tags_for(Array(@tag.name) | Array(options[:any]))) end def tagged_with_all_scope - Status.group(:id).tagged_with_all(tags_for(@options[:all])) + Status.group(:id).tagged_with_all(tags_for(options[:all])) end def tagged_with_none_scope - Status.group(:id).tagged_with_none(tags_for(@options[:none])) + Status.group(:id).tagged_with_none(tags_for(options[:none])) end def tags_for(names) diff --git a/app/services/keys/claim_service.rb b/app/services/keys/claim_service.rb index 672119130..69568a0d1 100644 --- a/app/services/keys/claim_service.rb +++ b/app/services/keys/claim_service.rb @@ -8,11 +8,13 @@ class Keys::ClaimService < BaseService :key, :signature def initialize(account, device_id, key_attributes = {}) - @account = account - @device_id = device_id - @key_id = key_attributes[:key_id] - @key = key_attributes[:key] - @signature = key_attributes[:signature] + super( + account: account, + device_id: device_id, + key_id: key_attributes[:key_id], + key: key_attributes[:key], + signature: key_attributes[:signature], + ) end end diff --git a/app/services/keys/query_service.rb b/app/services/keys/query_service.rb index 286fbd834..ac3388bdc 100644 --- a/app/services/keys/query_service.rb +++ b/app/services/keys/query_service.rb @@ -7,8 +7,10 @@ class Keys::QueryService < BaseService attributes :account, :devices def initialize(account, devices) - @account = account - @devices = devices || [] + super( + account: account, + devices: devices || [], + ) end def find(device_id) @@ -20,11 +22,13 @@ class Keys::QueryService < BaseService attributes :device_id, :name, :identity_key, :fingerprint_key def initialize(attributes = {}) - @device_id = attributes[:device_id] - @name = attributes[:name] - @identity_key = attributes[:identity_key] - @fingerprint_key = attributes[:fingerprint_key] - @claim_url = attributes[:claim_url] + super( + device_id: attributes[:device_id], + name: attributes[:name], + identity_key: attributes[:identity_key], + fingerprint_key: attributes[:fingerprint_key], + ) + @claim_url = attributes[:claim_url] end def valid_claim_url? diff --git a/lib/paperclip/color_extractor.rb b/lib/paperclip/color_extractor.rb index f850dc067..a70a3d21f 100644 --- a/lib/paperclip/color_extractor.rb +++ b/lib/paperclip/color_extractor.rb @@ -142,7 +142,7 @@ module Paperclip g = 0.0 b = 0.0 - if s == 0.0 + if s.zero? r = l.to_f g = l.to_f b = l.to_f # achromatic From f47c177eb741a99fef5708175a0a3d4dfcc02639 Mon Sep 17 00:00:00 2001 From: kaiyou Date: Fri, 8 Jan 2021 07:07:08 +0100 Subject: [PATCH 407/422] Support clock drift in Omniauth SAML provider (#15511) The setting is not well documented by the provider, but allows for clock skew between SP and IDP, see: https://github.com/omniauth/omniauth-saml/blob/master/spec/omniauth/strategies/saml_spec.rb Co-authored-by: kaiyou --- config/initializers/omniauth.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index e8d7697a1..9e037f421 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -60,6 +60,7 @@ Devise.setup do |config| saml_options[:attribute_statements][:verified] = [ENV['SAML_ATTRIBUTES_STATEMENTS_VERIFIED']] if ENV['SAML_ATTRIBUTES_STATEMENTS_VERIFIED'] saml_options[:attribute_statements][:verified_email] = [ENV['SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL']] if ENV['SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL'] saml_options[:uid_attribute] = ENV['SAML_UID_ATTRIBUTE'] if ENV['SAML_UID_ATTRIBUTE'] + saml_options[:allowed_clock_drift] = ENV['SAML_ALLOWED_CLOCK_DRIFT'] if ENV['SAML_ALLOWED_CLOCK_DRIFT'] config.omniauth :saml, saml_options end end From 1817f96578a31cbc719817433e9f7c592295094a Mon Sep 17 00:00:00 2001 From: kaiyou Date: Fri, 8 Jan 2021 07:13:26 +0100 Subject: [PATCH 408/422] Fix the Dockerfile in case of Kaniko build (#15510) Kaniko does not support looking up binaries from $PATH, so we specify the full path to the bash binary. Co-authored-by: kaiyou --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 95d45bab4..136b2a35a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:20.04 as build-dep # Use bash for the shell -SHELL ["bash", "-c"] +SHELL ["/usr/bin/bash", "-c"] # Install Node v12 (LTS) ENV NODE_VER="12.20.0" From a1a8aa4a08ee457b62f505cea929a0a319655c83 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 8 Jan 2021 12:26:29 +0100 Subject: [PATCH 409/422] Skip processing Update activities on unknown accounts (#15514) This also skips fetching the actor completely. This will be useful if we end up distributing Update activities linked to account suspensions more widely (they are currently only delivered to the suspended account's followers), as currently, instances not knowing about the suspended account would fetch it to then process the suspension. Co-authored-by: Claire --- app/controllers/activitypub/inboxes_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index d3044f180..92dcb5ac7 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -5,7 +5,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController include JsonLdHelper include AccountOwnedConcern - before_action :skip_unknown_actor_delete + before_action :skip_unknown_actor_activity before_action :require_signature! skip_before_action :authenticate_user! @@ -18,13 +18,13 @@ class ActivityPub::InboxesController < ActivityPub::BaseController private - def skip_unknown_actor_delete - head 202 if unknown_deleted_account? + def skip_unknown_actor_activity + head 202 if unknown_affected_account? end - def unknown_deleted_account? + def unknown_affected_account? json = Oj.load(body, mode: :strict) - json.is_a?(Hash) && json['type'] == 'Delete' && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists? + json.is_a?(Hash) && %w(Delete Update).include?(json['type']) && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists? rescue Oj::ParseError false end From 73ddb60c32090c9685f3b74e0bbb4a06b34a7083 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 9 Jan 2021 03:48:50 +0100 Subject: [PATCH 410/422] Fix OCR lang data failing to load (#15519) Fixes #15472 Co-authored-by: Claire --- .../mastodon/features/ui/components/focal_point_modal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js index 578375a7f..ffa783e3b 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js @@ -227,7 +227,7 @@ class FocalPointModal extends ImmutablePureComponent { const worker = createWorker({ workerPath: tesseractWorkerPath, corePath: tesseractCorePath, - langPath: assetHost, + langPath: `${assetHost}/ocr/lang-data/`, logger: ({ status, progress }) => { if (status === 'recognizing text') { this.setState({ ocrStatus: 'detecting', progress }); From 93951431269403201550e914dee508a522becf8b Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 9 Jan 2021 03:51:32 +0100 Subject: [PATCH 411/422] Fix maintenance script not re-indexing some indexes on textual values (#15515) * Fix maintenance script not re-indexing some indexes on textual values Fixes #15475 * Refresh instance view at the end of the maintenance script run Co-authored-by: Claire --- lib/mastodon/maintenance_cli.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/mastodon/maintenance_cli.rb b/lib/mastodon/maintenance_cli.rb index 822051ceb..029d42a05 100644 --- a/lib/mastodon/maintenance_cli.rb +++ b/lib/mastodon/maintenance_cli.rb @@ -160,6 +160,7 @@ module Mastodon deduplicate_tags! deduplicate_webauthn_credentials! + Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false) if ActiveRecord::Migrator.current_version >= 2020_12_06_004238 Rails.cache.clear @prompt.say 'Finished!' @@ -188,6 +189,11 @@ module Mastodon else ActiveRecord::Base.connection.add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true end + + @prompt.say 'Reindexing textual indexes on accounts…' + ActiveRecord::Base.connection.execute('REINDEX INDEX search_index;') + ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_uri;') + ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_url;') end def deduplicate_users! From 087ed84367537ac168ed3e00bb7eb4bd582dc3d0 Mon Sep 17 00:00:00 2001 From: luigi <007.lva@gmail.com> Date: Sat, 9 Jan 2021 18:32:01 -0500 Subject: [PATCH 412/422] Optimize map { ... }.compact calls (#15513) * Optimize map { ... }.compact using Enumerable#filter_map, supported since Ruby 2.7 * Add poyfill for Enumerable#filter_map --- .../api/v1/crypto/keys/claims_controller.rb | 2 +- .../api/v1/crypto/keys/queries_controller.rb | 2 +- app/controllers/concerns/cache_concern.rb | 2 +- app/lib/activitypub/activity/flag.rb | 4 +-- app/lib/entity_cache.rb | 2 +- app/lib/spam_check.rb | 4 +-- app/models/account.rb | 4 +-- .../concerns/status_threading_concern.rb | 2 +- app/models/custom_filter.rb | 2 +- app/models/notification.rb | 2 +- app/models/status.rb | 4 +-- .../status_relationships_presenter.rb | 2 +- .../fetch_featured_collection_service.rb | 3 +-- .../activitypub/process_collection_service.rb | 2 +- .../activitypub/process_poll_service.rb | 2 +- .../synchronize_followers_service.rb | 2 +- app/services/fetch_link_card_service.rb | 2 +- app/services/import_service.rb | 4 +-- app/validators/existing_username_validator.rb | 2 +- config/application.rb | 1 + lib/enumerable.rb | 26 +++++++++++++++++++ lib/paperclip/attachment_extensions.rb | 2 +- 22 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 lib/enumerable.rb diff --git a/app/controllers/api/v1/crypto/keys/claims_controller.rb b/app/controllers/api/v1/crypto/keys/claims_controller.rb index 34b21a380..f9d202d67 100644 --- a/app/controllers/api/v1/crypto/keys/claims_controller.rb +++ b/app/controllers/api/v1/crypto/keys/claims_controller.rb @@ -12,7 +12,7 @@ class Api::V1::Crypto::Keys::ClaimsController < Api::BaseController private def set_claim_results - @claim_results = devices.map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) }.compact + @claim_results = devices.filter_map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) } end def resource_params diff --git a/app/controllers/api/v1/crypto/keys/queries_controller.rb b/app/controllers/api/v1/crypto/keys/queries_controller.rb index 0851d797d..e6ce9f919 100644 --- a/app/controllers/api/v1/crypto/keys/queries_controller.rb +++ b/app/controllers/api/v1/crypto/keys/queries_controller.rb @@ -17,7 +17,7 @@ class Api::V1::Crypto::Keys::QueriesController < Api::BaseController end def set_query_results - @query_results = @accounts.map { |account| ::Keys::QueryService.new.call(account) }.compact + @query_results = @accounts.filter_map { |account| ::Keys::QueryService.new.call(account) } end def account_ids diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb index abbdb410a..8d82eda5c 100644 --- a/app/controllers/concerns/cache_concern.rb +++ b/app/controllers/concerns/cache_concern.rb @@ -45,7 +45,7 @@ module CacheConcern end end - raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact + raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] } end def cache_collection_paginated_by_id(raw, klass, limit, options) diff --git a/app/lib/activitypub/activity/flag.rb b/app/lib/activitypub/activity/flag.rb index 1659bc61f..8dfc76f0a 100644 --- a/app/lib/activitypub/activity/flag.rb +++ b/app/lib/activitypub/activity/flag.rb @@ -4,8 +4,8 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity def perform return if skip_reports? - target_accounts = object_uris.map { |uri| account_from_uri(uri) }.compact.select(&:local?) - target_statuses_by_account = object_uris.map { |uri| status_from_uri(uri) }.compact.select(&:local?).group_by(&:account_id) + target_accounts = object_uris.filter_map { |uri| account_from_uri(uri) }.select(&:local?) + target_statuses_by_account = object_uris.filter_map { |uri| status_from_uri(uri) }.select(&:local?).group_by(&:account_id) target_accounts.each do |target_account| target_statuses = target_statuses_by_account[target_account.id] diff --git a/app/lib/entity_cache.rb b/app/lib/entity_cache.rb index 89cbf8d2c..e38a3adcd 100644 --- a/app/lib/entity_cache.rb +++ b/app/lib/entity_cache.rb @@ -29,7 +29,7 @@ class EntityCache uncached.each_value { |item| Rails.cache.write(to_key(:emoji, item.shortcode, domain), item, expires_in: MAX_EXPIRATION) } end - shortcodes.map { |shortcode| cached[to_key(:emoji, shortcode, domain)] || uncached[shortcode] }.compact + shortcodes.filter_map { |shortcode| cached[to_key(:emoji, shortcode, domain)] || uncached[shortcode] } end def to_key(type, *ids) diff --git a/app/lib/spam_check.rb b/app/lib/spam_check.rb index 652d03615..68e586d00 100644 --- a/app/lib/spam_check.rb +++ b/app/lib/spam_check.rb @@ -186,9 +186,9 @@ class SpamCheck def matching_status_ids if nilsimsa? - other_digests.select { |record| record.start_with?('nilsimsa') && nilsimsa_compare_value(digest, record.split(':')[1]) >= NILSIMSA_COMPARE_THRESHOLD }.map { |record| record.split(':')[2] }.compact + other_digests.select { |record| record.start_with?('nilsimsa') && nilsimsa_compare_value(digest, record.split(':')[1]) >= NILSIMSA_COMPARE_THRESHOLD }.filter_map { |record| record.split(':')[2] } else - other_digests.select { |record| record.start_with?('md5') && record.split(':')[1] == digest }.map { |record| record.split(':')[2] }.compact + other_digests.select { |record| record.start_with?('md5') && record.split(':')[1] == digest }.filter_map { |record| record.split(':')[2] } end end diff --git a/app/models/account.rb b/app/models/account.rb index 1f723e206..75ebfb2f3 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -508,7 +508,7 @@ class Account < ApplicationRecord def from_text(text) return [] if text.blank? - text.scan(MENTION_RE).map { |match| match.first.split('@', 2) }.uniq.map do |(username, domain)| + text.scan(MENTION_RE).map { |match| match.first.split('@', 2) }.uniq.filter_map do |(username, domain)| domain = begin if TagManager.instance.local_domain?(domain) nil @@ -517,7 +517,7 @@ class Account < ApplicationRecord end end EntityCache.instance.mention(username, domain) - end.compact + end end private diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index a0ead1995..5c04108e4 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -83,7 +83,7 @@ module StatusThreadingConcern def find_statuses_from_tree_path(ids, account, promote: false) statuses = Status.with_accounts(ids).to_a account_ids = statuses.map(&:account_id).uniq - domains = statuses.map(&:account_domain).compact.uniq + domains = statuses.filter_map(&:account_domain).uniq relations = relations_map_for_account(account, account_ids, domains) statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 8df8a4fbf..9d0f3729b 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -46,7 +46,7 @@ class CustomFilter < ApplicationRecord private def clean_up_contexts - self.context = Array(context).map(&:strip).map(&:presence).compact + self.context = Array(context).map(&:strip).filter_map(&:presence) end def remove_cache diff --git a/app/models/notification.rb b/app/models/notification.rb index e83123c97..b6db37d6d 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -92,7 +92,7 @@ class Notification < ApplicationRecord end def reload_stale_associations!(cached_items) - account_ids = (cached_items.map(&:from_account_id) + cached_items.map { |item| item.target_status&.account_id }.compact).uniq + account_ids = (cached_items.map(&:from_account_id) + cached_items.filter_map { |item| item.target_status&.account_id }).uniq return if account_ids.empty? diff --git a/app/models/status.rb b/app/models/status.rb index b426f9d5b..558a37f99 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -334,7 +334,7 @@ class Status < ApplicationRecord def from_text(text) return [] if text.blank? - text.scan(FetchLinkCardService::URL_PATTERN).map(&:first).uniq.map do |url| + text.scan(FetchLinkCardService::URL_PATTERN).map(&:first).uniq.filter_map do |url| status = begin if TagManager.instance.local_url?(url) ActivityPub::TagManager.instance.uri_to_resource(url, Status) @@ -343,7 +343,7 @@ class Status < ApplicationRecord end end status&.distributable? ? status : nil - end.compact + end end end diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb index 3cc905a75..f4849d245 100644 --- a/app/presenters/status_relationships_presenter.rb +++ b/app/presenters/status_relationships_presenter.rb @@ -14,7 +14,7 @@ class StatusRelationshipsPresenter else statuses = statuses.compact status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id] }.uniq.compact - conversation_ids = statuses.map(&:conversation_id).compact.uniq + conversation_ids = statuses.filter_map(&:conversation_id).uniq pinnable_status_ids = statuses.map(&:proper).select { |s| s.account_id == current_account_id && %w(public unlisted).include?(s.visibility) }.map(&:id) @reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {}) diff --git a/app/services/activitypub/fetch_featured_collection_service.rb b/app/services/activitypub/fetch_featured_collection_service.rb index 2c2770466..82c861f5b 100644 --- a/app/services/activitypub/fetch_featured_collection_service.rb +++ b/app/services/activitypub/fetch_featured_collection_service.rb @@ -24,8 +24,7 @@ class ActivityPub::FetchFeaturedCollectionService < BaseService def process_items(items) status_ids = items.map { |item| value_or_id(item) } .reject { |uri| ActivityPub::TagManager.instance.local_uri?(uri) } - .map { |uri| ActivityPub::FetchRemoteStatusService.new.call(uri) } - .compact + .filter_map { |uri| ActivityPub::FetchRemoteStatusService.new.call(uri) } .select { |status| status.account_id == @account.id } .map(&:id) diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index f1d175dac..170e6709c 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -37,7 +37,7 @@ class ActivityPub::ProcessCollectionService < BaseService end def process_items(items) - items.reverse_each.map { |item| process_item(item) }.compact + items.reverse_each.filter_map { |item| process_item(item) } end def supported_context? diff --git a/app/services/activitypub/process_poll_service.rb b/app/services/activitypub/process_poll_service.rb index 903b6a78a..d83e614d8 100644 --- a/app/services/activitypub/process_poll_service.rb +++ b/app/services/activitypub/process_poll_service.rb @@ -30,7 +30,7 @@ class ActivityPub::ProcessPollService < BaseService voters_count = @json['votersCount'] - latest_options = items.map { |item| item['name'].presence || item['content'] }.compact + latest_options = items.filter_map { |item| item['name'].presence || item['content'] } # If for some reasons the options were changed, it invalidates all previous # votes, so we need to remove them diff --git a/app/services/activitypub/synchronize_followers_service.rb b/app/services/activitypub/synchronize_followers_service.rb index d83fcf55e..93cd60253 100644 --- a/app/services/activitypub/synchronize_followers_service.rb +++ b/app/services/activitypub/synchronize_followers_service.rb @@ -14,7 +14,7 @@ class ActivityPub::SynchronizeFollowersService < BaseService # should never happen in practice, since in almost all cases we keep an # Account record, and should we not do that, we should have sent a Delete. # In any case there is not much we can do if that occurs. - @expected_followers = items.map { |uri| ActivityPub::TagManager.instance.uri_to_resource(uri, Account) }.compact + @expected_followers = items.filter_map { |uri| ActivityPub::TagManager.instance.uri_to_resource(uri, Account) } remove_unexpected_local_followers! handle_unexpected_outgoing_follows! diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index 7efa31054..255490d5c 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -67,7 +67,7 @@ class FetchLinkCardService < BaseService else html = Nokogiri::HTML(@status.text) links = html.css('a') - urls = links.map { |a| Addressable::URI.parse(a['href']) unless skip_link?(a) }.compact.map(&:normalize).compact + urls = links.filter_map { |a| Addressable::URI.parse(a['href']) unless skip_link?(a) }.filter_map(&:normalize) end urls.reject { |uri| bad_url?(uri) }.first diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 0c6ef2238..b11532283 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -107,12 +107,12 @@ class ImportService < BaseService end end - statuses = items.map do |uri| + statuses = items.filter_map do |uri| status = ActivityPub::TagManager.instance.uri_to_resource(uri, Status) next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri) status || ActivityPub::FetchRemoteStatusService.new.call(uri) - end.compact + end account_ids = statuses.map(&:account_id) preloaded_relations = relations_map_for_account(@account, account_ids) diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb index b31d09827..723302ec9 100644 --- a/app/validators/existing_username_validator.rb +++ b/app/validators/existing_username_validator.rb @@ -5,7 +5,7 @@ class ExistingUsernameValidator < ActiveModel::EachValidator return if value.blank? if options[:multiple] - missing_usernames = value.split(',').map { |username| username.strip.gsub(/\A@/, '') }.map { |username| username unless Account.find_local(username) }.compact + missing_usernames = value.split(',').map { |username| username.strip.gsub(/\A@/, '') }.filter_map { |username| username unless Account.find_local(username) } record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: missing_usernames.join(', '))) if missing_usernames.any? else record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) unless Account.find_local(value.strip.gsub(/\A@/, '')) diff --git a/config/application.rb b/config/application.rb index af7735221..696dc17e6 100644 --- a/config/application.rb +++ b/config/application.rb @@ -7,6 +7,7 @@ require 'rails/all' Bundler.require(*Rails.groups) require_relative '../app/lib/exceptions' +require_relative '../lib/enumerable' require_relative '../lib/redis/namespace_extensions' require_relative '../lib/paperclip/url_generator_extensions' require_relative '../lib/paperclip/attachment_extensions' diff --git a/lib/enumerable.rb b/lib/enumerable.rb new file mode 100644 index 000000000..66918f65e --- /dev/null +++ b/lib/enumerable.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Enumerable + # TODO: Remove this once stop to support Ruby 2.6 + if RUBY_VERSION < '2.7.0' + def filter_map + if block_given? + result = [] + each do |element| + res = yield element + result << res if res + end + result + else + Enumerator.new do |yielder| + result = [] + each do |element| + res = yielder.yield element + result << res if res + end + result + end + end + end + end +end diff --git a/lib/paperclip/attachment_extensions.rb b/lib/paperclip/attachment_extensions.rb index 94f7769b6..e25a34213 100644 --- a/lib/paperclip/attachment_extensions.rb +++ b/lib/paperclip/attachment_extensions.rb @@ -27,7 +27,7 @@ module Paperclip return true if original_filename == other_filename return false if original_filename.nil? - formats = styles.values.map(&:format).compact + formats = styles.values.filter_map(&:format) return false if formats.empty? From 11d603101a7b3389c679b8c155a3cb06203ca31a Mon Sep 17 00:00:00 2001 From: Levi Bard Date: Sun, 10 Jan 2021 12:47:21 +0100 Subject: [PATCH 413/422] Fix muting users with duration via the REST api (#15516) --- app/controllers/api/v1/accounts_controller.rb | 2 +- .../api/v1/accounts_controller_spec.rb | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 3e66ff212..953874e1a 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -42,7 +42,7 @@ class Api::V1::AccountsController < Api::BaseController end def mute - MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration] || 0)) + MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration]&.to_i || 0)) render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships end diff --git a/spec/controllers/api/v1/accounts_controller_spec.rb b/spec/controllers/api/v1/accounts_controller_spec.rb index 1e656503f..d9ee37ffa 100644 --- a/spec/controllers/api/v1/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts_controller_spec.rb @@ -268,6 +268,34 @@ RSpec.describe Api::V1::AccountsController, type: :controller do it_behaves_like 'forbidden for wrong scope', 'read:accounts' end + describe 'POST #mute with nonzero duration set' do + let(:scopes) { 'write:mutes' } + let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + user.account.follow!(other_account) + post :mute, params: { id: other_account.id, duration: 300 } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'does not remove the following relation between user and target user' do + expect(user.account.following?(other_account)).to be true + end + + it 'creates a muting relation' do + expect(user.account.muting?(other_account)).to be true + end + + it 'mutes notifications' do + expect(user.account.muting_notifications?(other_account)).to be true + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + end + describe 'POST #unmute' do let(:scopes) { 'write:mutes' } let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } From 7bed25f3eabecc84268a4b6c254cc3e0738926b6 Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 12 Jan 2021 09:25:01 +0100 Subject: [PATCH 414/422] Fix processing of incoming Block activities (#15546) Unlike locally-issued blocks, they weren't clearing follow relationships in both directions, follow requests or notifications. Co-authored-by: Claire --- app/lib/activitypub/activity/block.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/block.rb b/app/lib/activitypub/activity/block.rb index 90477bf33..92a0f813f 100644 --- a/app/lib/activitypub/activity/block.rb +++ b/app/lib/activitypub/activity/block.rb @@ -11,8 +11,13 @@ class ActivityPub::Activity::Block < ActivityPub::Activity return end + UnfollowService.new.call(@account, target_account) if @account.following?(target_account) UnfollowService.new.call(target_account, @account) if target_account.following?(@account) + RejectFollowService.new.call(target_account, @account) if target_account.requested?(@account) - @account.block!(target_account, uri: @json['id']) unless delete_arrived_first?(@json['id']) + unless delete_arrived_first?(@json['id']) + BlockWorker.perform_async(@account.id, target_account.id) + @account.block!(target_account, uri: @json['id']) + end end end From 54d4e5252be8cd9fa780df46e06541da8263d368 Mon Sep 17 00:00:00 2001 From: ThibG Date: Tue, 12 Jan 2021 09:27:38 +0100 Subject: [PATCH 415/422] Use Rails' index_by where it makes sense (#15542) * Use Rails' index_by where it makes sense * Fix tests Co-authored-by: Claire --- app/controllers/api/v1/markers_controller.rb | 2 +- app/controllers/concerns/cache_concern.rb | 2 +- app/lib/entity_cache.rb | 2 +- app/lib/settings/scoped_settings.rb | 2 +- app/lib/webfinger.rb | 2 +- app/models/account.rb | 2 +- app/models/notification.rb | 2 +- app/models/setting.rb | 2 +- app/models/status.rb | 2 +- app/models/trending_tags.rb | 2 +- lib/mastodon/media_cli.rb | 2 +- spec/models/notification_spec.rb | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/v1/markers_controller.rb b/app/controllers/api/v1/markers_controller.rb index 28c2ec791..867e6facf 100644 --- a/app/controllers/api/v1/markers_controller.rb +++ b/app/controllers/api/v1/markers_controller.rb @@ -7,7 +7,7 @@ class Api::V1::MarkersController < Api::BaseController before_action :require_user! def index - @markers = current_user.markers.where(timeline: Array(params[:timeline])).each_with_object({}) { |marker, h| h[marker.timeline] = marker } + @markers = current_user.markers.where(timeline: Array(params[:timeline])).index_by(&:timeline) render json: serialize_map(@markers) end diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb index 8d82eda5c..3fb4b962a 100644 --- a/app/controllers/concerns/cache_concern.rb +++ b/app/controllers/concerns/cache_concern.rb @@ -38,7 +38,7 @@ module CacheConcern klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!) unless uncached_ids.empty? - uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item } + uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id) uncached.each_value do |item| Rails.cache.write(item, item) diff --git a/app/lib/entity_cache.rb b/app/lib/entity_cache.rb index e38a3adcd..5d51e8585 100644 --- a/app/lib/entity_cache.rb +++ b/app/lib/entity_cache.rb @@ -25,7 +25,7 @@ class EntityCache end unless uncached_ids.empty? - uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).each_with_object({}) { |item, h| h[item.shortcode] = item } + uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).index_by(&:shortcode) uncached.each_value { |item| Rails.cache.write(to_key(:emoji, item.shortcode, domain), item, expires_in: MAX_EXPIRATION) } end diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb index ef694205c..acabf0c8e 100644 --- a/app/lib/settings/scoped_settings.rb +++ b/app/lib/settings/scoped_settings.rb @@ -30,7 +30,7 @@ module Settings def all_as_records vars = thing_scoped - records = vars.each_with_object({}) { |r, h| h[r.var] = r } + records = vars.index_by(&:var) Setting.default_settings.each do |key, default_value| next if records.key?(key) || default_value.is_a?(Hash) diff --git a/app/lib/webfinger.rb b/app/lib/webfinger.rb index c7aa43bb3..702365939 100644 --- a/app/lib/webfinger.rb +++ b/app/lib/webfinger.rb @@ -21,7 +21,7 @@ class Webfinger private def links - @links ||= @json['links'].map { |link| [link['rel'], link] }.to_h + @links ||= @json['links'].index_by { |link| link['rel'] } end end diff --git a/app/models/account.rb b/app/models/account.rb index 75ebfb2f3..6f5bc6295 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -273,7 +273,7 @@ class Account < ApplicationRecord end def tags_as_strings=(tag_names) - hashtags_map = Tag.find_or_create_by_names(tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag } + hashtags_map = Tag.find_or_create_by_names(tag_names).index_by(&:name) # Remove hashtags that are to be deleted tags.each do |tag| diff --git a/app/models/notification.rb b/app/models/notification.rb index b6db37d6d..5e9ea62a0 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -96,7 +96,7 @@ class Notification < ApplicationRecord return if account_ids.empty? - accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } + accounts = Account.where(id: account_ids).includes(:account_stat).index_by(&:id) cached_items.each do |item| item.from_account = accounts[item.from_account_id] diff --git a/app/models/setting.rb b/app/models/setting.rb index a5878e96a..4bcaa060f 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -40,7 +40,7 @@ class Setting < RailsSettings::Base def all_as_records vars = thing_scoped - records = vars.each_with_object({}) { |r, h| h[r.var] = r } + records = vars.index_by(&:var) default_settings.each do |key, default_value| next if records.key?(key) || default_value.is_a?(Hash) diff --git a/app/models/status.rb b/app/models/status.rb index 558a37f99..fcc7a026d 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -301,7 +301,7 @@ class Status < ApplicationRecord return if account_ids.empty? - accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } + accounts = Account.where(id: account_ids).includes(:account_stat).index_by(&:id) cached_items.each do |item| item.account = accounts[item.account_id] diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb index c69f6d3c3..9c2aa0ee8 100644 --- a/app/models/trending_tags.rb +++ b/app/models/trending_tags.rb @@ -91,7 +91,7 @@ class TrendingTags tags = Tag.where(id: tag_ids) tags = tags.trendable if filtered - tags = tags.each_with_object({}) { |tag, h| h[tag.id] = tag } + tags = tags.index_by(&:id) tag_ids.map { |tag_id| tags[tag_id] }.compact.take(limit) end diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb index 5f4a414b1..59c118500 100644 --- a/lib/mastodon/media_cli.rb +++ b/lib/mastodon/media_cli.rb @@ -326,7 +326,7 @@ module Mastodon end preload_map.each_with_object({}) do |(model_name, record_ids), model_map| - model_map[model_name] = model_name.constantize.where(id: record_ids).each_with_object({}) { |record, record_map| record_map[record.id] = record } + model_map[model_name] = model_name.constantize.where(id: record_ids).index_by(&:id) end end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index d2e676ec2..0a045904b 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -71,7 +71,7 @@ RSpec.describe Notification, type: :model do before do allow(accounts_with_ids).to receive(:[]).with(stale_account1.id).and_return(account1) allow(accounts_with_ids).to receive(:[]).with(stale_account2.id).and_return(account2) - allow(Account).to receive_message_chain(:where, :includes, :each_with_object).and_return(accounts_with_ids) + allow(Account).to receive_message_chain(:where, :includes, :index_by).and_return(accounts_with_ids) end let(:cached_items) do From fe6ee39168049ed21f9a5955e1b1736a382c7085 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 00:59:43 +0900 Subject: [PATCH 416/422] Bump nokogiri from 1.11.0 to 1.11.1 (#15539) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.0...v1.11.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 24954ebe9..5e9808c0b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -359,7 +359,7 @@ GEM net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) nio4r (2.5.4) - nokogiri (1.11.0) + nokogiri (1.11.1) mini_portile2 (~> 2.5.0) racc (~> 1.4) nokogumbo (2.0.2) From 4812c16cb520f638bc46fbea107e651a1d9ce8f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:02:51 +0900 Subject: [PATCH 417/422] Bump sanitize from 5.2.1 to 5.2.2 (#15538) Bumps [sanitize](https://github.com/rgrove/sanitize) from 5.2.1 to 5.2.2. - [Release notes](https://github.com/rgrove/sanitize/releases) - [Changelog](https://github.com/rgrove/sanitize/blob/master/HISTORY.md) - [Commits](https://github.com/rgrove/sanitize/compare/v5.2.1...v5.2.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5e9808c0b..5bf10e076 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -362,7 +362,7 @@ GEM nokogiri (1.11.1) mini_portile2 (~> 2.5.0) racc (~> 1.4) - nokogumbo (2.0.2) + nokogumbo (2.0.4) nokogiri (~> 1.8, >= 1.8.4) nsa (0.2.7) activesupport (>= 4.2, < 6) @@ -560,7 +560,7 @@ GEM fugit (~> 1.1, >= 1.1.6) safety_net_attestation (0.4.0) jwt (~> 2.0) - sanitize (5.2.1) + sanitize (5.2.2) crass (~> 1.0.2) nokogiri (>= 1.8.0) nokogumbo (~> 2.0) From 1118194f29c5b6f2e9215118dc857b4818ddc4de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:06:28 +0900 Subject: [PATCH 418/422] Bump simplecov from 0.21.0 to 0.21.2 (#15536) Bumps [simplecov](https://github.com/simplecov-ruby/simplecov) from 0.21.0 to 0.21.2. - [Release notes](https://github.com/simplecov-ruby/simplecov/releases) - [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md) - [Commits](https://github.com/simplecov-ruby/simplecov/compare/v0.21.0...v0.21.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5bf10e076..85767aa14 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -591,7 +591,7 @@ GEM simple_form (5.0.3) actionpack (>= 5.0) activemodel (>= 5.0) - simplecov (0.21.0) + simplecov (0.21.2) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) From 2d4a550d105e73767138f8cf27f851599ee5b4d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:08:19 +0900 Subject: [PATCH 419/422] Bump sass from 1.32.0 to 1.32.2 (#15534) Bumps [sass](https://github.com/sass/dart-sass) from 1.32.0 to 1.32.2. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.32.0...1.32.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 24cc953e2..d90b33859 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.32.0", + "sass": "^1.32.2", "sass-loader": "^10.1.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 59199e93d..a8978db5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9518,10 +9518,10 @@ sass-loader@^10.1.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.32.0: - version "1.32.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.0.tgz#10101a026c13080b14e2b374d4e15ee24400a4d3" - integrity sha512-fhyqEbMIycQA4blrz/C0pYhv2o4x2y6FYYAH0CshBw3DXh5D5wyERgxw0ptdau1orc/GhNrhF7DFN2etyOCEng== +sass@^1.32.2: + version "1.32.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.2.tgz#66dc0250bc86c15d19ddee7135e93d0cf3d3257b" + integrity sha512-u1pUuzqwz3SAgvHSWp1k0mRhX82b2DdlVnP6UIetQPZtYbuJUDaPQhZE12jyjB7vYeOScfz9WPsZJB6Rpk7heA== dependencies: chokidar ">=2.0.0 <4.0.0" From 03c8590b2821e4cf2ae1c10444d25c161627e070 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:08:45 +0900 Subject: [PATCH 420/422] Bump @testing-library/react from 11.2.2 to 11.2.3 (#15533) Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 11.2.2 to 11.2.3. - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/master/CHANGELOG.md) - [Commits](https://github.com/testing-library/react-testing-library/compare/v11.2.2...v11.2.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d90b33859..61c07fee3 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ }, "devDependencies": { "@testing-library/jest-dom": "^5.11.8", - "@testing-library/react": "^11.2.2", + "@testing-library/react": "^11.2.3", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", "eslint": "^7.17.0", diff --git a/yarn.lock b/yarn.lock index a8978db5f..13f83c419 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1399,10 +1399,10 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^11.2.2": - version "11.2.2" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.2.tgz#099c6c195140ff069211143cb31c0f8337bdb7b7" - integrity sha512-jaxm0hwUjv+hzC+UFEywic7buDC9JQ1q3cDsrWVSDAPmLotfA6E6kUHlYm/zOeGCac6g48DR36tFHxl7Zb+N5A== +"@testing-library/react@^11.2.3": + version "11.2.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.3.tgz#9971ede1c8465a231d7982eeca3c39fc362d5443" + integrity sha512-BirBUGPkTW28ULuCwIbYo0y2+0aavHczBT6N9r3LrsswEW3pg25l1wgoE7I8QBIy1upXWkwKpYdWY7NYYP0Bxw== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^7.28.1" From 086d1e675a9591de22374039bd4f4dbebd899d7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:09:26 +0900 Subject: [PATCH 421/422] Bump @rails/ujs from 6.1.0 to 6.1.1 (#15531) Bumps [@rails/ujs](https://github.com/rails/rails) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v6.1.0...v6.1.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 61c07fee3..31ef5f85f 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@clusterws/cws": "^3.0.0", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", - "@rails/ujs": "^6.1.0", + "@rails/ujs": "^6.1.1", "array-includes": "^3.1.2", "arrow-key-navigation": "^1.2.0", "autoprefixer": "^9.8.6", diff --git a/yarn.lock b/yarn.lock index 13f83c419..9b8400178 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1352,10 +1352,10 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71" integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== -"@rails/ujs@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.0.tgz#9a48df6511cb2b472c9f596c1f37dc0af022e751" - integrity sha512-kQNKyM4ePAc4u9eR1c4OqrbAHH+3SJXt++8izIjeaZeg+P7yBtgoF/dogMD/JPPowNC74ACFpM/4op0Ggp/fPw== +"@rails/ujs@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.1.tgz#25c4e60018274b37e5ba0850134f6445429de2f5" + integrity sha512-uF6zEbXpGkNa7Vvxrd9Yqas8xsbc3lsC733V6I7fXgPuj8xXiuZakdE4uIyQSFRVmZKe12qmC6CNJNtIEvt4bA== "@sinonjs/commons@^1.7.0": version "1.8.1" From 096347be10e2cce37ab58ad920586adfb27273bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Jan 2021 01:12:22 +0900 Subject: [PATCH 422/422] Bump webpack from 4.44.2 to 4.45.0 (#15535) Bumps [webpack](https://github.com/webpack/webpack) from 4.44.2 to 4.45.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v4.44.2...v4.45.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 31ef5f85f..001c38c9d 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "throng": "^4.0.0", "tiny-queue": "^0.2.1", "uuid": "^8.3.1", - "webpack": "^4.44.2", + "webpack": "^4.45.0", "webpack-assets-manifest": "^4.0.0", "webpack-bundle-analyzer": "^4.3.0", "webpack-cli": "^3.3.12", diff --git a/yarn.lock b/yarn.lock index 9b8400178..6fb91aaa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11175,10 +11175,10 @@ webpack-sources@^1.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-so source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.44.2: - version "4.44.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" - integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== +webpack@^4.45.0: + version "4.45.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.45.0.tgz#bcdc1ddb43959adb47f8974e60d944027267c1be" + integrity sha512-JhDaVi4CbRcwLLAoqC7eugMSMJnZbIfE2AyjaZ19pnOIh/R2O/lXOiXA2tQFN0iXEcxgpPJsPJHW2wOWqiTLcw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0"