diff --git a/.eslintrc.js b/.eslintrc.js index d5f0ae1ac5fd5e..3bac9ed694ee11 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,7 +9,6 @@ module.exports = { 'plugin:import/recommended', 'plugin:promise/recommended', 'plugin:jsdoc/recommended', - 'plugin:prettier/recommended', ], env: { @@ -63,7 +62,9 @@ module.exports = { 'consistent-return': 'error', 'dot-notation': 'error', eqeqeq: ['error', 'always', { 'null': 'ignore' }], + 'indent': ['error', 2], 'jsx-quotes': ['error', 'prefer-single'], + 'semi': ['error', 'always'], 'no-case-declarations': 'off', 'no-catch-shadow': 'error', 'no-console': [ diff --git a/.github/ISSUE_TEMPLATE/1.bug_report.yml b/.github/ISSUE_TEMPLATE/1.bug_report.yml index 10e7e534580cb7..10421eed7b17f4 100644 --- a/.github/ISSUE_TEMPLATE/1.bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1.bug_report.yml @@ -1,5 +1,5 @@ name: バグ報告 -description: kmyblueのバグ報告 +description: kmyblueのバグ報告(ただし情報改竄、秘密情報の漏洩、システムの破損などが発生するバグは、こちらではなく「Security」タブよりセキュリティインシデントとして報告してください) labels: [bug] body: - type: textarea diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index bace35f112a79d..6ba6945cd45f13 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-10-03 08:32:28 -0400 using Haml-Lint version 0.51.0. +# on 2023-10-11 11:31:24 -0400 using Haml-Lint version 0.51.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 944 + # Offense count: 946 LineLength: enabled: false @@ -30,10 +30,6 @@ linters: # Offense count: 15 InstanceVariables: exclude: - - 'app/views/admin/reports/_actions.html.haml' - - 'app/views/auth/registrations/_status.html.haml' - - 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml' - - 'app/views/relationships/_account.html.haml' - 'app/views/application/_sidebar.html.haml' # Offense count: 2 diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index a31e00d5405561..28316b82529577 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -178,9 +178,7 @@ RSpec/LetSetup: - 'spec/controllers/admin/reports/actions_controller_spec.rb' - 'spec/controllers/admin/statuses_controller_spec.rb' - 'spec/controllers/api/v1/accounts/statuses_controller_spec.rb' - - 'spec/controllers/api/v1/admin/accounts_controller_spec.rb' - 'spec/controllers/api/v1/filters_controller_spec.rb' - - 'spec/controllers/api/v1/followed_tags_controller_spec.rb' - 'spec/controllers/api/v2/admin/accounts_controller_spec.rb' - 'spec/controllers/api/v2/filters/keywords_controller_spec.rb' - 'spec/controllers/api/v2/filters/statuses_controller_spec.rb' @@ -416,7 +414,6 @@ Rails/SkipsModelValidations: - 'lib/mastodon/cli/accounts.rb' - 'lib/mastodon/cli/main.rb' - 'lib/mastodon/cli/maintenance.rb' - - 'spec/controllers/api/v1/admin/accounts_controller_spec.rb' - 'spec/lib/activitypub/activity/follow_spec.rb' - 'spec/services/follow_service_spec.rb' - 'spec/services/update_account_service_spec.rb' @@ -526,12 +523,6 @@ Style/ClassVars: Exclude: - 'config/initializers/devise.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -Style/CombinableLoops: - Exclude: - - 'app/models/form/custom_emoji_batch.rb' - - 'app/models/form/ip_block_batch.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowedVars. Style/FetchEnvVar: diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eebe5c85d866c..f9303f011550e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. ### Fixed +- Fix duplicate reports being sent when reporting some remote posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27355)) - Fix clicking on already-opened thread post scrolling to the top of the thread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27331), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27338), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27350)) - Fix some remote posts getting truncated ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27307)) - Fix some cases of infinite scroll code trying to fetch inaccessible posts in a loop ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27286)) diff --git a/Gemfile b/Gemfile index cb02c03a7410c6..a6ce6f27faf16b 100644 --- a/Gemfile +++ b/Gemfile @@ -106,6 +106,9 @@ group :test do # Used to split testing into chunks in CI gem 'rspec_chunked', '~> 0.6' + # Adds RSpec Error/Warning annotations to GitHub PRs on the Files tab + gem 'rspec-github', '~> 2.4', require: false + # RSpec progress bar formatter gem 'fuubar', '~> 2.5' diff --git a/Gemfile.lock b/Gemfile.lock index ec52cb2c4b2784..db57150d94b62c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -146,12 +146,12 @@ GEM net-http-persistent (~> 4.0) nokogiri (~> 1, >= 1.10.8) base64 (0.1.1) - bcrypt (3.1.18) + bcrypt (3.1.19) better_errors (2.10.1) erubi (>= 1.0.0) rack (>= 0.9.0) rouge (>= 1.0.0) - better_html (2.0.1) + better_html (2.0.2) actionview (>= 6.0) activesupport (>= 6.0) ast (~> 2.0) @@ -210,17 +210,17 @@ GEM database_cleaner-core (2.0.1) date (3.3.3) debug_inspector (1.1.0) - devise (4.9.2) + devise (4.9.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (4.1.0) - activesupport (< 7.1) + devise-two-factor (4.1.1) + activesupport (~> 7.0) attr_encrypted (>= 1.3, < 5, != 2) devise (~> 4.0) - railties (< 7.1) + railties (~> 7.0) rotp (~> 6.0) devise_pam_authenticatable2 (9.2.0) devise (>= 4.0.0) @@ -345,14 +345,14 @@ GEM rainbow (>= 2.0.0) i18n (1.14.1) concurrent-ruby (~> 1.0) - i18n-tasks (1.0.12) + i18n-tasks (1.0.13) activesupport (>= 4.0.2) ast (>= 2.1.0) better_html (>= 1.0, < 3.0) erubi highline (>= 2.0.0) i18n - parser (>= 2.2.3.0) + parser (>= 3.2.2.1) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) @@ -412,12 +412,12 @@ GEM llhttp-ffi (0.4.0) ffi-compiler (~> 1.0) rake (~> 13.0) - lograge (0.13.0) + lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.21.3) + loofah (2.21.4) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -440,7 +440,7 @@ GEM mime-types-data (3.2023.0808) mini_mime (1.1.5) mini_portile2 (2.8.4) - minitest (5.19.0) + minitest (5.20.0) msgpack (1.7.1) multi_json (1.15.0) multipart-post (2.3.0) @@ -493,7 +493,7 @@ GEM orm_adapter (0.5.0) ox (2.14.17) parallel (1.23.0) - parser (3.2.2.3) + parser (3.2.2.4) ast (~> 2.4.1) racc parslet (2.0.0) @@ -513,7 +513,7 @@ GEM premailer (~> 1.7, >= 1.7.9) private_address_check (0.5.0) public_suffix (5.0.3) - puma (6.3.1) + puma (6.4.0) nio4r (~> 2.0) pundit (2.3.0) activesupport (>= 3.0.0) @@ -554,14 +554,14 @@ GEM actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) activesupport (>= 5.0.1.rc1) - rails-dom-testing (2.1.1) + rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.7) + rails-i18n (7.0.8) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) railties (7.0.8) @@ -583,10 +583,10 @@ GEM redis (>= 4) redlock (1.3.2) redis (>= 3.0.0, < 6.0) - regexp_parser (2.8.1) + regexp_parser (2.8.2) request_store (1.5.1) rack (>= 1.4) - responders (3.1.0) + responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) rexml (3.2.6) @@ -602,6 +602,8 @@ GEM rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) + rspec-github (2.4.0) + rspec-core (~> 3.0) rspec-mocks (3.12.5) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) @@ -622,12 +624,12 @@ GEM sidekiq (>= 5, < 8) rspec-support (3.12.1) rspec_chunked (0.6) - rubocop (1.56.4) + rubocop (1.57.1) base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.2.2.3) + parser (>= 3.2.2.4) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) @@ -636,11 +638,11 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.29.0) parser (>= 3.2.1.0) - rubocop-capybara (2.18.0) + rubocop-capybara (2.19.0) rubocop (~> 1.41) rubocop-factory_bot (2.23.1) rubocop (~> 1.33) - rubocop-performance (1.19.0) + rubocop-performance (1.19.1) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) rubocop-rails (2.20.2) @@ -673,7 +675,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.10) + sidekiq (6.5.12) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) @@ -791,7 +793,7 @@ GEM xorcist (1.1.3) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.11) + zeitwerk (2.6.12) PLATFORMS ruby @@ -887,6 +889,7 @@ DEPENDENCIES redis (~> 4.5) redis-namespace (~> 1.10) rqrcode (~> 2.2) + rspec-github (~> 2.4) rspec-rails (~> 6.0) rspec-retry (>= 0.6.2) rspec-sidekiq (~> 4.0) diff --git a/SECURITY.md b/SECURITY.md index 3e13377db63eb4..d5b27adfac1bf7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,22 +1,25 @@ -# Security Policy +# セキュリティポリシー -If you believe you've identified a security vulnerability in Mastodon (a bug that allows something to happen that shouldn't be possible), you can either: +kmyblueのプログラムにおいてセキュリティインシデントを発見した場合、kmyblueに報告してください。 -- open a [Github security issue on the Mastodon project](https://github.com/mastodon/mastodon/security/advisories/new) -- reach us at +kmyblueにセキュリティインシデントを報告する場合、以下の手順を踏んでください。 -You should _not_ report such issues on public GitHub issues or in other public spaces to give us time to publish a fix for the issue without exposing Mastodon's users to increased risk. +- [こちらのリンクから新規インシデントを起票してください](https://github.com/kmycode/mastodon/security/advisories/new) +- メール 、または[@askyq@kmy.blue](https://kmy.blue/@askyq)宛に、**セキュリティインシデントを起票したことだけ**を連絡してください。セキュリティインシデントの内容は、絶対に連絡に含めないでください(リンクくらいなら含めていいかな) -## Scope +他のkmyblueフォークの利用者の安全のために少しでも時間稼ぎをしなければいけないので、この問題をIssueを含む公開された場所で記述しないでください。 -A "vulnerability in Mastodon" is a vulnerability in the code distributed through our main source code repository on GitHub. Vulnerabilities that are specific to a given installation (e.g. misconfiguration) should be reported to the owner of that installation and not us. +## 範囲 -## Supported Versions +こちらが対応できる範囲は、当リポジトリで公開しているソースコードのみとなります。当リポジトリの依存パッケージ内に問題がある場合は、そちらに報告してください。 -| Version | Supported | -| ------- | ---------------- | -| 4.2.x | Yes | -| 4.1.x | Yes | -| 4.0.x | Until 2023-10-31 | -| 3.5.x | Until 2023-12-31 | -| < 3.5 | No | +もしあなたに専門知識があり、それが本家Mastodon由来の問題であると信じるに足る根拠がある場合、kmyblueではなくMastodonのほうに報告してください。kmyblueに報告されても、Mastodonより先に修正してしまうことでMastodonにセキュリティリスクを発生させる可能性がありますし、本家Mastodonの対応を待つにしてもkmyblueのほうに来てしまったセキュリティインシデントの対応に困ります(本家がなかなか対応してくれない可能性を考えると削除しづらい)。もし間違ってkmyblueに来た場合、kmyblue開発者の責任で振り分けを行います。 + +## サポートするバージョン + +下記以外のバージョンは、セキュリティインシデントを起票されても対応しません。 + +- 最新メジャーバージョン、かつ、最新マイナーバージョン + - 最新メジャーバージョンのサポートは、次のメジャーバージョンが出た時点で終了します +- LTS + - LTSのサポートは、次のLTSが出た時点で終了します(ただし移行期間があってもいいと思ってるので、1〜3ヶ月以内ならセキュリティインシデントの程度に応じて対応する可能性があります) diff --git a/app/controllers/admin/custom_emojis_controller.rb b/app/controllers/admin/custom_emojis_controller.rb index 507acde98a5439..f0b55ce0649f47 100644 --- a/app/controllers/admin/custom_emojis_controller.rb +++ b/app/controllers/admin/custom_emojis_controller.rb @@ -2,6 +2,8 @@ module Admin class CustomEmojisController < BaseController + before_action :set_custom_emoji, only: [:edit, :update] + def index authorize :custom_emoji, :index? @@ -15,6 +17,10 @@ def new @custom_emoji = CustomEmoji.new end + def edit + authorize :custom_emoji, :create? + end + def create authorize :custom_emoji, :create? @@ -28,6 +34,19 @@ def create end end + def update + authorize :custom_emoji, :create? + + @custom_emoji.assign_attributes(update_params) + + if @custom_emoji.save + log_action :create, @custom_emoji + redirect_to admin_custom_emojis_path(filter_params), notice: I18n.t('admin.custom_emojis.updated_msg') + else + render :new + end + end + def batch authorize :custom_emoji, :index? @@ -43,8 +62,16 @@ def batch private + def set_custom_emoji + @custom_emoji = CustomEmoji.find(params[:id]) + end + def resource_params - params.require(:custom_emoji).permit(:shortcode, :image, :visible_in_picker) + params.require(:custom_emoji).permit(:shortcode, :image, :visible_in_picker, :aliases_raw, :license) + end + + def update_params + params.require(:custom_emoji).permit(:visible_in_picker, :aliases_raw, :license) end def filtered_custom_emojis @@ -74,7 +101,7 @@ def action_from_button end def form_custom_emoji_batch_params - params.require(:form_custom_emoji_batch).permit(:action, :category_id, :category_name, :aliases_raw, custom_emoji_ids: []) + params.require(:form_custom_emoji_batch).permit(:action, :category_id, :category_name, custom_emoji_ids: []) end end end diff --git a/app/controllers/admin/ng_words_controller.rb b/app/controllers/admin/ng_words_controller.rb index e26ca96b8ce540..17a6306d1acdf1 100644 --- a/app/controllers/admin/ng_words_controller.rb +++ b/app/controllers/admin/ng_words_controller.rb @@ -32,7 +32,7 @@ def create private def test_words - ng_words = settings_params['ng_words'].split(/\r\n|\r|\n/) + ng_words = "#{settings_params['ng_words']}\n#{settings_params['ng_words_for_stranger_mention']}".split(/\r\n|\r|\n/).filter(&:present?) Admin::NgWord.reject_with_custom_words?('Sample text', ng_words) end diff --git a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb index f437576d1b8abc..d7ca4f2da7f014 100644 --- a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb +++ b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb @@ -3,9 +3,9 @@ class Api::V1::Statuses::EmojiReactionsController < Api::BaseController include Authorization - before_action -> { doorkeeper_authorize! :write, :'write:emoji_reactions' } + before_action -> { doorkeeper_authorize! :write, :'write:favourites' } before_action :require_user! - before_action :set_status, only: %i(create update destroy) + before_action :set_status, only: %i(create update) before_action :set_status_without_authorize, only: [:destroy] def create @@ -28,6 +28,8 @@ def destroy authorize @status, :show? if emoji_reaction.nil? UnEmojiReactService.new.call(current_account.id, @status.id, emoji_reaction) if emoji_reaction.present? + else + authorize @status, :show? end render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new( diff --git a/app/controllers/concerns/two_factor_authentication_concern.rb b/app/controllers/concerns/two_factor_authentication_concern.rb index 9eb45b90d6c7fa..bc2d194c33ae35 100644 --- a/app/controllers/concerns/two_factor_authentication_concern.rb +++ b/app/controllers/concerns/two_factor_authentication_concern.rb @@ -5,6 +5,7 @@ module TwoFactorAuthenticationConcern included do prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create] + helper_method :webauthn_enabled? end def two_factor_enabled? @@ -87,4 +88,10 @@ def prompt_for_two_factor(user) set_locale { render :two_factor } end + + protected + + def webauthn_enabled? + @webauthn_enabled + end end diff --git a/app/helpers/context_helper.rb b/app/helpers/context_helper.rb index 69a8767f0fcf38..ab0d44ca69b8cc 100644 --- a/app/helpers/context_helper.rb +++ b/app/helpers/context_helper.rb @@ -30,6 +30,8 @@ module ContextHelper other_setting: { 'fedibird' => 'http://fedibird.com/ns#', 'otherSetting' => 'fedibird:otherSetting' }, references: { 'fedibird' => 'http://fedibird.com/ns#', 'references' => { '@id' => 'fedibird:references', '@type' => '@id' } }, quote_uri: { 'fedibird' => 'http://fedibird.com/ns#', 'quoteUri' => 'fedibird:quoteUri' }, + keywords: { 'schema' => 'http://schema.org#', 'keywords' => 'schema:keywords' }, + license: { 'schema' => 'http://schema.org#', 'license' => 'schema:license' }, 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' }, diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb index 455561a597f029..07f22e8db5a958 100644 --- a/app/helpers/kmyblue_capabilities_helper.rb +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -37,6 +37,10 @@ def capabilities_for_nodeinfo status_reference quote kmyblue_quote + kmyblue_subscribable + kmyblue_translation + kmyblue_link_preview + kmyblue_emoji_reaction_policy searchability kmyblue_searchability visibility_mutual @@ -45,6 +49,8 @@ def capabilities_for_nodeinfo kmyblue_bookmark_category kmyblue_searchability_limited kmyblue_circle_history + kmyblue_emoji_license + emoji_keywords ) capabilities << :full_text_search if Chewy.enabled? diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js index 051a9675b3cda4..42834146bf5ba6 100644 --- a/app/javascript/mastodon/actions/alerts.js +++ b/app/javascript/mastodon/actions/alerts.js @@ -56,4 +56,4 @@ export const showAlertForError = (error, skipNotFound = false) => { title: messages.unexpectedTitle, message: messages.unexpectedMessage, }); -} +}; diff --git a/app/javascript/mastodon/actions/bookmark_categories.js b/app/javascript/mastodon/actions/bookmark_categories.js index b6f82b49c8a9f7..7d458b85ece1d6 100644 --- a/app/javascript/mastodon/actions/bookmark_categories.js +++ b/app/javascript/mastodon/actions/bookmark_categories.js @@ -213,9 +213,10 @@ export const deleteBookmarkCategoryFail = (id, error) => ({ export const fetchBookmarkCategoryStatuses = bookmarkCategoryId => (dispatch, getState) => { dispatch(fetchBookmarkCategoryStatusesRequest(bookmarkCategoryId)); - api(getState).get(`/api/v1/bookmark_categories/${bookmarkCategoryId}/statuses`, { params: { limit: 0 } }).then(({ data }) => { - dispatch(importFetchedStatuses(data)); - dispatch(fetchBookmarkCategoryStatusesSuccess(bookmarkCategoryId, data)); + api(getState).get(`/api/v1/bookmark_categories/${bookmarkCategoryId}/statuses`).then((response) => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(fetchBookmarkCategoryStatusesSuccess(bookmarkCategoryId, response.data, next ? next.uri : null)); }).catch(err => dispatch(fetchBookmarkCategoryStatusesFail(bookmarkCategoryId, err))); }; diff --git a/app/javascript/mastodon/actions/circles.js b/app/javascript/mastodon/actions/circles.js index a497b27d5db592..7ed41b40459102 100644 --- a/app/javascript/mastodon/actions/circles.js +++ b/app/javascript/mastodon/actions/circles.js @@ -380,7 +380,11 @@ export const removeFromCircleAdder = circleId => (dispatch, getState) => { export function fetchCircleStatuses(circleId) { return (dispatch, getState) => { - if (getState().getIn(['circles', circleId, 'statuses', 'isLoading'])) { + if (getState().getIn(['circles', circleId, 'isLoading'])) { + return; + } + const items = getState().getIn(['circles', circleId, 'items']); + if (items && items.size > 0) { return; } @@ -422,9 +426,9 @@ export function fetchCircleStatusesFail(id, error) { export function expandCircleStatuses(circleId) { return (dispatch, getState) => { - const url = getState().getIn(['circles', circleId, 'statuses', 'next'], null); + const url = getState().getIn(['circles', circleId, 'next'], null); - if (url === null || getState().getIn(['circles', circleId, 'statuses', 'isLoading'])) { + if (url === null || getState().getIn(['circles', circleId, 'isLoading'])) { return; } diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index efe4c564066dc8..608c1f07aaa735 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -290,7 +290,7 @@ export function submitComposeWithCircleSuccess(status, circleId) { type: COMPOSE_WITH_CIRCLE_SUCCESS, status, circleId, - } + }; } export function submitComposeFail(error) { diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index a376992b7ec012..3965c477c0adf6 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -121,7 +121,7 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.media_attachments.forEach(item => { const oldItem = list.find(i => i.get('id') === item.id); if (oldItem && oldItem.get('description') === item.description) { - item.translation = oldItem.get('translation') + item.translation = oldItem.get('translation'); } }); } @@ -165,13 +165,13 @@ export function normalizePoll(poll, normalOldPoll) { ...option, voted: poll.own_votes && poll.own_votes.includes(index), titleHtml: emojify(escapeTextContentForBrowser(option.title), emojiMap), - } + }; if (normalOldPoll && normalOldPoll.getIn(['options', index, 'title']) === option.title) { normalOption.translation = normalOldPoll.getIn(['options', index, 'translation']); } - return normalOption + return normalOption; }); return normalPoll; diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 262d055448985b..d430ae7acf9453 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -192,4 +192,4 @@ export const connectListStream = listId => * @returns {function(): void} */ export const connectAntennaStream = antennaId => -connectTimelineStream(`antenna:${antennaId}`, 'antenna', { antenna: antennaId }, { fillGaps: () => fillAntennaTimelineGaps(antennaId) }); + connectTimelineStream(`antenna:${antennaId}`, 'antenna', { antenna: antennaId }, { fillGaps: () => fillAntennaTimelineGaps(antennaId) }); diff --git a/app/javascript/mastodon/components/column.jsx b/app/javascript/mastodon/components/column.jsx index cf9df3ba273584..abc87a57e5354d 100644 --- a/app/javascript/mastodon/components/column.jsx +++ b/app/javascript/mastodon/components/column.jsx @@ -22,7 +22,7 @@ export default class Column extends PureComponent { scrollable = document.scrollingElement; } else { scrollable = this.node.querySelector('.scrollable'); - } + } if (!scrollable) { return; diff --git a/app/javascript/mastodon/components/compacted_status.jsx b/app/javascript/mastodon/components/compacted_status.jsx index 7ab5ee20258b64..3ce8a542d3ad2d 100644 --- a/app/javascript/mastodon/components/compacted_status.jsx +++ b/app/javascript/mastodon/components/compacted_status.jsx @@ -184,7 +184,7 @@ class CompactedStatus extends ImmutablePureComponent { } else if (attachments.getIn([0, 'type']) === 'audio') { return '16 / 9'; } else { - return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2' + return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'; } } diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 536842481f5386..cc4ca95fb8a5ae 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -356,10 +356,10 @@ class MediaGallery extends PureComponent { const rowClass = (size === 5 || size === 6 || size === 9 || size === 10 || size === 11 || size === 12) ? 'media-gallery--row3' : (size === 7 || size === 8 || size === 13 || size === 14 || size === 15 || size === 16) ? 'media-gallery--row4' : - 'media-gallery--row2'; + 'media-gallery--row2'; const columnClass = (size === 9) ? 'media-gallery--column3' : (size === 10 || size === 11 || size === 12 || size === 13 || size === 14 || size === 15 || size === 16) ? 'media-gallery--column4' : - 'media-gallery--column2'; + 'media-gallery--column2'; const compactClass = compact ? 'media-gallery__compact' : null; return ( diff --git a/app/javascript/mastodon/components/poll.jsx b/app/javascript/mastodon/components/poll.jsx index 4304f9acd4d916..2d992d73ae156c 100644 --- a/app/javascript/mastodon/components/poll.jsx +++ b/app/javascript/mastodon/components/poll.jsx @@ -132,7 +132,7 @@ class Poll extends ImmutablePureComponent { handleReveal = () => { this.setState({ revealed: true }); - } + }; renderOption (option, optionIndex, showResults) { const { poll, lang, disabled, intl } = this.props; diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 644d44fd4fdb31..0f966b0e7044c1 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -13,7 +13,7 @@ import AttachmentList from 'mastodon/components/attachment_list'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; -import CompactedStatusContainer from '../containers/compacted_status_container' +import CompactedStatusContainer from '../containers/compacted_status_container'; import Card from '../features/status/components/card'; // We use the component (and not the container) since we do not want // to use the progress bar to show download progress @@ -213,7 +213,7 @@ class Status extends ImmutablePureComponent { } else if (attachments.getIn([0, 'type']) === 'audio') { return '16 / 9'; } else { - return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2' + return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'; } } @@ -489,12 +489,12 @@ class Status extends ImmutablePureComponent {
- : {matchedFilters.join(', ')}. - {' '} - -
+ : {matchedFilters.join(', ')}. + {' '} + + ); @@ -628,7 +628,7 @@ class Status extends ImmutablePureComponent { const withReference = (!withQuote && status.get('status_references_count') > 0) ? : null; const withExpiration = status.get('expires_at') ? : null; - const quote = !muted && status.get('quote_id') && (['public', 'community'].includes(contextType) ? showQuoteInPublic : showQuoteInHome) && + const quote = !muted && status.get('quote_id') && (['public', 'community'].includes(contextType) ? showQuoteInPublic : showQuoteInHome) && ; return ( @@ -669,12 +669,12 @@ class Status extends ImmutablePureComponent { {...statusContentProps} /> - {(!status.get('spoiler_text') || expanded) && quote} - {(!isCardMediaWithSensitive || !status.get('hidden')) && media} {(!status.get('spoiler_text') || expanded) && hashtagBar} + {(!status.get('spoiler_text') || expanded) && quote} + {emojiReactionsBar} diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index ccd792042801a0..6a248973190631 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -127,7 +127,7 @@ class About extends PureComponent { const { multiColumn, intl, server, extendedDescription, domainBlocks } = this.props; const isLoading = server.get('isLoading'); - const fedibirdCapabilities = server.get('fedibird_capabilities'); + const fedibirdCapabilities = server.get('fedibird_capabilities') || []; // thinking about isLoading is true const isPublicUnlistedVisibility = fedibirdCapabilities.includes('kmyblue_visibility_public_unlisted'); const isEmojiReaction = fedibirdCapabilities.includes('emoji_reaction'); @@ -192,7 +192,7 @@ class About extends PureComponent {
-

+

{!isLoading && (
  1. diff --git a/app/javascript/mastodon/features/antenna_setting/components/radio_panel.jsx b/app/javascript/mastodon/features/antenna_setting/components/radio_panel.jsx index 57a88eba650edd..9408d135697d0f 100644 --- a/app/javascript/mastodon/features/antenna_setting/components/radio_panel.jsx +++ b/app/javascript/mastodon/features/antenna_setting/components/radio_panel.jsx @@ -33,7 +33,7 @@ class RadioPanel extends PureComponent {
    {values.map((val) => ( ))} diff --git a/app/javascript/mastodon/features/antenna_setting/index.jsx b/app/javascript/mastodon/features/antenna_setting/index.jsx index 086c1de6b63f84..19651ea855b47e 100644 --- a/app/javascript/mastodon/features/antenna_setting/index.jsx +++ b/app/javascript/mastodon/features/antenna_setting/index.jsx @@ -167,7 +167,7 @@ class AntennaSetting extends PureComponent { handleEditAntennaClick = () => { window.open(`/antennas/${this.props.params.id}/edit`, '_blank'); - } + }; handleDeleteClick = () => { const { dispatch, columnId, intl } = this.props; @@ -193,7 +193,7 @@ class AntennaSetting extends PureComponent { handleTimelineClick = () => { this.context.router.history.push(`/antennast/${this.props.params.id}`); - } + }; onStlToggle = ({ target }) => { const { dispatch } = this.props; @@ -336,7 +336,7 @@ class AntennaSetting extends PureComponent {
    - ) + ); } let stlAlert; @@ -369,7 +369,7 @@ class AntennaSetting extends PureComponent { const contentRadioAlert = antenna.get(contentRadioValue.get('value') === 'tags' ? 'keywords_count' : 'tags_count') > 0; const listOptions = lists.toArray().filter((list) => list.length >= 2 && list[1]).map((list) => { - return { value: list[1].get('id'), label: list[1].get('title') } + return { value: list[1].get('id'), label: list[1].get('title') }; }); return ( @@ -470,7 +470,7 @@ class AntennaSetting extends PureComponent { icon='sitemap' label={intl.formatMessage(messages.addDomainLabel)} title={intl.formatMessage(messages.addDomainTitle)} - /> + /> )} {rangeRadioAlert &&
    } @@ -487,7 +487,7 @@ class AntennaSetting extends PureComponent { icon='hashtag' label={intl.formatMessage(messages.addTagLabel)} title={intl.formatMessage(messages.addTagTitle)} - /> + /> )} {contentRadioValue.get('value') === 'keywords' && ( @@ -500,7 +500,7 @@ class AntennaSetting extends PureComponent { icon='paragraph' label={intl.formatMessage(messages.addKeywordLabel)} title={intl.formatMessage(messages.addKeywordTitle)} - /> + /> )} {contentRadioAlert &&
    } @@ -518,7 +518,7 @@ class AntennaSetting extends PureComponent { icon='sitemap' label={intl.formatMessage(messages.addDomainLabel)} title={intl.formatMessage(messages.addDomainTitle)} - /> + />

    -

    - + /> +

    + )} diff --git a/app/javascript/mastodon/features/antennas/index.jsx b/app/javascript/mastodon/features/antennas/index.jsx index a575527fce7b6f..d77ee54163390a 100644 --- a/app/javascript/mastodon/features/antennas/index.jsx +++ b/app/javascript/mastodon/features/antennas/index.jsx @@ -79,7 +79,7 @@ class Antennas extends ImmutablePureComponent { > {antennas.map(antenna => ( + badge={antenna.get('insert_feeds') ? intl.formatMessage(antenna.get('list') ? messages.insert_list : messages.insert_home) : undefined} /> ))} diff --git a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx index ed5fa17be7da94..023091419d8d19 100644 --- a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx @@ -13,12 +13,12 @@ import { debounce } from 'lodash'; import { deleteBookmarkCategory, expandBookmarkCategoryStatuses, fetchBookmarkCategory, fetchBookmarkCategoryStatuses , setupBookmarkCategoryEditor } from 'mastodon/actions/bookmark_categories'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { openModal } from 'mastodon/actions/modal'; +import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import StatusList from 'mastodon/components/status_list'; import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; -import Column from 'mastodon/features/ui/components/column'; import { getBookmarkCategoryStatusList } from 'mastodon/selectors'; import EditBookmarkCategoryForm from './components/edit_bookmark_category_form'; @@ -113,7 +113,7 @@ class BookmarkCategoryStatuses extends ImmutablePureComponent { }; handleLoadMore = debounce(() => { - this.props.dispatch(expandBookmarkCategoryStatuses()); + this.props.dispatch(expandBookmarkCategoryStatuses(this.props.params.id)); }, 300, { leading: true }); render () { diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx index b0c90a43026739..d42ffab117ff1b 100644 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx @@ -12,9 +12,9 @@ import { debounce } from 'lodash'; import { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'mastodon/actions/bookmarks'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; +import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import StatusList from 'mastodon/components/status_list'; -import Column from 'mastodon/features/ui/components/column'; import { getStatusList } from 'mastodon/selectors'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/circle_statuses/index.jsx b/app/javascript/mastodon/features/circle_statuses/index.jsx index 2896455ab5c6a9..3e1d1dbbd6cfea 100644 --- a/app/javascript/mastodon/features/circle_statuses/index.jsx +++ b/app/javascript/mastodon/features/circle_statuses/index.jsx @@ -13,12 +13,12 @@ import { debounce } from 'lodash'; import { deleteCircle, expandCircleStatuses, fetchCircle, fetchCircleStatuses } from 'mastodon/actions/circles'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { openModal } from 'mastodon/actions/modal'; +import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import StatusList from 'mastodon/components/status_list'; import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; -import Column from 'mastodon/features/ui/components/column'; import { getCircleStatusList } from 'mastodon/selectors'; @@ -113,7 +113,7 @@ class CircleStatuses extends ImmutablePureComponent { }; handleLoadMore = debounce(() => { - this.props.dispatch(expandCircleStatuses()); + this.props.dispatch(expandCircleStatuses(this.props.params.id)); }, 300, { leading: true }); render () { diff --git a/app/javascript/mastodon/features/compose/components/circle_select.jsx b/app/javascript/mastodon/features/compose/components/circle_select.jsx index 722137d08113dc..28b53b83e58675 100644 --- a/app/javascript/mastodon/features/compose/components/circle_select.jsx +++ b/app/javascript/mastodon/features/compose/components/circle_select.jsx @@ -32,7 +32,7 @@ class CircleSelect extends PureComponent { } const listOptions = circles.toArray().filter((circle) => circle).map((circle) => { - return { value: circle.get('id'), label: circle.get('title') }; + return { value: circle[1].get('id'), label: circle[1].get('title') }; }); const listValue = listOptions.find((opt) => opt.value === circleId); diff --git a/app/javascript/mastodon/features/compose/components/navigation_bar.jsx b/app/javascript/mastodon/features/compose/components/navigation_bar.jsx index 5af38da43cf4f0..e842ab1f8d5037 100644 --- a/app/javascript/mastodon/features/compose/components/navigation_bar.jsx +++ b/app/javascript/mastodon/features/compose/components/navigation_bar.jsx @@ -20,7 +20,7 @@ export default class NavigationBar extends ImmutablePureComponent { }; render () { - const username = this.props.account.get('acct') + const username = this.props.account.get('acct'); return (
    diff --git a/app/javascript/mastodon/features/compose/components/search.jsx b/app/javascript/mastodon/features/compose/components/search.jsx index 7584dbc819dab5..657bb8e18d81ae 100644 --- a/app/javascript/mastodon/features/compose/components/search.jsx +++ b/app/javascript/mastodon/features/compose/components/search.jsx @@ -57,17 +57,17 @@ class Search extends PureComponent { }; defaultOptions = [ - { label: <>has: , action: e => { e.preventDefault(); this._insertText('has:') } }, - { label: <>is: , action: e => { e.preventDefault(); this._insertText('is:') } }, - { label: <>my: , action: e => { e.preventDefault(); this._insertText('my:') } }, - { label: <>language: , action: e => { e.preventDefault(); this._insertText('language:') } }, - { label: <>from: , action: e => { e.preventDefault(); this._insertText('from:') } }, - { label: <>domain: , action: e => { e.preventDefault(); this._insertText('domain:') } }, - { label: <>before: , action: e => { e.preventDefault(); this._insertText('before:') } }, - { label: <>during: , action: e => { e.preventDefault(); this._insertText('during:') } }, - { label: <>after: , action: e => { e.preventDefault(); this._insertText('after:') } }, - { label: <>in: , action: e => { e.preventDefault(); this._insertText('in:') } }, - { label: <>order: , action: e => { e.preventDefault(); this._insertText('order:') } }, + { label: <>has: , action: e => { e.preventDefault(); this._insertText('has:'); } }, + { label: <>is: , action: e => { e.preventDefault(); this._insertText('is:'); } }, + { label: <>my: , action: e => { e.preventDefault(); this._insertText('my:'); } }, + { label: <>language: , action: e => { e.preventDefault(); this._insertText('language:'); } }, + { label: <>from: , action: e => { e.preventDefault(); this._insertText('from:'); } }, + { label: <>domain: , action: e => { e.preventDefault(); this._insertText('domain:'); } }, + { label: <>before: , action: e => { e.preventDefault(); this._insertText('before:'); } }, + { label: <>during: , action: e => { e.preventDefault(); this._insertText('during:'); } }, + { label: <>after: , action: e => { e.preventDefault(); this._insertText('after:'); } }, + { label: <>in: , action: e => { e.preventDefault(); this._insertText('in:'); } }, + { label: <>order: , action: e => { e.preventDefault(); this._insertText('order:'); } }, ]; setRef = c => { diff --git a/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx b/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx index ad713f2d64789a..682f9f44f3cef1 100644 --- a/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx +++ b/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx @@ -12,9 +12,9 @@ import { debounce } from 'lodash'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchEmojiReactedStatuses, expandEmojiReactedStatuses } from 'mastodon/actions/emoji_reactions'; +import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import StatusList from 'mastodon/components/status_list'; -import Column from 'mastodon/features/ui/components/column'; const messages = defineMessages({ heading: { id: 'column.emoji_reactions', defaultMessage: 'Stamps' }, diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index 4c23d6422d967e..a3c6adee9db7cb 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -80,7 +80,7 @@ class Results extends PureComponent { } return null; - }; + } handleSelectAll = () => { const { submittedType, dispatch } = this.props; @@ -116,7 +116,7 @@ class Results extends PureComponent { } this.setState({ type: 'hashtags' }); - } + }; handleSelectStatuses = () => { const { submittedType, dispatch } = this.props; @@ -128,7 +128,7 @@ class Results extends PureComponent { } this.setState({ type: 'statuses' }); - } + }; handleLoadMoreAccounts = () => this._loadMore('accounts'); handleLoadMoreStatuses = () => this._loadMore('statuses'); diff --git a/app/javascript/mastodon/features/favourited_statuses/index.jsx b/app/javascript/mastodon/features/favourited_statuses/index.jsx index 76cff7f8dfe754..fb5447a11f1290 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.jsx +++ b/app/javascript/mastodon/features/favourited_statuses/index.jsx @@ -12,9 +12,9 @@ import { debounce } from 'lodash'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'mastodon/actions/favourites'; +import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import StatusList from 'mastodon/components/status_list'; -import Column from 'mastodon/features/ui/components/column'; import { getStatusList } from 'mastodon/selectors'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index efde58a5c0a9bb..849ee38f5fc738 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -199,7 +199,7 @@ const Firehose = ({ feedType, multiColumn }) => { ); -} +}; Firehose.propTypes = { multiColumn: PropTypes.bool, diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index e670452018f8ea..014ba993a48977 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -27,9 +27,9 @@ const mapStateToProps = (state, { accountId }) => ({ const mapDispatchToProps = (dispatch) => ({ onSignupClick() { dispatch(closeModal({ - modalType: undefined, - ignoreFocus: false, - })); + modalType: undefined, + ignoreFocus: false, + })); dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })); }, }); @@ -187,7 +187,7 @@ class LoginForm extends React.PureComponent { setIFrameRef = (iframe) => { this.iframeRef = iframe; - } + }; handleFocus = () => { this.setState({ expanded: true }); diff --git a/app/javascript/mastodon/features/lists/index.jsx b/app/javascript/mastodon/features/lists/index.jsx index fb52973d23d149..33a42389e4a8de 100644 --- a/app/javascript/mastodon/features/lists/index.jsx +++ b/app/javascript/mastodon/features/lists/index.jsx @@ -78,7 +78,7 @@ class Lists extends ImmutablePureComponent { > {lists.map(list => ( 0) ? intl.formatMessage(messages.with_antenna) : undefined} />), + badge={(list.get('antennas') && list.get('antennas').size > 0) ? intl.formatMessage(messages.with_antenna) : undefined} />), )} diff --git a/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx b/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx index 7fb6f49285ceee..651596cda46a41 100644 --- a/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx +++ b/app/javascript/mastodon/features/reaction_deck/components/reaction_emoji.jsx @@ -59,7 +59,7 @@ class ReactionEmoji extends ImmutablePureComponent { const html = { __html: emojify(emoji) }; content = ( - ) + ); } return ( diff --git a/app/javascript/mastodon/features/reaction_deck/index.jsx b/app/javascript/mastodon/features/reaction_deck/index.jsx index ebc2985abc36ee..4a7d468dbbdf8a 100644 --- a/app/javascript/mastodon/features/reaction_deck/index.jsx +++ b/app/javascript/mastodon/features/reaction_deck/index.jsx @@ -100,7 +100,7 @@ class ReactionDeck extends ImmutablePureComponent { const newDeck = this.deckToArray(); newDeck.push('👍'); this.props.onChange(newDeck); - } + }; render () { const { intl, deck, emojiMap, multiColumn } = this.props; @@ -123,38 +123,38 @@ class ReactionDeck extends ImmutablePureComponent { showBackButton /> - - - - {(provided) => ( -
    - {deck.map((emoji, index) => ( - - {(provided2) => ( -
    - - -
    - )} -
    - ))} - {provided.placeholder} - -
    - )} -
    -
    -
    + + + + {(provided) => ( +
    + {deck.map((emoji, index) => ( + + {(provided2) => ( +
    + + +
    + )} +
    + ))} + {provided.placeholder} + +
    + )} +
    +
    +
    diff --git a/app/javascript/mastodon/features/reblogs/index.jsx b/app/javascript/mastodon/features/reblogs/index.jsx index 0c4e6dbb938037..9de905790a7ae1 100644 --- a/app/javascript/mastodon/features/reblogs/index.jsx +++ b/app/javascript/mastodon/features/reblogs/index.jsx @@ -45,7 +45,7 @@ class Reblogs extends ImmutablePureComponent { if (!this.props.accountIds) { this.props.dispatch(fetchReblogs(this.props.params.statusId)); } - }; + } handleRefresh = () => { this.props.dispatch(fetchReblogs(this.props.params.statusId)); diff --git a/app/javascript/mastodon/features/report/comment.jsx b/app/javascript/mastodon/features/report/comment.jsx index 98ac4caa0a1fbc..ca9ea9d268a796 100644 --- a/app/javascript/mastodon/features/report/comment.jsx +++ b/app/javascript/mastodon/features/report/comment.jsx @@ -104,7 +104,7 @@ const Comment = ({ comment, domain, statusIds, isRemote, isSubmitting, selectedD
    ); -} +}; Comment.propTypes = { comment: PropTypes.string.isRequired, diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index ce60f2459c143b..3c581b7a3866f9 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -147,7 +147,7 @@ class DetailedStatus extends ImmutablePureComponent { } else if (attachments.getIn([0, 'type']) === 'audio') { return '16 / 9'; } else { - return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2' + return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'; } } diff --git a/app/javascript/mastodon/features/ui/components/header.jsx b/app/javascript/mastodon/features/ui/components/header.jsx index 17db2db53bb8cf..9a41c48b401201 100644 --- a/app/javascript/mastodon/features/ui/components/header.jsx +++ b/app/javascript/mastodon/features/ui/components/header.jsx @@ -83,8 +83,8 @@ class Header extends PureComponent { if (sso_redirect) { content = ( - - ) + + ); } else { let signupButton; diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index 4d41ff4e0dba8a..d81a7d381f494d 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -127,7 +127,7 @@ export default class ModalRoot extends PureComponent { {(SpecificComponent) => { const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined; - return + return ; }} diff --git a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx index d5f0c00dca70df..4216f3da3827bc 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx @@ -25,7 +25,7 @@ const SignInBanner = () => {

    - ) + ); } if (registrationsOpen) { diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index ee51220df67d2b..4fb9522c167ff5 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -198,7 +198,9 @@ class SwitchingColumnsArea extends PureComponent { {singleColumn ? : null} {singleColumn && pathName.startsWith('/deck/') ? : null} + {/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */} {!singleColumn && pathName === '/getting-started' ? : null} + {!singleColumn && pathName === '/home' ? : null} diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 0948e5d2559c31..c0757accea21e6 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -113,6 +113,7 @@ const initialPath = document.querySelector("head meta[name=initialPath]")?.getAt /** @type {boolean} */ export const hasMultiColumnPath = initialPath === '/' || initialPath === '/getting-started' + || initialPath === '/home' || initialPath.startsWith('/deck'); /** diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index b674f90c84acd0..5b4fef59c0fca2 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -613,7 +613,7 @@ "sign_in_banner.create_account": "Sortu kontua", "sign_in_banner.sign_in": "Hasi saioa", "sign_in_banner.sso_redirect": "Hasi saioa edo izena eman", - "sign_in_banner.text": "Hasi saioa profilak edo traolak jarraitzeko, bidalketak gogokoetara gehitzeko, partekatzeko edo erantzuteko. Zure kontutik ere komunika zaitezke beste zerbitzari ezberdin vatean.", + "sign_in_banner.text": "Hasi saioa profilak edo traolak jarraitzeko, bidalketak gogokoetara gehitzeko, partekatzeko edo erantzuteko. Zure kontutik ere komunika zaitezke beste zerbitzari ezberdin batean.", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_domain": "{domain}-(r)en moderazio-interfazea ireki", "status.admin_status": "Ireki bidalketa hau moderazio interfazean", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 87d7c90c418940..a7a68533d677e3 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -1,6 +1,6 @@ { "about.blocks": "Valvotut palvelimet", - "about.contact": "Yhteydenotto:", + "about.contact": "Ota yhteyttä:", "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.", "about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu", "about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", @@ -26,15 +26,15 @@ "account.domain_blocked": "Verkkotunnus estetty", "account.edit_profile": "Muokkaa profiilia", "account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee", - "account.endorse": "Suosittele profiilissasi", + "account.endorse": "Pidä esillä profiilissa", "account.featured_tags.last_status_at": "Viimeisin julkaisu {date}", "account.featured_tags.last_status_never": "Ei julkaisuja", - "account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet", + "account.featured_tags.title": "Käyttäjän {name} esillä pidettävät aihetunnisteet", "account.follow": "Seuraa", - "account.followers": "seuraaja(t)", + "account.followers": "Seuraajat", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}", - "account.following": "Seurataan", + "account.following": "Seuratut", "account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", @@ -62,17 +62,17 @@ "account.share": "Jaa käyttäjän @{name} profiili", "account.show_reblogs": "Näytä käyttäjän @{name} tehostukset", "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", - "account.unblock": "Poista esto: @{name}", - "account.unblock_domain": "Salli palvelu {domain}", + "account.unblock": "Poista käyttäjän @{name} esto", + "account.unblock_domain": "Poista verkkotunnuksen {domain} esto", "account.unblock_short": "Poista esto", - "account.unendorse": "Poista suosittelu profiilistasi", + "account.unendorse": "Älä pidä esillä profiilissa", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications_short": "Poista ilmoitusten mykistys", "account.unmute_short": "Poista mykistys", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", - "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä", - "admin.dashboard.monthly_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen kuukauteen mennessä", + "admin.dashboard.daily_retention": "Käyttäjän pysyminen rekisteröitymisen jälkeiseen päivään mennessä", + "admin.dashboard.monthly_retention": "Käyttäjän pysyminen rekisteröitymisen jälkeiseen kuukauteen mennessä", "admin.dashboard.retention.average": "Keskimäärin", "admin.dashboard.retention.cohort": "Kirjautumiset", "admin.dashboard.retention.cohort_size": "Uudet käyttäjät", @@ -101,7 +101,7 @@ "bundle_modal_error.close": "Sulje", "bundle_modal_error.message": "Jotain meni pieleen komponenttia ladattaessa.", "bundle_modal_error.retry": "Yritä uudelleen", - "closed_registrations.other_server_instructions": "Koska Mastodon on hajautettu, voit luoda tilin toiselle palvelimelle ja silti olla vuorovaikutuksessa tämän kanssa.", + "closed_registrations.other_server_instructions": "Koska Mastodon on hajautettu, voit luoda tilin toiselle palvelimelle ja olla silti vuorovaikutuksessa tämän kanssa.", "closed_registrations_modal.description": "Tilin luonti palveluun {domain} ei tällä hetkellä ole mahdollista, mutta huomioi, ettei Mastodonin käyttö edellytä juuri kyseisen palvelun tiliä.", "closed_registrations_modal.find_another_server": "Etsi toinen palvelin", "closed_registrations_modal.preamble": "Mastodon on hajautettu, joten riippumatta siitä, missä luot tilisi, voit seurata ja olla vuorovaikutuksessa kenen tahansa kanssa tällä palvelimella. Voit jopa isännöidä palvelinta!", @@ -154,9 +154,9 @@ "compose_form.publish_form": "Uusi julkaisu", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Tallenna muutokset", - "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluontoiseksi} other {Merkitse mediat arkaluontoiseksi}}", - "compose_form.sensitive.marked": "{count, plural, one {Media on merkitty arkaluontoiseksi} other {Mediat on merkitty arkaluontoiseksi}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Mediaa ei ole merkitty arkaluontoiseksi} other {Medioja ei ole merkitty arkaluontoiseksi}}", + "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluonteiseksi} other {Merkitse mediat arkaluonteisiksi}}", + "compose_form.sensitive.marked": "{count, plural, one {Media on merkitty arkaluonteiseksi} other {Mediat on merkitty arkaluonteisiksi}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Mediaa ei ole merkitty arkaluonteiseksi} other {Medioita ei ole merkitty arkaluonteisiksi}}", "compose_form.spoiler.marked": "Poista sisältövaroitus", "compose_form.spoiler.unmarked": "Lisää sisältövaroitus", "compose_form.spoiler_placeholder": "Kirjoita varoituksesi tähän", @@ -194,7 +194,7 @@ "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", "directory.federated": "Koko tunnettu fediversumi", - "directory.local": "Vain palvelusta {domain}", + "directory.local": "Vain palvelimelta {domain}", "directory.new_arrivals": "Äskettäin saapuneet", "directory.recently_active": "Hiljattain aktiiviset", "disabled_account_banner.account_settings": "Tilin asetukset", @@ -225,12 +225,12 @@ "empty_column.account_suspended": "Tili jäädytetty", "empty_column.account_timeline": "Ei viestejä täällä.", "empty_column.account_unavailable": "Profiilia ei löydy", - "empty_column.blocks": "Et ole estänyt käyttäjiä.", + "empty_column.blocks": "Et ole vielä estänyt käyttäjiä.", "empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", - "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", - "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!", + "empty_column.domain_blocks": "Verkkotunnuksia ei ole vielä estetty.", + "empty_column.explore_statuses": "Mikään ei ole nyt suosittua. Tarkista myöhemmin uudelleen!", "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkijulkaisua. Kun lisäät sellaisen, näkyy se tässä.", "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä julkaisua suosikkeihinsa. Kun joku tekee niin, tulee hän tähän näkyviin.", "empty_column.follow_requests": "Et ole vielä vastaanottanut seuraamispyyntöjä. Saamasi pyynnöt näkyvät täällä.", @@ -266,7 +266,7 @@ "filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin", "filter_modal.select_filter.expired": "vanhentunut", "filter_modal.select_filter.prompt_new": "Uusi luokka: {name}", - "filter_modal.select_filter.search": "Etsi tai luo", + "filter_modal.select_filter.search": "Hae tai luo", "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", "filter_modal.select_filter.title": "Suodata tämä julkaisu", "filter_modal.title.status": "Suodata julkaisu", @@ -336,9 +336,9 @@ "keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo", "keyboard_shortcuts.boost": "Tehosta julkaisua", "keyboard_shortcuts.column": "Kohdista sarakkeeseen", - "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", + "keyboard_shortcuts.compose": "Kohdista kirjoituskenttään", "keyboard_shortcuts.description": "Kuvaus", - "keyboard_shortcuts.direct": "avataksesi yksityisten mainintojen sarakkeen", + "keyboard_shortcuts.direct": "Avaa yksityisten mainintojen sarake", "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin", @@ -347,22 +347,22 @@ "keyboard_shortcuts.heading": "Pikanäppäimet", "keyboard_shortcuts.home": "Avaa kotiaikajana", "keyboard_shortcuts.hotkey": "Pikanäppäin", - "keyboard_shortcuts.legend": "Näytä tämä selite", + "keyboard_shortcuts.legend": "Näytä tämä ohje", "keyboard_shortcuts.local": "Avaa paikallinen aikajana", - "keyboard_shortcuts.mention": "Mainitse julkaisija", - "keyboard_shortcuts.muted": "Avaa lista mykistetyistä käyttäjistä", + "keyboard_shortcuts.mention": "Mainitse kirjoittaja", + "keyboard_shortcuts.muted": "Avaa mykistettyjen käyttäjien luettelo", "keyboard_shortcuts.my_profile": "Avaa profiilisi", - "keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko", + "keyboard_shortcuts.notifications": "Avaa ilmoitussarake", "keyboard_shortcuts.open_media": "Avaa media", "keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo", "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili", "keyboard_shortcuts.reply": "Vastaa julkaisuun", "keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo", - "keyboard_shortcuts.search": "siirry hakukenttään", + "keyboard_shortcuts.search": "Kohdista hakukenttään", "keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä", - "keyboard_shortcuts.start": "avaa \"Aloitus\"", - "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", - "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", + "keyboard_shortcuts.start": "Avaa Näin pääset alkuun -sarake", + "keyboard_shortcuts.toggle_hidden": "Näytä/piilota sisältövaroituksella merkitty teksti", + "keyboard_shortcuts.toggle_sensitivity": "Näytä/piilota media", "keyboard_shortcuts.toot": "Luo uusi julkaisu", "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä", "keyboard_shortcuts.up": "Siirry listassa ylöspäin", @@ -414,12 +414,12 @@ "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen web-käyttöliittymään.", + "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen selainkäyttöliittymään.", "navigation_bar.personal": "Henkilökohtainen", "navigation_bar.pins": "Kiinnitetyt julkaisut", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", - "navigation_bar.search": "Haku", + "navigation_bar.search": "Hae", "navigation_bar.security": "Turvallisuus", "not_signed_in_indicator.not_signed_in": "Sinun on kirjauduttava sisään käyttääksesi resurssia.", "notification.admin.report": "{name} teki ilmoituksen käytäjästä {target}", @@ -472,14 +472,14 @@ "notifications_permission_banner.title": "Älä anna minkään mennä ohi", "onboarding.action.back": "Palaa takaisin", "onboarding.actions.back": "Palaa takaisin", - "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen", + "onboarding.actions.go_to_explore": "Siirry suosittujen aiheiden syötteeseen", "onboarding.actions.go_to_home": "Siirry kotisyötteeseeni", "onboarding.compose.template": "Tervehdys #Mastodon!", - "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", + "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", "onboarding.follows.title": "Mukauta kotisyötettäsi", "onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!", - "onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}", + "onboarding.share.message": "Olen {username} #Mastodon⁠issa! Seuraa minua osoitteessa {url}", "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:", "onboarding.share.title": "Jaa profiilisi", "onboarding.start.lead": "Uusi Mastodon-tilisi on nyt valmiina käyttöön. Kyseessä on ainutlaatuinen, hajautettu sosiaalisen median alusta, jolla sinä itse – algoritmin sijaan – määrität käyttökokemuksesi. Näin hyödyt Mastodonista eniten:", @@ -537,7 +537,7 @@ "relative_time.today": "tänään", "reply_indicator.cancel": "Peruuta", "report.block": "Estä", - "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.", + "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkee, että olet estänyt hänet.", "report.categories.legal": "Lakiasiat", "report.categories.other": "Muu", "report.categories.spam": "Roskaposti", @@ -584,17 +584,17 @@ "report_notification.open": "Avaa raportti", "search.no_recent_searches": "Ei viimeaikaisia hakuja", "search.placeholder": "Hae", - "search.quick_action.account_search": "Profiilit, jotka vastaavat hakua {x}", - "search.quick_action.go_to_account": "Avaa profiili {x}", + "search.quick_action.account_search": "Profiilit haulla {x}", + "search.quick_action.go_to_account": "Siirry profiiliin {x}", "search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}", "search.quick_action.open_url": "Avaa URL-osoite Mastodonissa", "search.quick_action.status_search": "Julkaisut haulla {x}", - "search.search_or_paste": "Etsi tai kirjoita URL-osoite", + "search.search_or_paste": "Hae tai kirjoita URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", "search_popout.language_code": "ISO-kielikoodi", - "search_popout.options": "Haun asetukset", + "search_popout.options": "Hakuvalinnat", "search_popout.quick_actions": "Pikatoiminnot", - "search_popout.recent": "Viime haut", + "search_popout.recent": "Viimeaikaiset haut", "search_popout.specific_date": "tietty päivämäärä", "search_popout.user": "käyttäjä", "search_results.accounts": "Profiilit", @@ -637,7 +637,7 @@ "status.history.created": "{name} luotu {date}", "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", - "status.media.open": "Napsauta avataksesi", + "status.media.open": "Avaa napsauttamalla", "status.media.show": "Napsauta näyttääksesi", "status.media_hidden": "Media piilotettu", "status.mention": "Mainitse @{name}", @@ -654,7 +654,7 @@ "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.", "status.redraft": "Poista ja palauta muokattavaksi", "status.remove_bookmark": "Poista kirjanmerkki", - "status.replied_to": "Vastattu {name}", + "status.replied_to": "Vastaus käyttäjälle {name}", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", "status.report": "Raportoi @{name}", @@ -686,7 +686,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viime päivänä} other {viimeisenä {days} päivänä}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", @@ -694,7 +694,7 @@ "units.short.thousand": "{count} t.", "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän", "upload_button.label": "Lisää kuvia, video tai äänitiedosto", - "upload_error.limit": "Tiedostolatauksien raja ylitetty.", + "upload_error.limit": "Tiedostolatauksien rajoitus ylitetty.", "upload_error.poll": "Tiedoston lataaminen ei ole sallittua äänestyksissä.", "upload_form.audio_description": "Kuvaile sisältöä kuuroille ja kuulorajoitteisille", "upload_form.description": "Kuvaile sisältöä sokeille ja näkörajoitteisille", @@ -715,7 +715,7 @@ "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", - "username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista", + "username.taken": "Käyttäjänimi on jo varattu. Kokeile toista", "video.close": "Sulje video", "video.download": "Lataa tiedosto", "video.exit_fullscreen": "Poistu koko näytön tilasta", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index ea1ce59e84833f..4f485cfc55d76d 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -7,7 +7,7 @@ "about.domain_blocks.silenced.explanation": "San fharsaingeachd, chan fhaic thu pròifilean agus susbaint an fhrithealaiche seo ach ma nì thu lorg no ma tha thu ga leantainn.", "about.domain_blocks.silenced.title": "Cuingichte", "about.domain_blocks.suspended.explanation": "Cha dèid dàta sam bith on fhrithealaiche seo a phròiseasadh, a stòradh no iomlaid agus chan urrainn do na cleachdaichean on fhrithealaiche sin conaltradh no eadar-ghnìomh a ghabhail an-seo.", - "about.domain_blocks.suspended.title": "’Na dhàil", + "about.domain_blocks.suspended.title": "À rèim", "about.not_available": "Cha deach am fiosrachadh seo a sholar air an fhrithealaiche seo.", "about.powered_by": "Lìonra sòisealta sgaoilte le cumhachd {mastodon}", "about.rules": "Riaghailtean an fhrithealaiche", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 4d5f0cbc9a7ac4..d1bcc8cd9707e5 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -55,7 +55,7 @@ "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。", "account.media": "メディア", "account.mention": "@{name}さんにメンション", - "account.moved_to": "{name}さんがアカウントを引っ越しました:", + "account.moved_to": "{name}さんはこちらのアカウントに引っ越しました:", "account.mute": "@{name}さんをミュート", "account.mute_notifications_short": "通知をオフにする", "account.mute_short": "ミュート", @@ -340,7 +340,7 @@ "errors.unexpected_crash.report_issue": "問題を報告", "explore.search_results": "検索結果", "explore.suggested_follows": "ユーザー", - "explore.title": "エクスプローラー", + "explore.title": "探索する", "explore.trending_links": "ニュース", "explore.trending_statuses": "投稿", "explore.trending_tags": "ハッシュタグ", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 1a221945546421..6b82654500fdd4 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -65,6 +65,7 @@ "account.unendorse": "Mostrar pas pel perfil", "account.unfollow": "Quitar de sègre", "account.unmute": "Quitar de rescondre @{name}", + "account.unmute_notifications_short": "Restablir las notificacions", "account.unmute_short": "Tornar afichar", "account_note.placeholder": "Clicar per ajustar una nòta", "admin.dashboard.retention.average": "Mejana", @@ -97,6 +98,8 @@ "column.direct": "Mencions privadas", "column.directory": "Percórrer los perfils", "column.domain_blocks": "Domenis resconduts", + "column.favourites": "Favorits", + "column.firehose": "Tuts en dirèct", "column.follow_requests": "Demandas d’abonament", "column.home": "Acuèlh", "column.lists": "Listas", @@ -117,6 +120,7 @@ "community.column_settings.remote_only": "Sonque alonhat", "compose.language.change": "Cambiar de lenga", "compose.language.search": "Recercar de lengas...", + "compose.published.body": "Tut publicat.", "compose.published.open": "Dobrir", "compose.saved.body": "Publicacion enregistrada.", "compose_form.direct_message_warning_learn_more": "Ne saber mai", @@ -170,6 +174,7 @@ "conversation.open": "Veire la conversacion", "conversation.with": "Amb {names}", "copypaste.copied": "Copiat", + "copypaste.copy_to_clipboard": "Copiar al quichapapièr", "directory.federated": "Del fediverse conegut", "directory.local": "Solament de {domain}", "directory.new_arrivals": "Nòus-venguts", @@ -220,6 +225,7 @@ "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", "errors.unexpected_crash.report_issue": "Senhalar un problèma", "explore.search_results": "Resultats de recèrca", + "explore.suggested_follows": "Personas", "explore.title": "Explorar", "explore.trending_links": "Novèlas", "explore.trending_statuses": "Publicacions", @@ -234,6 +240,7 @@ "filter_modal.select_filter.search": "Cercar o crear", "filter_modal.select_filter.title": "Filtrar aquesta publicacion", "filter_modal.title.status": "Filtrar una publicacion", + "firehose.local": "Aqueste servidor", "follow_request.authorize": "Acceptar", "follow_request.reject": "Regetar", "follow_requests.unlocked_explanation": "Encara que vòstre compte siasque pas verrolhat, la còla de {domain} pensèt que volriatz benlèu repassar las demandas d’abonament d’aquestes comptes.", @@ -257,12 +264,19 @@ "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", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} tut} other {{counter} tuts}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} tut} other {{counter} tuts}} uèi", "hashtag.follow": "Sègre l’etiqueta", "hashtag.unfollow": "Quitar de sègre l’etiqueta", + "hashtags.and_other": "…e {count, plural, one {}other {# de mai}}", + "home.actions.go_to_explore": "Agachatz las tendéncias", + "home.actions.go_to_suggestions": "Trobatz de monde de sègre", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", "home.hide_announcements": "Rescondre las anóncias", + "home.pending_critical_update.link": "Veire las mesas a jorn", "home.show_announcements": "Mostrar las anóncias", "interaction_modal.on_another_server": "Sus un autre servidor", "interaction_modal.on_this_server": "Sus aqueste servidor", @@ -332,14 +346,17 @@ "mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?", "mute_modal.indefinite": "Cap de data de fin", "navigation_bar.about": "A prepaus", + "navigation_bar.advanced_interface": "Dobrir l’interfàcia web avançada", "navigation_bar.blocks": "Personas blocadas", "navigation_bar.bookmarks": "Marcadors", "navigation_bar.community_timeline": "Flux public local", "navigation_bar.compose": "Escriure un nòu tut", + "navigation_bar.direct": "Mencions privadas", "navigation_bar.discover": "Trobar", "navigation_bar.domain_blocks": "Domenis resconduts", "navigation_bar.edit_profile": "Modificar lo perfil", "navigation_bar.explore": "Explorar", + "navigation_bar.favourites": "Favorits", "navigation_bar.filters": "Mots ignorats", "navigation_bar.follow_requests": "Demandas d’abonament", "navigation_bar.followed_tags": "Etiquetas seguidas", @@ -369,6 +386,7 @@ "notifications.column_settings.admin.report": "Senhalaments novèls :", "notifications.column_settings.admin.sign_up": "Nòus inscrits :", "notifications.column_settings.alert": "Notificacions localas", + "notifications.column_settings.favourite": "Favorits :", "notifications.column_settings.filter_bar.advanced": "Mostrar totas las categorias", "notifications.column_settings.filter_bar.category": "Barra de recèrca rapida", "notifications.column_settings.filter_bar.show_bar": "Afichar la barra de filtres", @@ -386,6 +404,7 @@ "notifications.column_settings.update": "Modificacions :", "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", @@ -399,15 +418,21 @@ "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", + "onboarding.action.back": "Tornar en rèire", + "onboarding.actions.back": "Tornar en rèire", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Adiu #Mastodon !", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", + "onboarding.share.title": "Partejar vòstre perfil", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Tot es prèst !", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "Escrivètz vòstre primièr tut", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", @@ -415,6 +440,7 @@ "picture_in_picture.restore": "Lo tornar", "poll.closed": "Tampat", "poll.refresh": "Actualizar", + "poll.reveal": "Veire los resultats", "poll.total_people": "{count, plural, one {# persona} other {# personas}}", "poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}", "poll.vote": "Votar", @@ -482,11 +508,17 @@ "report_notification.open": "Dobrir lo senhalament", "search.placeholder": "Recercar", "search.search_or_paste": "Recercar o picar una URL", + "search_popout.language_code": "Còdi ISO de lenga", + "search_popout.options": "Opcions de recèrca", + "search_popout.quick_actions": "Accions rapidas", + "search_popout.recent": "Recèrcas recentas", + "search_popout.specific_date": "data especifica", "search_popout.user": "utilizaire", "search_results.accounts": "Perfils", "search_results.all": "Tot", "search_results.hashtags": "Etiquetas", "search_results.nothing_found": "Cap de resultat per aquestes tèrmes de recèrca", + "search_results.see_all": "O veire tot", "search_results.statuses": "Tuts", "search_results.title": "Recèrca : {q}", "server_banner.active_users": "utilizaires actius", @@ -506,16 +538,20 @@ "status.copy": "Copiar lo ligam de l’estatut", "status.delete": "Escafar", "status.detailed_status": "Vista detalhada de la convèrsa", + "status.direct_indicator": "Mencion privada", "status.edit": "Modificar", "status.edited": "Modificat {date}", "status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}", "status.embed": "Embarcar", + "status.favourite": "Apondre als favorits", "status.filter": "Filtrar aquesta publicacion", "status.filtered": "Filtrat", "status.hide": "Amagar la publicacion", "status.history.created": "{name} o creèt lo {date}", "status.history.edited": "{name} o modifiquèt lo {date}", "status.load_more": "Cargar mai", + "status.media.open": "Clicar per dobrir", + "status.media.show": "Clicar per mostar", "status.media_hidden": "Mèdia rescondut", "status.mention": "Mencionar", "status.more": "Mai", @@ -546,6 +582,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.translate": "Traduire", "status.translated_from_with": "Traduch del {lang} amb {provider}", + "status.uncached_media_warning": "Apercebut indisponible", "status.unmute_conversation": "Tornar mostrar la conversacion", "status.unpin": "Tirar del perfil", "subscribed_languages.lead": "Sonque las publicacions dins las lengas seleccionadas apreissaràn dins vòstre acuèlh e linha cronologica aprèp aqueste cambiament. Seleccionatz pas res per recebre las publicacions en quina lenga que siá.", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 43bd5a1bb5795f..7b26a9b4884755 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -218,7 +218,10 @@ "home.hide_announcements": "නිවේදන සඟවන්න", "home.pending_critical_update.link": "යාවත්කාල බලන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", + "interaction_modal.login.action": "මුලට ගෙනයන්න", "interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි", + "interaction_modal.title.favourite": "{name}ගේ ලිපිය ප්‍රිය කරන්න", + "interaction_modal.title.follow": "{name} අනුගමනය", "intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}", "intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}", "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}", @@ -319,6 +322,7 @@ "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", + "onboarding.actions.go_to_explore": "නැගී එන දෑ වෙත ගෙනයන්න", "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!", "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න", "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න", @@ -358,6 +362,7 @@ "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", + "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", "report.category.title_status": "ලිපිය", @@ -394,14 +399,25 @@ "report_notification.categories.spam": "ආයාචිත", "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", + "search.no_recent_searches": "මෑත සෙවීම් නැත", "search.placeholder": "සොයන්න", + "search.quick_action.account_search": "ගැළපෙන පැතිකඩ {x}", + "search.quick_action.go_to_account": "{x} පැතිකඩ වෙත යන්න", "search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න", + "search.quick_action.status_search": "ගැළපෙන ලිපි {x}", "search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න", + "search_popout.options": "සෙවුම් විකල්ප", + "search_popout.quick_actions": "ඉක්මන් ක්‍රියාමාර්ග", + "search_popout.recent": "මෑත සෙවීම්", + "search_popout.specific_date": "නිශ්චිත දිනයකට", + "search_popout.user": "පරිශ්‍රීලකයා", + "search_results.accounts": "පැතිකඩ", "search_results.all": "සියල්ල", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", "search_results.title": "{q} සොයන්න", + "server_banner.active_users": "සක්‍රිය පරිශ්‍රීලකයින්", "server_banner.learn_more": "තව දැනගන්න", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index da12eaa1b55203..60760607f27522 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -61,7 +61,7 @@ "account.requested_follow": "{name} ti poslal žiadosť na sledovanie", "account.share": "Zdieľaj @{name} profil", "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Prestaň skrývať {domain}", "account.unblock_short": "Odblokuj", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 8b5f7de2f34f30..b1cd0ca753ce22 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -204,7 +204,7 @@ "dismissable_banner.explore_links": "這些新聞故事正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的新聞排名更高。", "dismissable_banner.explore_statuses": "這些於此伺服器以及去中心化網路中其他伺服器發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。", "dismissable_banner.explore_tags": "這些主題標籤正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。", - "dismissable_banner.public_timeline": "這些是來自 {domain} 上人們於社群網站中跟隨者所發表之最近公開嘟文。", + "dismissable_banner.public_timeline": "這些是來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。", "embed.instructions": "要在您的網站嵌入此嘟文,請複製以下程式碼。", "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", @@ -271,8 +271,8 @@ "filter_modal.select_filter.title": "過濾此嘟文", "filter_modal.title.status": "過濾一則嘟文", "firehose.all": "全部", - "firehose.local": "此伺服器", - "firehose.remote": "其他伺服器", + "firehose.local": "本站", + "firehose.remote": "聯邦宇宙", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的管理員認為您可能想要自己審核這些帳號的跟隨請求。", @@ -409,7 +409,7 @@ "navigation_bar.favourites": "最愛", "navigation_bar.filters": "已靜音的關鍵字", "navigation_bar.follow_requests": "跟隨請求", - "navigation_bar.followed_tags": "已跟隨的主題標籤", + "navigation_bar.followed_tags": "已跟隨主題標籤", "navigation_bar.follows_and_followers": "跟隨中與跟隨者", "navigation_bar.lists": "列表", "navigation_bar.logout": "登出", diff --git a/app/javascript/mastodon/reducers/antenna_adder.js b/app/javascript/mastodon/reducers/antenna_adder.js index ace105d634d22a..aae4a43a0face7 100644 --- a/app/javascript/mastodon/reducers/antenna_adder.js +++ b/app/javascript/mastodon/reducers/antenna_adder.js @@ -38,10 +38,10 @@ export default function antennaAdderReducer(state = initialState, action) { return state.setIn(['antennas', 'isLoading'], true); case ANTENNA_ADDER_ANTENNAS_FETCH_FAIL: case ANTENNA_ADDER_EXCLUDE_ANTENNAS_FETCH_FAIL: - return state.setIn(['antennas', 'isLoading'], false); + return state.setIn(['antennas', 'isLoading'], false); case ANTENNA_ADDER_ANTENNAS_FETCH_SUCCESS: case ANTENNA_ADDER_EXCLUDE_ANTENNAS_FETCH_SUCCESS: - return state.update('antennas', antennas => antennas.withMutations(map => { + return state.update('antennas', antennas => antennas.withMutations(map => { map.set('isLoading', false); map.set('loaded', true); map.set('items', ImmutableList(action.antennas.map(item => item.id))); diff --git a/app/javascript/mastodon/reducers/circles.js b/app/javascript/mastodon/reducers/circles.js index cadbb000e03c89..6b27712a498570 100644 --- a/app/javascript/mastodon/reducers/circles.js +++ b/app/javascript/mastodon/reducers/circles.js @@ -1,4 +1,4 @@ -import { List as ImmutableList, Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; +import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; import { CIRCLE_FETCH_SUCCESS, @@ -18,14 +18,7 @@ import { COMPOSE_WITH_CIRCLE_SUCCESS, } from '../actions/compose'; -const initialState = ImmutableList(); - -const initialStatusesState = ImmutableMap({ - items: ImmutableList(), - isLoading: false, - loaded: true, - next: null, -}); +const initialState = ImmutableMap(); const normalizeCircle = (state, circle) => { const old = state.get(circle.id); @@ -33,13 +26,11 @@ const normalizeCircle = (state, circle) => { return state; } - let s = state.set(circle.id, fromJS(circle)); + state = state.set(circle.id, fromJS(circle)); if (old) { - s = s.setIn([circle.id, 'statuses'], old.get('statuses')); - } else { - s = s.setIn([circle.id, 'statuses'], initialStatusesState); + state = state.setIn([circle.id, 'items'], old.get('items')); } - return s.setIn([circle.id, 'isLoading'], false).setIn([circle.id, 'isLoaded'], true); + return state.setIn([circle.id, 'isLoading'], false).setIn([circle.id, 'isLoaded'], true); }; const normalizeCircles = (state, circles) => { @@ -51,7 +42,7 @@ const normalizeCircles = (state, circles) => { }; const normalizeCircleStatuses = (state, circleId, statuses, next) => { - return state.updateIn([circleId, 'statuses'], listMap => listMap.withMutations(map => { + return state.update(circleId, listMap => listMap.withMutations(map => { map.set('next', next); map.set('loaded', true); map.set('isLoading', false); @@ -64,7 +55,7 @@ const appendToCircleStatuses = (state, circleId, statuses, next) => { }; const appendToCircleStatusesById = (state, circleId, statuses, next) => { - return state.updateIn([circleId, 'statuses'], listMap => listMap.withMutations(map => { + return state.update(circleId, listMap => listMap.withMutations(map => { if (typeof next !== 'undefined') { map.set('next', next); } @@ -79,11 +70,11 @@ const prependToCircleStatusById = (state, circleId, statusId) => { if (!state.get(circleId)) return state; return state.updateIn([circleId], circle => circle.withMutations(map => { - if (map.getIn(['statuses', 'items'])) { - map.updateIn(['statuses', 'items'], list => ImmutableOrderedSet([statusId]).union(list)); + if (map.get('items')) { + map.update('items', list => ImmutableOrderedSet([statusId]).union(list)); } })); -} +}; export default function circles(state = initialState, action) { switch(action.type) { @@ -98,10 +89,10 @@ export default function circles(state = initialState, action) { return state.set(action.id, false); case CIRCLE_STATUSES_FETCH_REQUEST: case CIRCLE_STATUSES_EXPAND_REQUEST: - return state.setIn([action.id, 'statuses', 'isLoading'], true); + return state.setIn([action.id, 'isLoading'], true); case CIRCLE_STATUSES_FETCH_FAIL: case CIRCLE_STATUSES_EXPAND_FAIL: - return state.setIn([action.id, 'statuses', 'isLoading'], false); + return state.setIn([action.id, 'isLoading'], false); case CIRCLE_STATUSES_FETCH_SUCCESS: return normalizeCircleStatuses(state, action.id, action.statuses, action.next); case CIRCLE_STATUSES_EXPAND_SUCCESS: diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 6c5891ca57cb4f..1635280aee9f4e 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -156,5 +156,5 @@ export const getBookmarkCategoryStatusList = createSelector([ ], (items) => items ? items.toList() : ImmutableList()); export const getCircleStatusList = createSelector([ - (state, circleId) => state.getIn(['circles', circleId, 'statuses', 'items']), + (state, circleId) => state.getIn(['circles', circleId, 'items']), ], (items) => items ? items.toList() : ImmutableList()); diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index f26321c41aae99..d13388b4791620 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -1,5 +1,5 @@ import './public-path'; -import main from "mastodon/main" +import main from "mastodon/main"; import { start } from '../mastodon/common'; import { loadLocale } from '../mastodon/locales'; diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index b2bf2afc20f9d4..204899fa398f19 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -84,7 +84,7 @@ def process_status return nil unless valid_status? return nil if (reply_to_local? || reply_to_local_account? || reply_to_local_from_tags?) && reject_reply_to_local? - return nil if (!reply_to_local_account_following? || !reply_to_local_status_following? || !reply_to_local_from_tags_following?) && reject_reply_exclude_followers? + return nil if mention_to_local_but_not_followed? && reject_reply_exclude_followers? ApplicationRecord.transaction do @status = Status.create!(@params) @@ -139,7 +139,11 @@ def process_status_params end def valid_status? - !Admin::NgWord.reject?("#{@params[:spoiler_text]}\n#{@params[:text]}") && !Admin::NgWord.hashtag_reject?(@tags.size) + valid = !Admin::NgWord.reject?("#{@params[:spoiler_text]}\n#{@params[:text]}") && !Admin::NgWord.hashtag_reject?(@tags.size) + + valid = !Admin::NgWord.stranger_mention_reject?("#{@params[:spoiler_text]}\n#{@params[:text]}") if valid && mention_to_local_but_not_followed? + + valid end def accounts_in_audience @@ -270,6 +274,7 @@ def process_emoji(tag) emoji.image_remote_url = custom_emoji_parser.image_remote_url emoji.license = custom_emoji_parser.license emoji.is_sensitive = custom_emoji_parser.is_sensitive + emoji.aliases = custom_emoji_parser.aliases emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" @@ -418,11 +423,11 @@ def reply_to_local_account_following? end def reply_to_local_from_tags? - (@mentions.present? && @mentions.any? { |m| m.account.local? }) + @mentions.present? && @mentions.any? { |m| m.account.local? } end def reply_to_local_from_tags_following? - (@mentions.present? && @mentions.none? { |m| m.account.local? && !m.account.following?(@account) }) + @mentions.nil? || @mentions.none? { |m| m.account.local? && !m.account.following?(@account) } end def reply_to_local? @@ -433,6 +438,10 @@ def reply_to_local_status_following? !reply_to_local? || replied_to_status.account.following?(@account) end + def mention_to_local_but_not_followed? + !reply_to_local_account_following? || !reply_to_local_status_following? || !reply_to_local_from_tags_following? + end + def reject_reply_to_local? @reject_reply_to_local ||= DomainBlock.reject_reply?(@account.domain) end diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index ba103b1fa7b3f1..729a1ba0c6a4ca 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -3,6 +3,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity include Redisable include Lockable + include JsonLdHelper def perform @original_status = status_from_uri(object_uri) @@ -102,7 +103,7 @@ def process_emoji(tag) return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? - domain = tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = URI.split(custom_emoji_parser.uri)[2] || @account.domain if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain # Block overwriting remote-but-local data @@ -118,6 +119,9 @@ def process_emoji(tag) (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || custom_emoji_parser.license != emoji.license + custom_emoji_parser = original_emoji_parser(custom_emoji_parser) if @account.domain != domain + return if custom_emoji_parser.nil? + begin emoji ||= CustomEmoji.new( domain: domain, @@ -127,6 +131,7 @@ def process_emoji(tag) emoji.image_remote_url = custom_emoji_parser.image_remote_url emoji.license = custom_emoji_parser.license emoji.is_sensitive = custom_emoji_parser.is_sensitive + emoji.aliases = custom_emoji_parser.aliases emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" @@ -135,6 +140,17 @@ def process_emoji(tag) emoji end + def original_emoji_parser(custom_emoji_parser) + uri = custom_emoji_parser.uri + emoji = fetch_resource_without_id_validation(uri) + return nil unless emoji + + parser = ActivityPub::Parser::CustomEmojiParser.new(emoji) + return nil unless parser.uri == uri && custom_emoji_parser.shortcode == parser.shortcode + + parser + end + def skip_download?(domain) DomainBlock.reject_media?(domain) end diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index eac34efdc9697b..f99d949c39e897 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -135,7 +135,12 @@ def undo_like if shortcode.present? emoji_tag = @object['tag'].is_a?(Array) ? @object['tag']&.first : @object['tag'] - emoji = CustomEmoji.find_by(shortcode: shortcode, domain: @account.domain) if emoji_tag.present? && emoji_tag['id'].present? + emoji = nil + if emoji_tag.present? && emoji_tag['id'].present? + domain = URI.split(emoji_tag['id'])[2] + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + emoji = CustomEmoji.find_by(shortcode: shortcode, domain: domain) if emoji_tag.present? && emoji_tag['id'].present? + end emoji_reaction = @original_status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first diff --git a/app/lib/activitypub/parser/custom_emoji_parser.rb b/app/lib/activitypub/parser/custom_emoji_parser.rb index e217b5ec96fb04..e2c48b0a907f73 100644 --- a/app/lib/activitypub/parser/custom_emoji_parser.rb +++ b/app/lib/activitypub/parser/custom_emoji_parser.rb @@ -15,6 +15,10 @@ def shortcode @json['name']&.delete(':') end + def aliases + as_array(@json['keywords']) + end + def image_remote_url @json.dig('icon', 'url') end diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb index b95ec805190848..a96612cab0d131 100644 --- a/app/lib/link_details_extractor.rb +++ b/app/lib/link_details_extractor.rb @@ -36,7 +36,8 @@ def description end def language - json['inLanguage'] + lang = json['inLanguage'] + lang.is_a?(Hash) ? (lang['alternateName'] || lang['name']) : lang end def type diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index 567b10ade2b107..ed73751cb561dd 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -79,6 +79,8 @@ def indexes case @flags['in'] when 'library' [StatusesIndex] + when 'public' + [PublicStatusesIndex] else @options[:current_account].user&.setting_use_public_index ? [PublicStatusesIndex, StatusesIndex] : [StatusesIndex] end diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 22b0d94ff6079e..5fe775907f2156 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -25,6 +25,10 @@ def inboxes_for_friend (reached_account_inboxes_for_friend + followers_inboxes_for_friend + friend_inboxes).uniq end + def all_inboxes + (inboxes + inboxes_for_misskey + inboxes_for_friend).uniq + end + private def reached_account_inboxes diff --git a/app/models/account.rb b/app/models/account.rb index 3b3dc09f0ef1cc..7170cbe1e268e3 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -399,6 +399,7 @@ def show_emoji_reaction?(account) def allow_emoji_reaction?(account) return false if account.nil? + return true unless local? || account.local? show_emoji_reaction?(account) end diff --git a/app/models/admin/ng_word.rb b/app/models/admin/ng_word.rb index b99c52a714d097..801c12094ee18b 100644 --- a/app/models/admin/ng_word.rb +++ b/app/models/admin/ng_word.rb @@ -18,6 +18,10 @@ def hashtag_reject_with_extractor?(text) hashtag_reject?(Extractor.extract_hashtags(text)&.size || 0) end + def stranger_mention_reject?(text) + ng_words_for_stranger_mention.any? { |word| include?(text, word) } + end + private def include?(text, word) @@ -32,6 +36,10 @@ def ng_words Setting.ng_words || [] end + def ng_words_for_stranger_mention + Setting.ng_words_for_stranger_mention || [] + end + def post_hash_tags_max value = Setting.post_hash_tags_max value.is_a?(Integer) && value.positive? ? value : 0 diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 8c0a635d02e451..143e91feb85a65 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -247,8 +247,16 @@ def favourited?(status) status.proper.favourites.where(account: self).exists? end - def emoji_reactioned?(status) - status.proper.emoji_reactions.where(account: self).exists? + def emoji_reacted?(status, shortcode = nil, domain = nil, domain_force = false) # rubocop:disable Style/OptionalBooleanParameter + if shortcode.present? + if domain.present? || domain_force + status.proper.emoji_reactions.joins(:custom_emoji).where(account: self, name: shortcode, custom_emoji: { domain: domain }).exists? + else + status.proper.emoji_reactions.where(account: self, name: shortcode).exists? + end + else + status.proper.emoji_reactions.where(account: self).exists? + end end def bookmarked?(status) diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index f95b1aa2241ae1..0a79bb20e0a3d3 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -70,7 +70,13 @@ def object_type end def copy! - copy = self.class.find_or_initialize_by(domain: nil, shortcode: shortcode) + copy = self.class.find_or_initialize_by( + domain: nil, + shortcode: shortcode, + license: license, + aliases: aliases, + is_sensitive: is_sensitive + ) copy.image = image copy.tap(&:save!) end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 681b13814aa73d..55909bc0ce98f8 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -38,6 +38,8 @@ class Form::AdminSettings status_page_url captcha_enabled ng_words + ng_words_for_stranger_mention + stranger_mention_from_local_ng hide_local_users_for_anonymous post_hash_tags_max sensitive_words @@ -78,6 +80,7 @@ class Form::AdminSettings check_lts_version_only enable_public_unlisted_visibility unlocked_friend + stranger_mention_from_local_ng ).freeze UPLOAD_KEYS = %i( @@ -91,6 +94,7 @@ class Form::AdminSettings STRING_ARRAY_KEYS = %i( ng_words + ng_words_for_stranger_mention sensitive_words sensitive_words_for_full ).freeze diff --git a/app/models/form/custom_emoji_batch.rb b/app/models/form/custom_emoji_batch.rb index 3773f4d3da5254..c63996e06950b2 100644 --- a/app/models/form/custom_emoji_batch.rb +++ b/app/models/form/custom_emoji_batch.rb @@ -6,7 +6,7 @@ class Form::CustomEmojiBatch include AccountableConcern attr_accessor :custom_emoji_ids, :action, :current_account, - :category_id, :category_name, :aliases_raw, :visible_in_picker + :category_id, :category_name, :visible_in_picker def save case action @@ -34,7 +34,7 @@ def custom_emojis end def update! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + verify_authorization(:update?) category = if category_id.present? CustomEmojiCategory.find(category_id) @@ -43,14 +43,13 @@ def update! end custom_emojis.each do |custom_emoji| - new_aliases_raw = (aliases_raw.presence || custom_emoji.aliases_raw) - custom_emoji.update(category_id: category&.id, aliases_raw: new_aliases_raw) + custom_emoji.update(category_id: category&.id) log_action :update, custom_emoji end end def list! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + verify_authorization(:update?) custom_emojis.each do |custom_emoji| custom_emoji.update(visible_in_picker: true) @@ -59,7 +58,7 @@ def list! end def unlist! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + verify_authorization(:update?) custom_emojis.each do |custom_emoji| custom_emoji.update(visible_in_picker: false) @@ -68,7 +67,7 @@ def unlist! end def enable! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :enable?) } + verify_authorization(:enable?) custom_emojis.each do |custom_emoji| custom_emoji.update(disabled: false) @@ -77,7 +76,7 @@ def enable! end def disable! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :disable?) } + verify_authorization(:disable?) custom_emojis.each do |custom_emoji| custom_emoji.update(disabled: true) @@ -86,7 +85,7 @@ def disable! end def copy! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :copy?) } + verify_authorization(:copy?) custom_emojis.each do |custom_emoji| copied_custom_emoji = custom_emoji.copy! @@ -95,11 +94,15 @@ def copy! end def delete! - custom_emojis.each { |custom_emoji| authorize(custom_emoji, :destroy?) } + verify_authorization(:destroy?) custom_emojis.each do |custom_emoji| custom_emoji.destroy log_action :destroy, custom_emoji end end + + def verify_authorization(permission) + custom_emojis.each { |custom_emoji| authorize(custom_emoji, permission) } + end end diff --git a/app/models/form/ip_block_batch.rb b/app/models/form/ip_block_batch.rb index f6fe9b59357779..bdfeb91c8a810f 100644 --- a/app/models/form/ip_block_batch.rb +++ b/app/models/form/ip_block_batch.rb @@ -21,11 +21,15 @@ def ip_blocks end def delete! - ip_blocks.each { |ip_block| authorize(ip_block, :destroy?) } + verify_authorization(:destroy?) ip_blocks.each do |ip_block| ip_block.destroy log_action :destroy, ip_block end end + + def verify_authorization(permission) + ip_blocks.each { |ip_block| authorize(ip_block, permission) } + end end diff --git a/app/models/status.rb b/app/models/status.rb index 4b718cdc928ef5..cdfd7b955546a5 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -78,6 +78,7 @@ class Status < ApplicationRecord has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy has_many :reblogged_by_accounts, through: :reblogs, class_name: 'Account', source: :account has_many :quotes, foreign_key: 'quote_of_id', class_name: 'Status', inverse_of: :quote + has_many :quoted_by_accounts, through: :quotes, class_name: 'Account', source: :account has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread has_many :mentions, dependent: :destroy, inverse_of: :status has_many :mentioned_accounts, through: :mentions, source: :account, class_name: 'Account' @@ -631,12 +632,10 @@ def set_searchability self.searchability = if %w(public public_unlisted login unlisted).include?(visibility) searchability - elsif visibility == 'limited' - :limited + elsif visibility == 'limited' || visibility == 'direct' + searchability == 'limited' ? :limited : :direct elsif visibility == 'private' searchability == 'public' || searchability == 'public_unlisted' ? :private : searchability - elsif visibility == 'direct' - searchability == 'limited' ? :limited : :direct else :direct end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 98525d3131ab18..24c21c3ccf2df5 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -3,9 +3,9 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer include RoutingHelper - context_extensions :emoji + context_extensions :emoji, :license, :keywords - attributes :id, :type, :domain, :name, :is_sensitive, :updated + attributes :id, :type, :name, :keywords, :is_sensitive, :updated attribute :license, if: -> { object.license.present? } @@ -19,8 +19,8 @@ def type 'Emoji' end - def domain - object.domain.presence || Rails.configuration.x.local_domain + def keywords + object.aliases end def icon diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index aa7f7ce5d8d626..501bb788e7cdbe 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -16,11 +16,18 @@ class ManifestSerializer < ActiveModel::Serializer 512 ).freeze - attributes :name, :short_name, + attributes :id, :name, :short_name, :icons, :theme_color, :background_color, :display, :start_url, :scope, :share_target, :shortcuts + def id + # This is set to `/home` because that was the old value of `start_url` and + # thus the fallback ID computed by Chrome: + # https://developer.chrome.com/blog/pwa-manifest-id/ + '/home' + end + def name object.title end @@ -53,7 +60,7 @@ def display end def start_url - '/home' + '/' end def scope diff --git a/app/serializers/rest/admin/domain_block_serializer.rb b/app/serializers/rest/admin/domain_block_serializer.rb index e7cdc40ad19450..e4f9e22d434604 100644 --- a/app/serializers/rest/admin/domain_block_serializer.rb +++ b/app/serializers/rest/admin/domain_block_serializer.rb @@ -5,7 +5,7 @@ class REST::Admin::DomainBlockSerializer < ActiveModel::Serializer :reject_media, :reject_favourite, :reject_reply, :reject_reports, :reject_send_not_public_searchability, :reject_reply_exclude_followers, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, :reject_send_sensitive, - :reject_hashtag, :reject_straight_follow, :reject_new_follow, :detect_invalid_subscription, + :reject_hashtag, :reject_straight_follow, :reject_new_follow, :reject_friend, :detect_invalid_subscription, :private_comment, :public_comment, :obfuscate def id diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index c7bc93f7813fe6..765a59c890d543 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -5,6 +5,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService include Redisable include Lockable + class AbortError < ::StandardError; end + def call(status, activity_json, object_json, request_id: nil) raise ArgumentError, 'Status has unsaved changes' if status.changed? @@ -30,6 +32,9 @@ def call(status, activity_json, object_json, request_id: nil) handle_implicit_update! end + @status + rescue AbortError + @status.reload @status end @@ -46,6 +51,7 @@ def handle_explicit_update! update_poll! update_immediate_attributes! update_metadata! + validate_status_mentions! create_edits! end @@ -160,6 +166,15 @@ def valid_status? !Admin::NgWord.reject?("#{@status_parser.spoiler_text}\n#{@status_parser.text}") && !Admin::NgWord.hashtag_reject?(@raw_tags.size) end + def validate_status_mentions! + raise AbortError if mention_to_stranger? && Admin::NgWord.stranger_mention_reject?("#{@status.spoiler_text}\n#{@status.text}") + end + + def mention_to_stranger? + @status.mentions.map(&:account).to_a.any? { |mentioned_account| mentioned_account.id != @status.account.id && !mentioned_account.following?(@status.account) } || + (@status.thread.present? && @status.thread.account.id != @status.account.id && !@status.thread.account.following?(@status.account)) + end + def update_immediate_attributes! @status.text = @status_parser.text || '' @status.spoiler_text = @status_parser.spoiler_text || '' @@ -249,6 +264,7 @@ def update_emojis! emoji.image_remote_url = custom_emoji_parser.image_remote_url emoji.license = custom_emoji_parser.license emoji.is_sensitive = custom_emoji_parser.is_sensitive + emoji.aliases = custom_emoji_parser.aliases emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/services/concerns/payloadable.rb b/app/services/concerns/payloadable.rb index 73c397852e768b..b0bab9a081ecb0 100644 --- a/app/services/concerns/payloadable.rb +++ b/app/services/concerns/payloadable.rb @@ -16,8 +16,9 @@ def serialize_payload(record, serializer, options = {}) always_sign = options.delete(:always_sign) payload = ActiveModelSerializers::SerializableResource.new(record, options.merge(serializer: serializer, adapter: ActivityPub::Adapter)).as_json object = record.respond_to?(:virtual_object) ? record.virtual_object : record + bearcap = object.is_a?(String) && record.respond_to?(:type) && (record.type == 'Create' || record.type == 'Update') - if ((object.respond_to?(:sign?) && object.sign?) && signer && (always_sign || signing_enabled?)) || object.is_a?(String) + if ((object.respond_to?(:sign?) && object.sign?) && signer && (always_sign || signing_enabled?)) || bearcap ActivityPub::LinkedDataSignature.new(payload).sign!(signer, sign_with: sign_with) else payload diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index a827ddc93e031d..f8bc622d1f782f 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -16,95 +16,81 @@ def call(account, status, name) authorize_with account, status, :emoji_reaction? @status = status - emoji_reaction = nil - with_redis_lock("emoji_reaction:#{status.id}") do - emoji_reaction = EmojiReaction.find_by(account: account, status: status, name: name) - raise Mastodon::ValidationError, I18n.t('reactions.errors.duplication') unless emoji_reaction.nil? - shortcode, domain = name.split('@') domain = nil if TagManager.instance.local_domain?(domain) custom_emoji = CustomEmoji.find_by(shortcode: shortcode, domain: domain) return if domain.present? && !EmojiReaction.exists?(status: status, custom_emoji: custom_emoji) - emoji_reaction = EmojiReaction.create!(account: account, status: status, name: shortcode, custom_emoji: custom_emoji) + @emoji_reaction = EmojiReaction.find_by(account: account, status: status, name: shortcode, custom_emoji: custom_emoji) + raise Mastodon::ValidationError, I18n.t('reactions.errors.duplication') unless @emoji_reaction.nil? + + @emoji_reaction = EmojiReaction.create!(account: account, status: status, name: shortcode, custom_emoji: custom_emoji) status.touch # rubocop:disable Rails/SkipsModelValidations end - raise Mastodon::ValidationError, I18n.t('reactions.errors.duplication') if emoji_reaction.nil? + raise Mastodon::ValidationError, I18n.t('reactions.errors.duplication') if @emoji_reaction.nil? Trends.statuses.register(status) - create_notification(emoji_reaction) - notify_to_followers(emoji_reaction) - bump_potential_friendship(account, status) - write_stream(emoji_reaction) - relay_for_emoji_reaction!(emoji_reaction) - relay_friend_for_emoji_reaction!(emoji_reaction) + create_notification + notify_to_followers + bump_potential_friendship! + write_stream! - emoji_reaction + @emoji_reaction end private - def create_notification(emoji_reaction) - status = emoji_reaction.status + def create_notification + status = @emoji_reaction.status if status.account.local? if status.account.user&.setting_enable_emoji_reaction - LocalNotificationWorker.perform_async(status.account_id, emoji_reaction.id, 'EmojiReaction', 'reaction') if status.account.user&.setting_emoji_reaction_streaming_notify_impl2 - LocalNotificationWorker.perform_async(status.account_id, emoji_reaction.id, 'EmojiReaction', 'emoji_reaction') + LocalNotificationWorker.perform_async(status.account_id, @emoji_reaction.id, 'EmojiReaction', 'reaction') if status.account.user&.setting_emoji_reaction_streaming_notify_impl2 + LocalNotificationWorker.perform_async(status.account_id, @emoji_reaction.id, 'EmojiReaction', 'emoji_reaction') end elsif status.account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, @emoji_reaction.account_id, status.account.inbox_url) end end - def notify_to_followers(emoji_reaction) - status = emoji_reaction.status + def notify_to_followers + status = @emoji_reaction.status return unless status.account.local? - ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), status.account_id) + ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url| + [payload, @status.account.id, inbox_url] + end end - def write_stream(emoji_reaction) - emoji_group = emoji_reaction.status.emoji_reactions_grouped_by_name(nil, force: true) - .find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) } - emoji_group['status_id'] = emoji_reaction.status_id.to_s - DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.status_id, emoji_reaction.account_id) + def inboxes + StatusReachFinder.new(@status).all_inboxes end - def bump_potential_friendship(account, status) + def write_stream! + emoji_group = @emoji_reaction.status.emoji_reactions_grouped_by_name(nil, force: true) + .find { |reaction_group| reaction_group['name'] == @emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == @emoji_reaction.custom_emoji&.domain) } + emoji_group['status_id'] = @emoji_reaction.status_id.to_s + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @emoji_reaction.status_id, @emoji_reaction.account_id) + end + + def bump_potential_friendship! ActivityTracker.increment('activity:interactions') - return if account.following?(status.account_id) + return if @emoji_reaction.account.following?(@emoji_reaction.status.account_id) - PotentialFriendshipTracker.record(account.id, status.account_id, :emoji_reaction) + PotentialFriendshipTracker.record(@emoji_reaction.account.id, @emoji_reaction.status.account_id, :emoji_reaction) end - def build_json(emoji_reaction) - @build_json = Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account)) + def payload + @payload = Oj.dump(serialize_payload(@emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: @emoji_reaction.account)) end def render_emoji_reaction(emoji_group) # @rendered_emoji_reaction ||= InlineRenderer.render(HashObject.new(emoji_group), nil, :emoji_reaction) @render_emoji_reaction ||= Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end - - def relay_for_emoji_reaction!(emoji_reaction) - return unless @status.local? && @status.public_visibility? - - ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| - [build_json(emoji_reaction), @status.account.id, inbox_url] - end - end - - def relay_friend_for_emoji_reaction!(emoji_reaction) - return unless @status.local? && @status.distributable_friend? - - ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| - [build_json(emoji_reaction), @status.account.id, inbox_url] - end - end end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 89e1b6c9c5376b..6df3364d85e26c 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -89,7 +89,7 @@ def notify_mentioned_accounts! end def notify_about_update! - @status.reblogged_by_accounts.merge(Account.local).select(:id).reorder(nil).find_in_batches do |accounts| + @status.reblogged_by_accounts.or(@status.quoted_by_accounts).merge(Account.local).select(:id).reorder(nil).find_in_batches do |accounts| LocalNotificationWorker.push_bulk(accounts) do |account| [account.id, @status.id, 'Status', 'update'] end diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index cdd1aa86747e89..0e3bd8805de509 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -146,6 +146,7 @@ def process_status! @status = @account.statuses.new(status_attributes) process_mentions_service.call(@status, limited_type: @status.limited_visibility? ? @limited_scope : '', circle: @circle, save_records: false) safeguard_mentions!(@status) + validate_status_mentions! @status.limited_scope = :personal if @status.limited_visibility? && !process_mentions_service.mentions? @@ -208,6 +209,15 @@ def validate_status! raise Mastodon::ValidationError, I18n.t('statuses.too_many_hashtags') if Admin::NgWord.hashtag_reject_with_extractor?(@options[:text]) end + def validate_status_mentions! + raise Mastodon::ValidationError, I18n.t('statuses.contains_ng_words') if mention_to_stranger? && Setting.stranger_mention_from_local_ng && Admin::NgWord.stranger_mention_reject?("#{@options[:spoiler_text]}\n#{@options[:text]}") + end + + def mention_to_stranger? + @status.mentions.map(&:account).to_a.any? { |mentioned_account| mentioned_account.id != @account.id && !mentioned_account.following?(@account) } || + (@in_reply_to && @in_reply_to.account.id != @account.id && !@in_reply_to.account.following?(@account)) + end + def validate_media! if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable) @media = [] diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 625097a16d7fb1..a0573e2d1b25ca 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -38,7 +38,13 @@ def reject_straight_follow_domains end def check_links(account) - VerifyAccountLinksWorker.perform_async(account.id) if account.fields.any?(&:requires_verification?) + return unless account.fields.any?(&:requires_verification?) + + if account.local? + VerifyAccountLinksWorker.perform_async(account.id) + else + VerifyAccountLinksWorker.perform_in(rand(10.minutes.to_i), account.id) + end end def process_hashtags(account) diff --git a/app/services/update_status_service.rb b/app/services/update_status_service.rb index 0a5de6b907b3bf..a9733b0658f09b 100644 --- a/app/services/update_status_service.rb +++ b/app/services/update_status_service.rb @@ -35,10 +35,13 @@ def call(status, account_id, options = {}) update_poll! if @options.key?(:poll) update_immediate_attributes! create_edit! unless @options[:no_history] + + reset_preview_card! + process_mentions_service.call(@status) + validate_status_mentions! end queue_poll_notifications! - reset_preview_card! update_metadata! update_references! broadcast_updates! @@ -81,6 +84,15 @@ def validate_status! raise Mastodon::ValidationError, I18n.t('statuses.too_many_hashtags') if Admin::NgWord.hashtag_reject_with_extractor?(@options[:text]) end + def validate_status_mentions! + raise Mastodon::ValidationError, I18n.t('statuses.contains_ng_words') if mention_to_stranger? && Setting.stranger_mention_from_local_ng && Admin::NgWord.stranger_mention_reject?("#{@options[:spoiler_text]}\n#{@options[:text]}") + end + + def mention_to_stranger? + @status.mentions.map(&:account).to_a.any? { |mentioned_account| mentioned_account.id != @status.account.id && !mentioned_account.following?(@status.account) } || + (@status.thread.present? && @status.thread.account.id != @status.account.id && !@status.thread.account.following?(@status.account)) + end + def validate_media! return [] if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable) @@ -167,7 +179,6 @@ def update_references! def update_metadata! ProcessHashtagsService.new.call(@status) - process_mentions_service.call(@status) @status.update(limited_scope: :circle) if process_mentions_service.mentions? end diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb index 037d92f39bd0e9..09d53ca6809fdb 100644 --- a/app/validators/existing_username_validator.rb +++ b/app/validators/existing_username_validator.rb @@ -2,25 +2,40 @@ class ExistingUsernameValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - return if value.blank? + @value = value + return if @value.blank? - usernames_and_domains = value.split(',').filter_map do |str| - username, domain = str.strip.gsub(/\A@/, '').split('@', 2) + if options[:multiple] + record.errors.add(attribute, not_found_multiple_message) if usernames_with_no_accounts.any? + elsif usernames_with_no_accounts.any? || usernames_and_domains.size > 1 + record.errors.add(attribute, not_found_message) + end + end + + private + + def usernames_and_domains + @value.split(',').filter_map do |string| + username, domain = string.strip.gsub(/\A@/, '').split('@', 2) domain = nil if TagManager.instance.local_domain?(domain) next if username.blank? - [str, username, domain] + [string, username, domain] end + end - usernames_with_no_accounts = usernames_and_domains.filter_map do |(str, username, domain)| - str unless Account.find_remote(username, domain) + def usernames_with_no_accounts + usernames_and_domains.filter_map do |(string, username, domain)| + string unless Account.find_remote(username, domain) end + end - if options[:multiple] - record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: usernames_with_no_accounts.join(', '))) if usernames_with_no_accounts.any? - elsif usernames_with_no_accounts.any? || usernames_and_domains.size > 1 - record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) - end + def not_found_multiple_message + I18n.t('existing_username_validator.not_found_multiple', usernames: usernames_with_no_accounts.join(', ')) + end + + def not_found_message + I18n.t('existing_username_validator.not_found') end end diff --git a/app/validators/unreserved_username_validator.rb b/app/validators/unreserved_username_validator.rb index f82f4b91d03282..55a8c835fae1c4 100644 --- a/app/validators/unreserved_username_validator.rb +++ b/app/validators/unreserved_username_validator.rb @@ -11,16 +11,31 @@ def validate(account) private + def reserved_username? + pam_username_reserved? || settings_username_reserved? + end + + def pam_username_reserved? + pam_controlled? && pam_reserves_username? + end + def pam_controlled? - return false unless Devise.pam_authentication && Devise.pam_controlled_service + Devise.pam_authentication && Devise.pam_controlled_service + end - Rpam2.account(Devise.pam_controlled_service, @username).present? + def pam_reserves_username? + Rpam2.account(Devise.pam_controlled_service, @username) end - def reserved_username? - return true if pam_controlled? - return false unless Setting.reserved_usernames + def settings_username_reserved? + settings_has_reserved_usernames? && settings_reserves_username? + end + + def settings_has_reserved_usernames? + Setting.reserved_usernames.present? + end + def settings_reserves_username? Setting.reserved_usernames.include?(@username.downcase) end end diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml new file mode 100644 index 00000000000000..6eb141abc9ad7b --- /dev/null +++ b/app/views/admin/accounts/_buttons.html.haml @@ -0,0 +1,41 @@ +- if account.suspended? + %hr.spacer/ + - if account.suspension_origin_remote? + %p.muted-hint= deletion_request.present? ? t('admin.accounts.remote_suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.remote_suspension_irreversible') + - else + %p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') + = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account) + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote? + - if deletion_request.present? + = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, account) +- else + .action-buttons + %div + - if account.local? && account.user_approved? + = link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account) + - if account.user_disabled? + = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) + - 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? + = link_to t('admin.accounts.silence'), new_admin_account_action_path(account.id, type: 'silence'), class: 'button' if can?(:silence, account) + - if account.local? + - if account.user_pending? + = link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user) + = link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) + - unless account.user_confirmed? + = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' if can?(:confirm, account.user) + - if !account.local? || account.user_approved? + = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' if can?(:suspend, account) + %div + - if account.local? + - if !account.memorial? && account.user_approved? + = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, account) + - else + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) diff --git a/app/views/admin/accounts/_counters.html.haml b/app/views/admin/accounts/_counters.html.haml new file mode 100644 index 00000000000000..00ab98d094a5b8 --- /dev/null +++ b/app/views/admin/accounts/_counters.html.haml @@ -0,0 +1,43 @@ +.dashboard__counters.admin-account-counters + %div + = link_to admin_account_statuses_path(account.id) do + .dashboard__counters__num= number_with_delimiter account.statuses_count + .dashboard__counters__label= t 'admin.accounts.statuses' + %div + = link_to admin_account_statuses_path(account.id, { media: true }) do + .dashboard__counters__num= number_to_human_size account.media_attachments.sum('file_file_size') + .dashboard__counters__label= t 'admin.accounts.media_attachments' + %div + = link_to admin_account_relationships_path(account.id, location: account.local? ? nil : 'local', relationship: 'followed_by') do + .dashboard__counters__num= number_with_delimiter account.local_followers_count + .dashboard__counters__label= t 'admin.accounts.followers' + %div + = link_to admin_reports_path(account_id: account.id) do + .dashboard__counters__num= number_with_delimiter account.reports.count + .dashboard__counters__label= t 'admin.accounts.show.created_reports' + %div + = link_to admin_reports_path(target_account_id: account.id) do + .dashboard__counters__num= number_with_delimiter account.targeted_reports.count + .dashboard__counters__label= t 'admin.accounts.show.targeted_reports' + %div + = link_to admin_action_logs_path(target_account_id: account.id) do + .dashboard__counters__text + - if account.local? && account.user.nil? + = t('admin.accounts.deleted') + - elsif account.memorial? + = t('admin.accounts.memorialized') + - elsif account.suspended? + = t('admin.accounts.suspended') + - elsif account.silenced? + = t('admin.accounts.silenced') + - elsif account.local? && account.user&.disabled? + = t('admin.accounts.disabled') + - elsif account.local? && !account.user&.confirmed? + = 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' diff --git a/app/views/admin/accounts/_local_account.html.haml b/app/views/admin/accounts/_local_account.html.haml new file mode 100644 index 00000000000000..4b361fc8d10c96 --- /dev/null +++ b/app/views/admin/accounts/_local_account.html.haml @@ -0,0 +1,82 @@ +- if account.avatar? + %tr + %th= t('admin.accounts.avatar') + %td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account) + %td +- if account.header? + %tr + %th= t('admin.accounts.header') + %td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account) + %td +%tr + %th= t('admin.accounts.role') + %td + - if account.user_role&.everyone? + = t('admin.accounts.no_role_assigned') + - else + = account.user_role&.name + %td + = table_link_to 'vcard', t('admin.accounts.change_role.label'), admin_user_role_path(account.user) if can?(:change_role, account.user) +%tr + %th{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= t('admin.accounts.email') + %td{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= account.user_email + %td= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(account.id) if can?(:change_email, account.user) +%tr + %td= table_link_to 'search', t('admin.accounts.search_same_email_domain'), admin_accounts_path(email: "%@#{account.user_email.split('@').last}") +- if can?(:create, :email_domain_block) + %tr + %td= table_link_to 'ban', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: account.user_email.split('@').last) +- if account.user_unconfirmed_email.present? + %tr + %th= t('admin.accounts.unconfirmed_email') + %td= account.user_unconfirmed_email + %td +%tr + %th= t('admin.accounts.email_status') + %td + - if account.user&.confirmed? + = t('admin.accounts.confirmed') + - else + = t('admin.accounts.confirming') + %td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(account.id), method: :post if can?(:confirm, account.user) +%tr + %th{ rowspan: can?(:reset_password, account.user) ? 2 : 1 }= t('admin.accounts.security') + %td{ rowspan: can?(:reset_password, account.user) ? 2 : 1 } + - if account.user&.two_factor_enabled? + = t 'admin.accounts.security_measures.password_and_2fa' + - else + = t 'admin.accounts.security_measures.only_password' + %td + - if account.user&.two_factor_enabled? + = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete if can?(:disable_2fa, account.user) +- if can?(:reset_password, account.user) + %tr + %td + = table_link_to 'key', t('admin.accounts.reset_password'), admin_account_reset_path(account.id), method: :create, data: { confirm: t('admin.accounts.are_you_sure') } +%tr + %th= t('simple_form.labels.defaults.locale') + %td= standard_locale_name(account.user_locale) + %td +%tr + %th= t('admin.accounts.joined') + %td + %time.formatted{ datetime: account.created_at.iso8601, title: l(account.created_at) }= l account.created_at + %td +- recent_ips = account.user.ips.order(used_at: :desc).to_a +- recent_ips.each_with_index do |recent_ip, i| + %tr + - if i.zero? + %th{ rowspan: recent_ips.size }= t('admin.accounts.most_recent_ip') + %td= recent_ip.ip + %td= table_link_to 'search', t('admin.accounts.search_same_ip'), admin_accounts_path(ip: recent_ip.ip) +%tr + %th= t('admin.accounts.most_recent_activity') + %td + - if account.user_current_sign_in_at + %time.formatted{ datetime: account.user_current_sign_in_at.iso8601, title: l(account.user_current_sign_in_at) }= l account.user_current_sign_in_at + %td +- if account.user&.invited? + %tr + %th= t('admin.accounts.invited_by') + %td= admin_account_link_to account.user.invite.user.account + %td diff --git a/app/views/admin/accounts/_remote_account.html.haml b/app/views/admin/accounts/_remote_account.html.haml new file mode 100644 index 00000000000000..99996e1d46d657 --- /dev/null +++ b/app/views/admin/accounts/_remote_account.html.haml @@ -0,0 +1,15 @@ +%tr + %th= t('admin.accounts.inbox_url') + %td + = account.inbox_url + = fa_icon DeliveryFailureTracker.available?(account.inbox_url) ? 'check' : 'times' + %td + = table_link_to 'search', domain_block.present? ? t('admin.domain_blocks.view') : t('admin.accounts.view_domain'), admin_instance_path(account.domain) +%tr + %th= t('admin.accounts.shared_inbox_url') + %td + = account.shared_inbox_url + = fa_icon DeliveryFailureTracker.available?(account.shared_inbox_url) ? 'check' : 'times' + %td + - if domain_block.nil? + = table_link_to 'ban', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: account.domain) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 7801ef1913ec15..80b8fc92c23341 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -27,49 +27,7 @@ %div .account__header__content.emojify= prerender_custom_emojis(account_bio_format(account), account.emojis) -.dashboard__counters.admin-account-counters - %div - = link_to admin_account_statuses_path(@account.id) do - .dashboard__counters__num= number_with_delimiter @account.statuses_count - .dashboard__counters__label= t 'admin.accounts.statuses' - %div - = link_to admin_account_statuses_path(@account.id, { media: true }) do - .dashboard__counters__num= number_to_human_size @account.media_attachments.sum('file_file_size') - .dashboard__counters__label= t 'admin.accounts.media_attachments' - %div - = link_to admin_account_relationships_path(@account.id, location: @account.local? ? nil : 'local', relationship: 'followed_by') do - .dashboard__counters__num= number_with_delimiter @account.local_followers_count - .dashboard__counters__label= t 'admin.accounts.followers' - %div - = link_to admin_reports_path(account_id: @account.id) do - .dashboard__counters__num= number_with_delimiter @account.reports.count - .dashboard__counters__label= t '.created_reports' - %div - = link_to admin_reports_path(target_account_id: @account.id) do - .dashboard__counters__num= number_with_delimiter @account.targeted_reports.count - .dashboard__counters__label= t '.targeted_reports' - %div - = link_to admin_action_logs_path(target_account_id: @account.id) do - .dashboard__counters__text - - if @account.local? && @account.user.nil? - = t('admin.accounts.deleted') - - elsif @account.memorial? - = t('admin.accounts.memorialized') - - elsif @account.suspended? - = t('admin.accounts.suspended') - - elsif @account.silenced? - = t('admin.accounts.silenced') - - elsif @account.local? && @account.user&.disabled? - = t('admin.accounts.disabled') - - elsif @account.local? && !@account.user&.confirmed? - = 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' += render 'admin/accounts/counters', account: @account - if @account.local? && @account.user.nil? = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) @@ -78,171 +36,11 @@ %table.table.inline-table %tbody - if @account.local? - - if @account.avatar? - %tr - %th= t('admin.accounts.avatar') - %td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account) - %td - - - if @account.header? - %tr - %th= t('admin.accounts.header') - %td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, @account) - %td - - %tr - %th= t('admin.accounts.role') - %td - - if @account.user_role&.everyone? - = t('admin.accounts.no_role_assigned') - - else - = @account.user_role&.name - %td - = table_link_to 'vcard', t('admin.accounts.change_role.label'), admin_user_role_path(@account.user) if can?(:change_role, @account.user) - - %tr - %th{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= t('admin.accounts.email') - %td{ rowspan: can?(:create, :email_domain_block) ? 3 : 2 }= @account.user_email - %td= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(@account.id) if can?(:change_email, @account.user) - - %tr - %td= table_link_to 'search', t('admin.accounts.search_same_email_domain'), admin_accounts_path(email: "%@#{@account.user_email.split('@').last}") - - - if can?(:create, :email_domain_block) - %tr - %td= table_link_to 'ban', t('admin.accounts.add_email_domain_block'), new_admin_email_domain_block_path(_domain: @account.user_email.split('@').last) - - - if @account.user_unconfirmed_email.present? - %tr - %th= t('admin.accounts.unconfirmed_email') - %td= @account.user_unconfirmed_email - %td - - %tr - %th= t('admin.accounts.email_status') - %td - - if @account.user&.confirmed? - = t('admin.accounts.confirmed') - - else - = t('admin.accounts.confirming') - %td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user) - %tr - %th{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 }= t('admin.accounts.security') - %td{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 } - - if @account.user&.two_factor_enabled? - = t 'admin.accounts.security_measures.password_and_2fa' - - else - = t 'admin.accounts.security_measures.only_password' - %td - - if @account.user&.two_factor_enabled? - = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete if can?(:disable_2fa, @account.user) - - - if can?(:reset_password, @account.user) - %tr - %td - = table_link_to 'key', t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, data: { confirm: t('admin.accounts.are_you_sure') } - - %tr - %th= t('simple_form.labels.defaults.locale') - %td= standard_locale_name(@account.user_locale) - %td - - %tr - %th= t('admin.accounts.joined') - %td - %time.formatted{ datetime: @account.created_at.iso8601, title: l(@account.created_at) }= l @account.created_at - %td - - - recent_ips = @account.user.ips.order(used_at: :desc).to_a - - - recent_ips.each_with_index do |recent_ip, i| - %tr - - if i.zero? - %th{ rowspan: recent_ips.size }= t('admin.accounts.most_recent_ip') - %td= recent_ip.ip - %td= table_link_to 'search', t('admin.accounts.search_same_ip'), admin_accounts_path(ip: recent_ip.ip) - - %tr - %th= t('admin.accounts.most_recent_activity') - %td - - if @account.user_current_sign_in_at - %time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) }= l @account.user_current_sign_in_at - %td - - - if @account.user&.invited? - %tr - %th= t('admin.accounts.invited_by') - %td= admin_account_link_to @account.user.invite.user.account - %td - + = render 'admin/accounts/local_account', account: @account - else - %tr - %th= t('admin.accounts.inbox_url') - %td - = @account.inbox_url - = fa_icon DeliveryFailureTracker.available?(@account.inbox_url) ? 'check' : 'times' - %td - = table_link_to 'search', @domain_block.present? ? t('admin.domain_blocks.view') : t('admin.accounts.view_domain'), admin_instance_path(@account.domain) - %tr - %th= t('admin.accounts.shared_inbox_url') - %td - = @account.shared_inbox_url - = fa_icon DeliveryFailureTracker.available?(@account.shared_inbox_url) ? 'check' : 'times' - %td - - if @domain_block.nil? - = table_link_to 'ban', t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @account.domain) + = render 'admin/accounts/remote_account', account: @account, domain_block: @domain_block - - if @account.suspended? - %hr.spacer/ - - - if @account.suspension_origin_remote? - %p.muted-hint= @deletion_request.present? ? t('admin.accounts.remote_suspension_reversible_hint_html', date: content_tag(:strong, l(@deletion_request.due_at.to_date))) : t('admin.accounts.remote_suspension_irreversible') - - else - %p.muted-hint= @deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(@deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') - - = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsuspend, @account) - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account) && @account.suspension_origin_remote? - - - if @deletion_request.present? - = link_to t('admin.accounts.delete'), admin_account_path(@account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, @account) - - else - .action-buttons - %div - - if @account.local? && @account.user_approved? - = link_to t('admin.accounts.warn'), new_admin_account_action_path(@account.id, type: 'none'), class: 'button' if can?(:warn, @account) - - - if @account.user_disabled? - = link_to t('admin.accounts.enable'), enable_admin_account_path(@account.id), method: :post, class: 'button' if can?(:enable, @account.user) - - 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? - = link_to t('admin.accounts.silence'), new_admin_account_action_path(@account.id, type: 'silence'), class: 'button' if can?(:silence, @account) - - - if @account.local? - - if @account.user_pending? - = link_to t('admin.accounts.approve'), approve_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, @account.user) - = link_to t('admin.accounts.reject'), reject_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, @account.user) - - - unless @account.user_confirmed? - = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button' if can?(:confirm, @account.user) - - - if !@account.local? || @account.user_approved? - = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(@account.id, type: 'suspend'), class: 'button' if can?(:suspend, @account) - - %div - - if @account.local? - - if !@account.memorial? && @account.user_approved? - = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, @account) - - else - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account) + = render 'admin/accounts/buttons', account: @account, deletion_request: @deletion_request %hr.spacer/ diff --git a/app/views/admin/custom_emojis/_custom_emoji.html.haml b/app/views/admin/custom_emojis/_custom_emoji.html.haml index 0890abcf910dcb..c6969a6d937bad 100644 --- a/app/views/admin/custom_emojis/_custom_emoji.html.haml +++ b/app/views/admin/custom_emojis/_custom_emoji.html.haml @@ -7,11 +7,16 @@ .batch-table__row__content__text %samp= ":#{custom_emoji.shortcode}:" + = link_to safe_join([fa_icon('pencil'), t('admin.custom_emojis.edit.label')]), edit_admin_custom_emoji_path(custom_emoji, local: params[:local], remote: params[:remote], shortcode: params[:shortcode], by_domain: params[:by_domain]), method: :get, class: 'table-action-link' - if custom_emoji.local? %span.information-badge= custom_emoji.category&.name || t('admin.custom_emojis.uncategorized') + - if custom_emoji.aliases_raw.present? %br/ - %span= custom_emoji.aliases_raw + %span.neutral-hint= custom_emoji.aliases_raw + - if custom_emoji.license.present? + %br/ + %span= custom_emoji.license .batch-table__row__content__extra - if custom_emoji.local? diff --git a/app/views/admin/custom_emojis/edit.html.haml b/app/views/admin/custom_emojis/edit.html.haml new file mode 100644 index 00000000000000..cde13d12e54243 --- /dev/null +++ b/app/views/admin/custom_emojis/edit.html.haml @@ -0,0 +1,42 @@ +- content_for :page_title do + = t('.title') + += simple_form_for @custom_emoji, url: admin_custom_emoji_path(@custom_emoji.id), method: :put do |f| + = render 'shared/error_messages', object: @custom_emoji + - CustomEmojiFilter::KEYS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + .fields-group + = custom_emoji_tag(@custom_emoji) + + %h4= t('admin.custom_emojis.shortcode') + + .fields-group + %samp= @custom_emoji.shortcode + + - if !@custom_emoji.local? + %h4= t('admin.custom_emojis.domain') + + .fields-group + %samp= @custom_emoji.domain + + - if @custom_emoji.local? + %h4= t('admin.custom_emojis.edit.label') + + .fields-group + = f.input :visible_in_picker, as: :boolean, wrapper: :with_label, label: t('admin.custom_emojis.visible_in_picker') + + .fields-group + = f.input :aliases_raw, wrapper: :with_label, kmyblue: true, label: t('admin.custom_emojis.aliases'), hint: t('admin.custom_emojis.aliases_hint') + + .fields-group + = f.input :license, wrapper: :with_label, kmyblue: true, label: t('admin.custom_emojis.license'), hint: t('admin.custom_emojis.license_hint') + + .actions + = f.button :button, t('generic.save_changes'), type: :submit + + - elsif @custom_emoji.license.present? + %h4= t('admin.custom_emojis.license') + + .fields-group + %p= @custom_emoji.license diff --git a/app/views/admin/custom_emojis/index.html.haml b/app/views/admin/custom_emojis/index.html.haml index d103ab444548a4..8b4e93ac3594ff 100644 --- a/app/views/admin/custom_emojis/index.html.haml +++ b/app/views/admin/custom_emojis/index.html.haml @@ -75,12 +75,6 @@ .label_input = f.text_field :category_name, class: 'string optional', placeholder: t('admin.custom_emojis.create_new_category'), 'aria-label': t('admin.custom_emojis.create_new_category') - .fields-row - .fields-group.fields-row__column - .input.string.optional - .label_input - = f.text_field :aliases_raw, class: 'string optional', placeholder: 'Alias names', 'aria-label': 'Alias names' - .batch-table__body - if @custom_emojis.empty? = nothing_here 'nothing-here--under-tabs' diff --git a/app/views/admin/custom_emojis/new.html.haml b/app/views/admin/custom_emojis/new.html.haml index 95996dec86164d..e1261e7f50080c 100644 --- a/app/views/admin/custom_emojis/new.html.haml +++ b/app/views/admin/custom_emojis/new.html.haml @@ -6,8 +6,18 @@ .fields-group = f.input :shortcode, wrapper: :with_label, label: t('admin.custom_emojis.shortcode'), hint: t('admin.custom_emojis.shortcode_hint') + .fields-group = f.input :image, wrapper: :with_label, input_html: { accept: CustomEmoji::IMAGE_MIME_TYPES.join(' ') }, hint: t('admin.custom_emojis.image_hint', size: number_to_human_size(CustomEmoji::LIMIT)) + .fields-group + = f.input :visible_in_picker, as: :boolean, wrapper: :with_label, label: t('admin.custom_emojis.visible_in_picker') + + .fields-group + = f.input :aliases_raw, wrapper: :with_label, kmyblue: true, label: t('admin.custom_emojis.aliases'), hint: t('admin.custom_emojis.aliases_hint') + + .fields-group + = f.input :license, wrapper: :with_label, kmyblue: true, label: t('admin.custom_emojis.license'), hint: t('admin.custom_emojis.license_hint') + .actions = f.button :button, t('admin.custom_emojis.upload'), type: :submit diff --git a/app/views/admin/domain_blocks/_domain_block_list.html.haml b/app/views/admin/domain_blocks/_domain_block_list.html.haml new file mode 100644 index 00000000000000..d16c639dd01656 --- /dev/null +++ b/app/views/admin/domain_blocks/_domain_block_list.html.haml @@ -0,0 +1,44 @@ +%h4= I18n.t('admin.domain_blocks.headers.harassment') + +.fields-group + = f.input :reject_favourite, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_favourite'), hint: I18n.t('admin.domain_blocks.reject_favourite_hint') + +.fields-group + = f.input :reject_reply, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply'), hint: I18n.t('admin.domain_blocks.reject_reply_hint') + +.fields-group + = f.input :reject_reply_exclude_followers, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply_exclude_followers'), hint: I18n.t('admin.domain_blocks.reject_reply_exclude_followers_hint') + +.fields-group + = f.input :reject_hashtag, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_hashtag'), hint: I18n.t('admin.domain_blocks.reject_hashtag_hint') + +.fields-group + = f.input :reject_straight_follow, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_straight_follow'), hint: I18n.t('admin.domain_blocks.reject_straight_follow_hint') + +.fields-group + = f.input :reject_new_follow, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_new_follow'), hint: I18n.t('admin.domain_blocks.reject_new_follow_hint') + +.fields-group + = f.input :reject_friend, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_friend'), hint: I18n.t('admin.domain_blocks.reject_friend_hint') + +%h4= I18n.t('admin.domain_blocks.headers.invalid_privacy') + +.fields-group + = f.input :reject_send_not_public_searchability, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_not_public_searchability'), hint: I18n.t('admin.domain_blocks.reject_send_not_public_searchability_hint') + +.fields-group + = f.input :reject_send_dissubscribable, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_dissubscribable'), hint: I18n.t('admin.domain_blocks.reject_send_dissubscribable_hint') + +.fields-group + = f.input :detect_invalid_subscription, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.detect_invalid_subscription'), hint: I18n.t('admin.domain_blocks.detect_invalid_subscription_hint') + +%h4= I18n.t('admin.domain_blocks.headers.disagreement') + +.fields-group + = f.input :reject_send_public_unlisted, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_public_unlisted'), hint: I18n.t('admin.domain_blocks.reject_send_public_unlisted_hint') + +.fields-group + = f.input :reject_send_media, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_media'), hint: I18n.t('admin.domain_blocks.reject_send_media_hint') + +.fields-group + = f.input :reject_send_sensitive, as: :boolean, kmyblue: true, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_sensitive'), hint: I18n.t('admin.domain_blocks.reject_send_sensitive_hint') diff --git a/app/views/admin/domain_blocks/edit.html.haml b/app/views/admin/domain_blocks/edit.html.haml index cf83d383e9fcee..7454d81539e525 100644 --- a/app/views/admin/domain_blocks/edit.html.haml +++ b/app/views/admin/domain_blocks/edit.html.haml @@ -11,47 +11,12 @@ .fields-row__column.fields-row__column-6.fields-group = f.input :severity, collection: DomainBlock.severities.keys, wrapper: :with_label, include_blank: false, label_method: ->(type) { t("admin.domain_blocks.new.severity.#{type}") }, hint: t('admin.domain_blocks.new.severity.desc_html') - .fields-group - = f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint') - - .fields-group - = f.input :reject_favourite, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_favourite'), hint: I18n.t('admin.domain_blocks.reject_favourite_hint') - - .fields-group - = f.input :reject_reply, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply'), hint: I18n.t('admin.domain_blocks.reject_reply_hint') - - .fields-group - = f.input :reject_reply_exclude_followers, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply_exclude_followers'), hint: I18n.t('admin.domain_blocks.reject_reply_exclude_followers_hint') - - .fields-group - = f.input :reject_send_not_public_searchability, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_not_public_searchability'), hint: I18n.t('admin.domain_blocks.reject_send_not_public_searchability_hint') - - .fields-group - = f.input :reject_send_dissubscribable, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_dissubscribable'), hint: I18n.t('admin.domain_blocks.reject_send_dissubscribable_hint') - - .fields-group - = f.input :reject_send_public_unlisted, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_public_unlisted'), hint: I18n.t('admin.domain_blocks.reject_send_public_unlisted_hint') - - .fields-group - = f.input :reject_send_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_media'), hint: I18n.t('admin.domain_blocks.reject_send_media_hint') + = render 'domain_block_list', f: f - .fields-group - = f.input :reject_send_sensitive, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_sensitive'), hint: I18n.t('admin.domain_blocks.reject_send_sensitive_hint') + %h4= I18n.t('admin.domain_blocks.headers.mastodon_default') .fields-group - = f.input :reject_hashtag, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_hashtag'), hint: I18n.t('admin.domain_blocks.reject_hashtag_hint') - - .fields-group - = f.input :reject_straight_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_straight_follow'), hint: I18n.t('admin.domain_blocks.reject_straight_follow_hint') - - .fields-group - = f.input :reject_new_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_new_follow'), hint: I18n.t('admin.domain_blocks.reject_new_follow_hint') - - .fields-group - = f.input :reject_friend, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_friend'), hint: I18n.t('admin.domain_blocks.reject_friend_hint') - - .fields-group - = f.input :detect_invalid_subscription, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.detect_invalid_subscription'), hint: I18n.t('admin.domain_blocks.detect_invalid_subscription_hint') + = f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint') .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') @@ -69,7 +34,7 @@ = f.input :hidden, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden'), hint: I18n.t('admin.domain_blocks.hidden_hint') .fields-group - = f.input :hidden_anonymous, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden_anonymous'), hint: I18n.t('admin.domain_blocks.hidden_anonymous_hint') + = f.input :hidden_anonymous, kmyblue: true, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden_anonymous'), hint: I18n.t('admin.domain_blocks.hidden_anonymous_hint') .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml index ed5142934fd675..ad25fcebbd3411 100644 --- a/app/views/admin/domain_blocks/new.html.haml +++ b/app/views/admin/domain_blocks/new.html.haml @@ -11,47 +11,12 @@ .fields-row__column.fields-row__column-6.fields-group = f.input :severity, collection: DomainBlock.severities.keys, wrapper: :with_label, include_blank: false, label_method: ->(type) { t(".severity.#{type}") }, hint: t('.severity.desc_html') - .fields-group - = f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint') - - .fields-group - = f.input :reject_favourite, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_favourite'), hint: I18n.t('admin.domain_blocks.reject_favourite_hint') - - .fields-group - = f.input :reject_reply, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply'), hint: I18n.t('admin.domain_blocks.reject_reply_hint') - - .fields-group - = f.input :reject_reply_exclude_followers, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reply_exclude_followers'), hint: I18n.t('admin.domain_blocks.reject_reply_exclude_followers_hint') - - .fields-group - = f.input :reject_send_not_public_searchability, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_not_public_searchability'), hint: I18n.t('admin.domain_blocks.reject_send_not_public_searchability_hint') - - .fields-group - = f.input :reject_send_dissubscribable, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_dissubscribable'), hint: I18n.t('admin.domain_blocks.reject_send_dissubscribable_hint') - - .fields-group - = f.input :reject_send_public_unlisted, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_public_unlisted'), hint: I18n.t('admin.domain_blocks.reject_send_public_unlisted_hint') - - .fields-group - = f.input :reject_send_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_media'), hint: I18n.t('admin.domain_blocks.reject_send_media_hint') + = render 'domain_block_list', f: f - .fields-group - = f.input :reject_send_sensitive, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_send_sensitive'), hint: I18n.t('admin.domain_blocks.reject_send_sensitive_hint') + %h4= I18n.t('admin.domain_blocks.headers.mastodon_default') .fields-group - = f.input :reject_hashtag, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_hashtag'), hint: I18n.t('admin.domain_blocks.reject_hashtag_hint') - - .fields-group - = f.input :reject_straight_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_straight_follow'), hint: I18n.t('admin.domain_blocks.reject_straight_follow_hint') - - .fields-group - = f.input :reject_new_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_new_follow'), hint: I18n.t('admin.domain_blocks.reject_new_follow_hint') - - .fields-group - = f.input :reject_friend, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_friend'), hint: I18n.t('admin.domain_blocks.reject_friend_hint') - - .fields-group - = f.input :detect_invalid_subscription, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.detect_invalid_subscription'), hint: I18n.t('admin.domain_blocks.detect_invalid_subscription_hint') + = f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint') .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') @@ -69,7 +34,7 @@ = f.input :hidden, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden'), hint: I18n.t('admin.domain_blocks.hidden_hint') .fields-group - = f.input :hidden_anonymous, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden_anonymous'), hint: I18n.t('admin.domain_blocks.hidden_anonymous_hint') + = f.input :hidden_anonymous, kmyblue: true, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.hidden_anonymous'), hint: I18n.t('admin.domain_blocks.hidden_anonymous_hint') .actions = f.button :button, t('.create'), type: :submit diff --git a/app/views/admin/ng_words/show.html.haml b/app/views/admin/ng_words/show.html.haml index 9fad862787b714..2a81eec057b1e5 100644 --- a/app/views/admin/ng_words/show.html.haml +++ b/app/views/admin/ng_words/show.html.haml @@ -7,6 +7,12 @@ = simple_form_for @admin_settings, url: admin_ng_words_path, html: { method: :post } do |f| = render 'shared/error_messages', object: @admin_settings + .fields-group + = f.input :ng_words_for_stranger_mention, wrapper: :with_label, as: :text, input_html: { rows: 12 }, label: t('admin.ng_words.keywords_for_stranger_mention'), hint: t('admin.ng_words.keywords_for_stranger_mention_hint') + + .fields-group + = f.input :stranger_mention_from_local_ng, wrapper: :with_label, as: :boolean, label: t('admin.ng_words.stranger_mention_from_local_ng'), hint: t('admin.ng_words.stranger_mention_from_local_ng_hint') + .fields-group = f.input :ng_words, wrapper: :with_label, as: :text, input_html: { rows: 12 }, label: t('admin.ng_words.keywords'), hint: t('admin.ng_words.keywords_hint') diff --git a/app/views/admin/reports/_actions.html.haml b/app/views/admin/reports/_actions.html.haml index 0fe558dafe9f74..daa554566efdb0 100644 --- a/app/views/admin/reports/_actions.html.haml +++ b/app/views/admin/reports/_actions.html.haml @@ -1,11 +1,11 @@ -= form_tag preview_admin_report_actions_path(@report), method: :post do += form_tag preview_admin_report_actions_path(report), method: :post do .report-actions .report-actions__item .report-actions__item__button - = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button' + = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), method: :post, class: 'button' .report-actions__item__description = t('admin.reports.actions.resolve_description_html') - - if @statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? } + - if statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? } .report-actions__item .report-actions__item__button = button_tag t('admin.reports.mark_as_sensitive'), name: :mark_as_sensitive, class: 'button' @@ -33,6 +33,6 @@ = t('admin.reports.actions.suspend_description_html') .report-actions__item .report-actions__item__button - = link_to t('admin.accounts.custom'), new_admin_account_action_path(@report.target_account_id, report_id: @report.id), class: 'button' + = link_to t('admin.accounts.custom'), new_admin_account_action_path(report.target_account_id, report_id: report.id), class: 'button' .report-actions__item__description = t('admin.reports.actions.other_description_html') diff --git a/app/views/admin/reports/_comment.html.haml b/app/views/admin/reports/_comment.html.haml new file mode 100644 index 00000000000000..8c07210af971b9 --- /dev/null +++ b/app/views/admin/reports/_comment.html.haml @@ -0,0 +1,24 @@ +- if report.account.instance_actor? + %p= t('admin.reports.comment_description_html', name: content_tag(:strong, site_hostname, class: 'username')) +- elsif report.account.local? + %p= t('admin.reports.comment_description_html', name: content_tag(:strong, report.account.username, class: 'username')) +- else + %p= t('admin.reports.comment_description_html', name: t('admin.reports.remote_user_placeholder', instance: report.account.domain)) +.report-notes + .report-notes__item + - if report.account.local? && !report.account.instance_actor? + = image_tag report.account.avatar.url, class: 'report-notes__item__avatar' + - else + = image_tag(full_asset_url('avatars/original/missing.png', skip_pipeline: true), class: 'report-notes__item__avatar') + .report-notes__item__header + %span.username + - if report.account.instance_actor? + = site_hostname + - elsif report.account.local? + = link_to report.account.username, admin_account_path(report.account_id) + - else + = link_to report.account.domain, admin_instance_path(report.account.domain) + %time.relative-formatted{ datetime: report.created_at.iso8601 } + = l report.created_at.to_date + .report-notes__item__content + = simple_format(h(report.comment)) diff --git a/app/views/admin/reports/_header_card.html.haml b/app/views/admin/reports/_header_card.html.haml new file mode 100644 index 00000000000000..6fd8b4ecc8be98 --- /dev/null +++ b/app/views/admin/reports/_header_card.html.haml @@ -0,0 +1,46 @@ +.report-header__card + .account-card + .account-card__header + = image_tag report.target_account.header.url, alt: '' + .account-card__title + .account-card__title__avatar + = image_tag report.target_account.avatar.url, alt: '' + .display-name + %bdi + %strong.emojify.p-name= display_name(report.target_account, custom_emojify: true) + %span + = acct(report.target_account) + = fa_icon('lock') if report.target_account.locked? + - if report.target_account.note.present? + .account-card__bio.emojify + = prerender_custom_emojis(account_bio_format(report.target_account), report.target_account.emojis) + .account-card__actions + .account-card__counters + .account-card__counters__item + = friendly_number_to_human report.target_account.statuses_count + %small= t('accounts.posts', count: report.target_account.statuses_count).downcase + .account-card__counters__item + = friendly_number_to_human report.target_account.followers_count + %small= t('accounts.followers', count: report.target_account.followers_count).downcase + .account-card__counters__item + = friendly_number_to_human report.target_account.following_count + %small= t('accounts.following', count: report.target_account.following_count).downcase + .account-card__actions__button + = link_to t('admin.reports.view_profile'), admin_account_path(report.target_account_id), class: 'button' + .report-header__details.report-header__details--horizontal + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.accounts.joined') + .report-header__details__item__content + %time.time-ago{ datetime: report.target_account.created_at.iso8601, title: l(report.target_account.created_at) }= l report.target_account.created_at + .report-header__details__item + .report-header__details__item__header + %strong= t('accounts.last_active') + .report-header__details__item__content + - if report.target_account.last_status_at.present? + %time.time-ago{ datetime: report.target_account.last_status_at.to_date.iso8601, title: l(report.target_account.last_status_at.to_date) }= l report.target_account.last_status_at + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.accounts.strikes') + .report-header__details__item__content + = report.target_account.previous_strikes_count diff --git a/app/views/admin/reports/_header_details.html.haml b/app/views/admin/reports/_header_details.html.haml new file mode 100644 index 00000000000000..5878cd2ff8a529 --- /dev/null +++ b/app/views/admin/reports/_header_details.html.haml @@ -0,0 +1,53 @@ +.report-header__details + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.created_at') + .report-header__details__item__content + %time.formatted{ datetime: report.created_at.iso8601 } + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.reported_by') + .report-header__details__item__content + - if report.account.instance_actor? + = site_hostname + - elsif report.account.local? + = admin_account_link_to report.account + - else + = report.account.domain + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.status') + .report-header__details__item__content + - if report.action_taken? + = t('admin.reports.resolved') + - else + = t('admin.reports.unresolved') + - unless report.target_account.local? + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.forwarded') + .report-header__details__item__content + - if report.forwarded? + = t('simple_form.yes') + - else + = t('simple_form.no') + - if report.action_taken_by_account.present? + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.action_taken_by') + .report-header__details__item__content + = admin_account_link_to report.action_taken_by_account + - else + .report-header__details__item + .report-header__details__item__header + %strong= t('admin.reports.assigned') + .report-header__details__item__content + - if report.assigned_account.nil? + = t 'admin.reports.no_one_assigned' + - else + = admin_account_link_to report.assigned_account + — + - if report.assigned_account != current_user.account + = table_link_to 'user', t('admin.reports.assign_to_self'), assign_to_self_admin_report_path(report), method: :post + - elsif !report.assigned_account.nil? + = table_link_to 'trash', t('admin.reports.unassign'), unassign_admin_report_path(report), method: :post diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 2508bc2b5b5673..13a4d48344d068 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -8,106 +8,8 @@ = link_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), method: :post, class: 'button' .report-header - .report-header__card - .account-card - .account-card__header - = image_tag @report.target_account.header.url, alt: '' - .account-card__title - .account-card__title__avatar - = image_tag @report.target_account.avatar.url, alt: '' - .display-name - %bdi - %strong.emojify.p-name= display_name(@report.target_account, custom_emojify: true) - %span - = acct(@report.target_account) - = fa_icon('lock') if @report.target_account.locked? - - if @report.target_account.note.present? - .account-card__bio.emojify - = prerender_custom_emojis(account_bio_format(@report.target_account), @report.target_account.emojis) - .account-card__actions - .account-card__counters - .account-card__counters__item - = friendly_number_to_human @report.target_account.statuses_count - %small= t('accounts.posts', count: @report.target_account.statuses_count).downcase - .account-card__counters__item - = friendly_number_to_human @report.target_account.followers_count - %small= t('accounts.followers', count: @report.target_account.followers_count).downcase - .account-card__counters__item - = friendly_number_to_human @report.target_account.following_count - %small= t('accounts.following', count: @report.target_account.following_count).downcase - .account-card__actions__button - = link_to t('admin.reports.view_profile'), admin_account_path(@report.target_account_id), class: 'button' - .report-header__details.report-header__details--horizontal - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.accounts.joined') - .report-header__details__item__content - %time.time-ago{ datetime: @report.target_account.created_at.iso8601, title: l(@report.target_account.created_at) }= l @report.target_account.created_at - .report-header__details__item - .report-header__details__item__header - %strong= t('accounts.last_active') - .report-header__details__item__content - - if @report.target_account.last_status_at.present? - %time.time-ago{ datetime: @report.target_account.last_status_at.to_date.iso8601, title: l(@report.target_account.last_status_at.to_date) }= l @report.target_account.last_status_at - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.accounts.strikes') - .report-header__details__item__content - = @report.target_account.previous_strikes_count - - .report-header__details - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.created_at') - .report-header__details__item__content - %time.formatted{ datetime: @report.created_at.iso8601 } - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.reported_by') - .report-header__details__item__content - - if @report.account.instance_actor? - = site_hostname - - elsif @report.account.local? - = admin_account_link_to @report.account - - else - = @report.account.domain - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.status') - .report-header__details__item__content - - if @report.action_taken? - = t('admin.reports.resolved') - - else - = t('admin.reports.unresolved') - - unless @report.target_account.local? - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.forwarded') - .report-header__details__item__content - - if @report.forwarded? - = t('simple_form.yes') - - else - = t('simple_form.no') - - if @report.action_taken_by_account.present? - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.action_taken_by') - .report-header__details__item__content - = admin_account_link_to @report.action_taken_by_account - - else - .report-header__details__item - .report-header__details__item__header - %strong= t('admin.reports.assigned') - .report-header__details__item__content - - if @report.assigned_account.nil? - = t 'admin.reports.no_one_assigned' - - else - = admin_account_link_to @report.assigned_account - — - - if @report.assigned_account != current_user.account - = table_link_to 'user', t('admin.reports.assign_to_self'), assign_to_self_admin_report_path(@report), method: :post - - elsif !@report.assigned_account.nil? - = table_link_to 'trash', t('admin.reports.unassign'), unassign_admin_report_path(@report), method: :post + = render 'admin/reports/header_card', report: @report + = render 'admin/reports/header_details', report: @report %hr.spacer @@ -118,33 +20,7 @@ = react_admin_component :report_reason_selector, id: @report.id, category: @report.category, rule_ids: @report.rule_ids&.map(&:to_s), disabled: @report.action_taken? - if @report.comment.present? - - if @report.account.instance_actor? - %p= t('admin.reports.comment_description_html', name: content_tag(:strong, site_hostname, class: 'username')) - - elsif @report.account.local? - %p= t('admin.reports.comment_description_html', name: content_tag(:strong, @report.account.username, class: 'username')) - - else - %p= t('admin.reports.comment_description_html', name: t('admin.reports.remote_user_placeholder', instance: @report.account.domain)) - - .report-notes - .report-notes__item - - if @report.account.local? && !@report.account.instance_actor? - = image_tag @report.account.avatar.url, class: 'report-notes__item__avatar' - - else - = image_tag(full_asset_url('avatars/original/missing.png', skip_pipeline: true), class: 'report-notes__item__avatar') - - .report-notes__item__header - %span.username - - if @report.account.instance_actor? - = site_hostname - - elsif @report.account.local? - = link_to @report.account.username, admin_account_path(@report.account_id) - - else - = link_to @report.account.domain, admin_instance_path(@report.account.domain) - %time.relative-formatted{ datetime: @report.created_at.iso8601 } - = l @report.created_at.to_date - - .report-notes__item__content - = simple_format(h(@report.comment)) + = render 'admin/reports/comment', report: @report %hr.spacer/ @@ -179,7 +55,7 @@ %p#actions= t(@report.target_account.local? ? 'admin.reports.actions_description_html' : 'admin.reports.actions_description_remote_html') - = render partial: 'admin/reports/actions' + = render partial: 'admin/reports/actions', locals: { report: @report, statuses: @statuses } - unless @action_logs.empty? %hr.spacer/ diff --git a/app/views/auth/registrations/_status.html.haml b/app/views/auth/registrations/_status.html.haml index 759bbc41c0dbdd..8f44eee015ccef 100644 --- a/app/views/auth/registrations/_status.html.haml +++ b/app/views/auth/registrations/_status.html.haml @@ -1,30 +1,30 @@ -- if !@user.confirmed? +- if !user.confirmed? .flash-message.warning = t('auth.status.confirming') = link_to t('auth.didnt_get_confirmation'), new_user_confirmation_path -- elsif !@user.approved? +- elsif !user.approved? .flash-message.warning = t('auth.status.pending') -- elsif @user.account.moved_to_account_id.present? +- elsif user.account.moved_to_account_id.present? .flash-message.warning - = t('auth.status.redirecting_to', acct: @user.account.moved_to_account.pretty_acct) + = t('auth.status.redirecting_to', acct: user.account.moved_to_account.pretty_acct) = link_to t('migrations.cancel'), settings_migration_path %h3= t('auth.status.account_status') %p.hint - - if @user.account.suspended? + - if user.account.suspended? %span.negative-hint= t('user_mailer.warning.explanation.suspend') - - elsif @user.disabled? + - elsif user.disabled? %span.negative-hint= t('user_mailer.warning.explanation.disable') - - elsif @user.account.silenced? + - elsif user.account.silenced? %span.warning-hint= t('user_mailer.warning.explanation.silence') - else %span.positive-hint= t('auth.status.functional') -= render partial: 'account_warning', collection: @strikes += render partial: 'account_warning', collection: strikes -- if @user.account.strikes.exists? +- if user.account.strikes.exists? %hr.spacer/ %p.muted-hint diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml index 3e9b0cb6bda1d9..908119a21ad502 100644 --- a/app/views/auth/registrations/edit.html.haml +++ b/app/views/auth/registrations/edit.html.haml @@ -1,7 +1,7 @@ - content_for :page_title do = t('settings.account_settings') -= render 'status' += render partial: 'status', locals: { user: @user, strikes: @strikes } %h3= t('auth.security') diff --git a/app/views/auth/sessions/two_factor.html.haml b/app/views/auth/sessions/two_factor.html.haml index 20232d8dc28b51..653f15580182d1 100644 --- a/app/views/auth/sessions/two_factor.html.haml +++ b/app/views/auth/sessions/two_factor.html.haml @@ -3,7 +3,7 @@ = javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous' -- if @webauthn_enabled +- if webauthn_enabled? = render partial: 'auth/sessions/two_factor/webauthn_form', locals: { hidden: @scheme_type != 'webauthn' } = render partial: 'auth/sessions/two_factor/otp_authentication_form', locals: { hidden: @scheme_type != 'totp' } diff --git a/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml b/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml index 094b502b177a58..8cc2c8561032ff 100644 --- a/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml +++ b/app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml @@ -13,6 +13,6 @@ - if Setting.site_contact_email.present? %p.hint.subtle-hint= t('users.otp_lost_help_html', email: mail_to(Setting.site_contact_email, nil)) - - if @webauthn_enabled + - if webauthn_enabled? .form-footer = link_to(t('auth.link_to_webauth'), '#', id: 'link-to-webauthn') diff --git a/app/views/disputes/strikes/_card.html.haml b/app/views/disputes/strikes/_card.html.haml new file mode 100644 index 00000000000000..55551cc7d0482b --- /dev/null +++ b/app/views/disputes/strikes/_card.html.haml @@ -0,0 +1,38 @@ +.strike-card + - unless strike.none_action? + %p= t "user_mailer.warning.explanation.#{strike.action}", instance: Rails.configuration.x.local_domain + - if strike.text.present? + = linkify(strike.text) + - if strike.report && !strike.report.other? + %p + %strong= t('user_mailer.warning.reason') + = t("user_mailer.warning.categories.#{strike.report.category}") + - if strike.report.violation? && strike.report.rule_ids.present? + %ul.strike-card__rules + - strike.report.rules.each do |rule| + %li + %span.strike-card__rules__text= rule.text + - if strike.status_ids.present? && !strike.status_ids.empty? + %p + %strong= t('user_mailer.warning.statuses') + .strike-card__statuses-list + - status_map = strike.statuses.includes(:application, :media_attachments).index_by(&:id) + - strike.status_ids.each do |status_id| + .strike-card__statuses-list__item + - if (status = status_map[status_id.to_i]) + .one-liner + .emojify= one_line_preview(status) + - status.ordered_media_attachments.each do |media_attachment| + %abbr{ title: media_attachment.description } + = fa_icon 'link' + = media_attachment.file_file_name + .strike-card__statuses-list__item__meta + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do + %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) + - unless status.application.nil? + · + = status.application.name + - else + .one-liner= t('disputes.strikes.status', id: status_id) + .strike-card__statuses-list__item__meta + = t('disputes.strikes.status_removed') diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index de883bd873add3..1c16e0bbf52f93 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -21,51 +21,7 @@ .report-header .report-header__card - .strike-card - - unless @strike.none_action? - %p= t "user_mailer.warning.explanation.#{@strike.action}", instance: Rails.configuration.x.local_domain - - - if @strike.text.present? - = linkify(@strike.text) - - - if @strike.report && !@strike.report.other? - %p - %strong= t('user_mailer.warning.reason') - = t("user_mailer.warning.categories.#{@strike.report.category}") - - - if @strike.report.violation? && @strike.report.rule_ids.present? - %ul.strike-card__rules - - @strike.report.rules.each do |rule| - %li - %span.strike-card__rules__text= rule.text - - - if @strike.status_ids.present? && !@strike.status_ids.empty? - %p - %strong= t('user_mailer.warning.statuses') - - .strike-card__statuses-list - - status_map = @strike.statuses.includes(:application, :media_attachments).index_by(&:id) - - - @strike.status_ids.each do |status_id| - .strike-card__statuses-list__item - - if (status = status_map[status_id.to_i]) - .one-liner - .emojify= one_line_preview(status) - - - status.ordered_media_attachments.each do |media_attachment| - %abbr{ title: media_attachment.description } - = fa_icon 'link' - = media_attachment.file_file_name - .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do - %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - - unless status.application.nil? - · - = status.application.name - - else - .one-liner= t('disputes.strikes.status', id: status_id) - .strike-card__statuses-list__item__meta - = t('disputes.strikes.status_removed') + = render 'card', strike: @strike .report-header__details .report-header__details__item diff --git a/app/views/relationships/_account.html.haml b/app/views/relationships/_account.html.haml index 0fa3cffb552fcc..43a3d64bc859fc 100644 --- a/app/views/relationships/_account.html.haml +++ b/app/views/relationships/_account.html.haml @@ -6,7 +6,7 @@ %tbody %tr %td.accounts-table__interrelationships - = interrelationships_icon(@relationships, account.id) + = interrelationships_icon(relationships, account.id) %td= account_link_to account %td.accounts-table__count.optional = friendly_number_to_human account.statuses_count diff --git a/app/views/relationships/show.html.haml b/app/views/relationships/show.html.haml index f08e9c1df8efd5..97ba49eb5221c7 100644 --- a/app/views/relationships/show.html.haml +++ b/app/views/relationships/show.html.haml @@ -53,6 +53,6 @@ - if @accounts.empty? = nothing_here 'nothing-here--under-tabs' - else - = render partial: 'account', collection: @accounts, locals: { f: f } + = render partial: 'account', collection: @accounts, locals: { f: f, relationships: @relationships } = paginate @accounts diff --git a/app/workers/activitypub/status_update_distribution_worker.rb b/app/workers/activitypub/status_update_distribution_worker.rb index a79ede2bf61104..49ac509761ab66 100644 --- a/app/workers/activitypub/status_update_distribution_worker.rb +++ b/app/workers/activitypub/status_update_distribution_worker.rb @@ -15,15 +15,27 @@ def perform(status_id, options = {}) protected - def activity + def build_activity(for_misskey: false, for_friend: false) ActivityPub::ActivityPresenter.new( id: [ActivityPub::TagManager.instance.uri_for(@status), '#updates/', @status.edited_at.to_i].join, type: 'Update', actor: ActivityPub::TagManager.instance.uri_for(@status.account), published: @status.edited_at, - to: ActivityPub::TagManager.instance.to(@status), - cc: ActivityPub::TagManager.instance.cc(@status), + to: for_friend ? ActivityPub::TagManager.instance.to_for_friend(@status) : ActivityPub::TagManager.instance.to(@status), + cc: for_misskey ? ActivityPub::TagManager.instance.cc_for_misskey(@status) : ActivityPub::TagManager.instance.cc(@status), virtual_object: @status ) end + + def activity + build_activity + end + + def activity_for_misskey + build_activity(for_misskey: true) + end + + def activity_for_friend + build_activity(for_friend: true) + end end diff --git a/config/brakeman.ignore b/config/brakeman.ignore index a12fb26caf692e..f1ef5ed3b18fe1 100644 --- a/config/brakeman.ignore +++ b/config/brakeman.ignore @@ -33,76 +33,6 @@ ], "note": "" }, - { - "warning_type": "Denial of Service", - "warning_code": 76, - "fingerprint": "7b6abba5699755348e7ee82a4694bfbf574b41c7cce2d0db0f7c11ae3f983c72", - "check_name": "RegexDoS", - "message": "Model attribute used in regular expression", - "file": "lib/mastodon/cli/domains.rb", - "line": 128, - "link": "https://brakemanscanner.org/docs/warning_types/denial_of_service/", - "code": "/\\.?(#{DomainBlock.where(:severity => 1).pluck(:domain).map do\n Regexp.escape(domain)\n end.join(\"|\")})$/", - "render_path": null, - "location": { - "type": "method", - "class": "Mastodon::CLI::Domains", - "method": "crawl" - }, - "user_input": "DomainBlock.where(:severity => 1).pluck(:domain)", - "confidence": "Weak", - "cwe_id": [ - 20, - 185 - ], - "note": "" - }, - { - "warning_type": "Mass Assignment", - "warning_code": 105, - "fingerprint": "874be88fedf4c680926845e9a588d3197765a6ccbfdd76466b44cc00151c612e", - "check_name": "PermitAttributes", - "message": "Potentially dangerous key allowed for mass assignment", - "file": "app/controllers/api/v1/admin/reports_controller.rb", - "line": 88, - "link": "https://brakemanscanner.org/docs/warning_types/mass_assignment/", - "code": "params.permit(:resolved, :account_id, :target_account_id)", - "render_path": null, - "location": { - "type": "method", - "class": "Api::V1::Admin::ReportsController", - "method": "filter_params" - }, - "user_input": ":account_id", - "confidence": "High", - "cwe_id": [ - 915 - ], - "note": "" - }, - { - "warning_type": "Mass Assignment", - "warning_code": 105, - "fingerprint": "ab5035dd1a9f8c3a8d92fb2c37e8fe86fede4f87c91b71aa32e89c9eede602fc", - "check_name": "PermitAttributes", - "message": "Potentially dangerous key allowed for mass assignment", - "file": "app/controllers/api/v1/notifications_controller.rb", - "line": 81, - "link": "https://brakemanscanner.org/docs/warning_types/mass_assignment/", - "code": "params.permit(:account_id, :types => ([]), :exclude_types => ([]))", - "render_path": null, - "location": { - "type": "method", - "class": "Api::V1::NotificationsController", - "method": "browserable_params" - }, - "user_input": ":account_id", - "confidence": "High", - "cwe_id": [ - 915 - ], - "note": "" - }, { "warning_type": "Cross-Site Scripting", "warning_code": 4, diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb index 66008a000924e9..076f38332479e7 100644 --- a/config/initializers/chewy.rb +++ b/config/initializers/chewy.rb @@ -3,9 +3,9 @@ enabled = ENV['ES_ENABLED'] == 'true' host = ENV.fetch('ES_HOST') { 'localhost' } port = ENV.fetch('ES_PORT') { 9200 } -user = ENV.fetch('ES_USER') { nil } -password = ENV.fetch('ES_PASS') { nil } -fallback_prefix = ENV.fetch('REDIS_NAMESPACE') { nil } +user = ENV.fetch('ES_USER', nil).presence +password = ENV.fetch('ES_PASS', nil).presence +fallback_prefix = ENV.fetch('REDIS_NAMESPACE', nil).presence prefix = ENV.fetch('ES_PREFIX') { fallback_prefix } Chewy.settings = { diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index 3d94e38e8ee387..6424477846485c 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -14,6 +14,7 @@ with_options headers: :any, credentials: false do with_options methods: [:get] do resource '/.well-known/*' + resource '/nodeinfo/*' resource '/@:username' resource '/users/:username' end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 7bbaff71f0bd9f..41d0ee25b78642 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -394,7 +394,7 @@ def session_cookie config.check_at_sign = true config.pam_default_suffix = ENV.fetch('PAM_EMAIL_DOMAIN') { ENV['LOCAL_DOMAIN'] } config.pam_default_service = ENV.fetch('PAM_DEFAULT_SERVICE') { 'rpam' } - config.pam_controlled_service = ENV.fetch('PAM_CONTROLLED_SERVICE') { nil } + config.pam_controlled_service = ENV.fetch('PAM_CONTROLLED_SERVICE', nil).presence end if ENV['LDAP_ENABLED'] == 'true' diff --git a/config/locales/activerecord.af.yml b/config/locales/activerecord.af.yml index 79e8203e1004eb..c0810999d847fd 100644 --- a/config/locales/activerecord.af.yml +++ b/config/locales/activerecord.af.yml @@ -1,3 +1,4 @@ +--- af: activerecord: attributes: diff --git a/config/locales/activerecord.an.yml b/config/locales/activerecord.an.yml index 9f3eb81a0a4ef4..79cfb2a4ede4f3 100644 --- a/config/locales/activerecord.an.yml +++ b/config/locales/activerecord.an.yml @@ -1,3 +1,4 @@ +--- an: activerecord: attributes: diff --git a/config/locales/activerecord.ar.yml b/config/locales/activerecord.ar.yml index 3091457c0bcb70..cacbf0714f5e3c 100644 --- a/config/locales/activerecord.ar.yml +++ b/config/locales/activerecord.ar.yml @@ -1,3 +1,4 @@ +--- ar: activerecord: attributes: diff --git a/config/locales/activerecord.ast.yml b/config/locales/activerecord.ast.yml index 56bda69c414951..2d532071a9b420 100644 --- a/config/locales/activerecord.ast.yml +++ b/config/locales/activerecord.ast.yml @@ -1,3 +1,4 @@ +--- ast: activerecord: attributes: diff --git a/config/locales/activerecord.be.yml b/config/locales/activerecord.be.yml index dab7c1c36cb57b..db6b632dc462c6 100644 --- a/config/locales/activerecord.be.yml +++ b/config/locales/activerecord.be.yml @@ -1,3 +1,4 @@ +--- be: activerecord: attributes: diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml index f8f6a0007d7a25..1e19d1effba69f 100644 --- a/config/locales/activerecord.bg.yml +++ b/config/locales/activerecord.bg.yml @@ -1,3 +1,4 @@ +--- bg: activerecord: attributes: diff --git a/config/locales/activerecord.bn.yml b/config/locales/activerecord.bn.yml index 5e8f16f1c1b6fb..aded2aa7aef367 100644 --- a/config/locales/activerecord.bn.yml +++ b/config/locales/activerecord.bn.yml @@ -1,3 +1,4 @@ +--- bn: activerecord: attributes: diff --git a/config/locales/activerecord.br.yml b/config/locales/activerecord.br.yml index 03a439014eab3c..dc35f326ff0bd5 100644 --- a/config/locales/activerecord.br.yml +++ b/config/locales/activerecord.br.yml @@ -1,3 +1,4 @@ +--- br: activerecord: attributes: diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml index a3992b6cf657e8..021cc38b4ff1bc 100644 --- a/config/locales/activerecord.ca.yml +++ b/config/locales/activerecord.ca.yml @@ -1,3 +1,4 @@ +--- ca: activerecord: attributes: diff --git a/config/locales/activerecord.ckb.yml b/config/locales/activerecord.ckb.yml index c57e0d0f626e8a..8bdad2173dc6cb 100644 --- a/config/locales/activerecord.ckb.yml +++ b/config/locales/activerecord.ckb.yml @@ -1,3 +1,4 @@ +--- ckb: activerecord: attributes: diff --git a/config/locales/activerecord.co.yml b/config/locales/activerecord.co.yml index dc6830b5104d27..6bd3d4976e7dca 100644 --- a/config/locales/activerecord.co.yml +++ b/config/locales/activerecord.co.yml @@ -1,3 +1,4 @@ +--- co: activerecord: attributes: diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index 4ceac8f082ee8c..6f4fe86e3fdc85 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -1,3 +1,4 @@ +--- cs: activerecord: attributes: diff --git a/config/locales/activerecord.cy.yml b/config/locales/activerecord.cy.yml index c5574b0c7d2e3c..73b54d554e314f 100644 --- a/config/locales/activerecord.cy.yml +++ b/config/locales/activerecord.cy.yml @@ -1,3 +1,4 @@ +--- cy: activerecord: attributes: diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index f1e8920e338457..fd94a6cf9aae11 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -1,3 +1,4 @@ +--- da: activerecord: attributes: diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml index 851d1b270177ed..ca590bec7dba28 100644 --- a/config/locales/activerecord.de.yml +++ b/config/locales/activerecord.de.yml @@ -1,3 +1,4 @@ +--- de: activerecord: attributes: diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml index fb35de20ddf35a..4eae3b6a00204b 100644 --- a/config/locales/activerecord.el.yml +++ b/config/locales/activerecord.el.yml @@ -1,3 +1,4 @@ +--- el: activerecord: attributes: diff --git a/config/locales/activerecord.en-GB.yml b/config/locales/activerecord.en-GB.yml index 173d9b1210acf5..2b1cb05a6f16e8 100644 --- a/config/locales/activerecord.en-GB.yml +++ b/config/locales/activerecord.en-GB.yml @@ -1,3 +1,4 @@ +--- en-GB: activerecord: attributes: diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml index f10e678d934bbb..99059e38568928 100644 --- a/config/locales/activerecord.eo.yml +++ b/config/locales/activerecord.eo.yml @@ -1,3 +1,4 @@ +--- eo: activerecord: attributes: diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml index bcf6390bdc4c67..71b7f9732d26d7 100644 --- a/config/locales/activerecord.es-AR.yml +++ b/config/locales/activerecord.es-AR.yml @@ -1,3 +1,4 @@ +--- es-AR: activerecord: attributes: diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index b3231e2d3bf156..882c40ae8de618 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -1,3 +1,4 @@ +--- es-MX: activerecord: attributes: diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 360930062fd6cb..186104c702d9b6 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -1,3 +1,4 @@ +--- es: activerecord: attributes: diff --git a/config/locales/activerecord.et.yml b/config/locales/activerecord.et.yml index 52447d31a880d2..8cabf0e0fe78ed 100644 --- a/config/locales/activerecord.et.yml +++ b/config/locales/activerecord.et.yml @@ -1,3 +1,4 @@ +--- et: activerecord: attributes: diff --git a/config/locales/activerecord.eu.yml b/config/locales/activerecord.eu.yml index b242d669fb8394..818dab939c92e3 100644 --- a/config/locales/activerecord.eu.yml +++ b/config/locales/activerecord.eu.yml @@ -1,3 +1,4 @@ +--- eu: activerecord: attributes: diff --git a/config/locales/activerecord.fa.yml b/config/locales/activerecord.fa.yml index 5a8a34b3fe5dc8..3d1e8012bfc305 100644 --- a/config/locales/activerecord.fa.yml +++ b/config/locales/activerecord.fa.yml @@ -1,3 +1,4 @@ +--- fa: activerecord: attributes: diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index bfa19d0cfeea9d..93f338b5d5daef 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -1,3 +1,4 @@ +--- fi: activerecord: attributes: @@ -10,7 +11,7 @@ fi: locale: Alue password: Salasana user/account: - username: Käyttäjätunnus + username: Käyttäjänimi user/invite_request: text: Syy errors: diff --git a/config/locales/activerecord.fo.yml b/config/locales/activerecord.fo.yml index 8c25d67e00e788..cf447a9dbc7b1a 100644 --- a/config/locales/activerecord.fo.yml +++ b/config/locales/activerecord.fo.yml @@ -1,3 +1,4 @@ +--- fo: activerecord: attributes: diff --git a/config/locales/activerecord.fr-QC.yml b/config/locales/activerecord.fr-QC.yml index 113f2a6d29901e..607758add643b4 100644 --- a/config/locales/activerecord.fr-QC.yml +++ b/config/locales/activerecord.fr-QC.yml @@ -1,3 +1,4 @@ +--- fr-QC: activerecord: attributes: diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 9934a3133ceaef..24bb39502bd4c9 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -1,3 +1,4 @@ +--- fr: activerecord: attributes: diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml index 4a6b2fe55ec24e..b571ab60dc93df 100644 --- a/config/locales/activerecord.fy.yml +++ b/config/locales/activerecord.fy.yml @@ -1,3 +1,4 @@ +--- fy: activerecord: attributes: diff --git a/config/locales/activerecord.ga.yml b/config/locales/activerecord.ga.yml index e52678d4259f0d..236cc479e17e1b 100644 --- a/config/locales/activerecord.ga.yml +++ b/config/locales/activerecord.ga.yml @@ -1,3 +1,4 @@ +--- ga: activerecord: attributes: diff --git a/config/locales/activerecord.gd.yml b/config/locales/activerecord.gd.yml index c7190f452b04ec..895f035c039db0 100644 --- a/config/locales/activerecord.gd.yml +++ b/config/locales/activerecord.gd.yml @@ -1,3 +1,4 @@ +--- gd: activerecord: attributes: @@ -18,31 +19,31 @@ gd: account: attributes: username: - invalid: '– chan fhaod ach litrichean gun sràcan, àireamhan ’s fo-loidhnichean a bhith ’na bhroinn' - reserved: '– tha e glèidhte' + invalid: "– chan fhaod ach litrichean gun sràcan, àireamhan ’s fo-loidhnichean a bhith ’na bhroinn" + reserved: "– tha e glèidhte" admin/webhook: attributes: url: - invalid: '– chan eil seo ’na URL dligheach' + invalid: "– chan eil seo ’na URL dligheach" doorkeeper/application: attributes: website: - invalid: '– chan eil seo ’na URL dligheach' + invalid: "– chan eil seo ’na URL dligheach" import: attributes: data: - malformed: '– chan eil cruth dligheach air' + malformed: "– chan eil cruth dligheach air" status: attributes: reblog: - taken: '– tha seo aig a’ phost mu thràth' + taken: "– tha seo aig a’ phost mu thràth" user: attributes: email: - blocked: '– tha seo a’ chleachdadh solaraiche puist-d nach eil ceadaichte' - unreachable: '– tha coltas nach eil seo ann' + blocked: "– tha seo a’ chleachdadh solaraiche puist-d nach eil ceadaichte" + unreachable: "– tha coltas nach eil seo ann" role_id: - elevated: '– chan fhaod seo a bhith nas àirde na an dreuchd a th’ agad an-dràsta' + elevated: "– chan fhaod seo a bhith nas àirde na an dreuchd a th’ agad an-dràsta" user_role: attributes: permissions_as_keys: diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index 1267b1cf047db9..477db570e7877c 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -1,3 +1,4 @@ +--- gl: activerecord: attributes: diff --git a/config/locales/activerecord.he.yml b/config/locales/activerecord.he.yml index d7b899d8932e61..54d0b0a1cc1a4f 100644 --- a/config/locales/activerecord.he.yml +++ b/config/locales/activerecord.he.yml @@ -1,3 +1,4 @@ +--- he: activerecord: attributes: diff --git a/config/locales/activerecord.hi.yml b/config/locales/activerecord.hi.yml index 29a43dc41548b8..94368d8e683534 100644 --- a/config/locales/activerecord.hi.yml +++ b/config/locales/activerecord.hi.yml @@ -1,3 +1,4 @@ +--- hi: activerecord: attributes: diff --git a/config/locales/activerecord.hr.yml b/config/locales/activerecord.hr.yml index 8cb1380d523de0..b095244dd6bc8a 100644 --- a/config/locales/activerecord.hr.yml +++ b/config/locales/activerecord.hr.yml @@ -1,3 +1,4 @@ +--- hr: activerecord: attributes: diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml index d784038116aaeb..e5757ba64360e4 100644 --- a/config/locales/activerecord.hu.yml +++ b/config/locales/activerecord.hu.yml @@ -1,3 +1,4 @@ +--- hu: activerecord: attributes: diff --git a/config/locales/activerecord.hy.yml b/config/locales/activerecord.hy.yml index 4fcbc0b4d1b9e4..dc5c8663445f27 100644 --- a/config/locales/activerecord.hy.yml +++ b/config/locales/activerecord.hy.yml @@ -1,3 +1,4 @@ +--- hy: activerecord: attributes: @@ -28,4 +29,4 @@ hy: attributes: email: blocked: արգելուած էլ. փոստի ծառայութիւն - unreachable: կարծես գոյութիւն չունի + unreachable: կարծես գոյութիւն չունի diff --git a/config/locales/activerecord.id.yml b/config/locales/activerecord.id.yml index 8780c1bba17de8..47d200864a432a 100644 --- a/config/locales/activerecord.id.yml +++ b/config/locales/activerecord.id.yml @@ -1,3 +1,4 @@ +--- id: activerecord: attributes: diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index a594308169da73..6426defc55a41d 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -1,3 +1,4 @@ +--- io: activerecord: attributes: diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml index a0ff23d5267d19..4423cb6e47ffcd 100644 --- a/config/locales/activerecord.is.yml +++ b/config/locales/activerecord.is.yml @@ -1,3 +1,4 @@ +--- is: activerecord: attributes: diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml index 2f7449ec391dd4..f23513e34c73e5 100644 --- a/config/locales/activerecord.it.yml +++ b/config/locales/activerecord.it.yml @@ -1,3 +1,4 @@ +--- it: activerecord: attributes: diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 97b580956d30de..468df9b12b0ea7 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -1,3 +1,4 @@ +--- ja: activerecord: attributes: diff --git a/config/locales/activerecord.ka.yml b/config/locales/activerecord.ka.yml index 48f7d02eea7ddf..cb8a03702d5e50 100644 --- a/config/locales/activerecord.ka.yml +++ b/config/locales/activerecord.ka.yml @@ -1,3 +1,4 @@ +--- ka: activerecord: attributes: diff --git a/config/locales/activerecord.kab.yml b/config/locales/activerecord.kab.yml index 86cea84882bf31..909ff68c24e206 100644 --- a/config/locales/activerecord.kab.yml +++ b/config/locales/activerecord.kab.yml @@ -1,3 +1,4 @@ +--- kab: activerecord: attributes: diff --git a/config/locales/activerecord.kk.yml b/config/locales/activerecord.kk.yml index 95caef309617cd..fba2e60549c784 100644 --- a/config/locales/activerecord.kk.yml +++ b/config/locales/activerecord.kk.yml @@ -1,3 +1,4 @@ +--- kk: activerecord: attributes: diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 9bb344c0135d90..294d614bca63c6 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -1,3 +1,4 @@ +--- ko: activerecord: attributes: diff --git a/config/locales/activerecord.ku.yml b/config/locales/activerecord.ku.yml index 15e8aed74592c7..09dd5d16d1ebe2 100644 --- a/config/locales/activerecord.ku.yml +++ b/config/locales/activerecord.ku.yml @@ -1,3 +1,4 @@ +--- ku: activerecord: attributes: diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index 7ad61d8c8481b1..5e41f4630e46f1 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -1,3 +1,4 @@ +--- lv: activerecord: attributes: diff --git a/config/locales/activerecord.ml.yml b/config/locales/activerecord.ml.yml index 16fa490013909a..8b20ee34b32e3b 100644 --- a/config/locales/activerecord.ml.yml +++ b/config/locales/activerecord.ml.yml @@ -1,3 +1,4 @@ +--- ml: activerecord: attributes: diff --git a/config/locales/activerecord.mr.yml b/config/locales/activerecord.mr.yml index 8b8f05e0748948..6e4ffece9c6f4d 100644 --- a/config/locales/activerecord.mr.yml +++ b/config/locales/activerecord.mr.yml @@ -1,3 +1,4 @@ +--- mr: activerecord: attributes: diff --git a/config/locales/activerecord.ms.yml b/config/locales/activerecord.ms.yml index 437682ddc437f0..5f282702f103d0 100644 --- a/config/locales/activerecord.ms.yml +++ b/config/locales/activerecord.ms.yml @@ -1,3 +1,4 @@ +--- ms: activerecord: attributes: diff --git a/config/locales/activerecord.my.yml b/config/locales/activerecord.my.yml index 5c4e4527028a73..f75f9d8e139a29 100644 --- a/config/locales/activerecord.my.yml +++ b/config/locales/activerecord.my.yml @@ -1,3 +1,4 @@ +--- my: activerecord: attributes: diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml index b62bb624876d53..ce2c28a81072cb 100644 --- a/config/locales/activerecord.nl.yml +++ b/config/locales/activerecord.nl.yml @@ -1,3 +1,4 @@ +--- nl: activerecord: attributes: diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml index 4964df59ec013e..a303af6247cd69 100644 --- a/config/locales/activerecord.nn.yml +++ b/config/locales/activerecord.nn.yml @@ -1,3 +1,4 @@ +--- nn: activerecord: attributes: diff --git a/config/locales/activerecord.no.yml b/config/locales/activerecord.no.yml index a9898ae412d399..5abe3fdc38243f 100644 --- a/config/locales/activerecord.no.yml +++ b/config/locales/activerecord.no.yml @@ -1,4 +1,5 @@ -"no": +--- +'no': activerecord: attributes: poll: diff --git a/config/locales/activerecord.oc.yml b/config/locales/activerecord.oc.yml index 8d5fbe19e5b30e..f10a9f90d126cb 100644 --- a/config/locales/activerecord.oc.yml +++ b/config/locales/activerecord.oc.yml @@ -1,3 +1,4 @@ +--- oc: activerecord: attributes: diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml index 5e758df6b5d56f..5ae1d3778a9550 100644 --- a/config/locales/activerecord.pl.yml +++ b/config/locales/activerecord.pl.yml @@ -1,3 +1,4 @@ +--- pl: activerecord: attributes: diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index f11aa49f7fd8ec..ae78026629025a 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -1,3 +1,4 @@ +--- pt-BR: activerecord: attributes: diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml index 72c45d35805ee9..ba738741f86776 100644 --- a/config/locales/activerecord.pt-PT.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -1,3 +1,4 @@ +--- pt-PT: activerecord: attributes: diff --git a/config/locales/activerecord.ro.yml b/config/locales/activerecord.ro.yml index f08636b2345639..83c90eda29fe2f 100644 --- a/config/locales/activerecord.ro.yml +++ b/config/locales/activerecord.ro.yml @@ -1,3 +1,4 @@ +--- ro: activerecord: attributes: diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 8f5a7c03ff6e92..14f9f61f6cd54b 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -1,3 +1,4 @@ +--- ru: activerecord: attributes: diff --git a/config/locales/activerecord.sc.yml b/config/locales/activerecord.sc.yml index f4e714e525af6c..aadd00287f54ad 100644 --- a/config/locales/activerecord.sc.yml +++ b/config/locales/activerecord.sc.yml @@ -1,3 +1,4 @@ +--- sc: activerecord: attributes: diff --git a/config/locales/activerecord.sco.yml b/config/locales/activerecord.sco.yml index be4f7bf44350fd..084c3370b21535 100644 --- a/config/locales/activerecord.sco.yml +++ b/config/locales/activerecord.sco.yml @@ -1,3 +1,4 @@ +--- sco: activerecord: attributes: diff --git a/config/locales/activerecord.si.yml b/config/locales/activerecord.si.yml index c10c35c94757e7..4152861e8c130c 100644 --- a/config/locales/activerecord.si.yml +++ b/config/locales/activerecord.si.yml @@ -1,3 +1,4 @@ +--- si: activerecord: attributes: diff --git a/config/locales/activerecord.sk.yml b/config/locales/activerecord.sk.yml index ceaa406fd3bab7..33f53a88ed988f 100644 --- a/config/locales/activerecord.sk.yml +++ b/config/locales/activerecord.sk.yml @@ -1,3 +1,4 @@ +--- sk: activerecord: attributes: diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index 079b0fdc72905a..941b847090899a 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -1,3 +1,4 @@ +--- sl: activerecord: attributes: diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml index e2c7b3d5723f85..9c548bda04f7f7 100644 --- a/config/locales/activerecord.sq.yml +++ b/config/locales/activerecord.sq.yml @@ -1,3 +1,4 @@ +--- sq: activerecord: attributes: diff --git a/config/locales/activerecord.sr-Latn.yml b/config/locales/activerecord.sr-Latn.yml index 275d0c8a4ff8a5..7f27fc585f5db2 100644 --- a/config/locales/activerecord.sr-Latn.yml +++ b/config/locales/activerecord.sr-Latn.yml @@ -1,3 +1,4 @@ +--- sr-Latn: activerecord: attributes: diff --git a/config/locales/activerecord.sr.yml b/config/locales/activerecord.sr.yml index 81956df857cfdf..27ee48c9c9c9c9 100644 --- a/config/locales/activerecord.sr.yml +++ b/config/locales/activerecord.sr.yml @@ -1,3 +1,4 @@ +--- sr: activerecord: attributes: diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml index 6ab197a7391e08..a3a45705ecad37 100644 --- a/config/locales/activerecord.sv.yml +++ b/config/locales/activerecord.sv.yml @@ -1,3 +1,4 @@ +--- sv: activerecord: attributes: diff --git a/config/locales/activerecord.ta.yml b/config/locales/activerecord.ta.yml index 4cf2d94e47c8ea..781fbd2d96459e 100644 --- a/config/locales/activerecord.ta.yml +++ b/config/locales/activerecord.ta.yml @@ -1,3 +1,4 @@ +--- ta: activerecord: attributes: diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index fa8b9434e5eedc..3b4b57a236e2f2 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -1,3 +1,4 @@ +--- th: activerecord: attributes: diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index 24bece7f03b33b..d2b79d256cc0f6 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -1,3 +1,4 @@ +--- tr: activerecord: attributes: diff --git a/config/locales/activerecord.tt.yml b/config/locales/activerecord.tt.yml index eaa5b4294b5479..e53c2341e46fec 100644 --- a/config/locales/activerecord.tt.yml +++ b/config/locales/activerecord.tt.yml @@ -1,3 +1,4 @@ +--- tt: activerecord: attributes: diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 0f7ea9c0c3f307..f16750acec50be 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -1,3 +1,4 @@ +--- uk: activerecord: attributes: diff --git a/config/locales/activerecord.uz.yml b/config/locales/activerecord.uz.yml index ac4bc8256bf073..ed13813d1ccc4e 100644 --- a/config/locales/activerecord.uz.yml +++ b/config/locales/activerecord.uz.yml @@ -1,3 +1,4 @@ +--- uz: activerecord: attributes: diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index a9a059a342c7cc..1b4ad0a4d27177 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -1,3 +1,4 @@ +--- vi: activerecord: attributes: diff --git a/config/locales/activerecord.zgh.yml b/config/locales/activerecord.zgh.yml index 3a8e4da455104a..40ea104bb21525 100644 --- a/config/locales/activerecord.zgh.yml +++ b/config/locales/activerecord.zgh.yml @@ -1,3 +1,4 @@ +--- zgh: activerecord: attributes: diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index 8907151d623260..a52e7cff6f8e75 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -1,3 +1,4 @@ +--- zh-CN: activerecord: attributes: diff --git a/config/locales/activerecord.zh-HK.yml b/config/locales/activerecord.zh-HK.yml index 6568612f564070..c67c2e6d43db74 100644 --- a/config/locales/activerecord.zh-HK.yml +++ b/config/locales/activerecord.zh-HK.yml @@ -1,3 +1,4 @@ +--- zh-HK: activerecord: attributes: diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index 7eeb42440eac20..792a9dbb2229fc 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -1,3 +1,4 @@ +--- zh-TW: activerecord: attributes: diff --git a/config/locales/af.yml b/config/locales/af.yml index b3b42015544419..1dbf99afe95ec3 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -1,3 +1,4 @@ +--- af: about: contact_missing: Nie ingestel nie @@ -73,7 +74,7 @@ af: title: Webhoeke webhook: Web-hoek appearance: - advanced_web_interface_hint: 'As jy die volle wydte van jou skerm gebruik, laat die gevorderde webkoppelvlak jou toe om kolomme met verskillende soorte inligting langs mekaar te rangskik. So kan jy, byvoorbeeld, tegelyk jou tuistoevoer, kennisgewings, gefedereerde tydlyn en nog ander lyste of hutsetikette dophou.' + advanced_web_interface_hint: As jy die volle wydte van jou skerm gebruik, laat die gevorderde webkoppelvlak jou toe om kolomme met verskillende soorte inligting langs mekaar te rangskik. So kan jy, byvoorbeeld, tegelyk jou tuistoevoer, kennisgewings, gefedereerde tydlyn en nog ander lyste of hutsetikette dophou. application_mailer: notification_preferences: Verander e-posvoorkeure settings: 'Verander e-posvoorkeure: %{link}' diff --git a/config/locales/an.yml b/config/locales/an.yml index 8eb8d6537c8706..7922ccf58528f2 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1,3 +1,4 @@ +--- an: about: about_mastodon_html: 'Lo ret social d''o futuro: Sin anuncios, sin vichilancia corporativa, disenyo etico, y descentralización! Sé duenyo d''a tuya información con Mastodon!' @@ -55,7 +56,7 @@ an: delete: Eliminar datos deleted: Borrau demote: Degradar - destroyed_msg: "Los datos de %{username} son ya en coda pa estar eliminaus de camín" + destroyed_msg: Los datos de %{username} son ya en coda pa estar eliminaus de camín disable: Deshabilitar disable_sign_in_token_auth: Deshabilitar l'autenticación per token de correu electronico disable_two_factor_authentication: Desactivar autenticación de dos factors @@ -86,7 +87,7 @@ an: media_attachments: Multimedia memorialize: Convertir en memorial memorialized: Cuenta commemorativa - memorialized_msg: '%{username} se convirtió con exito en una cuenta commemorativa' + memorialized_msg: "%{username} se convirtió con exito en una cuenta commemorativa" moderation: active: Activo all: Totz @@ -540,7 +541,7 @@ an: no_ip_block_selected: No s'ha cambiau reglas IP ya que no s'ha triau garra title: Reglas IP relationships: - title: "Relacions de %{acct}" + title: Relacions de %{acct} relays: add_new: Anyadir un nuevo relés delete: Borrar @@ -891,7 +892,7 @@ an: new_report: body: "%{reporter} ha denunciau a %{target}" body_remote: Belún de %{domain} a denunciau a %{target} - subject: 'Nuevo reporte pa la %{instance} (#%{id})' + subject: Nuevo reporte pa la %{instance} (#%{id}) new_trends: body: 'Los siguients elementos amenesten una revisión antes que se puedan amostrar publicament:' new_trending_links: @@ -1279,7 +1280,7 @@ an: poll: subject: Una enqüesta de %{name} ha rematau reblog: - body: '%{name} ha retutau la tuya publicación:' + body: "%{name} ha retutau la tuya publicación:" subject: "%{name} ha retutau la tuya publicación" title: Nueva difusión status: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 2940fa43df3741..f8c74207de7434 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1,3 +1,4 @@ +--- ar: about: about_mastodon_html: 'شبكة التواصل الاجتماعية المستقبَليّة: مِن دون إعلانات، وغير خاضعة لرقابة الشركات، ذات تصميم أخلاقي ولامركزية! بياناتكم مِلك لكم مع ماستدون!' @@ -8,9 +9,6 @@ ar: accounts: follow: متابَعة followers: - zero: متابِعون - one: متابِع - two: متابِعون few: متابِعون many: متابِعون one: متابِع واحد @@ -25,11 +23,9 @@ ar: pin_errors: following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه posts: - zero: منشور - one: منشور واحد - two: منشورَيْن few: منشورات many: منشورات + one: منشور واحد other: منشور two: منشورَيْن zero: لا منشورات @@ -68,7 +64,7 @@ ar: delete: حذف البيانات deleted: تمت إزالته demote: إنزال الرُتبة الوظيفية - destroyed_msg: "بيانات حساب %{username} الآن في قائمة الانتظار ليتم حذفها قريباً" + destroyed_msg: بيانات حساب %{username} الآن في قائمة الانتظار ليتم حذفها قريباً disable: تعطيل disable_sign_in_token_auth: تعطيل مصادقة رمز البريد الإلكتروني disable_two_factor_authentication: تعطيل المصادقة بخطوتين @@ -113,18 +109,18 @@ ar: most_recent_ip: أحدث عنوان إيبي no_account_selected: لم يطرأ أي تغيير على أي حساب بما أنه لم يتم اختيار أي واحد no_limits_imposed: مِن دون حدود مشروطة - no_role_assigned: '''لم يتم تعيين أدوار`' + no_role_assigned: "'لم يتم تعيين أدوار`" not_subscribed: غير مشترك pending: في انتظار المراجعة perform_full_suspension: تعليق الحساب previous_strikes: العقوبات السابقة previous_strikes_description_html: - zero: هذا الحساب لديه %{count}انذار. - one: هذا الحساب لديه %{count}انذار. - two: لدى هذا الحساب %{count} إنذاران اثنان. few: لدى هذا الحساب %{count} إنذارات. many: لدى هذا الحساب %{count} إنذارًا. + one: هذا الحساب لديه %{count}انذار. other: لدى هذا الحساب %{count} إنذار. + two: لدى هذا الحساب %{count} إنذاران اثنان. + zero: هذا الحساب لديه %{count}انذار. promote: ترقية protocol: البروتوكول public: عمومي @@ -245,63 +241,63 @@ ar: update_status: تحديث المنشور update_user_role: تحديث الدور actions: - approve_appeal_html: "وافق %{name} على استئناف قرار الاعتدال من %{target}" - approve_user_html: "قبل %{name} تسجيل %{target}" - assigned_to_self_report_html: "قام %{name} بتعيين التقرير %{target} لأنفسهم" - change_email_user_html: "غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target}" - change_role_user_html: "قام %{name} بإنشاء قاعدة للـIP %{target}" + approve_appeal_html: وافق %{name} على استئناف قرار الاعتدال من %{target} + approve_user_html: قبل %{name} تسجيل %{target} + assigned_to_self_report_html: قام %{name} بتعيين التقرير %{target} لأنفسهم + change_email_user_html: غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target} + change_role_user_html: قام %{name} بإنشاء قاعدة للـIP %{target} confirm_user_html: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}" - create_account_warning_html: "قام %{name} بإرسال تحذير إلى %{target}" - create_announcement_html: "قام %{name} بإنشاء إعلان جديد %{target}" - create_canonical_email_block_html: "قام %{name} بحظر نطاق البريد الإلكتروني %{target}" + create_account_warning_html: قام %{name} بإرسال تحذير إلى %{target} + create_announcement_html: قام %{name} بإنشاء إعلان جديد %{target} + create_canonical_email_block_html: قام %{name} بحظر نطاق البريد الإلكتروني %{target} create_custom_emoji_html: "%{name} قام برفع إيموجي جديد %{target}" - create_domain_allow_html: "قام %{name} بإضافة النطاق %{target} إلى القائمة البيضاء" + create_domain_allow_html: قام %{name} بإضافة النطاق %{target} إلى القائمة البيضاء create_domain_block_html: "%{name} قام بحجب نطاق %{target}" - create_email_domain_block_html: "قام %{name} بحظر نطاق البريد الإلكتروني %{target}" - create_ip_block_html: "قام %{name} بإنشاء قاعدة للـIP %{target}" - create_unavailable_domain_html: "قام %{name} بتوقيف التوصيل للنطاق %{target}" + create_email_domain_block_html: قام %{name} بحظر نطاق البريد الإلكتروني %{target} + create_ip_block_html: قام %{name} بإنشاء قاعدة للـIP %{target} + create_unavailable_domain_html: قام %{name} بتوقيف التوصيل للنطاق %{target} create_user_role_html: "%{name} أنشأ رتبه %{target}" - demote_user_html: "قام %{name} بخفض الرتبة الوظيفية لـ%{target}" - destroy_announcement_html: "قام %{name} بحذف الإعلان %{target}" - destroy_canonical_email_block_html: "قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target}" - destroy_custom_emoji_html: "قام %{name} بتحديث الإيموجي %{target}" - destroy_domain_allow_html: "قام %{name} بمنع الاتحاد مع النطاق %{target}" - destroy_domain_block_html: "قام %{name} برفع الحظر عن النطاق %{target}" - destroy_email_domain_block_html: "قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target}" + demote_user_html: قام %{name} بخفض الرتبة الوظيفية لـ%{target} + destroy_announcement_html: قام %{name} بحذف الإعلان %{target} + destroy_canonical_email_block_html: قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target} + destroy_custom_emoji_html: قام %{name} بتحديث الإيموجي %{target} + destroy_domain_allow_html: قام %{name} بمنع الاتحاد مع النطاق %{target} + destroy_domain_block_html: قام %{name} برفع الحظر عن النطاق %{target} + destroy_email_domain_block_html: قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target} destroy_instance_html: "%{name} قام بحجب نطاق %{target}" - destroy_ip_block_html: "قام %{name} بحذف قاعدة للـIP %{target}" - destroy_status_html: "قام %{name} بحذف منشور من %{target}" - destroy_unavailable_domain_html: "قام %{name} باستئناف التوصيل للنطاق %{target}" + destroy_ip_block_html: قام %{name} بحذف قاعدة للـIP %{target} + destroy_status_html: قام %{name} بحذف منشور من %{target} + destroy_unavailable_domain_html: قام %{name} باستئناف التوصيل للنطاق %{target} destroy_user_role_html: "%{name} أنشأ رتبه %{target}" - disable_2fa_user_html: "قام %{name} بتعطيل المصادقة بخطوتين للمستخدم %{target}" - disable_custom_emoji_html: "قام %{name} بتعطيل الإيموجي %{target}" + disable_2fa_user_html: قام %{name} بتعطيل المصادقة بخطوتين للمستخدم %{target} + disable_custom_emoji_html: قام %{name} بتعطيل الإيموجي %{target} disable_sign_in_token_auth_user_html: "%{name} تعطيل مصادقة رمز البريد الإلكتروني لـ %{target}" - disable_user_html: "قام %{name} بتعطيل تسجيل الدخول للمستخدم %{target}" - enable_custom_emoji_html: "قام %{name} بتنشيط الإيموجي %{target}" + disable_user_html: قام %{name} بتعطيل تسجيل الدخول للمستخدم %{target} + enable_custom_emoji_html: قام %{name} بتنشيط الإيموجي %{target} enable_sign_in_token_auth_user_html: "%{name} تمكين مصادقة رمز البريد الإلكتروني لـ %{target}" - enable_user_html: "قام %{name} بتنشيط تسجيل الدخول للمستخدم %{target}" - memorialize_account_html: "قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية" - promote_user_html: "قام %{name} بترويج المستخدم %{target}" - reject_appeal_html: "وافق %{name} على استئناف قرار الاعتدال من %{target}" - reject_user_html: "رفض %{name} تسجيل %{target}" - remove_avatar_user_html: "قام %{name} بإزالة صورة %{target} الرمزية" - reopen_report_html: "قام %{name} بإعادة فتح الشكوى %{target}" + enable_user_html: قام %{name} بتنشيط تسجيل الدخول للمستخدم %{target} + memorialize_account_html: قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية + promote_user_html: قام %{name} بترويج المستخدم %{target} + reject_appeal_html: وافق %{name} على استئناف قرار الاعتدال من %{target} + reject_user_html: رفض %{name} تسجيل %{target} + remove_avatar_user_html: قام %{name} بإزالة صورة %{target} الرمزية + reopen_report_html: قام %{name} بإعادة فتح الشكوى %{target} resend_user_html: "%{name} إعادة إرسال البريد الإلكتروني للتأكيد لـ %{target}" - reset_password_user_html: "قام %{name} بإعادة تعيين كلمة مرور المستخدم %{target}" - resolve_report_html: "قام %{name} بحل الشكوى %{target}" - sensitive_account_html: "قام %{name} بوضع علامة حساس على محتوى %{target}" - silence_account_html: "قام %{name} بكتم حساب %{target}" - suspend_account_html: "قام %{name} بتعليق حساب %{target}" - unassigned_report_html: "قام %{name} بإلغاء تعيين الشكوى %{target}" + reset_password_user_html: قام %{name} بإعادة تعيين كلمة مرور المستخدم %{target} + resolve_report_html: قام %{name} بحل الشكوى %{target} + sensitive_account_html: قام %{name} بوضع علامة حساس على محتوى %{target} + silence_account_html: قام %{name} بكتم حساب %{target} + suspend_account_html: قام %{name} بتعليق حساب %{target} + unassigned_report_html: قام %{name} بإلغاء تعيين الشكوى %{target} unblock_email_account_html: "%{name} إلغاء حظر %{target} عنوان البريد الإلكتروني" - unsensitive_account_html: "قام %{name} بإزالة علامة حساس على محتوى %{target}" - unsilence_account_html: "قام %{name} بإلغاء كتم المستخدم %{target}" - unsuspend_account_html: "قام %{name} بإلغاء تعليق حساب %{target}" - update_announcement_html: "قام %{name} بتحديث الإعلان %{target}" - update_custom_emoji_html: "قام %{name} بتحديث الإيموجي %{target}" - update_domain_block_html: "قام %{name} بتحديث كتلة النطاق %{target}" - update_ip_block_html: "قام %{name} بإنشاء قاعدة للـIP %{target}" - update_status_html: "قام %{name} بتحديث منشور من %{target}" + unsensitive_account_html: قام %{name} بإزالة علامة حساس على محتوى %{target} + unsilence_account_html: قام %{name} بإلغاء كتم المستخدم %{target} + unsuspend_account_html: قام %{name} بإلغاء تعليق حساب %{target} + update_announcement_html: قام %{name} بتحديث الإعلان %{target} + update_custom_emoji_html: قام %{name} بتحديث الإيموجي %{target} + update_domain_block_html: قام %{name} بتحديث كتلة النطاق %{target} + update_ip_block_html: قام %{name} بإنشاء قاعدة للـIP %{target} + update_status_html: قام %{name} بتحديث منشور من %{target} update_user_role_html: "%{name} تغيير رتبه %{target}" deleted_account: احذف الحساب empty: لم يتم العثور على سجلات. @@ -367,18 +363,16 @@ ar: new_users: مستخدمون جدد opened_reports: تقارير مفتوحة pending_appeals_html: - zero: "%{count} وسماً معلقاً" - one: "%{count} مستخدمين معلقين" - two: "%{count} مستخدمين معلقين" few: "%{count} مستخدمين معلقين" many: "%{count} مستخدمين معلقين" + one: "%{count} مستخدمين معلقين" other: "%{count} تقارير معلقة" + two: "%{count} مستخدمين معلقين" + zero: "%{count} وسماً معلقاً" pending_reports_html: - zero: "%{count} تقارير قيد الانتظار" - one: "%{count} تقرير واحد قيد الإنتظار" - two: "%{count} تقريران قيد الانتظار" few: "%{count} تقارير قيد الإنتظار" many: "%{count} تقريرًا قيد الإنتظار" + one: "%{count} تقرير واحد قيد الإنتظار" other: "%{count} تقرير قيد الانتظار" two: "%{count} تقريران قيد الانتظار" zero: "%{count} تقارير قيد الانتظار" @@ -515,12 +509,12 @@ ar: zero: إذا فشل التسليم إلى النطاق لمدة %{count} يومٍ دون نجاح، لن تتم أي محاولات أخرى للتسليم إلا إذا تم الاستلام النطاق من. failure_threshold_reached: تم الوصول إلى أقصى حد للفشل بتاريخ %{date}. failures_recorded: - zero: ليس هناك أية محاولة فاشلة في %{count} يوم. - one: محاولة فاشلة في يوم %{count} واحد. - two: المحاولات الفاشلة في يَومين %{count}. few: المحاولات الفاشلة في %{count} يومًا. many: المحاولات الفاشلة في %{count} يوم مختلف. + one: محاولة فاشلة في يوم %{count} واحد. other: المحاولات الفاشلة في %{count} أيام مختلفة. + two: المحاولات الفاشلة في يَومين %{count}. + zero: ليس هناك أية محاولة فاشلة في %{count} يوم. no_failures_recorded: لم يتم العثور على أي فشل. title: التوفر warning: فشلت المحاولة الأخيرة للاتصال بهذا النطاق @@ -563,12 +557,12 @@ ar: destroyed_msg: تم جدولة حذف بيانات النطاق %{domain}. empty: لم يتم العثور على نطاقات. known_accounts: - zero: "%{count} حسابًا معروفًا" - one: "حساب %{count} معروف" - two: "حسابان %{count} معروفان" few: "%{count} حسابات معروفة" many: "%{count} حسابًا معروفًا" + one: حساب %{count} معروف other: "%{count} حساب معروف" + two: حسابان %{count} معروفان + zero: "%{count} حسابًا معروفًا" moderation: all: كافتها limited: محدود @@ -608,11 +602,11 @@ ar: no_ip_block_selected: لم يطرأ أي تغيير على أي قاعدة IP بما أنه لم يتم اختيار أي واحد title: قواعد الـIP relationships: - title: "علاقات %{acct}" + title: علاقات %{acct} relays: add_new: إضافة مُرحّل جديد delete: حذف - description_html: مُرَحِّل الاتحاد هو خادم وسيط يقوم بتبادل كميات كبيرة من التبويقات العامة بين الخوادم التي تشترك به وتنشر إليه. يمكنه أن يساعد الخوادم الصغيرة والمتوسطة على اكتشاف المحتوى من فيديفرس، الذي من شأنه خلاف ذلك أن يَتطلّب من المستخدمين المحليين أن يُتابِعوا يدوياً الأشخاص الآخرين على خوادم مُتحكم بها عن بُعد. + description_html: "مُرَحِّل الاتحاد هو خادم وسيط يقوم بتبادل كميات كبيرة من التبويقات العامة بين الخوادم التي تشترك به وتنشر إليه. يمكنه أن يساعد الخوادم الصغيرة والمتوسطة على اكتشاف المحتوى من فيديفرس، الذي من شأنه خلاف ذلك أن يَتطلّب من المستخدمين المحليين أن يُتابِعوا يدوياً الأشخاص الآخرين على خوادم مُتحكم بها عن بُعد." disable: تعطيل disabled: مُعطَّل enable: تشغيل @@ -631,12 +625,12 @@ ar: reports: account: notes: - zero: "%{count} ملاحظات" - one: "%{count} ملاحظة" - two: "%{count} ملاحظتَيْن" few: "%{count} ملاحظات" many: "%{count} ملاحظات" + one: "%{count} ملاحظة" other: "%{count} ملاحظات" + two: "%{count} ملاحظتَيْن" + zero: "%{count} ملاحظات" action_log: سجل المراجعة action_taken_by: تم اتخاذ الإجراء مِن طرف actions: @@ -718,12 +712,12 @@ ar: roles: add_new: إضافة دور assigned_users: - zero: "%{count} لا مستخدم" - one: "مستخدم واحد %{count}" - two: "مستخدمان %{count}" few: "%{count} مستخدمًا" many: "%{count} مستخدمين" + one: مستخدم واحد %{count} other: "%{count} مستخدم" + two: مستخدمان %{count} + zero: "%{count} لا مستخدم" categories: administration: الإدارة devops: DevOps @@ -736,12 +730,12 @@ ar: everyone: الصلاحيات الافتراضية everyone_full_description_html: هذا هو الدور الأساسي الذي يحمله جميع المستخدمين، حتى أولئك الذين ليس لديهم دور معين. جميع الأدوار الأخرى ترث الأذونات منه. permissions_count: - zero: "لا تصريح %{count}" - one: "تصريح واحد %{count}" - two: "تصريحان %{count}" few: "%{count} تصريحات" many: "%{count} تصريحًا" + one: تصريح واحد %{count} other: "%{count} تصريح" + two: تصريحان %{count} + zero: لا تصريح %{count} privileges: administrator: مدير administrator_description: المستخدمين الذين لديهم هذا التصريح سيتجاوزون جميع التصاريح @@ -881,13 +875,13 @@ ar: with_media: تحتوي على وسائط strikes: actions: - delete_statuses: "حَذَفَ %{name} رسائل %{target}" - disable: "جَمّدَ %{name} حساب %{target}" - mark_statuses_as_sensitive: "وَضَعَ %{name} علامة على منشورات %{target} على أنها حساسة" - none: "قام %{name} بإرسال تحذير إلى %{target}" - sensitive: "قام %{name} بوضع علامة حساس على حساب %{target}" - silence: "قام %{name} بكتم حساب %{target}" - suspend: "قام %{name} بتعليق حساب %{target}" + delete_statuses: حَذَفَ %{name} رسائل %{target} + disable: جَمّدَ %{name} حساب %{target} + mark_statuses_as_sensitive: وَضَعَ %{name} علامة على منشورات %{target} على أنها حساسة + none: قام %{name} بإرسال تحذير إلى %{target} + sensitive: قام %{name} بوضع علامة حساس على حساب %{target} + silence: قام %{name} بكتم حساب %{target} + suspend: قام %{name} بتعليق حساب %{target} appeal_approved: طُعِن فيه appeal_pending: طعن قيد المراجعة appeal_rejected: رُفض الطعن @@ -1002,12 +996,12 @@ ar: usable: يمكن استخدامه usage_comparison: تم استخدامه %{today} مرات اليوم، مقارنة بـ %{yesterday} بالأمس used_by_over_week: - zero: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي - one: مستخدَم من قِبل %{count} شخص واحد خلال الأسبوع الماضي - two: مستخدَم من قِبل %{count} شخصين خلال الأسبوع الماضي few: مستخدَم من قِبل %{count} أشخاص خلال الأسبوع الماضي many: مستخدَم من قِبل %{count} شخصا خلال الأسبوع الماضي + one: مستخدَم من قِبل %{count} شخص واحد خلال الأسبوع الماضي other: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي + two: مستخدَم من قِبل %{count} شخصين خلال الأسبوع الماضي + zero: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي title: المتداوَلة trending: المتداولة warning_presets: @@ -1019,7 +1013,7 @@ ar: webhooks: add_new: إضافة نقطة نهاية delete: حذف - description_html: webhook يمكّن ماستدون من إرسال إشعارات في الوقت الحقيقي حول الأحداث المختارة إلى التطبيق الخاص بك، حتى يمكن لتطبيقك تشغيل ردود الفعل تلقائياً. + description_html: "webhook يمكّن ماستدون من إرسال إشعارات في الوقت الحقيقي حول الأحداث المختارة إلى التطبيق الخاص بك، حتى يمكن لتطبيقك تشغيل ردود الفعل تلقائياً." disable: تعطيل disabled: معطَّل edit: تعديل نقطة النهاية @@ -1050,7 +1044,7 @@ ar: sensitive: لجعل حسابهم كحساس silence: للحد من حسابهم suspend: لتعليق حسابهم - body: "قام %{target} بالطعن في قرار %{action_taken_by} بتاريخ %{date} وهو كان %{type}. نص الطعن:" + body: 'قام %{target} بالطعن في قرار %{action_taken_by} بتاريخ %{date} وهو كان %{type}. نص الطعن:' next_steps: يمكنك الموافقة على الطعن وبالتالي التراجع عن قرار المشرف، أو يمكنك تجاهل الطعن. subject: قام %{username} بالطعن بقرار المشرفين بخصوص %{instance} new_critical_software_updates: @@ -1060,7 +1054,7 @@ ar: body: تفاصيل الحساب الجديد أدناه. يمكنك الموافقة على هذا الطلب أو رفضه. subject: حساب جديد في انتظار مراجعة على %{instance} (%{username}) new_report: - body: "قام %{reporter} بالإبلاغ عن %{target}" + body: قام %{reporter} بالإبلاغ عن %{target} body_remote: أبلغ شخص ما من %{domain} عن %{target} subject: تقرير جديد ل%{instance} (#%{id}) new_software_updates: @@ -1122,7 +1116,7 @@ ar: delete_account: احذف الحساب delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك المواصلة هنا. سوف يُطلَبُ منك التأكيد قبل الحذف. description: - prefix_invited_by_user: "يدعوك @%{name} للاتحاق بخادم ماستدون هذا!" + prefix_invited_by_user: يدعوك @%{name} للاتحاق بخادم ماستدون هذا! prefix_sign_up: أنشئ حسابًا على ماستدون اليوم! suffix: بفضل حساب، ستكون قادرا على متابعة أشخاص ونشر تحديثات وتبادل رسائل مع مستخدمين مِن أي خادم Mastodon وأكثر! didnt_get_confirmation: لم تستلم رابط تأكيد؟ @@ -1147,7 +1141,7 @@ ar: cas: CAS saml: SAML register: إنشاء حساب - registration_closed: "لا يقبل %{instance} استقبال أعضاء جدد" + registration_closed: لا يقبل %{instance} استقبال أعضاء جدد resend_confirmation: إعادة إرسال رابط التأكيد reset_password: إعادة تعيين كلمة المرور rules: @@ -1323,18 +1317,16 @@ ar: expires_in: تنتهي مدة صلاحيتها في غضون %{distance} expires_on: تنتهي مدة صلاحيتها في %{date} keywords: - zero: "%{count} كلمة مفتاحية" - one: "كلمة مفتاحية %{count} واحدة" - two: "كلمتان مفتاحيتان %{count}" few: "%{count} كلمة مفتاحية" many: "%{count} كلمة مفتاحية" + one: كلمة مفتاحية %{count} واحدة other: "%{count} كلمة مفتاحية" + two: كلمتان مفتاحيتان %{count} + zero: "%{count} كلمة مفتاحية" statuses: - zero: "%{count} منشورات" - one: "%{count} منشور واحد" - two: "%{count} منشوران اثنان" few: "%{count} منشورات" many: "%{count} منشورًا" + one: "%{count} منشور واحد" other: "%{count} منشور" two: "%{count} منشوران اثنان" zero: "%{count} منشورات" @@ -1369,12 +1361,12 @@ ar: save_changes: حفظ التغييرات today: اليوم validation_errors: - zero: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه - one: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الخطأ أدناه - two: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه few: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه many: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه + one: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الخطأ أدناه other: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه + two: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه + zero: هناك شيء ما ليس على ما يرام! يُرجى مراجعة الأخطاء الـ %{count} أدناه imports: errors: empty: ملف CSV فارغ @@ -1447,12 +1439,12 @@ ar: generate: توليد invited_by: 'تمت دعوتك من طرف:' max_uses: - zero: "%{count} استخدامات" - one: استخدام واحد - two: "%{count} استخدامات" few: "%{count} استخدامات" many: "%{count} استخدامات" + one: استخدام واحد other: "%{count} استخدامات" + two: "%{count} استخدامات" + zero: "%{count} استخدامات" max_uses_prompt: بلا حدود prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادم هذا table: @@ -1537,10 +1529,10 @@ ar: report: subject: "%{name} قام بإرسال تقرير" sign_up: - subject: "أنشأ %{name} حسابًا" + subject: أنشأ %{name} حسابًا favourite: body: 'أُعجب %{name} بمنشورك:' - subject: "أُعجِب %{name} بمنشورك" + subject: أُعجِب %{name} بمنشورك title: مفضّلة جديدة follow: body: "%{name} من متتبعيك الآن!" @@ -1548,7 +1540,7 @@ ar: title: متابِع جديد follow_request: action: إدارة طلبات المتابَعة - body: "طلب %{name} متابعتك" + body: طلب %{name} متابعتك subject: 'متابع مُعلّق: %{name}' title: طلب متابَعة جديد mention: @@ -1565,7 +1557,7 @@ ar: status: subject: "%{name} نشر للتو" update: - subject: "قام %{name} بتحرير منشور" + subject: قام %{name} بتحرير منشور notifications: administration_emails: إشعارات البريد الإلكتروني الإدارية email_events: الأحداث للإشعارات عبر البريد الإلكتروني @@ -1594,7 +1586,7 @@ ar: next: التالي older: الأقدَم prev: السابق - truncate: "و" + truncate: و polls: errors: already_voted: لقد قمت بالتصويت على استطلاع الرأي هذا مِن قبل @@ -1732,37 +1724,37 @@ ar: statuses: attached: audio: - zero: "%{count} مقطع صوتي" - one: "%{count} مقطع صوتي واحد" - two: "%{count} مقطعان صوتيان" few: "%{count} مقطعًا صوتيًا" many: "%{count} مقاطع صوتية" + one: "%{count} مقطع صوتي واحد" other: "%{count} مقاطع صوتية" + two: "%{count} مقطعان صوتيان" + zero: "%{count} مقطع صوتي" description: 'مُرفَق: %{attached}' image: - zero: "%{count} صورة" - one: "صورة %{count}" - two: "%{count} صورة" few: "%{count} صور" many: "%{count} صور" + one: صورة %{count} other: "%{count} صور" + two: "%{count} صورة" + zero: "%{count} صورة" video: - zero: "%{count} فيديوهات" - one: "فيديو %{count}" - two: "%{count} فيديوهات" few: "%{count} فيديوهات" many: "%{count} فيديوهات" + one: فيديو %{count} other: "%{count} فيديوهات" + two: "%{count} فيديوهات" + zero: "%{count} فيديوهات" boosted_from_html: تم إعادة ترقيته مِن %{acct_link} content_warning: 'تحذير عن المحتوى: %{warning}' default_language: نفس لغة الواجهة disallowed_hashtags: - zero: 'يحتوي على وسوم غير مسموح بها: %{tags}' - one: 'يحتوي على وسم غير مسموح به: %{tags}' - two: 'يحتوي على وسوم غير مسموح بها: %{tags}' few: 'يحتوي على وسوم غير مسموح بها: %{tags}' many: 'يحتوي على وسوم غير مسموح بها: %{tags}' + one: 'يحتوي على وسم غير مسموح به: %{tags}' other: 'يحتوي على وسوم غير مسموح بها: %{tags}' + two: 'يحتوي على وسوم غير مسموح بها: %{tags}' + zero: 'يحتوي على وسوم غير مسموح بها: %{tags}' edited_at_html: عُدّل في %{date} errors: in_reply_not_found: إنّ المنشور الذي تحاول الرد عليه غير موجود على ما يبدو. @@ -1775,19 +1767,19 @@ ar: reblog: لا يمكن تثبيت إعادة نشر poll: total_people: - zero: "%{count} شخص" - one: "%{count} شخص واحد" - two: "%{count} شخصين" few: "%{count} أشخاص" many: "%{count} أشخاص" + one: "%{count} شخص واحد" other: "%{count} شخصا" + two: "%{count} شخصين" + zero: "%{count} شخص" total_votes: - zero: "بدون صوت %{count}" - one: "صوت واحد %{count}" - two: "صوتين %{count}" few: "%{count} أصوات" many: "%{count} أصوات" + one: صوت واحد %{count} other: "%{count} صوتا" + two: صوتين %{count} + zero: بدون صوت %{count} vote: صوّت show_more: أظهر المزيد show_newer: إظهار أحدث diff --git a/config/locales/ast.yml b/config/locales/ast.yml index ba9229b5750804..08717c840eaa5f 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -1,3 +1,4 @@ +--- ast: about: about_mastodon_html: 'La rede social del futuru: ¡ensin anuncios nin vixilancia, con un diseñu éticu ya descentralizáu! Controla los tos datos con Mastodon.' @@ -6,7 +7,7 @@ ast: title: Tocante a accounts: last_active: última actividá - nothing_here: '¡Equí nun hai nada!' + nothing_here: "¡Equí nun hai nada!" posts: one: Artículu other: Artículos @@ -19,7 +20,7 @@ ast: accounts: add_email_domain_block: Bloquiar el dominiu de corréu electrónicu approved_msg: Aprobóse correutamente la solicitú de rexistru de «%{username}» - are_you_sure: '¿De xuru que quies facer esta aición?' + are_you_sure: "¿De xuru que quies facer esta aición?" avatar: Avatar by_domain: Dominiu confirming: En confirmación @@ -91,7 +92,7 @@ ast: update_user_role_html: "%{name} camudó'l rol %{target}" empty: Nun s'atopó nengún rexistru. announcements: - destroyed_msg: '¡L''anunciu desanicióse correutamente!' + destroyed_msg: "¡L'anunciu desanicióse correutamente!" edit: title: Edición d'un anunciu empty: Nun s'atopó nengún anunciu. @@ -100,17 +101,17 @@ ast: create: Crear l'anunciu title: Anunciu nuevu publish: Espublizar - published_msg: '¡L''anunciu espublizóse correutamente!' - scheduled_msg: '¡Programóse l''espublizamientu del anunciu!' + published_msg: "¡L'anunciu espublizóse correutamente!" + scheduled_msg: "¡Programóse l'espublizamientu del anunciu!" title: Anuncios unpublish: Dexar d'espublizar - unpublished_msg: '¡L''anunciu dexó d''espublizase correutamente!' - updated_msg: '¡L''anunciu anovóse correutamente!' + unpublished_msg: "¡L'anunciu dexó d'espublizase correutamente!" + updated_msg: "¡L'anunciu anovóse correutamente!" custom_emojis: by_domain: Dominiu copy: Copiar copy_failed_msg: Nun se pudo facer una copia llocal d'esi fustaxe - created_msg: '¡El fustaxe creóse correutamente!' + created_msg: "¡El fustaxe creóse correutamente!" delete: Desaniciar disable: Desactivar disabled: Desactivóse @@ -125,7 +126,7 @@ ast: title: Fustaxes personalizaos uncategorized: Ensin categoría update_failed_msg: Nun se pudo anovar esi fustaxe - updated_msg: '¡El fustaxe anovóse correutamente!' + updated_msg: "¡El fustaxe anovóse correutamente!" upload: Xubir dashboard: active_users: perfiles n'activo @@ -224,11 +225,11 @@ ast: '86400': 1 día '94670856': 3 años relationships: - title: "Rellaciones de: %{acct}" + title: 'Rellaciones de: %{acct}' relays: status: Estáu report_notes: - created_msg: '¡La nota del informe creóse correutamente!' + created_msg: "¡La nota del informe creóse correutamente!" reports: account: notes: @@ -238,7 +239,7 @@ ast: silence_description_html: La cuenta va ser visible namás pa quien xá la siguiere o la buscare manualmente, lo que llenda'l so algame. Esta decisión pue desfacese en cualesquier momentu. Si escueyes esta opción, zárrense tolos informes escontra esta cuenta. actions_description_html: Decidi qué aición tomar pa resolver esti informe. Si tomes una aición punitiva escontra la cuenta de la que s'informó, va unviase un avisu per corréu electrónicu a esa cuenta, esceuto cuando se seleiciona la categoría Puxarra. add_to_report: Amestar más al informe - are_you_sure: '¿De xuru que quies facer esta aición?' + are_you_sure: "¿De xuru que quies facer esta aición?" category: Categoría category_description_html: El motivu pol que s'informó d'esta cuenta y/o conteníu cítase na comunicación cola cuenta de la que s'informó comment_description_html: 'Pa fornir más información, %{name} escribió:' @@ -258,7 +259,7 @@ ast: report: 'Informe #%{id}' reported_by: Perfil qu'informó resolved: Resolvióse - resolved_msg: '¡L''informe resolvióse correutamente!' + resolved_msg: "¡L'informe resolvióse correutamente!" skip_to_actions: Saltar a les aiciones status: Estáu statuses: Conteníu del que s'informó @@ -459,9 +460,9 @@ ast: delete_account: Desaniciu de la cuenta delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Va pidísete que confirmes l'aición. description: - prefix_sign_up: '¡Rexístrate güei en Mastodon!' - dont_have_your_security_key: '¿Nun tienes una llave de seguranza?' - forgot_password: '¿Escaeciesti la contraseña?' + prefix_sign_up: "¡Rexístrate güei en Mastodon!" + dont_have_your_security_key: "¿Nun tienes una llave de seguranza?" + forgot_password: "¿Escaeciesti la contraseña?" login: Aniciar la sesión logout: Zarrar la sesión migrate_account: Cambéu de cuenta @@ -591,12 +592,12 @@ ast: generic: all: Too all_items_on_page_selected_html: - one: "Seleicionóse %{count} elementu d'esta páxina." + one: Seleicionóse %{count} elementu d'esta páxina. other: Seleicionáronse %{count} elementos d'esta páxina. all_matching_items_selected_html: - one: "Seleicionóse %{count} elementu que concasa cola busca." + one: Seleicionóse %{count} elementu que concasa cola busca. other: Seleicionáronse %{count} elementos que concasen cola busca. - changes_saved_msg: '¡Los cambeos guardáronse correutamente!' + changes_saved_msg: "¡Los cambeos guardáronse correutamente!" copy: Copiar delete: Desaniciar deselect: Deseleicionar too @@ -663,7 +664,7 @@ ast: sign_up: subject: "%{name} rexistróse" favourite: - body: '%{name} marcó como favoritu''l to artículu:' + body: "%{name} marcó como favoritu'l to artículu:" subject: "%{name} marcó'l to artículu como favoritu" follow: body: "¡Agora %{name} siguete!" @@ -672,11 +673,11 @@ ast: body: "%{name} solicitó siguite" title: Solicitú de siguimientu nueva mention: - body: '%{name} mentóte en:' - subject: '%{name} mentóte' + body: "%{name} mentóte en:" + subject: "%{name} mentóte" title: Mención nueva reblog: - body: '%{name} compartió''l to artículu:' + body: "%{name} compartió'l to artículu:" subject: "%{name} compartió'l to artículu" update: subject: "%{name} editó un artículu" @@ -700,7 +701,7 @@ ast: instructions_html: "Escania esti códigu QR con Google Authenticator o otra aplicación asemeyada nel móvil. Dende agora, esa aplicación va xenerar los pases que tienes d'introducir cuando anicies la sesión." manual_instructions: 'Si nun pues escaniar el códigu QR ya tienes d''introducilu manualmente, equí tienes el secretu en testu ensin formatu:' setup: Configurar - wrong_code: '¡El códigu introducíu nun yera válidu! ¿La hora del sirvidor ya la del preséu son correutes?' + wrong_code: "¡El códigu introducíu nun yera válidu! ¿La hora del sirvidor ya la del preséu son correutes?" pagination: next: Siguiente truncate: "…" @@ -817,7 +818,7 @@ ast: one: "%{count} votu" other: "%{count} votos" show_more: Amosar más - title: '%{name}: «%{quote}»' + title: "%{name}: «%{quote}»" visibilities: direct: Mensaxe direutu private: Namás siguidores @@ -885,7 +886,7 @@ ast: explanation: Equí tienes dalgunos conseyos pa que comiences final_action: Comenzar a espublizar subject: Afáyate en Mastodon - title: '¡Afáyate, %{name}!' + title: "¡Afáyate, %{name}!" users: follow_limit_reached: Nun pues siguir a más de %{limit} persones invalid_otp_token: El códigu de l'autenticación en dos pasos nun ye válidu diff --git a/config/locales/be.yml b/config/locales/be.yml index 293888d9ce7674..4d8ea3df993798 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1,3 +1,4 @@ +--- be: about: about_mastodon_html: 'Сацыяльная сетка будучыні: без рэкламы, без карпаратыўнага назірання, этычны дызайн і дэцэнтралізацыя! Валодайце сваімі данымі з Mastodon!' @@ -8,9 +9,9 @@ be: accounts: follow: Падпісацца followers: - one: Падпісчык few: Падпісчыка many: Падпісчыкаў + one: Падпісчык other: Падпісчыкі following: Падпісаны instance_actor_flash: Гэты ўліковы запіс - лічбавы аватар, неабходны для рэпрэзентацыі самога сервера, а не якой-небудзь асобы. Ён выкарыстоўваецца для федэралізацыі і не можа быць замарожаны. @@ -20,9 +21,9 @@ be: pin_errors: following: Вы павінны быць падпісаны на чалавека, якога жадаеце рэкамендаваць posts: - one: Допіс few: Допісы many: Допісаў + one: Допіс other: Допісы posts_tab_heading: Допісы admin: @@ -59,7 +60,7 @@ be: delete: Выдаліць даныя deleted: Выдалены demote: Панізіць у правах - destroyed_msg: "Даныя %{username} цяпер у чарзе на прымусовае выдаленне" + destroyed_msg: Даныя %{username} цяпер у чарзе на прымусовае выдаленне disable: Замарозіць disable_sign_in_token_auth: Выключыць аўтэнтыфікацыю па e-mail токену disable_two_factor_authentication: Адключыць 2FA @@ -110,9 +111,9 @@ be: perform_full_suspension: Выключыць previous_strikes: Ранейшыя скаргі previous_strikes_description_html: - one: Гэты ўліковы запіс мае адну скаргу. few: Гэты ўліковы запіс мае %{count} скаргі. many: Гэты ўліковы запіс мае %{count} скарг. + one: Гэты ўліковы запіс мае адну скаргу. other: Гэты ўліковы запіс мае %{count} скаргаў. promote: Павысіць protocol: Пратакол @@ -229,12 +230,12 @@ be: unsuspend_account: Аднавіць уліковы запіс update_announcement: Абнавіць аб'яву update_custom_emoji: Абнавіць адвольныя эмодзі - update_domain_block: Актуалізаваць блакіроўку дамена + update_domain_block: Актуалізаваць блакіроўку дамена update_ip_block: Абнавіць IP правіла update_status: Абнавіць допіс update_user_role: Абнавіць ролю actions: - approve_appeal_html: "Карыстальнік %{name} ухваліў запыт на мадэрацыю %{target}" + approve_appeal_html: Карыстальнік %{name} ухваліў запыт на мадэрацыю %{target} approve_user_html: "%{name} пацвердзіў рэгістрацыю ад %{target}" assigned_to_self_report_html: "%{name} прызначыў справаздачу %{target} на сябе\n" change_email_user_html: "%{name} змяніў паштовы адрас карыстальніка %{target}" @@ -269,7 +270,7 @@ be: enable_custom_emoji_html: "%{name} уключыў эмодзі %{target}" enable_sign_in_token_auth_user_html: "%{name} уключыў(ла) такенную e-mail праверку для %{target}" enable_user_html: "%{name} уключыў уваход для карыстальніка %{target}" - memorialize_account_html: "Карыстальнік %{name} пераключыў уліковы запіс %{target} у старонку памяці" + memorialize_account_html: Карыстальнік %{name} пераключыў уліковы запіс %{target} у старонку памяці promote_user_html: "%{name} павысіў карыстальніка %{target}" reject_appeal_html: "%{name} адхіліў запыт на абскарджанне %{target}" reject_user_html: "%{name} адхіліў рэгістрацыю з %{target}" @@ -280,12 +281,12 @@ be: resolve_report_html: "%{name} вырашыў скаргу %{target}" sensitive_account_html: "%{name} адзначыў медыя %{target} як далікатнае" silence_account_html: "%{name} абмежаваў уліковы запіс %{target}" - suspend_account_html: "Уліковы запіс %{target} выключаны %{name}" + suspend_account_html: Уліковы запіс %{target} выключаны %{name} unassigned_report_html: "%{name} знял(а) прызначэнне скаргі %{target}" unblock_email_account_html: "%{name} разблакіраваў эл. пошту %{target}" unsensitive_account_html: "%{name} зняў адзнаку далікатнае з медыя %{target}" unsilence_account_html: "%{name} зняў ліміт з уліковага запісу %{target}" - unsuspend_account_html: "Уліковы запіс %{target} адноўлены %{name}" + unsuspend_account_html: Уліковы запіс %{target} адноўлены %{name} update_announcement_html: "%{name} абнавіў аб'яву %{target}" update_custom_emoji_html: "%{name} абнавіў эмодзі %{target}" update_domain_block_html: "%{name} абнавіў блакіроўку дамена для %{target}" @@ -356,24 +357,24 @@ be: new_users: новыя карыстальнікі opened_reports: скарг прынята pending_appeals_html: - one: "%{count} апеляцыя ў чарзе" few: "%{count} апеляцыі ў чарзе" many: "%{count} апеляцый у чарзе" + one: "%{count} апеляцыя ў чарзе" other: "%{count} апеляцыі ў чарзе" pending_reports_html: - one: "%{count} справаздача ў апрацоўцы" few: "%{count} справаздачы ў апрацоўцы" many: "%{count} справаздач у апрацоўцы" + one: "%{count} справаздача ў апрацоўцы" other: "%{count} справаздачы ў апрацоўцы" pending_tags_html: - one: "%{count} хэштэг у чарзе" few: "%{count} хэштэгі ў чарзе" many: "%{count} хэштэгаў у чарзе" + one: "%{count} хэштэг у чарзе" other: "%{count} хэштэга ў чарзе" pending_users_html: - one: "%{count} карыстальнік у чарзе" few: "%{count} карыстальнікі ў чарзе" many: "%{count} карыстальнікаў у чарзе" + one: "%{count} карыстальнік у чарзе" other: "%{count} карыстальніка ў чарзе" resolved_reports: скарг разгледжана software: Праграмнае забеспячэнне @@ -439,9 +440,9 @@ be: email_domain_blocks: add_new: Дадаць attempts_over_week: - one: "%{count} спроба рэгістрацыі за апошні тыдзень" few: "%{count} спробы рэгіістрацыі за апошні тыдзень" many: "%{count} спроб рэгіістрацыі за апошні тыдзень" + one: "%{count} спроба рэгістрацыі за апошні тыдзень" other: "%{count} спроб рэгіістрацыі за апошні тыдзень" created_msg: Дамен эл. пошты паспяхова заблакіраваны delete: Выдаліць @@ -484,15 +485,15 @@ be: instances: availability: description_html: - one: Калі дастаўка на дамен не атрымоўваецца праз %{count} дзень, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка з дамена. few: Калі дастаўка на дамен не атрымоўваецца праз %{count} іншыя дні, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка з дамена. many: Калі дастаўка на дамен не атрымоўваецца праз %{count} іншых дзён, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка з дамена. + one: Калі дастаўка на дамен не атрымоўваецца праз %{count} дзень, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка з дамена. other: Калі дастаўка на дамен не атрымоўваецца праз %{count} іншага дня, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка з дамена. failure_threshold_reached: Парог памылак дасягнуты %{date}. failures_recorded: - one: Памылковых спроб за %{count} дзень. few: Памылковых спроб за %{count} розныя дні. many: Памылковых спроб за %{count} розных дзён. + one: Памылковых спроб за %{count} дзень. other: Памылковых спроб за %{count} розныя дні. no_failures_recorded: Памылак не зарэгістравана. title: Дасяжнасць @@ -536,9 +537,9 @@ be: destroyed_msg: Даныя з %{domain} цяпер стаяць у чарзе на неадкладнае выдаленне. empty: Даменаў не знойдзена. known_accounts: - one: "%{count} вядомых уліковых запісаў" few: "%{count} вядомых уліковых запісы" many: "%{count} вядомых уліковых запісаў" + one: "%{count} вядомых уліковых запісаў" other: "%{count} вядомых уліковых запісаў" moderation: all: Усе @@ -579,11 +580,11 @@ be: no_ip_block_selected: Ніякія правілы IP не былі змененыя, таму што ні адно з іх не было выбрана title: IP правілы relationships: - title: "Зносіны %{acct}" + title: Зносіны %{acct} relays: add_new: Дадаць новы рэтранслятар delete: Выдаліць - description_html: Федэрацыйны рэтранслятар - гэта прамежкавы сервер, які абменьваецца вялікімі аб'ёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і публікуюць на ім. Гэта можа дапамагчы малым і сярэднім серверам выяўляць кантэнт з fediverse, для чаго лакальным карыстальнікам у адваротным выпадку трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах. + description_html: "Федэрацыйны рэтранслятар - гэта прамежкавы сервер, які абменьваецца вялікімі аб'ёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і публікуюць на ім. Гэта можа дапамагчы малым і сярэднім серверам выяўляць кантэнт з fediverse, для чаго лакальным карыстальнікам у адваротным выпадку трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах." disable: Адключыць disabled: Адключана enable: Уключыць @@ -602,9 +603,9 @@ be: reports: account: notes: - one: "%{count} нататка" few: "%{count} нататкі" many: "%{count} нататак" + one: "%{count} нататка" other: "%{count} нататкі" action_log: Журнал аўдыту action_taken_by: Дзеянне выканана @@ -687,9 +688,9 @@ be: roles: add_new: Дадаць ролю assigned_users: - one: "%{count} карыстальнік" few: "%{count} карыстальнікі" many: "%{count} карыстальнікаў" + one: "%{count} карыстальнік" other: "%{count} карыстальніка" categories: administration: Адміністрацыя @@ -703,9 +704,9 @@ be: everyone: Дазволы па змаўчанні everyone_full_description_html: Гэта базавая роля, якая ўплывае на ўсіх карыстальнікаў, нават без прызначанай ролі. Усе астатнія ролі ўспадкоўваюць ад яго дазволы. permissions_count: - one: "%{count} дазвол" few: "%{count} дазволы" many: "%{count} дазволаў" + one: "%{count} дазвол" other: "%{count} дазволу" privileges: administrator: Адміністратар @@ -852,7 +853,7 @@ be: none: "%{name} даслаў папярэджанне %{target}" sensitive: "%{name} пазначыў уліковы запіс %{target} як уразлівы" silence: "%{name} абмежаваў уліковы запіс %{target}" - suspend: "Уліковы запіс %{target} выключаны %{name}" + suspend: Уліковы запіс %{target} выключаны %{name} appeal_approved: Абскарджана appeal_pending: Апеляцыя разглядаецца appeal_rejected: Абскарджанне адхілена @@ -913,9 +914,9 @@ be: publishers: no_publisher_selected: Выдаўцы не былі зменены, таму што ніводзін не быў абраны shared_by_over_week: - one: Абагуліў адзін чалавек за апошні тыдзень few: Абагулілі %{count} чалавекі за апошні тыдзень many: Абагулілі %{count} чалавек за апошні тыдзень + one: Абагуліў адзін чалавек за апошні тыдзень other: Абагулілі %{count} чалавек за апошні тыдзень title: Актуальныя спасылкі usage_comparison: Выкарыстоўвалася %{today} разоў сёння, у параўнанні з %{yesterday} учора @@ -937,9 +938,9 @@ be: no_status_selected: Ніводны папулярны допіс не быў зменены, бо ніводны не быў выбраны not_discoverable: Аўтар вырашыў быць нябачным shared_by: - one: Пашыраны або ўпадабаны %{friendly_count} раз few: Пашыраны або ўпадабаны %{friendly_count} разы many: Пашыраны або ўпадабаны %{friendly_count} разоў + one: Пашыраны або ўпадабаны %{friendly_count} раз other: Пашыраны або ўпадабаны %{friendly_count} разоў title: Актуальныя допісы tags: @@ -963,9 +964,9 @@ be: usable: Магчыма выкарыстаць usage_comparison: Выкарыстоўвалася %{today} разоў сёння, у параўнанні з %{yesterday} учора used_by_over_week: - one: Выкарыстаў адзін чалавек за апошні тыдзень few: Выкарысталі %{count} чалавекі за апошні тыдзень many: Выкарысталі %{count} чалавек за апошні тыдзень + one: Выкарыстаў адзін чалавек за апошні тыдзень other: Выкарысталі %{count} чалавек за апошні тыдзень title: Актуальныя trending: Папулярныя @@ -978,7 +979,7 @@ be: webhooks: add_new: Дадаць канцавую кропку delete: Выдаліць - description_html: Вэбхук дазваляе Mastodon адпраўляць апавяшчэнні ў рэальным часе аб выбраных падзеях у вашай уласнай праграме, каб яна магла аўтаматычна рэагаваць на іх. + description_html: "Вэбхук дазваляе Mastodon адпраўляць апавяшчэнні ў рэальным часе аб выбраных падзеях у вашай уласнай праграме, каб яна магла аўтаматычна рэагаваць на іх." disable: Адключыць disabled: Адключана edit: Рэдагаваць канцавую кропку @@ -986,9 +987,9 @@ be: enable: Уключыць enabled: Уключана enabled_events: - one: 1 актыўная падзея few: "%{count} актыўныя падзеі" many: "%{count} актыўных падзей" + one: 1 актыўная падзея other: "%{count} актыўнай падзеі" events: Падзеі new: Новая вэбхука @@ -1280,19 +1281,19 @@ be: expires_in: Сканчаецца праз %{distance} expires_on: Сканчаецца %{date} keywords: - one: "%{count} ключавое слова" few: "%{count} ключавыя словы" many: "%{count} ключавых слоў" + one: "%{count} ключавое слова" other: "%{count} ключавога слова" statuses: - one: "%{count} допіс" few: "%{count} допісы" many: "%{count} допісаў" + one: "%{count} допіс" other: "%{count} допісу" statuses_long: - one: "%{count} допіс схаваны" few: "%{count} допісы схаваны" many: "%{count} допісаў схавана" + one: "%{count} допіс схаваны" other: "%{count} допісу схавана" title: Фільтры new: @@ -1308,14 +1309,14 @@ be: generic: all: Усе all_items_on_page_selected_html: - one: "На гэтай старонцы абраны %{count} элемент." few: На гэтай старонцы абраныя ўсе %{count} элементы. many: На гэтай старонцы абраныя ўсе %{count} элементаў. + one: На гэтай старонцы абраны %{count} элемент. other: На гэтай старонцы абраныя усі %{count} элементаў. all_matching_items_selected_html: - one: "Абраны %{count} элемент, які адпавядае вашаму пошуку." few: Абраныя ўсе %{count} элементы, якія адпавядаюць вашаму пошуку. many: Абраныя ўсе %{count} элементаў, якія адпавядаюць вашаму пошуку. + one: Абраны %{count} элемент, які адпавядае вашаму пошуку. other: Абраныя %{count} элементаў, якія адпавядаюць вашаму пошуку. cancel: Скасаваць changes_saved_msg: Змены паспяхова захаваны! @@ -1327,15 +1328,15 @@ be: order_by: Парадак save_changes: Захаваць змены select_all_matching_items: - one: Выберыце %{count} элемент, які адпавядае вашаму пошуку. few: Выберыце ўсе %{count} элементы, якія адпавядаюць вашаму пошуку. many: Выберыце ўсе %{count} элементаў, якія адпавядаюць вашаму пошуку. + one: Выберыце %{count} элемент, які адпавядае вашаму пошуку. other: Выберыце %{count} элементаў, якія адпавядаюць вашаму пошуку. today: сёння validation_errors: - one: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце памылку ніжэй few: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылкі ніжэй many: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылак ніжэй + one: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце памылку ніжэй other: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылак ніжэй imports: errors: @@ -1409,9 +1410,9 @@ be: generate: Стварыць запрашальную спасылку invited_by: 'Вас запрасіў(-ла):' max_uses: - one: 1 выкарыстанне few: "%{count} выкарыстанні" many: "%{count} выкарыстанняў" + one: 1 выкарыстанне other: "%{count} выкарыстанняў" max_uses_prompt: Неабмежавана prompt: Генерыруйце і абагульвайце паміж іншымі спасылкі для доступу да гэтага сервера @@ -1499,7 +1500,7 @@ be: sign_up: subject: "%{name} зарэгістраваўся" favourite: - body: '%{name} упадабаў ваш пост:' + body: "%{name} упадабаў ваш пост:" subject: "%{name} упадабаў ваш допіс" title: Новае ўпадабанае follow: @@ -1519,11 +1520,11 @@ be: poll: subject: Апытанне ад %{name} скончылася reblog: - body: '%{name} пашырыў ваш пост:' + body: "%{name} пашырыў ваш пост:" subject: "%{name} пашырыў ваш допіс" title: Новае пашырэнне status: - subject: "Новы допіс ад %{name}" + subject: Новы допіс ад %{name} update: subject: "%{name} адрэдагаваў допіс" notifications: @@ -1692,28 +1693,28 @@ be: statuses: attached: audio: - one: "%{count} аўдыяфайл" few: "%{count} аўдыяфайлы" many: "%{count} аўдыяфайлаў" + one: "%{count} аўдыяфайл" other: "%{count} аўдыяфайла" description: 'Дадаткі: %{attached}' image: - one: "%{count} выява" few: "%{count} выявы" many: "%{count} выяваў" + one: "%{count} выява" other: "%{count} выявы" video: - one: "%{count} відэафайл" few: "%{count} відэафайлы" many: "%{count} відэафайлаў" + one: "%{count} відэафайл" other: "%{count} відэафайла" boosted_from_html: Пашырыў уліковы запіс %{acct_link} content_warning: 'Папярэджанне аб змесціве: %{warning}' default_language: Такая, што і мова інтэрфэйсу disallowed_hashtags: - one: 'змяшчае недазволены хэштэг: %{tags}' few: 'змяшчае недазволеныя хэштэгі: %{tags}' many: 'змяшчае недазволеныя хэштэгі: %{tags}' + one: 'змяшчае недазволены хэштэг: %{tags}' other: 'утрымлівае недазволеныя хэштэгі: %{tags}' edited_at_html: Адрэдагавана %{date} errors: @@ -1727,14 +1728,14 @@ be: reblog: Немагчыма замацаваць пашырэнне poll: total_people: - one: "%{count} чалавек" few: "%{count} чалавекі" many: "%{count} чалавек" + one: "%{count} чалавек" other: "%{count} чалавека" total_votes: - one: "%{count} голас" few: "%{count} галасы" many: "%{count} галасоў" + one: "%{count} голас" other: "%{count} голасу" vote: Прагаласаваць show_more: Паказаць больш diff --git a/config/locales/bg.yml b/config/locales/bg.yml index a496728a63d6f0..b1d91875b3f89e 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1,3 +1,4 @@ +--- bg: about: about_mastodon_html: 'Социалната мрежа на бъдещето: Без реклами, без корпоративно наблюдение, с нравствено оформление и децентрализиране! Притежавайте данните си с Mastodon!' @@ -55,7 +56,7 @@ bg: delete: Изтриване на данни deleted: Изтрито demote: Понижаване - destroyed_msg: "Данните на %{username} вече са на опашка за незабавно изтриване" + destroyed_msg: Данните на %{username} вече са на опашка за незабавно изтриване disable: Замразяване disable_sign_in_token_auth: Изключване на удостоверяването с маркер по имейл disable_two_factor_authentication: Изключване на 2факт. удостов. @@ -557,11 +558,11 @@ bg: no_ip_block_selected: Няма променени правила за IP, тъй като нито едно не бе избрано title: Правила за IP relationships: - title: "Отношения на %{acct}" + title: Отношения на %{acct} relays: add_new: Добавяне на нов предаващ сървър delete: Изтриване - description_html: Федериращ предаващ сървър е междинен сървър, който обменя огромни количества публични публикации между сървъри, които са записани и публикуват на него. Може да помогне на малки и средно-големи сървъри да открият съдържание от федивселената, който процес иначе би изискал от локалните потребители да следват хора от отдалечени сървъри. + description_html: "Федериращ предаващ сървър е междинен сървър, който обменя огромни количества публични публикации между сървъри, които са записани и публикуват на него. Може да помогне на малки и средно-големи сървъри да открият съдържание от федивселената, който процес иначе би изискал от локалните потребители да следват хора от отдалечени сървъри." disable: Изключване disabled: Изключено enable: Включване @@ -622,7 +623,7 @@ bg: placeholder: Опишете какви действия са били предприети или всякакви други свързани нови неща... title: Бележки notes_description_html: Прегледайте и оставете бележки за други модератори и за вас самите след време - processed_msg: 'Доклад №%{id} успешно обработен' + processed_msg: Доклад №%{id} успешно обработен quick_actions_description_html: 'Предприемете бързо действие или превъртете надолу, за да видите докладваното съдържание:' remote_user_placeholder: отдалеченият потребител от %{instance} reopen: Отваряне пак на доклад @@ -646,7 +647,7 @@ bg: mark_as_sensitive_html: Означаване на мултимедийните обидни публикации като деликатни silence_html: Силно ограничаване достигането на @%{acct}, което прави профилът и съдържанието на това лице видимо само до хората, които са го последвали или ръчно търсещите профила suspend_html: Спирането на @%{acct} ще направи профилът и съдържанието недостъпни и невъзможни за взаимодействие - close_report: 'Отбелязване на доклад №%{id} като решен' + close_report: Отбелязване на доклад №%{id} като решен close_reports_html: Означаване на всички доклади срещу @%{acct} като решени delete_data_html: Изтриване на профила и съдържанието на @%{acct} за 30 дни от сега, освен ако междувременно не получи спиране preview_preamble_html: "@%{acct} ще получи предупреждение със следното съдържание:" @@ -944,7 +945,7 @@ bg: webhooks: add_new: Добавяне на крайна точка delete: Изтриване - description_html: Уеб обратно повикване позволява на Mastodon да насочи известия в реално време за избрани събития към вашето приложение, така че то да може да активира реакции автоматично. + description_html: "Уеб обратно повикване позволява на Mastodon да насочи известия в реално време за избрани събития към вашето приложение, така че то да може да активира реакции автоматично." disable: Деактивиране disabled: Деактивирано edit: Редактиране на крайната точка @@ -1461,8 +1462,8 @@ bg: title: Нови заявки за последване mention: action: Отговор - body: '%{name} те спомена в:' - subject: '%{name} те спомена' + body: "%{name} те спомена в:" + subject: "%{name} те спомена" title: Ново споменаване poll: subject: Анкетата от %{name} приключи diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 931824c0e6cefa..411339e9a11952 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -1,6 +1,7 @@ +--- bn: about: - about_mastodon_html: 'মাস্টাডন উন্মুক্ত ইন্টারনেটজালের নিয়ম এবং স্বাধীন ও মুক্ত উৎসের সফটওয়্যারের ভিত্তিতে তৈরী একটি সামাজিক যোগাযোগ মাধ্যম। এটি ইমেইলের মত বিকেন্দ্রীভূত।' + about_mastodon_html: মাস্টাডন উন্মুক্ত ইন্টারনেটজালের নিয়ম এবং স্বাধীন ও মুক্ত উৎসের সফটওয়্যারের ভিত্তিতে তৈরী একটি সামাজিক যোগাযোগ মাধ্যম। এটি ইমেইলের মত বিকেন্দ্রীভূত। contact_missing: নেই contact_unavailable: প্রযোজ্য নয় hosted_on: এই মাস্টাডনটি আছে %{domain} এ diff --git a/config/locales/br.yml b/config/locales/br.yml index c893ce67eb65f9..e869374573b80b 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -1,3 +1,4 @@ +--- br: about: contact_missing: Andermenet @@ -6,20 +7,20 @@ br: accounts: follow: Heuliañ followers: - one: Heulier·ez - two: Heulier·ez few: Heulier·ez many: Heulier·ez + one: Heulier·ez other: Heulier·ez + two: Heulier·ez following: Koumanantoù last_active: oberiantiz ziwezhañ nothing_here: N'eus netra amañ ! posts: - one: Toud - two: Toudoù few: Toudoù many: Toudoù + one: Toud other: Toud + two: Toudoù posts_tab_heading: Toudoù admin: account_moderation_notes: @@ -92,8 +93,8 @@ br: destroy_status: Dilemel ar c'hannad update_status: Hizivaat ar c'hannad actions: - destroy_status_html: "Dilamet eo bet toud %{target} gant %{name}" - update_status_html: "Hizivaet eo bet toud %{target} gant %{name}" + destroy_status_html: Dilamet eo bet toud %{target} gant %{name} + update_status_html: Hizivaet eo bet toud %{target} gant %{name} title: Renabl aodit announcements: live: War-eeun @@ -192,11 +193,11 @@ br: reports: account: notes: - one: "%{count} a notennoù" - two: "%{count} a notennoù" few: "%{count} a notennoù" many: "%{count} a notennoù" + one: "%{count} a notennoù" other: "%{count} a notennoù" + two: "%{count} a notennoù" action_log: Renabl aodit are_you_sure: Ha sur oc'h? comment: @@ -252,7 +253,7 @@ br: with_media: Gant mediaoù strikes: actions: - delete_statuses: "Dilamet eo bet toudoù %{target} gant %{name}" + delete_statuses: Dilamet eo bet toudoù %{target} gant %{name} trends: allow: Aotren links: @@ -345,11 +346,11 @@ br: index: delete: Dilemel statuses: - one: "%{count} c'hannad" - two: "%{count} gannad" few: "%{count} a gannadoù" many: "%{count} a gannadoù" + one: "%{count} c'hannad" other: "%{count} a gannadoù" + two: "%{count} gannad" title: Siloù statuses: index: @@ -392,12 +393,12 @@ br: mention: action: Respont reblog: - subject: "Gant %{name} eo bet skignet ho toud " + subject: 'Gant %{name} eo bet skignet ho toud ' title: Skignadenn nevez status: - subject: "Embannet ez eus bet traoù gant %{name}" + subject: Embannet ez eus bet traoù gant %{name} update: - subject: "Kemmet eo bet ur c'hannad gant %{name}" + subject: Kemmet eo bet ur c'hannad gant %{name} number: human: decimal_units: @@ -469,11 +470,11 @@ br: statuses: attached: image: - one: "%{count} skeudenn" - two: "%{count} skeudenn" few: "%{count} skeudenn" many: "%{count} skeudenn" + one: "%{count} skeudenn" other: "%{count} skeudenn" + two: "%{count} skeudenn" poll: vote: Mouezhiañ show_more: Diskouez muioc'h @@ -494,7 +495,7 @@ br: time: formats: default: "%d a viz %b %Y, %H:%M" - month: "Miz %b %Y" + month: Miz %b %Y time: "%H:%M" two_factor_authentication: add: Ouzhpennañ diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 19554783383f27..2cdf87d8fd74ca 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1,3 +1,4 @@ +--- ca: about: about_mastodon_html: 'La xarxa social del futur: sense anuncis, sense vigilància corporativa, amb un disseny ètic i descentralització. Amb Mastodon controles les teves dades!' @@ -55,7 +56,7 @@ ca: delete: Esborra les dades deleted: Eliminat demote: Degrada - destroyed_msg: "Les dades de %{username} son a la cua per a ser esborrades en breu" + destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu disable: Inhabilita disable_sign_in_token_auth: Desactivar l'autenticació de token per correu disable_two_factor_authentication: Desactiva 2FA @@ -557,7 +558,7 @@ ca: no_ip_block_selected: No s’ha canviat cap regla IP perquè no s’han seleccionat title: Regles IP relationships: - title: "relacions del %{acct}" + title: relacions del %{acct} relays: add_new: Afegiu un nou relay delete: Elimina @@ -1123,7 +1124,7 @@ ca: about_x_years: "%{count} anys" almost_x_years: "%{count}anys" half_a_minute: Ara mateix - less_than_x_minutes: "fa %{count} minuts" + less_than_x_minutes: fa %{count} minuts less_than_x_seconds: Ara mateix over_x_years: "%{count} anys" x_days: "%{count} dies" @@ -1447,7 +1448,7 @@ ca: sign_up: subject: "%{name} s'ha registrat" favourite: - body: '%{name} ha marcat com a favorit el teu estat:' + body: "%{name} ha marcat com a favorit el teu estat:" subject: "%{name} ha marcat com a favorit el teu estat" title: Favorit nou follow: @@ -1467,7 +1468,7 @@ ca: poll: subject: Ha finalitzat l'enquesta de %{name} reblog: - body: '%{name} ha impulsat el teu estat:' + body: "%{name} ha impulsat el teu estat:" subject: "%{name} ha impulsat el teu estat" title: Nou impuls status: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index b83d1bb82d1ab5..9a974b9ed75606 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -1,3 +1,4 @@ +--- ckb: about: about_mastodon_html: 'تۆڕی کۆمەڵایەتی داهاتوو: هیچ ڕیکلامێک، هیچ چاودێرییەکی کۆمپانیا، دیزاینی ئەخلاقی و لامەرکەزی! خاوەنی داتاکانت بە لە ماستۆدۆن!' @@ -55,7 +56,7 @@ ckb: delete: سڕینەوەی داتا deleted: سڕینەوە demote: پلە نزمکرایەوە - destroyed_msg: "دراوەکانی %{username} لە ڕیزی سڕینەوەن" + destroyed_msg: دراوەکانی %{username} لە ڕیزی سڕینەوەن disable: بەستن disable_sign_in_token_auth: ڕەسەنایەتی نیشانەی ئیمەیڵ لەکاربخە disable_two_factor_authentication: لەکارخستنی 2FA @@ -146,7 +147,7 @@ ckb: unblock_email: کردنەوەی ئیمەیڵ unblocked_email_msg: بەسەرکەوتوویی ئیمەیڵی %{username} کرایەوە unconfirmed_email: ئیمەیڵی پشتڕاستنەکراو - undo_sensitized: ' هەستیار نەکردن' + undo_sensitized: " هەستیار نەکردن" undo_silenced: بێدەنگ ببە undo_suspension: دووبارە ڕاگرتن unsilenced_msg: هەژماری %{username} بە سەرکەوتوویی بێسنوور کرا @@ -431,7 +432,7 @@ ckb: no_ip_block_selected: هیچ ڕێسایەکی IP نەگۆڕدرا وەک ئەوەی هیچ کامیان دەستنیشان نەکران title: یاساکانی IP relationships: - title: "پەیوەنیەکان %{acct}" + title: پەیوەنیەکان %{acct} relays: add_new: زیادکردنی گواستنەوەی نوێ delete: سڕینەوە @@ -488,7 +489,7 @@ ckb: create_and_unresolve: دووبارە کردنەوەی بە تێبینی delete: سڕینەوە placeholder: باسی ئەو کردارانە بکە کە ئەنجام دراون، یان هەر نوێکردنەوەیەکی پەیوەندیداری ت... - title: تێبینی + title: تێبینی notes_description_html: بینین و تێبینی بۆ بەڕێوەبەرانی تر و خودی داهاتووتان بەجێبهێڵە quick_actions_description_html: 'کارێکی خێرا ئەنجام بدە یان بچۆرە خوارەوە بۆ بینینی ناوەڕۆکی ڕاپۆرتکراو:' remote_user_placeholder: بەکارهێنەری دوور لە %{instance} @@ -550,9 +551,9 @@ ckb: body: وردەکاریهەژمارە نوێیەکە لە خوارەوەیە. دەتوانیت ئەم نەرمەکالا پەسەند بکەیت یان ڕەت بکەیتەوە. subject: هەژمارەیەک نوێ بۆ پێداچوونەوە لەسەر %{instance} (%{username}) new_report: - body: "بەکارهێنەری %{reporter} گوزارشی لە بەکارهینەری%{target} دا" + body: بەکارهێنەری %{reporter} گوزارشی لە بەکارهینەری%{target} دا body_remote: کەسێک لە %{domain} گوزارشتی %{target} ناردووە - subject: 'گوزارشتێکی نوی لە %{instance} (#%{id})' + subject: گوزارشتێکی نوی لە %{instance} (#%{id}) aliases: add_new: دروستکردنی ناوی ساختە created_msg: نازناوێکی نوێیان سەرکەوتووانە دروستکرد. ئێستا دەتوانیت دەست بە گواستنەوە کەیت لە هەژمێرە کۆنەکەت. @@ -826,11 +827,11 @@ ckb: title: داواکاری شوینکەوتنی نوێ mention: action: وەڵام - body: '%{name} لێرە ناوی ئێووەی بردووە:' - subject: '%{name} لێرە ناوی ئێووەی بردووە' + body: "%{name} لێرە ناوی ئێووەی بردووە:" + subject: "%{name} لێرە ناوی ئێووەی بردووە" title: ناوبراوەی نوێ reblog: - body: '%{name} نووسیسراوەکەی ئێوەی توتاندەوە:' + body: "%{name} نووسیسراوەکەی ئێوەی توتاندەوە:" subject: "%{name} نووسراوەکەتی دووبارە توتاند" title: توتاندنەوەی نوێ notifications: diff --git a/config/locales/co.yml b/config/locales/co.yml index 6a0635acace009..e613ea76064eed 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -1,3 +1,4 @@ +--- co: about: about_mastodon_html: 'A rete suciale di u futuru: micca pubblicità, micca surveglianza, cuncezzione etica, è dicentralizazione! Firmate in cuntrollu di i vostri dati cù Mastodon!' @@ -47,7 +48,7 @@ co: 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" + destroyed_msg: I dati di %{username} sò avà in fila d'attesa per esse tolti da quì à pocu disable: Disattivà disable_sign_in_token_auth: Disattivà l'autentificazione à codice e-mail disable_two_factor_authentication: Disattivà l’identificazione à 2 fattori @@ -396,7 +397,7 @@ co: no_ip_block_selected: E regule ùn sò micca state mudificate perchè manc'un'era selezziunata title: Regule IP relationships: - title: "Rilazione di %{acct}" + title: Rilazione di %{acct} relays: add_new: Aghjunghje un ripetitore delete: Sguassà @@ -517,7 +518,7 @@ co: new_report: body: "%{reporter} hà palisatu %{target}" body_remote: Qualch’unu da %{domain} hà palisatu %{target} - subject: 'Novu signalamentu nant’à %{instance} (#%{id})' + subject: Novu signalamentu nant’à %{instance} (#%{id}) aliases: add_new: Creà un pseudonimu created_msg: Novu pseudonimu creatu. Pudete avà inizià u trasferimentu da u vechju contu. @@ -780,7 +781,7 @@ co: copy_account_note_text: 'St''utilizatore hà traslucatu dapoi %{acct}, eccu e vostr''anziane note nant''à ellu:' notification_mailer: favourite: - body: '%{name} hà aghjuntu u vostru statutu à i so favuriti :' + body: "%{name} hà aghjuntu u vostru statutu à i so favuriti :" subject: "%{name} hà messu u vostru post in i so favuriti" title: Novu favuritu follow: @@ -794,8 +795,8 @@ co: title: Nova dumanda d’abbunamentu mention: action: Risposta - body: '%{name} v’hà mintuvatu·a indè :' - subject: '%{name} v’hà mintuvatu·a' + body: "%{name} v’hà mintuvatu·a indè :" + subject: "%{name} v’hà mintuvatu·a" title: Nova menzione poll: subject: Un scandagliu da %{name} hè finitu diff --git a/config/locales/cs.yml b/config/locales/cs.yml index d1dc4676c91ddf..03ec9708d54d3c 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1,3 +1,4 @@ +--- cs: about: about_mastodon_html: 'Sociální síť budoucnosti: žádné reklamy, žádné korporátní sledování, etický design a decentralizace! S Mastodonem vlastníte svoje data!' @@ -8,9 +9,9 @@ cs: accounts: follow: Sledovat followers: - one: Sledující few: Sledující many: Sledujících + one: Sledující other: Sledujících following: Sledovaných instance_actor_flash: Tento účet je virtuální aktér, který představuje server samotný, nikoliv jednotlivého uživatele. Používá se pro účely federace a neměl by být pozastaven. @@ -20,9 +21,9 @@ cs: pin_errors: following: Osobu, kterou chcete podpořit, už musíte sledovat posts: - one: Příspěvek few: Příspěvky many: Příspěvků + one: Příspěvek other: Příspěvků posts_tab_heading: Příspěvky admin: @@ -59,7 +60,7 @@ cs: delete: Smazat data deleted: Smazáno demote: Degradovat - destroyed_msg: "Data účtu %{username} jsou nyní ve frontě k okamžitému smazání" + destroyed_msg: Data účtu %{username} jsou nyní ve frontě k okamžitému smazání disable: Zmrazit disable_sign_in_token_auth: Zrušit ověřování e-mailovým tokenem disable_two_factor_authentication: Vypnout 2FA @@ -110,9 +111,9 @@ cs: perform_full_suspension: Pozastavit previous_strikes: Předchozí prohřešky previous_strikes_description_html: - one: Tento účet má jeden prohřešek. few: Tento účet má %{count} prohřešky. many: Tento účet má %{count} prohřešků. + one: Tento účet má jeden prohřešek. other: Tento účet má %{count} prohřešků. promote: Povýšit protocol: Protokol @@ -234,63 +235,63 @@ cs: update_status: Aktualizovat Příspěvek update_user_role: Aktualizovat roli actions: - approve_appeal_html: "Uživatel %{name} schválil odvolání proti rozhodnutí moderátora %{target}" + approve_appeal_html: Uživatel %{name} schválil odvolání proti rozhodnutí moderátora %{target} approve_user_html: "%{name} schválil registraci od %{target}" - assigned_to_self_report_html: "Uživatel %{name} si přidělil hlášení %{target}" - change_email_user_html: "Uživatel %{name} změnil e-mailovou adresu uživatele %{target}" + assigned_to_self_report_html: Uživatel %{name} si přidělil hlášení %{target} + change_email_user_html: Uživatel %{name} změnil e-mailovou adresu uživatele %{target} change_role_user_html: "%{name} změnil roli %{target}" - confirm_user_html: "Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target}" - create_account_warning_html: "Uživatel %{name} poslal %{target} varování" - create_announcement_html: "Uživatel %{name} vytvořil nové oznámení %{target}" + confirm_user_html: Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target} + create_account_warning_html: Uživatel %{name} poslal %{target} varování + create_announcement_html: Uživatel %{name} vytvořil nové oznámení %{target} create_canonical_email_block_html: "%{name} zablokoval e-mail s hash %{target}" - create_custom_emoji_html: "Uživatel %{name} nahrál nové emoji %{target}" - create_domain_allow_html: "Uživatel %{name} povolil federaci s doménou %{target}" - create_domain_block_html: "Uživatel %{name} zablokoval doménu %{target}" - create_email_domain_block_html: "Uživatel %{name} zablokoval e-mailovou doménu %{target}" - create_ip_block_html: "Uživatel %{name} vytvořil pravidlo pro IP %{target}" + create_custom_emoji_html: Uživatel %{name} nahrál nové emoji %{target} + create_domain_allow_html: Uživatel %{name} povolil federaci s doménou %{target} + create_domain_block_html: Uživatel %{name} zablokoval doménu %{target} + create_email_domain_block_html: Uživatel %{name} zablokoval e-mailovou doménu %{target} + create_ip_block_html: Uživatel %{name} vytvořil pravidlo pro IP %{target} create_unavailable_domain_html: "%{name} zastavil doručování na doménu %{target}" create_user_role_html: "%{name} vytvořil %{target} roli" - demote_user_html: "Uživatel %{name} degradoval uživatele %{target}" - destroy_announcement_html: "Uživatel %{name} odstranil oznámení %{target}" + demote_user_html: Uživatel %{name} degradoval uživatele %{target} + destroy_announcement_html: Uživatel %{name} odstranil oznámení %{target} destroy_canonical_email_block_html: "%{name} odblokoval e-mail s hashem %{target}" destroy_custom_emoji_html: "%{name} odstranil emoji %{target}" - destroy_domain_allow_html: "Uživatel %{name} zakázal federaci s doménou %{target}" - destroy_domain_block_html: "Uživatel %{name} odblokoval doménu %{target}" - destroy_email_domain_block_html: "Uživatel %{name} odblokoval e-mailovou doménu %{target}" - destroy_instance_html: "Uživatel %{name} odmazal doménu %{target}" - destroy_ip_block_html: "Uživatel %{name} odstranil pravidlo pro IP %{target}" - destroy_status_html: "Uživatel %{name} odstranil příspěvek uživatele %{target}" + destroy_domain_allow_html: Uživatel %{name} zakázal federaci s doménou %{target} + destroy_domain_block_html: Uživatel %{name} odblokoval doménu %{target} + destroy_email_domain_block_html: Uživatel %{name} odblokoval e-mailovou doménu %{target} + destroy_instance_html: Uživatel %{name} odmazal doménu %{target} + destroy_ip_block_html: Uživatel %{name} odstranil pravidlo pro IP %{target} + destroy_status_html: Uživatel %{name} odstranil příspěvek uživatele %{target} destroy_unavailable_domain_html: "%{name} obnovil doručování na doménu %{target}" destroy_user_role_html: "%{name} odstranil %{target} roli" - disable_2fa_user_html: "Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target}" - disable_custom_emoji_html: "Uživatel %{name} zakázal emoji %{target}" - disable_sign_in_token_auth_user_html: "Uživatel %{name} zrušil ověřování e-mailovým tokenem pro %{target}" - disable_user_html: "Uživatel %{name} zakázal přihlašování pro uživatele %{target}" - enable_custom_emoji_html: "Uživatel %{name} povolil emoji %{target}" - enable_sign_in_token_auth_user_html: "Uživatel %{name} povolil ověřování e-mailovým tokenem pro %{target}" - enable_user_html: "Uživatel %{name} povolil přihlašování pro uživatele %{target}" - memorialize_account_html: "Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku" - promote_user_html: "Uživatel %{name} povýšil uživatele %{target}" - reject_appeal_html: "Uživatel %{name} zamítl odvolání proti rozhodnutí moderátora %{target}" + disable_2fa_user_html: Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target} + disable_custom_emoji_html: Uživatel %{name} zakázal emoji %{target} + disable_sign_in_token_auth_user_html: Uživatel %{name} zrušil ověřování e-mailovým tokenem pro %{target} + disable_user_html: Uživatel %{name} zakázal přihlašování pro uživatele %{target} + enable_custom_emoji_html: Uživatel %{name} povolil emoji %{target} + enable_sign_in_token_auth_user_html: Uživatel %{name} povolil ověřování e-mailovým tokenem pro %{target} + enable_user_html: Uživatel %{name} povolil přihlašování pro uživatele %{target} + memorialize_account_html: Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku + promote_user_html: Uživatel %{name} povýšil uživatele %{target} + reject_appeal_html: Uživatel %{name} zamítl odvolání proti rozhodnutí moderátora %{target} reject_user_html: "%{name} odmítl registraci od %{target}" - remove_avatar_user_html: "Uživatel %{name} odstranil avatar uživatele %{target}" - reopen_report_html: "Uživatel %{name} znovu otevřel hlášení %{target}" + remove_avatar_user_html: Uživatel %{name} odstranil avatar uživatele %{target} + reopen_report_html: Uživatel %{name} znovu otevřel hlášení %{target} resend_user_html: "%{name} znovu odeslal potvrzovací e-mail pro %{target}" - reset_password_user_html: "Uživatel %{name} obnovil heslo uživatele %{target}" - resolve_report_html: "Uživatel %{name} vyřešil hlášení %{target}" + reset_password_user_html: Uživatel %{name} obnovil heslo uživatele %{target} + resolve_report_html: Uživatel %{name} vyřešil hlášení %{target} sensitive_account_html: "%{name} označil média účtu %{target} jako citlivá" - silence_account_html: "Uživatel %{name} omezil účet %{target}" - suspend_account_html: "Uživatel %{name} pozastavil účet uživatele %{target}" - unassigned_report_html: "Uživatel %{name} odebral hlášení %{target}" - unblock_email_account_html: "Uživatel %{name} odblokoval e-mailovou adresu %{target}" + silence_account_html: Uživatel %{name} omezil účet %{target} + suspend_account_html: Uživatel %{name} pozastavil účet uživatele %{target} + unassigned_report_html: Uživatel %{name} odebral hlášení %{target} + unblock_email_account_html: Uživatel %{name} odblokoval e-mailovou adresu %{target} unsensitive_account_html: "%{name} zrušil označení médií účtu %{target} jako citlivých" - unsilence_account_html: "Uživatel %{name} zrušil omezení účtu %{target}" - unsuspend_account_html: "Uživatel %{name} zrušil pozastavení účtu uživatele %{target}" - update_announcement_html: "Uživatel %{name} aktualizoval oznámení %{target}" - update_custom_emoji_html: "Uživatel %{name} aktualizoval emoji %{target}" + unsilence_account_html: Uživatel %{name} zrušil omezení účtu %{target} + unsuspend_account_html: Uživatel %{name} zrušil pozastavení účtu uživatele %{target} + update_announcement_html: Uživatel %{name} aktualizoval oznámení %{target} + update_custom_emoji_html: Uživatel %{name} aktualizoval emoji %{target} update_domain_block_html: "%{name} aktualizoval blokaci domény %{target}" update_ip_block_html: "%{name} změnil pravidlo pro IP %{target}" - update_status_html: "Uživatel %{name} aktualizoval příspěvek uživatele %{target}" + update_status_html: Uživatel %{name} aktualizoval příspěvek uživatele %{target} update_user_role_html: "%{name} změnil %{target} roli" deleted_account: smazaný účet empty: Nebyly nalezeny žádné záznamy. @@ -356,24 +357,24 @@ cs: new_users: noví uživatelé opened_reports: podáno hlášení pending_appeals_html: - one: "%{count} čekající odvolání" few: "%{count} čekající odvolání" many: "%{count} čekajících odvolání" + one: "%{count} čekající odvolání" other: "%{count} čekajících odvolání" pending_reports_html: - one: "%{count} čekající hlášení" few: "%{count} čekající hlášení" many: "%{count} čekajících hlášení" + one: "%{count} čekající hlášení" other: "%{count} čekajících hlášení" pending_tags_html: - one: "%{count} čekající hashtag" few: "%{count} čekající hashtagy" many: "%{count} čekajících hashtagů" + one: "%{count} čekající hashtag" other: "%{count} čekajících hashtagů" pending_users_html: - one: "%{count} čekající uživatel" few: "%{count} čekající uživatelé" many: "%{count} čekajících uživatelů" + one: "%{count} čekající uživatel" other: "%{count} čekajících uživatelů" resolved_reports: vyřešeno hlášení software: Software @@ -439,9 +440,9 @@ cs: email_domain_blocks: add_new: Přidat attempts_over_week: - one: "%{count} pokus o registraci za poslední týden" few: "%{count} pokusy o registraci za poslední týden" many: "%{count} pokusů o registraci za poslední týden" + one: "%{count} pokus o registraci za poslední týden" other: "%{count} pokusů o registraci za poslední týden" created_msg: E-mailová doména úspěšně zablokována delete: Smazat @@ -484,15 +485,15 @@ cs: instances: availability: description_html: - one: Pokud doručování na doménu selže %{count} den, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení od domény. few: Pokud doručování na doménu selže ve %{count} různých dnech, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení od domény. many: Pokud doručování na doménu selže v %{count} různých dnech, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení od domény. + one: Pokud doručování na doménu selže %{count} den, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení od domény. other: Pokud doručování na doménu selže v %{count} různých dnech, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení od domény. failure_threshold_reached: Prahu selhání dosaženo %{date}. failures_recorded: - one: Neúspěšný pokus v %{count} dni. few: Neúspěšné pokusy ve %{count} různých dnech. many: Neúspěšné pokusy ve %{count} různých dnech. + one: Neúspěšný pokus v %{count} dni. other: Neúspěšné pokusy ve %{count} různých dnech. no_failures_recorded: Žádné zaznamenané selhání. title: Dostupnost @@ -536,9 +537,9 @@ cs: destroyed_msg: Data z %{domain} nyní čekají na smazání. empty: Nebyly nalezeny žádné domény. known_accounts: - one: "%{count} známý účet" few: "%{count} známé účty" many: "%{count} známých účtů" + one: "%{count} známý účet" other: "%{count} známých účtů" moderation: all: Všechny @@ -579,11 +580,11 @@ cs: no_ip_block_selected: Nebyla změněna žádná IP pravidla, protože nebylo žádné zaškrtnuto title: IP pravidla relationships: - title: "Vztahy uživatele %{acct}" + title: Vztahy uživatele %{acct} relays: add_new: Přidat nový most delete: Smazat - description_html: Federovací most je zprostředkující server, který vyměňuje velké objemy veřejných příspěvků mezi servery, které je z něj odebírají a publikují na něj. Může pomoci malým a středně velkým serverům objevovat obsah z fedivesmíru, což by jinak vyžadovalo, aby místní uživatelé ručně začali sledovat jiné lidi na vzdálených serverech. + description_html: "Federovací most je zprostředkující server, který vyměňuje velké objemy veřejných příspěvků mezi servery, které je z něj odebírají a publikují na něj. Může pomoci malým a středně velkým serverům objevovat obsah z fedivesmíru, což by jinak vyžadovalo, aby místní uživatelé ručně začali sledovat jiné lidi na vzdálených serverech." disable: Zakázat disabled: Zakázáno enable: Povolit @@ -602,9 +603,9 @@ cs: reports: account: notes: - one: "%{count} poznámka" few: "%{count} poznámky" many: "%{count} poznámek" + one: "%{count} poznámka" other: "%{count} poznámek" action_log: Protokol auditu action_taken_by: Akci vykonal uživatel @@ -646,7 +647,7 @@ cs: placeholder: Popište, jaké akce byly vykonány, nebo jakékoliv jiné související aktuality… title: Poznámky notes_description_html: Zobrazit a zanechat poznámky pro ostatní moderátory i sebe v budoucnu - processed_msg: 'Nahlášení č.%{id} bylo úspěšně zpracováno' + processed_msg: Nahlášení č.%{id} bylo úspěšně zpracováno quick_actions_description_html: 'Proveďte rychlou akci nebo skrolujte dolů pro nahlášený obsah:' remote_user_placeholder: vzdálený uživatel z %{instance} reopen: Znovu otevřít hlášení @@ -670,7 +671,7 @@ cs: mark_as_sensitive_html: Označit média urážejících příspěvků za citlivá silence_html: Výrazně omezit dosah @%{acct} tím, že daný profil a jeho obsah bude viditelný pouze těm lidem, kteří ho sledují nebo jej ručně vyhledají suspend_html: Pozastavit @%{acct}, což daný profil a obsah znepřístupní a neumožní se interakce s ním - close_report: 'Označit nahlášení č.%{id} za vyřešené' + close_report: Označit nahlášení č.%{id} za vyřešené close_reports_html: Označit všechna hlášení proti @%{acct} jako vyřešená delete_data_html: Odstranit profil a obsah @%{acct} ode dneška po 30 dní, pokud mezitím nebude zrušeno jeho pozastavení preview_preamble_html: "@%{acct} obdrží varování s následujícím obsahem:" @@ -687,9 +688,9 @@ cs: roles: add_new: Přidat roli assigned_users: - one: "%{count} uživatel" few: "%{count} uživatelé" many: "%{count} uživatelů" + one: "%{count} uživatel" other: "%{count} uživatelů" categories: administration: Administrace @@ -703,9 +704,9 @@ cs: everyone: Výchozí oprávnění everyone_full_description_html: Toto je základní role ovlivňující všechny uživatele, a to i bez přiřazené role. Všechny ostatní role od ní dědí oprávnění. permissions_count: - one: "%{count} oprávnění" few: "%{count} oprávnění" many: "%{count} oprávnění" + one: "%{count} oprávnění" other: "%{count} oprávnění" privileges: administrator: Správce @@ -843,13 +844,13 @@ cs: with_media: S médii strikes: actions: - delete_statuses: "Uživatel %{name} smazal příspěvky %{target}" - disable: "Uživatel %{name} zmrazil účet %{target}" - mark_statuses_as_sensitive: "Uživatel %{name} označil příspěvky %{target} jako citlivé" - none: "Uživatel %{name} poslal %{target} varování" - sensitive: "Uživatel %{name} označil účet %{target} jako citlivý" - silence: "Uživatel %{name} omezil účet %{target}" - suspend: "Uživatel %{name} pozastavil účet %{target}" + delete_statuses: Uživatel %{name} smazal příspěvky %{target} + disable: Uživatel %{name} zmrazil účet %{target} + mark_statuses_as_sensitive: Uživatel %{name} označil příspěvky %{target} jako citlivé + none: Uživatel %{name} poslal %{target} varování + sensitive: Uživatel %{name} označil účet %{target} jako citlivý + silence: Uživatel %{name} omezil účet %{target} + suspend: Uživatel %{name} pozastavil účet %{target} appeal_approved: Podáno odvolání appeal_pending: Čekající odvolání appeal_rejected: Odvolání zamítnuto @@ -910,9 +911,9 @@ cs: publishers: no_publisher_selected: Nebyly změněny žádní publikující, protože nikdo nebyl vybrán shared_by_over_week: - one: Sdílený jedním člověkem za poslední týden few: Sdílený %{count} lidmi za poslední týden many: Sdílený %{count} lidmi za poslední týden + one: Sdílený jedním člověkem za poslední týden other: Sdílený %{count} lidmi za poslední týden title: Populární odkazy usage_comparison: Za dnešek %{today} sdílení, oproti %{yesterday} včera @@ -934,10 +935,10 @@ cs: no_status_selected: Nebyly změněny žádné populární příspěvky, protože nikdo nebyl vybrán not_discoverable: Autor nepovolil navrhování svého účtu ostatním shared_by: + few: "%{friendly_count} sdílení nebo oblíbení" + many: "%{friendly_count} sdílení nebo oblíbení" one: Jednou sdílen nebo oblíben - few: '%{friendly_count} sdílení nebo oblíbení' - many: '%{friendly_count} sdílení nebo oblíbení' - other: '%{friendly_count} sdílení nebo oblíbení' + other: "%{friendly_count} sdílení nebo oblíbení" title: Populární příspěvky tags: current_score: Aktuální skóre %{score} @@ -960,9 +961,9 @@ cs: usable: Může být používán usage_comparison: Za dnešek %{today} použití, oproti %{yesterday} včera used_by_over_week: - one: Použit jedním člověkem za poslední týden few: Použit %{count} lidmi za poslední týden many: Použit %{count} lidmi za poslední týden + one: Použit jedním člověkem za poslední týden other: Použit %{count} lidmi za poslední týden title: Trendy trending: Populární @@ -975,7 +976,7 @@ cs: webhooks: add_new: Přidat koncový bod delete: Smazat - description_html: Webhook umožňuje Mastodonu o vybraných událostech notifikovat v reálném čase vaši vlastní aplikaci, aby mohla automaticky spouštět reakce. + description_html: "Webhook umožňuje Mastodonu o vybraných událostech notifikovat v reálném čase vaši vlastní aplikaci, aby mohla automaticky spouštět reakce." disable: Vypnout disabled: Vypnuto edit: Upravit koncový bod @@ -983,9 +984,9 @@ cs: enable: Zapnout enabled: Aktivní enabled_events: - one: 1 zapnutá událost few: "%{count} zapnuté události" many: "%{count} zapnutých událostí" + one: 1 zapnutá událost other: "%{count} zapnutých událostí" events: Události new: Nový webhook @@ -1004,7 +1005,7 @@ cs: sensitive: označení jeho účtu jako citlivého silence: omezení jeho účtu suspend: pozastavení jeho účtu - body: "Uživatel %{target} se odvolává proti rozhodnutí moderátora %{action_taken_by} z %{date}, kterým bylo %{type}. Napsal:" + body: 'Uživatel %{target} se odvolává proti rozhodnutí moderátora %{action_taken_by} z %{date}, kterým bylo %{type}. Napsal:' next_steps: Můžete schválit odvolání pro vrácení rozhodnutí moderátora, nebo to ignorovat. subject: Uživatel %{username} se odvolává proti rozhodnutí moderátora na %{instance} new_critical_software_updates: @@ -1014,7 +1015,7 @@ cs: body: Detaily nového účtu jsou uvedeny níže. Tuto žádost můžete schválit nebo zamítnout. subject: Nový účet na serveru %{instance} čekající na posouzení (%{username}) new_report: - body: "Uživatel %{reporter} nahlásil uživatele %{target}" + body: Uživatel %{reporter} nahlásil uživatele %{target} body_remote: Někdo z domény %{domain} nahlásil uživatele %{target} subject: Nové hlášení pro %{instance} (#%{id}) new_software_updates: @@ -1277,19 +1278,19 @@ cs: expires_in: Vyprší za %{distance} expires_on: Vyprší %{date} keywords: - one: "%{count} klíčové slovo" few: "%{count} klíčová slova" many: "%{count} klíčových slov" + one: "%{count} klíčové slovo" other: "%{count} klíčových slov" statuses: - one: "%{count} příspěvek" few: "%{count} příspěvků" many: "%{count} příspěvků" + one: "%{count} příspěvek" other: "%{count} příspěvků" statuses_long: - one: "%{count} skrytý příspěvek" few: "%{count} skryté příspěvky" many: "%{count} skrytých příspěvků" + one: "%{count} skrytý příspěvek" other: "%{count} skrytých příspěvků" title: Filtry new: @@ -1305,14 +1306,14 @@ cs: generic: all: Všechny all_items_on_page_selected_html: + few: "%{count} položky na této stránce jsou vybrány." + many: "%{count} položek na této stránce je vybráno." one: "%{count} položka na této stránce vybrána." - few: %{count} položky na této stránce jsou vybrány. - many: %{count} položek na této stránce je vybráno. other: Všech %{count} položek na této stránce vybráno. all_matching_items_selected_html: + few: "%{count} položky odpovídající vašemu hledání jsou vybrány." + many: "%{count} položek odpovídající vašemu hledání je vybráno." one: "%{count} položka odpovídající vašemu hledání je vybrána." - few: %{count} položky odpovídající vašemu hledání jsou vybrány. - many: %{count} položek odpovídající vašemu hledání je vybráno. other: Všech %{count} položek odpovídající vašemu hledání je vybráno. cancel: Zrušit changes_saved_msg: Změny byly úspěšně uloženy! @@ -1324,15 +1325,15 @@ cs: order_by: Seřadit podle save_changes: Uložit změny select_all_matching_items: - one: Vybrat %{count} položku odpovídající vašemu hledání. few: Vybrat %{count} položky odpovídající vašemu hledání. many: Vybrat všech %{count} položek odpovídajících vašemu hledání. + one: Vybrat %{count} položku odpovídající vašemu hledání. other: Vybrat všech %{count} položek odpovídajících vašemu hledání. today: dnes validation_errors: - one: Něco ještě není úplně v pořádku! Zkontrolujte prosím chybu uvedenou níže few: Něco ještě není úplně v pořádku! Zkontrolujte prosím %{count} chyby uvedené níže many: Něco ještě není úplně v pořádku! Zkontrolujte prosím %{count} chyb uvedených níže + one: Něco ještě není úplně v pořádku! Zkontrolujte prosím chybu uvedenou níže other: Něco ještě není úplně v pořádku! Zkontrolujte prosím %{count} chyb uvedených níže imports: errors: @@ -1388,9 +1389,9 @@ cs: generate: Vygenerovat zvací odkaz invited_by: 'Pozval váš uživatel:' max_uses: - one: 1 použití few: "%{count} použití" many: "%{count} použití" + one: 1 použití other: "%{count} použití" max_uses_prompt: Bez omezení prompt: Generujte a sdílejte s ostatními odkazy umožňující jim přístup na tento server @@ -1459,12 +1460,12 @@ cs: notification_mailer: admin: report: - subject: "Uživatel %{name} podal hlášení" + subject: Uživatel %{name} podal hlášení sign_up: - subject: "Uživatel %{name} se zaregistroval" + subject: Uživatel %{name} se zaregistroval favourite: body: 'Váš příspěvek si oblíbil uživatel %{name}:' - subject: "Uživatel %{name} si oblíbil váš příspěvek" + subject: Uživatel %{name} si oblíbil váš příspěvek title: Nové oblíbení follow: body: "%{name} vás nyní sleduje!" @@ -1472,7 +1473,7 @@ cs: title: Nový sledující follow_request: action: Spravovat žádosti o sledování - body: "Uživatel %{name} požádal o povolení vás sledovat" + body: Uživatel %{name} požádal o povolení vás sledovat subject: 'Čekající sledující: %{name}' title: Nová žádost o sledování mention: @@ -1484,12 +1485,12 @@ cs: subject: Anketa od %{name} skončila reblog: body: 'Uživatel %{name} boostnul váš příspěvek:' - subject: "Uživatel %{name} boostnul váš příspěvek" + subject: Uživatel %{name} boostnul váš příspěvek title: Nový boost status: - subject: "Nový příspěvek od %{name}" + subject: Nový příspěvek od %{name} update: - subject: "Uživatel %{name} upravil příspěvek" + subject: Uživatel %{name} upravil příspěvek notifications: email_events: Události pro e-mailová oznámení email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:' @@ -1655,28 +1656,28 @@ cs: statuses: attached: audio: - one: "%{count} audio" few: "%{count} audia" many: "%{count} audií" + one: "%{count} audio" other: "%{count} audií" description: 'Přiloženo: %{attached}' image: - one: "%{count} obrázek" few: "%{count} obrázky" many: "%{count} obrázků" + one: "%{count} obrázek" other: "%{count} obrázků" video: - one: "%{count} video" few: "%{count} videa" many: "%{count} videí" + one: "%{count} video" other: "%{count} videí" boosted_from_html: Boostnuto z %{acct_link} content_warning: 'Varování o obsahu: %{warning}' default_language: Stejný jako jazyk rozhraní disallowed_hashtags: - one: 'obsahoval zakázaný hashtag: %{tags}' few: 'obsahoval zakázané hashtagy: %{tags}' many: 'obsahoval zakázané hashtagy: %{tags}' + one: 'obsahoval zakázaný hashtag: %{tags}' other: 'obsahoval zakázané hashtagy: %{tags}' edited_at_html: Upraven %{date} errors: @@ -1690,14 +1691,14 @@ cs: reblog: Boosty nelze připnout poll: total_people: - one: "%{count} člověk" few: "%{count} lidé" many: "%{count} lidí" + one: "%{count} člověk" other: "%{count} lidí" total_votes: - one: "%{count} hlas" few: "%{count} hlasy" many: "%{count} hlasů" + one: "%{count} hlas" other: "%{count} hlasů" vote: Hlasovat show_more: Zobrazit více diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 9dfced190b5754..a975457cf9d985 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1,3 +1,4 @@ +--- cy: about: about_mastodon_html: 'Rhwydwaith cymdeithasol y dyfodol: Dim hysbysebion, dim gwyliadwriaeth gorfforaethol, dylunio moesegol, a datganoli! Chi sy berchen eich data gyda Mastodon!' @@ -8,12 +9,12 @@ cy: accounts: follow: Dilyn followers: - zero: Dilynwyr - one: Dilynwr - two: Dilynwyr few: Dilynwyr many: Dilynwyr + one: Dilynwr other: Dilynwyr + two: Dilynwyr + zero: Dilynwyr following: Yn dilyn instance_actor_flash: Mae'r cyfrif hwn yn actor rhithwir sy'n cael ei ddefnyddio i gynrychioli'r gweinydd ei hun ac nid unrhyw ddefnyddiwr unigol. Fe'i defnyddir at ddibenion ffederasiwn ac ni ddylid ei atal. last_active: y diweddaraf @@ -22,12 +23,12 @@ cy: pin_errors: following: Rhaid i chi fod yn dilyn y person yr ydych am ei gymeradwyo yn barod posts: - zero: Postiadau - one: Postiad - two: Postiadau few: Postiadau many: Postiadau + one: Postiad other: Postiadau + two: Postiadau + zero: Postiadau posts_tab_heading: Postiadau admin: account_actions: @@ -63,7 +64,7 @@ cy: delete: Dileu data deleted: Wedi dileu demote: Diraddio - destroyed_msg: "Mae data %{username} bellach mewn ciw i gael ei ddileu yn fuan" + destroyed_msg: Mae data %{username} bellach mewn ciw i gael ei ddileu yn fuan disable: Rhewi disable_sign_in_token_auth: Analluogi dilysu tocynnau e-bost disable_two_factor_authentication: Diffodd 2FA @@ -114,12 +115,12 @@ cy: perform_full_suspension: Atal previous_strikes: Rhybuddion blaenorol previous_strikes_description_html: - zero: Mae gan y cyfrif hwn %{count} rybudd. - one: Mae gan y cyfrif hwn un rhybudd. - two: Mae gan y cyfrif hwn %{count} rybudd. few: Mae gan y cyfrif hwn %{count} rybudd. many: Mae gan y cyfrif hwn %{count} rybudd. + one: Mae gan y cyfrif hwn un rhybudd. other: Mae gan y cyfrif hwn %{count} rhybudd. + two: Mae gan y cyfrif hwn %{count} rybudd. + zero: Mae gan y cyfrif hwn %{count} rybudd. promote: Hyrwyddo protocol: Protocol public: Cyhoeddus @@ -240,64 +241,64 @@ cy: update_status: Diweddaru Postiad update_user_role: Diweddaru Rôl actions: - approve_appeal_html: "Mae %{name} wedi cymeradwyo penderfyniad cymedroli gan %{target}" - approve_user_html: "Mae %{name} wedi cymeradwyo cofrestru gan %{target}" - assigned_to_self_report_html: "Mae %{name} wedi neilltuo adroddiad %{target} iddyn nhw eu hunain" - change_email_user_html: "Mae %{name} wedi newid cyfeiriad e-bost defnyddiwr %{target}" - change_role_user_html: "Mae %{name} wedi newid rôl %{target}" - confirm_user_html: "Mae %{name} wedi cadarnhau cyfeiriad e-bost defnyddiwr %{target}" - create_account_warning_html: "Mae %{name} wedi anfon rhybudd at %{target}" - create_announcement_html: "Mae %{name} wedi creu cyhoeddiad newydd %{target}" - create_canonical_email_block_html: "Mae %{name} wedi rhwystro e-bost gyda'r hash %{target}" - create_custom_emoji_html: "Mae %{name} wedi llwytho emoji newydd %{target}" - create_domain_allow_html: "Mae %{name} wedi caniatáu ffedereiddio â pharth %{target}" - create_domain_block_html: "Mae %{name} wedi rhwystro parth %{target}" - create_email_domain_block_html: "Mae %{name} wedi rhwystro parth e-bost %{target}" - create_ip_block_html: "Mae %{name} wedi creu rheol ar gyfer IP %{target}" - create_unavailable_domain_html: "Mae %{name} wedi stopio danfon i barth %{target}" - create_user_role_html: "Mae %{name} wedi creu rôl %{target}" - demote_user_html: "Mae %{name} wedi israddio defnyddiwr %{target}" - destroy_announcement_html: "Mae %{name} wedi dileu cyhoeddiad %{target}" - destroy_canonical_email_block_html: "Mae %{name} wedi dadrwystro e-bost gyda'r hash %{target}" - destroy_custom_emoji_html: "Mae %{name} wedi dileu emoji %{target}" - destroy_domain_allow_html: "Mae %{name} wedi gwrthod ffederasiwn gyda pharth %{target}" - destroy_domain_block_html: "Mae %{name} wedi dad rwystro parth %{target}" - destroy_email_domain_block_html: "Mae %{name} wedi dad rwystro parth e-bost %{target}" - destroy_instance_html: "Mae %{name} wedi dileu parth %{target}" - destroy_ip_block_html: "Mae %{name} dileu rheol ar gyfer IP %{target}" - destroy_status_html: "Mae %{name} wedi tynnu postiad gan %{target}" - destroy_unavailable_domain_html: "Mae %{name} wedi ailddechrau anfon i barth %{target}" - destroy_user_role_html: "Mae %{name} wedi dileu rôl %{target}" - disable_2fa_user_html: "Mae %{name} wedi analluogi gofyniad dau ffactor ar gyfer defnyddiwr %{target}" - disable_custom_emoji_html: "Mae %{name} wedi analluogi emoji %{target}" - disable_sign_in_token_auth_user_html: "Mae %{name} wedi analluogi dilysiad tocyn e-bost ar gyfer %{target}" - disable_user_html: "Mae %{name} wedi analluogi mewngofnodi defnyddiwr %{target}" - enable_custom_emoji_html: "Mae %{name} wedi analluogi emoji %{target}" - enable_sign_in_token_auth_user_html: "Mae %{name} wedi galluogi dilysu tocyn e-bost %{target}" - enable_user_html: "Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target}" - memorialize_account_html: "Newidiodd %{name} gyfrif %{target} i dudalen memoriam" - promote_user_html: "Mae %{name} wedi hyrwyddo defnyddiwr %{target}" - reject_appeal_html: "Mae %{name} wedi gwrthod apêl penderfyniad cymedroli %{target}" - reject_user_html: "Mae %{name} wedi gwrthod cofrestriad gan %{target}" - remove_avatar_user_html: "Mae %{name} wedi tynnu afatar %{target}" - reopen_report_html: "Mae %{name} wedi ailagor adroddiad %{target}" - resend_user_html: "Mae %{name} wedi ail anfon e-bost cadarnhau %{target}" - reset_password_user_html: "Mae %{name} wedi ailosod cyfrinair defnyddiwr %{target}" - resolve_report_html: "Mae %{name} wedi datrys adroddiad %{target}" - sensitive_account_html: "Mae %{name} wedi marcio cyfrwng %{target} fel un sensitif" - silence_account_html: "Mae %{name} wedi cyfyngu cyfrif %{target}" - suspend_account_html: "Mae %{name} wedi atal cyfrif %{target}" - unassigned_report_html: "Mae %{name} wedi dad neilltuo adroddiad %{target}" - unblock_email_account_html: "Mae %{name} wedi dad rwystro cyfeiriad e-bost %{target}" - unsensitive_account_html: "Mae %{name} wedi dad farcio cyfryngau %{target} fel rhai sensitif" - unsilence_account_html: "Mae %{name} wedi dadwneud terfyn cyfrif %{target}" - unsuspend_account_html: "Mae %{name} wedi dad atal cyfrif %{target}" - update_announcement_html: "Mae %{name} wedi diweddaru cyhoeddiad %{target}" - update_custom_emoji_html: "Mae %{name} wedi diweddaru emoji %{target}" - update_domain_block_html: "Mae %{name} wedi diweddaru bloc parth %{target}" - update_ip_block_html: "Mae %{name} wedi newid rheol IP %{target}" - update_status_html: "Mae %{name} wedi diweddaru postiad gan %{target}" - update_user_role_html: "Mae %{name} wedi newid rôl %{target}" + approve_appeal_html: Mae %{name} wedi cymeradwyo penderfyniad cymedroli gan %{target} + approve_user_html: Mae %{name} wedi cymeradwyo cofrestru gan %{target} + assigned_to_self_report_html: Mae %{name} wedi neilltuo adroddiad %{target} iddyn nhw eu hunain + change_email_user_html: Mae %{name} wedi newid cyfeiriad e-bost defnyddiwr %{target} + change_role_user_html: Mae %{name} wedi newid rôl %{target} + confirm_user_html: Mae %{name} wedi cadarnhau cyfeiriad e-bost defnyddiwr %{target} + create_account_warning_html: Mae %{name} wedi anfon rhybudd at %{target} + create_announcement_html: Mae %{name} wedi creu cyhoeddiad newydd %{target} + create_canonical_email_block_html: Mae %{name} wedi rhwystro e-bost gyda'r hash %{target} + create_custom_emoji_html: Mae %{name} wedi llwytho emoji newydd %{target} + create_domain_allow_html: Mae %{name} wedi caniatáu ffedereiddio â pharth %{target} + create_domain_block_html: Mae %{name} wedi rhwystro parth %{target} + create_email_domain_block_html: Mae %{name} wedi rhwystro parth e-bost %{target} + create_ip_block_html: Mae %{name} wedi creu rheol ar gyfer IP %{target} + create_unavailable_domain_html: Mae %{name} wedi stopio danfon i barth %{target} + create_user_role_html: Mae %{name} wedi creu rôl %{target} + demote_user_html: Mae %{name} wedi israddio defnyddiwr %{target} + destroy_announcement_html: Mae %{name} wedi dileu cyhoeddiad %{target} + destroy_canonical_email_block_html: Mae %{name} wedi dadrwystro e-bost gyda'r hash %{target} + destroy_custom_emoji_html: Mae %{name} wedi dileu emoji %{target} + destroy_domain_allow_html: Mae %{name} wedi gwrthod ffederasiwn gyda pharth %{target} + destroy_domain_block_html: Mae %{name} wedi dad rwystro parth %{target} + destroy_email_domain_block_html: Mae %{name} wedi dad rwystro parth e-bost %{target} + destroy_instance_html: Mae %{name} wedi dileu parth %{target} + destroy_ip_block_html: Mae %{name} dileu rheol ar gyfer IP %{target} + destroy_status_html: Mae %{name} wedi tynnu postiad gan %{target} + destroy_unavailable_domain_html: Mae %{name} wedi ailddechrau anfon i barth %{target} + destroy_user_role_html: Mae %{name} wedi dileu rôl %{target} + disable_2fa_user_html: Mae %{name} wedi analluogi gofyniad dau ffactor ar gyfer defnyddiwr %{target} + disable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target} + disable_sign_in_token_auth_user_html: Mae %{name} wedi analluogi dilysiad tocyn e-bost ar gyfer %{target} + disable_user_html: Mae %{name} wedi analluogi mewngofnodi defnyddiwr %{target} + enable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target} + enable_sign_in_token_auth_user_html: Mae %{name} wedi galluogi dilysu tocyn e-bost %{target} + enable_user_html: Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target} + memorialize_account_html: Newidiodd %{name} gyfrif %{target} i dudalen memoriam + promote_user_html: Mae %{name} wedi hyrwyddo defnyddiwr %{target} + reject_appeal_html: Mae %{name} wedi gwrthod apêl penderfyniad cymedroli %{target} + reject_user_html: Mae %{name} wedi gwrthod cofrestriad gan %{target} + remove_avatar_user_html: Mae %{name} wedi tynnu afatar %{target} + reopen_report_html: Mae %{name} wedi ailagor adroddiad %{target} + resend_user_html: Mae %{name} wedi ail anfon e-bost cadarnhau %{target} + reset_password_user_html: Mae %{name} wedi ailosod cyfrinair defnyddiwr %{target} + resolve_report_html: Mae %{name} wedi datrys adroddiad %{target} + sensitive_account_html: Mae %{name} wedi marcio cyfrwng %{target} fel un sensitif + silence_account_html: Mae %{name} wedi cyfyngu cyfrif %{target} + suspend_account_html: Mae %{name} wedi atal cyfrif %{target} + unassigned_report_html: Mae %{name} wedi dad neilltuo adroddiad %{target} + unblock_email_account_html: Mae %{name} wedi dad rwystro cyfeiriad e-bost %{target} + unsensitive_account_html: Mae %{name} wedi dad farcio cyfryngau %{target} fel rhai sensitif + unsilence_account_html: Mae %{name} wedi dadwneud terfyn cyfrif %{target} + unsuspend_account_html: Mae %{name} wedi dad atal cyfrif %{target} + update_announcement_html: Mae %{name} wedi diweddaru cyhoeddiad %{target} + update_custom_emoji_html: Mae %{name} wedi diweddaru emoji %{target} + update_domain_block_html: Mae %{name} wedi diweddaru bloc parth %{target} + update_ip_block_html: Mae %{name} wedi newid rheol IP %{target} + update_status_html: Mae %{name} wedi diweddaru postiad gan %{target} + update_user_role_html: Mae %{name} wedi newid rôl %{target} deleted_account: cyfrif wedi'i ddileu empty: Dim logiau ar gael. filter_by_action: Hidlo yn ôl gweithred @@ -362,33 +363,33 @@ cy: new_users: defnyddwyr newydd opened_reports: adroddiadau wedi'u hagor pending_appeals_html: - zero: "%{count} o apeliadau'n aros" - one: "%{count} apêl yn aros" - two: "%{count} apêl yn aros" few: "%{count} apêl yn aros" many: "%{count} apêl yn aros" + one: "%{count} apêl yn aros" other: "%{count} apêl yn aros" + two: "%{count} apêl yn aros" + zero: "%{count} o apeliadau'n aros" pending_reports_html: - zero: "%{count} o adroddiadau'n aros" - one: "%{count} adroddiad yn aros" - two: "%{count} adroddiad yn aros" few: "%{count} adroddiad yn aros" many: "%{count} adroddiad yn aros" + one: "%{count} adroddiad yn aros" other: "%{count} adroddiad yn aros" + two: "%{count} adroddiad yn aros" + zero: "%{count} o adroddiadau'n aros" pending_tags_html: - zero: "%{count} o hashnodau'n aros" - one: "%{count} hashnod yn aros" - two: "%{count} hashnod yn aros" few: "%{count} hashnod yn aros" many: "%{count} hashnod yn aros" + one: "%{count} hashnod yn aros" other: "%{count} hashnod yn aros" + two: "%{count} hashnod yn aros" + zero: "%{count} o hashnodau'n aros" pending_users_html: - zero: "%{count} o ddefnyddwyr yn aros" - one: "%{count} defnyddiwr yn aros" - two: "%{count} defnyddiwr yn aros" few: "%{count} defnyddiwr yn aros" many: "%{count} defnyddiwr yn aros" + one: "%{count} defnyddiwr yn aros" other: "%{count} defnyddiwr yn aros" + two: "%{count} defnyddiwr yn aros" + zero: "%{count} o ddefnyddwyr yn aros" resolved_reports: adroddiadau wedi'u datrys software: Meddalwedd sources: Ffynonellau cofrestru @@ -431,7 +432,7 @@ cy: create: Creu bloc hint: Ni fydd y bloc parth yn atal cread cofnodion cyfrif yn y bas data, ond mi fydd yn gosod dulliau cymedroli penodol ôl-weithredol ac awtomatig ar y cyfrifau hynny. severity: - desc_html: "Bydd terfyn yn gwneud postiadau o gyfrifon yn y parth hwn yn anweledig i unrhyw un nad yw'n eu dilyn. Bydd Atal yn dileu'r holl gynnwys, cyfryngau a data proffil ar gyfer cyfrifon y parth hwn o'ch gweinydd. Defnyddiwch Dim os ydych am wrthod ffeiliau cyfryngau yn unig." + desc_html: Bydd terfyn yn gwneud postiadau o gyfrifon yn y parth hwn yn anweledig i unrhyw un nad yw'n eu dilyn. Bydd Atal yn dileu'r holl gynnwys, cyfryngau a data proffil ar gyfer cyfrifon y parth hwn o'ch gweinydd. Defnyddiwch Dim os ydych am wrthod ffeiliau cyfryngau yn unig. noop: Dim silence: Terfyn suspend: Atal @@ -453,12 +454,12 @@ cy: email_domain_blocks: add_new: Ychwanegu attempts_over_week: - zero: "%{count} o ymgeisiadau i gofrestru dros yr wythnos ddiwethaf" - one: "%{count} ymgais dros yr wythnos ddiwethaf" - two: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" few: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" many: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" + one: "%{count} ymgais dros yr wythnos ddiwethaf" other: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" + two: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf" + zero: "%{count} o ymgeisiadau i gofrestru dros yr wythnos ddiwethaf" created_msg: Wedi blocio parth e-bost yn llwyddiannus delete: Dileu dns: @@ -500,19 +501,17 @@ cy: instances: availability: description_html: - zero: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. - one: Os bydd anfon i'r parth yn methu %{count} diwrnod heb lwyddo, ni fydd unrhyw ymdrechion danfon pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. - two: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. few: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. many: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. + one: Os bydd anfon i'r parth yn methu %{count} diwrnod heb lwyddo, ni fydd unrhyw ymdrechion danfon pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. other: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. + two: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. + zero: Os bydd anfon i'r parth yn methu ar %{count} o ddiwrnodau gwahanol heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn o'r parth. failure_threshold_reached: Trothwy methiant wedi'i gyrraedd ar %{date}. failures_recorded: - zero: Ymdrechion wedi methu ar %{count} o ddyddiau gwahanol. - one: Ymdrechion wedi methu ar %{count} diwrnod. - two: Ymdrechion wedi methu ar %{count} ddiwrnod gwahanol. few: Ymdrechion wedi methu ar %{count} diwrnod gwahanol. many: Ymdrechion wedi methu ar %{count} diwrnod gwahanol. + one: Ymdrechion wedi methu ar %{count} diwrnod. other: Ymdrechion wedi methu ar %{count} diwrnod gwahanol. two: Ymdrechion wedi methu ar %{count} ddiwrnod gwahanol. zero: Ymdrechion wedi methu ar %{count} o ddyddiau gwahanol. @@ -558,12 +557,12 @@ cy: destroyed_msg: Mae data o %{domain} bellach mewn ciw i'w ddileu'n syth. empty: Heb ganfod parthau. known_accounts: - zero: "%{count} o gyfrifon hysbys" - one: "%{count} cyfrif hysbys" - two: "%{count} gyfrif hysbys" few: "%{count} cyfrif hysbys" many: "%{count} cyfrif hysbys" + one: "%{count} cyfrif hysbys" other: "%{count} cyfrif hysbys" + two: "%{count} gyfrif hysbys" + zero: "%{count} o gyfrifon hysbys" moderation: all: Popeth limited: Cyfyngedig @@ -603,7 +602,7 @@ cy: no_ip_block_selected: Heb newid unrhyw reolau IP gan na ddewiswyd yr un ohonyn nhw title: Rheolau IP relationships: - title: "Perthnasau %{acct}" + title: Perthnasau %{acct} relays: add_new: Ychwanegau relái newydd delete: Dileu @@ -626,12 +625,12 @@ cy: reports: account: notes: - zero: "%{count} un nodyn" - one: "%{count} un nodyn" - two: "%{count} nodyn" few: "%{count} nodyn" many: "%{count} nodyn" + one: "%{count} un nodyn" other: "%{count} nodyn" + two: "%{count} nodyn" + zero: "%{count} un nodyn" action_log: Log archwilio action_taken_by: Camau a gymerwyd gan actions: @@ -699,7 +698,7 @@ cy: close_report: 'Nodi adroddiad #%{id} fel wedi''i ddatrys' close_reports_html: Nodi bod pob adroddiad yn erbyn @%{acct} wedi'i ddatrys delete_data_html: Dileu proffil a chynnwys @%{acct} 30 diwrnod o nawr oni bai ei b/fod heb ei h/atal yn y cyfamser - preview_preamble_html: "Bydd @%{acct} yn derbyn rhybudd gyda'r cynnwys canlynol:" + preview_preamble_html: 'Bydd @%{acct} yn derbyn rhybudd gyda''r cynnwys canlynol:' record_strike_html: Recordio rhybudd yn erbyn @%{acct} i'ch helpu i ddwysáu ar achosion o dorri rheolau yn y dyfodol o'r cyfrif hwn send_email_html: Anfon e-bost rhybudd at @%{acct} warning_placeholder: Rhesymeg ychwanegol dewisol ar gyfer y cam cymedroli. @@ -713,12 +712,12 @@ cy: roles: add_new: Ychwanegu rôl assigned_users: - zero: "%{count} defnyddiwyr" - one: "%{count} defnyddiwr" - two: "%{count} ddefnyddiwr" few: "%{count} defnyddiwr" many: "%{count} defnyddiwr" + one: "%{count} defnyddiwr" other: "%{count} defnyddiwr" + two: "%{count} ddefnyddiwr" + zero: "%{count} defnyddiwyr" categories: administration: Gweinyddiaeth devops: DevOps @@ -731,12 +730,12 @@ cy: everyone: Caniatâd rhagosodedig everyone_full_description_html: Dyma'r rôl sylfaenol sy'n effeithio ar bob defnyddiwr, hyd yn oed y rhai heb rôl benodol. Mae pob rôl arall yn etifeddu caniatâd ganddo. permissions_count: - zero: "%{count} caniatâd" - one: "%{count} caniatâd" - two: "%{count} ganiatâd" few: "%{count} caniatâd" many: "%{count} caniatâd" + one: "%{count} caniatâd" other: "%{count} caniatâd" + two: "%{count} ganiatâd" + zero: "%{count} caniatâd" privileges: administrator: Gweinyddwr administrator_description: Bydd defnyddwyr sydd â'r caniatâd hwn yn osgoi pob caniatâd @@ -876,13 +875,13 @@ cy: with_media: Gyda chyfryngau strikes: actions: - delete_statuses: "Mae %{name} wedi dileu postiadau %{target}" - disable: "Mae %{name} wedi rhewi cyfrif %{target}" - mark_statuses_as_sensitive: "Mae %{name} wedi marcio postiadau %{target} fel rhai sensitif" - none: "Anfonodd %{name} rybudd at %{target}" - sensitive: "Mae %{name} wedi nodi bod cyfrif %{target} yn sensitif" - silence: "Mae %{name} wedi cyfyngu cyfrif %{target}" - suspend: "Mae %{name} wedi atal cyfrif %{target}" + delete_statuses: Mae %{name} wedi dileu postiadau %{target} + disable: Mae %{name} wedi rhewi cyfrif %{target} + mark_statuses_as_sensitive: Mae %{name} wedi marcio postiadau %{target} fel rhai sensitif + none: Anfonodd %{name} rybudd at %{target} + sensitive: Mae %{name} wedi nodi bod cyfrif %{target} yn sensitif + silence: Mae %{name} wedi cyfyngu cyfrif %{target} + suspend: Mae %{name} wedi atal cyfrif %{target} appeal_approved: Apeliwyd appeal_pending: Apêl yn aros appeal_rejected: Mae'r apêl wedi'i gwrthod @@ -943,12 +942,12 @@ cy: publishers: no_publisher_selected: Heb newid unrhyw gyhoeddwr gan na ddewiswyd yr un ohonyn nhw shared_by_over_week: - zero: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf - one: Wedi'i rannu gan un person dros yr wythnos ddiwethaf - two: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf few: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf many: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf + one: Wedi'i rannu gan un person dros yr wythnos ddiwethaf other: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf + two: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf + zero: Wedi'i rannu gan %{count} o bobl dros yr wythnos ddiwethaf title: Dolenni sy'n trendio usage_comparison: Wedi'i rannu %{today} gwaith heddiw, o'i gymharu â %{yesterday} ddoe not_allowed_to_trend: Dim caniatâd i dueddu @@ -969,12 +968,12 @@ cy: no_status_selected: Heb newid unrhyw bostiadau'n trendio gan na chafodd yr un ohonyn nhw eu dewis not_discoverable: Nid yw'r awdur wedi dewis bod yn ddarganfyddadwy shared_by: - zero: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith - one: Wedi'i rannu neu ei ffefrynnu unwaith - two: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith few: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith many: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith + one: Wedi'i rannu neu ei ffefrynnu unwaith other: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith + two: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith + zero: Wedi'i rannu a'i ffefrynnu %{friendly_count} gwaith title: Postiadau sy'n trendio tags: current_score: Sgôr cyfredol %{score} @@ -997,12 +996,12 @@ cy: usable: Mae modd ei ddefnyddio usage_comparison: Wedi'i ddefnyddio %{today} gwaith heddiw, o'i gymharu â %{yesterday} ddoe used_by_over_week: - zero: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf - one: Wedi'i ddefnyddio gan un person dros yr wythnos ddiwethaf - two: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf few: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf many: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf + one: Wedi'i ddefnyddio gan un person dros yr wythnos ddiwethaf other: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf + two: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf + zero: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf title: Trendiau trending: Trendio warning_presets: @@ -1022,12 +1021,12 @@ cy: enable: Galluogi enabled: Gweithredol enabled_events: - zero: "%{count} digwyddiadau wedi'u galluogi" - one: 1 digwyddiad wedi'i alluogi - two: "%{count} digwyddiad wedi'u galluogi" few: "%{count} digwyddiad wedi'u galluogi" many: "%{count} digwyddiad wedi'u galluogi" + one: 1 digwyddiad wedi'i alluogi other: "%{count} digwyddiad wedi'u galluogi" + two: "%{count} digwyddiad wedi'u galluogi" + zero: "%{count} digwyddiadau wedi'u galluogi" events: Digwyddiadau new: Bachyn gwe newydd rotate_secret: Cylchdroi cyfrinach @@ -1045,7 +1044,7 @@ cy: sensitive: i nodi bod eu cyfrif yn sensitif silence: i gyfyngu ar eu cyfrif suspend: i atal eu cyfrif - body: "Mae %{target} yn apelio yn erbyn penderfyniad cymedroli gan %{action_taken_by} ar %{date}, sef %{type}. Mae nhw'n dweud:" + body: 'Mae %{target} yn apelio yn erbyn penderfyniad cymedroli gan %{action_taken_by} ar %{date}, sef %{type}. Mae nhw''n dweud:' next_steps: Gallwch gymeradwyo'r apêl i ddadwneud y penderfyniad cymedroli, neu ei anwybyddu. subject: Mae %{username} yn apelio yn erbyn penderfyniad cymedroli ar %{instance} new_critical_software_updates: @@ -1055,7 +1054,7 @@ cy: body: Mae manylion y cyfrif newydd yn isod. Gallwch gymeradwyo neu wrthod y cais hwn. subject: Cyfrif newydd i'w adolygu ar %{instance} (%{username}) new_report: - body: "Mae %{reporter} wedi adrodd am %{target}" + body: Mae %{reporter} wedi adrodd am %{target} body_remote: Mae rhywun o %{domain} wedi adrodd am %{target} subject: Adroddiad newydd am %{instance} (#%{id}) new_software_updates: @@ -1117,7 +1116,7 @@ cy: delete_account: Dileu cyfrif delete_account_html: Os hoffech chi ddileu eich cyfrif, mae modd parhau yma. Bydd gofyn i chi gadarnhau. description: - prefix_invited_by_user: "Mae @%{name} yn eich gwahodd i ymuno â'r gweinydd Mastodon hwn!" + prefix_invited_by_user: Mae @%{name} yn eich gwahodd i ymuno â'r gweinydd Mastodon hwn! prefix_sign_up: Cofrestru ar Mastodon heddiw! suffix: Gyda chyfrif, byddwch yn gallu dilyn pobl, postio diweddariadau a chyfnewid negeseuon gyda defnyddwyr o unrhyw weinydd Mastodon, a mwy! didnt_get_confirmation: Heb dderbyn dolen cadarnhau? @@ -1142,7 +1141,7 @@ cy: cas: CAS saml: SAML register: Cofrestrwch - registration_closed: "Nid yw %{instance} yn derbyn aelodau newydd" + registration_closed: Nid yw %{instance} yn derbyn aelodau newydd resend_confirmation: Ail-anfon dolen cadarnhau reset_password: Ailosod cyfrinair rules: @@ -1318,26 +1317,26 @@ cy: expires_in: Yn dod i ben ymhen %{distance} expires_on: Yn dod i ben ar %{date} keywords: - zero: "%{count} allweddeiriau" - one: "%{count} allweddair" - two: "%{count} allweddair" few: "%{count} allweddair" many: "%{count} allweddair" + one: "%{count} allweddair" other: "%{count} allweddair" + two: "%{count} allweddair" + zero: "%{count} allweddeiriau" statuses: - zero: "%{count} postiadau" - one: "%{count} postiad" - two: "%{count} postiad" few: "%{count} postiad" many: "%{count} postiad" + one: "%{count} postiad" other: "%{count} postiad" + two: "%{count} postiad" + zero: "%{count} postiadau" statuses_long: - zero: "%{count} postiadau unigol wedi'u cuddio" - one: "%{count} postiad unigol wedi'u cuddio" - two: "%{count} bostiad unigol wedi'u cuddio" few: "%{count} postiad unigol wedi'u cuddio" many: "%{count} postiad unigol wedi'u cuddio" + one: "%{count} postiad unigol wedi'u cuddio" other: "%{count} postiad unigol wedi'u cuddio" + two: "%{count} bostiad unigol wedi'u cuddio" + zero: "%{count} postiadau unigol wedi'u cuddio" title: Hidlyddion new: save: Cadw hidlydd newydd @@ -1352,18 +1351,16 @@ cy: generic: all: Popeth all_items_on_page_selected_html: - zero: Does %{count} o eitemau ar y dudalen hon wedi'u dewis. - one: "Mae %{count} eitem wedi'i dewis ar y dudalen hon." - two: Mae pob un o'r %{count} eitem ar y dudalen hon wedi'u dewis. few: Mae pob un o'r %{count} eitem ar y dudalen hon wedi'u dewis. many: Mae pob un o'r %{count} eitem ar y dudalen hon wedi'u dewis. + one: Mae %{count} eitem wedi'i dewis ar y dudalen hon. other: Mae pob un o'r %{count} eitem ar y dudalen hon wedi'u dewis. + two: Mae pob un o'r %{count} eitem ar y dudalen hon wedi'u dewis. + zero: Does %{count} o eitemau ar y dudalen hon wedi'u dewis. all_matching_items_selected_html: - zero: Does %{count} o eitemau sy'n cyfateb i'ch chwiliad wedi'u dewis. - one: "Mae %{count} eitem sy'n cyfateb i'ch chwiliad wedi'i dewis." - two: Mae pob un o'r %{count} eitem sy'n cyfateb i'ch chwiliad wedi'u dewis. few: Mae pob un o'r %{count} eitem sy'n cyfateb i'ch chwiliad wedi'u dewis. many: Mae pob un o'r %{count} eitem sy'n cyfateb i'ch chwiliad wedi'u dewis. + one: Mae %{count} eitem sy'n cyfateb i'ch chwiliad wedi'i dewis. other: Mae pob un o'r %{count} eitem sy'n cyfateb i'ch chwiliad wedi'u dewis. two: Mae pob un o'r %{count} eitem sy'n cyfateb i'ch chwiliad wedi'u dewis. zero: Does %{count} o eitemau sy'n cyfateb i'ch chwiliad wedi'u dewis. @@ -1377,20 +1374,20 @@ cy: order_by: Trefnu yn ôl save_changes: Cadw newidiadau select_all_matching_items: - zero: Dewiswch bob un o'r %{count} eitemau sy'n cyfateb i'ch chwilio. - one: Dewiswch bob un o'r %{count} o eitemau sy'n cyfateb i'ch chwilio. - two: Dewiswch bob un o'r %{count} eitem sy'n cyfateb i'ch chwilio. few: Dewiswch bob un o'r %{count} eitem sy'n cyfateb i'ch chwilio. many: Dewiswch bob un o'r %{count} eitem sy'n cyfateb i'ch chwilio. + one: Dewiswch bob un o'r %{count} o eitemau sy'n cyfateb i'ch chwilio. other: Dewiswch bob un o'r %{count} eitem sy'n cyfateb i'ch chwilio. + two: Dewiswch bob un o'r %{count} eitem sy'n cyfateb i'ch chwilio. + zero: Dewiswch bob un o'r %{count} eitemau sy'n cyfateb i'ch chwilio. today: heddiw validation_errors: - zero: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda - one: Mae rhywbeth o'i le o hyd! Edrychwch ar y gwall isod, os gwelwch yn dda - two: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} wall isod, os gwelwch yn dda few: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod, os gwelwch yn dda many: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod, os gwelwch yn dda + one: Mae rhywbeth o'i le o hyd! Edrychwch ar y gwall isod, os gwelwch yn dda other: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod, os gwelwch yn dda + two: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} wall isod, os gwelwch yn dda + zero: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda imports: errors: empty: Ffeil CSV wag @@ -1463,12 +1460,12 @@ cy: generate: Cynhyrchu dolen wahoddiad invited_by: 'Cawsoch eich gwahodd gan:' max_uses: - zero: "%{count} defnydd" - one: 1 defnydd - two: "%{count} defnydd" few: "%{count} defnydd" many: "%{count} defnydd" + one: 1 defnydd other: "%{count} defnydd" + two: "%{count} defnydd" + zero: "%{count} defnydd" max_uses_prompt: Dim terfyn prompt: Creu a rhannu dolenni â phobl eraill i roi mynediad iddyn nhw i'r gweinydd hwn table: @@ -1551,20 +1548,20 @@ cy: notification_mailer: admin: report: - subject: "Mae %{name} wedi cyflwyno adroddiad" + subject: Mae %{name} wedi cyflwyno adroddiad sign_up: - subject: "Mae %{name} wedi cofrestru" + subject: Mae %{name} wedi cofrestru favourite: body: 'Cafodd eich postiad ei hoffi gan %{name}:' - subject: "Hoffodd %{name} eich postiad" + subject: Hoffodd %{name} eich postiad title: Ffefryn newydd follow: - body: "Mae %{name} bellach yn eich dilyn!" - subject: "Mae %{name} bellach yn eich dilyn" + body: Mae %{name} bellach yn eich dilyn! + subject: Mae %{name} bellach yn eich dilyn title: Dilynwr newydd follow_request: action: Rheoli ceisiadau dilyn - body: "Mae %{name} wedi gwneud cais i'ch dilyn" + body: Mae %{name} wedi gwneud cais i'ch dilyn subject: 'Dilynwr yn aros: %{name}' title: Cais dilynwr newydd mention: @@ -1576,12 +1573,12 @@ cy: subject: Mae arolwg gan %{name} wedi dod i ben reblog: body: 'Cafodd eich postiad ei hybu gan %{name}:' - subject: "Rhoddodd %{name} hwb i'ch postiad" + subject: Rhoddodd %{name} hwb i'ch postiad title: Hwb newydd status: subject: "%{name} newydd ei bostio" update: - subject: "Golygodd %{name} bostiad" + subject: Golygodd %{name} bostiad notifications: administration_emails: Hysbysiadau e-bost gweinyddol email_events: Digwyddiadau ar gyfer hysbysiadau e-bost @@ -1748,37 +1745,37 @@ cy: statuses: attached: audio: - zero: "%{count} sain" - one: "%{count} sain" - two: "%{count} sain" few: "%{count} sain" many: "%{count} sain" + one: "%{count} sain" other: "%{count} sain" + two: "%{count} sain" + zero: "%{count} sain" description: 'Ynghlwm: %{attached}' image: - zero: "%{count} llun" - one: "%{count} llun" - two: "%{count} lun" few: "%{count} llun" many: "%{count} llun" + one: "%{count} llun" other: "%{count} llun" + two: "%{count} lun" + zero: "%{count} llun" video: - zero: "%{count} fideo" - one: "%{count} fideo" - two: "%{count} fideo" few: "%{count} fideo" many: "%{count} fideo" + one: "%{count} fideo" other: "%{count} fideo" + two: "%{count} fideo" + zero: "%{count} fideo" boosted_from_html: Wedi'i hybu o %{acct_link} content_warning: 'Rhybudd cynnwys: %{warning}' default_language: Yr un fath a'r iaith rhyngwyneb disallowed_hashtags: - zero: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' - one: 'yn cynnwys hashnod gwaharddedig: %{tags}' - two: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' few: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' many: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' + one: 'yn cynnwys hashnod gwaharddedig: %{tags}' other: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' + two: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' + zero: 'yn cynnwys yr hashnod gwaharddedig: %{tags}' edited_at_html: Wedi'i olygu %{date} errors: in_reply_not_found: Nid yw'n ymddangos bod y postiad rydych chi'n ceisio ei ateb yn bodoli. @@ -1791,19 +1788,19 @@ cy: reblog: Nid oes modd pinio hwb poll: total_people: - zero: "%{count} o bersonau" - one: "%{count} berson" - two: "%{count} person" few: "%{count} person" many: "%{count} person" + one: "%{count} berson" other: "%{count} person" + two: "%{count} person" + zero: "%{count} o bersonau" total_votes: - zero: "%{count} o bleidleisiau" - one: "%{count} bleidlais" - two: "%{count} pleidlais" few: "%{count} pleidlais" many: "%{count} pleidlais" + one: "%{count} bleidlais" other: "%{count} pleidlais" + two: "%{count} pleidlais" + zero: "%{count} o bleidleisiau" vote: Pleidlais show_more: Dangos mwy show_newer: Dangos y diweddaraf diff --git a/config/locales/da.yml b/config/locales/da.yml index ee01cf1520c444..ce53168fb320cc 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1,3 +1,4 @@ +--- da: about: about_mastodon_html: 'Fremtidens sociale netværk: Ingen annoncer, ingen virksomhedsovervågning, etisk design og decentralisering! Vær ejer af egne data med Mastodon!' @@ -68,7 +69,7 @@ da: enable: Optø enable_sign_in_token_auth: Aktivér e-mailtoken godkendelse enabled: Aktiveret - enabled_msg: '%{username}s konto er optøet' + enabled_msg: "%{username}s konto er optøet" followers: Følgere follows: Følger header: Overskrift @@ -86,7 +87,7 @@ da: media_attachments: Medievedhæftninger memorialize: Omdan til mindekonto memorialized: Gjort til mindekonto - memorialized_msg: '%{username} gjort til mindekonto' + memorialized_msg: "%{username} gjort til mindekonto" moderation: active: Aktiv all: Alle @@ -113,15 +114,15 @@ da: public: Offentlig push_subscription_expires: PuSH-abonnement udløber redownload: Opfrisk profil - redownloaded_msg: '%{username}s profil opfrisket fra oprindelsesserver' + redownloaded_msg: "%{username}s profil opfrisket fra oprindelsesserver" reject: Afvis - rejected_msg: '%{username}s tilmeldingsansøgning afvist' + rejected_msg: "%{username}s tilmeldingsansøgning afvist" remote_suspension_irreversible: Denne kontos data er slettet permanent. remote_suspension_reversible_hint_html: Kontoen er suspenderet på den pågældende server, og kontodata fjernes fuldstændig pr. %{date}. Indtil da vil fjernserveren kunne foretage en komplet reetablering af kontoen. Ønskes alle kontodata fjernet straks, kan dette gøres nedenfor. remove_avatar: Fjern profilbillede remove_header: Fjern overskrift - removed_avatar_msg: '%{username}s profilbillede fjernet' - removed_header_msg: '%{username}s overskriftsbillede fjernet' + removed_avatar_msg: "%{username}s profilbillede fjernet" + removed_header_msg: "%{username}s overskriftsbillede fjernet" resend_confirmation: already_confirmed: Denne bruger er allerede bekræftet send: Gensend bekræftelseslink @@ -154,14 +155,14 @@ da: suspension_reversible_hint_html: Kontoen er blevet suspenderet, og dens data fjernes helt d. %{date}. Indtil da kan kontoen genoprettes uden datatab mv. Ønsker alle kontodata fjernet straks, kan dette gøres nedenfor. title: Konti unblock_email: Afblokér e-mailadresse - unblocked_email_msg: '%{username}s e-mail-adresse afblokeret' + unblocked_email_msg: "%{username}s e-mail-adresse afblokeret" unconfirmed_email: Ubekræftet e-mail undo_sensitized: Fortryd gennemtving sensitiv undo_silenced: Fortryd begrænsning undo_suspension: Fortryd suspendering - unsilenced_msg: '%{username}s kontobegrænsning er fjernet' + unsilenced_msg: "%{username}s kontobegrænsning er fjernet" unsubscribe: Opsig abonnement - unsuspended_msg: '%{username}s konto er afsuspenderet' + unsuspended_msg: "%{username}s konto er afsuspenderet" username: Brugernavn view_domain: Vis domæneoversigt warn: Advar @@ -395,7 +396,7 @@ da: destroyed_msg: Domæneblokering er blevet fjernet domain: Domæne edit: Redigér domæneblokering - existing_domain_block: '%{name} er allerede pålagt strengere restriktioner.' + existing_domain_block: "%{name} er allerede pålagt strengere restriktioner." existing_domain_block_html: Der har allerede pålagt %{name} strengere begrænsninger, så dette kræver først en afblokering. export: Eksportér import: Importér @@ -1447,7 +1448,7 @@ da: sign_up: subject: "%{name} tilmeldte sig" favourite: - body: '%{name} favoritmarkerede dit indlæg:' + body: "%{name} favoritmarkerede dit indlæg:" subject: "%{name} favoritmarkerede dit indlæg" title: Ny favorit follow: diff --git a/config/locales/de.yml b/config/locales/de.yml index 737600b58c5319..d72b0a608f872d 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1,3 +1,4 @@ +--- de: about: about_mastodon_html: 'Das soziale Netzwerk der Zukunft: Keine Werbung, keine Überwachung durch Unternehmen – dafür dezentral und mit Anstand! Beherrsche deine Daten mit Mastodon!' @@ -24,7 +25,7 @@ de: admin: account_actions: action: Aktion ausführen - title: '@%{acct} moderieren' + title: "@%{acct} moderieren" account_moderation_notes: create: Notiz abspeichern created_msg: Moderationshinweis erfolgreich abgespeichert! @@ -55,7 +56,7 @@ de: delete: Daten löschen deleted: Gelöscht demote: Zurückstufen - destroyed_msg: "Daten von %{username} wurden zum Löschen in die Warteschlange eingereiht" + destroyed_msg: Daten von %{username} wurden zum Löschen in die Warteschlange eingereiht disable: Einfrieren disable_sign_in_token_auth: E-Mail-Token-Authentisierung deaktivieren disable_two_factor_authentication: Zwei-Faktor-Authentisierung (2FA) deaktivieren @@ -86,7 +87,7 @@ de: media_attachments: Medienanhänge memorialize: In Gedenkseite umwandeln memorialized: Gedenkseite - memorialized_msg: '%{username} wurde erfolgreich in ein Gedenkseiten-Konto umgewandelt' + memorialized_msg: "%{username} wurde erfolgreich in ein Gedenkseiten-Konto umgewandelt" moderation: active: Aktiv all: Alle @@ -557,7 +558,7 @@ de: no_ip_block_selected: Keine IP-Regeln wurden geändert, weil keine ausgewählt wurde(n) title: IP-Regeln relationships: - title: "Beziehungen von %{acct}" + title: Beziehungen von %{acct} relays: add_new: Neues Relay hinzufügen delete: Entfernen @@ -603,7 +604,7 @@ de: category_description_html: Der Grund, weshalb dieses Konto und/oder der Inhalt gemeldet worden ist, wird in der Kommunikation mit dem gemeldeten Konto erwähnt comment: none: Kein - comment_description_html: '%{name} ergänzte die Meldung um folgende Hinweis:' + comment_description_html: "%{name} ergänzte die Meldung um folgende Hinweis:" confirm: Bestätigen confirm_action: Maßnahme gegen @%{acct} bestätigen created_at: Gemeldet @@ -626,7 +627,7 @@ de: quick_actions_description_html: 'Führe eine schnelle Aktion aus oder scrolle nach unten, um gemeldete Inhalte zu sehen:' remote_user_placeholder: das externe Profil von %{instance} reopen: Meldung wieder eröffnen - report: '%{id}. Meldung' + report: "%{id}. Meldung" reported_account: Gemeldetes Konto reported_by: Gemeldet von resolved: Geklärt @@ -908,7 +909,7 @@ de: not_discoverable: Autor*in hat sich dafür entschieden, nicht entdeckt zu werden shared_by: one: Einmal geteilt oder favorisiert - other: '%{friendly_count}-mal geteilt oder favorisiert' + other: "%{friendly_count}-mal geteilt oder favorisiert" title: Angesagte Beiträge tags: current_score: 'Aktueller Score: %{score}' @@ -927,7 +928,7 @@ de: peaked_on_and_decaying: In den Trends am %{date}, jetzt absteigend title: Angesagte Hashtags trendable: Darf in den Trends erscheinen - trending_rank: 'Platz %{rank}' + trending_rank: Platz %{rank} usable: Darf verwendet werden usage_comparison: Heute %{today}-mal und gestern %{yesterday}-mal verwendet used_by_over_week: @@ -1163,7 +1164,7 @@ de: description_html: Dies sind Maßnahmen, die gegen dein Konto ergriffen worden sind, und Warnungen, die dir die Mitarbeiter*innen von %{instance} gesendet haben. recipient: Adressiert an reject_appeal: Einspruch ablehnen - status: '%{id}. Beitrag' + status: "%{id}. Beitrag" status_removed: Beitrag bereits vom System entfernt title: "%{action} vom %{date}" title_actions: @@ -1462,7 +1463,7 @@ de: mention: action: Antworten body: 'Du wurdest von %{name} erwähnt:' - subject: '%{name} erwähnte dich' + subject: "%{name} erwähnte dich" title: Neue Erwähnung poll: subject: Eine Umfrage von %{name} ist beendet @@ -1494,7 +1495,7 @@ de: description_html: Wenn du die Zwei-Faktor-Authentisierung (2FA) mit einer Authentifizierungs-App deines Smartphones aktivierst, benötigst du neben dem regulären Passwort zusätzlich auch den zeitbasierten Code der 2FA-App, um dich anmelden zu können. enable: Aktivieren instructions_html: "Scanne diesen QR-Code mit einer beliebigen Authentisierungs-App (TOTP). Diese App generiert dann zeitbasierte Codes, die du beim Anmelden zusätzlich zum regulären Passwort eingeben musst." - manual_instructions: 'Wenn du den QR-Code nicht einscannen kannst, sondern die Zahlenfolge manuell eingeben musst, ist hier der geheime Token für deine 2FA-App.' + manual_instructions: Wenn du den QR-Code nicht einscannen kannst, sondern die Zahlenfolge manuell eingeben musst, ist hier der geheime Token für deine 2FA-App. setup: Einrichten wrong_code: Der eingegebene Code ist ungültig! Laufen Serverzeit und Gerätezeit synchron? pagination: diff --git a/config/locales/devise.an.yml b/config/locales/devise.an.yml index 1ffd141420fa8a..f179f915dcfd4c 100644 --- a/config/locales/devise.an.yml +++ b/config/locales/devise.an.yml @@ -1,3 +1,4 @@ +--- an: devise: confirmations: @@ -7,7 +8,7 @@ an: failure: already_authenticated: Vusté ya ye rechistrau. inactive: La suya cuenta no ha estau activada encara. - invalid: '%{authentication_keys} u clau invalida.' + invalid: "%{authentication_keys} u clau invalida." last_attempt: Tiene un intento mas antes que la tuya cuenta sía blocada. locked: La tuya cuenta ye blocada. not_found_in_database: Incorrecto %{authentication_keys} u clau. diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml index a2dd126613d9e8..97d1710edf8f48 100644 --- a/config/locales/devise.ar.yml +++ b/config/locales/devise.ar.yml @@ -1,3 +1,4 @@ +--- ar: devise: confirmations: @@ -7,10 +8,10 @@ ar: failure: already_authenticated: لقد تم تسجيل دخولك من قبل. inactive: لم يتم تنشيط حسابك بعد. - invalid: '%{authentication_keys} أو كلمة سر خاطئة.' + invalid: "%{authentication_keys} أو كلمة سر خاطئة." last_attempt: بإمكانك إعادة المحاولة مرة واحدة قبل أن يتم قفل حسابك. locked: إن حسابك مقفل. - not_found_in_database: '%{authentication_keys} أو كلمة سر خاطئة.' + not_found_in_database: "%{authentication_keys} أو كلمة سر خاطئة." pending: إنّ حسابك في انتظار مراجعة. timeout: لقد انتهت مدة صَلاحِيَة جلستك. قم بتسجيل الدخول من جديد للمواصلة. unauthenticated: يجب عليك تسجيل الدخول أو إنشاء حساب قبل المواصلة. @@ -110,9 +111,9 @@ ar: not_found: تَعَذَّرَ العُثُورُ عليه not_locked: لم يكن مقفَلاً not_saved: - zero: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" - one: 'خطأ واحد منع هذا %{resource} من الحفظ:' - two: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" few: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" many: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + one: 'خطأ واحد منع هذا %{resource} من الحفظ:' other: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + two: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + zero: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml index db5d59df7285e4..a4378dee92bed7 100644 --- a/config/locales/devise.ast.yml +++ b/config/locales/devise.ast.yml @@ -1,3 +1,4 @@ +--- ast: devise: confirmations: @@ -74,8 +75,8 @@ ast: updated: La contraseña camudó correutamente. Xá aniciesti la sesión. updated_not_active: La contraseña camudó correutamente. registrations: - destroyed: '¡Ta llueu! La cuenta anulóse correutamente. Esperamos volver vete pronto.' - signed_up: '¡Afáyate! Rexistréstite correutamente.' + destroyed: "¡Ta llueu! La cuenta anulóse correutamente. Esperamos volver vete pronto." + signed_up: "¡Afáyate! Rexistréstite correutamente." signed_up_but_inactive: Rexistréstite correutamente. Por embargu, nun se pudo aniciar la sesión porque la cuenta entá nun s'activó. signed_up_but_locked: Rexistréstite correutamente. Por embargu, nun se pudo aniciar la sesión porque la cuenta ta bloquiada. signed_up_but_pending: Unvióse un mensaxe a la direición de corréu electrónicu que contién un enllaz de confirmación. Darréu de calcar nel enllaz, vamos revisar la solicitú ya si s'aprueba, avisámoste. diff --git a/config/locales/devise.be.yml b/config/locales/devise.be.yml index 461c281aaca263..3bf35daedabd39 100644 --- a/config/locales/devise.be.yml +++ b/config/locales/devise.be.yml @@ -1,3 +1,4 @@ +--- be: devise: confirmations: @@ -25,7 +26,7 @@ be: subject: 'Mastodon: Інструкцыі па пацвярджэнні для %{instance}' title: Праверце адрас электроннай пошты email_changed: - explanation: 'Адрас электроннай пошты для вашага ўліковага запісу будзе зменены на' + explanation: Адрас электроннай пошты для вашага ўліковага запісу будзе зменены на extra: Калі вы не змянялі сваю электронную пошту, хутчэй за ўсё, нехта атрымаў доступ да вашага ўліковага запісу. Калі ласка, неадкладна змяніце свой пароль або звярніцеся да адміністратара сервера, калі вы заблакаваны з вашага ўліковага запісу subject: 'Mastodon: адрас электроннай пошты зменены' title: Новы адрас электроннай пошты @@ -107,10 +108,10 @@ be: already_confirmed: ужо пацверджана, паспрабуйце ўвайсці confirmation_period_expired: трэба пацвердзіць на працягу %{period}, запытайце новы expired: скончыўся, запытайце новы - not_found: Не знойдзена + not_found: Не знойдзена not_locked: Не быў заблакаваны not_saved: - one: '1 памылка не дае захаваць гэты %{resource}:' few: "%{count} памылкі перашкаджаюць захаваць гэты %{resource}:" many: "%{count} памылак не даюць захаваць гэты %{resource}:" + one: '1 памылка не дае захаваць гэты %{resource}:' other: "%{count} памылак перашкаджаюць захаваць гэты %{resource}:" diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml index c11cfaa7b95b00..5046771340e509 100644 --- a/config/locales/devise.bg.yml +++ b/config/locales/devise.bg.yml @@ -1,3 +1,4 @@ +--- bg: devise: confirmations: diff --git a/config/locales/devise.bn.yml b/config/locales/devise.bn.yml index 129a0981d2d155..e0d83613e8aacf 100644 --- a/config/locales/devise.bn.yml +++ b/config/locales/devise.bn.yml @@ -1,3 +1,4 @@ +--- bn: devise: confirmations: @@ -19,7 +20,7 @@ bn: confirmation_instructions: action: ইমেইলটি নিশ্চিত করুন action_with_app: নিশ্চিত করুন এবং %{app} তে ফিরে যান - explanation: '%{host} তে এই ইমেইল ব্যবহার করে নিবন্ধন করতে হবে। আর একটা ক্লিক করলেই এটা চালু হয়ে যাবে। যদি আপনি এটা না পাঠিয়ে থাকেন, তাহলে অনুগ্রহ করে এই ইমেইলটি উপেক্ষা করুন।' + explanation: "%{host} তে এই ইমেইল ব্যবহার করে নিবন্ধন করতে হবে। আর একটা ক্লিক করলেই এটা চালু হয়ে যাবে। যদি আপনি এটা না পাঠিয়ে থাকেন, তাহলে অনুগ্রহ করে এই ইমেইলটি উপেক্ষা করুন।" explanation_when_pending: আপনি %{host} এ এই ইমেল দ্বারা আমন্ত্রনের জন্যে যোগদান করেছেন। যখনই আপনি আপনার ইমেল নিশ্চিত করবেন, আমরা আপনার আবেদন বিবেচনা করব। আপনি আপনার বিবরণ সমূহ এডিট অথবা ডিলিট করার জন্যে লগিন করতে পারবেন, কিন্তু আপনার আবেদন অনুমোদন করার আগ পর্যন্ত আপনি প্রায় সুবিধাসমূহ ভোগ করতে পারবেন না। যদি আপনার আবেদন বাতিল করা হয়, আপনার সকল তথ্য মুছে ফেলা হবে, আপনার নিজের কোন পদক্ষেপ নেয়ার প্রয়োজন হবে না। আপনি যদি এই আবেদনটি না করে থাকেন, তাহলে ইমেইলটি উপেক্ষা করুন. extra_html: এছাড়াও দয়া করে সার্ভারের নিয়ম এবং আমাদের পরিষেবার শর্তাদি দেখুন। subject: 'মস্তোডন: %{instance} সম্পর্কিত নিশ্চিতকরণের নির্দেশাবলী' @@ -87,11 +88,11 @@ bn: unlocked: আপনার অ্যাকাউন্টটি সফলভাবে আনলক করা হয়েছে। চালিয়ে যেতে দয়া করে সাইন ইন করুন। errors: messages: - already_confirmed: ' ইতিমধ্যে নিশ্চিত হয়ে গেছে, দয়া করে সাইন ইন করার চেষ্টা করুন' - confirmation_period_expired: '%{period}''এর মধ্যে নিশ্চিত হওয়া দরকার, দয়া করে একটি নতুন অনুরোধ করুন' + already_confirmed: " ইতিমধ্যে নিশ্চিত হয়ে গেছে, দয়া করে সাইন ইন করার চেষ্টা করুন" + confirmation_period_expired: "%{period}'এর মধ্যে নিশ্চিত হওয়া দরকার, দয়া করে একটি নতুন অনুরোধ করুন" expired: এর মেয়াদ শেষ হয়ে গেছে, দয়া করে একটি নতুন অনুরোধ করুন not_found: পাওয়া যাচ্ছে না not_locked: এটি লক করা হয়নি not_saved: - one: '%{resource} টি ১ টি ত্রুটির কারনে সেভ করা যাচ্ছে না:' + one: "%{resource} টি ১ টি ত্রুটির কারনে সেভ করা যাচ্ছে না:" other: "%{count} টি ত্রুটির কারনে %{resource} টি সেভ করা যাচ্ছে না।:" diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml index 13a9ddee943211..4a16157f81958c 100644 --- a/config/locales/devise.br.yml +++ b/config/locales/devise.br.yml @@ -1,3 +1,4 @@ +--- br: devise: confirmations: @@ -7,10 +8,10 @@ br: failure: already_authenticated: Kennasket oc'h dija. inactive: N'eo ket gweredekaet ho kont c'hoazh. - invalid: '%{authentication_keys} pe ger-tremen diwiriek.' + invalid: "%{authentication_keys} pe ger-tremen diwiriek." last_attempt: Un esae a chom deoc'h a-raok ma vefe prennet ho kont. locked: Prennet eo ho kont. - not_found_in_database: '%{authentication_keys} pe ger-tremen diwiriek.' + not_found_in_database: "%{authentication_keys} pe ger-tremen diwiriek." pending: O vezañ asantet eo ho kont. timeout: Ho talc'h a zo aet da dermen. Mar plij, kit-tre c'hoazh evit kenderc'hel. unauthenticated: Ret eo deoc'h mont-tre pe e em enskrivañ araok kenderc'hel. @@ -110,8 +111,8 @@ br: not_found: digavet not_locked: ne oa ket prennet not_saved: - one: '1 faot en deus miret ouzh %{resource} da vezañ gwarezet:' - two: "%{count} faot en deus miret ouzh %{resource} da vezañ gwarezet:" few: "%{count} faot en deus miret ouzh %{resource} da vezañ gwarezet:" many: "%{count} faot en deus miret ouzh %{resource} da vezañ gwarezet:" + one: '1 faot en deus miret ouzh %{resource} da vezañ gwarezet:' other: "%{count} faot en deus miret ouzh %{resource} da vezañ gwarezet:" + two: "%{count} faot en deus miret ouzh %{resource} da vezañ gwarezet:" diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index ef0a673c25ff1a..6ebdafb9ec07bd 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -1,16 +1,19 @@ +--- ca: devise: confirmations: confirmed: La teva adreça de correu-e s'ha confirmat correctament. send_instructions: "En pocs minuts rebràs un correu-e amb instruccions sobre com confirmar l'adreça de correu. \nSi us plau, verifica la carpeta de la brossa si no l'has rebut." - send_paranoid_instructions: "Si l'adreça de correu-e ja existeix a la nostra base de dades rebràs un correu amb instruccions sobre com confirmar-la.\nSi us plau, verifica la carpeta de la brossa si no l'has rebut." + send_paranoid_instructions: |- + Si l'adreça de correu-e ja existeix a la nostra base de dades rebràs un correu amb instruccions sobre com confirmar-la. + Si us plau, verifica la carpeta de la brossa si no l'has rebut. failure: already_authenticated: Ja t'has registrat. inactive: El teu compte encara no s'ha activat. - invalid: '%{authentication_keys} o contrasenya no són vàlids.' + invalid: "%{authentication_keys} o contrasenya no són vàlids." last_attempt: Tens un intent més abans no es bloqui el teu compte. locked: El teu compte s'ha blocat. - not_found_in_database: '%{authentication_keys} o contrasenya no són vàlids.' + not_found_in_database: "%{authentication_keys} o contrasenya no són vàlids." pending: El teu compte encara està en revisió. timeout: La teva sessió ha expirat. Torna a iniciar-la per a continuar. unauthenticated: Necessites iniciar sessió o registrar-te abans de continuar. diff --git a/config/locales/devise.ckb.yml b/config/locales/devise.ckb.yml index 7bf9f892b95fb5..1261ebb648d2fa 100644 --- a/config/locales/devise.ckb.yml +++ b/config/locales/devise.ckb.yml @@ -1,3 +1,4 @@ +--- ckb: devise: confirmations: @@ -7,10 +8,10 @@ ckb: failure: already_authenticated: تۆ پێشتر چوونە ژوورەوەت کردووە. inactive: هەژمارەکەت هێشتا کارا نەکراوە. - invalid: '%{authentication_keys} یان نهێنوشە نادروستە.' + invalid: "%{authentication_keys} یان نهێنوشە نادروستە." last_attempt: تۆ یەک هەوڵیدیکەت ماوە پێش ئەوەی ئەژمێرەکەت قوفڵ بێت. locked: هەژمارەکت داخراوە. - not_found_in_database: '%{authentication_keys} یان نهێنوشە نادروستە.' + not_found_in_database: "%{authentication_keys} یان نهێنوشە نادروستە." pending: هەژمێرەکەت هێشتا لەژێر پێداچوونەوەدایە. timeout: کۆبوونەوەکەت بەسەرچووە. تکایە دووبارە بچۆ ژوورەوە بۆ بەردەوام بوون. unauthenticated: پێویستە بچیتە ژوورەوە یان بچیتە ناو چوونە ناو پێش بەردەوام بوون. diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml index 6d6c61d825a1d5..8409cfad9b2b82 100644 --- a/config/locales/devise.co.yml +++ b/config/locales/devise.co.yml @@ -1,3 +1,4 @@ +--- co: devise: confirmations: diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index 341d9e83be2af4..32a1ed2c6733e3 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -1,3 +1,4 @@ +--- cs: devise: confirmations: @@ -110,7 +111,7 @@ cs: not_found: nenalezen not_locked: nebyl uzamčen not_saved: - one: '1 chyba zabránila uložení tohoto %{resource}:' few: "%{count} chyby zabránily uložení tohoto %{resource}:" many: "%{count} chyb zabránilo uložení tohoto %{resource}:" + one: '1 chyba zabránila uložení tohoto %{resource}:' other: "%{count} chyb zabránilo uložení tohoto %{resource}:" diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml index 1697aa06b66fe5..44c09153ff5269 100644 --- a/config/locales/devise.cy.yml +++ b/config/locales/devise.cy.yml @@ -1,3 +1,4 @@ +--- cy: devise: confirmations: @@ -7,10 +8,10 @@ cy: failure: already_authenticated: Rydych chi eisoes wedi mewngofnodi. inactive: Nid yw eich cyfrif yn weithredol eto. - invalid: '%{authentication_keys} neu gyfrinair annilys.' + invalid: "%{authentication_keys} neu gyfrinair annilys." last_attempt: Mae gennych un cyfle arall cyn i'ch cyfrif gael ei gloi. locked: Mae eich cyfrif wedi ei gloi. - not_found_in_database: '%{authentication_keys} neu gyfrinair annilys.' + not_found_in_database: "%{authentication_keys} neu gyfrinair annilys." pending: Mae eich cyfrif dal o dan adolygiad. timeout: Mae eich sesiwn wedi dod i ben. Mewngofnodwch eto i barhau. unauthenticated: Mae angen i chi fewngofnodi neu gofrestru cyn parhau. @@ -110,9 +111,9 @@ cy: not_found: heb ei ganfod not_locked: heb ei gloi not_saved: - zero: "Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} o wallau:" + few: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:' + many: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:' one: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd 1 gwall:' - two: "Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:" - few: "Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:" - many: "Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:" - other: "Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:" + other: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:' + two: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} gwall:' + zero: 'Gwaharddwyd yr %{resource} rhag cael ei gadw oherwydd %{count} o wallau:' diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml index d5b7bc410f1b22..17593be3fdd5ac 100644 --- a/config/locales/devise.da.yml +++ b/config/locales/devise.da.yml @@ -1,3 +1,4 @@ +--- da: devise: confirmations: diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index 8b717d182712d9..a77240dabe1a8e 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -1,3 +1,4 @@ +--- de: devise: confirmations: @@ -7,10 +8,10 @@ de: failure: already_authenticated: Du bist bereits angemeldet. inactive: Dein Konto wurde noch nicht aktiviert. - invalid: '%{authentication_keys} oder Passwort ungültig.' + invalid: "%{authentication_keys} oder Passwort ungültig." last_attempt: Du hast nur noch einen Versuch, bevor dein Zugang gesperrt wird. locked: Dein Konto ist gesperrt. - not_found_in_database: '%{authentication_keys} oder Passwort ungültig.' + not_found_in_database: "%{authentication_keys} oder Passwort ungültig." pending: Dein Konto wird weiterhin überprüft. timeout: Deine Sitzung ist abgelaufen. Bitte melde dich erneut an, um fortzufahren. unauthenticated: Du musst dich anmelden oder registrieren, bevor du fortfahren kannst. diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml index 6fced72d255e07..ba3ee59fab366c 100644 --- a/config/locales/devise.el.yml +++ b/config/locales/devise.el.yml @@ -1,3 +1,4 @@ +--- el: devise: confirmations: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index 9ff69d2691205c..e7ab9462dc31aa 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -1,3 +1,4 @@ +--- en-GB: devise: confirmations: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 9aa19a3a896591..1c13490e530c0a 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -1,3 +1,4 @@ +--- eo: devise: confirmations: diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml index 21ac8459cb3e86..d9c922ed86a3b9 100644 --- a/config/locales/devise.es-AR.yml +++ b/config/locales/devise.es-AR.yml @@ -1,3 +1,4 @@ +--- es-AR: devise: confirmations: @@ -7,10 +8,10 @@ es-AR: failure: already_authenticated: Ya iniciaste sesión. inactive: Tu cuenta todavía no está activada. - invalid: '%{authentication_keys} o contraseña no válidas.' + invalid: "%{authentication_keys} o contraseña no válidas." last_attempt: Tenés un intento más antes de que se bloquee tu cuenta. locked: Se bloqueó tu cuenta. - not_found_in_database: '%{authentication_keys} o contraseña no válidas.' + not_found_in_database: "%{authentication_keys} o contraseña no válidas." pending: Tu cuenta todavía está bajo revisión. timeout: Venció tu sesión. Por favor, volvé a iniciar sesión para continuar. unauthenticated: Necesitás iniciar sesión o registrarte antes de continuar. @@ -86,8 +87,8 @@ es-AR: 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.' - signed_up: '¡Bienvenido! Te registraste exitosamente.' + destroyed: "¡Chauchas! Se canceló exitosamente tu cuenta. Esperamos verte pronto de nuevo." + signed_up: "¡Bienvenido! Te registraste exitosamente." signed_up_but_inactive: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta todavía no está activada. signed_up_but_locked: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta está bloqueada. signed_up_but_pending: Se envió un correo electrónico a tu dirección de correo con un enlace de confirmación. Después que hagás clic en ese enlace, revisaremos tu pedido. Si sos aprobado, serás notificado. diff --git a/config/locales/devise.es-MX.yml b/config/locales/devise.es-MX.yml index 976172f9d5be10..83b425d4410f53 100644 --- a/config/locales/devise.es-MX.yml +++ b/config/locales/devise.es-MX.yml @@ -1,3 +1,4 @@ +--- es-MX: devise: confirmations: @@ -7,7 +8,7 @@ es-MX: failure: already_authenticated: Usted ya está registrado. inactive: Su cuenta no ha sido activada aún. - invalid: '%{authentication_keys} o contraseña inválida.' + invalid: "%{authentication_keys} o contraseña inválida." last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada. locked: Tu cuenta está bloqueada. not_found_in_database: Incorrecto %{authentication_keys} o contraseña. @@ -86,8 +87,8 @@ es-MX: 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.' + 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. diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml index ca01bd7bcfa97c..ef6a70ee4f8e97 100644 --- a/config/locales/devise.es.yml +++ b/config/locales/devise.es.yml @@ -1,3 +1,4 @@ +--- es: devise: confirmations: @@ -7,7 +8,7 @@ es: failure: already_authenticated: Usted ya está registrado. inactive: Su cuenta no ha sido activada aún. - invalid: '%{authentication_keys} o contraseña inválida.' + invalid: "%{authentication_keys} o contraseña inválida." last_attempt: Tiene un intento más antes de que tu cuenta sea bloqueada. locked: Tu cuenta está bloqueada. not_found_in_database: Incorrecto %{authentication_keys} o contraseña. @@ -86,8 +87,8 @@ es: updated: Tu contraseña ha sido cambiada con éxito. Has iniciado sesión. updated_not_active: Tu contraseña se ha cambiado con éxito. registrations: - destroyed: '¡Hasta otra! Tu cuenta ha sido cancelada con éxito. Esperamos verte de nuevo pronto.' - signed_up: '¡Bienvenido! Te has registrado correctamente.' + destroyed: "¡Hasta otra! Tu cuenta ha sido cancelada con éxito. Esperamos verte de nuevo pronto." + signed_up: "¡Bienvenido! Te has registrado correctamente." signed_up_but_inactive: Te has registrado con éxito. Sin embargo, no se ha podido iniciar sesión porque tu cuenta aún no está activada. signed_up_but_locked: Te has registrado con éxito. Sin embargo, no se ha podido iniciar sesión porque tu cuenta está bloqueada. signed_up_but_pending: Un mensaje con un enlace de confirmación ha sido enviado a tu dirección de correo electrónico. Después de hacer clic en el enlace, revisaremos tu solicitud. Serás notificado si se aprueba. diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml index b30d204240205c..da1cc989d23f57 100644 --- a/config/locales/devise.et.yml +++ b/config/locales/devise.et.yml @@ -1,3 +1,4 @@ +--- et: devise: confirmations: diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml index b7c346ea92f434..eb23e06d4a3a15 100644 --- a/config/locales/devise.eu.yml +++ b/config/locales/devise.eu.yml @@ -1,3 +1,4 @@ +--- eu: devise: confirmations: diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index 1ba84d630fa93a..07db5395da0cc6 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -1,3 +1,4 @@ +--- fa: devise: confirmations: @@ -7,10 +8,10 @@ fa: failure: already_authenticated: همین الآن هم وارد شده‌اید. inactive: حساب شما هنوز فعال نشده است. - invalid: '%{authentication_keys} یا گذرواژه نامعتبر.' + invalid: "%{authentication_keys} یا گذرواژه نامعتبر." last_attempt: پیش از آن که حساب شما قفل شود، یک فرصت دیگر دارید. locked: حساب شما قفل شده است. - not_found_in_database: '%{authentication_keys} یا گذرواژه نامعتبر.' + not_found_in_database: "%{authentication_keys} یا گذرواژه نامعتبر." pending: حساب شما همچنان در دست بررسی است. timeout: مهلت این ورود شما به سر رسید. برای ادامه، دوباره وارد شوید. unauthenticated: برای ادامه باید وارد شوید یا ثبت نام کنید. diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 2851cb1c587fa5..8bbcb071e36adb 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -1,3 +1,4 @@ +--- fi: devise: confirmations: diff --git a/config/locales/devise.fo.yml b/config/locales/devise.fo.yml index 988c9879538843..35fa0954f47e0c 100644 --- a/config/locales/devise.fo.yml +++ b/config/locales/devise.fo.yml @@ -1,3 +1,4 @@ +--- fo: devise: confirmations: diff --git a/config/locales/devise.fr-QC.yml b/config/locales/devise.fr-QC.yml index 6772485f389681..8c1a94dab6600d 100644 --- a/config/locales/devise.fr-QC.yml +++ b/config/locales/devise.fr-QC.yml @@ -1,3 +1,4 @@ +--- fr-QC: devise: confirmations: @@ -7,10 +8,10 @@ fr-QC: failure: already_authenticated: Vous êtes déjà connecté·e. inactive: Votre compte n’est pas encore activé. - invalid: '%{authentication_keys} ou mot de passe invalide.' + invalid: "%{authentication_keys} ou mot de passe invalide." last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. - not_found_in_database: '%{authentication_keys} ou mot de passe invalide.' + not_found_in_database: "%{authentication_keys} ou mot de passe invalide." pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index f1b56683e6eac4..8eb744d94c10f9 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -1,3 +1,4 @@ +--- fr: devise: confirmations: @@ -7,10 +8,10 @@ fr: failure: already_authenticated: Vous êtes déjà connecté⋅e. inactive: Votre compte n’est pas encore activé. - invalid: '%{authentication_keys} ou mot de passe invalide.' + invalid: "%{authentication_keys} ou mot de passe invalide." last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. - not_found_in_database: '%{authentication_keys} ou mot de passe invalide.' + not_found_in_database: "%{authentication_keys} ou mot de passe invalide." pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. diff --git a/config/locales/devise.fy.yml b/config/locales/devise.fy.yml index 9483d15f1977ab..9e93d2c19f947e 100644 --- a/config/locales/devise.fy.yml +++ b/config/locales/devise.fy.yml @@ -1,3 +1,4 @@ +--- fy: devise: confirmations: @@ -10,7 +11,7 @@ fy: invalid: "%{authentication_keys} of wachtwurd ûnjildich." last_attempt: Jo hawwe noch ien besykjen oer eardat jo account blokkearre wurdt. locked: Jo account is blokkearre. - not_found_in_database: '%{authentication_keys} of wachtwurd ûnjildich.' + not_found_in_database: "%{authentication_keys} of wachtwurd ûnjildich." pending: Jo account moat noch hieltyd beoardiele wurde. timeout: Dyn sesje is ferrûn, meld dy opnij oan. unauthenticated: Jo moatte oanmelde of registrearje. diff --git a/config/locales/devise.ga.yml b/config/locales/devise.ga.yml index d918c4abc34367..0949e140d1d53a 100644 --- a/config/locales/devise.ga.yml +++ b/config/locales/devise.ga.yml @@ -1,3 +1,4 @@ +--- ga: devise: failure: diff --git a/config/locales/devise.gd.yml b/config/locales/devise.gd.yml index 93371fd88edae4..c8a34054cf18e0 100644 --- a/config/locales/devise.gd.yml +++ b/config/locales/devise.gd.yml @@ -1,3 +1,4 @@ +--- gd: devise: confirmations: @@ -7,10 +8,10 @@ gd: failure: already_authenticated: Tha thu air do chlàradh a-steach mu thràth. inactive: Cha deach an cunntas agad a ghnìomhachadh fhathast. - invalid: '%{authentication_keys} no facal-faire mì-dhligheach.' + invalid: "%{authentication_keys} no facal-faire mì-dhligheach." last_attempt: Tha aon oidhirp eile agad mus dèid an cunntas agad a ghlasadh. locked: Tha an cunntas agad glaiste. - not_found_in_database: '%{authentication_keys} no facal-faire mì-dhligheach.' + not_found_in_database: "%{authentication_keys} no facal-faire mì-dhligheach." pending: Tha an cunntas agad fo lèirmheas fhathast. timeout: Dh’fhalbh an ùine air an t-seisean agad. Clàraich a-steach a-rithist airson leantainn air adhart. unauthenticated: Feumaidh tu clàradh a-steach no clàradh leinn mus lean thu air adhart. @@ -104,13 +105,13 @@ gd: unlocked: Chaidh a’ ghlas a thoirt far a’ chunntais agad. Clàraich a-steach airson leantainn air adhart. errors: messages: - already_confirmed: '– chaidh a dhearbhadh mu thràth, feuch is clàraich a-steach' - confirmation_period_expired: '– feumaidh tu a dhearbhadh am broinn %{period}, iarr fear ùr' - expired: '– dh’fhalbh an ùine air, iarr fear ùr' - not_found: '– cha deach seo a lorg' - not_locked: '– cha deach seo a ghlasadh' + already_confirmed: "– chaidh a dhearbhadh mu thràth, feuch is clàraich a-steach" + confirmation_period_expired: "– feumaidh tu a dhearbhadh am broinn %{period}, iarr fear ùr" + expired: "– dh’fhalbh an ùine air, iarr fear ùr" + not_found: "– cha deach seo a lorg" + not_locked: "– cha deach seo a ghlasadh" not_saved: + few: 'Dh’adhbharaich %{count} mearachdan nach gabh a’ %{resource} seo a shàbhaladh:' one: 'Dh’adhbharaich %{count} mhearachd nach gabh a’ %{resource} seo a shàbhaladh:' - two: "Dh’adhbharaich %{count} mhearachd nach gabh a’ %{resource} seo a shàbhaladh:" - few: "Dh’adhbharaich %{count} mearachdan nach gabh a’ %{resource} seo a shàbhaladh:" - other: "Dh’adhbharaich %{count} mearachd nach gabh a’ %{resource} seo a shàbhaladh:" + other: 'Dh’adhbharaich %{count} mearachd nach gabh a’ %{resource} seo a shàbhaladh:' + two: 'Dh’adhbharaich %{count} mhearachd nach gabh a’ %{resource} seo a shàbhaladh:' diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index 74a5d900e38461..b392f4642c01bd 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -1,3 +1,4 @@ +--- gl: devise: confirmations: @@ -7,10 +8,10 @@ gl: failure: already_authenticated: Xa estás conectada. inactive: A túa conta aínda non está activada. - invalid: '%{authentication_keys} ou contrasinal non validos.' + invalid: "%{authentication_keys} ou contrasinal non validos." last_attempt: Tes un intento máis antes de que a túa conta fique bloqueada. locked: A túa conta está bloqueada. - not_found_in_database: '%{authentication_keys} ou contrasinal non válidos.' + not_found_in_database: "%{authentication_keys} ou contrasinal non válidos." pending: A túa conta aínda está baixo revisión. timeout: A túa sesión caducou. Accede outra vez para continuar. unauthenticated: Precisas iniciar sesión ou rexistrarte antes de continuar. diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml index 57d9d17bfcdea3..0f389bd383671c 100644 --- a/config/locales/devise.he.yml +++ b/config/locales/devise.he.yml @@ -1,3 +1,4 @@ +--- he: devise: confirmations: @@ -7,10 +8,10 @@ he: failure: already_authenticated: חשבון זה כבר מחובר. inactive: חשבון זה טרם הופעל. - invalid: '%{authentication_keys} או סיסמא לא נכונים.' + invalid: "%{authentication_keys} או סיסמא לא נכונים." last_attempt: יש לך עוד ניסיון אחד לפני נעילת החשבון. locked: חשבון זה נעול. - not_found_in_database: '%{authentication_keys} או סיסמא לא נכונים.' + not_found_in_database: "%{authentication_keys} או סיסמא לא נכונים." pending: חשבונך נמצא עדיין בבדיקה. timeout: פג תוקף השהיה בחשבון. נא להכנס מחדש על מנת להמשיך. unauthenticated: יש להרשם או להכנס לחשבון על מנת להמשיך. @@ -110,7 +111,7 @@ he: not_found: לא נמצא not_locked: לא היה נעול not_saved: - one: 'שגיאה אחת מנעה מ%{resource} זה מלהשמר:' - two: " %{count} שגיאות מנעו מ%{resource} זה מלהשמר:" many: "%{count} שגיאות מנעו מ%{resource} זה מלהשמר:" + one: 'שגיאה אחת מנעה מ%{resource} זה מלהשמר:' other: "%{count} שגיאות מנעו מ%{resource} זה מלהשמר:" + two: " %{count} שגיאות מנעו מ%{resource} זה מלהשמר:" diff --git a/config/locales/devise.hi.yml b/config/locales/devise.hi.yml index 527f9fc36bb87b..c61f25027fb2b1 100644 --- a/config/locales/devise.hi.yml +++ b/config/locales/devise.hi.yml @@ -1,3 +1,4 @@ +--- hi: devise: confirmations: diff --git a/config/locales/devise.hr.yml b/config/locales/devise.hr.yml index 7e6b6cb84c41d3..235e354140fca1 100644 --- a/config/locales/devise.hr.yml +++ b/config/locales/devise.hr.yml @@ -1,3 +1,4 @@ +--- hr: devise: confirmations: diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 0ad68047d61c75..bbf6a6399b534a 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -1,3 +1,4 @@ +--- hu: devise: confirmations: @@ -47,15 +48,15 @@ hu: title: Jelszó visszaállítása two_factor_disabled: explanation: A fiókod kétlépcsős hitelesítését kikapcsoltuk. A bejelentkezés mostantól csak az e-mail cím és a jelszó használatával lesz lehetséges. - subject: 'Kétlépcsős azonosítás kikapcsolva' + subject: Kétlépcsős azonosítás kikapcsolva title: Kétlépcsős hitelesítés kikapcsolva two_factor_enabled: explanation: A kétlépcsős hitelesítést engedélyeztük a fiókodban. A bejelentkezéshez a párosított TOTP alkalmazás által generált tokenre lesz szükség. - subject: 'Kétlépcsős azonosítás engedélyezve' + subject: Kétlépcsős azonosítás engedélyezve title: Kétlépcsős hitelesítés engedélyezve two_factor_recovery_codes_changed: explanation: A korábbi helyreállítási kódok letiltásra és újragenerálásra kerültek. - subject: 'Kétlépcsős helyreállítási kódok újra létrejöttek' + subject: Kétlépcsős helyreállítási kódok újra létrejöttek title: A kétlépcsős kódok megváltoztak unlock_instructions: subject: 'Mastodon: Feloldási lépések' @@ -105,7 +106,7 @@ hu: errors: messages: already_confirmed: már meg lett erősítve, kérjük jelentkezz be - confirmation_period_expired: '%{period} belül kellett megerősíteni, kérjük igényelj újat' + confirmation_period_expired: "%{period} belül kellett megerősíteni, kérjük igényelj újat" expired: lejárt, kérjük igényelj újat not_found: nem található not_locked: nincs lezárva diff --git a/config/locales/devise.hy.yml b/config/locales/devise.hy.yml index 45f8ed2d8c4d74..2d235c0af1407d 100644 --- a/config/locales/devise.hy.yml +++ b/config/locales/devise.hy.yml @@ -1,3 +1,4 @@ +--- hy: devise: confirmations: @@ -22,59 +23,59 @@ hy: explanation: Դու արդէն ստեղծել ես հաշիւ %{host}ում այս էլ․ փոստով։ Դու այն ակտիւացնելուց հեռու ես մէկ կտտոցով։ Եթէ դու չես եղել, ապա անտեսիր այս իմակը։ explanation_when_pending: Դու արդէն այս էլ․ փոստով դիմել ես %{host}ում հրաւէրի համար։ Երբ հաստատես էլ․ հասցէն, մենք կը վերանայենք քո դիմումը։ Կարող ես մուտք գործել տուեալներդ փոփոխելու կամ հաշիւդ ջնջելու համար, բայց այլ գործողութիւնների հասանելիութիւն չունես՝ նախքան հաշուիդ հաստատումը։ Եթէ դիմումդ մերժուի, քո տուեալները կը վերացուեն, եւ քեզնից այլ գործողութիւն չի սպասուի։ Եթէ դու չես եղել, խնդրում ենք, անտեսիր այս իմակը։ extra_html: Խնդրում ենք, տես նաեւ սերուերի կանոնները եւ ծառայութեան պայմանները։ - subject: 'Մաստոդոն․ հաստատման գործողութիւններ %{instance}ի համար' + subject: Մաստոդոն․ հաստատման գործողութիւններ %{instance}ի համար title: Հաստատել էլ․ հասցէն email_changed: - explanation: 'Քո հաշուի էլ․ հասցէն փոխուել է․' + explanation: Քո հաշուի էլ․ հասցէն փոխուել է․ extra: Եթէ դու չես փոխել քո էլ․ հասցէն՝ նշանակում է, որ որեւէ մէկը հասանելիութիւն ունի քո հաշուին։ Խնդրում ենք, շտապ փոխիր գաղտնաբառդ կամ կապուիր սերուէրի ադմինի հետ, որ արգելափակի հաշիւդ։ - subject: 'Մաստոդոն․ Էլ․ փոստը փոփոխուեց' + subject: Մաստոդոն․ Էլ․ փոստը փոփոխուեց title: Նոր էլ․ հասցէ password_change: explanation: Հաշուիդ գաղտնաբառը փոփոխուեց։ extra: Եթէ դու չես փոխել քո գաղտնաբառը՝ նշանակում է, որ որեւէ մէկը հասանելիութիւն ունի քո հաշուին։ Խնդրում ենք, շտապ փոխիր գաղտնաբառդ կամ կապուիր սերուէրի ադմինի հետ, որ արգելափակի հաշիւդ։ - subject: 'Մաստոդոն․ Գաղտնաբառը փոփոխուեց' + subject: Մաստոդոն․ Գաղտնաբառը փոփոխուեց title: Գաղտնաբառը փոփոխուեց reconfirmation_instructions: explanation: Հաստատիր քո էլ․ հասցէն այն փոխելու համար։ extra: Եթէ այս փոփոխութիւնը դու չես նախաձեռնել՝ անտեսիր այս իմակը։ Էլ․ հասցէն Մաստոդոն հաշուի համար չի փոփոխուի, քանի դեռ դու չես հաստատել վերեւի յղումը։ - subject: 'Մաստոդոն․ հաստատիր էլ․ հասցէն %{instance}ի համար' + subject: Մաստոդոն․ հաստատիր էլ․ հասցէն %{instance}ի համար title: Հաստատել էլ․ հասցէն reset_password_instructions: action: Փոխել գաղտնաբառը explanation: Դու պահանջել ես նոր գաղտնաբառ այս հաշուի համար։ extra: Եթէ դու չես պահանջել այն, խնդրում ենք անտեսիր այս իմակը։ Քո գաղտնաբառը չի փոխուի, քանի դեռ դու չես հաստատել վերեւի յղումը եւ ստեղծել նորը։ - subject: 'Մաստոդոն․ Գաղտնաբառի վերականգնման նկարագրութիւններ' + subject: Մաստոդոն․ Գաղտնաբառի վերականգնման նկարագրութիւններ title: Վերականգնել գաղտնաբառը two_factor_disabled: explanation: 2FA֊ն քո հաշուի համար անջատուեց։ Մուտքն այժմ հնարաւոր է միայն էլ․ փոտի եւ գաղտնաբառի միջոցով։ - subject: 'Մաստոդոն․ 2FA֊ն անջատուեց' + subject: Մաստոդոն․ 2FA֊ն անջատուեց title: 2FA անջատուած է two_factor_enabled: explanation: 2FA֊ն քո հաշուի համար միացուած է։ TOTP ծրագրի միջոցով գեներացուած token֊ը պէտք է օգտագործես մուտք գործելու համար։ - subject: 'Մաստոդոն․ 2FA-ն միացուեց' + subject: Մաստոդոն․ 2FA-ն միացուեց title: 2FA միացուած է two_factor_recovery_codes_changed: explanation: Նախորդ վերականգնման կոդերն անվաւեր են, պէտք է նորը գեներացուի։ - subject: 'Մաստոդոն․ 2FA վերականգնման կոդերը կրկին գեներացուել են' + subject: Մաստոդոն․ 2FA վերականգնման կոդերը կրկին գեներացուել են title: 2FA վերականգնման կոդերը փոփոխուել են unlock_instructions: - subject: 'Մաստոդոն․ Ապակողպելու նկարագրութիւնները' + subject: Մաստոդոն․ Ապակողպելու նկարագրութիւնները webauthn_credential: added: explanation: Հետեւեալ անվտանգութեան բանալին է աւելացուել հաշուիդ - subject: 'Մաստոդոն․ Նոր անվտանգութեան բանալի' + subject: Մաստոդոն․ Նոր անվտանգութեան բանալի title: Նոր անվտանգութեան բանալի է աւելացուել deleted: explanation: Հետեւեալ անվտանգութեան բանալին քո հաշուից ջնջուել է - subject: 'Մաստոդոն․ Անվտանգութեան բանալին ջնջուել է' + subject: Մաստոդոն․ Անվտանգութեան բանալին ջնջուել է title: Անվտանգութեան բանալիներիցդ մեկը ջնջուել է webauthn_disabled: explanation: Անվտանգութեան բանալիներով նոյնականացումը քո հաշուից կասեցուել է։ Մուտք գործելն այժմ հնարաւոր է՝ օգտագործելով միայն զուգաւորուած TOTP յաւելուածից գեներացուած կտրօնը։ - subject: 'Մաստոդոն․ Նոյնականացումն անվտանգութեան բանալիներով կասեցուած է' + subject: Մաստոդոն․ Նոյնականացումն անվտանգութեան բանալիներով կասեցուած է title: Անվտանգութեան բանալիները կասեցուել են webauthn_enabled: explanation: Անվտանգութեան բանալիով նոյնականացումը քո հաշուի համար միացուած է։ Քո անվտանգութեան բանալին այժմ կարող է օգտագործուել մուտք գործելու համար։ - subject: 'Մաստոդոն․ Անվտանգութեան բանալիով նոյնականացումը միացուած է' + subject: Մաստոդոն․ Անվտանգութեան բանալիով նոյնականացումը միացուած է title: Անվտանգութեան բանալիները միացուել են omniauth_callbacks: failure: Նոյնականացնել հնարաւոր չեղաւ %{kind}ից քանի որ %{reason}։ @@ -110,5 +111,5 @@ hy: not_found: չգտնուեց not_locked: արգելափակուած չէ not_saved: - one: '1 սխալ թոյլ չտուեց պահպանել այս %{resource}ը․' + one: 1 սխալ թոյլ չտուեց պահպանել այս %{resource}ը․ other: "%{count} սխալներ թոյլ չտուեցին պահպանել այս %{resource}ը․" diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml index c195995abca742..2e51a69dc26978 100644 --- a/config/locales/devise.id.yml +++ b/config/locales/devise.id.yml @@ -1,3 +1,4 @@ +--- id: devise: confirmations: diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index c1060d909e25dc..7d5668c920987a 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -1,3 +1,4 @@ +--- io: devise: confirmations: @@ -22,7 +23,7 @@ io: explanation: Vu kreis konto che %{host} per ca retpostadreso. Vu povas facile aktivigar lu. Se vu ne agis lu, ignorez ca retposto. explanation_when_pending: Vu aplikis por ganar invito a %{host} per ca retpostkonto. Pos vu konfirmas vua retpostkonto, ni kontrolos vua apliko. Vu povas enirar por chanjar vua detali o efacar vua konto, ma vu ne povas acesar maxim de funcioni til vua konto aprobesas. Se vua apliko refuzesas, vua informi efacesos, do plusa ago ne bezonesos de vu. Se vu ne agis lu, ignorez ca retposto. extra_html: Anke videz reguli di la servilo e nia servokondicioni. - subject: 'Instrucioni por konfirmar %{instance}' + subject: Instrucioni por konfirmar %{instance} title: Verifikez retpostadreso email_changed: explanation: 'Retpostadreso di vua konto chanjesas a:' @@ -32,7 +33,7 @@ io: password_change: explanation: La pasvorto di vua konto chanjesis. extra: Se vu ne chanjesis vua pasvorto, nulu posible acesis vua konto. Chanjez vua pasvorto quik o kontaktez serviladministratero se vu ne povas enirar vua konto. - subject: 'Tua pasvorto chanjesis senprobleme.' + subject: Tua pasvorto chanjesis senprobleme. title: Pasvorto chanjesis reconfirmation_instructions: explanation: Konfirmez la nova adreso por chanjar vua retpostadreso. @@ -43,7 +44,7 @@ io: action: Chanjez pasvorto explanation: Vu demandis nova pasvorto por vua konto. extra: Se vu ne demandas co, ignorez ca retposto. Vua pasvorto ne chanjesas til vu acesas la supera ligilo e kreas novo. - subject: 'Instrucioni por chanjar la pasvorto' + subject: Instrucioni por chanjar la pasvorto title: Richanjo di pasvorto two_factor_disabled: explanation: 2-faktorverifiko por vua konto deaktivigesis. Eniro esas nun posible per nur retpostadreso e pasvorto. @@ -58,7 +59,7 @@ io: subject: 'Mastodon: 2-faktorrigankodexi rifacesis' title: 2FA-rigankodexi chanjesis unlock_instructions: - subject: 'Instructioni por riacendar la konto' + subject: Instructioni por riacendar la konto webauthn_credential: added: explanation: Ca sekurklefo insertesis a vua konto diff --git a/config/locales/devise.is.yml b/config/locales/devise.is.yml index 1285046c7e2fbe..3b7cf109874ab3 100644 --- a/config/locales/devise.is.yml +++ b/config/locales/devise.is.yml @@ -1,3 +1,4 @@ +--- is: devise: confirmations: diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml index 4fadc77ac50eae..5ea3aeac473923 100644 --- a/config/locales/devise.it.yml +++ b/config/locales/devise.it.yml @@ -1,3 +1,4 @@ +--- it: devise: confirmations: @@ -7,10 +8,10 @@ it: failure: already_authenticated: Sei già connesso. inactive: Il tuo profilo non è ancora attivo. - invalid: '%{authentication_keys} o password non valida.' + invalid: "%{authentication_keys} o password non valida." last_attempt: Hai un altro tentativo, prima che il tuo profilo venga bloccato. locked: Il tuo profilo è bloccato. - not_found_in_database: '%{authentication_keys} o password non valida.' + not_found_in_database: "%{authentication_keys} o password non valida." pending: Il tuo profilo è ancora in revisione. timeout: La tua sessione è scaduta. Sei pregato di accedere nuovamente per continuare. unauthenticated: Devi accedere o registrarti, per continuare. diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index 752860f4e09690..ca8ac0584769bb 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -1,3 +1,4 @@ +--- ja: devise: confirmations: @@ -7,10 +8,10 @@ ja: failure: already_authenticated: 既にログイン済みです。 inactive: あなたのアカウントはまだ有効化されていません。 - invalid: '%{authentication_keys}かパスワードが誤っています。' + invalid: "%{authentication_keys}かパスワードが誤っています。" last_attempt: あと1回失敗するとアカウントがロックされます。 locked: アカウントはロックされました。 - not_found_in_database: '%{authentication_keys}かパスワードが誤っています。' + not_found_in_database: "%{authentication_keys}かパスワードが誤っています。" pending: あなたのアカウントはまだ承認待ちです。 timeout: セッションの有効期限が切れました。続行するには再度ログインしてください。 unauthenticated: 続行するにはログインするか、アカウントを作成してください。 @@ -77,8 +78,8 @@ ja: subject: 'Mastodon: セキュリティキー認証が有効になりました' title: セキュリティキーは有効になっています omniauth_callbacks: - failure: '%{reason}によって%{kind}からのアクセスを認証できませんでした。' - success: '%{kind}からのアクセスは正常に認証されました。' + failure: "%{reason}によって%{kind}からのアクセスを認証できませんでした。" + success: "%{kind}からのアクセスは正常に認証されました。" passwords: no_token: パスワード再発行のメール以外からこのページにアクセスすることはできません。 パスワード再発行のメールからアクセスしたのにもかかわらずこのメッセージが表示される場合は、アクセスしたURLが間違っていないか確認してください。 send_instructions: パスワード再発行の方法が記載されたメールが間もなく送信されます。 @@ -105,7 +106,7 @@ ja: errors: messages: already_confirmed: は確認されました。ログインを試してください - confirmation_period_expired: '%{period}以内に確認が必要です。再度試してください' + confirmation_period_expired: "%{period}以内に確認が必要です。再度試してください" expired: は期限切れです。再度試してください not_found: 見つかりません not_locked: ロックされていません diff --git a/config/locales/devise.ka.yml b/config/locales/devise.ka.yml index 7b3c5604f3b348..3267eb22ebdfdf 100644 --- a/config/locales/devise.ka.yml +++ b/config/locales/devise.ka.yml @@ -1,3 +1,4 @@ +--- ka: devise: confirmations: @@ -77,5 +78,5 @@ ka: not_found: ვერ იქნა ნაპოვნი not_locked: არ ჩაკეტილა not_saved: - one: '%{resource} ვერ დამახსოვრდა ერთი შეცდომის გამო:' + one: "%{resource} ვერ დამახსოვრდა ერთი შეცდომის გამო:" other: "%{resource} ვერ დამახსოვრდა %{count} შეცდომის გამო:" diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 30410e0f59b11b..eb599e55e82628 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -1,3 +1,4 @@ +--- kab: devise: confirmations: @@ -98,4 +99,4 @@ kab: not_locked: ur yettucekkel ara not_saved: one: '1 n tuccḍa ur teǧǧa ara %{resource} ad ittwasekles:' - other: "Tuccḍiwin n %{count} ur ǧǧant ara %{resource} ad ittwasekles:" + other: 'Tuccḍiwin n %{count} ur ǧǧant ara %{resource} ad ittwasekles:' diff --git a/config/locales/devise.kk.yml b/config/locales/devise.kk.yml index 06b3b6cab799fe..7ddeb86047e8c0 100644 --- a/config/locales/devise.kk.yml +++ b/config/locales/devise.kk.yml @@ -1,3 +1,4 @@ +--- kk: devise: confirmations: @@ -61,7 +62,7 @@ kk: subject: 'Mastodon: Құлыптан шешу нұсқаулықтары' omniauth_callbacks: failure: Сізді аутентификациялау мүмкін болмады %{kind} себебі "%{reason}". - success: '%{kind} аккаунтынан сәтті аутентификация.' + success: "%{kind} аккаунтынан сәтті аутентификация." passwords: no_token: Бұл бетке құпиясөзді қалпына келтіру электрондық поштасынан шықпай кіре алмайсыз. Құпия сөзді қалпына келтіру электрондық поштасынан шықсаңыз, берілген толық URL мекенжайын пайдаланғаныңызды тексеріңіз. send_instructions: Электрондық пошта мекенжайыңыз біздің дерекқорымызда болса, бірнеше минут ішінде құпия сөзді қалпына келтіру сілтемесін аласыз. Бұл хат келмеген болса, спам құтысын тексеріңіз. @@ -88,7 +89,7 @@ kk: errors: messages: already_confirmed: әлдеқашан расталған, логинмен кіре беріңіз - confirmation_period_expired: '%{period} ішінде расталуы қажет, жаңасын сұратыңыз' + confirmation_period_expired: "%{period} ішінде расталуы қажет, жаңасын сұратыңыз" expired: уақыты өтіп кетті, жаңасын сұратыңыз not_found: табылмады not_locked: құлыпталмады diff --git a/config/locales/devise.kn.yml b/config/locales/devise.kn.yml index b86cf96d1cfadb..323889e42c8b31 100644 --- a/config/locales/devise.kn.yml +++ b/config/locales/devise.kn.yml @@ -1,3 +1,4 @@ +--- kn: devise: confirmations: diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 490d422532d06c..3ab7c11a5cbae8 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -1,3 +1,4 @@ +--- ko: devise: confirmations: @@ -78,7 +79,7 @@ ko: title: 보안 키 활성화 됨 omniauth_callbacks: failure: '"%{reason}" 때문에 당신을 %{kind}에서 인증할 수 없습니다.' - success: '%{kind} 계정을 성공적으로 인증했습니다.' + success: "%{kind} 계정을 성공적으로 인증했습니다." passwords: no_token: 이 페이지는 암호 재설정 이메일을 거쳐야 접근할 수 있습니다. 만약 암호 재설정 이메일 거치지 않았다면 입력한 URL이 맞는지 확인 바랍니다. send_instructions: 이메일 주소가 저희 데이터베이스에 있는 경우, 몇 분 내에 이메일 주소로 비밀번호 복구 링크를 받을 수 있습니다. 이 이메일을 받지 못했다면 스팸 폴더를 확인해 주세요. @@ -105,7 +106,7 @@ ko: errors: messages: already_confirmed: 이미 확인 되었습니다, 로그인 하세요 - confirmation_period_expired: '%{period} 안에 확인을 해야 합니다, 새로 요청하세요' + confirmation_period_expired: "%{period} 안에 확인을 해야 합니다, 새로 요청하세요" expired: 만료되었습니다, 새로 요청하세요 not_found: 찾을 수 없습니다 not_locked: 잠기지 않았습니다 diff --git a/config/locales/devise.ku.yml b/config/locales/devise.ku.yml index dc9ad5d8cf3806..6debd96e05194c 100644 --- a/config/locales/devise.ku.yml +++ b/config/locales/devise.ku.yml @@ -1,3 +1,4 @@ +--- ku: devise: confirmations: @@ -7,10 +8,10 @@ ku: failure: already_authenticated: Jixwe te berê têketin kiriye. inactive: Ajimêra te hîn nehatiye çalakkirin. - invalid: '%{authentication_keys} an jî borînpeyv nederbasdar e.' + invalid: "%{authentication_keys} an jî borînpeyv nederbasdar e." last_attempt: Peşiya kilît kirina ajimêra te carek din jî biceribîne. locked: Ajimêra ye hat kilît kirin. - not_found_in_database: '%{authentication_keys} an jî borînpeyv nederbasdar e.' + not_found_in_database: "%{authentication_keys} an jî borînpeyv nederbasdar e." pending: Ajimêra te hîn tê vekolandin. timeout: Danişîna te qedîya. Ji kerema xwe ji bo berdewamiyê dîsa têkeve. unauthenticated: Peşiya berdewamiya te têketina xwe bike an jî xwe tomar bike. @@ -20,7 +21,9 @@ ku: action: Navnîşana e-nameyê piştrast bike action_with_app: Piştrast bike û vegere bo %{app} explanation: Te li ser %{host} ajimêrek çê kiriye bi navnîşana vê e-nameyê re. Tu ji çalakkirina wê bi tikandinekê dûr î. Ku ev ne tu bûya, ji kerema xwe vê e-nameyê paşguh bike. - explanation_when_pending: "Te bi vê navnîşana e -nameyê serlêdana vexwendina %{host} kir. Gava ku tu navnîşana e-nameya xwe piştrast bikî, em ê serlêdana te binirxînin. Tu dikarî têkevî da ku hûrguliyên xwe biguherînî an ajimêra xwe jê bibî, lê heya ku ajimêra te neyê pejirandin tu nekarî piraniya fonksiyonan bi kar bînî\nKu serlêdana te neyê erêkirin, wê daneyên te werin jêbirin, ji ber vê yekê çalakîyek din ji te nayê xwestin. Ku ev ne tu bû, ji kerema xwe vê e-nameyê paşguh bike." + explanation_when_pending: |- + Te bi vê navnîşana e -nameyê serlêdana vexwendina %{host} kir. Gava ku tu navnîşana e-nameya xwe piştrast bikî, em ê serlêdana te binirxînin. Tu dikarî têkevî da ku hûrguliyên xwe biguherînî an ajimêra xwe jê bibî, lê heya ku ajimêra te neyê pejirandin tu nekarî piraniya fonksiyonan bi kar bînî + Ku serlêdana te neyê erêkirin, wê daneyên te werin jêbirin, ji ber vê yekê çalakîyek din ji te nayê xwestin. Ku ev ne tu bû, ji kerema xwe vê e-nameyê paşguh bike. extra_html: Jkx vê jî kontrol bike rêbazên rajekar û mercên me yên karûbaran. subject: 'Mastodon: ji bo %{instance} pejirandinê rêwerzan' title: Navnîşana e-nameyê piştrast bike @@ -36,7 +39,9 @@ ku: title: Borînpeyv hate guhertin reconfirmation_instructions: explanation: Navnîşana nû piştrast bike da ku tu e-nameya xwe biguherînî. - extra: "Ku ev daxwaz ji aliyê te de nehate pêkanîn, ji kerema xwe vê e-nameyê paşguh bike.\nNavnîşana e-nameyê bo ajimêra Mastodon wê tu guhertin pêk neyîne heya ku tu li girêdana jêrin bitikînî." + extra: |- + Ku ev daxwaz ji aliyê te de nehate pêkanîn, ji kerema xwe vê e-nameyê paşguh bike. + Navnîşana e-nameyê bo ajimêra Mastodon wê tu guhertin pêk neyîne heya ku tu li girêdana jêrin bitikînî. subject: 'Mastodon: E-nameyê piştrast bike bo %{instance}' title: Navnîşana e-nameyê piştrast bike reset_password_instructions: @@ -62,7 +67,7 @@ ku: webauthn_credential: added: explanation: Kilîta ewlehiyê jêrîn li ajimêra te hate tevlîkirin - subject: 'Kilîta ewlehiyê ya nû' + subject: Kilîta ewlehiyê ya nû title: Kilîta ewlehiyê ya nû hate tevlîkirin deleted: explanation: Kilîta ewlehiyê jêrîn li ajimêra te hate jêbirin diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 1b36c853016c0d..e61e1b7fd95a9d 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -1,3 +1,4 @@ +--- lv: devise: confirmations: @@ -110,6 +111,6 @@ lv: not_found: nav atrasts not_locked: nebija bloķēts not_saved: - zero: "%{count} kļūdas liedza saglabāt šo %{resource}:" one: '1 kļūda liedza saglabāt šo %{resource}:' other: "%{count} kļūdas liedza saglabāt šo %{resource}:" + zero: "%{count} kļūdas liedza saglabāt šo %{resource}:" diff --git a/config/locales/devise.ml.yml b/config/locales/devise.ml.yml index 4458ac4ec0572d..08db402243a913 100644 --- a/config/locales/devise.ml.yml +++ b/config/locales/devise.ml.yml @@ -1,3 +1,4 @@ +--- ml: devise: confirmations: @@ -7,10 +8,10 @@ ml: failure: already_authenticated: നിങ്ങൾ മുൻപേതന്നെ പ്രവേശിച്ചിരുന്നു. inactive: നിങ്ങളുടെ അംഗത്വം ഇതുവരെ സജീവമാക്കപ്പെട്ടിട്ടില്ല. - invalid: '%{authentication_keys} അല്ലെങ്കിൽ സൂത്രവാക്യം പ്രാബല്യത്തിലില്ല.' + invalid: "%{authentication_keys} അല്ലെങ്കിൽ സൂത്രവാക്യം പ്രാബല്യത്തിലില്ല." last_attempt: നിങ്ങളുടെ അംഗത്വം ബന്ധിക്കപ്പെടുന്നതിന് മുൻപ് ഒരു അവസരം കൂടി ബാക്കിയുണ്ട്. locked: നിങ്ങളുടെ അംഗത്വം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. - not_found_in_database: '%{authentication_keys} അല്ലെങ്കിൽ സൂത്രവാക്യം പ്രാബല്യത്തിലില്ല.' + not_found_in_database: "%{authentication_keys} അല്ലെങ്കിൽ സൂത്രവാക്യം പ്രാബല്യത്തിലില്ല." pending: നിങ്ങളുടെ അംഗത്വം ഇപ്പോഴും അവലോകനയിലാണ്. timeout: നിങ്ങളുടെ വിഹരണസമയം കാലഹരണപ്പെട്ടിരിക്കുന്നു. തുടരാൻ ദയവായി വീണ്ടും പ്രവേശിക്കുക. unauthenticated: തുടരുന്നതിന് മുൻപ് നിങ്ങൾ അംഗത്വത്തോടെ പ്രവേശിക്കുകയോ അംഗത്വം എടുക്കുകയോ ചെയ്യേണ്ടതാണ്. diff --git a/config/locales/devise.ms.yml b/config/locales/devise.ms.yml index 3054e536b40c2d..30eceb239d56f5 100644 --- a/config/locales/devise.ms.yml +++ b/config/locales/devise.ms.yml @@ -1,3 +1,4 @@ +--- ms: devise: confirmations: @@ -7,10 +8,10 @@ ms: failure: already_authenticated: Anda sudah daftar masuk. inactive: Akaun anda belum diaktifkan. - invalid: '%{authentication_keys} atau kata laluan tidak sah.' + invalid: "%{authentication_keys} atau kata laluan tidak sah." last_attempt: Anda mempunyai satu lagi percubaan sebelum akaun anda dikunci. locked: Akaun anda dikunci. - not_found_in_database: '%{authentication_keys} atau kata laluan tidak sah.' + not_found_in_database: "%{authentication_keys} atau kata laluan tidak sah." pending: Akaun anda masih dalam semakan. timeout: Sesi anda telah tamat. Sila daftar masuk semula. unauthenticated: Anda perlu daftar masuk atau mendaftar sebelum meneruskan. diff --git a/config/locales/devise.my.yml b/config/locales/devise.my.yml index dc906bbcd32a65..04d744cf2bd775 100644 --- a/config/locales/devise.my.yml +++ b/config/locales/devise.my.yml @@ -1,3 +1,4 @@ +--- my: devise: confirmations: @@ -19,13 +20,13 @@ my: confirmation_instructions: action: အီးမေးလ်လိပ်စာကို အတည်ပြုပါ action_with_app: အတည်ပြုပြီး %{app} သို့ပြန်သွားပါ - explanation: '%{host} တွင် ဤအီးမေးလ်လိပ်စာဖြင့် သင် အကောင့်တစ်ခု ဖန်တီးထားပြီးဖြစ်သည်။ သင် ကလစ်တစ်ချက်နှိပ်ရုံဖြင့် အကောင့်အား အသက်ဝင်စေနိုင်သည်။ အကယ်၍ သင်ဖန်တီးထားခြင်းမဟုတ်ခဲ့လျှင် ယခုအီးမေးလ်အား ကျေးဇူးပြု၍ လျစ်လျူရှုပါ။' - explanation_when_pending: '%{host} သို့ ဖိတ်ခေါ်မှုတစ်ခုကို ဤအီးမေးလ်လိပ်စာဖြင့် သင်တောင်းဆိုခဲ့သည်။ အီးမေးလ်လိပ်စာကို သင်အတည်ပြုပြီးပါက ကျွန်ုပ်တို့အနေဖြင့် သင့်တောင်းဆိုမှုအား စိစစ်မည်ဖြစ်သည်။ သင့်အနေဖြင့် မိမိအကောင့်အတွင်း ဝင်ရောက်၍ အသေးစိတ်အချက်အလက်များအား ပြုပြင်နိုင်သည် (သို့) မိမိအကောင့်အား ဖျက်နိုင်သည်။ သို့သော် သင့်အကောင့်ကို အတည်ပြုမပြီးမချင်း သင့်အနေဖြင့် လုပ်ငန်းဆောင်တာအများစုအား ဆောင်ရွက်နိုင်မည် မဟုတ်ပေ။ သင်၏ အကောင့်တောင်းဆိုမှု ငြင်းဆန်ခံရပါက သင့်အချက်အလက်များအား ဖယ်ရှားပေးမည်ဖြစ်သည်။ သင့်အနေဖြင့် တခြားအရေးယူဆောင်ရွက်ရန် မလိုအပ်ပါ။ အကယ်၍ ယခုတောင်းဆိုမှုအား သင်ပြုလုပ်ထားခြင်းမဟုတ်ခဲ့လျှင် ယခုအီးမေးလ်အား ကျေးဇူးပြု၍ လျစ်လျူရှုပါ။' + explanation: "%{host} တွင် ဤအီးမေးလ်လိပ်စာဖြင့် သင် အကောင့်တစ်ခု ဖန်တီးထားပြီးဖြစ်သည်။ သင် ကလစ်တစ်ချက်နှိပ်ရုံဖြင့် အကောင့်အား အသက်ဝင်စေနိုင်သည်။ အကယ်၍ သင်ဖန်တီးထားခြင်းမဟုတ်ခဲ့လျှင် ယခုအီးမေးလ်အား ကျေးဇူးပြု၍ လျစ်လျူရှုပါ။" + explanation_when_pending: "%{host} သို့ ဖိတ်ခေါ်မှုတစ်ခုကို ဤအီးမေးလ်လိပ်စာဖြင့် သင်တောင်းဆိုခဲ့သည်။ အီးမေးလ်လိပ်စာကို သင်အတည်ပြုပြီးပါက ကျွန်ုပ်တို့အနေဖြင့် သင့်တောင်းဆိုမှုအား စိစစ်မည်ဖြစ်သည်။ သင့်အနေဖြင့် မိမိအကောင့်အတွင်း ဝင်ရောက်၍ အသေးစိတ်အချက်အလက်များအား ပြုပြင်နိုင်သည် (သို့) မိမိအကောင့်အား ဖျက်နိုင်သည်။ သို့သော် သင့်အကောင့်ကို အတည်ပြုမပြီးမချင်း သင့်အနေဖြင့် လုပ်ငန်းဆောင်တာအများစုအား ဆောင်ရွက်နိုင်မည် မဟုတ်ပေ။ သင်၏ အကောင့်တောင်းဆိုမှု ငြင်းဆန်ခံရပါက သင့်အချက်အလက်များအား ဖယ်ရှားပေးမည်ဖြစ်သည်။ သင့်အနေဖြင့် တခြားအရေးယူဆောင်ရွက်ရန် မလိုအပ်ပါ။ အကယ်၍ ယခုတောင်းဆိုမှုအား သင်ပြုလုပ်ထားခြင်းမဟုတ်ခဲ့လျှင် ယခုအီးမေးလ်အား ကျေးဇူးပြု၍ လျစ်လျူရှုပါ။" extra_html: ကျေးဇူးပြု၍ ဆာဗာစည်းမျဉ်းများ နှင့် ကျွန်ုပ်တို့၏ဝန်ဆောင်မှုစည်းမျဉ်းများကိုလည်း စစ်ဆေးကြည့်ပါ။ - subject: 'Mastodon - %{instance} အတွက် အတည်ပြုချက် ညွှန်ကြားချက်များ' + subject: Mastodon - %{instance} အတွက် အတည်ပြုချက် ညွှန်ကြားချက်များ title: အီးမေးလ်လိပ်စာကို အတည်ပြုပါ email_changed: - explanation: 'သင့်အကောင့်အတွက် အီးမေးလ်လိပ်စာကို ပြောင်းလဲနေပါသည် -' + explanation: သင့်အကောင့်အတွက် အီးမေးလ်လိပ်စာကို ပြောင်းလဲနေပါသည် - extra: သင့်အီးမေးလ်လိပ်စာ မပြောင်းထားပါက တစ်စုံတစ်ဦးသည် သင့်အကောင့်သို့ ဝင်ရောက်ခွင့်ရရှိသွားနိုင်ပါသည်။ သင့်အကောင့် လော့ခ်ကျသွားပါက သင့်စကားဝှက်ကို ချက်ချင်းပြောင်းပါ သို့မဟုတ် ဆာဗာစီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။ subject: 'Mastodon: အီးမေးလ်ပြောင်းလဲသွားပြီ' title: အီးမေးလ်လိပ်စာအသစ် @@ -55,10 +56,10 @@ my: title: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ဖွင့်ထားသည် two_factor_recovery_codes_changed: explanation: ယခင်ပြန်လည်ရယူသည့်ကုဒ်များမှာ မမှန်ကန်သောကြောင့် အသစ်များကို ထုတ်ပေးခဲ့သည်။ - subject: 'Mastodon - နှစ်ဆင့်ခံလုံခြုံရေး ပြန်လည်ရယူသည့်ကုဒ်များကို ပြန်လည်ထုတ်ပေးခြင်း' + subject: Mastodon - နှစ်ဆင့်ခံလုံခြုံရေး ပြန်လည်ရယူသည့်ကုဒ်များကို ပြန်လည်ထုတ်ပေးခြင်း title: နှစ်ဆင့်ခံလုံခြုံရေးစနစ် ပြန်လည်ရယူသည့်ကုဒ်နံပါတ်များ ပြောင်းလဲခဲ့သည် unlock_instructions: - subject: 'Mastodon - ညွှန်ကြားချက်များကို လော့ခ်ဖွင့်ပါ' + subject: Mastodon - ညွှန်ကြားချက်များကို လော့ခ်ဖွင့်ပါ webauthn_credential: added: explanation: ဖော်ပြပါလုံခြုံရေးသော့ချက်အား သင့်အကောင့်ထဲသို့ထည့်ပြီးပါပြီ @@ -70,15 +71,15 @@ my: title: လုံခြုံရေးသော့ချက်များထဲမှတစ်ခု ဖျက်လိုက်ပါပြီ webauthn_disabled: explanation: သင့်အကောင့်အတွက် လုံခြုံရေးကီးများဖြင့် အထောက်အထားပြခြင်းကို ပိတ်ထားသည်။ TOTP အက်ပ်မှထုတ်ပေးသည့် တိုကင်ကိုသာ အသုံးပြု၍ အကောင့်ဝင်ရောက်နိုင်ပါသည်။ - subject: 'Mastodon - လုံခြုံရေးကီးများဖြင့် အထောက်အထားစိစစ်ခြင်းကို ပိတ်ထားသည်' + subject: Mastodon - လုံခြုံရေးကီးများဖြင့် အထောက်အထားစိစစ်ခြင်းကို ပိတ်ထားသည် title: လုံခြုံရေးသော့ချက်များ ပိတ်ပြီးပါပြီ webauthn_enabled: explanation: သင့်အကောင့်အတွက် လုံခြုံရေးကီး အထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားသည်။ အကောင့်ဝင်ရန်အတွက် သင်၏လုံခြုံရေးကီးကို ယခုအသုံးပြုနိုင်ပါပြီ။ - subject: 'Mastodon - လုံခြုံရေးကီး အထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားသည်' + subject: Mastodon - လုံခြုံရေးကီး အထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားသည် title: လုံခြုံရေးသော့ချက်များ ဖွင့်ပြီးပါပြီ omniauth_callbacks: - failure: '“%{reason}” ကြောင့် %{kind} မှ သင့်ကို စစ်မှန်ကြောင်း အထောက်အထား မပြနိုင်ပါ။' - success: '%{kind} အကောင့်မှ အထောက်အထားပြပြီးပါပြီ။' + failure: "“%{reason}” ကြောင့် %{kind} မှ သင့်ကို စစ်မှန်ကြောင်း အထောက်အထား မပြနိုင်ပါ။" + success: "%{kind} အကောင့်မှ အထောက်အထားပြပြီးပါပြီ။" passwords: no_token: စကားဝှက်ပြန်လည်သတ်မှတ်ခြင်းအီးမေးလ်မှ မလာပါက ဤစာမျက်နှာကို သင်ဝင်ရောက်၍မရနိုင်ပါ။ အကယ်၍ ၎င်းမှလာပါက ပေးထားသော URL အပြည့်အစုံကို အသုံးပြုရပါမည်။ send_instructions: အကယ်၍ သင့်အီးမေးလ်လိပ်စာသည် ကျွန်ုပ်တို့၏ဒေတာဘေ့စ်တွင် ရှိနေပါက မိနစ်အနည်းငယ်အတွင်း သင့်အီးမေးလ်လိပ်စာတွင် စကားဝှက်ပြန်လည်ရယူရေးလင့်ခ် ရရှိမည်ဖြစ်ပါသည်။ ဤအီးမေးလ်ကို လက်ခံမရရှိပါက သင်၏ Spam ဖိုင်ကို စစ်ဆေးပါ။ @@ -105,7 +106,7 @@ my: errors: messages: already_confirmed: အတည်ပြုပြီးဖြစ်သည်။ ကျေးဇူးပြု၍ အကောင့်ဝင်ကြည့်ပါ။ - confirmation_period_expired: '%{period} အတွင်း အတည်ပြုရန် လိုအပ်ပြီး အသစ်တစ်ခု တောင်းဆိုပါ' + confirmation_period_expired: "%{period} အတွင်း အတည်ပြုရန် လိုအပ်ပြီး အသစ်တစ်ခု တောင်းဆိုပါ" expired: သည် သက်တမ်းကျော်လွန်သွားပြီ။ ကျေးဇူးပြု၍အသစ်တစ်ခု တောင်းဆိုပါ not_found: ရှာမတွေ့ပါ not_locked: လော့ခ် မချထားပါ diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index e36b94f794c862..1b5081fe8c58da 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -1,3 +1,4 @@ +--- nl: devise: confirmations: @@ -7,10 +8,10 @@ nl: failure: already_authenticated: Je bent al ingelogd. inactive: Jouw account is nog niet geactiveerd. - invalid: '%{authentication_keys} of wachtwoord ongeldig.' + invalid: "%{authentication_keys} of wachtwoord ongeldig." last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort. locked: Jouw account is opgeschort. - not_found_in_database: '%{authentication_keys} of wachtwoord ongeldig.' + not_found_in_database: "%{authentication_keys} of wachtwoord ongeldig." pending: Jouw account moet nog steeds worden beoordeeld. timeout: Jouw sessie is verlopen, log opnieuw in. unauthenticated: Je dient in te loggen of te registreren. diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index b67d505c364f7b..eee99284750fc2 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -1,3 +1,4 @@ +--- nn: devise: confirmations: diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index ec298cb69eede0..a5d6cad7a10611 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -1,4 +1,5 @@ -"no": +--- +'no': devise: confirmations: confirmed: E-postaddressen din er blitt bekreftet. diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml index c4f3574fb2fbd9..16419cd1e34343 100644 --- a/config/locales/devise.oc.yml +++ b/config/locales/devise.oc.yml @@ -1,3 +1,4 @@ +--- oc: devise: confirmations: @@ -7,10 +8,10 @@ oc: failure: already_authenticated: Sètz ja connectat. inactive: Vòstre compte es pas encara activat. - invalid: '%{authentication_keys} invalida.' + invalid: "%{authentication_keys} invalida." last_attempt: Vos demòra un ensag abans que vòstre compte siasque blocat. locked: Vòstre compte es blocat. - not_found_in_database: '%{authentication_keys} invalida.' + not_found_in_database: "%{authentication_keys} invalida." pending: Vòstre compte es encara en aprobacion. timeout: Vòstra session a expirat. Mercés de vos tornar connectar per contunhar. unauthenticated: Vos cal vos connectar o marcar abans de contunhar. @@ -32,7 +33,7 @@ oc: password_change: explanation: Lo senhal per vòstre compte a cambiat. extra: S’avètz pas demandat aqueste cambiament de senhal, poiriá arribar que qualqu’un mai aguèsse agut accès a vòstre compte. Mercés de cambiar sulpic vòstre senhal o de contactar vòstre administrator de servidor se l’accès a vòstre compte vos es barrat. - subject: 'Mastodon : senhal cambiat' + subject: Mastodon : senhal cambiat title: Senhal cambiat reconfirmation_instructions: explanation: Confirmar la nòva adreça per cambiar lo corrièl. @@ -43,7 +44,7 @@ oc: action: Cambiament de senhal explanation: Avètz demandat un nòu senhal per vòstre compte. extra: S’avètz pas res demandat, fasquètz pas cas a aqueste corrièl. Vòstre senhal cambiarà pas se clicatz pas lo ligam e que ne causissètz pas un novèl. - subject: 'Mastodon : consignas per reïnicializar lo senhal' + subject: Mastodon : consignas per reïnicializar lo senhal title: Reïnicializacion del senhal two_factor_disabled: explanation: L’autentificacion dos factors per vòstre compte es estada desactivada. La connexion es ara possibla solament amb l’adreça electronica e lo senhal. @@ -58,7 +59,7 @@ oc: subject: 'Mastodon : còdis de recuperacion dos factors regenerats' title: Còdis 2FA de recuperacion cambiats unlock_instructions: - subject: 'Mastodon : consignas de desblocatge' + subject: Mastodon : consignas de desblocatge webauthn_credential: added: explanation: La clau de seguretat seguenta foguèt ajustada a vòstre compte diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml index e9672b87178a2d..ff086888f3c137 100644 --- a/config/locales/devise.pl.yml +++ b/config/locales/devise.pl.yml @@ -1,3 +1,4 @@ +--- pl: devise: confirmations: @@ -47,15 +48,15 @@ pl: title: Przywracanie hasła two_factor_disabled: explanation: Uwierzytelnianie dwuskładnikowe dla Twojego konta zostało wyłączone. Możesz się teraz logować korzystając z samego adresu e-mail i hasła. - subject: 'Mastodon – wyłączono uwierzytelnianie dwustopniowe' + subject: Mastodon – wyłączono uwierzytelnianie dwustopniowe title: Wyłączono 2FA two_factor_enabled: explanation: Uwierzytelnianie dwuskładnikowe dla Twojego konta zostało włączone. Logując się, będziesz potrzebować tokenu z połączonej aplikacji TOTP. - subject: 'Mastodon – włączono uwierzytelnianie dwustopniowe' + subject: Mastodon – włączono uwierzytelnianie dwustopniowe title: Włączono 2FA two_factor_recovery_codes_changed: explanation: Poprzednie kody zapasowe zostały unieważnione, a nowe zostały wygenerowane. - subject: 'Mastodon – wygenerowano nowe kody ratunkowe 2FA' + subject: Mastodon – wygenerowano nowe kody ratunkowe 2FA title: Zmieniono kody odzyskiwania 2FA unlock_instructions: subject: 'Mastodon: Instrukcje odblokowania konta' @@ -110,7 +111,7 @@ pl: not_found: nie znaleziono not_locked: było zablokowane not_saved: + few: 'Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:' + many: 'Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:' one: '1 błąd nie uniemożliwił zapisanie %{resource}:' - few: "Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:" - many: "Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:" - other: "Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:" + other: 'Błędy (%{count}) uniemożliwiły zapisanie tego %{resource}:' diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 8fe333113acbac..6345a103b81fe3 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -1,3 +1,4 @@ +--- pt-BR: devise: confirmations: @@ -7,10 +8,10 @@ pt-BR: failure: already_authenticated: Você entrou na sua conta. inactive: Sua conta não foi confirmada ainda. - invalid: '%{authentication_keys} ou senha inválida.' + invalid: "%{authentication_keys} ou senha inválida." last_attempt: Você tem mais uma tentativa antes de sua conta ser bloqueada. locked: Sua conta está bloqueada. - not_found_in_database: '%{authentication_keys} ou senha inválida.' + not_found_in_database: "%{authentication_keys} ou senha inválida." pending: Sua conta está sendo revisada. timeout: Sua sessão expirou. Por favor, entre novamente para continuar. unauthenticated: Você precisa entrar ou criar uma conta antes de continuar. diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index 706f2edf6aeb39..0571598ae0c93f 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -1,3 +1,4 @@ +--- pt-PT: devise: confirmations: @@ -7,10 +8,10 @@ pt-PT: failure: already_authenticated: A tua sessão já está aberta. inactive: A tua conta ainda não está ativada. - invalid: '%{authentication_keys} ou palavra-passe inválida.' + invalid: "%{authentication_keys} ou palavra-passe inválida." last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada. locked: A tua conta está bloqueada. - not_found_in_database: '%{authentication_keys} ou palavra-passe inválida.' + not_found_in_database: "%{authentication_keys} ou palavra-passe inválida." pending: A sua conta está ainda a aguardar revisão. timeout: A tua sessão expirou. Por favor, entra de novo para continuares. unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar. diff --git a/config/locales/devise.ro.yml b/config/locales/devise.ro.yml index b1644b09f6e98e..d25d0f6b3e17f7 100644 --- a/config/locales/devise.ro.yml +++ b/config/locales/devise.ro.yml @@ -1,3 +1,4 @@ +--- ro: devise: confirmations: @@ -7,10 +8,10 @@ ro: failure: already_authenticated: Ești deja conectat. inactive: Contul tău nu este încă activat. - invalid: '%{authentication_keys} sau parolă greșită.' + invalid: "%{authentication_keys} sau parolă greșită." last_attempt: Mai ai încă o încercare înainte de a bloca contul. locked: Contul tău este blocat. - not_found_in_database: '%{authentication_keys} sau parolă greșită.' + not_found_in_database: "%{authentication_keys} sau parolă greșită." pending: Contul tău este încă în curs de revizuire. timeout: Sesiunea ta a expirat. Te rugăm să te conectezi din nou pentru a continua. unauthenticated: Trebuie să te conectezi sau să te înregistrezi înainte de a continua. @@ -27,12 +28,12 @@ ro: email_changed: explanation: 'Adresa de e-mail pentru contul tău este schimbată la:' extra: Dacă nu v-ați schimbat adresa de e-mail, probabil că cineva a obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. - subject: 'E-mail schimbat' + subject: E-mail schimbat title: Noua adresa de e-mail password_change: explanation: Parola contului tău a fost schimbată. extra: Dacă nu v-ați schimbat parola, este posibil ca cineva să fi obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. - subject: 'Parolă schimbată' + subject: Parolă schimbată title: Parolă schimbată reconfirmation_instructions: explanation: Confirmă noua adresă pentru a schimba adresa de e-mail. @@ -43,22 +44,22 @@ ro: action: Schimbă parola explanation: Ați solicitat o nouă parolă pentru contul dvs. extra: Dacă nu ați solicitat acest lucru, ignorați acest e-mail. Parola dvs. nu se va schimba până când nu veți accesa link-ul de mai sus și nu veți crea unul nou. - subject: 'Instrucțiuni pentru resetarea parolei' + subject: Instrucțiuni pentru resetarea parolei title: Resetare parolă two_factor_disabled: explanation: Autentificarea în doi pași pentru contul tău a fost dezactivată. Autentificarea este posibilă acum folosind doar adresa de e-mail și parola. - subject: 'Autentificare cu doi factori dezactivată' + subject: Autentificare cu doi factori dezactivată title: 2FA dezactivat two_factor_enabled: explanation: Autentificarea în doi pași a fost activată pentru contul dvs. Un token generat de aplicația TOTP împerecheată va fi necesar pentru autentificare. - subject: 'Autentificare în doi pași activată' + subject: Autentificare în doi pași activată title: 2FA activat two_factor_recovery_codes_changed: explanation: Codurile anterioare de recuperare au fost invalidate și unele noi generate. - subject: 'Recuperare în doi factori' + subject: Recuperare în doi factori title: Coduri de recuperare 2FA modificate unlock_instructions: - subject: 'Instrucțiuni de deblocare' + subject: Instrucțiuni de deblocare webauthn_credential: added: explanation: Următoarea cheie de securitate a fost adăugată în contul tău @@ -110,6 +111,6 @@ ro: not_found: nu a fost găsit not_locked: nu a fost blocat not_saved: - one: 'O eroare a împiedicat salvarea acestui %{resource}:' few: "%{count} erori au împiedicat salvarea acestui %{resource}:" + one: 'O eroare a împiedicat salvarea acestui %{resource}:' other: "%{count} de erori au împiedicat salvarea acestui %{resource}:" diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index 8e17e5c71d1c3c..d2903ce23d934d 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -1,3 +1,4 @@ +--- ru: devise: confirmations: @@ -110,7 +111,7 @@ ru: not_found: не найден not_locked: не был заблокирован not_saved: - one: '1 ошибка помешала сохранению этого %{resource}:' few: "%{count} ошибки помешали сохранению этого %{resource}:" many: "%{count} ошибок помешали сохранению этого %{resource}:" + one: '1 ошибка помешала сохранению этого %{resource}:' other: "%{count} ошибок помешали сохранению этого %{resource}:" diff --git a/config/locales/devise.sc.yml b/config/locales/devise.sc.yml index d3a05690c3be3c..02bcab0d111196 100644 --- a/config/locales/devise.sc.yml +++ b/config/locales/devise.sc.yml @@ -1,3 +1,4 @@ +--- sc: devise: confirmations: @@ -7,10 +8,10 @@ sc: failure: already_authenticated: Ses giai intradu. inactive: Su contu tuo no est ancora ativadu. - invalid: '%{authentication_keys} o crae non vàlida.' + invalid: "%{authentication_keys} o crae 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 non vàlida.' + not_found_in_database: "%{authentication_keys} o crae 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. diff --git a/config/locales/devise.sco.yml b/config/locales/devise.sco.yml index b4e617a6f2fa57..8563b4ee24d5cf 100644 --- a/config/locales/devise.sco.yml +++ b/config/locales/devise.sco.yml @@ -1,3 +1,4 @@ +--- sco: devise: confirmations: diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index e444c978594429..362f97b8a9b030 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -1,3 +1,4 @@ +--- si: devise: confirmations: @@ -71,7 +72,7 @@ si: title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' - success: '%{kind} ගිණුමෙන් සාර්ථකව සත්‍යාපනය කරන ලදී.' + success: "%{kind} ගිණුමෙන් සාර්ථකව සත්‍යාපනය කරන ලදී." passwords: no_token: මුරපද යළි පිහිටුවීමේ විද්‍යුත් තැපෑලකින් නොපැමිණ ඔබට මෙම පිටුවට ප්‍රවේශ විය නොහැක. ඔබ පැමිණෙන්නේ මුරපද යළි පිහිටුවීමේ විද්‍යුත් තැපෑලකින් නම්, කරුණාකර ඔබ සපයා ඇති සම්පූර්ණ URL භාවිතා කර ඇති බවට වග බලා ගන්න. send_instructions: ඔබගේ විද්‍යුත් තැපැල් ලිපිනය අපගේ දත්ත ගබඩාවේ තිබේ නම්, මිනිත්තු කිහිපයකින් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට මුරපද ප්‍රතිසාධන සබැඳියක් ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. @@ -98,9 +99,9 @@ si: errors: messages: already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න - confirmation_period_expired: '%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න' + confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න not_found: හමු නොවිණි not_saved: one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' - other: "දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:" + other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index b8eb2eec14340b..e11c7f1db32710 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -1,3 +1,4 @@ +--- sk: devise: confirmations: @@ -110,7 +111,7 @@ sk: not_found: nenájdený not_locked: nebol zamknutý not_saved: - one: '1 chyba zabránila uloženiu tohto %{resource}:' few: "%{count} chýb zabránilo uloženiu tohto %{resource}:" many: "%{count} chýb zabránilo uloženiu tohto %{resource}:" + one: '1 chyba zabránila uloženiu tohto %{resource}:' other: "%{count} chyby zabránili uloženiu tohto %{resource}:" diff --git a/config/locales/devise.sl.yml b/config/locales/devise.sl.yml index d39919bd613690..be0f98ae1126a6 100644 --- a/config/locales/devise.sl.yml +++ b/config/locales/devise.sl.yml @@ -1,3 +1,4 @@ +--- sl: devise: confirmations: @@ -110,7 +111,7 @@ sl: not_found: ni najdeno not_locked: ni bil zaklenjen not_saved: - one: '1 napaka je preprečila shranjevanje %{resource}:' - two: "%{count} napaki sta preprečili shranjevanje vira %{resource}:" few: "%{count} napake so preprečile shranjevanje vira %{resource}:" + one: '1 napaka je preprečila shranjevanje %{resource}:' other: "%{count} napak je preprečilo shranjevanje vira %{resource}:" + two: "%{count} napaki sta preprečili shranjevanje vira %{resource}:" diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml index 8a20dc971d9f77..6e2f1b41138501 100644 --- a/config/locales/devise.sq.yml +++ b/config/locales/devise.sq.yml @@ -1,3 +1,4 @@ +--- sq: devise: confirmations: @@ -7,10 +8,10 @@ sq: failure: already_authenticated: Jeni tashmë i futur. inactive: Llogaria juaj s’është aktivizuar ende. - invalid: '%{authentication_keys} ose fjalëkalim i pavlefshëm.' + invalid: "%{authentication_keys} ose fjalëkalim i pavlefshëm." last_attempt: Mund të provoni edhe një herë, përpara se llogaria juaj të kyçet. locked: Llogaria juaj është e kyçur. - not_found_in_database: '%{authentication_keys} ose fjalëkalim i pavlefshëm.' + not_found_in_database: "%{authentication_keys} ose fjalëkalim i pavlefshëm." pending: Llogaria juaj është ende nën shqyrtim. timeout: Sesioni juaj ka skaduar. Ju lutemi, që të vazhdohet, ribëni hyrjen. unauthenticated: Përpara se të vazhdohet më tej, lypset të bëni hyrjen ose të regjistroheni. @@ -111,4 +112,4 @@ sq: not_locked: s’qe kyçur not_saved: one: 'Ruajtjen e këtij %{resource} e pengoi 1 gabim:' - other: "Ruajtjen e këtij %{resource} e penguan %{count} gabime:" + other: 'Ruajtjen e këtij %{resource} e penguan %{count} gabime:' diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml index bef3ac7c760320..6b4a5801c616e9 100644 --- a/config/locales/devise.sr-Latn.yml +++ b/config/locales/devise.sr-Latn.yml @@ -1,3 +1,4 @@ +--- sr-Latn: devise: confirmations: @@ -110,6 +111,6 @@ sr-Latn: not_found: nije pronađeno not_locked: nije zaključan not_saved: - one: '1 greška sprečava %{resource}a:' few: "%{count} greške sprečavaju %{resource}a:" + one: '1 greška sprečava %{resource}a:' other: "%{count} grešaka sprečavaju %{resource}a:" diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml index 2a7f4901e72320..d55cf7a268e924 100644 --- a/config/locales/devise.sr.yml +++ b/config/locales/devise.sr.yml @@ -1,3 +1,4 @@ +--- sr: devise: confirmations: @@ -110,6 +111,6 @@ sr: not_found: није пронађено not_locked: није закључан not_saved: - one: '1 грешка спречава %{resource}а:' few: "%{count} грешке спречавају %{resource}a:" + one: '1 грешка спречава %{resource}а:' other: "%{count} грешака спречавају %{resource}a:" diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml index 536495e01882b5..e02983ad5f294d 100644 --- a/config/locales/devise.sv.yml +++ b/config/locales/devise.sv.yml @@ -1,3 +1,4 @@ +--- sv: devise: confirmations: @@ -55,7 +56,7 @@ sv: title: 2FA aktiverad two_factor_recovery_codes_changed: explanation: De tidigare återställningskoderna har ogiltigförklarats och nya har genererats. - subject: 'Mastodon Tvåfaktors-återställningskoder genererades på nytt' + subject: Mastodon Tvåfaktors-återställningskoder genererades på nytt title: 2FA-återställningskoder ändrades unlock_instructions: subject: 'Mastodon: Lås upp instruktioner' diff --git a/config/locales/devise.ta.yml b/config/locales/devise.ta.yml index 5b80f2b0c30c37..d4b4eeefc6eb40 100644 --- a/config/locales/devise.ta.yml +++ b/config/locales/devise.ta.yml @@ -1,3 +1,4 @@ +--- ta: devise: confirmations: @@ -19,7 +20,7 @@ ta: confirmation_instructions: action: மின்னஞ்சல் முகவரியை உறுதிசெய்யவும் action_with_app: உறுதிசெய்த பின் %{app}-க்குத் திரும்பவும் - explanation: '%{host} -இல் இந்த மின்னஞ்சல் முகவரியைக் கொண்டு ஒரு கணக்கை உருவாக்கியுள்ளீர்கள். அதை செயல்படுத்துவதில் இருந்து ஒரு சொடுக்கு தூரத்தில் உள்ளீர்கள். இந்த மின்னஞ்சல் உங்களுக்கானதில்லை எனில், தயைகூர்ந்து இதைப் பொருட்படுத்தாமல் விடவும்.' + explanation: "%{host} -இல் இந்த மின்னஞ்சல் முகவரியைக் கொண்டு ஒரு கணக்கை உருவாக்கியுள்ளீர்கள். அதை செயல்படுத்துவதில் இருந்து ஒரு சொடுக்கு தூரத்தில் உள்ளீர்கள். இந்த மின்னஞ்சல் உங்களுக்கானதில்லை எனில், தயைகூர்ந்து இதைப் பொருட்படுத்தாமல் விடவும்." explanation_when_pending: நீங்கள் %{host} -இடம் அழைப்பு வேண்டி இந்த மின்னஞ்சலின் மூலம் விண்ணப்பித்துள்ளீர்கள். உங்கள் மின்னஞ்சலை நீங்கள் உறுதி செய்தவுடன், நாங்கள் உங்களின் விண்ணப்பத்தைப் பரிசீலிப்போம். உங்களுடைய விவரங்களைத் திருத்தவோ, கணக்கை அழிக்கவோ நீங்கள் உள்நுழையலாம். ஆனால் உங்கள் கணக்கு ஒப்புதல் பெறப்படும்வரை உங்களால் அதன் பெரும்பாலான வசதிகளைப் பயன்படுத்த முடியாது. உங்களின் விண்ணப்பம் நிராகரிக்கப்பட்டால், உங்களுடைய விவரங்கள் அழிக்கப்படும். எனவே அந்நிலையில் நீங்கள் எதுவும் செய்ய வேண்டியதில்லை. இம்மின்னஞ்சல் உங்களுக்கானதில்லை என்றால், தயைகூர்ந்து இதைப் பொருட்படுத்தாமல் விடவும். extra_html: மேலும் தயைகூர்ந்து இந்த சேவையகத்தின் விதிகளையும் எங்களின் சேவை விதிமுறைகளையும்பார்வையிடவும். subject: 'மாஸ்டடான்: %{instance} -ஐ உறுதிசெய்வதற்கான வழிமுறைகள்' @@ -61,7 +62,7 @@ ta: subject: 'மாஸ்டடான்: மீண்டும் திறப்பதற்கான வழிமுறைகள்' omniauth_callbacks: failure: '"%{reason}" காரணமாக %{kind} -லிருந்து உங்களை உறுதிசெய்ய இயலவில்லை.' - success: '%{kind} கணக்கிலிருந்து வெற்றிகரமாக உறுதிசெய்யப்பட்டது.' + success: "%{kind} கணக்கிலிருந்து வெற்றிகரமாக உறுதிசெய்யப்பட்டது." passwords: no_token: கடவுச்சொல்லை மீட்டெடுக்க அனுப்பப்பட்ட மின்னஞ்சலின் வழியாக மட்டுமே இந்தப் பக்கத்தைத் திறக்க முடியும். அதன் வழியாகத்தான் வந்தீர்கள் எனில், அதில் கொடுக்கப்பட்டுள்ள முழு இணைய முகவரியைப் பயன்படுத்தினீர்களா என்பதைத் தயைகூர்ந்து சரிபார்க்கவும். send_instructions: எங்களின் தரவுத்தளத்தில் உங்கள் மின்னஞ்சல் முகவரி இருப்பின், இன்னும் சில நிமிடங்களில் அந்த முகவரிக்கு உங்களின் கடவுச்சொல்லை மீட்டெடுக்கும் சுட்டி அனுப்பப்படும். அந்த மின்னஞ்சலை நீங்கள் பெறவில்லை எனில், தயைகூர்ந்து ஸ்பேம் பெட்டியில் பார்க்கவும். @@ -88,7 +89,7 @@ ta: errors: messages: already_confirmed: ஏற்கனவே உறுதிப்படுத்தப்பட்டது, தயவுசெய்து உள்நுழைய முயற்சிக்கவும் - confirmation_period_expired: '%{period} -ற்குள் உறுதிபடுத்தப்படவேண்டும். தயவுசெய்து புதிய ஒன்றைக் கோரவும்' + confirmation_period_expired: "%{period} -ற்குள் உறுதிபடுத்தப்படவேண்டும். தயவுசெய்து புதிய ஒன்றைக் கோரவும்" expired: காலாவதியாகிவிட்டது, தயவுசெய்து புதிய ஒன்றைக் கோரவும் not_found: கிடைக்கவில்லை not_locked: பூட்டப்படவில்லை diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index fcb1f15931bcb7..dce498525fb3e4 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -1,3 +1,4 @@ +--- th: devise: confirmations: @@ -7,10 +8,10 @@ th: failure: already_authenticated: คุณได้ลงชื่อเข้าอยู่แล้ว inactive: ยังไม่ได้เปิดใช้งานบัญชีของคุณ - invalid: '%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง' + invalid: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" last_attempt: คุณลองได้อีกหนึ่งครั้งก่อนที่จะมีการล็อคบัญชีของคุณ locked: มีการล็อคบัญชีของคุณอยู่ - not_found_in_database: '%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง' + not_found_in_database: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" pending: บัญชีของคุณยังคงอยู่ระหว่างการตรวจทาน timeout: เซสชันของคุณหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้งเพื่อดำเนินการต่อ unauthenticated: คุณจำเป็นต้องเข้าสู่ระบบหรือลงทะเบียนก่อนดำเนินการต่อ diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 09742cbc428f77..86b1c951f7b8be 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -1,3 +1,4 @@ +--- tr: devise: confirmations: @@ -78,7 +79,7 @@ tr: 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ı.' + success: "%{kind} hesabından başarıyla kimlik doğrulaması yapıldı." passwords: no_token: Bu sayfaya parola sıfırlama e-postasından gelmeden erişemezsiniz. Parola 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. @@ -105,7 +106,7 @@ tr: errors: messages: already_confirmed: zaten onaylanmış, lütfen tekrar oturum açmayı deneyin - confirmation_period_expired: '%{period} içinde onaylanması gerekli, lütfen yeni bir tane talep edin' + confirmation_period_expired: "%{period} içinde onaylanması gerekli, lütfen yeni bir tane talep edin" expired: süresi geçti, lütfen yeni bir tane talep edin not_found: bulunamadı not_locked: kilitlenmemiş diff --git a/config/locales/devise.tt.yml b/config/locales/devise.tt.yml index b611909e09f912..8757bcc0333a05 100644 --- a/config/locales/devise.tt.yml +++ b/config/locales/devise.tt.yml @@ -1,3 +1,4 @@ +--- tt: devise: confirmations: diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml index 1466413a82d89f..bb81a2a1b89ea4 100644 --- a/config/locales/devise.uk.yml +++ b/config/locales/devise.uk.yml @@ -1,3 +1,4 @@ +--- uk: devise: confirmations: @@ -110,7 +111,7 @@ uk: not_found: не знайдено not_locked: не був заблокований not_saved: - one: '1 помилка не дала цьому %{resource} зберегтися:' few: "%{count} помилки не дали цьому %{resource} зберегтися:" many: "%{count} помилок не дало цьому %{resource} зберегтися:" + one: '1 помилка не дала цьому %{resource} зберегтися:' other: "%{count} помилок не дало цьому %{resource} зберегтися:" diff --git a/config/locales/devise.ur.yml b/config/locales/devise.ur.yml index 938b59fa32d657..5edf8e9b9d6db5 100644 --- a/config/locales/devise.ur.yml +++ b/config/locales/devise.ur.yml @@ -1,3 +1,4 @@ +--- ur: devise: confirmations: diff --git a/config/locales/devise.uz.yml b/config/locales/devise.uz.yml index ab986f17e0b85d..fab6a0655c40f0 100644 --- a/config/locales/devise.uz.yml +++ b/config/locales/devise.uz.yml @@ -1,3 +1,4 @@ +--- uz: devise: confirmations: diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index 4281473095b93a..904cc51fe9959c 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -1,3 +1,4 @@ +--- vi: devise: confirmations: @@ -7,10 +8,10 @@ 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: '%{authentication_keys} hoặc mật khẩu không khớp.' + 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.' + not_found_in_database: "%{authentication_keys} không có trong dữ liệu." pending: Tài khoản của bạn vẫn đang được xem xét. timeout: Phiên của bạn đã hết hạn. Vui lòng đăng nhập lại để tiếp tục. unauthenticated: Bạn cần đăng nhập để tiếp tục. @@ -110,4 +111,4 @@ vi: not_found: không tìm thấy not_locked: không bị khóa not_saved: - other: "Không thể lưu lại %{resource} bởi vì xảy ra %{count} lỗi:" + other: 'Không thể lưu lại %{resource} bởi vì xảy ra %{count} lỗi:' diff --git a/config/locales/devise.zgh.yml b/config/locales/devise.zgh.yml index 92041bce0e37e1..4d376ba8ca82f2 100644 --- a/config/locales/devise.zgh.yml +++ b/config/locales/devise.zgh.yml @@ -1,3 +1,4 @@ +--- zgh: devise: failure: diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index e4338e72865390..5a3dbff7e42570 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -1,3 +1,4 @@ +--- zh-CN: devise: confirmations: @@ -7,10 +8,10 @@ zh-CN: failure: already_authenticated: 你已登录。 inactive: 你还没有激活账户。 - invalid: '%{authentication_keys} 无效或密码错误。' + invalid: "%{authentication_keys} 无效或密码错误。" last_attempt: 你只有最后一次尝试机会,若未通过,账号将被锁定。 locked: 你的账户已被锁定。 - not_found_in_database: '%{authentication_keys}或密码错误。' + not_found_in_database: "%{authentication_keys}或密码错误。" pending: 你的账号仍在审核中。 timeout: 你的会话已过期。请重新登录再继续操作。 unauthenticated: 继续操作前请注册或者登录。 @@ -22,22 +23,22 @@ zh-CN: explanation: 你在 %{host} 上使用此电子邮箱地址创建了一个账号。点击下面的链接即可激活账号。如果你没有创建账号,请忽略此邮件。 explanation_when_pending: 你用这个电子邮件申请了在 %{host} 注册。在确认电子邮件地址之后,我们会审核你的申请。在此之前,你不能登录。如果你的申请被驳回,你的数据会被移除,因此你无需再采取任何行动。如果申请人不是你,请忽略这封邮件。 extra_html: 请记得阅读本实例的相关规定我们的使用条款。 - subject: 'Mastodon:来自 %{instance} 的确认指引' + subject: Mastodon:来自 %{instance} 的确认指引 title: 验证电子邮件地址 email_changed: - explanation: '你的账号的电子邮箱地址将变更为:' + explanation: 你的账号的电子邮箱地址将变更为: extra: 如果你并没有请求更改你的电子邮件地址,则他人很有可能已经入侵你的账户。请立即更改你的密码,或者,如果你已经无法访问你的账户,请联系服务器管理员请求协助。 - subject: 'Mastodon:电子邮件地址已被更改' + subject: Mastodon:电子邮件地址已被更改 title: 新电子邮件地址 password_change: explanation: 你的账户密码已更改。 extra: 如果你并没有申请更改密码,那似乎有人已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器的管理员获取帮助。 - subject: 'Mastodon:密码已被更改' + subject: Mastodon:密码已被更改 title: 密码已被重置 reconfirmation_instructions: explanation: 点击下面的链接来确认你的新电子邮件地址。 extra: 如果你并没有请求本次更改,请忽略此邮件。Mastodon 账户的电子邮件地址只有在你点击上面的链接后才会更改。 - subject: 'Mastodon:确认 %{instance} 电子邮件地址' + subject: Mastodon:确认 %{instance} 电子邮件地址 title: 验证电子邮件地址 reset_password_instructions: action: 更改密码 @@ -58,23 +59,23 @@ zh-CN: subject: Mastodon:双因素认证恢复码已重新生成 title: 双因素认证恢复码已更改 unlock_instructions: - subject: 'Mastodon:账户解锁信息' + subject: Mastodon:账户解锁信息 webauthn_credential: added: explanation: 以下安全密钥已添加到你的帐户 - subject: 'Mastodon:新的安全密钥' + subject: Mastodon:新的安全密钥 title: 已添加一个新的安全密钥 deleted: explanation: 以下安全密钥已从你的账户中删除 - subject: 'Mastodon:安全密钥已删除' + subject: Mastodon:安全密钥已删除 title: 你的安全密钥之一已被删除 webauthn_disabled: explanation: 你的帐户已禁用安全密钥认证。现在只能使用配对的 TOTP 应用程序生成的令牌登录。 - subject: 'Mastodon:安全密钥认证已禁用' + subject: Mastodon:安全密钥认证已禁用 title: 安全密钥已禁用 webauthn_enabled: explanation: 你的账户已启用安全密钥身份验证。你的安全密钥现在可以用于登录。 - subject: 'Mastodon:安全密钥认证已启用' + subject: Mastodon:安全密钥认证已启用 title: 已启用安全密钥 omniauth_callbacks: failure: 由于%{reason},无法从%{kind}获得授权。 @@ -110,4 +111,4 @@ zh-CN: not_found: 未找到 not_locked: 未被锁定 not_saved: - other: "在保存 %{resource} 时发生了 %{count} 个错误:" + other: 在保存 %{resource} 时发生了 %{count} 个错误: diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml index b79afce746210b..2d9e8ddeada10c 100644 --- a/config/locales/devise.zh-HK.yml +++ b/config/locales/devise.zh-HK.yml @@ -1,3 +1,4 @@ +--- zh-HK: devise: confirmations: @@ -25,9 +26,9 @@ zh-HK: subject: 'Mastodon: 確認電郵地址 %{instance}' title: 驗證電子郵件地址 email_changed: - explanation: '你的帳號的電郵地址即將變更為:' + explanation: 你的帳號的電郵地址即將變更為: extra: 如果你沒有更改你的電郵地址,那很有可能已經有其他人入侵你的帳號。請立即更改你的密碼;如果你已經無法訪問你的帳戶,請聯繫服務站的管理員請求協助。 - subject: 'Mastodon:電郵地址已被更改' + subject: Mastodon:電郵地址已被更改 title: 新電郵地址 password_change: explanation: 你的帳號的密碼已被更改。 @@ -37,7 +38,7 @@ zh-HK: reconfirmation_instructions: explanation: 點擊下面的連結來確認你的新電郵地址。 extra: 如果你沒有請求本次變更,請忽略此郵件。 Mastodon 帳戶的電子郵件地址只有在你點擊上面的連結後才會更改。 - subject: 'Mastodon:確認 %{instance} 電郵地址' + subject: Mastodon:確認 %{instance} 電郵地址 title: 驗證電郵地址 reset_password_instructions: action: 更改密碼 @@ -47,15 +48,15 @@ zh-HK: title: 重設密碼 two_factor_disabled: explanation: 帳號的雙重認證已被停用。現在只需使用電郵地址和密碼,即可登入。 - subject: 'Mastodon:已關閉雙重認證' + subject: Mastodon:已關閉雙重認證 title: 已關閉雙重認證 two_factor_enabled: explanation: 賬號的雙重認證已被啟用。登錄時,將需要已配對 TOTP 應用程式生成的驗證碼。 - subject: 'Mastodon:已啟用雙重認證' + subject: Mastodon:已啟用雙重認證 title: 已啟用雙重認證 two_factor_recovery_codes_changed: explanation: 之前的恢復碼失效了,新的已生成。 - subject: 'Mastodon:已產生新的雙重認證恢復碼' + subject: Mastodon:已產生新的雙重認證恢復碼 title: 雙重認證恢復碼已更改 unlock_instructions: subject: 'Mastodon: 解除帳號鎖定' diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index f4c24a9473001a..c01beb796b39db 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -1,9 +1,10 @@ +--- zh-TW: devise: confirmations: confirmed: 您的電子郵件地址已確認成功。 send_instructions: 幾分鐘後您將收到確認信件。若未收到此信件,請檢查垃圾郵件資料夾。 - send_paranoid_instructions: 如果您的電子郵件存在於我們的資料庫,您將會在幾分鐘內收到確認信。若未收到請檢查垃圾郵件資料夾。 + send_paranoid_instructions: 如果您的電子郵件存在於我們的資料庫,您將於幾分鐘內收到確認信。若未收到請檢查垃圾郵件資料夾。 failure: already_authenticated: 您已登入。 inactive: 您的帳號尚未啟用。 @@ -22,59 +23,59 @@ zh-TW: explanation: 您已經在 %{host} 上以此電子郵件地址建立了一支帳號。您距離啟用它只剩一點之遙了。若這不是您,請忽略此信件。 explanation_when_pending: 您使用此電子郵件地址申請了 %{host} 的邀請。當您確認電子郵件地址後我們將審核您的申請。您可以在登入後變更詳細資訊或刪除您的帳號,但直到您的帳號被核准之前,您無法操作大部分的功能。若您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您本人,請忽略此郵件。 extra_html: 同時也請看看伺服器規則服務條款。 - subject: 'Mastodon:%{instance} 確認說明' + subject: Mastodon:%{instance} 確認說明 title: 驗證電子郵件地址 email_changed: - explanation: '您帳號的電子郵件地址將變更為:' + explanation: 您帳號的電子郵件地址將變更為: extra: 若您未變更電子郵件,那麼很有可能是某人取得了您帳號的存取權限。請立刻變更密碼,或當帳號被鎖定時,請聯絡伺服器的管理員。 - subject: 'Mastodon:已變更電子郵件' + subject: Mastodon:已變更電子郵件 title: 新電子郵件地址 password_change: explanation: 您帳號的密碼已變更。 extra: 若您未變更密碼,那麼很有可能是某人取得了您帳號的存取權限。請立刻變更密碼,或若帳號被鎖定時,請聯絡伺服器的管理員。 - subject: 'Mastodon:已變更密碼' + subject: Mastodon:已變更密碼 title: 密碼已變更 reconfirmation_instructions: explanation: 請確認新的電子郵件地址以變更。 extra: 若此次變更不是由您起始的,請忽略此信件。Mastodon 帳號的電子郵件地址在您存取上面的連結前不會變更。 - subject: 'Mastodon:確認 %{instance} 的電子郵件地址' + subject: Mastodon:確認 %{instance} 的電子郵件地址 title: 驗證電子郵件地址 reset_password_instructions: action: 變更密碼 explanation: 您已請求帳號的新密碼。 - extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新密碼前不會變更。 - subject: 'Mastodon:重設密碼指引' + extra: 若您並未請求,請忽略此信件。您的密碼於存取上方連結並建立新密碼前不會變更。 + subject: Mastodon:重設密碼指引 title: 重設密碼 two_factor_disabled: explanation: 您帳號的兩階段驗證已停用。現在只使用電子郵件及密碼登入。 - subject: 'Mastodon:已停用兩階段驗證' + subject: Mastodon:已停用兩階段驗證 title: 已停用兩階段驗證 two_factor_enabled: explanation: 已對您的帳號啟用兩階段驗證。登入時將需要已配對的 TOTP 應用程式所產生之 Token。 - subject: 'Mastodon:已啟用兩階段驗證' + subject: Mastodon:已啟用兩階段驗證 title: 已啟用兩階段驗證 two_factor_recovery_codes_changed: explanation: 之前的備用驗證碼已經失效,且已產生新的。 - subject: 'Mastodon:兩階段驗證備用驗證碼已經重新產生' + subject: Mastodon:兩階段驗證備用驗證碼已經重新產生 title: 兩階段驗證備用驗證碼已變更 unlock_instructions: - subject: 'Mastodon:解鎖指引' + subject: Mastodon:解鎖指引 webauthn_credential: added: explanation: 以下的安全密鑰已經新增至您的帳號 - subject: 'Mastodon:新安全密鑰' + subject: Mastodon:新安全密鑰 title: 已新增新安全密鑰 deleted: explanation: 以下的安全密鑰已經從您的帳號中移除 - subject: 'Mastodon:安全密鑰已移除' + subject: Mastodon:安全密鑰已移除 title: 您的一支安全密鑰已經被移除 webauthn_disabled: explanation: 您的帳號已停用安全密鑰認證。只能透過已配對的 TOTP 應用程式所產生之 Token 登入。 - subject: 'Mastodon:安全密鑰認證方式已停用' + subject: Mastodon:安全密鑰認證方式已停用 title: 已停用安全密鑰 webauthn_enabled: explanation: 您的帳號已啟用安全密鑰認證。您可以使用安全密鑰登入了。 - subject: 'Mastodon:已啟用安全密鑰認證' + subject: Mastodon:已啟用安全密鑰認證 title: 已啟用安全密鑰 omniauth_callbacks: failure: 無法透過 %{kind} 認證是否為您,因為「%{reason}」。 @@ -110,4 +111,4 @@ zh-TW: not_found: 找不到 not_locked: 並未鎖定 not_saved: - other: "因 %{count} 錯誤導致 %{resource} 無法儲存:" + other: 因 %{count} 錯誤導致 %{resource} 無法儲存: diff --git a/config/locales/doorkeeper.af.yml b/config/locales/doorkeeper.af.yml index dd5646fbcb60ca..504c7f507e04a9 100644 --- a/config/locales/doorkeeper.af.yml +++ b/config/locales/doorkeeper.af.yml @@ -1,3 +1,4 @@ +--- af: activerecord: attributes: @@ -57,7 +58,7 @@ af: authorize: Magtig deny: Weier error: - title: '’n Fout het ingesluip' + title: "’n Fout het ingesluip" new: prompt_html: "%{client_name} wil toegang hê tot jou rekening. Dit is ’n derdepartytoepassing. Moet dit nie toelaat as jy dit nie vertrou nie." review_permissions: Hersien toestemmings @@ -123,12 +124,12 @@ af: application: title: Benodig OAuth-bemagtiging scopes: - "admin:read": lees alle data op die bediener - "admin:read:accounts": lees sensitiewe inligting van alle rekeninge - "admin:read:reports": lees sensitiewe inligting van alle verslae end aangeklaagde rekeninge - "admin:write": verander alle data op die bediener - "admin:write:accounts": modereer rekeninge - "admin:write:reports": modereer verslae + admin:read: lees alle data op die bediener + admin:read:accounts: lees sensitiewe inligting van alle rekeninge + admin:read:reports: lees sensitiewe inligting van alle verslae end aangeklaagde rekeninge + admin:write: verander alle data op die bediener + admin:write:accounts: modereer rekeninge + admin:write:reports: modereer verslae crypto: gebruik end-tot-end-enkripsie follow: verander rekeningverhoudings push: ontvang jou stootkennisgewings diff --git a/config/locales/doorkeeper.an.yml b/config/locales/doorkeeper.an.yml index 9e0005d26024b0..1096d8c8dc7667 100644 --- a/config/locales/doorkeeper.an.yml +++ b/config/locales/doorkeeper.an.yml @@ -1,3 +1,4 @@ +--- an: activerecord: attributes: @@ -145,22 +146,22 @@ an: application: title: OAuth autorización requerida scopes: - "admin:read": leyer totz los datos en o servidor - "admin:read:accounts": leyer información sensible de totas las cuentas - "admin:read:canonical_email_blocks": leyer información sensible de totz los bloqueyos canonicos de correu - "admin:read:domain_allows": leyer información sensible de totz los dominios permesos - "admin:read:domain_blocks": leyer información sensible de totz los bloqueyos de dominio - "admin:read:email_domain_blocks": leyer información sensible de totz los bloqueyos de dominio de correu-e - "admin:read:ip_blocks": leyer información sensible de totz los bloqueyos d'IP - "admin:read:reports": leyer información sensible de totz los informes y cuentas denunciadas - "admin:write": modificar totz los datos en o servidor - "admin:write:accounts": realizar accions de moderación en cuentas - "admin:write:canonical_email_blocks": executar accions de moderación en bloqueyos canonicos de correu electronico - "admin:write:domain_allows": executar accions de moderación en os dominios permesos - "admin:write:domain_blocks": executar accions de moderación en bloqueyos de dominio - "admin:write:email_domain_blocks": executar accions de moderación en bloqueyos de dominio de correu-e - "admin:write:ip_blocks": executar accions de moderación en bloqueyos d'IP - "admin:write:reports": realizar accions de moderación en informes + admin:read: leyer totz los datos en o servidor + admin:read:accounts: leyer información sensible de totas las cuentas + admin:read:canonical_email_blocks: leyer información sensible de totz los bloqueyos canonicos de correu + admin:read:domain_allows: leyer información sensible de totz los dominios permesos + admin:read:domain_blocks: leyer información sensible de totz los bloqueyos de dominio + admin:read:email_domain_blocks: leyer información sensible de totz los bloqueyos de dominio de correu-e + admin:read:ip_blocks: leyer información sensible de totz los bloqueyos d'IP + admin:read:reports: leyer información sensible de totz los informes y cuentas denunciadas + admin:write: modificar totz los datos en o servidor + admin:write:accounts: realizar accions de moderación en cuentas + admin:write:canonical_email_blocks: executar accions de moderación en bloqueyos canonicos de correu electronico + admin:write:domain_allows: executar accions de moderación en os dominios permesos + admin:write:domain_blocks: executar accions de moderación en bloqueyos de dominio + admin:write:email_domain_blocks: executar accions de moderación en bloqueyos de dominio de correu-e + admin:write:ip_blocks: executar accions de moderación en bloqueyos d'IP + admin:write:reports: realizar accions de moderación en informes crypto: usar zifrau de cabo a extremo follow: seguir, blocar, desblocar y deixar de seguir cuentas push: recibir las tuyas notificacions push diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index ee7fecbfe31b7b..889c182a3f4dbe 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -1,3 +1,4 @@ +--- ar: activerecord: attributes: @@ -59,7 +60,7 @@ ar: error: title: حدث هناك خطأ new: - prompt_html: "يريد %{client_name} الإذن للوصول إلى حسابك. إنه تطبيق طرف ثالث. إذا كنت لا تثق فيه، فلا ينبغي أن تأذن له بذلك." + prompt_html: يريد %{client_name} الإذن للوصول إلى حسابك. إنه تطبيق طرف ثالث. إذا كنت لا تثق فيه، فلا ينبغي أن تأذن له بذلك. review_permissions: مراجعة الصلاحيات title: إذن بالتصريح show: @@ -146,22 +147,22 @@ ar: application: title: طلب تصريح مفتوح OAuth scopes: - "admin:read": قراءة كافة البيانات على الخادم - "admin:read:accounts": قراءة المعلومات الحساسة عن كافة الحسابات - "admin:read:canonical_email_blocks": قراءة معلومات حساسة عن كل بريد إلكتروني أساسي - "admin:read:domain_allows": قراءة المعلومات الحساسة عن كافة النطاقات المسموحة - "admin:read:domain_blocks": قراءة المعلومات الحساسة عن كافة النطاقات المحجوبة - "admin:read:email_domain_blocks": قراءة المعلومات الحساسة عن كل بريد إلكتروني محجوبة - "admin:read:ip_blocks": قراءة المعلومات الحساسة عن كافة العناوين IP المحجوبة - "admin:read:reports": قراءة المعلومات الحساسة الواردة في جميع التقارير والحسابات المبلغ عنها - "admin:write": تعديل كافة البيانات على الخادم - "admin:write:accounts": اتخاذ إجراءات إشراف على الحسابات - "admin:write:canonical_email_blocks": اتخاذ إجراءات إشراف على البريد الإلكتروني الأساسيين المحجوبين - "admin:write:domain_allows": اتخاذ إجراءات إشراف على النطاقات المسموحين - "admin:write:domain_blocks": اتخاذ إجراءات إشراف على النطاقات المحجوبين - "admin:write:email_domain_blocks": اتخاذ إجراءات إشراف على نطاقات البريد الإلكتروني المحجوبين - "admin:write:ip_blocks": اتخاذ إجراءات إشراف على عناوين IP المحجوبين - "admin:write:reports": اتخاذ إجراءات إشراف على الإبلاغات + admin:read: قراءة كافة البيانات على الخادم + admin:read:accounts: قراءة المعلومات الحساسة عن كافة الحسابات + admin:read:canonical_email_blocks: قراءة معلومات حساسة عن كل بريد إلكتروني أساسي + admin:read:domain_allows: قراءة المعلومات الحساسة عن كافة النطاقات المسموحة + admin:read:domain_blocks: قراءة المعلومات الحساسة عن كافة النطاقات المحجوبة + admin:read:email_domain_blocks: قراءة المعلومات الحساسة عن كل بريد إلكتروني محجوبة + admin:read:ip_blocks: قراءة المعلومات الحساسة عن كافة العناوين IP المحجوبة + admin:read:reports: قراءة المعلومات الحساسة الواردة في جميع التقارير والحسابات المبلغ عنها + admin:write: تعديل كافة البيانات على الخادم + admin:write:accounts: اتخاذ إجراءات إشراف على الحسابات + admin:write:canonical_email_blocks: اتخاذ إجراءات إشراف على البريد الإلكتروني الأساسيين المحجوبين + admin:write:domain_allows: اتخاذ إجراءات إشراف على النطاقات المسموحين + admin:write:domain_blocks: اتخاذ إجراءات إشراف على النطاقات المحجوبين + admin:write:email_domain_blocks: اتخاذ إجراءات إشراف على نطاقات البريد الإلكتروني المحجوبين + admin:write:ip_blocks: اتخاذ إجراءات إشراف على عناوين IP المحجوبين + admin:write:reports: اتخاذ إجراءات إشراف على الإبلاغات crypto: استخدم التشفير من الطرف إلى نهاية الطرف follow: تعديل علاقات الحساب push: تلقي إشعاراتك diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml index 79f8e074ab7b12..0564e49dac18ff 100644 --- a/config/locales/doorkeeper.ast.yml +++ b/config/locales/doorkeeper.ast.yml @@ -1,3 +1,4 @@ +--- ast: activerecord: attributes: @@ -14,9 +15,9 @@ ast: edit: Editar submit: Unviar confirmations: - destroy: '¿De xuru que quies facer esta aición?' + destroy: "¿De xuru que quies facer esta aición?" form: - error: '¡Meca! Revisa los errores posibles del formulariu' + error: "¡Meca! Revisa los errores posibles del formulariu" help: redirect_uri: Usa una llinia per URI index: @@ -48,7 +49,7 @@ ast: buttons: revoke: Revocar confirmations: - revoke: '¿De xuru que quies facer esta aición?' + revoke: "¿De xuru que quies facer esta aición?" index: description_html: Estes son les aplicaciones que puen acceder a la cuenta cola API. Si equí hai aplicaciones que nun conoces o hai dalguna aplicación que nun funciona correutamente, pues revocar el so accesu. never_used: Enxamás s'usó @@ -91,23 +92,23 @@ ast: applications: Aplicaciones oauth2_provider: Fornidor d'OAuth2 scopes: - "admin:read": llee tolos datos del sirvidor - "admin:read:accounts": llee la información sensible de toles cuentes - "admin:write": modifica tolos datos del sirvidor + admin:read: llee tolos datos del sirvidor + admin:read:accounts: llee la información sensible de toles cuentes + admin:write: modifica tolos datos del sirvidor crypto: usa'l cifráu de puntu a puntu follow: modifica les rellaciones de les cuentes push: recibe avisos push read: llee tolos datos de les cuentes - "read:accounts": mira la información de les cuentes - "read:blocks": mira les cuentes bloquiaes - "read:bookmarks": mira los marcadores - "read:filters": mira les peñeres - "read:follows": mira quién sigues - "read:lists": mira les llistes - "read:notifications": mira los avisos - "read:reports": mira los informes - "read:search": busca nel to nome - "read:statuses": mira tolos artículos + read:accounts: mira la información de les cuentes + read:blocks: mira les cuentes bloquiaes + read:bookmarks: mira los marcadores + read:filters: mira les peñeres + read:follows: mira quién sigues + read:lists: mira les llistes + read:notifications: mira los avisos + read:reports: mira los informes + read:search: busca nel to nome + read:statuses: mira tolos artículos write: modifica los datos de les cuentes write:accounts: modifica los perfiles write:blocks: bloquia cuentes ya dominios diff --git a/config/locales/doorkeeper.be.yml b/config/locales/doorkeeper.be.yml index 96e9962f4c3bc4..4524dd707e1bf4 100644 --- a/config/locales/doorkeeper.be.yml +++ b/config/locales/doorkeeper.be.yml @@ -1,9 +1,10 @@ +--- be: activerecord: attributes: doorkeeper/application: name: Назва праграмы - redirect_uri: перанакіравць URI + redirect_uri: перанакіравць URI scopes: Дазволы website: Вэб-сайт праграмы errors: @@ -146,22 +147,22 @@ be: application: title: Патрабуецца аўтарызацыя OAuth scopes: - "admin:read": чытаць усе дадзеныя на серверы - "admin:read:accounts": чытаць канфідэнцыйную інфармацыю ўсіх акаўнтаў - "admin:read:canonical_email_blocks": чытаць канфідэнцыйную інфармацыю ўсіх кананічных блокаў электроннай пошты - "admin:read:domain_allows": чытаць канфідэнцыйную інфармацыю ўсіх дазволеных даменаў - "admin:read:domain_blocks": чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў - "admin:read:email_domain_blocks": чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў эл. пошты - "admin:read:ip_blocks": чытаць канфідэнцыяльную інфармацыю ўсіх блакіраваных IP - "admin:read:reports": чытаць канфідэнцыйную інфармацыю ўсіх справаздач і справаздачных уліковых запісаў - "admin:write": змяняць усе даныя на серверы - "admin:write:accounts": выконваць дзеянні па мадэрацыі акаўнтаў - "admin:write:canonical_email_blocks": выконваць дзеянні па мадэрацыі кананічных блокаў электроннай пошты - "admin:write:domain_allows": дазваляе праводзіць мадэрацыю ў дамене - "admin:write:domain_blocks": мадэраваць блакіраваныя дамены - "admin:write:email_domain_blocks": мадэраваць блакіраваныя дамены эл. пошты - "admin:write:ip_blocks": мадэраваць блакіраваныя IP - "admin:write:reports": мадэраваць скаргі + admin:read: чытаць усе дадзеныя на серверы + admin:read:accounts: чытаць канфідэнцыйную інфармацыю ўсіх акаўнтаў + admin:read:canonical_email_blocks: чытаць канфідэнцыйную інфармацыю ўсіх кананічных блокаў электроннай пошты + admin:read:domain_allows: чытаць канфідэнцыйную інфармацыю ўсіх дазволеных даменаў + admin:read:domain_blocks: чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў + admin:read:email_domain_blocks: чытаць канфідэнцыйную інфармацыю ўсіх блакіраваных даменаў эл. пошты + admin:read:ip_blocks: чытаць канфідэнцыяльную інфармацыю ўсіх блакіраваных IP + admin:read:reports: чытаць канфідэнцыйную інфармацыю ўсіх справаздач і справаздачных уліковых запісаў + admin:write: змяняць усе даныя на серверы + admin:write:accounts: выконваць дзеянні па мадэрацыі акаўнтаў + admin:write:canonical_email_blocks: выконваць дзеянні па мадэрацыі кананічных блокаў электроннай пошты + admin:write:domain_allows: дазваляе праводзіць мадэрацыю ў дамене + admin:write:domain_blocks: мадэраваць блакіраваныя дамены + admin:write:email_domain_blocks: мадэраваць блакіраваныя дамены эл. пошты + admin:write:ip_blocks: мадэраваць блакіраваныя IP + admin:write:reports: мадэраваць скаргі crypto: выкарыстоўваць скразное шыфраванне (end-to-end) follow: змяняць зносіны ўліковага запісу push: атрымліваць push-апавяшчэнні diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml index 7a6d387d0147ed..8e026794ee8532 100644 --- a/config/locales/doorkeeper.bg.yml +++ b/config/locales/doorkeeper.bg.yml @@ -1,3 +1,4 @@ +--- bg: activerecord: attributes: @@ -146,22 +147,22 @@ bg: application: title: Нужно е упълномощаване по OAuth scopes: - "admin:read": прочит на всички данни на сървъра - "admin:read:accounts": прочит на деликатна информация от всички акаунти - "admin:read:canonical_email_blocks": четене на деликатна информация на всички канонични блокирания на е-поща - "admin:read:domain_allows": четене на деликатна информация на всички домейни позволено - "admin:read:domain_blocks": четене на деликатна информация на всички домейни блокирано - "admin:read:email_domain_blocks": четене на деликатна информация на всички домейни на е-поща блокирано - "admin:read:ip_blocks": четене на деликатна информация на всички IP адреси блокирано - "admin:read:reports": прочит на деликатна информация от всички докладвания и докладвани акаунти - "admin:write": промяна на всички данни на сървъра - "admin:write:accounts": извършване на действия за модериране на акаунти - "admin:write:canonical_email_blocks": извършване на модериращи действия в канонични блокирания на е-поща - "admin:write:domain_allows": извършване на действия за модериране на акаунти в домейна позволено - "admin:write:domain_blocks": извършване на действия за модериране на акаунти в домейна блокирано - "admin:write:email_domain_blocks": извършване на действия за модериране на акаунти в домейна на е-поща блокирано - "admin:write:ip_blocks": извършване на действия за модериране на IP адреси блокирано - "admin:write:reports": извършване на действия за модериране на докладвания + admin:read: прочит на всички данни на сървъра + admin:read:accounts: прочит на деликатна информация от всички акаунти + admin:read:canonical_email_blocks: четене на деликатна информация на всички канонични блокирания на е-поща + admin:read:domain_allows: четене на деликатна информация на всички домейни позволено + admin:read:domain_blocks: четене на деликатна информация на всички домейни блокирано + admin:read:email_domain_blocks: четене на деликатна информация на всички домейни на е-поща блокирано + admin:read:ip_blocks: четене на деликатна информация на всички IP адреси блокирано + admin:read:reports: прочит на деликатна информация от всички докладвания и докладвани акаунти + admin:write: промяна на всички данни на сървъра + admin:write:accounts: извършване на действия за модериране на акаунти + admin:write:canonical_email_blocks: извършване на модериращи действия в канонични блокирания на е-поща + admin:write:domain_allows: извършване на действия за модериране на акаунти в домейна позволено + admin:write:domain_blocks: извършване на действия за модериране на акаунти в домейна блокирано + admin:write:email_domain_blocks: извършване на действия за модериране на акаунти в домейна на е-поща блокирано + admin:write:ip_blocks: извършване на действия за модериране на IP адреси блокирано + admin:write:reports: извършване на действия за модериране на докладвания crypto: употреба на цялостно шифроване follow: промяна на взаимоотношенията на акаунта push: получаване на вашите изскачащи известия diff --git a/config/locales/doorkeeper.br.yml b/config/locales/doorkeeper.br.yml index b29b09c7298600..3de6230d4c1b67 100644 --- a/config/locales/doorkeeper.br.yml +++ b/config/locales/doorkeeper.br.yml @@ -1,3 +1,4 @@ +--- br: activerecord: attributes: @@ -112,12 +113,12 @@ br: application: title: OAuth aotre rekis scopes: - "admin:read": lenn holl titouroù ar servijer - "admin:read:accounts": lenn titouroù kizidik an holl kontoù - "admin:read:reports": lenn titouroù kizidik an holl danevelloù hag an holl kontoù danevellet - "admin:write": kemmañ holl titouroù ar servijer - "admin:write:accounts": ober evezherezh war ar c'hontoù - "admin:write:reports": ober evezherezh war an danevelloù + admin:read: lenn holl titouroù ar servijer + admin:read:accounts: lenn titouroù kizidik an holl kontoù + admin:read:reports: lenn titouroù kizidik an holl danevelloù hag an holl kontoù danevellet + admin:write: kemmañ holl titouroù ar servijer + admin:write:accounts: ober evezherezh war ar c'hontoù + admin:write:reports: ober evezherezh war an danevelloù follow: kemmañ darempredoù ho kont push: resev ho kemennoù push read: lenn holl titouroù ho kont diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml index f4640c8fbf052a..9706f3db70384f 100644 --- a/config/locales/doorkeeper.ca.yml +++ b/config/locales/doorkeeper.ca.yml @@ -1,3 +1,4 @@ +--- ca: activerecord: attributes: diff --git a/config/locales/doorkeeper.ckb.yml b/config/locales/doorkeeper.ckb.yml index 226d5971205c8d..f952b6eca9ea87 100644 --- a/config/locales/doorkeeper.ckb.yml +++ b/config/locales/doorkeeper.ckb.yml @@ -1,3 +1,4 @@ +--- ckb: activerecord: attributes: @@ -143,12 +144,12 @@ ckb: application: title: داوای ڕێپێدانی OAuth scopes: - "admin:read": خوێندنەوەی هەموو داتاکان لەسەر ڕاژەکارەکە - "admin:read:accounts": زانیاری هەستیاری هەموو هەژمارەکان بخوێنەوە - "admin:read:reports": زانیاری هەستیاری هەموو گوزارشت و هەژمارە گوزارشتکراوەکان بخوێنەوە - "admin:write": دەستکاری هەموو داتاکان بکە لەسەر ڕاژەکار - "admin:write:accounts": ئەنجامدانی کاری میانڕەوی لەسەر هەژمارەکان - "admin:write:reports": ئەنجامدانی کاری میانڕەوی لەسەر گوزارشتەکان + admin:read: خوێندنەوەی هەموو داتاکان لەسەر ڕاژەکارەکە + admin:read:accounts: زانیاری هەستیاری هەموو هەژمارەکان بخوێنەوە + admin:read:reports: زانیاری هەستیاری هەموو گوزارشت و هەژمارە گوزارشتکراوەکان بخوێنەوە + admin:write: دەستکاری هەموو داتاکان بکە لەسەر ڕاژەکار + admin:write:accounts: ئەنجامدانی کاری میانڕەوی لەسەر هەژمارەکان + admin:write:reports: ئەنجامدانی کاری میانڕەوی لەسەر گوزارشتەکان crypto: کۆدکردنی کۆتایی بۆ کۆتایی بەکاربهێنە follow: دەستکاریکردنی پەیوەندییەکانی هەژمارەی بەکارهێنەر push: وەرگرتنی ئاگانامەکانی پاڵنان diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml index 392f3ec9c47066..ae89344abd1a4d 100644 --- a/config/locales/doorkeeper.co.yml +++ b/config/locales/doorkeeper.co.yml @@ -1,3 +1,4 @@ +--- co: activerecord: attributes: @@ -111,12 +112,12 @@ co: application: title: Auturizazione OAuth richiestata scopes: - "admin:read": leghje tutti i dati nant'à u servore - "admin:read:accounts": leghje i cuntinuti sensibili di tutti i conti - "admin:read:reports": leghje i cuntinuti sensibili di tutti i rapporti è conti signalati - "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 + admin:read: leghje tutti i dati nant'à u servore + admin:read:accounts: leghje i cuntinuti sensibili di tutti i conti + admin:read:reports: leghje i cuntinuti sensibili di tutti i rapporti è conti signalati + 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 read: leghje tutte l’infurmazioni di u vostru contu diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index cf540532f89581..ba2100edfdff2a 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -1,3 +1,4 @@ +--- cs: activerecord: attributes: @@ -146,22 +147,22 @@ cs: application: title: Je požadována autorizace OAuth scopes: - "admin:read": číst všechna data na serveru - "admin:read:accounts": číst citlivé informace všech účtů - "admin:read:canonical_email_blocks": číst citlivé informace všech kanonických e-mailových bloků - "admin:read:domain_allows": číst citlivé informace ze všech povolených domén - "admin:read:domain_blocks": číst citlivé informace ze všech bloků domén - "admin:read:email_domain_blocks": číst citlivé informace ze všech bloků emailových domén - "admin:read:ip_blocks": číst citlivé informace ze všech bloků IP - "admin:read:reports": číst citlivé informace všech nahlášení a nahlášených účtů - "admin:write": měnit všechna data na serveru - "admin:write:accounts": provádět moderátorské akce s účty - "admin:write:canonical_email_blocks": provést akce moderace na kanonických emailových blocích - "admin:write:domain_allows": provést akce moderace na povolených doménách - "admin:write:domain_blocks": provést akce moderace na doménových blocích - "admin:write:email_domain_blocks": provést akce moderace na blocích emailových domén - "admin:write:ip_blocks": provést akce moderace na blocích IP - "admin:write:reports": provádět moderátorské akce s hlášeními + admin:read: číst všechna data na serveru + admin:read:accounts: číst citlivé informace všech účtů + admin:read:canonical_email_blocks: číst citlivé informace všech kanonických e-mailových bloků + admin:read:domain_allows: číst citlivé informace ze všech povolených domén + admin:read:domain_blocks: číst citlivé informace ze všech bloků domén + admin:read:email_domain_blocks: číst citlivé informace ze všech bloků emailových domén + admin:read:ip_blocks: číst citlivé informace ze všech bloků IP + admin:read:reports: číst citlivé informace všech nahlášení a nahlášených účtů + admin:write: měnit všechna data na serveru + admin:write:accounts: provádět moderátorské akce s účty + admin:write:canonical_email_blocks: provést akce moderace na kanonických emailových blocích + admin:write:domain_allows: provést akce moderace na povolených doménách + admin:write:domain_blocks: provést akce moderace na doménových blocích + admin:write:email_domain_blocks: provést akce moderace na blocích emailových domén + admin:write:ip_blocks: provést akce moderace na blocích IP + admin:write:reports: provádět moderátorské akce s hlášeními crypto: používat end-to-end šifrování follow: upravovat vztahy mezi profily push: přijímat vaše push oznámení diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index bed9d61f88f838..e79aa0359f67b8 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -1,3 +1,4 @@ +--- cy: activerecord: attributes: @@ -59,7 +60,7 @@ cy: error: title: Mae rhywbeth wedi mynd o'i le new: - prompt_html: "Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Mae'n gais trydydd parti. Os nad ydych yn ymddiried ynddo, yna peidiwch a'i awdurdodi." + prompt_html: Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Mae'n gais trydydd parti. Os nad ydych yn ymddiried ynddo, yna peidiwch a'i awdurdodi. review_permissions: Adolygu caniatâd title: Angen awdurdodi show: @@ -146,49 +147,49 @@ cy: application: title: Mae awdurdodiad OAuth yn ofynnol scopes: - "admin:read": darllen yr holl ddata ar y gweinydd - "admin:read:accounts": darllen gwybodaeth sensitif o bob cyfrif - "admin:read:canonical_email_blocks": darllen gwybodaeth sensitif pob bloc e-bost canonaidd - "admin:read:domain_allows": darllen gwybodaeth sensitif pob caniatád parth - "admin:read:domain_blocks": darllen gwybodaeth sensitif pob bloc parth - "admin:read:email_domain_blocks": darllen gwybodaeth sensitif pob bloc parth ebost - "admin:read:ip_blocks": darllen gwybodaeth sensitif pob bloc IP - "admin:read:reports": darllen gwybodaeth sensitif o'r holl adroddiadau a'r cyfrifon a adroddwyd - "admin:write": addasu'r holl ddata ar y gweinydd - "admin:write:accounts": cyflawni camau cymedroli ar gyfrifon - "admin:write:canonical_email_blocks": cyflawni cymedroli ar gyfer pob bloc e-bost canonaidd - "admin:write:domain_allows": cyflawni cymedroli ar gyfer pob caniatád parth - "admin:write:domain_blocks": cyflawni cymedroli ar gyfer pob bloc parth - "admin:write:email_domain_blocks": cyflawni cymedroli ar gyfer pob bloc parth ebost - "admin:write:ip_blocks": cyflawni cymedroli ar gyfer pob bloc IP - "admin:write:reports": cyflawni camau cymedroli ar adroddiadau + admin:read: darllen yr holl ddata ar y gweinydd + admin:read:accounts: darllen gwybodaeth sensitif o bob cyfrif + admin:read:canonical_email_blocks: darllen gwybodaeth sensitif pob bloc e-bost canonaidd + admin:read:domain_allows: darllen gwybodaeth sensitif pob caniatád parth + admin:read:domain_blocks: darllen gwybodaeth sensitif pob bloc parth + admin:read:email_domain_blocks: darllen gwybodaeth sensitif pob bloc parth ebost + admin:read:ip_blocks: darllen gwybodaeth sensitif pob bloc IP + admin:read:reports: darllen gwybodaeth sensitif o'r holl adroddiadau a'r cyfrifon a adroddwyd + admin:write: addasu'r holl ddata ar y gweinydd + admin:write:accounts: cyflawni camau cymedroli ar gyfrifon + admin:write:canonical_email_blocks: cyflawni cymedroli ar gyfer pob bloc e-bost canonaidd + admin:write:domain_allows: cyflawni cymedroli ar gyfer pob caniatád parth + admin:write:domain_blocks: cyflawni cymedroli ar gyfer pob bloc parth + admin:write:email_domain_blocks: cyflawni cymedroli ar gyfer pob bloc parth ebost + admin:write:ip_blocks: cyflawni cymedroli ar gyfer pob bloc IP + admin:write:reports: cyflawni camau cymedroli ar adroddiadau crypto: defnyddio amgryptio ben i ben follow: addasu perthnasau cyfrif push: derbyn eich hysbysiadau gwthiadwy read: darllen holl ddata eich cyfrif - "read:accounts": gweld gwybodaeth y cyfrif - "read:blocks": gweld eich blociau - "read:bookmarks": gweld eich llyfrnodau - "read:favourites": gweld eich ffefrynnau - "read:filters": gweld eich hidlwyr - "read:follows": gweld eich dilynwyr - "read:lists": gweld eich rhestrau - "read:mutes": gweld eich anwybyddiadau - "read:notifications": gweld eich hysbysiadau - "read:reports": gweld eich adroddiadau - "read:search": chwilio ar eich rhan - "read:statuses": gweld pob postiad + read:accounts: gweld gwybodaeth y cyfrif + read:blocks: gweld eich blociau + read:bookmarks: gweld eich llyfrnodau + read:favourites: gweld eich ffefrynnau + read:filters: gweld eich hidlwyr + read:follows: gweld eich dilynwyr + read:lists: gweld eich rhestrau + read:mutes: gweld eich anwybyddiadau + read:notifications: gweld eich hysbysiadau + read:reports: gweld eich adroddiadau + read:search: chwilio ar eich rhan + read:statuses: gweld pob postiad write: addasu holl ddata eich cyfrif - "write:accounts": addasu eich proffil - "write:blocks": blocio cyfrifon a parthau - "write:bookmarks": llyfrnodi postiadau - "write:conversations": anwybyddu a dileu sgyrsiau - "write:favourites": hoff bostiadau - "write:filters": creu hidlwyr - "write:follows": dilyn pobl - "write:lists": creu rhestrau - "write:media": llwytho ffeiliau cyfryngau - "write:mutes": anwybyddu pobl a sgyrsiau - "write:notifications": clirio eich hysbysiadau - "write:reports": adrodd pobl eraill - "write:statuses": cyhoeddi postiadau + write:accounts: addasu eich proffil + write:blocks: blocio cyfrifon a parthau + write:bookmarks: llyfrnodi postiadau + write:conversations: anwybyddu a dileu sgyrsiau + write:favourites: hoff bostiadau + write:filters: creu hidlwyr + write:follows: dilyn pobl + write:lists: creu rhestrau + write:media: llwytho ffeiliau cyfryngau + write:mutes: anwybyddu pobl a sgyrsiau + write:notifications: clirio eich hysbysiadau + write:reports: adrodd pobl eraill + write:statuses: cyhoeddi postiadau diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml index fcbfa2fc932c0f..2c8b0d13e17736 100644 --- a/config/locales/doorkeeper.da.yml +++ b/config/locales/doorkeeper.da.yml @@ -1,3 +1,4 @@ +--- da: activerecord: attributes: @@ -146,49 +147,49 @@ da: application: title: OAuth-godkendelse obligatorisk scopes: - "admin:read": læs alle data på serveren - "admin:read:accounts": læs sensitiv information fra alle konti - "admin:read:canonical_email_blocks": læs følsomme oplysninger fra alle kanoniske e-mailblokeringer - "admin:read:domain_allows": læs følsomme informationer fra alle tilladte domæner - "admin:read:domain_blocks": læs følsomme informationer fra alle domæneblokeringer - "admin:read:email_domain_blocks": læs følsomme informationer fra alle e-maildomæneblokeringer - "admin:read:ip_blocks": læs følsomme informationer fra alle IP-blokeringer - "admin:read:reports": læs sensitiv information fra alle anmeldelser og anmeldte konti - "admin:write": redigér alle data på serveren - "admin:write:accounts": udfør modereringshandlinger på konti - "admin:write:canonical_email_blocks": udfør modereringshandlinger på kanoniske e-mailblokeringer - "admin:write:domain_allows": udfør modereringshandlinger på tilladte domæner - "admin:write:domain_blocks": udfør modereringshandlinger på domæneblokeringer - "admin:write:email_domain_blocks": udfør modereringshandlinger på e-maildomæneblokeringer - "admin:write:ip_blocks": udfør modereringshandlinger på IP-blokeringer - "admin:write:reports": udfør modereringshandlinger på anmeldelser + admin:read: læs alle data på serveren + admin:read:accounts: læs sensitiv information fra alle konti + admin:read:canonical_email_blocks: læs følsomme oplysninger fra alle kanoniske e-mailblokeringer + admin:read:domain_allows: læs følsomme informationer fra alle tilladte domæner + admin:read:domain_blocks: læs følsomme informationer fra alle domæneblokeringer + admin:read:email_domain_blocks: læs følsomme informationer fra alle e-maildomæneblokeringer + admin:read:ip_blocks: læs følsomme informationer fra alle IP-blokeringer + admin:read:reports: læs sensitiv information fra alle anmeldelser og anmeldte konti + admin:write: redigér alle data på serveren + admin:write:accounts: udfør modereringshandlinger på konti + admin:write:canonical_email_blocks: udfør modereringshandlinger på kanoniske e-mailblokeringer + admin:write:domain_allows: udfør modereringshandlinger på tilladte domæner + admin:write:domain_blocks: udfør modereringshandlinger på domæneblokeringer + admin:write:email_domain_blocks: udfør modereringshandlinger på e-maildomæneblokeringer + admin:write:ip_blocks: udfør modereringshandlinger på IP-blokeringer + admin:write:reports: udfør modereringshandlinger på anmeldelser crypto: benyt ende-til-ende kryptering follow: ændre kontorelationer push: modtag dine push-notifikationer read: læs alle dine kontodata - "read:accounts": se kontooplysninger - "read:blocks": se dine blokeringer - "read:bookmarks": se dine bogmærker - "read:favourites": se dine favoritter - "read:filters": se dine filtre - "read:follows": se dine følger - "read:lists": se dine lister - "read:mutes": se dine tavsgørelser - "read:notifications": se dine notifikationer - "read:reports": se dine anmeldelser - "read:search": søg på dine vegne - "read:statuses": se alle indlæg + read:accounts: se kontooplysninger + read:blocks: se dine blokeringer + read:bookmarks: se dine bogmærker + read:favourites: se dine favoritter + read:filters: se dine filtre + read:follows: se dine følger + read:lists: se dine lister + read:mutes: se dine tavsgørelser + read:notifications: se dine notifikationer + read:reports: se dine anmeldelser + read:search: søg på dine vegne + read:statuses: se alle indlæg write: ændre alle dine kontodata - "write:accounts": ændre din profil - "write:blocks": blokere konti og domæner - "write:bookmarks": bogmærke indlæg - "write:conversations": tavsgøre og slette konversationer - "write:favourites": favoritmarkere indlæg - "write:filters": oprette filtre - "write:follows": følge personer - "write:lists": oprette lister - "write:media": uploade mediefiler - "write:mutes": tavsgøre personer og konversationer - "write:notifications": rydde dine notifikationer - "write:reports": anmelde personer - "write:statuses": udgive indlæg + write:accounts: ændre din profil + write:blocks: blokere konti og domæner + write:bookmarks: bogmærke indlæg + write:conversations: tavsgøre og slette konversationer + write:favourites: favoritmarkere indlæg + write:filters: oprette filtre + write:follows: følge personer + write:lists: oprette lister + write:media: uploade mediefiler + write:mutes: tavsgøre personer og konversationer + write:notifications: rydde dine notifikationer + write:reports: anmelde personer + write:statuses: udgive indlæg diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index a1c730f5b1837e..cc7b88a282e0fb 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -1,3 +1,4 @@ +--- de: activerecord: attributes: @@ -146,22 +147,22 @@ de: application: title: OAuth-Autorisierung erforderlich scopes: - "admin:read": alle Daten auf dem Server lesen - "admin:read:accounts": sensible Informationen aller Konten lesen - "admin:read:canonical_email_blocks": sensible Informationen aller kanonischen E-Mail-Sperren lesen - "admin:read:domain_allows": sensible Informationen aller zugelassenen Domains lesen - "admin:read:domain_blocks": sensible Informationen aller Domain-Sperren lesen - "admin:read:email_domain_blocks": sensible Informationen aller E-Mail-Domain-Sperren lesen - "admin:read:ip_blocks": sensible Informationen aller IP-Sperren lesen - "admin:read:reports": sensible Informationen aller Meldungen und gemeldeten Konten lesen - "admin:write": alle Daten auf dem Server ändern - "admin:write:accounts": Moderationsaktionen auf Konten ausführen - "admin:write:canonical_email_blocks": Moderationsaktionen auf kanonischen E-Mail-Sperren ausführen - "admin:write:domain_allows": Moderationsaktionen auf zugelassende Domains ausführen - "admin:write:domain_blocks": Moderationsaktionen auf Domain-Sperren ausführen - "admin:write:email_domain_blocks": Moderationsaktionen auf E-Mail-Domain-Sperren ausführen - "admin:write:ip_blocks": Moderationsaktionen auf IP-Sperren ausführen - "admin:write:reports": Moderationsaktionen auf Meldungen ausführen + admin:read: alle Daten auf dem Server lesen + admin:read:accounts: sensible Informationen aller Konten lesen + admin:read:canonical_email_blocks: sensible Informationen aller kanonischen E-Mail-Sperren lesen + admin:read:domain_allows: sensible Informationen aller zugelassenen Domains lesen + admin:read:domain_blocks: sensible Informationen aller Domain-Sperren lesen + admin:read:email_domain_blocks: sensible Informationen aller E-Mail-Domain-Sperren lesen + admin:read:ip_blocks: sensible Informationen aller IP-Sperren lesen + admin:read:reports: sensible Informationen aller Meldungen und gemeldeten Konten lesen + admin:write: alle Daten auf dem Server ändern + admin:write:accounts: Moderationsaktionen auf Konten ausführen + admin:write:canonical_email_blocks: Moderationsaktionen auf kanonischen E-Mail-Sperren ausführen + admin:write:domain_allows: Moderationsaktionen auf zugelassende Domains ausführen + admin:write:domain_blocks: Moderationsaktionen auf Domain-Sperren ausführen + admin:write:email_domain_blocks: Moderationsaktionen auf E-Mail-Domain-Sperren ausführen + admin:write:ip_blocks: Moderationsaktionen auf IP-Sperren ausführen + admin:write:reports: Moderationsaktionen auf Meldungen ausführen crypto: Ende-zu-Ende-Verschlüsselung verwenden follow: Kontenbeziehungen verändern push: deine Push-Benachrichtigungen erhalten diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml index 65f796799e5efc..b275af3365d3ce 100644 --- a/config/locales/doorkeeper.el.yml +++ b/config/locales/doorkeeper.el.yml @@ -1,3 +1,4 @@ +--- el: activerecord: attributes: @@ -59,7 +60,7 @@ el: error: title: Εμφανίστηκε σφάλμα new: - prompt_html: "Ο/Η %{client_name} θα ήθελε άδεια πρόσβασης στο λογαριασμό σας. Είναι μια εφαρμογή από τρίτους. Αν δεν το εμπιστεύεστε, τότε δεν πρέπει να το εξουσιοδοτήσετε." + prompt_html: Ο/Η %{client_name} θα ήθελε άδεια πρόσβασης στο λογαριασμό σας. Είναι μια εφαρμογή από τρίτους. Αν δεν το εμπιστεύεστε, τότε δεν πρέπει να το εξουσιοδοτήσετε. review_permissions: Αναθεώρηση δικαιωμάτων title: Απαιτείται έγκριση show: @@ -145,22 +146,22 @@ el: application: title: Απαιτείται έγκριση OAuth scopes: - "admin:read": ανάγνωση δεδομένων στον διακομιστή - "admin:read:accounts": ανάγνωση ευαίσθητων πληροφοριών όλων των λογαριασμών - "admin:read:canonical_email_blocks": ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων email - "admin:read:domain_allows": ανάγνωση ευαίσθητων πληροφοριών όλων των επιτρεπόμενων τομέων - "admin:read:domain_blocks": ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων τομέων - "admin:read:email_domain_blocks": ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων τομέων email - "admin:read:ip_blocks": ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων IP - "admin:read:reports": ανάγνωση ευαίσθητων πληροφοριών όλων των καταγγελιών και των καταγγελλομένων λογαριασμών - "admin:write": αλλαγή δεδομένων στον διακομιστή - "admin:write:accounts": εκτέλεση διαχειριστικών ενεργειών σε λογαριασμούς - "admin:write:canonical_email_blocks": εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένα email - "admin:write:domain_allows": εκτέλεση ενεργειών διαχείρισης σε επιτρεπτούς τομείς - "admin:write:domain_blocks": εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένους τομείς - "admin:write:email_domain_blocks": εκτελέστε ενέργειες διαχείρισης σε αποκλεισμένους τομείς email - "admin:write:ip_blocks": εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένες IP - "admin:write:reports": εκτέλεση διαχειριστικών ενεργειών σε καταγγελίες + admin:read: ανάγνωση δεδομένων στον διακομιστή + admin:read:accounts: ανάγνωση ευαίσθητων πληροφοριών όλων των λογαριασμών + admin:read:canonical_email_blocks: ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων email + admin:read:domain_allows: ανάγνωση ευαίσθητων πληροφοριών όλων των επιτρεπόμενων τομέων + admin:read:domain_blocks: ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων τομέων + admin:read:email_domain_blocks: ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων τομέων email + admin:read:ip_blocks: ανάγνωση ευαίσθητων πληροφοριών όλων των αποκλεισμένων IP + admin:read:reports: ανάγνωση ευαίσθητων πληροφοριών όλων των καταγγελιών και των καταγγελλομένων λογαριασμών + admin:write: αλλαγή δεδομένων στον διακομιστή + admin:write:accounts: εκτέλεση διαχειριστικών ενεργειών σε λογαριασμούς + admin:write:canonical_email_blocks: εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένα email + admin:write:domain_allows: εκτέλεση ενεργειών διαχείρισης σε επιτρεπτούς τομείς + admin:write:domain_blocks: εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένους τομείς + admin:write:email_domain_blocks: εκτελέστε ενέργειες διαχείρισης σε αποκλεισμένους τομείς email + admin:write:ip_blocks: εκτέλεση ενεργειών διαχείρισης σε αποκλεισμένες IP + admin:write:reports: εκτέλεση διαχειριστικών ενεργειών σε καταγγελίες crypto: χρήση κρυπτογράφησης από άκρο σε άκρο follow: να αλλάζει τις σχέσεις με λογαριασμούς push: να λαμβάνει τις ειδοποιήσεις σου diff --git a/config/locales/doorkeeper.en-GB.yml b/config/locales/doorkeeper.en-GB.yml index b2ef841459b73e..b3ceffb13f7544 100644 --- a/config/locales/doorkeeper.en-GB.yml +++ b/config/locales/doorkeeper.en-GB.yml @@ -1,3 +1,4 @@ +--- en-GB: activerecord: attributes: @@ -146,49 +147,49 @@ en-GB: application: title: OAuth authorisation required scopes: - "admin:read": read all data on the server - "admin:read:accounts": read sensitive information of all accounts - "admin:read:canonical_email_blocks": read sensitive information of all canonical email blocks - "admin:read:domain_allows": read sensitive information of all domain allows - "admin:read:domain_blocks": read sensitive information of all domain blocks - "admin:read:email_domain_blocks": read sensitive information of all email domain blocks - "admin:read:ip_blocks": read sensitive information of all IP blocks - "admin:read:reports": read sensitive information of all reports and reported accounts - "admin:write": modify all data on the server - "admin:write:accounts": perform moderation actions on accounts - "admin:write:canonical_email_blocks": perform moderation actions on canonical email blocks - "admin:write:domain_allows": perform moderation actions on domain allows - "admin:write:domain_blocks": perform moderation actions on domain blocks - "admin:write:email_domain_blocks": perform moderation actions on email domain blocks - "admin:write:ip_blocks": perform moderation actions on IP blocks - "admin:write:reports": perform moderation actions on reports + admin:read: read all data on the server + admin:read:accounts: read sensitive information of all accounts + admin:read:canonical_email_blocks: read sensitive information of all canonical email blocks + admin:read:domain_allows: read sensitive information of all domain allows + admin:read:domain_blocks: read sensitive information of all domain blocks + admin:read:email_domain_blocks: read sensitive information of all email domain blocks + admin:read:ip_blocks: read sensitive information of all IP blocks + admin:read:reports: read sensitive information of all reports and reported accounts + admin:write: modify all data on the server + admin:write:accounts: perform moderation actions on accounts + admin:write:canonical_email_blocks: perform moderation actions on canonical email blocks + admin:write:domain_allows: perform moderation actions on domain allows + admin:write:domain_blocks: perform moderation actions on domain blocks + admin:write:email_domain_blocks: perform moderation actions on email domain blocks + admin:write:ip_blocks: perform moderation actions on IP blocks + admin:write:reports: perform moderation actions on reports crypto: use end-to-end encryption follow: modify account relationships push: receive your push notifications read: read all your account's data - "read:accounts": see accounts information - "read:blocks": see your blocks - "read:bookmarks": see your bookmarks - "read:favourites": see your favourites - "read:filters": see your filters - "read:follows": see your follows - "read:lists": see your lists - "read:mutes": see your mutes - "read:notifications": see your notifications - "read:reports": see your reports - "read:search": search on your behalf - "read:statuses": see all posts + read:accounts: see accounts information + read:blocks: see your blocks + read:bookmarks: see your bookmarks + read:favourites: see your favourites + read:filters: see your filters + read:follows: see your follows + read:lists: see your lists + read:mutes: see your mutes + read:notifications: see your notifications + read:reports: see your reports + read:search: search on your behalf + read:statuses: see all posts write: modify all your account's data - "write:accounts": modify your profile - "write:blocks": block accounts and domains - "write:bookmarks": bookmark posts - "write:conversations": mute and delete conversations - "write:favourites": favourite posts - "write:filters": create filters - "write:follows": follow people - "write:lists": create lists - "write:media": upload media files - "write:mutes": mute people and conversations - "write:notifications": clear your notifications - "write:reports": report other people - "write:statuses": publish posts + write:accounts: modify your profile + write:blocks: block accounts and domains + write:bookmarks: bookmark posts + write:conversations: mute and delete conversations + write:favourites: favourite posts + write:filters: create filters + write:follows: follow people + write:lists: create lists + write:media: upload media files + write:mutes: mute people and conversations + write:notifications: clear your notifications + write:reports: report other people + write:statuses: publish posts diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index 2c1a99d0bd0617..8bb61c7a49cfc3 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -1,3 +1,4 @@ +--- eo: activerecord: attributes: @@ -146,22 +147,22 @@ eo: application: title: OAuth-a rajtigo bezonata scopes: - "admin:read": legu ĉiujn datumojn en la servilo - "admin:read:accounts": legi konfidencajn informojn de ĉiuj kontoj - "admin:read:canonical_email_blocks": legi sentemajn informojn de ĉiuj kanonikaj retpoŝtaj blokoj - "admin:read:domain_allows": legi sentemajn informojn de ĉiuj domajno permesas - "admin:read:domain_blocks": legi sentemajn informojn de ĉiuj domajnaj blokoj - "admin:read:email_domain_blocks": legi sentemajn informojn pri ĉiuj retpoŝtaj domajnaj blokoj - "admin:read:ip_blocks": legi sentivajn informojn de ĉiuj IP-blokoj - "admin:read:reports": legi konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj - "admin:write": modifi ĉiujn datumojn en la servilo - "admin:write:accounts": plenumi agojn de kontrolo sur kontoj - "admin:write:canonical_email_blocks": fari moderigajn agojn sur kanonikaj retpoŝtaj blokoj - "admin:write:domain_allows": fari moderigajn agojn sur domajno permesas - "admin:write:domain_blocks": fari moderigajn agojn sur domajnaj blokoj - "admin:write:email_domain_blocks": fari moderigajn agojn pri retpoŝtaj domajnaj blokoj - "admin:write:ip_blocks": fari moderigajn agojn pri IP-blokoj - "admin:write:reports": plenumi agojn de kontrolo sur signaloj + admin:read: legu ĉiujn datumojn en la servilo + admin:read:accounts: legi konfidencajn informojn de ĉiuj kontoj + admin:read:canonical_email_blocks: legi sentemajn informojn de ĉiuj kanonikaj retpoŝtaj blokoj + admin:read:domain_allows: legi sentemajn informojn de ĉiuj domajno permesas + admin:read:domain_blocks: legi sentemajn informojn de ĉiuj domajnaj blokoj + admin:read:email_domain_blocks: legi sentemajn informojn pri ĉiuj retpoŝtaj domajnaj blokoj + admin:read:ip_blocks: legi sentivajn informojn de ĉiuj IP-blokoj + admin:read:reports: legi konfidencajn informojn de ĉiuj signaloj kaj signalitaj kontoj + admin:write: modifi ĉiujn datumojn en la servilo + admin:write:accounts: plenumi agojn de kontrolo sur kontoj + admin:write:canonical_email_blocks: fari moderigajn agojn sur kanonikaj retpoŝtaj blokoj + admin:write:domain_allows: fari moderigajn agojn sur domajno permesas + admin:write:domain_blocks: fari moderigajn agojn sur domajnaj blokoj + admin:write:email_domain_blocks: fari moderigajn agojn pri retpoŝtaj domajnaj blokoj + admin:write:ip_blocks: fari moderigajn agojn pri IP-blokoj + admin:write:reports: plenumi agojn de kontrolo sur signaloj crypto: uzi fin-al-finan ĉifradon follow: ŝanĝi rilatojn al aliaj kontoj push: ricevi viajn puŝ-sciigojn diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 9c958086b769b1..532db1f30d13b2 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -1,3 +1,4 @@ +--- es-AR: activerecord: attributes: @@ -24,11 +25,11 @@ es-AR: edit: Editar submit: Enviar confirmations: - destroy: '¿Estás seguro?' + destroy: "¿Estás seguro?" edit: title: Editar aplicación form: - error: '¡Epa! Comprobá tu formulario por posibles errores' + error: "¡Epa! Comprobá tu formulario por posibles errores" help: native_redirect_uri: Usá %{native_redirect_uri} para pruebas locales redirect_uri: Usá una línea por dirección web @@ -68,7 +69,7 @@ es-AR: buttons: revoke: Revocar confirmations: - revoke: '¿Estás seguro?' + revoke: "¿Estás seguro?" index: authorized_at: Autorizado el %{date} description_html: Estas son aplicaciones que pueden acceder a tu cuenta usando la API. Si hay aplicaciones que no reconocés acá, o que funcionan de forma sospechosa, podés revocar su acceso. @@ -146,49 +147,49 @@ es-AR: application: title: Autorización de OAuth requerida scopes: - "admin:read": leer todos los datos en el servidor - "admin:read:accounts": leer información sensible de todas las cuentas - "admin:read:canonical_email_blocks": leer información sensible de todos los bloques canónicos de correo electrónico - "admin:read:domain_allows": leer información sensible de todos los dominios permitidos - "admin:read:domain_blocks": leer información sensible de todos los bloques de dominio - "admin:read:email_domain_blocks": leer información sensible de todos los bloques de dominio de correo electrónico - "admin:read:ip_blocks": leer información sensible de todos los bloques de direcciones IP - "admin:read:reports": leer información sensible de todos los informes y cuentas denunciadas - "admin:write": modificar todos los datos en el servidor - "admin:write:accounts": ejecutar acciones de moderación en cuentas - "admin:write:canonical_email_blocks": ejecutar acciones de moderación en bloques canónicos de correo electrónico - "admin:write:domain_allows": realizar acciones de moderación en el dominio permitido - "admin:write:domain_blocks": ejecutar acciones de moderación en bloques de dominio - "admin:write:email_domain_blocks": ejecutar acciones de moderación en bloques de dominio de correo electrónico - "admin:write:ip_blocks": ejecutar acciones de moderación en bloques de direcciones IP - "admin:write:reports": ejecutar acciones de moderación en denuncias + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:canonical_email_blocks: leer información sensible de todos los bloques canónicos de correo electrónico + admin:read:domain_allows: leer información sensible de todos los dominios permitidos + admin:read:domain_blocks: leer información sensible de todos los bloques de dominio + admin:read:email_domain_blocks: leer información sensible de todos los bloques de dominio de correo electrónico + admin:read:ip_blocks: leer información sensible de todos los bloques de direcciones IP + admin:read:reports: leer información sensible de todos los informes y cuentas denunciadas + admin:write: modificar todos los datos en el servidor + admin:write:accounts: ejecutar acciones de moderación en cuentas + admin:write:canonical_email_blocks: ejecutar acciones de moderación en bloques canónicos de correo electrónico + admin:write:domain_allows: realizar acciones de moderación en el dominio permitido + admin:write:domain_blocks: ejecutar acciones de moderación en bloques de dominio + admin:write:email_domain_blocks: ejecutar acciones de moderación en bloques de dominio de correo electrónico + admin:write:ip_blocks: ejecutar acciones de moderación en bloques de direcciones IP + admin:write:reports: ejecutar acciones de moderación en denuncias crypto: usar cifrado de extremo a extremo follow: modificar relaciones de cuenta 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": 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 denuncias - "read:search": buscar en tu nombre - "read:statuses": ver todos los mensajes + read:accounts: ver información de cuentas + read:blocks: ver qué cuentas bloqueaste + 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 denuncias + read:search: buscar en tu nombre + read:statuses: ver todos los mensajes write: modificar todos los datos de tu cuenta - "write:accounts": modificar tu perfil - "write:blocks": bloquear cuentas y dominios - "write:bookmarks": marcar mensajes - "write:conversations": silenciar y eliminar conversaciones - "write:favourites": marcar mensajes como favoritos - "write:filters": crear filtros - "write:follows": seguir cuentas - "write:lists": crear listas - "write:media": subir archivos de medios - "write:mutes": silenciar cuentas y conversaciones - "write:notifications": limpiar tus notificaciones - "write:reports": denunciar otras cuentas - "write:statuses": publicar mensajes + write:accounts: modificar tu perfil + write:blocks: bloquear cuentas y dominios + write:bookmarks: marcar mensajes + write:conversations: silenciar y eliminar conversaciones + write:favourites: marcar mensajes como favoritos + write:filters: crear filtros + write:follows: seguir cuentas + write:lists: crear listas + write:media: subir archivos de medios + write:mutes: silenciar cuentas y conversaciones + write:notifications: limpiar tus notificaciones + write:reports: denunciar otras cuentas + write:statuses: publicar mensajes diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index e0c2d35a5b6844..082d656bc5d012 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -1,3 +1,4 @@ +--- es-MX: activerecord: attributes: @@ -24,11 +25,11 @@ es-MX: edit: Editar submit: Enviar confirmations: - destroy: '¿Está seguro?' + destroy: "¿Está seguro?" edit: title: Editar aplicación form: - error: '¡Uuups! Compruebe su formulario' + error: "¡Uuups! Compruebe su formulario" help: native_redirect_uri: Utilice %{native_redirect_uri} para pruebas locales redirect_uri: Utilice una línea por URI @@ -68,7 +69,7 @@ es-MX: buttons: revoke: Revocar confirmations: - revoke: '¿Está seguro?' + revoke: "¿Está seguro?" index: authorized_at: Autorizado el %{date} description_html: Estas son aplicaciones que pueden acceder a tu cuenta utilizando la API. Si hay alguna aplicación que no reconozcas aquí, o una aplicación esta teniendo comportamientos extraños, puedes revocar el acceso. @@ -146,22 +147,22 @@ es-MX: 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:canonical_email_blocks": leer información sensible de todos los bloques de correo canónico - "admin:read:domain_allows": leer información sensible de todos los dominios permitidos - "admin:read:domain_blocks": leer información sensible de todos los bloques de dominio - "admin:read:email_domain_blocks": leer información sensible de todos los bloques de dominio de correo electrónico - "admin:read:ip_blocks": leer información sensible de todos los bloques de IP - "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:canonical_email_blocks": realizar acciones de moderación en bloques de correo canónico - "admin:write:domain_allows": realizar acciones de moderación en el dominio permitido - "admin:write:domain_blocks": realizar acciones de moderación en bloques de dominio - "admin:write:email_domain_blocks": realizar acciones de moderación en bloques de dominio de correo electrónico - "admin:write:ip_blocks": realizar acciones de moderación en bloques de IP - "admin:write:reports": realizar acciones de moderación en informes + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:canonical_email_blocks: leer información sensible de todos los bloques de correo canónico + admin:read:domain_allows: leer información sensible de todos los dominios permitidos + admin:read:domain_blocks: leer información sensible de todos los bloques de dominio + admin:read:email_domain_blocks: leer información sensible de todos los bloques de dominio de correo electrónico + admin:read:ip_blocks: leer información sensible de todos los bloques de IP + 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:canonical_email_blocks: realizar acciones de moderación en bloques de correo canónico + admin:write:domain_allows: realizar acciones de moderación en el dominio permitido + admin:write:domain_blocks: realizar acciones de moderación en bloques de dominio + admin:write:email_domain_blocks: realizar acciones de moderación en bloques de dominio de correo electrónico + admin:write:ip_blocks: realizar acciones de moderación en bloques de IP + admin:write:reports: realizar acciones de moderación en informes crypto: usar cifrado de extremo a extremo follow: seguir, bloquear, desbloquear y dejar de seguir cuentas push: recibir tus notificaciones push diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 381aad7e9406b5..002f813b326836 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -1,3 +1,4 @@ +--- es: activerecord: attributes: @@ -24,11 +25,11 @@ es: edit: Editar submit: Enviar confirmations: - destroy: '¿Está seguro?' + destroy: "¿Está seguro?" edit: title: Editar aplicación form: - error: '¡Uuups! Compruebe su formulario' + error: "¡Uuups! Compruebe su formulario" help: native_redirect_uri: Utilice %{native_redirect_uri} para pruebas locales redirect_uri: Utilice una línea por URI @@ -68,7 +69,7 @@ es: buttons: revoke: Revocar confirmations: - revoke: '¿Está seguro?' + revoke: "¿Está seguro?" index: authorized_at: Autorizado el %{date} description_html: Estas son aplicaciones que pueden acceder a tu cuenta usando la API. Si hay aplicaciones que no se reconocen aquí, o una aplicación no funciona correctamente, puedes revocar su acceso. @@ -146,22 +147,22 @@ es: 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:canonical_email_blocks": leer información sensible de todos los bloqueos de correo canónico - "admin:read:domain_allows": leer información sensible de todos los dominios permitidos - "admin:read:domain_blocks": leer información sensible de todos los bloqueos de dominio - "admin:read:email_domain_blocks": leer información sensible de todos los bloqueos de dominio de correo electrónico - "admin:read:ip_blocks": leer información sensible de todos los bloqueos de IP - "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:canonical_email_blocks": ejecutar acciones de moderación en bloqueos canónicos de correo electrónico - "admin:write:domain_allows": ejecutar acciones de moderación en los dominios permitidos - "admin:write:domain_blocks": ejecutar acciones de moderación en bloqueos de dominio - "admin:write:email_domain_blocks": ejecutar acciones de moderación en bloqueos de dominio de correo electrónico - "admin:write:ip_blocks": ejecutar acciones de moderación en bloqueos de IP - "admin:write:reports": realizar acciones de moderación en informes + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:canonical_email_blocks: leer información sensible de todos los bloqueos de correo canónico + admin:read:domain_allows: leer información sensible de todos los dominios permitidos + admin:read:domain_blocks: leer información sensible de todos los bloqueos de dominio + admin:read:email_domain_blocks: leer información sensible de todos los bloqueos de dominio de correo electrónico + admin:read:ip_blocks: leer información sensible de todos los bloqueos de IP + 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:canonical_email_blocks: ejecutar acciones de moderación en bloqueos canónicos de correo electrónico + admin:write:domain_allows: ejecutar acciones de moderación en los dominios permitidos + admin:write:domain_blocks: ejecutar acciones de moderación en bloqueos de dominio + admin:write:email_domain_blocks: ejecutar acciones de moderación en bloqueos de dominio de correo electrónico + admin:write:ip_blocks: ejecutar acciones de moderación en bloqueos de IP + admin:write:reports: realizar acciones de moderación en informes crypto: usar cifrado de extremo a extremo follow: seguir, bloquear, desbloquear y dejar de seguir cuentas push: recibir tus notificaciones push diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml index 22cd0cdd667707..1843031706a085 100644 --- a/config/locales/doorkeeper.et.yml +++ b/config/locales/doorkeeper.et.yml @@ -1,3 +1,4 @@ +--- et: activerecord: attributes: @@ -146,22 +147,22 @@ et: application: title: OAuth autoriseerimine vajalik scopes: - "admin:read": lugeda kõiki andmeid serveril - "admin:read:accounts": lugeda privaatset informatsiooni kõikidel kontodel - "admin:read:canonical_email_blocks": loe kõigi kanooniliste e-posti blokeeringute tundlikku infot - "admin:read:domain_allows": loe kõigi domeenide lubade tundliku infot - "admin:read:domain_blocks": loe kõigi domeenide blokeeringute tundlikku infot - "admin:read:email_domain_blocks": loe kõigi e-posti blokeeringute tundlikku infot - "admin:read:ip_blocks": loe kõigi IP-blokeeringute tundlikku infot - "admin:read:reports": lugeda privaatset infot kõikide teavituste ja teavitatud kasutajate kohta - "admin:write": muuta kõiki andmeid serveril - "admin:write:accounts": teostada moderaatori tegevusi kontodel - "admin:write:canonical_email_blocks": modereeri kanoonilisi e-posti blokeeringuid - "admin:write:domain_allows": modereeri domeeni lubasid - "admin:write:domain_blocks": modereeri domeeni blokeeringuid - "admin:write:email_domain_blocks": modereeri e-postidomeenide blokeeringuid - "admin:write:ip_blocks": modereeri IP-blokeeringuid - "admin:write:reports": teostada moderaatori tegevusi teavitustel + admin:read: lugeda kõiki andmeid serveril + admin:read:accounts: lugeda privaatset informatsiooni kõikidel kontodel + admin:read:canonical_email_blocks: loe kõigi kanooniliste e-posti blokeeringute tundlikku infot + admin:read:domain_allows: loe kõigi domeenide lubade tundliku infot + admin:read:domain_blocks: loe kõigi domeenide blokeeringute tundlikku infot + admin:read:email_domain_blocks: loe kõigi e-posti blokeeringute tundlikku infot + admin:read:ip_blocks: loe kõigi IP-blokeeringute tundlikku infot + admin:read:reports: lugeda privaatset infot kõikide teavituste ja teavitatud kasutajate kohta + admin:write: muuta kõiki andmeid serveril + admin:write:accounts: teostada moderaatori tegevusi kontodel + admin:write:canonical_email_blocks: modereeri kanoonilisi e-posti blokeeringuid + admin:write:domain_allows: modereeri domeeni lubasid + admin:write:domain_blocks: modereeri domeeni blokeeringuid + admin:write:email_domain_blocks: modereeri e-postidomeenide blokeeringuid + admin:write:ip_blocks: modereeri IP-blokeeringuid + admin:write:reports: teostada moderaatori tegevusi teavitustel crypto: kasuta otspunktkrüpeerimist follow: muuta kontode suhteid push: saab tõuketeateid @@ -179,16 +180,16 @@ et: read:search: otsida sinu nimel read:statuses: näha kõiki postitusi write: muuta kogu konto andmeid - "write:accounts": muuta profiili - "write:blocks": kontode ja domeenide blokeerimine - "write:bookmarks": lisada postitusele järjehoidja - "write:conversations": vaigista ja kustuta vestlused - "write:favourites": lisada postitusi lemmikuks - "write:filters": luua filtreid - "write:follows": jälgida inimesi - "write:lists": luua nimekirju - "write:media": üles laadida meediafaile - "write:mutes": vaigista inimesi ja vestluseid - "write:notifications": tühjendada teateid - "write:reports": teavitada teistest inimestest - "write:statuses": avaldada postitusi + write:accounts: muuta profiili + write:blocks: kontode ja domeenide blokeerimine + write:bookmarks: lisada postitusele järjehoidja + write:conversations: vaigista ja kustuta vestlused + write:favourites: lisada postitusi lemmikuks + write:filters: luua filtreid + write:follows: jälgida inimesi + write:lists: luua nimekirju + write:media: üles laadida meediafaile + write:mutes: vaigista inimesi ja vestluseid + write:notifications: tühjendada teateid + write:reports: teavitada teistest inimestest + write:statuses: avaldada postitusi diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml index 04c0640ec47f9d..9886e034b0ce19 100644 --- a/config/locales/doorkeeper.eu.yml +++ b/config/locales/doorkeeper.eu.yml @@ -1,3 +1,4 @@ +--- eu: activerecord: attributes: @@ -70,7 +71,7 @@ eu: confirmations: revoke: Ziur zaude? index: - authorized_at: '%{date} datan baimendua' + authorized_at: "%{date} datan baimendua" description_html: Aplikazio hauek zure kontura sarbidea dute APIa erabiliz. Ezagutzen ez duzun aplikazioren bat badago, edo aplikazio batek portaera desegokia badu, baimena kendu diezaiokezu. last_used_at: Azkena %{date} datan erabilia never_used: Inoiz erabili gabea @@ -146,22 +147,22 @@ eu: application: title: OAuth autorizazioa behar da scopes: - "admin:read": zerbitzariko datu guztiak irakurri - "admin:read:accounts": kontu guztien informazio sentsiblea irakurri - "admin:read:canonical_email_blocks": irakurri eposta kanonikoen blokeatzeari buruzko informazio sentikorra - "admin:read:domain_allows": irakurri onartutako domeinu guztien informazio sentikorra - "admin:read:domain_blocks": irakurri blokeatutako domeinu guztien informazio sentikorra - "admin:read:email_domain_blocks": irakurri blokeatutako eposta domeinu guztien informazio sentikorra - "admin:read:ip_blocks": irakurri blokeatutako IP guztien informazio sentikorra - "admin:read:reports": salaketa guztietako eta salatutako kontu guztietako informazio sentsiblea irakurri - "admin:write": zerbitzariko datu guztiak aldatu - "admin:write:accounts": kontuetan moderazio ekintzak burutu - "admin:write:canonical_email_blocks": gauzatu moderazio ekintzak eposta kanonikoen blokeatzean - "admin:write:domain_allows": gauzatu moderazio ekintzak onartutako domeinuetan - "admin:write:domain_blocks": gauzatu moderazio ekintzak domeinuen blokeatzeetan - "admin:write:email_domain_blocks": gauzatu moderazio ekintzak eposta domeinuen blokeatzeetan - "admin:write:ip_blocks": gauzatu moderazio ekintzak IP blokeatzeetan - "admin:write:reports": salaketetan moderazio ekintzak burutu + admin:read: zerbitzariko datu guztiak irakurri + admin:read:accounts: kontu guztien informazio sentsiblea irakurri + admin:read:canonical_email_blocks: irakurri eposta kanonikoen blokeatzeari buruzko informazio sentikorra + admin:read:domain_allows: irakurri onartutako domeinu guztien informazio sentikorra + admin:read:domain_blocks: irakurri blokeatutako domeinu guztien informazio sentikorra + admin:read:email_domain_blocks: irakurri blokeatutako eposta domeinu guztien informazio sentikorra + admin:read:ip_blocks: irakurri blokeatutako IP guztien informazio sentikorra + admin:read:reports: salaketa guztietako eta salatutako kontu guztietako informazio sentsiblea irakurri + admin:write: zerbitzariko datu guztiak aldatu + admin:write:accounts: kontuetan moderazio ekintzak burutu + admin:write:canonical_email_blocks: gauzatu moderazio ekintzak eposta kanonikoen blokeatzean + admin:write:domain_allows: gauzatu moderazio ekintzak onartutako domeinuetan + admin:write:domain_blocks: gauzatu moderazio ekintzak domeinuen blokeatzeetan + admin:write:email_domain_blocks: gauzatu moderazio ekintzak eposta domeinuen blokeatzeetan + admin:write:ip_blocks: gauzatu moderazio ekintzak IP blokeatzeetan + admin:write:reports: salaketetan moderazio ekintzak burutu crypto: erabili muturretik muturrerako zifraketa follow: aldatu kontuaren erlazioak push: jaso push jakinarazpenak diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 5663413a3dbd25..c56e76e346286c 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -1,3 +1,4 @@ +--- fa: activerecord: attributes: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index cd431f8cc0565a..fea01d107660cd 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -1,3 +1,4 @@ +--- fi: activerecord: attributes: @@ -118,11 +119,11 @@ fi: write: Vain kirjoitusoikeus title: accounts: Tilit - admin/accounts: Tilien hallinta + admin/accounts: Tilien hallinnointi admin/all: Kaikki hallinnolliset toiminnot - admin/reports: Raporttien hallinta + admin/reports: Raporttien hallinnointi all: Täysi pääsy Mastodon-tiliisi - blocks: Torjutut + blocks: Estot bookmarks: Kirjanmerkit conversations: Keskustelut crypto: Päästä päähän -salaus diff --git a/config/locales/doorkeeper.fo.yml b/config/locales/doorkeeper.fo.yml index 5ce64dfe59b85d..78f8701ae92bab 100644 --- a/config/locales/doorkeeper.fo.yml +++ b/config/locales/doorkeeper.fo.yml @@ -1,3 +1,4 @@ +--- fo: activerecord: attributes: @@ -146,22 +147,22 @@ fo: application: title: OAuth váttan kravd scopes: - "admin:read": les allar dátur á ambætaranum - "admin:read:accounts": les viðkvæmar upplýsingar úr øllum kontum - "admin:read:canonical_email_blocks": les viðkvæmar upplýsingar frá øllum fyrimyndarligum teldupostblokeringum - "admin:read:domain_allows": les viðkvæmar upplýsingar frá øllum loyvdum navnaøkjum - "admin:read:domain_blocks": les viðkvæmar upplýsingar frá øllum navnaøkjablokeringum - "admin:read:email_domain_blocks": les viðkvæmar upplýsingar frá øllum telduposta-navnaøkjablokeringum - "admin:read:ip_blocks": les viðkvæmar upplýsingar frá øllum IP blokeringum - "admin:read:reports": les viðkvæmar upplýsingar um allar meldingar og meldaðar kontur - "admin:write": broyta allar dátur á ambætaranum - "admin:write:accounts": útinna kjakleiðsluatgerðir á kontum - "admin:write:canonical_email_blocks": før umsjón við øllum fyrimyndarligum teldupostablokeringum - "admin:write:domain_allows": før umsjón á loyvdum navnaøkjum - "admin:write:domain_blocks": før umsjón á navnaøkjablokeringum - "admin:write:email_domain_blocks": før umsjón á telduposta-navnaøkjablokeringum - "admin:write:ip_blocks": før umsjón á IP blokeringum - "admin:write:reports": útinna kjakleiðsluatgerðir á meldingum + admin:read: les allar dátur á ambætaranum + admin:read:accounts: les viðkvæmar upplýsingar úr øllum kontum + admin:read:canonical_email_blocks: les viðkvæmar upplýsingar frá øllum fyrimyndarligum teldupostblokeringum + admin:read:domain_allows: les viðkvæmar upplýsingar frá øllum loyvdum navnaøkjum + admin:read:domain_blocks: les viðkvæmar upplýsingar frá øllum navnaøkjablokeringum + admin:read:email_domain_blocks: les viðkvæmar upplýsingar frá øllum telduposta-navnaøkjablokeringum + admin:read:ip_blocks: les viðkvæmar upplýsingar frá øllum IP blokeringum + admin:read:reports: les viðkvæmar upplýsingar um allar meldingar og meldaðar kontur + admin:write: broyta allar dátur á ambætaranum + admin:write:accounts: útinna kjakleiðsluatgerðir á kontum + admin:write:canonical_email_blocks: før umsjón við øllum fyrimyndarligum teldupostablokeringum + admin:write:domain_allows: før umsjón á loyvdum navnaøkjum + admin:write:domain_blocks: før umsjón á navnaøkjablokeringum + admin:write:email_domain_blocks: før umsjón á telduposta-navnaøkjablokeringum + admin:write:ip_blocks: før umsjón á IP blokeringum + admin:write:reports: útinna kjakleiðsluatgerðir á meldingum crypto: brúka enda-til-enda bronglan follow: broyta viðurskifti millum kontur push: móttaka tínar skumpifráboðanir diff --git a/config/locales/doorkeeper.fr-QC.yml b/config/locales/doorkeeper.fr-QC.yml index 8e54ee5192453d..043b4a6cda960d 100644 --- a/config/locales/doorkeeper.fr-QC.yml +++ b/config/locales/doorkeeper.fr-QC.yml @@ -1,3 +1,4 @@ +--- fr-QC: activerecord: attributes: @@ -146,38 +147,38 @@ fr-QC: application: title: Autorisation OAuth requise scopes: - "admin:read": lire toutes les données du serveur - "admin:read:accounts": lire les informations sensibles de tous les comptes - "admin:read:canonical_email_blocks": lire les informations sensibles de tous les bloqueurs de courriels canoniques - "admin:read:domain_allows": lire les informations sensibles de tous les domaines autorisés - "admin:read:domain_blocks": lire les informations sensibles de tous les bloqueurs de domaines - "admin:read:email_domain_blocks": lire les informations sensibles de tous les bloqueurs de domaines de courriel - "admin:read:ip_blocks": lire les informations sensibles de tous les blocqueurs d'IP - "admin:read:reports": lire les informations sensibles de tous les signalements et des comptes signalés - "admin:write": modifier toutes les données sur le serveur - "admin:write:accounts": effectuer des actions de modération sur les comptes - "admin:write:canonical_email_blocks": effectuer des actions de modération sur les bloqueurs de courriels canoniques - "admin:write:domain_allows": effectuer des actions de modération sur les autorisations de domaines - "admin:write:domain_blocks": effectuer des actions de modération sur des bloqueurs de domaines - "admin:write:email_domain_blocks": effectuer des actions de modération sur des bloqueurs de domaines de courriel - "admin:write:ip_blocks": effectuer des actions de modération sur des bloqueurs d'IP - "admin:write:reports": effectuer des actions de modération sur les signalements + admin:read: lire toutes les données du serveur + admin:read:accounts: lire les informations sensibles de tous les comptes + admin:read:canonical_email_blocks: lire les informations sensibles de tous les bloqueurs de courriels canoniques + admin:read:domain_allows: lire les informations sensibles de tous les domaines autorisés + admin:read:domain_blocks: lire les informations sensibles de tous les bloqueurs de domaines + admin:read:email_domain_blocks: lire les informations sensibles de tous les bloqueurs de domaines de courriel + admin:read:ip_blocks: lire les informations sensibles de tous les blocqueurs d'IP + admin:read:reports: lire les informations sensibles de tous les signalements et des comptes signalés + admin:write: modifier toutes les données sur le serveur + admin:write:accounts: effectuer des actions de modération sur les comptes + admin:write:canonical_email_blocks: effectuer des actions de modération sur les bloqueurs de courriels canoniques + admin:write:domain_allows: effectuer des actions de modération sur les autorisations de domaines + admin:write:domain_blocks: effectuer des actions de modération sur des bloqueurs de domaines + admin:write:email_domain_blocks: effectuer des actions de modération sur des bloqueurs de domaines de courriel + admin:write:ip_blocks: effectuer des actions de modération sur des bloqueurs d'IP + admin:write:reports: effectuer des actions de modération sur les signalements crypto: utiliser le chiffrement de bout-en-bout follow: modifier les relations du compte push: recevoir vos notifications poussées read: lire toutes les données de votre compte - "read:accounts": voir les informations des comptes - "read:blocks": voir vos blocages - "read:bookmarks": voir vos marque-pages - "read:favourites": voir vos favoris - "read:filters": voir vos filtres - "read:follows": voir vos abonnements - "read:lists": voir vos listes - "read:mutes": voir vos masquages - "read:notifications": voir vos notifications - "read:reports": voir vos signalements - "read:search": rechercher en votre nom - "read:statuses": voir tous les messages + read:accounts: voir les informations des comptes + read:blocks: voir vos blocages + read:bookmarks: voir vos marque-pages + read:favourites: voir vos favoris + read:filters: voir vos filtres + read:follows: voir vos abonnements + read:lists: voir vos listes + read:mutes: voir vos masquages + read:notifications: voir vos notifications + read:reports: voir vos signalements + read:search: rechercher en votre nom + read:statuses: voir tous les messages write: modifier toutes les données de votre compte write:accounts: modifier votre profil write:blocks: bloquer des comptes et des domaines diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index 36028b00054d0d..2c37b651a7d9b3 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -1,3 +1,4 @@ +--- fr: activerecord: attributes: @@ -146,38 +147,38 @@ fr: application: title: Autorisation OAuth requise scopes: - "admin:read": lire toutes les données du serveur - "admin:read:accounts": lire les informations sensibles de tous les comptes - "admin:read:canonical_email_blocks": lire les informations sensibles de tous les bloqueurs de courriels canoniques - "admin:read:domain_allows": lire les informations sensibles de tous les domaines autorisés - "admin:read:domain_blocks": lire les informations sensibles de tous les bloqueurs de domaines - "admin:read:email_domain_blocks": lire les informations sensibles de tous les bloqueurs de domaines de courriel - "admin:read:ip_blocks": lire les informations sensibles de tous les blocqueurs d'IP - "admin:read:reports": lire les informations sensibles de tous les signalements et des comptes signalés - "admin:write": modifier toutes les données sur le serveur - "admin:write:accounts": effectuer des actions de modération sur les comptes - "admin:write:canonical_email_blocks": effectuer des actions de modération sur les bloqueurs de courriels canoniques - "admin:write:domain_allows": effectuer des actions de modération sur les autorisations de domaines - "admin:write:domain_blocks": effectuer des actions de modération sur des bloqueurs de domaines - "admin:write:email_domain_blocks": effectuer des actions de modération sur des bloqueurs de domaines de courriel - "admin:write:ip_blocks": effectuer des actions de modération sur des bloqueurs d'IP - "admin:write:reports": effectuer des actions de modération sur les signalements + admin:read: lire toutes les données du serveur + admin:read:accounts: lire les informations sensibles de tous les comptes + admin:read:canonical_email_blocks: lire les informations sensibles de tous les bloqueurs de courriels canoniques + admin:read:domain_allows: lire les informations sensibles de tous les domaines autorisés + admin:read:domain_blocks: lire les informations sensibles de tous les bloqueurs de domaines + admin:read:email_domain_blocks: lire les informations sensibles de tous les bloqueurs de domaines de courriel + admin:read:ip_blocks: lire les informations sensibles de tous les blocqueurs d'IP + admin:read:reports: lire les informations sensibles de tous les signalements et des comptes signalés + admin:write: modifier toutes les données sur le serveur + admin:write:accounts: effectuer des actions de modération sur les comptes + admin:write:canonical_email_blocks: effectuer des actions de modération sur les bloqueurs de courriels canoniques + admin:write:domain_allows: effectuer des actions de modération sur les autorisations de domaines + admin:write:domain_blocks: effectuer des actions de modération sur des bloqueurs de domaines + admin:write:email_domain_blocks: effectuer des actions de modération sur des bloqueurs de domaines de courriel + admin:write:ip_blocks: effectuer des actions de modération sur des bloqueurs d'IP + admin:write:reports: effectuer des actions de modération sur les signalements crypto: utiliser le chiffrement de bout-en-bout follow: modifier les relations du compte push: recevoir vos notifications poussées read: lire toutes les données de votre compte - "read:accounts": voir les informations des comptes - "read:blocks": voir vos blocages - "read:bookmarks": voir vos marque-pages - "read:favourites": voir vos favoris - "read:filters": voir vos filtres - "read:follows": voir vos abonnements - "read:lists": voir vos listes - "read:mutes": voir vos masquages - "read:notifications": voir vos notifications - "read:reports": voir vos signalements - "read:search": rechercher en votre nom - "read:statuses": voir tous les messages + read:accounts: voir les informations des comptes + read:blocks: voir vos blocages + read:bookmarks: voir vos marque-pages + read:favourites: voir vos favoris + read:filters: voir vos filtres + read:follows: voir vos abonnements + read:lists: voir vos listes + read:mutes: voir vos masquages + read:notifications: voir vos notifications + read:reports: voir vos signalements + read:search: rechercher en votre nom + read:statuses: voir tous les messages write: modifier toutes les données de votre compte write:accounts: modifier votre profil write:blocks: bloquer des comptes et des domaines diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml index 739db344a3ef4f..8acf7ea9b8f754 100644 --- a/config/locales/doorkeeper.fy.yml +++ b/config/locales/doorkeeper.fy.yml @@ -1,3 +1,4 @@ +--- fy: activerecord: attributes: @@ -146,22 +147,22 @@ fy: application: title: OAuth-autorisaasje fereaske scopes: - "admin:read": alle gegevens op de server lêze - "admin:read:accounts": gefoelige ynformaasje fan alle accounts lêze - "admin:read:canonical_email_blocks": lês gefoelige ynformaasje fan alle kanonike e-mailblokken - "admin:read:domain_allows": lês gefoelige ynformaasje fan alle domeinen - "admin:read:domain_blocks": lês gefoelige ynformaasje fan alle domeinblokken - "admin:read:email_domain_blocks": lês gefoelige ynformaasje fan alle e-maildomeinblokken - "admin:read:ip_blocks": lês gefoelige ynformaasje fan alle IP-blokken - "admin:read:reports": gefoelige ynformaasje fan alle rapportaazjes en rapportearre accounts lêze - "admin:write": wizigje alle gegevens op de server - "admin:write:accounts": moderaasjemaatregelen tsjin accounts nimme - "admin:write:canonical_email_blocks": fier moderaasje-aksjes út op kanonike e-mailblokken - "admin:write:domain_allows": fier moderaasje-aksjes út op domeintastimmingen - "admin:write:domain_blocks": fier moderaasje-aksjes út op domeinblokkaden - "admin:write:email_domain_blocks": fier moderaasje-aksjes út op e-maildomeinen - "admin:write:ip_blocks": fier moderaasje-aksjes út op IP-adresblokken - "admin:write:reports": moderaasjemaatregelen nimme yn rapportaazjes + admin:read: alle gegevens op de server lêze + admin:read:accounts: gefoelige ynformaasje fan alle accounts lêze + admin:read:canonical_email_blocks: lês gefoelige ynformaasje fan alle kanonike e-mailblokken + admin:read:domain_allows: lês gefoelige ynformaasje fan alle domeinen + admin:read:domain_blocks: lês gefoelige ynformaasje fan alle domeinblokken + admin:read:email_domain_blocks: lês gefoelige ynformaasje fan alle e-maildomeinblokken + admin:read:ip_blocks: lês gefoelige ynformaasje fan alle IP-blokken + admin:read:reports: gefoelige ynformaasje fan alle rapportaazjes en rapportearre accounts lêze + admin:write: wizigje alle gegevens op de server + admin:write:accounts: moderaasjemaatregelen tsjin accounts nimme + admin:write:canonical_email_blocks: fier moderaasje-aksjes út op kanonike e-mailblokken + admin:write:domain_allows: fier moderaasje-aksjes út op domeintastimmingen + admin:write:domain_blocks: fier moderaasje-aksjes út op domeinblokkaden + admin:write:email_domain_blocks: fier moderaasje-aksjes út op e-maildomeinen + admin:write:ip_blocks: fier moderaasje-aksjes út op IP-adresblokken + admin:write:reports: moderaasjemaatregelen nimme yn rapportaazjes crypto: ein-ta-ein-fersifering brûke follow: relaasjes tusken accounts bewurkje push: dyn pushmeldingen ûntfange diff --git a/config/locales/doorkeeper.ga.yml b/config/locales/doorkeeper.ga.yml index f8dec9cef95b34..a263a6b15dc529 100644 --- a/config/locales/doorkeeper.ga.yml +++ b/config/locales/doorkeeper.ga.yml @@ -1,3 +1,4 @@ +--- ga: activerecord: attributes: @@ -46,5 +47,5 @@ ga: search: Cuardaigh statuses: Postálacha scopes: - "write:filters": cruthaigh scagairí - "write:lists": cruthaigh liostaí + write:filters: cruthaigh scagairí + write:lists: cruthaigh liostaí diff --git a/config/locales/doorkeeper.gd.yml b/config/locales/doorkeeper.gd.yml index 341982892105c2..4db4497b4ea25c 100644 --- a/config/locales/doorkeeper.gd.yml +++ b/config/locales/doorkeeper.gd.yml @@ -1,3 +1,4 @@ +--- gd: activerecord: attributes: @@ -11,10 +12,10 @@ gd: doorkeeper/application: attributes: redirect_uri: - fragment_present: '– chan fhaod bloigh a bhith ’na bhroinn.' - invalid_uri: '– feumaidh seo a bhith ’na URI dligheach.' - relative_uri: '– feumaidh seo a bhith ’na URI absaloideach.' - secured_uri: '– feumaidh seo a bhith ’na URI HTTPS/SSL.' + fragment_present: "– chan fhaod bloigh a bhith ’na bhroinn." + invalid_uri: "– feumaidh seo a bhith ’na URI dligheach." + relative_uri: "– feumaidh seo a bhith ’na URI absaloideach." + secured_uri: "– feumaidh seo a bhith ’na URI HTTPS/SSL." doorkeeper: applications: buttons: @@ -59,7 +60,7 @@ gd: error: title: Thachair mearachd new: - prompt_html: "Bu mhiann le %{client_name} cead gus an cunntas agad inntrigeadh. Seo aplacaid threas-phàrtaidh. Mur eil earbsa agad ann, na ùghdarraich e." + prompt_html: Bu mhiann le %{client_name} cead gus an cunntas agad inntrigeadh. Seo aplacaid threas-phàrtaidh. Mur eil earbsa agad ann, na ùghdarraich e. review_permissions: Thoir sùil air na ceadan title: Tha feum air ùghdarrachadh show: diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index 1cd8ef3f9f90c5..c7f21d1ba8e412 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -1,3 +1,4 @@ +--- gl: activerecord: attributes: @@ -146,49 +147,49 @@ gl: application: title: Precisa autorización OAuth scopes: - "admin:read": ler todos os datos no servidor - "admin:read:accounts": ler información sensible de todas as contas - "admin:read:canonical_email_blocks": ler a información sensíbel de tódolos bloqueos de correos electrónicos canónicos - "admin:read:domain_allows": ler a información sensible de todos os dominios permitidos - "admin:read:domain_blocks": ler a información sensible de tódolos bloqueos de dominio - "admin:read:email_domain_blocks": ler a información sensible de tódolos dominios de correo electrónico - "admin:read:ip_blocks": ler a información sensible de tódolos bloqueos de IP - "admin:read:reports": ler información sensible de todos os informes e contas denunciadas - "admin:write": modificar todos os datos no servidor - "admin:write:accounts": executar accións de moderación nas contas - "admin:write:canonical_email_blocks": realizar accións de moderación en bloqueos de correo electrónico canónicos - "admin:write:domain_allows": realizar accións de moderación en dominios permitidos - "admin:write:domain_blocks": realizar accións de moderación en bloqueos de dominio - "admin:write:email_domain_blocks": realizar accións de moderación en bloqueos de dominio de correo electrónico - "admin:write:ip_blocks": realizar accións de moderación en bloqueos de IPs - "admin:write:reports": executar accións de moderación nas denuncias + admin:read: ler todos os datos no servidor + admin:read:accounts: ler información sensible de todas as contas + admin:read:canonical_email_blocks: ler a información sensíbel de tódolos bloqueos de correos electrónicos canónicos + admin:read:domain_allows: ler a información sensible de todos os dominios permitidos + admin:read:domain_blocks: ler a información sensible de tódolos bloqueos de dominio + admin:read:email_domain_blocks: ler a información sensible de tódolos dominios de correo electrónico + admin:read:ip_blocks: ler a información sensible de tódolos bloqueos de IP + admin:read:reports: ler información sensible de todos os informes e contas denunciadas + admin:write: modificar todos os datos no servidor + admin:write:accounts: executar accións de moderación nas contas + admin:write:canonical_email_blocks: realizar accións de moderación en bloqueos de correo electrónico canónicos + admin:write:domain_allows: realizar accións de moderación en dominios permitidos + admin:write:domain_blocks: realizar accións de moderación en bloqueos de dominio + admin:write:email_domain_blocks: realizar accións de moderación en bloqueos de dominio de correo electrónico + admin:write:ip_blocks: realizar accións de moderación en bloqueos de IPs + admin:write:reports: executar accións de moderación nas denuncias crypto: usar cifrado de extremo-a-extremo follow: modificar as relacións da conta push: recibir notificacións push read: ler todos os datos da tua conta - "read:accounts": ver información das contas - "read:blocks": ver a quen bloqueas - "read:bookmarks": ver os marcadores - "read:favourites": ver as favoritas - "read:filters": ver os filtros - "read:follows": ver a quen segues - "read:lists": ver as tuas listaxes - "read:mutes": ver a quen tes acalado - "read:notifications": ver as notificacións - "read:reports": ver as túas denuncias - "read:search": buscar no teu nome - "read:statuses": ver todas as publicacións + read:accounts: ver información das contas + read:blocks: ver a quen bloqueas + read:bookmarks: ver os marcadores + read:favourites: ver as favoritas + read:filters: ver os filtros + read:follows: ver a quen segues + read:lists: ver as tuas listaxes + read:mutes: ver a quen tes acalado + read:notifications: ver as notificacións + read:reports: ver as túas denuncias + read:search: buscar no teu nome + read:statuses: ver todas as publicacións write: modificar todos os datos da tua conta - "write:accounts": modificar o teu perfil - "write:blocks": bloquear contas e dominios - "write:bookmarks": marcar publicacións - "write:conversations": acalar e eliminar conversas - "write:favourites": marcar como favorita - "write:filters": crear filtros - "write:follows": seguir usuarias - "write:lists": crear listaxes - "write:media": subir ficheiros multimedia - "write:mutes": acalar usuarias e conversas - "write:notifications": eliminar as notificacións - "write:reports": denunciar usuarias - "write:statuses": publicar + write:accounts: modificar o teu perfil + write:blocks: bloquear contas e dominios + write:bookmarks: marcar publicacións + write:conversations: acalar e eliminar conversas + write:favourites: marcar como favorita + write:filters: crear filtros + write:follows: seguir usuarias + write:lists: crear listaxes + write:media: subir ficheiros multimedia + write:mutes: acalar usuarias e conversas + write:notifications: eliminar as notificacións + write:reports: denunciar usuarias + write:statuses: publicar diff --git a/config/locales/doorkeeper.he.yml b/config/locales/doorkeeper.he.yml index e5890b0e61bb49..6d6b5866eeaa97 100644 --- a/config/locales/doorkeeper.he.yml +++ b/config/locales/doorkeeper.he.yml @@ -1,3 +1,4 @@ +--- he: activerecord: attributes: @@ -146,49 +147,49 @@ he: application: title: נדרשת הרשאת OAuth scopes: - "admin:read": לקרוא את כל המידע על השרת - "admin:read:accounts": לקרוא מידע רגיש בכל החשבונות - "admin:read:canonical_email_blocks": קריאת התכנים הרגישים של רשומות חסימות הדואל - "admin:read:domain_allows": קריאת התכנים הרגישים של שמות המתחמים (דומיינים) הבלתי חסומים - "admin:read:domain_blocks": קריאת התכנים הרגישים של שמות המתחמים (דומיינים) החסומים - "admin:read:email_domain_blocks": קריאת התכנים הרגישים של שמות המתחמים (דומיינים) החסומים לדואל - "admin:read:ip_blocks": קריאת התכנים הרגישים של חסימות כתובות IP - "admin:read:reports": לקרוא מידע רגיש בכל הדוחות וכל החשבונות המדווחים - "admin:write": לשנות את כל המידע על השרת - "admin:write:accounts": ביצוע פעולות הנהלה על חשבונות - "admin:write:canonical_email_blocks": ביצוע פעולות מנחה על חסימות דואל - "admin:write:domain_allows": ביצוע פעולות מנחה על שמות מתחם מורשים - "admin:write:domain_blocks": ביצוע פעולות מנחה על שמות מתחם חסומים - "admin:write:email_domain_blocks": ביצוע פעולות מנחה על חסימות שמות מתחם דואל - "admin:write:ip_blocks": ביצוע פעולות מנחה על חסימות כתובות IP - "admin:write:reports": ביצוע פעולות הנהלה על חשבונות + admin:read: לקרוא את כל המידע על השרת + admin:read:accounts: לקרוא מידע רגיש בכל החשבונות + admin:read:canonical_email_blocks: קריאת התכנים הרגישים של רשומות חסימות הדואל + admin:read:domain_allows: קריאת התכנים הרגישים של שמות המתחמים (דומיינים) הבלתי חסומים + admin:read:domain_blocks: קריאת התכנים הרגישים של שמות המתחמים (דומיינים) החסומים + admin:read:email_domain_blocks: קריאת התכנים הרגישים של שמות המתחמים (דומיינים) החסומים לדואל + admin:read:ip_blocks: קריאת התכנים הרגישים של חסימות כתובות IP + admin:read:reports: לקרוא מידע רגיש בכל הדוחות וכל החשבונות המדווחים + admin:write: לשנות את כל המידע על השרת + admin:write:accounts: ביצוע פעולות הנהלה על חשבונות + admin:write:canonical_email_blocks: ביצוע פעולות מנחה על חסימות דואל + admin:write:domain_allows: ביצוע פעולות מנחה על שמות מתחם מורשים + admin:write:domain_blocks: ביצוע פעולות מנחה על שמות מתחם חסומים + admin:write:email_domain_blocks: ביצוע פעולות מנחה על חסימות שמות מתחם דואל + admin:write:ip_blocks: ביצוע פעולות מנחה על חסימות כתובות IP + admin:write:reports: ביצוע פעולות הנהלה על חשבונות crypto: שימוש בהצפנה מקצה לקצה 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: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:conversations": השתקת ומחיקת שיחות - "write:favourites": הודעות מחובבות - "write:filters": יצירת מסננים - "write:follows": עקיבה אחר אנשים - "write:lists": יצירת רשימות - "write:media": העלאת קבצי מדיה - "write:mutes": השתקת אנשים ושיחות - "write:notifications": ניקוי התראותיך - "write:reports": דיווח על אנשים אחרים - "write:statuses": פרסום הודעות + write:accounts: שינוי הפרופיל שלך + write:blocks: חסימת חשבונות ודומיינים + write:bookmarks: סימון הודעות + write:conversations: השתקת ומחיקת שיחות + write:favourites: הודעות מחובבות + write:filters: יצירת מסננים + write:follows: עקיבה אחר אנשים + write:lists: יצירת רשימות + write:media: העלאת קבצי מדיה + write:mutes: השתקת אנשים ושיחות + write:notifications: ניקוי התראותיך + write:reports: דיווח על אנשים אחרים + write:statuses: פרסום הודעות diff --git a/config/locales/doorkeeper.hi.yml b/config/locales/doorkeeper.hi.yml index fdbf021437eb6c..d7a933d1480714 100644 --- a/config/locales/doorkeeper.hi.yml +++ b/config/locales/doorkeeper.hi.yml @@ -1,3 +1,4 @@ +--- hi: activerecord: attributes: diff --git a/config/locales/doorkeeper.hr.yml b/config/locales/doorkeeper.hr.yml index 5cb311b1990958..cb48de313549e1 100644 --- a/config/locales/doorkeeper.hr.yml +++ b/config/locales/doorkeeper.hr.yml @@ -1,3 +1,4 @@ +--- hr: activerecord: attributes: diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml index 80da95caca6162..4559dcbd3133b9 100644 --- a/config/locales/doorkeeper.hu.yml +++ b/config/locales/doorkeeper.hu.yml @@ -1,3 +1,4 @@ +--- hu: activerecord: attributes: @@ -30,7 +31,7 @@ hu: form: error: Hoppá! Ellenőrizd az űrlapot az esetleges hibák miatt help: - native_redirect_uri: '%{native_redirect_uri} használata a helyi tesztekhez' + native_redirect_uri: "%{native_redirect_uri} használata a helyi tesztekhez" redirect_uri: Egy sor URI-nként scopes: A hatóköröket szóközzel válaszd el. Hagyd üresen az alapértelmezett hatókörök használatához. index: @@ -146,22 +147,22 @@ hu: application: title: OAuth engedély szükséges scopes: - "admin:read": a kiszolgáló összes adatának olvasása - "admin:read:accounts": minden kényes fiókadat olvasása - "admin:read:canonical_email_blocks": kanonikus emailblokkok érzékeny információinak olvasása - "admin:read:domain_allows": minden domainengedély érzékeny információinak olvasása - "admin:read:domain_blocks": minden domaintiltás érzékeny információinak olvasása - "admin:read:email_domain_blocks": minden email-domainblokk érzékeny információinak olvasása - "admin:read:ip_blocks": minden IP-blokk érzékeny információinak olvasása - "admin:read:reports": minden bejelentés és bejelentett fiók kényes adatainak olvasása - "admin:write": a kiszolgáló összes adatának módosítása - "admin:write:accounts": moderációs műveletek végzése fiókokon - "admin:write:canonical_email_blocks": moderáció végrehajtása kanonikus emailblokkokon - "admin:write:domain_allows": moderáció végrehajtása domainengedélyeken - "admin:write:domain_blocks": moderáció végrehajtása domaintiltásokon - "admin:write:email_domain_blocks": moderáció végrehajtása email-domainblokkokon - "admin:write:ip_blocks": moderáció végrehajtása IP-blokkokon - "admin:write:reports": moderációs műveletek végzése bejelentéseken + admin:read: a kiszolgáló összes adatának olvasása + admin:read:accounts: minden kényes fiókadat olvasása + admin:read:canonical_email_blocks: kanonikus emailblokkok érzékeny információinak olvasása + admin:read:domain_allows: minden domainengedély érzékeny információinak olvasása + admin:read:domain_blocks: minden domaintiltás érzékeny információinak olvasása + admin:read:email_domain_blocks: minden email-domainblokk érzékeny információinak olvasása + admin:read:ip_blocks: minden IP-blokk érzékeny információinak olvasása + admin:read:reports: minden bejelentés és bejelentett fiók kényes adatainak olvasása + admin:write: a kiszolgáló összes adatának módosítása + admin:write:accounts: moderációs műveletek végzése fiókokon + admin:write:canonical_email_blocks: moderáció végrehajtása kanonikus emailblokkokon + admin:write:domain_allows: moderáció végrehajtása domainengedélyeken + admin:write:domain_blocks: moderáció végrehajtása domaintiltásokon + admin:write:email_domain_blocks: moderáció végrehajtása email-domainblokkokon + admin:write:ip_blocks: moderáció végrehajtása IP-blokkokon + admin:write:reports: moderációs műveletek végzése bejelentéseken crypto: végpontok közti titkosítás használata follow: fiókkapcsolatok módosítása push: push értesítések fogadása diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml index efb835d87547b7..39ffc9898c730f 100644 --- a/config/locales/doorkeeper.hy.yml +++ b/config/locales/doorkeeper.hy.yml @@ -1,3 +1,4 @@ +--- hy: activerecord: attributes: @@ -5,7 +6,7 @@ hy: name: Յաւելուածի անուն redirect_uri: վերաղյել URI scopes: Դաշտեր - website: Յաւելուածի վէբկայք + website: Յաւելուածի վէբկայք errors: models: doorkeeper/application: @@ -47,11 +48,11 @@ hy: title: Նոր յաւելուած show: actions: Գործողութիւններ - application_id: Կլիենտի բանալի + application_id: Կլիենտի բանալի callback_urls: URL֊ների ետկանչ scopes: Դաշտեր secret: Կլիենտի գաղտնիք - title: 'Յաւելուած․ %{name}' + title: Յաւելուած․ %{name} authorizations: buttons: authorize: Լիազօրել @@ -80,8 +81,8 @@ hy: invalid_grant: Տրամադրուած նոյնականացման թոյլտուութիւնն անվաւեր է, սպառուած, չեղարկուած, չի համապատասխանում վերայղուած URI֊ի նոյնականացման յայտին, կամ յղուել է այլ կլիենտի։ invalid_redirect_uri: Վերայղուած uri֊ի անվաւեր է։ invalid_request: - missing_param: 'Բացակայում է պահանջուած տուեալը՝ %{value}։' - request_not_authorized: Հարցումը պէտք է լինի նոյնականացուած։ Նոյնականացման համար պահանջուող տուեալը բացակայում է կամ սխալ է։ + missing_param: Բացակայում է պահանջուած տուեալը՝ %{value}։ + request_not_authorized: Հարցումը պէտք է լինի նոյնականացուած։ Նոյնականացման համար պահանջուող տուեալը բացակայում է կամ սխալ է։ unknown: Յայտից բացակայում է պահանջուող պարամետրը, ներառում է չաջակցուող արժէք կամ այլ անսարքութիւն։ invalid_resource_owner: Տրամադրուած ռեսուրսի տիրոջ տուեալները անվաւեր են կամ ռեսուրսի տէրը չի գտնուել invalid_scope: Յայտի դաշտն անվաւեր, անյայտ կամ անսարք։ @@ -132,12 +133,12 @@ hy: application: title: Անհրաժեշտ է OAuth նոյնականացում scopes: - "admin:read": կարդալ սպասարկչի ողջ տուեալները - "admin:read:accounts": կարդալ բոլոր հաշիւների զգայուն ինֆորմացիան - "admin:read:reports": կարդալ բոլոր բողոքների եւ յաղորդուած հաշիւների զգայուն ինֆորմացիան - "admin:write": փոփոխել սպասարկչի ողջ տուեալները - "admin:write:accounts": իրականացնել մոդերատորական գործողութիւններ հաշիւների վրայ - "admin:write:reports": իրականացնել մոդերատորական գործողութիւններ բողոքների վրայ + admin:read: կարդալ սպասարկչի ողջ տուեալները + admin:read:accounts: կարդալ բոլոր հաշիւների զգայուն ինֆորմացիան + admin:read:reports: կարդալ բոլոր բողոքների եւ յաղորդուած հաշիւների զգայուն ինֆորմացիան + admin:write: փոփոխել սպասարկչի ողջ տուեալները + admin:write:accounts: իրականացնել մոդերատորական գործողութիւններ հաշիւների վրայ + admin:write:reports: իրականացնել մոդերատորական գործողութիւններ բողոքների վրայ follow: փոփոխել հաշուի յարաբերութիւնները push: ստանալ ծանուցումները read: կարդալ քո հաշուի բոլոր տուեալները diff --git a/config/locales/doorkeeper.id.yml b/config/locales/doorkeeper.id.yml index 73e25c7c52c788..3f9a409c21c087 100644 --- a/config/locales/doorkeeper.id.yml +++ b/config/locales/doorkeeper.id.yml @@ -1,3 +1,4 @@ +--- id: activerecord: attributes: @@ -143,19 +144,19 @@ id: application: title: Otorisasi OAuth diperlukan scopes: - "admin:read": baca semua data di server - "admin:read:accounts": baca informasi sensitif semua akun - "admin:read:canonical_email_blocks": baca informasi sensitif dari semua domain surat elektronik kanonikal yang diblokir - "admin:read:domain_allows": baca informasi sensitif dari semua domain yang diperbolehkan - "admin:read:domain_blocks": baca informasi sensitif dari semua domain yang diblokir - "admin:read:email_domain_blocks": baca informasi sensitif dari semua domain surat elektronik yang diblokir - "admin:read:ip_blocks": baca informasi sensitif dari semua alamat IP yang diblokir - "admin:read:reports": baca informasi sensitif semua laporan dan akun terlapor - "admin:write": ubah semua data di server - "admin:write:accounts": lakukan aksi moderasi akun - "admin:write:canonical_email_blocks": melakukan aksi moderasi pada email kanonikal yang diblokir - "admin:write:ip_blocks": lakukan moderasi tindakan pada blokir IP - "admin:write:reports": lakukan aksi moderasi laporan + admin:read: baca semua data di server + admin:read:accounts: baca informasi sensitif semua akun + admin:read:canonical_email_blocks: baca informasi sensitif dari semua domain surat elektronik kanonikal yang diblokir + admin:read:domain_allows: baca informasi sensitif dari semua domain yang diperbolehkan + admin:read:domain_blocks: baca informasi sensitif dari semua domain yang diblokir + admin:read:email_domain_blocks: baca informasi sensitif dari semua domain surat elektronik yang diblokir + admin:read:ip_blocks: baca informasi sensitif dari semua alamat IP yang diblokir + admin:read:reports: baca informasi sensitif semua laporan dan akun terlapor + admin:write: ubah semua data di server + admin:write:accounts: lakukan aksi moderasi akun + admin:write:canonical_email_blocks: melakukan aksi moderasi pada email kanonikal yang diblokir + admin:write:ip_blocks: lakukan moderasi tindakan pada blokir IP + admin:write:reports: lakukan aksi moderasi laporan crypto: menggunakan enkripsi end-to-end follow: mengikuti, blokir, menghapus blokir, dan berhenti mengikuti akun push: terima notifikasi dorong diff --git a/config/locales/doorkeeper.io.yml b/config/locales/doorkeeper.io.yml index 07e3ace03b6729..e2418e4c777aeb 100644 --- a/config/locales/doorkeeper.io.yml +++ b/config/locales/doorkeeper.io.yml @@ -1,3 +1,4 @@ +--- io: activerecord: attributes: @@ -144,12 +145,12 @@ io: application: title: Yurizo di OAuth bezonesas scopes: - "admin:read": lektez omna informi di la servilo - "admin:read:accounts": lektez privata informo di omna konti - "admin:read:reports": lektez privata informo di omna raporti e raportizita konti - "admin:write": modifikez omna informi di la servilo - "admin:write:accounts": jerez konti - "admin:write:reports": jerez raporti + admin:read: lektez omna informi di la servilo + admin:read:accounts: lektez privata informo di omna konti + admin:read:reports: lektez privata informo di omna raporti e raportizita konti + admin:write: modifikez omna informi di la servilo + admin:write:accounts: jerez konti + admin:write:reports: jerez raporti crypto: uzas intersequanta chifro follow: follow, block, unblock and unfollow accounts push: ganez vua pulsavizi diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml index 2b8b98e7f7c2fc..c1e2d4cfc36111 100644 --- a/config/locales/doorkeeper.is.yml +++ b/config/locales/doorkeeper.is.yml @@ -1,3 +1,4 @@ +--- is: activerecord: attributes: @@ -146,49 +147,49 @@ is: application: title: Krafist er OAuth auðkenningar við að scopes: - "admin:read": lesa öll gögn á netþjóninum - "admin:read:accounts": lesa viðkvæmar upplýsingar á öllum notendaaðgöngum - "admin:read:canonical_email_blocks": lesa viðkvæmar upplýsingar um allar stafréttar útilokanir tölvupósts - "admin:read:domain_allows": lesa viðkvæmar upplýsingar um öll leyfð lén - "admin:read:domain_blocks": lesa viðkvæmar upplýsingar um öll útilokuð lén - "admin:read:email_domain_blocks": lesa viðkvæmar upplýsingar um öll útilokuð tölvupóstlén - "admin:read:ip_blocks": lesa viðkvæmar upplýsingar um allar útilokanir IP-vistfanga - "admin:read:reports": lesa viðkvæmar upplýsingar í öllum skýrslum og kærðum notendaaðgöngum - "admin:write": breyta öllum gögnum á netþjóninum - "admin:write:accounts": framkvæma umsjónaraðgerðir á notendaaðganga - "admin:write:canonical_email_blocks": framkvæma umsjónaraðgerðir á stafréttar útilokanir tölvupósts - "admin:write:domain_allows": framkvæma umsjónaraðgerðir á leyfð lén - "admin:write:domain_blocks": framkvæma umsjónaraðgerðir á útilokuð lén - "admin:write:email_domain_blocks": framkvæma umsjónaraðgerðir á útilokuð tölvupóstlén - "admin:write:ip_blocks": framkvæma umsjónaraðgerðir á útilokuð IP-vistföng - "admin:write:reports": framkvæma umsjónaraðgerðir á kærur + admin:read: lesa öll gögn á netþjóninum + admin:read:accounts: lesa viðkvæmar upplýsingar á öllum notendaaðgöngum + admin:read:canonical_email_blocks: lesa viðkvæmar upplýsingar um allar stafréttar útilokanir tölvupósts + admin:read:domain_allows: lesa viðkvæmar upplýsingar um öll leyfð lén + admin:read:domain_blocks: lesa viðkvæmar upplýsingar um öll útilokuð lén + admin:read:email_domain_blocks: lesa viðkvæmar upplýsingar um öll útilokuð tölvupóstlén + admin:read:ip_blocks: lesa viðkvæmar upplýsingar um allar útilokanir IP-vistfanga + admin:read:reports: lesa viðkvæmar upplýsingar í öllum skýrslum og kærðum notendaaðgöngum + admin:write: breyta öllum gögnum á netþjóninum + admin:write:accounts: framkvæma umsjónaraðgerðir á notendaaðganga + admin:write:canonical_email_blocks: framkvæma umsjónaraðgerðir á stafréttar útilokanir tölvupósts + admin:write:domain_allows: framkvæma umsjónaraðgerðir á leyfð lén + admin:write:domain_blocks: framkvæma umsjónaraðgerðir á útilokuð lén + admin:write:email_domain_blocks: framkvæma umsjónaraðgerðir á útilokuð tölvupóstlén + admin:write:ip_blocks: framkvæma umsjónaraðgerðir á útilokuð IP-vistföng + admin:write:reports: framkvæma umsjónaraðgerðir á kærur crypto: nota enda-í-enda dulritun follow: breyta venslum aðgangs push: taka á móti ýti-tilkynningum til þín read: lesa öll gögn á notandaaðgangnum þínum - "read:accounts": sjá upplýsingar í notendaaðgöngum - "read:blocks": skoða útilokanirnar þínar - "read:bookmarks": skoða bókamerki - "read:favourites": skoða eftirlætin þín - "read:filters": skoða síurnar þínar - "read:follows": sjá hverjum þú fylgist með - "read:lists": skoða listana þína - "read:mutes": skoða hverja þú þaggar - "read:notifications": sjá tilkynningarnar þínar - "read:reports": skoða skýrslurnar þína - "read:search": leita fyrir þína hönd - "read:statuses": sjá allar færslur + read:accounts: sjá upplýsingar í notendaaðgöngum + read:blocks: skoða útilokanirnar þínar + read:bookmarks: skoða bókamerki + read:favourites: skoða eftirlætin þín + read:filters: skoða síurnar þínar + read:follows: sjá hverjum þú fylgist með + read:lists: skoða listana þína + read:mutes: skoða hverja þú þaggar + read:notifications: sjá tilkynningarnar þínar + read:reports: skoða skýrslurnar þína + read:search: leita fyrir þína hönd + read:statuses: sjá allar færslur write: breyta öllum gögnum á notandaaðgangnum þínum - "write:accounts": breyta notandasniðinu þínu - "write:blocks": útiloka notandaaðganga og lén - "write:bookmarks": bókamerkja færslur - "write:conversations": þagga og eyða samtölum - "write:favourites": setja færslur í eftirlæti - "write:filters": útbúa síur - "write:follows": fylgjast með fólki - "write:lists": búa til lista - "write:media": senda inn myndefnisskrár - "write:mutes": þagga niður í fólki og samtölum - "write:notifications": hreinsa tilkynningarnar þínar - "write:reports": kæra annað fólk - "write:statuses": gefa út færslur + write:accounts: breyta notandasniðinu þínu + write:blocks: útiloka notandaaðganga og lén + write:bookmarks: bókamerkja færslur + write:conversations: þagga og eyða samtölum + write:favourites: setja færslur í eftirlæti + write:filters: útbúa síur + write:follows: fylgjast með fólki + write:lists: búa til lista + write:media: senda inn myndefnisskrár + write:mutes: þagga niður í fólki og samtölum + write:notifications: hreinsa tilkynningarnar þínar + write:reports: kæra annað fólk + write:statuses: gefa út færslur diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index 51deb6bd6cd449..3fd998fc4a61b6 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -1,3 +1,4 @@ +--- it: activerecord: attributes: @@ -146,22 +147,22 @@ it: application: title: Autorizzazione OAuth necessaria scopes: - "admin:read": leggere tutti i dati sul server - "admin:read:accounts": leggere le informazioni sensibili su tutti i profili - "admin:read:canonical_email_blocks": leggere le informazioni sensibili di tutti i blocchi canonici di posta elettronica - "admin:read:domain_allows": leggere le informazioni sensibili di tutti i domini consentiti - "admin:read:domain_blocks": leggere le informazioni sensibili di tutti i blocchi di dominio - "admin:read:email_domain_blocks": leggi le informazioni sensibili di tutti i blocchi di dominio email - "admin:read:ip_blocks": leggere le informazioni sensibili di tutti i blocchi IP - "admin:read:reports": leggere le informazioni sensibili di tutte le segnalazioni e tutti i profili segnalati - "admin:write": modificare tutti i dati sul server - "admin:write:accounts": eseguire azioni di moderazione sui profili - "admin:write:canonical_email_blocks": eseguire azioni di moderazione sui blocchi canonici di posta elettronica - "admin:write:domain_allows": consente di eseguire azioni di moderazione sul dominio - "admin:write:domain_blocks": eseguire azioni di moderazione sui blocchi di dominio - "admin:write:email_domain_blocks": eseguire azioni di moderazione sui blocchi di dominio email - "admin:write:ip_blocks": eseguire azioni di moderazione sui blocchi IP - "admin:write:reports": eseguire azioni di moderazione sulle segnalazioni + admin:read: leggere tutti i dati sul server + admin:read:accounts: leggere le informazioni sensibili su tutti i profili + admin:read:canonical_email_blocks: leggere le informazioni sensibili di tutti i blocchi canonici di posta elettronica + admin:read:domain_allows: leggere le informazioni sensibili di tutti i domini consentiti + admin:read:domain_blocks: leggere le informazioni sensibili di tutti i blocchi di dominio + admin:read:email_domain_blocks: leggi le informazioni sensibili di tutti i blocchi di dominio email + admin:read:ip_blocks: leggere le informazioni sensibili di tutti i blocchi IP + admin:read:reports: leggere le informazioni sensibili di tutte le segnalazioni e tutti i profili segnalati + admin:write: modificare tutti i dati sul server + admin:write:accounts: eseguire azioni di moderazione sui profili + admin:write:canonical_email_blocks: eseguire azioni di moderazione sui blocchi canonici di posta elettronica + admin:write:domain_allows: consente di eseguire azioni di moderazione sul dominio + admin:write:domain_blocks: eseguire azioni di moderazione sui blocchi di dominio + admin:write:email_domain_blocks: eseguire azioni di moderazione sui blocchi di dominio email + admin:write:ip_blocks: eseguire azioni di moderazione sui blocchi IP + admin:write:reports: eseguire azioni di moderazione sulle segnalazioni crypto: utilizzare la crittografia end-to-end follow: modifica le relazioni tra profili push: ricevere le tue notifiche push diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 11ee1a1b3ce8db..62f2a3eb0ae415 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -1,3 +1,4 @@ +--- ja: activerecord: attributes: @@ -70,7 +71,7 @@ ja: confirmations: revoke: 本当に取り消しますか? index: - authorized_at: '%{date}に承認されました' + authorized_at: "%{date}に承認されました" description_html: これらは、APIを使用してアカウントにアクセスできるアプリケーションです。ここに見覚えのないアプリケーションがある場合、またはアプリケーションの動作がおかしい場合、そのアクセスを取り消すことができます。 last_used_at: 最終使用日 %{date} never_used: 使用されていない @@ -146,38 +147,38 @@ ja: application: title: OAuth認証 scopes: - "admin:read": サーバーのすべてのデータの読み取り - "admin:read:accounts": すべてのアカウントの機密情報の読み取り - "admin:read:canonical_email_blocks": すべてのブロックしたメールアドレスの読み取り - "admin:read:domain_allows": すべての許可したドメインの読み取り - "admin:read:domain_blocks": すべてのブロックしたドメインの読み取り - "admin:read:email_domain_blocks": すべてのブロックしたメールドメインの読み取り - "admin:read:ip_blocks": すべてのブロックしたIPアドレスの読み取り - "admin:read:reports": すべての通報と通報されたアカウントの機密情報の読み取り - "admin:write": サーバーのすべてのデータの変更 - "admin:write:accounts": アカウントに対するアクションの実行 - "admin:write:canonical_email_blocks": メールアドレスのブロックに関するアクションの実行 - "admin:write:domain_allows": ドメイン許可に関するアクションの実行 - "admin:write:domain_blocks": ドメインのブロックに関するアクションの実行 - "admin:write:email_domain_blocks": メールドメインのブロックに関するアクションの実行 - "admin:write:ip_blocks": IPアドレスのブロックに関するアクションの実行 - "admin:write:reports": 通報に対するアクションの実行 + admin:read: サーバーのすべてのデータの読み取り + admin:read:accounts: すべてのアカウントの機密情報の読み取り + admin:read:canonical_email_blocks: すべてのブロックしたメールアドレスの読み取り + admin:read:domain_allows: すべての許可したドメインの読み取り + admin:read:domain_blocks: すべてのブロックしたドメインの読み取り + admin:read:email_domain_blocks: すべてのブロックしたメールドメインの読み取り + admin:read:ip_blocks: すべてのブロックしたIPアドレスの読み取り + admin:read:reports: すべての通報と通報されたアカウントの機密情報の読み取り + admin:write: サーバーのすべてのデータの変更 + admin:write:accounts: アカウントに対するアクションの実行 + admin:write:canonical_email_blocks: メールアドレスのブロックに関するアクションの実行 + admin:write:domain_allows: ドメイン許可に関するアクションの実行 + admin:write:domain_blocks: ドメインのブロックに関するアクションの実行 + admin:write:email_domain_blocks: メールドメインのブロックに関するアクションの実行 + admin:write:ip_blocks: IPアドレスのブロックに関するアクションの実行 + admin:write:reports: 通報に対するアクションの実行 crypto: エンドツーエンド暗号化の使用 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: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: ユーザーのブロックやドメインの非表示 diff --git a/config/locales/doorkeeper.ka.yml b/config/locales/doorkeeper.ka.yml index efff81b7421063..4c692cf517081c 100644 --- a/config/locales/doorkeeper.ka.yml +++ b/config/locales/doorkeeper.ka.yml @@ -1,3 +1,4 @@ +--- ka: activerecord: attributes: diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml index 1410e4a34f7120..fe1a8d9c50da34 100644 --- a/config/locales/doorkeeper.kab.yml +++ b/config/locales/doorkeeper.kab.yml @@ -1,3 +1,4 @@ +--- kab: activerecord: attributes: @@ -97,8 +98,8 @@ kab: application: title: Tlaq tsiregt n OAuth scopes: - "admin:read": γeṛ akk isefka γef uqeddac - "admin:write": ẓreg akk isefka γef uqeddac + admin:read: γeṛ akk isefka γef uqeddac + admin:write: ẓreg akk isefka γef uqeddac follow: beddel assaγen n umiḍan push: ṭṭef-d tilγa-ik yettwademren read: γeṛ akk isefka n umiḍan-ik @@ -114,11 +115,11 @@ kab: read:search: anadi deg umkan-ik·im read:statuses: ẓer meṛṛa tisuffaγ write: beddel meṛṛa isefka n umiḍan-ik - "write:accounts": ẓreg amaγnu-ik - "write:blocks": seḥbes imiḍanen d tγula - "write:bookmarks": ad yernu tisuffγin γer ticraḍ - "write:filters": rnu-d imsizedgen - "write:follows": ḍfeṛ imdanen - "write:lists": ad yesnulfu tibdarin - "write:media": ad yessali ifayluyen n teγwalt - "write:notifications": sfeḍ tilɣa-k·m + write:accounts: ẓreg amaγnu-ik + write:blocks: seḥbes imiḍanen d tγula + write:bookmarks: ad yernu tisuffγin γer ticraḍ + write:filters: rnu-d imsizedgen + write:follows: ḍfeṛ imdanen + write:lists: ad yesnulfu tibdarin + write:media: ad yessali ifayluyen n teγwalt + write:notifications: sfeḍ tilɣa-k·m diff --git a/config/locales/doorkeeper.kk.yml b/config/locales/doorkeeper.kk.yml index b667022b91865b..a9668180c07f31 100644 --- a/config/locales/doorkeeper.kk.yml +++ b/config/locales/doorkeeper.kk.yml @@ -1,3 +1,4 @@ +--- kk: activerecord: attributes: @@ -107,12 +108,12 @@ kk: application: title: OAuth authorizatiоn required scopes: - "admin:read": сервердегі барлық деректерді оқыңыз - "admin:read:accounts": барлық аккаунттардың құпия ақпаратын оқыңыз - "admin:read:reports": барлық есептер мен есептік жазбалардың құпия ақпаратын оқыңыз - "admin:write": сервердегі барлық деректерді өзгертіңіз - "admin:write:accounts": аккаунттардағы модерациялық әрекеттерді орындау - "admin:write:reports": есептер бойынша модерация әрекеттерін орындау + admin:read: сервердегі барлық деректерді оқыңыз + admin:read:accounts: барлық аккаунттардың құпия ақпаратын оқыңыз + admin:read:reports: барлық есептер мен есептік жазбалардың құпия ақпаратын оқыңыз + admin:write: сервердегі барлық деректерді өзгертіңіз + admin:write:accounts: аккаунттардағы модерациялық әрекеттерді орындау + admin:write:reports: есептер бойынша модерация әрекеттерін орындау follow: modify accоunt relationships push: receive your push nоtifications read: read all your accоunt's data diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml index fbf99849c95ef1..8e6e4b8aaaf5ee 100644 --- a/config/locales/doorkeeper.ko.yml +++ b/config/locales/doorkeeper.ko.yml @@ -1,3 +1,4 @@ +--- ko: activerecord: attributes: @@ -30,7 +31,7 @@ ko: form: error: 이런! 오류를 확인하세요 help: - native_redirect_uri: '%{native_redirect_uri}에서 로컬 테스트를 할 수 있습니다.' + native_redirect_uri: "%{native_redirect_uri}에서 로컬 테스트를 할 수 있습니다." redirect_uri: 한 줄에 하나의 URI를 작성하세요 scopes: 스페이스로 범위를 구분하세요. 빈 칸으로 놔두면 기본 범위를 사용합니다. index: @@ -70,9 +71,9 @@ ko: confirmations: revoke: 확실합니까? index: - authorized_at: '%{date}에 승인됨' + authorized_at: "%{date}에 승인됨" description_html: API를 통해 이 계정에 접근 가능한 애플리케이션의 목록입니다. 알 수 없는 애플리케이션이나 잘못된 행위를 하는 애플리케이션이 있다면 권한을 취소할 수 있습니다. - last_used_at: '%{date}에 마지막으로 사용됨' + last_used_at: "%{date}에 마지막으로 사용됨" never_used: 사용되지 않음 scopes: 권한 superapp: 내부 @@ -146,38 +147,38 @@ ko: application: title: OAuth 인증이 필요합니다 scopes: - "admin:read": 서버의 모든 데이터 읽기 - "admin:read:accounts": 모든 계정의 민감한 정보 읽기 - "admin:read:canonical_email_blocks": 정규화된 이메일 차단 전부에 대한 민감한 정보를 읽습니다 - "admin:read:domain_allows": 도메인 허용에 대한 민감한 정보를 읽습니다 - "admin:read:domain_blocks": 도메인 차단에 대한 민감한 정보를 읽습니다 - "admin:read:email_domain_blocks": 이메일 도메인 차단에 대한 민감한 정보를 읽습니다 - "admin:read:ip_blocks": IP 차단에 대한 민감한 정보를 읽습니다 - "admin:read:reports": 신고와 신고 된 계정의 민감한 정보 읽기 - "admin:write": 서버의 모든 데이터 수정 - "admin:write:accounts": 계정에 모더레이션 조치 취하기 - "admin:write:canonical_email_blocks": 정규화된 이메일 차단에 모더레이션 조치 취하기 - "admin:write:domain_allows": 도메인 허용에 모더레이션 조치 취하기 - "admin:write:domain_blocks": 도메인 차단에 모더레이션 조치 취하기 - "admin:write:email_domain_blocks": 이메일 도메인 차단에 모더레이션 조치 취하기 - "admin:write:ip_blocks": IP 차단에 모더레이션 조치 취하기 - "admin:write:reports": 신고에 모더레이션 조치 취하기 + admin:read: 서버의 모든 데이터 읽기 + admin:read:accounts: 모든 계정의 민감한 정보 읽기 + admin:read:canonical_email_blocks: 정규화된 이메일 차단 전부에 대한 민감한 정보를 읽습니다 + admin:read:domain_allows: 도메인 허용에 대한 민감한 정보를 읽습니다 + admin:read:domain_blocks: 도메인 차단에 대한 민감한 정보를 읽습니다 + admin:read:email_domain_blocks: 이메일 도메인 차단에 대한 민감한 정보를 읽습니다 + admin:read:ip_blocks: IP 차단에 대한 민감한 정보를 읽습니다 + admin:read:reports: 신고와 신고 된 계정의 민감한 정보 읽기 + admin:write: 서버의 모든 데이터 수정 + admin:write:accounts: 계정에 모더레이션 조치 취하기 + admin:write:canonical_email_blocks: 정규화된 이메일 차단에 모더레이션 조치 취하기 + admin:write:domain_allows: 도메인 허용에 모더레이션 조치 취하기 + admin:write:domain_blocks: 도메인 차단에 모더레이션 조치 취하기 + admin:write:email_domain_blocks: 이메일 도메인 차단에 모더레이션 조치 취하기 + admin:write:ip_blocks: IP 차단에 모더레이션 조치 취하기 + admin:write:reports: 신고에 모더레이션 조치 취하기 crypto: 종단간 암호화 사용 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: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: 계정 및 도메인 차단 diff --git a/config/locales/doorkeeper.ku.yml b/config/locales/doorkeeper.ku.yml index f1ade1b0ac2234..e3438eb5de0c5b 100644 --- a/config/locales/doorkeeper.ku.yml +++ b/config/locales/doorkeeper.ku.yml @@ -1,3 +1,4 @@ +--- ku: activerecord: attributes: @@ -145,22 +146,22 @@ ku: application: title: Mafê dayînê OAuth pêwist e scopes: - "admin:read": hemû daneyên li ser rajekar bixwîne - "admin:read:accounts": zanyariyên hestiyar yên hemû ajimêran li ser rajekar bixwîne - "admin:read:canonical_email_blocks": zaniyarên hestyar ên hemû astengkerên e-nameya bixwîne - "admin:read:domain_allows": zaniyarên hestyar ên hemû mafdayînên navpar bixwîne - "admin:read:domain_blocks": zaniyarên hestyar ên hemû astengkirinên navpar bixwîne - "admin:read:email_domain_blocks": zaniyarên hestyar ên hemû astengkirinên navpar ên e-nameyê bixwîne - "admin:read:ip_blocks": zaniyarên hestyar ên hemû astengkirinên IP bixwîne - "admin:read:reports": zanyariyên hestiyar yên hemû ragihandinan û ajimêrên ragihandî li ser rajekar bixwîne - "admin:write": hemû daneyên li ser rajekar biguherîne - "admin:write:accounts": di ajimêrê de çalakiyên li hev kirî pêk bîne - "admin:write:canonical_email_blocks": li ser astengkirinên e-nameyê çalakiyên çavdêriyê pêk bîne - "admin:write:domain_allows": li ser mafdayînên navpar çalakiyên çavdêriyê pêk bîne - "admin:write:domain_blocks": li ser astengkirinên navpar çalakiyên çavdêriyê pêk bîne - "admin:write:email_domain_blocks": li ser astengkirinên e-nameya navpar çalakiyên çavdêriyê pêk bîne - "admin:write:ip_blocks": li ser astengkirinên IP çalakiyên çavdêriyê pêk bîne - "admin:write:reports": di ragihandinê de çalakiyên li hev kirî pêk bîne + admin:read: hemû daneyên li ser rajekar bixwîne + admin:read:accounts: zanyariyên hestiyar yên hemû ajimêran li ser rajekar bixwîne + admin:read:canonical_email_blocks: zaniyarên hestyar ên hemû astengkerên e-nameya bixwîne + admin:read:domain_allows: zaniyarên hestyar ên hemû mafdayînên navpar bixwîne + admin:read:domain_blocks: zaniyarên hestyar ên hemû astengkirinên navpar bixwîne + admin:read:email_domain_blocks: zaniyarên hestyar ên hemû astengkirinên navpar ên e-nameyê bixwîne + admin:read:ip_blocks: zaniyarên hestyar ên hemû astengkirinên IP bixwîne + admin:read:reports: zanyariyên hestiyar yên hemû ragihandinan û ajimêrên ragihandî li ser rajekar bixwîne + admin:write: hemû daneyên li ser rajekar biguherîne + admin:write:accounts: di ajimêrê de çalakiyên li hev kirî pêk bîne + admin:write:canonical_email_blocks: li ser astengkirinên e-nameyê çalakiyên çavdêriyê pêk bîne + admin:write:domain_allows: li ser mafdayînên navpar çalakiyên çavdêriyê pêk bîne + admin:write:domain_blocks: li ser astengkirinên navpar çalakiyên çavdêriyê pêk bîne + admin:write:email_domain_blocks: li ser astengkirinên e-nameya navpar çalakiyên çavdêriyê pêk bîne + admin:write:ip_blocks: li ser astengkirinên IP çalakiyên çavdêriyê pêk bîne + admin:write:reports: di ragihandinê de çalakiyên li hev kirî pêk bîne crypto: dawî bi dawî şifrekirî bi kar bîne follow: têkiliyên ajimêrê biguherîne push: agahdariyên xwe bistîne diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 93ba7d547022d7..0356c22ecbec51 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -1,3 +1,4 @@ +--- lv: activerecord: attributes: @@ -146,22 +147,22 @@ lv: application: title: OAuth nepieciešama autorizācija scopes: - "admin:read": lasīt visus datus uz servera - "admin:read:accounts": lasīt sensitīvu informāciju no visiem kontiem - "admin:read:canonical_email_blocks": lasīt sensitīvu informāciju par visiem kanoniskajiem e-pasta blokiem - "admin:read:domain_allows": lasīt visu domēnu sensitīvo informāciju, ko atļauj - "admin:read:domain_blocks": lasīt sensitīvu informāciju par visiem domēna blokiem - "admin:read:email_domain_blocks": lasīt sensitīvu informāciju par visiem e-pasta domēna blokiem - "admin:read:ip_blocks": lasīt sensitīvu informāciju par visiem IP blokiem - "admin:read:reports": lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots - "admin:write": modificēt visus datus uz servera - "admin:write:accounts": veikt moderācijas darbības kontos - "admin:write:canonical_email_blocks": veikt regulēšanas darbības kanoniskajos e-pasta blokos - "admin:write:domain_allows": veikt moderēšanas darbības domēna atļaujā - "admin:write:domain_blocks": veikt moderēšanas darbības domēna blokos - "admin:write:email_domain_blocks": veikt moderēšanas darbības e-pasta domēna blokos - "admin:write:ip_blocks": veikt moderēšanas darbības IP blokos - "admin:write:reports": veikt moderācijas darbības pārskatos + admin:read: lasīt visus datus uz servera + admin:read:accounts: lasīt sensitīvu informāciju no visiem kontiem + admin:read:canonical_email_blocks: lasīt sensitīvu informāciju par visiem kanoniskajiem e-pasta blokiem + admin:read:domain_allows: lasīt visu domēnu sensitīvo informāciju, ko atļauj + admin:read:domain_blocks: lasīt sensitīvu informāciju par visiem domēna blokiem + admin:read:email_domain_blocks: lasīt sensitīvu informāciju par visiem e-pasta domēna blokiem + admin:read:ip_blocks: lasīt sensitīvu informāciju par visiem IP blokiem + admin:read:reports: lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots + admin:write: modificēt visus datus uz servera + admin:write:accounts: veikt moderācijas darbības kontos + admin:write:canonical_email_blocks: veikt regulēšanas darbības kanoniskajos e-pasta blokos + admin:write:domain_allows: veikt moderēšanas darbības domēna atļaujā + admin:write:domain_blocks: veikt moderēšanas darbības domēna blokos + admin:write:email_domain_blocks: veikt moderēšanas darbības e-pasta domēna blokos + admin:write:ip_blocks: veikt moderēšanas darbības IP blokos + admin:write:reports: veikt moderācijas darbības pārskatos crypto: lieto pilnīgu šifrēšanu follow: mainīt konta attiecības push: saņemt savus push paziņojumus diff --git a/config/locales/doorkeeper.ml.yml b/config/locales/doorkeeper.ml.yml index 07578e884257b1..8d65fce7d26e86 100644 --- a/config/locales/doorkeeper.ml.yml +++ b/config/locales/doorkeeper.ml.yml @@ -1,3 +1,4 @@ +--- ml: activerecord: attributes: diff --git a/config/locales/doorkeeper.mr.yml b/config/locales/doorkeeper.mr.yml index 91a3233863a8e8..a6f59fbd4c189f 100644 --- a/config/locales/doorkeeper.mr.yml +++ b/config/locales/doorkeeper.mr.yml @@ -1,3 +1,4 @@ +--- mr: activerecord: attributes: diff --git a/config/locales/doorkeeper.ms.yml b/config/locales/doorkeeper.ms.yml index 6df149ae4c6253..32fb0044bb4793 100644 --- a/config/locales/doorkeeper.ms.yml +++ b/config/locales/doorkeeper.ms.yml @@ -1,3 +1,4 @@ +--- ms: activerecord: attributes: diff --git a/config/locales/doorkeeper.my.yml b/config/locales/doorkeeper.my.yml index d0ce72e31fd9bf..bce6039eae14f7 100644 --- a/config/locales/doorkeeper.my.yml +++ b/config/locales/doorkeeper.my.yml @@ -1,3 +1,4 @@ +--- my: activerecord: attributes: @@ -51,7 +52,7 @@ my: callback_urls: URLs ပြန်ခေါ်ရန် scopes: နယ်ပယ်များ secret: Client လျှို့ဝှက်ချက် - title: 'အက်ပလီကေးရှင်း - %{name}' + title: အက်ပလီကေးရှင်း - %{name} authorizations: buttons: authorize: လုပ်ပိုင်ခွင့် @@ -70,9 +71,9 @@ my: confirmations: revoke: သေချာပါသလား။ index: - authorized_at: '%{date} တွင် ခွင့်ပြုခဲ့သည်' - description_html: '၎င်းတို့မှာ API အသုံးပြု၍ သင့်အကောင့်ကို ဝင်ရောက်ကြည့်ရှုနိုင်သော အက်ပလီကေးရှင်းများဖြစ်သည်။ ဤနေရာတွင် သင်မသိသော အက်ပလီကေးရှင်းများ ရှိပါက သို့မဟုတ် အက်ပလီကေးရှင်းတစ်ခုသည် လွဲမှားစွာ လုပ်ဆောင်နေပါက ၎င်း၏ ဝင်ရောက်ခွင့်ကို သင် ပြန်လည်ရုပ်သိမ်းနိုင်သည်။' - last_used_at: '%{date} တွင် နောက်ဆုံးအသုံးပြုခဲ့သည်' + authorized_at: "%{date} တွင် ခွင့်ပြုခဲ့သည်" + description_html: "၎င်းတို့မှာ API အသုံးပြု၍ သင့်အကောင့်ကို ဝင်ရောက်ကြည့်ရှုနိုင်သော အက်ပလီကေးရှင်းများဖြစ်သည်။ ဤနေရာတွင် သင်မသိသော အက်ပလီကေးရှင်းများ ရှိပါက သို့မဟုတ် အက်ပလီကေးရှင်းတစ်ခုသည် လွဲမှားစွာ လုပ်ဆောင်နေပါက ၎င်း၏ ဝင်ရောက်ခွင့်ကို သင် ပြန်လည်ရုပ်သိမ်းနိုင်သည်။" + last_used_at: "%{date} တွင် နောက်ဆုံးအသုံးပြုခဲ့သည်" never_used: မသုံးဖူးပါ scopes: ခွင့်ပြုချက်များ superapp: အတွင်းပိုင်း @@ -85,7 +86,7 @@ my: invalid_grant: ပံ့ပိုးပေးထားသည့် ခွင့်ပြုချက်ပေးသည် မမှန်ကန်ပါ၊ သက်တမ်းကုန်၊ ရုပ်သိမ်းလိုက်သည်၊ ခွင့်ပြုချက်တောင်းခံမှုတွင် အသုံးပြုထားသော ပြန်ညွှန်း URI နှင့် မကိုက်ညီပါ သို့မဟုတ် အခြားအသုံးပြုသူထံသို့ ထုတ်ပေးထားသည်။ invalid_redirect_uri: ပြန်ညွှန်းထားခြင်းတွင် ပါဝင်သော URI မှာ မမှန်ကန်ပါ။ invalid_request: - missing_param: 'ပျောက်နေသည့် လိုအပ်သောအရာ - %{value}။' + missing_param: ပျောက်နေသည့် လိုအပ်သောအရာ - %{value}။ request_not_authorized: ခွင့်ပြုချက်တောင်းခံရန် လိုအပ်ပါသည်။ တောင်းဆိုမှုခွင့်ပြုချက်အတွက် လိုအပ်သောအရာမှာ ပျောက်ဆုံးနေခြင်း သို့မဟုတ် မမှန်ကန်ခြင်း ကြောင့်ဖြစ်ပါသည်။ unknown: တောင်းဆိုချက်တွင် ပံ့ပိုးမထားသော တန်ဖိုးတစ်ခုပါဝင်သည့် လိုအပ်သောအချက်အလက်တစ်ခု ပျောက်ဆုံးနေပါသည် သို့မဟုတ် ပုံစံမှားယွင်းနေပါသည်။ invalid_resource_owner: ပံ့ပိုးပေးထားသည့် မူလပိုင်ရှင်အထောက်အထားများမှာ မမှန်ကန်ပါ သို့မဟုတ် မူလပိုင်ရှင်ကို ရှာမတွေ့ပါ။ @@ -146,22 +147,22 @@ my: application: title: OAuth ခွင့်ပြုချက် လိုအပ်ပါသည် scopes: - "admin:read": ဆာဗာရှိ အချက်အလက်အားလုံးကို ဖတ်ပါ - "admin:read:accounts": အကောင့်အားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:canonical_email_blocks": ပိတ်ပင်ထားသော Canonical Email အားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:domain_allows": ခွင့်ပြုထားသော ဒိုမိန်းအားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:domain_blocks": ပိတ်ပင်ထားသော ဒိုမိန်းအားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:email_domain_blocks": ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းအားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:ip_blocks": ပိတ်ပင်ထားသော IP အားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ - "admin:read:reports": မှတ်တမ်းများနှင့် တိုင်ကြားထားသောအကောင့်များအားလုံး၏ အရေးကြီးသော အချက်အလက်ကို ဖတ်ပါ။ - "admin:write": ဆာဗာပေါ်ရှိ အချက်အလက်အားလုံးကို ပြင်ဆင်ပါ - "admin:write:accounts": အကောင့်များအား စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ - "admin:write:canonical_email_blocks": Canonical Email ပိတ်ပင်ထားမှုများအား စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ - "admin:write:domain_allows": ခွင့်ပြုထားသောဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ - "admin:write:domain_blocks": ပိတ်ပင်ထားသောဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ - "admin:write:email_domain_blocks": ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ - "admin:write:ip_blocks": IP ပိတ်ပင်ခြင်းများအတွက် စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ - "admin:write:reports": အစီရင်ခံစာများပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ + admin:read: ဆာဗာရှိ အချက်အလက်အားလုံးကို ဖတ်ပါ + admin:read:accounts: အကောင့်အားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:canonical_email_blocks: ပိတ်ပင်ထားသော Canonical Email အားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:domain_allows: ခွင့်ပြုထားသော ဒိုမိန်းအားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:domain_blocks: ပိတ်ပင်ထားသော ဒိုမိန်းအားလုံး၏ အရေးကြီးသော သတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:email_domain_blocks: ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းအားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:ip_blocks: ပိတ်ပင်ထားသော IP အားလုံး၏ အရေးကြီးသောသတင်းအချက်အလက်များကို ဖတ်ပါ + admin:read:reports: မှတ်တမ်းများနှင့် တိုင်ကြားထားသောအကောင့်များအားလုံး၏ အရေးကြီးသော အချက်အလက်ကို ဖတ်ပါ။ + admin:write: ဆာဗာပေါ်ရှိ အချက်အလက်အားလုံးကို ပြင်ဆင်ပါ + admin:write:accounts: အကောင့်များအား စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ + admin:write:canonical_email_blocks: Canonical Email ပိတ်ပင်ထားမှုများအား စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ + admin:write:domain_allows: ခွင့်ပြုထားသောဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ + admin:write:domain_blocks: ပိတ်ပင်ထားသောဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ + admin:write:email_domain_blocks: ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ + admin:write:ip_blocks: IP ပိတ်ပင်ခြင်းများအတွက် စိစစ်လုပ်ဆောင်မှုများ ဆောင်ရွက်ပါ + admin:write:reports: အစီရင်ခံစာများပေါ်တွင် စိစစ်လုပ်ဆောင်ချက်များ ဆောင်ရွက်ပါ crypto: ပေးပို့သူနှင့် ရရှိသူများသာသိနိုင်သော လုံခြုံမှုနည်းလမ်းကို အသုံးပြုပါ follow: အကောင့်ဆက်ဆံရေးများကို ပြင်ဆင်ပါ push: သင်ရရှိအောင်ပေးပို့ထားသည့် အသိပေးချက်များကို လက်ခံပါ diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml index d2d649d3993669..65e2bfcb7aec47 100644 --- a/config/locales/doorkeeper.nl.yml +++ b/config/locales/doorkeeper.nl.yml @@ -1,3 +1,4 @@ +--- nl: activerecord: attributes: @@ -146,22 +147,22 @@ nl: application: title: OAuth-autorisatie vereist scopes: - "admin:read": alle gegevens op de server lezen - "admin:read:accounts": gevoelige informatie van alle accounts lezen - "admin:read:canonical_email_blocks": gevoelige informatie van alle canoniek geblokkeerde e-mailadressen lezen - "admin:read:domain_allows": gevoelige informatie van alle toegestane domeinen lezen - "admin:read:domain_blocks": gevoelige informatie van alle geblokkeerde domeinen lezen - "admin:read:email_domain_blocks": gevoelige informatie van alle geblokkeerde e-maildomeinen lezen - "admin:read:ip_blocks": gevoelige informatie van alle geblokkeerde IP-adressen lezen - "admin:read:reports": gevoelige informatie van alle rapportages en gerapporteerde accounts lezen - "admin:write": wijzig alle gegevens op de server - "admin:write:accounts": moderatieacties op accounts uitvoeren - "admin:write:canonical_email_blocks": moderatieacties op canoniek geblokkeerde e-mailadressen uitvoeren - "admin:write:domain_allows": moderatieacties op toegestane domeinen uitvoeren - "admin:write:domain_blocks": moderatieacties op geblokkeerde domeinen uitvoeren - "admin:write:email_domain_blocks": moderatieacties op geblokkeerde e-maildomeinen uitvoeren - "admin:write:ip_blocks": moderatieacties op geblokkeerde IP-adressen uitvoeren - "admin:write:reports": moderatieacties op rapportages uitvoeren + admin:read: alle gegevens op de server lezen + admin:read:accounts: gevoelige informatie van alle accounts lezen + admin:read:canonical_email_blocks: gevoelige informatie van alle canoniek geblokkeerde e-mailadressen lezen + admin:read:domain_allows: gevoelige informatie van alle toegestane domeinen lezen + admin:read:domain_blocks: gevoelige informatie van alle geblokkeerde domeinen lezen + admin:read:email_domain_blocks: gevoelige informatie van alle geblokkeerde e-maildomeinen lezen + admin:read:ip_blocks: gevoelige informatie van alle geblokkeerde IP-adressen lezen + admin:read:reports: gevoelige informatie van alle rapportages en gerapporteerde accounts lezen + admin:write: wijzig alle gegevens op de server + admin:write:accounts: moderatieacties op accounts uitvoeren + admin:write:canonical_email_blocks: moderatieacties op canoniek geblokkeerde e-mailadressen uitvoeren + admin:write:domain_allows: moderatieacties op toegestane domeinen uitvoeren + admin:write:domain_blocks: moderatieacties op geblokkeerde domeinen uitvoeren + admin:write:email_domain_blocks: moderatieacties op geblokkeerde e-maildomeinen uitvoeren + admin:write:ip_blocks: moderatieacties op geblokkeerde IP-adressen uitvoeren + admin:write:reports: moderatieacties op rapportages uitvoeren crypto: end-to-end-encryptie gebruiken follow: relaties tussen accounts bewerken push: jouw pushmeldingen ontvangen diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index c6098cbfb0c4f2..66dd0f9093cd49 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -1,3 +1,4 @@ +--- nn: activerecord: attributes: @@ -146,22 +147,22 @@ nn: application: title: Krav om OAuth-autorisering scopes: - "admin:read": lese alle data på tjeneren - "admin:read:accounts": lese sensitiv informasjon om alle kontoar - "admin:read:canonical_email_blocks": les ømtolig informasjon om alle kanoniske e-postblokkeringar - "admin:read:domain_allows": les ømtolig informasjon om alle domeneløyve - "admin:read:domain_blocks": les ømtolig informasjon om alle domeneblokkeringar - "admin:read:email_domain_blocks": les ømtolig informasjon om alle e-postdomeneblokkeringar - "admin:read:ip_blocks": les ømtolig informasjon om alle IP-blokkeringar - "admin:read:reports": lese sensitiv informasjon om alle rapportar og rapporterte kontoar - "admin:write": endre alle data på tenaren - "admin:write:accounts": utføre moderatorhandlingar på kontoar - "admin:write:canonical_email_blocks": utføre modereringshandlingar på kanoniske e-postblokkeringar - "admin:write:domain_allows": utføre modereringshandlingar på domeneløyve - "admin:write:domain_blocks": utføre modereringshandlingar på domeneblokkeringar - "admin:write:email_domain_blocks": utføre modereringshandlingar på e-postdomeneblokkeringar - "admin:write:ip_blocks": utføre modereringshandlingar på IP-blokkeringar - "admin:write:reports": utføre moderatorhandlingar på rapportar + admin:read: lese alle data på tjeneren + admin:read:accounts: lese sensitiv informasjon om alle kontoar + admin:read:canonical_email_blocks: les ømtolig informasjon om alle kanoniske e-postblokkeringar + admin:read:domain_allows: les ømtolig informasjon om alle domeneløyve + admin:read:domain_blocks: les ømtolig informasjon om alle domeneblokkeringar + admin:read:email_domain_blocks: les ømtolig informasjon om alle e-postdomeneblokkeringar + admin:read:ip_blocks: les ømtolig informasjon om alle IP-blokkeringar + admin:read:reports: lese sensitiv informasjon om alle rapportar og rapporterte kontoar + admin:write: endre alle data på tenaren + admin:write:accounts: utføre moderatorhandlingar på kontoar + admin:write:canonical_email_blocks: utføre modereringshandlingar på kanoniske e-postblokkeringar + admin:write:domain_allows: utføre modereringshandlingar på domeneløyve + admin:write:domain_blocks: utføre modereringshandlingar på domeneblokkeringar + admin:write:email_domain_blocks: utføre modereringshandlingar på e-postdomeneblokkeringar + admin:write:ip_blocks: utføre modereringshandlingar på IP-blokkeringar + admin:write:reports: utføre moderatorhandlingar på rapportar crypto: bruk ende-til-ende-kryptering follow: fylg, blokkér, avblokkér, avfylg brukarar push: motta pushvarsla dine diff --git a/config/locales/doorkeeper.no.yml b/config/locales/doorkeeper.no.yml index 1dcf99a290000c..c432f6645cf98b 100644 --- a/config/locales/doorkeeper.no.yml +++ b/config/locales/doorkeeper.no.yml @@ -1,4 +1,5 @@ -"no": +--- +'no': activerecord: attributes: doorkeeper/application: @@ -146,22 +147,22 @@ application: title: OAuth-autorisering påkrevet scopes: - "admin:read": lese alle data på tjeneren - "admin:read:accounts": lese sensitive opplysninger for alle kontoer - "admin:read:canonical_email_blocks": lese sensitiv informasjon om alle kanoniske e-postblokker - "admin:read:domain_allows": lese sensitiv informasjon for alle domener tillater - "admin:read:domain_blocks": lese sensitiv informasjon for alle domeneblokker - "admin:read:email_domain_blocks": lese sensitiv informasjon for alle domeneblokker for e-post - "admin:read:ip_blocks": les sensitiv informasjon for alle IP-blokker - "admin:read:reports": lese sensitive opplysninger for alle rapporter og rapporterte kontoer - "admin:write": modifisere alle data på tjeneren - "admin:write:accounts": utføre moderatorhandlinger på kontoer - "admin:write:canonical_email_blocks": utføre moderasjonshandlinger på kanoniske e-postblokker - "admin:write:domain_allows": utføre moderasjonshandlinger på domenet tillater - "admin:write:domain_blocks": utfør moderasjonshandlinger på domeneblokker - "admin:write:email_domain_blocks": utføre moderasjonshandlinger på e-post domeneblokker - "admin:write:ip_blocks": utføre moderasjonshandlinger på IP-blokker - "admin:write:reports": utføre moderatorhandlinger på rapporter + admin:read: lese alle data på tjeneren + admin:read:accounts: lese sensitive opplysninger for alle kontoer + admin:read:canonical_email_blocks: lese sensitiv informasjon om alle kanoniske e-postblokker + admin:read:domain_allows: lese sensitiv informasjon for alle domener tillater + admin:read:domain_blocks: lese sensitiv informasjon for alle domeneblokker + admin:read:email_domain_blocks: lese sensitiv informasjon for alle domeneblokker for e-post + admin:read:ip_blocks: les sensitiv informasjon for alle IP-blokker + admin:read:reports: lese sensitive opplysninger for alle rapporter og rapporterte kontoer + admin:write: modifisere alle data på tjeneren + admin:write:accounts: utføre moderatorhandlinger på kontoer + admin:write:canonical_email_blocks: utføre moderasjonshandlinger på kanoniske e-postblokker + admin:write:domain_allows: utføre moderasjonshandlinger på domenet tillater + admin:write:domain_blocks: utfør moderasjonshandlinger på domeneblokker + admin:write:email_domain_blocks: utføre moderasjonshandlinger på e-post domeneblokker + admin:write:ip_blocks: utføre moderasjonshandlinger på IP-blokker + admin:write:reports: utføre moderatorhandlinger på rapporter crypto: bruk ende-til-ende-kryptering follow: endre konto-relasjoner push: motta push-varslingene dine diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml index f55938f0c975d6..64bc3a43e2fb95 100644 --- a/config/locales/doorkeeper.oc.yml +++ b/config/locales/doorkeeper.oc.yml @@ -1,3 +1,4 @@ +--- oc: activerecord: attributes: @@ -51,7 +52,7 @@ oc: callback_urls: urls de rapèls scopes: Encastres secret: Secret - title: 'Aplicacion : %{name}' + title: Aplicacion : %{name} authorizations: buttons: authorize: Autorizar @@ -145,17 +146,17 @@ oc: application: title: Cal una autorizacion OAuth scopes: - "admin:read": lectura de totas las donadas del servidor - "admin:read:accounts": lectura de las informacions sensiblas dels comptes - "admin:read:canonical_email_blocks": legir las informacions sensiblas de totes los blocs d’e-mails canonics - "admin:read:domain_allows": legir las informacions sensiblas de totes los domenis autorizats - "admin:read:domain_blocks": legir las informacions sensiblas de totes los domenis blocats - "admin:read:email_domain_blocks": legir las informacions sensiblas de totes los blocs de domenis d’e-mail - "admin:read:ip_blocks": legir las informacions sensiblas de totes los blocats d’IP - "admin:read:reports": lectura de las informacions sensiblas dels senhalaments e dels comptes senhalats - "admin:write": modificacion de las donadas del servidor - "admin:write:accounts": realizacion d’accions de moderacion suls comptes - "admin:write:reports": realizacion d’accions suls senhalaments + admin:read: lectura de totas las donadas del servidor + admin:read:accounts: lectura de las informacions sensiblas dels comptes + admin:read:canonical_email_blocks: legir las informacions sensiblas de totes los blocs d’e-mails canonics + admin:read:domain_allows: legir las informacions sensiblas de totes los domenis autorizats + admin:read:domain_blocks: legir las informacions sensiblas de totes los domenis blocats + admin:read:email_domain_blocks: legir las informacions sensiblas de totes los blocs de domenis d’e-mail + admin:read:ip_blocks: legir las informacions sensiblas de totes los blocats d’IP + admin:read:reports: lectura de las informacions sensiblas dels senhalaments e dels comptes senhalats + admin:write: modificacion de las donadas del servidor + admin:write:accounts: realizacion d’accions de moderacion suls comptes + admin:write:reports: realizacion d’accions suls senhalaments crypto: utilizar lo chiframent del cap a la fin follow: modificar las relacions del compte push: recebre vòstras notificacions push diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml index bc5a3ef23928c7..226c0d403c8491 100644 --- a/config/locales/doorkeeper.pl.yml +++ b/config/locales/doorkeeper.pl.yml @@ -1,3 +1,4 @@ +--- pl: activerecord: attributes: @@ -146,38 +147,38 @@ pl: application: title: Uwierzytelnienie OAuth jest wymagane scopes: - "admin:read": odczytaj wszystkie dane na serwerze - "admin:read:accounts": odczytaj wrażliwe informacje na wszystkich kontach - "admin:read:canonical_email_blocks": odczytaj poufne informacje o wszystkich kanonicznych blokach poczty - "admin:read:domain_allows": odczyt wrażliwych informacji z domen, które pozwalają - "admin:read:domain_blocks": odczyt wrażliwych informacji ze wszystkich bloków domen - "admin:read:email_domain_blocks": odczyt wrażliwych informacji ze wszystkich bloków domen email - "admin:read:ip_blocks": odczyt wrażliwych informacji ze wszystkich bloków IP - "admin:read:reports": odczytaj wrażliwe informacje ze wszystkich zgłoszeń oraz zgłoszonych kont - "admin:write": zmodyfikuj wszystkie dane na serwerze - "admin:write:accounts": wykonaj działania moderacyjne na kontach - "admin:write:canonical_email_blocks": wykonaj działania moderacyjne na kanonicznych blokach e-mail - "admin:write:domain_allows": wykonaj działania moderacyjne na domenach, które zezwalają - "admin:write:domain_blocks": wykonaj działania moderacyjne na blokach domen - "admin:write:email_domain_blocks": wykonaj działania moderacyjne na blokach domen e-mail - "admin:write:ip_blocks": wykonaj działania moderacyjne na blokach IP - "admin:write:reports": wykonaj działania moderacyjne na zgłoszeniach + admin:read: odczytaj wszystkie dane na serwerze + admin:read:accounts: odczytaj wrażliwe informacje na wszystkich kontach + admin:read:canonical_email_blocks: odczytaj poufne informacje o wszystkich kanonicznych blokach poczty + admin:read:domain_allows: odczyt wrażliwych informacji z domen, które pozwalają + admin:read:domain_blocks: odczyt wrażliwych informacji ze wszystkich bloków domen + admin:read:email_domain_blocks: odczyt wrażliwych informacji ze wszystkich bloków domen email + admin:read:ip_blocks: odczyt wrażliwych informacji ze wszystkich bloków IP + admin:read:reports: odczytaj wrażliwe informacje ze wszystkich zgłoszeń oraz zgłoszonych kont + admin:write: zmodyfikuj wszystkie dane na serwerze + admin:write:accounts: wykonaj działania moderacyjne na kontach + admin:write:canonical_email_blocks: wykonaj działania moderacyjne na kanonicznych blokach e-mail + admin:write:domain_allows: wykonaj działania moderacyjne na domenach, które zezwalają + admin:write:domain_blocks: wykonaj działania moderacyjne na blokach domen + admin:write:email_domain_blocks: wykonaj działania moderacyjne na blokach domen e-mail + admin:write:ip_blocks: wykonaj działania moderacyjne na blokach IP + admin:write:reports: wykonaj działania moderacyjne na zgłoszeniach crypto: użyj szyfrowania end-to-end follow: możliwość zarządzania relacjami kont push: otrzymywanie powiadomień push dla Twojego konta read: możliwość odczytu wszystkich danych konta - "read:accounts": dostęp do informacji o koncie - "read:blocks": dostęp do listy blokowanych - "read:bookmarks": dostęp do zakładek - "read:favourites": dostęp do listy ulubionych - "read:filters": dostęp do filtrów - "read:follows": dostęp do listy obserwowanych - "read:lists": dostęp do Twoich list - "read:mutes": dostęp do listy wyciszonych - "read:notifications": możliwość odczytu powiadomień - "read:reports": dostęp do Twoich zgłoszeń - "read:search": wyświetlanie z Twojego konta - "read:statuses": wyświetlanie wszystkich wpisów + read:accounts: dostęp do informacji o koncie + read:blocks: dostęp do listy blokowanych + read:bookmarks: dostęp do zakładek + read:favourites: dostęp do listy ulubionych + read:filters: dostęp do filtrów + read:follows: dostęp do listy obserwowanych + read:lists: dostęp do Twoich list + read:mutes: dostęp do listy wyciszonych + read:notifications: możliwość odczytu powiadomień + read:reports: dostęp do Twoich zgłoszeń + read:search: wyświetlanie z Twojego konta + read:statuses: wyświetlanie wszystkich wpisów write: możliwość modyfikowania wszystkich danych o koncie write:accounts: możliwość modyfikowania informacji o koncie write:blocks: możliwość blokowania domen i użytkowników diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index a7943a13bd98d5..d7e9353b59be3e 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -1,3 +1,4 @@ +--- pt-BR: activerecord: attributes: @@ -59,7 +60,7 @@ pt-BR: error: title: Ocorreu um erro new: - prompt_html: "O %{client_name} gostaria de ter permissão para acessar sua conta. É uma aplicação de terceiros. Se você não confia, então você não deve autorizá-lo." + prompt_html: O %{client_name} gostaria de ter permissão para acessar sua conta. É uma aplicação de terceiros. Se você não confia, então você não deve autorizá-lo. review_permissions: Revisar permissões title: Autorização necessária show: @@ -146,22 +147,22 @@ pt-BR: application: title: Autorização OAuth obrigatória scopes: - "admin:read": ler todos os dados no servidor - "admin:read:accounts": ler informações sensíveis de todas as contas - "admin:read:canonical_email_blocks": ler informações sensíveis de todos os blocos de e-mail canônicos - "admin:read:domain_allows": ler informações sensíveis de todos os domínios (URL) permitidos - "admin:read:domain_blocks": ler informações sensíveis de todos os domínios (URL) bloqueados - "admin:read:email_domain_blocks": ler informações sensíveis de todos os e-mails de domínios bloqueados - "admin:read:ip_blocks": ler informações sensíveis de todos os endereços de IP bloqueados - "admin:read:reports": ler informações sensíveis de todas as denúncias e contas denunciadas - "admin:write": alterar todos os dados no servidor - "admin:write:accounts": executar ações de moderação em contas - "admin:write:canonical_email_blocks": executar ações de moderação em blocos canônicos de e-mail - "admin:write:domain_allows": executar ações de moderação em domínios (URL) permitidos - "admin:write:domain_blocks": executar ações de moderação em domínios (URL) bloqueados - "admin:write:email_domain_blocks": executar ações de moderação em blocos de e-mail bloqueados - "admin:write:ip_blocks": executar ações de moderação em IPs bloqueados - "admin:write:reports": executar ações de moderação em denúncias + admin:read: ler todos os dados no servidor + admin:read:accounts: ler informações sensíveis de todas as contas + admin:read:canonical_email_blocks: ler informações sensíveis de todos os blocos de e-mail canônicos + admin:read:domain_allows: ler informações sensíveis de todos os domínios (URL) permitidos + admin:read:domain_blocks: ler informações sensíveis de todos os domínios (URL) bloqueados + admin:read:email_domain_blocks: ler informações sensíveis de todos os e-mails de domínios bloqueados + admin:read:ip_blocks: ler informações sensíveis de todos os endereços de IP bloqueados + admin:read:reports: ler informações sensíveis de todas as denúncias e contas denunciadas + admin:write: alterar todos os dados no servidor + admin:write:accounts: executar ações de moderação em contas + admin:write:canonical_email_blocks: executar ações de moderação em blocos canônicos de e-mail + admin:write:domain_allows: executar ações de moderação em domínios (URL) permitidos + admin:write:domain_blocks: executar ações de moderação em domínios (URL) bloqueados + admin:write:email_domain_blocks: executar ações de moderação em blocos de e-mail bloqueados + admin:write:ip_blocks: executar ações de moderação em IPs bloqueados + admin:write:reports: executar ações de moderação em denúncias crypto: usar criptografia de ponta-a-ponta follow: alterar o relacionamento das contas push: receber notificações push diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml index 0c5bd2394cfa2b..31f6e462784f54 100644 --- a/config/locales/doorkeeper.pt-PT.yml +++ b/config/locales/doorkeeper.pt-PT.yml @@ -1,3 +1,4 @@ +--- pt-PT: activerecord: attributes: @@ -146,38 +147,38 @@ pt-PT: application: title: Autorização OAuth necessária scopes: - "admin:read": ler todos os dados no servidor - "admin:read:accounts": ler informações sensíveis de todas as contas - "admin:read:canonical_email_blocks": ler informações sensíveis de todos os bloqueios de endereços de e-mail canônicos - "admin:read:domain_allows": ler informações sensíveis de todos os domínios permitios - "admin:read:domain_blocks": ler informações sensíveis de todos os bloqueios de domínio - "admin:read:email_domain_blocks": ler informações sensíveis de todos os bloqueios de domínio de e-mail - "admin:read:ip_blocks": ler informações sensíveis de todos os bloqueios de IPs - "admin:read:reports": ler informações sensíveis de todas as denúnicas e contas denunciadas - "admin:write": modificar todos os dados no servidor - "admin:write:accounts": executar ações de moderação em contas - "admin:write:canonical_email_blocks": executar ações de moderação no bloqueio de endereços de e-mail canônicos - "admin:write:domain_allows": executar ações de moderação na permissão de domínios - "admin:write:domain_blocks": executar ações de moderação no bloqueio de domínios - "admin:write:email_domain_blocks": executar ações de moderação no bloqueio de domínios de e-mail - "admin:write:ip_blocks": executar ações de moderação no bloqueio de IPs - "admin:write:reports": executar ações de moderação em denúncias + admin:read: ler todos os dados no servidor + admin:read:accounts: ler informações sensíveis de todas as contas + admin:read:canonical_email_blocks: ler informações sensíveis de todos os bloqueios de endereços de e-mail canônicos + admin:read:domain_allows: ler informações sensíveis de todos os domínios permitios + admin:read:domain_blocks: ler informações sensíveis de todos os bloqueios de domínio + admin:read:email_domain_blocks: ler informações sensíveis de todos os bloqueios de domínio de e-mail + admin:read:ip_blocks: ler informações sensíveis de todos os bloqueios de IPs + admin:read:reports: ler informações sensíveis de todas as denúnicas e contas denunciadas + admin:write: modificar todos os dados no servidor + admin:write:accounts: executar ações de moderação em contas + admin:write:canonical_email_blocks: executar ações de moderação no bloqueio de endereços de e-mail canônicos + admin:write:domain_allows: executar ações de moderação na permissão de domínios + admin:write:domain_blocks: executar ações de moderação no bloqueio de domínios + admin:write:email_domain_blocks: executar ações de moderação no bloqueio de domínios de e-mail + admin:write:ip_blocks: executar ações de moderação no bloqueio de IPs + admin:write:reports: executar ações de moderação em denúncias crypto: usa encriptação ponta-a-ponta follow: siga, bloqueie, desbloqueie, e deixa de seguir contas push: receber as suas notificações push read: tenha acesso aos dados da tua conta - "read:accounts": ver as informações da conta - "read:blocks": ver os seus bloqueios - "read:bookmarks": ver os seus favoritos - "read:favourites": ver os seus favoritos - "read:filters": ver os seus filtros - "read:follows": ver quem você segue - "read:lists": ver as suas listas - "read:mutes": ver os utilizadores que silenciou - "read:notifications": ver as suas notificações - "read:reports": ver as suas denúncias - "read:search": pesquisar em seu nome - "read:statuses": ver todos os estados + read:accounts: ver as informações da conta + read:blocks: ver os seus bloqueios + read:bookmarks: ver os seus favoritos + read:favourites: ver os seus favoritos + read:filters: ver os seus filtros + read:follows: ver quem você segue + read:lists: ver as suas listas + read:mutes: ver os utilizadores que silenciou + read:notifications: ver as suas notificações + read:reports: ver as suas denúncias + read:search: pesquisar em seu nome + read:statuses: ver todos os estados write: publique por ti write:accounts: modificar o seu perfil write:blocks: bloquear contas e domínios diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml index 6780f6efa3ec86..fa28373521c0dd 100644 --- a/config/locales/doorkeeper.ro.yml +++ b/config/locales/doorkeeper.ro.yml @@ -1,3 +1,4 @@ +--- ro: activerecord: attributes: @@ -146,12 +147,12 @@ ro: application: title: Este necesară autorizarea OAuth scopes: - "admin:read": citește toate datele de pe server - "admin:read:accounts": citește informații sensibile ale tuturor conturilor - "admin:read:reports": citește informații sensibile din toate rapoartele și conturile raportate - "admin:write": modifică toate datele de pe server - "admin:write:accounts": efectuează acțiuni de moderare pe conturi - "admin:write:reports": efectuează acțiuni de moderare pe rapoarte + admin:read: citește toate datele de pe server + admin:read:accounts: citește informații sensibile ale tuturor conturilor + admin:read:reports: citește informații sensibile din toate rapoartele și conturile raportate + admin:write: modifică toate datele de pe server + admin:write:accounts: efectuează acțiuni de moderare pe conturi + admin:write:reports: efectuează acțiuni de moderare pe rapoarte crypto: utilizează criptare la ambele capete follow: modifică relațiile contului push: primește notificările tale push diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index 411a0bfb900795..ce8392cb11a466 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -1,3 +1,4 @@ +--- ru: activerecord: attributes: @@ -146,38 +147,38 @@ ru: application: title: Требуется авторизация OAuth scopes: - "admin:read": читать все данные на сервере - "admin:read:accounts": читать конфиденциальную информацию всех учётных записей - "admin:read:canonical_email_blocks": чтение конфиденциальной информации всех канонических блоков электронной почты - "admin:read:domain_allows": чтение конфиденциальной информации для всего домена позволяет - "admin:read:domain_blocks": чтение конфиденциальной информации для всего домена позволяет - "admin:read:email_domain_blocks": читать конфиденциальную информацию обо всех блоках домена электронной почты - "admin:read:ip_blocks": читать конфиденциальную информацию обо всех IP-блоках - "admin:read:reports": читать конфиденциальную информацию о всех жалобах и учётных записях с жалобами - "admin:write": модифицировать все данные на сервере - "admin:write:accounts": производить модерацию учётных записей - "admin:write:canonical_email_blocks": выполнять действия по модерации канонических блоков электронной почты - "admin:write:domain_allows": производить модерацию учётных записей - "admin:write:domain_blocks": выполнять модерационные действия над блокировкой домена - "admin:write:email_domain_blocks": выполнять действия по модерации блоков домена электронной почты - "admin:write:ip_blocks": выполнять модерационные действия над блокировками IP - "admin:write:reports": производить модерацию жалоб + admin:read: читать все данные на сервере + admin:read:accounts: читать конфиденциальную информацию всех учётных записей + admin:read:canonical_email_blocks: чтение конфиденциальной информации всех канонических блоков электронной почты + admin:read:domain_allows: чтение конфиденциальной информации для всего домена позволяет + admin:read:domain_blocks: чтение конфиденциальной информации для всего домена позволяет + admin:read:email_domain_blocks: читать конфиденциальную информацию обо всех блоках домена электронной почты + admin:read:ip_blocks: читать конфиденциальную информацию обо всех IP-блоках + admin:read:reports: читать конфиденциальную информацию о всех жалобах и учётных записях с жалобами + admin:write: модифицировать все данные на сервере + admin:write:accounts: производить модерацию учётных записей + admin:write:canonical_email_blocks: выполнять действия по модерации канонических блоков электронной почты + admin:write:domain_allows: производить модерацию учётных записей + admin:write:domain_blocks: выполнять модерационные действия над блокировкой домена + admin:write:email_domain_blocks: выполнять действия по модерации блоков домена электронной почты + admin:write:ip_blocks: выполнять модерационные действия над блокировками IP + admin:write:reports: производить модерацию жалоб crypto: использ. сквозное шифрование follow: управлять подписками и списком блокировок push: получать 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: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: блокировать учётные записи и домены diff --git a/config/locales/doorkeeper.sc.yml b/config/locales/doorkeeper.sc.yml index e1c351d7aa3276..1f1d38f3a9b0d8 100644 --- a/config/locales/doorkeeper.sc.yml +++ b/config/locales/doorkeeper.sc.yml @@ -1,3 +1,4 @@ +--- sc: activerecord: attributes: @@ -111,12 +112,12 @@ sc: 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 + 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 diff --git a/config/locales/doorkeeper.sco.yml b/config/locales/doorkeeper.sco.yml index 990b8dfcae2f4d..70341c3c691123 100644 --- a/config/locales/doorkeeper.sco.yml +++ b/config/locales/doorkeeper.sco.yml @@ -1,3 +1,4 @@ +--- sco: activerecord: attributes: @@ -143,12 +144,12 @@ sco: application: title: OAuth authorization requirit scopes: - "admin:read": read aw data on the server - "admin:read:accounts": read sensitive information fae aw accoonts - "admin:read:reports": read sensitive information fae aw clyped an clyped on accoonts - "admin:write": modify aw data on the server - "admin:write:accounts": perform moderation actions on accoonts - "admin:write:reports": perform moderation actions on clypes + admin:read: read aw data on the server + admin:read:accounts: read sensitive information fae aw accoonts + admin:read:reports: read sensitive information fae aw clyped an clyped on accoonts + admin:write: modify aw data on the server + admin:write:accounts: perform moderation actions on accoonts + admin:write:reports: perform moderation actions on clypes crypto: uise en-tae-en encryption follow: modify accoont relationships push: get yer push notifications diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 91e00966c7aa90..d3550cf5989b78 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -1,3 +1,4 @@ +--- si: activerecord: attributes: @@ -70,7 +71,7 @@ si: confirmations: revoke: ඔබට විශ්වාසද? index: - authorized_at: '%{date}මත අවසර දී ඇත' + authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. last_used_at: අන්තිම භාවිතය %{date} never_used: භාවිතා කර නැත diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml index de5a9467de4168..acfd59b3e77011 100644 --- a/config/locales/doorkeeper.sk.yml +++ b/config/locales/doorkeeper.sk.yml @@ -1,3 +1,4 @@ +--- sk: activerecord: attributes: @@ -145,12 +146,12 @@ sk: application: title: Požadovaná OAuth autorizácia scopes: - "admin:read": prezeraj všetky dáta na serveri - "admin:read:accounts": prezeraj chúlostivé informácie na všetkých účtoch - "admin:read:reports": čítaj chulostivé informácie o všetkých hláseniach a nahlásených účtoch - "admin:write": uprav všetky dáta na serveri - "admin:write:accounts": urob moderovacie úkony na účtoch - "admin:write:reports": urob moderovacie úkony voči hláseniam + admin:read: prezeraj všetky dáta na serveri + admin:read:accounts: prezeraj chúlostivé informácie na všetkých účtoch + admin:read:reports: čítaj chulostivé informácie o všetkých hláseniach a nahlásených účtoch + admin:write: uprav všetky dáta na serveri + admin:write:accounts: urob moderovacie úkony na účtoch + admin:write:reports: urob moderovacie úkony voči hláseniam crypto: používať end-to-end šifrovanie follow: uprav vzťahy svojho účtu push: dostávaj oboznámenia ohľadom tvojho účtu na obrazovku @@ -167,16 +168,16 @@ sk: read:search: vyhľadvávaj v rámci seba read:statuses: zhliadni všetky príspevky write: upraviť všetky dáta tvojho účtu - "write:accounts": uprav svoj profil - "write:blocks": blokuj účty a domény - "write:bookmarks": pridaj si príspevky k záložkám - "write:conversations": stíš a vymaž konverzácie - "write:favourites": obľúbené príspevky - "write:filters": vytvor roztriedenie - "write:follows": následuj ľudí - "write:lists": vytvor listy - "write:media": nahraj mediálne súbory - "write:mutes": stíš diskusie, aj zapojených užívateľov - "write:notifications": vyčisti oboznámenia - "write:reports": nahlás iných užívateľov - "write:statuses": publikuj príspevky + write:accounts: uprav svoj profil + write:blocks: blokuj účty a domény + write:bookmarks: pridaj si príspevky k záložkám + write:conversations: stíš a vymaž konverzácie + write:favourites: obľúbené príspevky + write:filters: vytvor roztriedenie + write:follows: následuj ľudí + write:lists: vytvor listy + write:media: nahraj mediálne súbory + write:mutes: stíš diskusie, aj zapojených užívateľov + write:notifications: vyčisti oboznámenia + write:reports: nahlás iných užívateľov + write:statuses: publikuj príspevky diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml index 0981c16a13e8b3..8fe39bbf61f903 100644 --- a/config/locales/doorkeeper.sl.yml +++ b/config/locales/doorkeeper.sl.yml @@ -1,3 +1,4 @@ +--- sl: activerecord: attributes: @@ -146,49 +147,49 @@ sl: application: title: Potrebna je pooblastitev OAuth scopes: - "admin:read": preberi vse podatke na strežniku - "admin:read:accounts": preberi občutljive informacije vseh računov - "admin:read:canonical_email_blocks": preberi občutljive informacije vseh blokad kanoničnih e-računov - "admin:read:domain_allows": preberi občutljive informacije vseh dovolil domene - "admin:read:domain_blocks": preberi občutljive informacije vseh blokad domen - "admin:read:email_domain_blocks": preberi občutljive informacije vseh blokad domen e-računov - "admin:read:ip_blocks": preberi občutljive informacije vseh blokad IP - "admin:read:reports": preberi občutljive informacije vseh prijav in prijavljenih računov - "admin:write": spremeni vse podatke na strežniku - "admin:write:accounts": izvedi moderirana dejanja na računih - "admin:write:canonical_email_blocks": izvedi moderirana dejanja na blokadah kanoničnih e-računov - "admin:write:domain_allows": izvedi moderirana dejanja na dovolilih domen - "admin:write:domain_blocks": izvedi moderirana dejanja na blokadah domen - "admin:write:email_domain_blocks": izvedi moderirana dejanja na blokadah domen e-računov - "admin:write:ip_blocks": izvedi moderirana dejanja na blokadah IP - "admin:write:reports": izvedi moderirana dejanja na prijavah + admin:read: preberi vse podatke na strežniku + admin:read:accounts: preberi občutljive informacije vseh računov + admin:read:canonical_email_blocks: preberi občutljive informacije vseh blokad kanoničnih e-računov + admin:read:domain_allows: preberi občutljive informacije vseh dovolil domene + admin:read:domain_blocks: preberi občutljive informacije vseh blokad domen + admin:read:email_domain_blocks: preberi občutljive informacije vseh blokad domen e-računov + admin:read:ip_blocks: preberi občutljive informacije vseh blokad IP + admin:read:reports: preberi občutljive informacije vseh prijav in prijavljenih računov + admin:write: spremeni vse podatke na strežniku + admin:write:accounts: izvedi moderirana dejanja na računih + admin:write:canonical_email_blocks: izvedi moderirana dejanja na blokadah kanoničnih e-računov + admin:write:domain_allows: izvedi moderirana dejanja na dovolilih domen + admin:write:domain_blocks: izvedi moderirana dejanja na blokadah domen + admin:write:email_domain_blocks: izvedi moderirana dejanja na blokadah domen e-računov + admin:write:ip_blocks: izvedi moderirana dejanja na blokadah IP + admin:write:reports: izvedi moderirana dejanja na prijavah crypto: Uporabi šifriranje od konca do konca follow: spremeni razmerja med računi push: prejmi potisna obvestila read: preberi vse podatke svojega računa - "read:accounts": oglejte si podrobnosti računov - "read:blocks": oglejte si svoje blokirane - "read:bookmarks": oglejte si svoje zaznamke - "read:favourites": oglejte si svoje priljubljene - "read:filters": oglejte si svoje filtre - "read:follows": oglejte si svoje sledilce - "read:lists": oglejte si svoje sezname - "read:mutes": oglejte si svoje utišane - "read:notifications": oglejte si svoja obvestila - "read:reports": oglejte si svoje prijave - "read:search": iščite v svojem imenu - "read:statuses": oglejte si vse objave + read:accounts: oglejte si podrobnosti računov + read:blocks: oglejte si svoje blokirane + read:bookmarks: oglejte si svoje zaznamke + read:favourites: oglejte si svoje priljubljene + read:filters: oglejte si svoje filtre + read:follows: oglejte si svoje sledilce + read:lists: oglejte si svoje sezname + read:mutes: oglejte si svoje utišane + read:notifications: oglejte si svoja obvestila + read:reports: oglejte si svoje prijave + read:search: iščite v svojem imenu + read:statuses: oglejte si vse objave write: spremenite vse podatke svojega računa - "write:accounts": spremenite svoj profil - "write:blocks": blokirajte račune in domene - "write:bookmarks": objave zaznamkov - "write:conversations": utišaj in izbriši pogovore - "write:favourites": priljubljene objave - "write:filters": ustvari filtre - "write:follows": sledi osebam - "write:lists": ustvarite sezname - "write:media": pošlji medije - "write:mutes": utišaj osebe in pogovore - "write:notifications": počisti svoja obvestila - "write:reports": prijavi druge osebe - "write:statuses": objavi objave + write:accounts: spremenite svoj profil + write:blocks: blokirajte račune in domene + write:bookmarks: objave zaznamkov + write:conversations: utišaj in izbriši pogovore + write:favourites: priljubljene objave + write:filters: ustvari filtre + write:follows: sledi osebam + write:lists: ustvarite sezname + write:media: pošlji medije + write:mutes: utišaj osebe in pogovore + write:notifications: počisti svoja obvestila + write:reports: prijavi druge osebe + write:statuses: objavi objave diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 3256e44aa92898..308a5429a6da88 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -1,3 +1,4 @@ +--- sq: activerecord: attributes: @@ -146,22 +147,22 @@ sq: application: title: Lypset autorizim OAuth scopes: - "admin:read": të lexojë krejt të dhënat te shërbyesi - "admin:read:accounts": të lexojë hollësi rezervat të krejt llogarive - "admin:read:canonical_email_blocks": të lexojë hollësi rezervat të krejt bllokimeve të zakonshëm të email-eve - "admin:read:domain_allows": të lexojë hollësi rezervat të krejt lejimeve të përkatësive - "admin:read:domain_blocks": të lexojë hollësi rezervat të krejt bllokimeve të përkatësive - "admin:read:email_domain_blocks": të lexojë hollësi rezervat të krejt bllokimeve të përkatësive të email-eve - "admin:read:ip_blocks": të lexojë hollësi rezervat të krejt bllokimeve të IP-ve - "admin:read:reports": të lexojë hollësi rezervat të krejt raportimeve dhe të llogarive të raportuara - "admin:write": të përpunojë krejt të dhënat në shërbyes - "admin:write:accounts": të kryejë veprime moderimi në llogaritë - "admin:write:canonical_email_blocks": të kryejë veprime moderimi në bllokime të zakonshëm të email-eve - "admin:write:domain_allows": të kryejë veprime moderimi mbi lejime përkatësish - "admin:write:domain_blocks": të kryejë veprime moderimi mbi bllokime përkatësish - "admin:write:email_domain_blocks": të kryejë veprime moderimi mbi lejime përkatësish email - "admin:write:ip_blocks": të kryejë veprime moderimi mbi bllokime IP-sh - "admin:write:reports": të kryejë veprime moderimi në raportime + admin:read: të lexojë krejt të dhënat te shërbyesi + admin:read:accounts: të lexojë hollësi rezervat të krejt llogarive + admin:read:canonical_email_blocks: të lexojë hollësi rezervat të krejt bllokimeve të zakonshëm të email-eve + admin:read:domain_allows: të lexojë hollësi rezervat të krejt lejimeve të përkatësive + admin:read:domain_blocks: të lexojë hollësi rezervat të krejt bllokimeve të përkatësive + admin:read:email_domain_blocks: të lexojë hollësi rezervat të krejt bllokimeve të përkatësive të email-eve + admin:read:ip_blocks: të lexojë hollësi rezervat të krejt bllokimeve të IP-ve + admin:read:reports: të lexojë hollësi rezervat të krejt raportimeve dhe të llogarive të raportuara + admin:write: të përpunojë krejt të dhënat në shërbyes + admin:write:accounts: të kryejë veprime moderimi në llogaritë + admin:write:canonical_email_blocks: të kryejë veprime moderimi në bllokime të zakonshëm të email-eve + admin:write:domain_allows: të kryejë veprime moderimi mbi lejime përkatësish + admin:write:domain_blocks: të kryejë veprime moderimi mbi bllokime përkatësish + admin:write:email_domain_blocks: të kryejë veprime moderimi mbi lejime përkatësish email + admin:write:ip_blocks: të kryejë veprime moderimi mbi bllokime IP-sh + admin:write:reports: të kryejë veprime moderimi në raportime crypto: përdor fshehtëzim skaj-më-skaj follow: të ndryshojë marrëdhënie llogarish push: të marrë njoftime push për ju diff --git a/config/locales/doorkeeper.sr-Latn.yml b/config/locales/doorkeeper.sr-Latn.yml index 4b8a8b34360c5d..a4eb7bd33e6e6d 100644 --- a/config/locales/doorkeeper.sr-Latn.yml +++ b/config/locales/doorkeeper.sr-Latn.yml @@ -1,3 +1,4 @@ +--- sr-Latn: activerecord: attributes: @@ -146,49 +147,49 @@ sr-Latn: application: title: OAuth autorizacija potrebna scopes: - "admin:read": čitanje svih podataka na serveru - "admin:read:accounts": čitanje osetljivih podataka za sve naloge - "admin:read:canonical_email_blocks": pročitaj osetljive informacije i kanonske imejl blokove - "admin:read:domain_allows": pročitaj osetljive informacije za sve dozvole domena - "admin:read:domain_blocks": pročitaj osetljive informacije za sve blokove domena - "admin:read:email_domain_blocks": pročitaj osetljive informacije svih blokova imejl domena - "admin:read:ip_blocks": pročitaj osetljive informacije za sve IP blokove - "admin:read:reports": čitanje osetljivih podataka svih izveštaja i prijavljenih naloga - "admin:write": menjanje svih podataka na serveru - "admin:write:accounts": vršenje moderatorskih aktivnosti nad nalozima - "admin:write:canonical_email_blocks": izvrši moderacijske radnje nad kanonskim imejl blokovima - "admin:write:domain_allows": izvrši moderacijske radnje nad dozvolama domena - "admin:write:domain_blocks": izvrši moderatorske aktivnosti na blokovima domena - "admin:write:email_domain_blocks": izvrši moderacijske radnje nad blokovima imejl domena - "admin:write:ip_blocks": izvrši moderatorske aktivnosti na IP blokovima - "admin:write:reports": vršenje moderatorskih aktivnosti nad izveštajima + admin:read: čitanje svih podataka na serveru + admin:read:accounts: čitanje osetljivih podataka za sve naloge + admin:read:canonical_email_blocks: pročitaj osetljive informacije i kanonske imejl blokove + admin:read:domain_allows: pročitaj osetljive informacije za sve dozvole domena + admin:read:domain_blocks: pročitaj osetljive informacije za sve blokove domena + admin:read:email_domain_blocks: pročitaj osetljive informacije svih blokova imejl domena + admin:read:ip_blocks: pročitaj osetljive informacije za sve IP blokove + admin:read:reports: čitanje osetljivih podataka svih izveštaja i prijavljenih naloga + admin:write: menjanje svih podataka na serveru + admin:write:accounts: vršenje moderatorskih aktivnosti nad nalozima + admin:write:canonical_email_blocks: izvrši moderacijske radnje nad kanonskim imejl blokovima + admin:write:domain_allows: izvrši moderacijske radnje nad dozvolama domena + admin:write:domain_blocks: izvrši moderatorske aktivnosti na blokovima domena + admin:write:email_domain_blocks: izvrši moderacijske radnje nad blokovima imejl domena + admin:write:ip_blocks: izvrši moderatorske aktivnosti na IP blokovima + admin:write:reports: vršenje moderatorskih aktivnosti nad izveštajima crypto: korišćenje end-to-end enkripcije follow: menja odnose naloga push: primanje prosleđenih obaveštenja read: čita podatke Vašeg naloga - "read:accounts": pogledaj informacije o nalozima - "read:blocks": pogledaj svoje blokirane - "read:bookmarks": pogledaj svoje obeleživače - "read:favourites": pogledaj svoje omiljene - "read:filters": pogledaj svoje filtere - "read:follows": pogledaj koga pratiš - "read:lists": pogledaj svoje liste - "read:mutes": pogledaj ignorisanja - "read:notifications": pogledaj svoja obaveštenja - "read:reports": pogledaj svoje prijave - "read:search": pretraži u svoje ime - "read:statuses": pogledaj sve objave + read:accounts: pogledaj informacije o nalozima + read:blocks: pogledaj svoje blokirane + read:bookmarks: pogledaj svoje obeleživače + read:favourites: pogledaj svoje omiljene + read:filters: pogledaj svoje filtere + read:follows: pogledaj koga pratiš + read:lists: pogledaj svoje liste + read:mutes: pogledaj ignorisanja + read:notifications: pogledaj svoja obaveštenja + read:reports: pogledaj svoje prijave + read:search: pretraži u svoje ime + read:statuses: pogledaj sve objave write: objavljuje statuse u Vaše ime - "write:accounts": izmeni svoj profil - "write:blocks": blokiraj naloge i domene - "write:bookmarks": obeleži objave - "write:conversations": ignoriši i izbriši razgovore - "write:favourites": omiljene objave - "write:filters": kreiraj filtere - "write:follows": prati korisnike - "write:lists": kreiraj liste - "write:media": otpremi medijske datoteke - "write:mutes": ignoriši korisnike i razgovore - "write:notifications": obriši svoja obaveštenja - "write:reports": prijavi druge korisnike - "write:statuses": objavi objave + write:accounts: izmeni svoj profil + write:blocks: blokiraj naloge i domene + write:bookmarks: obeleži objave + write:conversations: ignoriši i izbriši razgovore + write:favourites: omiljene objave + write:filters: kreiraj filtere + write:follows: prati korisnike + write:lists: kreiraj liste + write:media: otpremi medijske datoteke + write:mutes: ignoriši korisnike i razgovore + write:notifications: obriši svoja obaveštenja + write:reports: prijavi druge korisnike + write:statuses: objavi objave diff --git a/config/locales/doorkeeper.sr.yml b/config/locales/doorkeeper.sr.yml index 74114d06a76be2..a0439d606086bd 100644 --- a/config/locales/doorkeeper.sr.yml +++ b/config/locales/doorkeeper.sr.yml @@ -1,3 +1,4 @@ +--- sr: activerecord: attributes: @@ -146,49 +147,49 @@ sr: application: title: OAuth ауторизација потребна scopes: - "admin:read": читање свих података на серверу - "admin:read:accounts": читање осетљивих података за све налоге - "admin:read:canonical_email_blocks": прочитај осетљиве информације и канонске имејл блокове - "admin:read:domain_allows": прочитај осетљиве информације за све дозволе домена - "admin:read:domain_blocks": прочитај осетљиве информације за све блокове домена - "admin:read:email_domain_blocks": прочитај осетљиве информације свих блокова имејл домена - "admin:read:ip_blocks": прочитај осетљиве информације за све IP блокове - "admin:read:reports": читање осетљивих података свих извештаја и пријављених налога - "admin:write": мењање свих података на серверу - "admin:write:accounts": вршење модераторских активности над налозима - "admin:write:canonical_email_blocks": изврши модерацијске радње над канонским имејл блоковима - "admin:write:domain_allows": изврши модерацијске радње над дозволама домена - "admin:write:domain_blocks": изврши модераторске активности на блоковима домена - "admin:write:email_domain_blocks": изврши модерацијске радње над блоковима имејл домена - "admin:write:ip_blocks": изврши модераторске активности на IP блоковима - "admin:write:reports": вршење модераторских активности над извештајима + admin:read: читање свих података на серверу + admin:read:accounts: читање осетљивих података за све налоге + admin:read:canonical_email_blocks: прочитај осетљиве информације и канонске имејл блокове + admin:read:domain_allows: прочитај осетљиве информације за све дозволе домена + admin:read:domain_blocks: прочитај осетљиве информације за све блокове домена + admin:read:email_domain_blocks: прочитај осетљиве информације свих блокова имејл домена + admin:read:ip_blocks: прочитај осетљиве информације за све IP блокове + admin:read:reports: читање осетљивих података свих извештаја и пријављених налога + admin:write: мењање свих података на серверу + admin:write:accounts: вршење модераторских активности над налозима + admin:write:canonical_email_blocks: изврши модерацијске радње над канонским имејл блоковима + admin:write:domain_allows: изврши модерацијске радње над дозволама домена + admin:write:domain_blocks: изврши модераторске активности на блоковима домена + admin:write:email_domain_blocks: изврши модерацијске радње над блоковима имејл домена + admin:write:ip_blocks: изврши модераторске активности на IP блоковима + admin:write:reports: вршење модераторских активности над извештајима crypto: коришћење end-to-end енкрипције 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: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:conversations": игнориши и избриши разговоре - "write:favourites": омиљене објаве - "write:filters": креирај филтере - "write:follows": прати кориснике - "write:lists": креирај листе - "write:media": отпреми медијске датотеке - "write:mutes": игнориши кориснике и разговоре - "write:notifications": обриши своја обавештења - "write:reports": пријави друге кориснике - "write:statuses": објави објаве + write:accounts: измени свој профил + write:blocks: блокирај налоге и домене + write:bookmarks: обележи објаве + write:conversations: игнориши и избриши разговоре + write:favourites: омиљене објаве + write:filters: креирај филтере + write:follows: прати кориснике + write:lists: креирај листе + write:media: отпреми медијске датотеке + write:mutes: игнориши кориснике и разговоре + write:notifications: обриши своја обавештења + write:reports: пријави друге кориснике + write:statuses: објави објаве diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 806ee1aeda97b4..f2c8bd34b8c6c2 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -1,3 +1,4 @@ +--- sv: activerecord: attributes: @@ -146,22 +147,22 @@ sv: application: title: OAuth-godkännande krävs scopes: - "admin:read": läsa all data på servern - "admin:read:accounts": läsa känslig information om alla konton - "admin:read:canonical_email_blocks": läsa känslig information om alla kanoniska e-postblockeringar - "admin:read:domain_allows": läsa känslig information om alla tillåtna domäner - "admin:read:domain_blocks": läsa känslig information om alla domänblockeringar - "admin:read:email_domain_blocks": läsa känslig information om alla blockerade e-postdomäner - "admin:read:ip_blocks": läsa känslig information om alla IP-adressblockeringar - "admin:read:reports": läsa känslig information om alla rapporter och rapporterade konton - "admin:write": ändra all data på servern - "admin:write:accounts": utföra modereringsåtgärder på konton - "admin:write:canonical_email_blocks": utföra modereringsåtgärder på kanoniska e-postblockeringar - "admin:write:domain_allows": utföra modereringsåtgärder på tillåtna domäner - "admin:write:domain_blocks": utföra modereringsåtgärder på domänblockeringar - "admin:write:email_domain_blocks": utföra modereringsåtgärder på e-postdomänblockeringar - "admin:write:ip_blocks": utföra modereringsåtgärder på IP-adressblockeringar - "admin:write:reports": utföra modereringsåtgärder på rapporter + admin:read: läsa all data på servern + admin:read:accounts: läsa känslig information om alla konton + admin:read:canonical_email_blocks: läsa känslig information om alla kanoniska e-postblockeringar + admin:read:domain_allows: läsa känslig information om alla tillåtna domäner + admin:read:domain_blocks: läsa känslig information om alla domänblockeringar + admin:read:email_domain_blocks: läsa känslig information om alla blockerade e-postdomäner + admin:read:ip_blocks: läsa känslig information om alla IP-adressblockeringar + admin:read:reports: läsa känslig information om alla rapporter och rapporterade konton + admin:write: ändra all data på servern + admin:write:accounts: utföra modereringsåtgärder på konton + admin:write:canonical_email_blocks: utföra modereringsåtgärder på kanoniska e-postblockeringar + admin:write:domain_allows: utföra modereringsåtgärder på tillåtna domäner + admin:write:domain_blocks: utföra modereringsåtgärder på domänblockeringar + admin:write:email_domain_blocks: utföra modereringsåtgärder på e-postdomänblockeringar + admin:write:ip_blocks: utföra modereringsåtgärder på IP-adressblockeringar + admin:write:reports: utföra modereringsåtgärder på rapporter crypto: använd obruten kryptering follow: modifiera kontorelationer push: ta emot dina push-notiser diff --git a/config/locales/doorkeeper.ta.yml b/config/locales/doorkeeper.ta.yml index 1aaebea95ffc26..3cba7d9d4c9236 100644 --- a/config/locales/doorkeeper.ta.yml +++ b/config/locales/doorkeeper.ta.yml @@ -1,3 +1,4 @@ +--- ta: doorkeeper: applications: diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index b186ba5de04afb..3c2c75565b629d 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -1,3 +1,4 @@ +--- th: activerecord: attributes: @@ -146,49 +147,49 @@ th: application: title: ต้องการการอนุญาต OAuth scopes: - "admin:read": อ่านข้อมูลทั้งหมดในเซิร์ฟเวอร์ - "admin:read:accounts": อ่านข้อมูลที่ละเอียดอ่อนของบัญชีทั้งหมด - "admin:read:canonical_email_blocks": อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นอีเมลมาตรฐานทั้งหมด - "admin:read:domain_allows": อ่านข้อมูลที่ละเอียดอ่อนของการอนุญาตโดเมนทั้งหมด - "admin:read:domain_blocks": อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นโดเมนทั้งหมด - "admin:read:email_domain_blocks": อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นโดเมนอีเมลทั้งหมด - "admin:read:ip_blocks": อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้น IP ทั้งหมด - "admin:read:reports": อ่านข้อมูลที่ละเอียดอ่อนของรายงานและบัญชีที่ได้รับการรายงานทั้งหมด - "admin:write": ปรับเปลี่ยนข้อมูลทั้งหมดในเซิร์ฟเวอร์ - "admin:write:accounts": ทำการกระทำการควบคุมบัญชี - "admin:write:canonical_email_blocks": ทำการกระทำการควบคุมการปิดกั้นอีเมลมาตรฐาน - "admin:write:domain_allows": ทำการกระทำการควบคุมการอนุญาตโดเมน - "admin:write:domain_blocks": ทำการกระทำการควบคุมการปิดกั้นโดเมน - "admin:write:email_domain_blocks": ทำการกระทำการควบคุมการปิดกั้นโดเมนอีเมล - "admin:write:ip_blocks": ทำการกระทำการควบคุมการปิดกั้น IP - "admin:write:reports": ทำการกระทำการควบคุมรายงาน + admin:read: อ่านข้อมูลทั้งหมดในเซิร์ฟเวอร์ + admin:read:accounts: อ่านข้อมูลที่ละเอียดอ่อนของบัญชีทั้งหมด + admin:read:canonical_email_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นอีเมลมาตรฐานทั้งหมด + admin:read:domain_allows: อ่านข้อมูลที่ละเอียดอ่อนของการอนุญาตโดเมนทั้งหมด + admin:read:domain_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นโดเมนทั้งหมด + admin:read:email_domain_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้นโดเมนอีเมลทั้งหมด + admin:read:ip_blocks: อ่านข้อมูลที่ละเอียดอ่อนของการปิดกั้น IP ทั้งหมด + admin:read:reports: อ่านข้อมูลที่ละเอียดอ่อนของรายงานและบัญชีที่ได้รับการรายงานทั้งหมด + admin:write: ปรับเปลี่ยนข้อมูลทั้งหมดในเซิร์ฟเวอร์ + admin:write:accounts: ทำการกระทำการควบคุมบัญชี + admin:write:canonical_email_blocks: ทำการกระทำการควบคุมการปิดกั้นอีเมลมาตรฐาน + admin:write:domain_allows: ทำการกระทำการควบคุมการอนุญาตโดเมน + admin:write:domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมน + admin:write:email_domain_blocks: ทำการกระทำการควบคุมการปิดกั้นโดเมนอีเมล + admin:write:ip_blocks: ทำการกระทำการควบคุมการปิดกั้น IP + admin:write:reports: ทำการกระทำการควบคุมรายงาน crypto: ใช้การเข้ารหัสแบบต้นทางถึงปลายทาง 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: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:conversations": ซ่อนและลบการสนทนา - "write:favourites": ชื่นชอบโพสต์ - "write:filters": สร้างตัวกรอง - "write:follows": ติดตามผู้คน - "write:lists": สร้างรายการ - "write:media": อัปโหลดไฟล์สื่อ - "write:mutes": ซ่อนผู้คนและการสนทนา - "write:notifications": ล้างการแจ้งเตือนของคุณ - "write:reports": รายงานผู้คนอื่น ๆ - "write:statuses": เผยแพร่โพสต์ + write:accounts: ปรับเปลี่ยนโปรไฟล์ของคุณ + write:blocks: ปิดกั้นบัญชีและโดเมน + write:bookmarks: เพิ่มที่คั่นหน้าโพสต์ + write:conversations: ซ่อนและลบการสนทนา + write:favourites: ชื่นชอบโพสต์ + write:filters: สร้างตัวกรอง + write:follows: ติดตามผู้คน + write:lists: สร้างรายการ + write:media: อัปโหลดไฟล์สื่อ + write:mutes: ซ่อนผู้คนและการสนทนา + write:notifications: ล้างการแจ้งเตือนของคุณ + write:reports: รายงานผู้คนอื่น ๆ + write:statuses: เผยแพร่โพสต์ diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index e6d0bb29179f75..fce8c646e818c6 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -1,3 +1,4 @@ +--- tr: activerecord: attributes: @@ -70,7 +71,7 @@ tr: confirmations: revoke: Emin misiniz? index: - authorized_at: '%{date} tarihinde onaylandı' + authorized_at: "%{date} tarihinde onaylandı" description_html: Bunlar, API aracılığıyla hesabınıza erişebilen uygulamalardır. Eğer burada tanımadığınız uygulamalar veya kötü davranan bir uygulama var, erişimini kaldırabilirsiniz. last_used_at: En son %{date} tarihinde kullanıldı never_used: Hiç kullanılmadı @@ -146,22 +147,22 @@ tr: application: title: OAuth yetkilendirme gerekli scopes: - "admin:read": sunucudaki tüm verileri okuma - "admin:read:accounts": tüm hesapların hassas bilgilerini okuma - "admin:read:canonical_email_blocks": tüm kurallı e-posta engellerinin hassas bilgilerini okuma - "admin:read:domain_allows": tüm alan adı izinlerinin hassas bilgilerini okuma - "admin:read:domain_blocks": tüm alan adı engellerinin hassas bilgilerini okuma - "admin:read:email_domain_blocks": tüm e-posta alan adı engellerinin hassas bilgilerini okuma - "admin:read:ip_blocks": tüm IP engellerinin 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": hesaplarda denetleme eylemleri gerçekleştirin - "admin:write:canonical_email_blocks": kurallı e-posta engellemeleri için denetleme eylemleri gerçekleştirin - "admin:write:domain_allows": alan adı izinleri için denetleme eylemleri gerçekleştirin - "admin:write:domain_blocks": alan adı engellemeleri için denetleme eylemleri gerçekleştirin - "admin:write:email_domain_blocks": e-posta alan adı engellemeleri için denetleme eylemleri gerçekleştirin - "admin:write:ip_blocks": IP engellemeleri için denetleme eylemleri gerçekleştirin - "admin:write:reports": raporlarda denetleme eylemleri gerçekleştirin + admin:read: sunucudaki tüm verileri okuma + admin:read:accounts: tüm hesapların hassas bilgilerini okuma + admin:read:canonical_email_blocks: tüm kurallı e-posta engellerinin hassas bilgilerini okuma + admin:read:domain_allows: tüm alan adı izinlerinin hassas bilgilerini okuma + admin:read:domain_blocks: tüm alan adı engellerinin hassas bilgilerini okuma + admin:read:email_domain_blocks: tüm e-posta alan adı engellerinin hassas bilgilerini okuma + admin:read:ip_blocks: tüm IP engellerinin 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: hesaplarda denetleme eylemleri gerçekleştirin + admin:write:canonical_email_blocks: kurallı e-posta engellemeleri için denetleme eylemleri gerçekleştirin + admin:write:domain_allows: alan adı izinleri için denetleme eylemleri gerçekleştirin + admin:write:domain_blocks: alan adı engellemeleri için denetleme eylemleri gerçekleştirin + admin:write:email_domain_blocks: e-posta alan adı engellemeleri için denetleme eylemleri gerçekleştirin + admin:write:ip_blocks: IP engellemeleri için denetleme eylemleri gerçekleştirin + admin:write:reports: raporlarda denetleme eylemleri gerçekleştirin crypto: uçtan uca şifreleme kullan follow: hesap ilişkilerini değiştirin push: anlık bildirimlerizi alın diff --git a/config/locales/doorkeeper.tt.yml b/config/locales/doorkeeper.tt.yml index 7fff38b8469844..876e7138db3559 100644 --- a/config/locales/doorkeeper.tt.yml +++ b/config/locales/doorkeeper.tt.yml @@ -1,3 +1,4 @@ +--- tt: activerecord: attributes: diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml index 09964d79f3f923..8af404a7366c19 100644 --- a/config/locales/doorkeeper.uk.yml +++ b/config/locales/doorkeeper.uk.yml @@ -1,3 +1,4 @@ +--- uk: activerecord: attributes: @@ -146,22 +147,28 @@ uk: application: title: Необхідна авторизація OAuth scopes: - "admin:read": читати всі дані на сервері - "admin:read:accounts": читати конфіденційну інформацію усіх акаунтів - "admin:read:canonical_email_blocks": читати конфіденційну інформацію всіх канонічних блоків електронної пошти - "admin:read:domain_allows": читати конфіденційну інформацію всіх доменів дозволено - "admin:read:domain_blocks": читати конфіденційну інформацію всіх доменних блоків - "admin:read:email_domain_blocks": читати конфіденційну інформацію всіх блоків доменів електронної пошти - "admin:read:ip_blocks": читати конфіденційну інформацію всіх IP блоків - "admin:read:reports": читати дражливу інформацію усіх скарг та облікових записів зі скаргами - "admin:write": модифікувати всі дані на сервері - "admin:write:accounts": модерувати облікові записи - "admin:write:canonical_email_blocks": "здійснювати модераторські дії щодо канонічних поштових блоків\n" - "admin:write:domain_allows": модерувати домени дозволено - "admin:write:domain_blocks": "здійснювати модераторські дії щодо доменних блоків\n" - "admin:write:email_domain_blocks": здійснювати модераторські дії щодо блокування поштових доменів - "admin:write:ip_blocks": "здійснювати дії з модерації IP-блоків\n" - "admin:write:reports": модерувати скарги + admin:read: читати всі дані на сервері + admin:read:accounts: читати конфіденційну інформацію усіх акаунтів + admin:read:canonical_email_blocks: читати конфіденційну інформацію всіх канонічних блоків електронної пошти + admin:read:domain_allows: читати конфіденційну інформацію всіх доменів дозволено + admin:read:domain_blocks: читати конфіденційну інформацію всіх доменних блоків + admin:read:email_domain_blocks: читати конфіденційну інформацію всіх блоків доменів електронної пошти + admin:read:ip_blocks: читати конфіденційну інформацію всіх IP блоків + admin:read:reports: читати дражливу інформацію усіх скарг та облікових записів зі скаргами + admin:write: модифікувати всі дані на сервері + admin:write:accounts: модерувати облікові записи + admin:write:canonical_email_blocks: 'здійснювати модераторські дії щодо канонічних поштових блоків + + ' + admin:write:domain_allows: модерувати домени дозволено + admin:write:domain_blocks: 'здійснювати модераторські дії щодо доменних блоків + + ' + admin:write:email_domain_blocks: здійснювати модераторські дії щодо блокування поштових доменів + admin:write:ip_blocks: 'здійснювати дії з модерації IP-блоків + + ' + admin:write:reports: модерувати скарги crypto: використовувати наскрізне шифрування follow: змінювати стосунки облікового запису push: отримувати Ваші Push-повідомлення @@ -179,16 +186,16 @@ uk: read:search: шукати від вашого імені read:statuses: бачити всі дописи write: змінювати усі дані вашого облікового запису - "write:accounts": змінювати ваш профіль - "write:blocks": блокувати облікові записи і домени - "write:bookmarks": додавати дописи до закладок - "write:conversations": приховати й видалити бесіди - "write:favourites": вподобані дописи - "write:filters": створювати фільтри - "write:follows": підписуйтесь на людей - "write:lists": створювайте списки - "write:media": завантажити медіафайли - "write:mutes": приховувати людей або бесіди - "write:notifications": очищувати Ваші сповіщення - "write:reports": надіслати скаргу про людей - "write:statuses": публікувати дописи + write:accounts: змінювати ваш профіль + write:blocks: блокувати облікові записи і домени + write:bookmarks: додавати дописи до закладок + write:conversations: приховати й видалити бесіди + write:favourites: вподобані дописи + write:filters: створювати фільтри + write:follows: підписуйтесь на людей + write:lists: створювайте списки + write:media: завантажити медіафайли + write:mutes: приховувати людей або бесіди + write:notifications: очищувати Ваші сповіщення + write:reports: надіслати скаргу про людей + write:statuses: публікувати дописи diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 32da0c2ec3080e..8375795273060f 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -1,3 +1,4 @@ +--- vi: activerecord: attributes: diff --git a/config/locales/doorkeeper.zgh.yml b/config/locales/doorkeeper.zgh.yml index 3d05c81653e1d3..53c5181d4fc4af 100644 --- a/config/locales/doorkeeper.zgh.yml +++ b/config/locales/doorkeeper.zgh.yml @@ -1,3 +1,4 @@ +--- zgh: activerecord: attributes: @@ -31,7 +32,7 @@ zgh: title: ⵜⵉⵙⵏⵙⵉ ⵜⴰⵎⴰⵢⵏⵓⵜ show: actions: ⵜⵉⴳⴰⵡⵉⵏ - title: 'ⵜⵉⵙⵏⵙⵉ %{name}' + title: ⵜⵉⵙⵏⵙⵉ %{name} authorizations: buttons: authorize: ⵙⵙⵓⵔⴳ @@ -54,21 +55,21 @@ zgh: nav: applications: ⵜⵉⵙⵏⵙⵉⵡⵉⵏ scopes: - "admin:read": ⵖⵔ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ - "admin:write": ⵙⵏⴼⵍ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ + admin:read: ⵖⵔ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ + admin:write: ⵙⵏⴼⵍ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⴳ ⵓⵎⴰⴽⴽⴰⵢ read: ⵖⵔ ⵉⴼⵙⴽⴰ ⴰⴽⴽⵯ ⵏ ⵓⵎⵉⴹⴰⵏ - "read:filters": ⵥⵕ ⵉⵙⵜⴰⵢⵏ ⵏⵏⴽ - "read:follows": ⵥⵕ ⵉⵎⴹⴼⴰⵔⵏ ⵏⵏⴽ - "read:lists": ⵥⵕ ⵜⵉⵍⴳⴰⵎⵉⵏ ⵏⵏⴽ - "read:notifications": ⵥⵕ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ - "read:search": ⵔⵣⵓ ⵙ ⵢⵉⵙⵎ ⵏⵏⴽ - "read:statuses": ⵥⵕ ⴰⴷⴷⴰⴷⵏ ⴰⴽⴽⵯ + 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": ⴼⵙⵔ ⵜⵉⵥⵕⴰⴳⵉⵏ + write:accounts: ⵙⵏⴼⵍ ⵉⴼⵔⵙ ⵏⵏⴽ + write:blocks: ⴳⴷⵍ ⵉⵎⵉⴹⴰⵏⵏ ⴷ ⵢⵉⴳⵔⴰⵏ + write:follows: ⴹⴼⵕ ⵎⵉⴷⴷⵏ + write:lists: ⵙⵏⴼⵍⵓⵍ ⵜⵉⵍⴳⴰⵎⵉⵏ + write:mutes: ⵥⵥⵉⵥⵏ ⵎⵉⴷⴷⵏ ⴷ ⵉⵎⵙⴰⵡⴰⵍⵏ + write:notifications: ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ ⵏⵏⴽ + write:reports: ⵎⵍ ⵎⵉⴷⴷⵏ ⵏⵏⵉⴹⵏ + write:statuses: ⴼⵙⵔ ⵜⵉⵥⵕⴰⴳⵉⵏ diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 4a32cd9553cbef..36c7fb81277b8c 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -1,3 +1,4 @@ +--- zh-CN: activerecord: attributes: @@ -11,7 +12,7 @@ zh-CN: doorkeeper/application: attributes: redirect_uri: - fragment_present: '不能包含网页书签(#)' + fragment_present: 不能包含网页书签(#) invalid_uri: 必须是有效的 URL 地址。 relative_uri: 必须是绝对的 URL 地址。 secured_uri: 必须是 HTTPS/SSL 的 URL 地址 @@ -51,7 +52,7 @@ zh-CN: callback_urls: 回调 URL scopes: 权限范围 secret: 应用密钥 - title: '应用名称:%{name}' + title: 应用名称:%{name} authorizations: buttons: authorize: 同意授权 @@ -85,7 +86,7 @@ zh-CN: invalid_grant: 授权方式无效、过期或已被撤销、与授权请求中的回调地址不一致,或使用了其他应用的回调地址 invalid_redirect_uri: 无效的登录回调地址 invalid_request: - missing_param: '缺少必需的参数:%{value}' + missing_param: 缺少必需的参数:%{value} request_not_authorized: 请求需要被授权。授权请求所需的参数缺失或无效。 unknown: 该请求缺少一个必要的参数,包括一个不支持的参数值,或者其他格式错误。 invalid_resource_owner: 资源所有者认证无效,或找不到所有者 @@ -146,38 +147,38 @@ zh-CN: application: title: 需要 OAuth 认证 scopes: - "admin:read": 读取服务器上的所有数据 - "admin:read:accounts": 读取所有账号的敏感信息 - "admin:read:canonical_email_blocks": 读取所有标准电子邮件块的敏感信息 - "admin:read:domain_allows": 读取所有域的敏感信息 - "admin:read:domain_blocks": 读取所有域块的敏感信息 - "admin:read:email_domain_blocks": 读取所有电子邮件域块的敏感信息 - "admin:read:ip_blocks": 读取所有IP块的敏感信息 - "admin:read:reports": 读取所有举报和被举报账号的敏感信息 - "admin:write": 修改服务器上的所有数据 - "admin:write:accounts": 对账号执行管理操作 - "admin:write:canonical_email_blocks": 在标准电子邮件块上执行管理操作 - "admin:write:domain_allows": 在域上执行管理操作 - "admin:write:domain_blocks": 在域块上执行管理操作 - "admin:write:email_domain_blocks": 在电子邮件域块上执行管理操作 - "admin:write:ip_blocks": 在 IP 块上执行管理操作 - "admin:write:reports": 对举报执行管理操作 + admin:read: 读取服务器上的所有数据 + admin:read:accounts: 读取所有账号的敏感信息 + admin:read:canonical_email_blocks: 读取所有标准电子邮件块的敏感信息 + admin:read:domain_allows: 读取所有域的敏感信息 + admin:read:domain_blocks: 读取所有域块的敏感信息 + admin:read:email_domain_blocks: 读取所有电子邮件域块的敏感信息 + admin:read:ip_blocks: 读取所有IP块的敏感信息 + admin:read:reports: 读取所有举报和被举报账号的敏感信息 + admin:write: 修改服务器上的所有数据 + admin:write:accounts: 对账号执行管理操作 + admin:write:canonical_email_blocks: 在标准电子邮件块上执行管理操作 + admin:write:domain_allows: 在域上执行管理操作 + admin:write:domain_blocks: 在域块上执行管理操作 + admin:write:email_domain_blocks: 在电子邮件域块上执行管理操作 + admin:write:ip_blocks: 在 IP 块上执行管理操作 + admin:write:reports: 对举报执行管理操作 crypto: 使用端到端加密 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: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: 屏蔽账号和域名 diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml index a08409eb5beaf1..79629b12febf39 100644 --- a/config/locales/doorkeeper.zh-HK.yml +++ b/config/locales/doorkeeper.zh-HK.yml @@ -1,3 +1,4 @@ +--- zh-HK: activerecord: attributes: @@ -51,7 +52,7 @@ zh-HK: callback_urls: 回傳網址 (Callback URL) scopes: 權限範圍 (Scopes) secret: 用戶程式密碼 (Client secret) - title: '應用程式︰ %{name}' + title: 應用程式︰ %{name} authorizations: buttons: authorize: 批准 @@ -85,7 +86,7 @@ zh-HK: invalid_grant: 所提供的認證申請 (authorization grant) 不正確、過期、已被取消、或者無法對應授權請求 (authorization request) 內的轉接 URI,或者屬於別的用戶程式。 invalid_redirect_uri: 不正確的轉接網址。 invalid_request: - missing_param: '缺少必要的參數:%{value}.' + missing_param: 缺少必要的參數:%{value}. request_not_authorized: 請求必須被授權。用於授權的必要參數缺失或無效。 unknown: 這個請求缺少必要的參數,包括有不支援的參數、或有其他格式錯誤。 invalid_resource_owner: 資源擁有者的登入資訊無效、或者無法找到該資源擁有者 @@ -146,38 +147,38 @@ zh-HK: application: title: 需要 OAuth 授權 scopes: - "admin:read": 讀取伺服器的所有資料 - "admin:read:accounts": 讀取所有帳戶的敏感資訊 - "admin:read:canonical_email_blocks": 讀取所有已封鎖標準電郵的敏感資訊 - "admin:read:domain_allows": 讀取所有允許網域的敏感資訊 - "admin:read:domain_blocks": 讀取所有已封鎖網域的敏感資訊 - "admin:read:email_domain_blocks": 讀取所有已封鎖電郵網域的敏感資訊 - "admin:read:ip_blocks": 讀取所有已封鎖 IP 的敏感資訊 - "admin:read:reports": 讀取所有回報 / 被回報之帳戶的敏感資訊 - "admin:write": 修改伺服器的所有資料 - "admin:write:accounts": 對帳號進行仲裁管理動作 - "admin:write:canonical_email_blocks": 對已封鎖的標準電郵執行審核動作 - "admin:write:domain_allows": 對已允許的網域進行審核動作 - "admin:write:domain_blocks": 對已封鎖的網域進行審核動作 - "admin:write:email_domain_blocks": 對已封鎖的電郵網域執行審核動作 - "admin:write:ip_blocks": 對已封鎖的 IP 執行審核動作 - "admin:write:reports": 對回報進行仲裁管理動作 + admin:read: 讀取伺服器的所有資料 + admin:read:accounts: 讀取所有帳戶的敏感資訊 + admin:read:canonical_email_blocks: 讀取所有已封鎖標準電郵的敏感資訊 + admin:read:domain_allows: 讀取所有允許網域的敏感資訊 + admin:read:domain_blocks: 讀取所有已封鎖網域的敏感資訊 + admin:read:email_domain_blocks: 讀取所有已封鎖電郵網域的敏感資訊 + admin:read:ip_blocks: 讀取所有已封鎖 IP 的敏感資訊 + admin:read:reports: 讀取所有回報 / 被回報之帳戶的敏感資訊 + admin:write: 修改伺服器的所有資料 + admin:write:accounts: 對帳號進行仲裁管理動作 + admin:write:canonical_email_blocks: 對已封鎖的標準電郵執行審核動作 + admin:write:domain_allows: 對已允許的網域進行審核動作 + admin:write:domain_blocks: 對已封鎖的網域進行審核動作 + admin:write:email_domain_blocks: 對已封鎖的電郵網域執行審核動作 + admin:write:ip_blocks: 對已封鎖的 IP 執行審核動作 + admin:write:reports: 對回報進行仲裁管理動作 crypto: 使用端到端加密 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: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: 封鎖帳號及域名 diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index bce409d636f7f4..6073096c3105c0 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -1,3 +1,4 @@ +--- zh-TW: activerecord: attributes: @@ -51,7 +52,7 @@ zh-TW: callback_urls: 回傳網址 scopes: 範圍 secret: 用戶端密碼 (client secret) - title: '應用程式︰%{name}' + title: 應用程式︰%{name} authorizations: buttons: authorize: 授權 @@ -85,7 +86,7 @@ zh-TW: invalid_grant: 授權申請不正確、逾期、已被註銷、與授權請求內的重新導向 URI 不符、或屬於別的用戶端程式。 invalid_redirect_uri: 包含的重新導向 URI 是不正確的。 invalid_request: - missing_param: '缺少必要的參數:%{value}.' + missing_param: 缺少必要的參數:%{value}. request_not_authorized: 請求必須是已授權的。用於授權的必要參數缺少或無效。 unknown: 請求缺少必要的參數、有不支援的參數、或其他格式錯誤。 invalid_resource_owner: 資源擁有者的登入資訊錯誤,或無法找到該資源擁有者 @@ -179,16 +180,16 @@ zh-TW: read:search: 以您的身份搜尋 read:statuses: 檢視所有嘟文 write: 修改您帳號的所有資料 - "write:accounts": 修改您的個人檔案 - "write:blocks": 封鎖帳號及站台 - "write:bookmarks": 書籤狀態 - "write:conversations": 靜音及刪除對話 - "write:favourites": 加到最愛 - "write:filters": 建立過濾條件 - "write:follows": 跟隨其他人 - "write:lists": 建立列表 - "write:media": 上傳媒體檔案 - "write:mutes": 靜音使用者及對話 - "write:notifications": 清除您的通知 - "write:reports": 檢舉其他人 - "write:statuses": 發表嘟文 + write:accounts: 修改您的個人檔案 + write:blocks: 封鎖帳號及站台 + write:bookmarks: 書籤狀態 + write:conversations: 靜音及刪除對話 + write:favourites: 加到最愛 + write:filters: 建立過濾條件 + write:follows: 跟隨其他人 + write:lists: 建立列表 + write:media: 上傳媒體檔案 + write:mutes: 靜音使用者及對話 + write:notifications: 清除您的通知 + write:reports: 檢舉其他人 + write:statuses: 發表嘟文 diff --git a/config/locales/el.yml b/config/locales/el.yml index 1cfd6a4d1d4e06..c4c3d393976587 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1,3 +1,4 @@ +--- el: about: about_mastodon_html: 'Το κοινωνικό δίκτυο του μέλλοντος: Χωρίς διαφημίσεις, χωρίς εταιρίες να σε κατασκοπεύουν, ηθικά σχεδιασμένο και αποκεντρωμένο! Με το Mastodon τα δεδομένα σου είναι πραγματικά δικά σου!' @@ -55,7 +56,7 @@ el: delete: Διαγραφή δεδομένων deleted: Διαγεγραμμένοι demote: Υποβιβασμός - destroyed_msg: "Τα δεδομένα του/της %{username} εκκρεμούν για άμεση διαγραφή" + destroyed_msg: Τα δεδομένα του/της %{username} εκκρεμούν για άμεση διαγραφή disable: Πάγωμα disable_sign_in_token_auth: Απενεργοποίηση επαλήθευσης μέσω email disable_two_factor_authentication: Απενεργοποίηση 2FA @@ -228,64 +229,64 @@ el: update_status: Ενημέρωση Ανάρτησης update_user_role: Ενημέρωση ρόλου actions: - approve_appeal_html: "Ο/Η %{name} ενέκρινε την ένσταση της απόφασης των συντονιστών από %{target}" - approve_user_html: "ο/η %{name} ενέκρινε την εγγραφή του %{target}" - assigned_to_self_report_html: "Ο/Η %{name} ανάθεσε την αναφορά %{target} στον εαυτό του/της" - change_email_user_html: "Ο/Η %{name} άλλαξε τη διεύθυνση email του χρήστη %{target}" - change_role_user_html: "Ο/Η %{name} άλλαξε ρόλο του/της %{target}" - confirm_user_html: "Ο/Η %{name} επιβεβαίωσε τη διεύθυνση email του χρήστη %{target}" - create_account_warning_html: "Ο/Η %{name} έστειλε προειδοποίηση προς %{target}" - create_announcement_html: "Ο/Η %{name} δημιούργησε νέα ανακοίνωση %{target}" - create_canonical_email_block_html: "Ο/Η %{name} απέκλεισε e-mail με το hash %{target}" - create_custom_emoji_html: "Ο/Η %{name} ανέβασε νέο emoji %{target}" - create_domain_allow_html: "Ο/Η %{name} επέτρεψε την συναλλαγή με τον τομέα %{target}" - create_domain_block_html: "Ο/Η %{name} απέκλεισε τον τομέα %{target}" - create_email_domain_block_html: "Ο/Η %{name} απέκλεισε τον τομέα email %{target}" - create_ip_block_html: "Ο/Η %{name} δημιούργησε κανόνα για την IP %{target}" - create_unavailable_domain_html: "Ο/Η %{name} σταμάτησε να τροφοδοτεί τον τομέα %{target}" - create_user_role_html: "Ο/Η %{name} δημιούργησε ρόλο %{target}" - demote_user_html: "Ο/Η %{name} υποβίβασε τον χρήστη %{target}" - destroy_announcement_html: "Ο/Η %{name} διέγραψε την ανακοίνωση %{target}" - destroy_canonical_email_block_html: "Ο/Η %{name} επέτρεψε email με το hash %{target}" - destroy_custom_emoji_html: "Ο/Η %{name} διέγραψε το emoji %{target}" - destroy_domain_allow_html: "Ο/Η %{name} αφαίρεσε τον τομέα %{target} από τη λίστα εγκρίσεων" - destroy_domain_block_html: "Ο/Η %{name} επέτρεψε τον τομέα %{target}" - destroy_email_domain_block_html: "Ο/Η %{name} ξεμπλόκαρε το email domain %{target}" - destroy_instance_html: "Ο/Η %{name} εκκαθάρισε τον τομέα %{target}" - destroy_ip_block_html: "Ο/Η %{name} διέγραψε τον κανόνα για την IP %{target}" - destroy_status_html: "Ο/Η %{name} αφαίρεσε την ανάρτηση του/της %{target}" - destroy_unavailable_domain_html: "Ο/Η %{name} ξανάρχισε να τροφοδοτεί το domain %{target}" - destroy_user_role_html: "Ο/Η %{name} διέγραψε τον ρόλο του %{target}" - disable_2fa_user_html: "Ο/Η %{name} απενεργοποίησε την απαίτηση για ταυτοποίηση δύο παραγόντων για τον χρήστη %{target}" - disable_custom_emoji_html: "Ο/Η %{name} απενεργοποίησε το emoji %{target}" - disable_sign_in_token_auth_user_html: "Ο/Η %{name} απενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target}" - disable_user_html: "Ο/Η %{name} απενεργοποίησε τη σύνδεση για τον χρήστη %{target}" - enable_custom_emoji_html: "Ο/Η %{name} ενεργοποίησε το emoji %{target}" - enable_sign_in_token_auth_user_html: "Ο/Η %{name} ενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target}" - enable_user_html: "Ο/Η %{name} ενεργοποίησε τη σύνδεση για τον χρήστη %{target}" - memorialize_account_html: "O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα εις μνήμην" - promote_user_html: "Ο/Η %{name} προβίβασε το χρήστη %{target}" - reject_appeal_html: "Ο/Η %{name} απέρριψε την ένσταση της απόφασης των συντονιστών από %{target}" - reject_user_html: "ο/η %{name} απέρριψε την εγγραφή από %{target}" - remove_avatar_user_html: "ο/η %{name} αφαίρεσε το άβαταρ του/της %{target}" - reopen_report_html: "Ο/Η %{name} ξανάνοιξε την αναφορά %{target}" - resend_user_html: "Ο/Η %{name} έστειλε ξανά e-mail επιβεβαίωσης για τον/την %{target}" - reset_password_user_html: "Ο/Η %{name} επανέφερε το συνθηματικό του χρήστη %{target}" - resolve_report_html: "Ο/Η %{name} επέλυσε την αναφορά %{target}" - sensitive_account_html: "Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα" - silence_account_html: "Ο/Η %{name} περιόρισε τον λογαριασμό του/της %{target}" - suspend_account_html: "Ο/Η %{name} ανέστειλε τον λογαριασμό του/της %{target}" - unassigned_report_html: "Ο/Η %{name} αποδέσμευσε την αναφορά %{target}" + approve_appeal_html: Ο/Η %{name} ενέκρινε την ένσταση της απόφασης των συντονιστών από %{target} + approve_user_html: ο/η %{name} ενέκρινε την εγγραφή του %{target} + assigned_to_self_report_html: Ο/Η %{name} ανάθεσε την αναφορά %{target} στον εαυτό του/της + change_email_user_html: Ο/Η %{name} άλλαξε τη διεύθυνση email του χρήστη %{target} + change_role_user_html: Ο/Η %{name} άλλαξε ρόλο του/της %{target} + confirm_user_html: Ο/Η %{name} επιβεβαίωσε τη διεύθυνση email του χρήστη %{target} + create_account_warning_html: Ο/Η %{name} έστειλε προειδοποίηση προς %{target} + create_announcement_html: Ο/Η %{name} δημιούργησε νέα ανακοίνωση %{target} + create_canonical_email_block_html: Ο/Η %{name} απέκλεισε e-mail με το hash %{target} + create_custom_emoji_html: Ο/Η %{name} ανέβασε νέο emoji %{target} + create_domain_allow_html: Ο/Η %{name} επέτρεψε την συναλλαγή με τον τομέα %{target} + create_domain_block_html: Ο/Η %{name} απέκλεισε τον τομέα %{target} + create_email_domain_block_html: Ο/Η %{name} απέκλεισε τον τομέα email %{target} + create_ip_block_html: Ο/Η %{name} δημιούργησε κανόνα για την IP %{target} + create_unavailable_domain_html: Ο/Η %{name} σταμάτησε να τροφοδοτεί τον τομέα %{target} + create_user_role_html: Ο/Η %{name} δημιούργησε ρόλο %{target} + demote_user_html: Ο/Η %{name} υποβίβασε τον χρήστη %{target} + destroy_announcement_html: Ο/Η %{name} διέγραψε την ανακοίνωση %{target} + destroy_canonical_email_block_html: Ο/Η %{name} επέτρεψε email με το hash %{target} + destroy_custom_emoji_html: Ο/Η %{name} διέγραψε το emoji %{target} + destroy_domain_allow_html: Ο/Η %{name} αφαίρεσε τον τομέα %{target} από τη λίστα εγκρίσεων + destroy_domain_block_html: Ο/Η %{name} επέτρεψε τον τομέα %{target} + destroy_email_domain_block_html: Ο/Η %{name} ξεμπλόκαρε το email domain %{target} + destroy_instance_html: Ο/Η %{name} εκκαθάρισε τον τομέα %{target} + destroy_ip_block_html: Ο/Η %{name} διέγραψε τον κανόνα για την IP %{target} + destroy_status_html: Ο/Η %{name} αφαίρεσε την ανάρτηση του/της %{target} + destroy_unavailable_domain_html: Ο/Η %{name} ξανάρχισε να τροφοδοτεί το domain %{target} + destroy_user_role_html: Ο/Η %{name} διέγραψε τον ρόλο του %{target} + disable_2fa_user_html: Ο/Η %{name} απενεργοποίησε την απαίτηση για ταυτοποίηση δύο παραγόντων για τον χρήστη %{target} + disable_custom_emoji_html: Ο/Η %{name} απενεργοποίησε το emoji %{target} + disable_sign_in_token_auth_user_html: Ο/Η %{name} απενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target} + disable_user_html: Ο/Η %{name} απενεργοποίησε τη σύνδεση για τον χρήστη %{target} + enable_custom_emoji_html: Ο/Η %{name} ενεργοποίησε το emoji %{target} + enable_sign_in_token_auth_user_html: Ο/Η %{name} ενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target} + enable_user_html: Ο/Η %{name} ενεργοποίησε τη σύνδεση για τον χρήστη %{target} + memorialize_account_html: O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα εις μνήμην + promote_user_html: Ο/Η %{name} προβίβασε το χρήστη %{target} + reject_appeal_html: Ο/Η %{name} απέρριψε την ένσταση της απόφασης των συντονιστών από %{target} + reject_user_html: ο/η %{name} απέρριψε την εγγραφή από %{target} + remove_avatar_user_html: ο/η %{name} αφαίρεσε το άβαταρ του/της %{target} + reopen_report_html: Ο/Η %{name} ξανάνοιξε την αναφορά %{target} + resend_user_html: Ο/Η %{name} έστειλε ξανά e-mail επιβεβαίωσης για τον/την %{target} + reset_password_user_html: Ο/Η %{name} επανέφερε το συνθηματικό του χρήστη %{target} + resolve_report_html: Ο/Η %{name} επέλυσε την αναφορά %{target} + sensitive_account_html: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα + silence_account_html: Ο/Η %{name} περιόρισε τον λογαριασμό του/της %{target} + suspend_account_html: Ο/Η %{name} ανέστειλε τον λογαριασμό του/της %{target} + unassigned_report_html: Ο/Η %{name} αποδέσμευσε την αναφορά %{target} unblock_email_account_html: "%{name} έκανε άρση αποκλεισμού στη διεύθυνση email του %{target}" - unsensitive_account_html: "Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως μη ευαίσθητα" - unsilence_account_html: "Ο/Η %{name} αφαίρεσε το περιορισμό του λογαριασμού του/της %{target}" - unsuspend_account_html: "Ο/Η %{name} επανέφερε τον λογαριασμό του/της %{target}" - update_announcement_html: "Ο/Η %{name} ενημέρωσε την ανακοίνωση %{target}" - update_custom_emoji_html: "Ο/Η %{name} ενημέρωσε το emoji %{target}" - update_domain_block_html: "Ο/Η %{name} ενημέρωσε τον αποκλεισμό τομέα για %{target}" - update_ip_block_html: "Ο/Η %{name} άλλαξε τον κανόνα για την IP %{target}" - update_status_html: "Ο/Η %{name} ενημέρωσε την ανάρτηση του/της %{target}" - update_user_role_html: "Ο/Η %{name} άλλαξε τον ρόλο %{target}" + unsensitive_account_html: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως μη ευαίσθητα + unsilence_account_html: Ο/Η %{name} αφαίρεσε το περιορισμό του λογαριασμού του/της %{target} + unsuspend_account_html: Ο/Η %{name} επανέφερε τον λογαριασμό του/της %{target} + update_announcement_html: Ο/Η %{name} ενημέρωσε την ανακοίνωση %{target} + update_custom_emoji_html: Ο/Η %{name} ενημέρωσε το emoji %{target} + update_domain_block_html: Ο/Η %{name} ενημέρωσε τον αποκλεισμό τομέα για %{target} + update_ip_block_html: Ο/Η %{name} άλλαξε τον κανόνα για την IP %{target} + update_status_html: Ο/Η %{name} ενημέρωσε την ανάρτηση του/της %{target} + update_user_role_html: Ο/Η %{name} άλλαξε τον ρόλο %{target} deleted_account: διαγεγραμμένος λογαριασμός empty: Δεν βρέθηκαν αρχεία καταγραφής. filter_by_action: Φιλτράρισμα ανά ενέργεια @@ -393,7 +394,7 @@ el: create: Δημιουργία αποκλεισμού hint: Ο αποκλεισμός τομέα δεν θα αποτρέψει νέες καταχωρίσεις λογαριασμών στην βάση δεδομένων, αλλά θα εφαρμόσει αναδρομικά και αυτόματα συγκεκριμένες πολιτικές συντονισμού σε αυτούς τους λογαριασμούς. severity: - desc_html: "Ο περιορισμός θα κάνει αόρατες τις ανάρτησεις ενός λογαριασμού σε όσους δεν τον ακολουθούν. Η αναστολή θα αφαιρέσει όλο το περιεχόμενο, τα πολυμέσα και τα στοιχεία προφίλ ενός λογαριασμού. Χρησιμοποίησε το κανένα αν θέλεις απλά να απορρίψεις τα αρχεία πολυμέσων." + desc_html: Ο περιορισμός θα κάνει αόρατες τις ανάρτησεις ενός λογαριασμού σε όσους δεν τον ακολουθούν. Η αναστολή θα αφαιρέσει όλο το περιεχόμενο, τα πολυμέσα και τα στοιχεία προφίλ ενός λογαριασμού. Χρησιμοποίησε το κανένα αν θέλεις απλά να απορρίψεις τα αρχεία πολυμέσων. noop: Κανένα silence: Περιορισμός suspend: Αναστολή @@ -547,7 +548,7 @@ el: no_ip_block_selected: Δεν άλλαξαν οι κανόνες IP καθώς κανένας δεν επιλέχθηκε title: Κανόνες IP relationships: - title: "Σχέσεις του %{acct}" + title: Σχέσεις του %{acct} relays: add_new: Προσθήκη νέου ανταποκριτή delete: Διαγραφή @@ -639,7 +640,7 @@ el: close_report: 'Επισήμανση αναφοράς #%{id} ως επιλυμένη' close_reports_html: Επισήμανε όλες τις αναφορές ενάντια στον λογαριασμό @%{acct} ως επιλυμένες delete_data_html: Διάγραψε το προφίλ και το περιεχόμενο του @%{acct} σε 30 ημέρες από τώρα εκτός αν, εν τω μεταξύ, ανακληθεί η αναστολή - preview_preamble_html: "Ο @%{acct} θα λάβει μια προειδοποίηση με τα ακόλουθο περιεχόμενο:" + preview_preamble_html: 'Ο @%{acct} θα λάβει μια προειδοποίηση με τα ακόλουθο περιεχόμενο:' record_strike_html: Κατάγραψε ένα παράπτωμα εναντίον του @%{acct} για να σε βοηθήσει να αποφασίσεις σε μελλοντικές παραβιάσεις από αυτόν τον λογαριασμό send_email_html: Στείλε στον @%{acct} ένα προειδοποιητικό e-mail warning_placeholder: Προαιρετικές επιπλέον εξηγήσεις για αυτή την ενέργεια από την ομάδα συντονισμού. @@ -787,13 +788,13 @@ el: with_media: Με πολυμέσα strikes: actions: - delete_statuses: "Ο/Η %{name} διέγραψε τις αναρτήσεις του/της %{target}" - disable: "Ο/Η %{name} πάγωσε τον λογαριασμό του/της %{target}" - mark_statuses_as_sensitive: "Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα" - none: "Ο/Η %{name} έστειλε προειδοποίηση προς τον/την %{target}" - sensitive: "Ο/Η %{name} επισήμανε τα πολυμέσα του λογαριασμού %{target} ως ευαίσθητα" - silence: "Ο/Η %{name} περιόρισε τον λογαριασμό %{target}" - suspend: "ο/η %{name} ανέστειλε τον λογαριασμό %{target}" + delete_statuses: Ο/Η %{name} διέγραψε τις αναρτήσεις του/της %{target} + disable: Ο/Η %{name} πάγωσε τον λογαριασμό του/της %{target} + mark_statuses_as_sensitive: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα + none: Ο/Η %{name} έστειλε προειδοποίηση προς τον/την %{target} + sensitive: Ο/Η %{name} επισήμανε τα πολυμέσα του λογαριασμού %{target} ως ευαίσθητα + silence: Ο/Η %{name} περιόρισε τον λογαριασμό %{target} + suspend: ο/η %{name} ανέστειλε τον λογαριασμό %{target} appeal_approved: Έγινε έφεση appeal_pending: Έφεση σε εκκρεμότητα appeal_rejected: Η έφεση απορρίφθηκε @@ -920,16 +921,16 @@ el: sensitive: να επισημάνουν τον λογαριασμό του ως ευαίσθητο silence: να περιορίσουν το λογαριασμό του suspend: να αναστείλουν τον λογαριασμό του - body: "Ο/Η %{target} κάνει έφεση στην απόφαση συντονισμού που έγινε από τον/την %{action_taken_by} στις %{date}, η οποία ήταν %{type}. Έγραψαν:" + body: 'Ο/Η %{target} κάνει έφεση στην απόφαση συντονισμού που έγινε από τον/την %{action_taken_by} στις %{date}, η οποία ήταν %{type}. Έγραψαν:' next_steps: Μπορείς να εγκρίνεις την έφεση για να αναιρέσεις την απόφαση της ομάδας συντονισμού ή να την αγνοήσεις. - subject: "Ο/Η %{username} κάνει έφεση σε μια απόφαση της ομάδας συντονισμού στον %{instance}" + subject: Ο/Η %{username} κάνει έφεση σε μια απόφαση της ομάδας συντονισμού στον %{instance} new_pending_account: body: Τα στοιχεία του νέου λογαριασμού είναι παρακάτω. Μπορείς να εγκρίνεις ή να απορρίψεις αυτή την αίτηση. subject: Νέος λογαριασμός προς έγκριση στο %{instance} (%{username}) new_report: - body: "Ο/Η %{reporter} ανέφερε τον/την %{target}" + body: Ο/Η %{reporter} ανέφερε τον/την %{target} body_remote: Κάποιος/α από τον τομέα %{domain} ανέφερε τον/την %{target} - subject: 'Νέα αναφορά για %{instance} (#%{id})' + subject: Νέα αναφορά για %{instance} (#%{id}) new_trends: body: 'Τα ακόλουθα στοιχεία χρειάζονται αξιολόγηση για να μπορούν να προβληθούν δημόσια:' new_trending_links: @@ -981,7 +982,7 @@ el: delete_account: Διαγραφή λογαριασμού delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς να συνεχίσεις εδώ. Θα σου ζητηθεί επιβεβαίωση. description: - prefix_invited_by_user: "Ο/Η @%{name} σε προσκαλεί να συνδεθείς με αυτό τον διακομιστή του Mastodon!" + prefix_invited_by_user: Ο/Η @%{name} σε προσκαλεί να συνδεθείς με αυτό τον διακομιστή του Mastodon! prefix_sign_up: Κάνε εγγραφή στο Mastodon σήμερα! suffix: Ανοίγοντας λογαριασμό θα μπορείς να ακολουθείς άλλους, να ανεβάζεις ενημερώσεις και να ανταλλάζεις μηνύματα με χρήστες σε οποιοδήποτε διακομιστή Mastodon, καθώς και άλλα! didnt_get_confirmation: Δεν έλαβες τον σύνδεσμο επιβεβαίωσης; @@ -1006,7 +1007,7 @@ el: cas: Υπηρεσία Κεντρικής Πιστοποίησης (CAS) saml: Πρωτόκολλο SAML register: Εγγραφή - registration_closed: "Το %{instance} δεν δέχεται νέα μέλη" + registration_closed: Το %{instance} δεν δέχεται νέα μέλη resend_confirmation: Επανάληψη αποστολής συνδέσμου επιβεβαίωσης reset_password: Επαναφορά συνθηματικού rules: @@ -1337,11 +1338,11 @@ el: subject: "%{name} έχει εγγραφεί" favourite: body: 'Η ανάρτησή σου αγαπήθηκε από τον/την %{name}:' - subject: "Ο/Η %{name} αγάπησε την κατάστασή σου" + subject: Ο/Η %{name} αγάπησε την κατάστασή σου title: Νέο αγαπημένο follow: - body: "Ο/Η %{name} πλέον σε ακολουθεί!" - subject: "Ο/Η %{name} πλέον σε ακολουθεί" + body: Ο/Η %{name} πλέον σε ακολουθεί! + subject: Ο/Η %{name} πλέον σε ακολουθεί title: Νέος/α ακόλουθος follow_request: action: Διαχειρίσου τα αιτήματα ακολούθησης @@ -1357,10 +1358,10 @@ el: subject: Μια δημοσκόπηση του %{name} έληξε reblog: body: 'Η ανάρτησή σου ενισχύθηκε από τον/την %{name}:' - subject: "Ο/Η %{name} ενίσχυσε την ανάρτηση σου" + subject: Ο/Η %{name} ενίσχυσε την ανάρτηση σου title: Νέα ενίσχυση status: - subject: "Ο/Η %{name} μόλις ανέρτησε κάτι" + subject: Ο/Η %{name} μόλις ανέρτησε κάτι update: subject: "%{name} επεξεργάστηκε μια ανάρτηση" notifications: @@ -1532,7 +1533,7 @@ el: default_language: Ίδια με γλώσσα διεπαφής disallowed_hashtags: one: 'περιέχει μη επιτρεπτή ετικέτα: %{tags}' - other: 'περιέχει μη επιτρεπτές ετικέτες %{tags}' + other: περιέχει μη επιτρεπτές ετικέτες %{tags} edited_at_html: Επεξεργάστηκε στις %{date} errors: in_reply_not_found: Η ανάρτηση στην οποία προσπαθείς να απαντήσεις δεν φαίνεται να υπάρχει. diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index beea97941126a3..98a40c45cffd4b 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1,3 +1,4 @@ +--- en-GB: about: about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralisation! Own your data with Mastodon!' diff --git a/config/locales/en.yml b/config/locales/en.yml index 23b3bf24e2eb90..85db9c5a66cbb3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -316,6 +316,8 @@ en: updated_msg: Announcement successfully updated! critical_update_pending: Critical update pending custom_emojis: + aliases: Alias names + aliases_hint: When searching within the pictogram picker, you can search not only by short code, but also by alias name. You can specify multiple alias names by separating them with "," (comma). assign_category: Assign category by_domain: Domain copied_msg: Successfully created local copy of the emoji @@ -328,11 +330,17 @@ en: disable: Disable disabled: Disabled disabled_msg: Successfully disabled that emoji + domain: Domain + edit: + label: Edit + title: Edit custom emoji emoji: Emoji enable: Enable enabled: Enabled enabled_msg: Successfully enabled that emoji image_hint: PNG or GIF up to %{size} + license: License + license_hint: Set license information for custom pictograms. However, many servers do not support the federation of license information, and Misskey also supports license information for local pictograms, but does not reference license information from other servers. Consider that licenses may be ignored. list: List listed: Listed new: @@ -349,6 +357,7 @@ en: update_failed_msg: Could not update that emoji updated_msg: Emoji successfully updated! upload: Upload + visible_in_picker: Visible in emoji picker dashboard: active_users: active users interactions: interactions @@ -406,6 +415,11 @@ en: existing_domain_block: You have already imposed stricter limits on %{name}. existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to unblock it first. export: Export + headers: + disagreement: Protect sensitive posts from political disagreement + harassment: Harassment or spam + invalid_privacy: Privacy is not protected + mastodon_default: Original Mastodon supports import: Import new: create: Create block @@ -634,8 +648,12 @@ en: ng_words: hide_local_users_for_anonymous: Hide timeline local user posts from anonymous keywords: Reject keywords + keywords_for_stranger_mention: Reject keywords when mention/reply from strangers + keywords_for_stranger_mention_hint: Currently this words are checked posts from other servers only. keywords_hint: The first character of the line is "?". to use regular expressions post_hash_tags_max: Hash tags max for posts + stranger_mention_from_local_ng: フォローしていないアカウントへのメンションのNGワードを、ローカルユーザーによる投稿にも適用する + stranger_mention_from_local_ng_hint: サーバーの登録が承認制でない場合、あなたのサーバーにもスパムが入り込む可能性があります test_error: Testing is returned any errors title: NG words and against spams relationships: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 2cebc19a8f914b..066899995ff983 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1,9 +1,10 @@ +--- eo: about: about_mastodon_html: 'La socia retejo de la estonteco: sen reklamo, sen observado por firmao, etika desegno, kaj malcentrigo! Regu viajn informojn per Mastodon!' contact_missing: Ne elektita contact_unavailable: Ne disponebla - hosted_on: '%{domain} estas nodo de Mastodon' + hosted_on: "%{domain} estas nodo de Mastodon" title: Pri accounts: follow: Sekvi @@ -55,7 +56,7 @@ eo: delete: Forigi datumojn deleted: Forigita demote: Degradi - destroyed_msg: "Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ" + destroyed_msg: Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ disable: Frostigi disable_sign_in_token_auth: Malŝalti aŭtentigon per retpoŝta ĵetono disable_two_factor_authentication: Malŝalti 2FA-n @@ -556,11 +557,11 @@ eo: no_ip_block_selected: Neniu IP-regulo estis ŝanĝita ĉar neniu estis elektita title: IP-reguloj relationships: - title: "Rilatoj de %{acct}" + title: Rilatoj de %{acct} relays: add_new: Aldoni novan ripetilon delete: Forigi - description_html: Fratara ripetilo estas survoja servilo, kiu interŝanĝas grandan kvanton de publikaj mesaĝoj inter serviloj, kiuj abonas kaj publikigas al ĝi. Ĝi povas helpi etajn kaj mezgrandajn servilojn malkovri enhavon de la fediverse, kio normale postulus al lokaj uzantoj mane sekvi homojn de foraj serviloj. + description_html: "Fratara ripetilo estas survoja servilo, kiu interŝanĝas grandan kvanton de publikaj mesaĝoj inter serviloj, kiuj abonas kaj publikigas al ĝi. Ĝi povas helpi etajn kaj mezgrandajn servilojn malkovri enhavon de la fediverse, kio normale postulus al lokaj uzantoj mane sekvi homojn de foraj serviloj." disable: Malebligi disabled: Malebligita enable: Ebligi @@ -905,7 +906,7 @@ eo: webhooks: add_new: Aldoni finpunkton delete: Forigi - description_html: Rethoko ebligas Mastodon sendi realtempan sciigon pri kelkaj eventoj al la via sia programaro por automata ekigi. + description_html: "Rethoko ebligas Mastodon sendi realtempan sciigon pri kelkaj eventoj al la via sia programaro por automata ekigi." disable: Neebligi disabled: Neebligita edit: Redakti finpunkton @@ -941,7 +942,7 @@ eo: new_report: body: "%{reporter} signalis %{target}" body_remote: Iu de %{domain} signalis %{target} - subject: 'Nova signalo por %{instance} (#%{id})' + subject: Nova signalo por %{instance} (#%{id}) new_trends: body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:' new_trending_links: @@ -950,7 +951,7 @@ eo: title: Popularaĝaj mesaĝoj new_trending_tags: no_approved_tags: Nun ne havas aprobitajn popularajn kradvortojn. - requirements: 'Ajn ĉi tiu eroj povas superi la %{rank}an kradvorton kiu estas %{lowest_tag_name} kun %{lowest_tag_score} puentoj.' + requirements: Ajn ĉi tiu eroj povas superi la %{rank}an kradvorton kiu estas %{lowest_tag_name} kun %{lowest_tag_score} puentoj. title: Tendencantaj kradvortoj subject: Novaj popularaĵoj bezonas kontrolitis ĉe %{instance} aliases: @@ -1148,7 +1149,9 @@ eo: content: Ni bedaŭras, io malsukcesis niaflanke. title: Ĉi tiu paĝo ne estas ĝusta '503': La paĝo ne povas montritis pro malpermanenta servilmalfunkcio. - noscript_html: "Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la\noperaciumaj aplikaĵoj por Mastodon por via platformo." + noscript_html: |- + Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la + operaciumaj aplikaĵoj por Mastodon por via platformo. existing_username_validator: not_found: Ne povas trovi lokaj uzanto kun tiu uzantnomo not_found_multiple: Ne povas trovi %{usernames} @@ -1218,7 +1221,7 @@ eo: all: Ĉio all_items_on_page_selected_html: one: "%{count} ero ĉe ĉi tiu paĝo elektitas." - other: %{count} eroj ĉe ĉi tiu paĝo elektitas. + other: "%{count} eroj ĉe ĉi tiu paĝo elektitas." all_matching_items_selected_html: one: "%{count} ero kiu kongruas vian serĉon elektitas." other: "%{count} eroj kiuj kongruas vian serĉon elektitas." @@ -1352,7 +1355,7 @@ eo: sign_up: subject: "%{name} registriĝis" favourite: - body: '%{name} stelumis vian afiŝon:' + body: "%{name} stelumis vian afiŝon:" subject: "%{name} stelumis vian afiŝon" title: Nova stelumo follow: @@ -1362,12 +1365,12 @@ eo: follow_request: action: Administri petojn de sekvado body: "%{name} petis sekvi vin" - subject: '%{name} petis sekvi vin' + subject: "%{name} petis sekvi vin" title: Nova peto de sekvado mention: action: Respondi - body: '%{name} menciis vin en:' - subject: '%{name} menciis vin' + body: "%{name} menciis vin en:" + subject: "%{name} menciis vin" title: Nova mencio poll: subject: Enketo de %{name} finitas diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 98c1377c6d5e01..8357c314908c84 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1,3 +1,4 @@ +--- es-AR: about: 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!' @@ -14,7 +15,7 @@ es-AR: 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. last_active: última actividad link_verified_on: La propiedad de este enlace fue verificada el %{date} - nothing_here: '¡No hay nada acá!' + nothing_here: "¡No hay nada acá!" pin_errors: following: Ya tenés que estar siguiendo a la cuenta que querés recomendar posts: @@ -27,24 +28,24 @@ es-AR: title: Ejecutar acción de moderación en %{acct} account_moderation_notes: create: Dejar nota - created_msg: '¡Nota de moderación creada exitosamente!' - destroyed_msg: '¡Nota de moderación destruída exitosamente!' + created_msg: "¡Nota de moderación creada exitosamente!" + destroyed_msg: "¡Nota de moderación destruída exitosamente!" accounts: add_email_domain_block: Bloquear el dominio del correo electrónico approve: Aprobar approved_msg: Se aprobó exitosamente la solicitud de registro de %{username} - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" avatar: Avatar by_domain: Dominio change_email: - changed_msg: '¡Correo electrónico cambiado exitosamente!' + changed_msg: "¡Correo electrónico cambiado exitosamente!" current_email: Correo electrónico actual label: Cambiar correo electrónico new_email: Nuevo correo electrónico submit: Cambiar correo electrónico title: Cambiar correo electrónico para %{username} change_role: - changed_msg: '¡Rol cambiado exitosamente!' + changed_msg: "¡Rol cambiado exitosamente!" label: Cambiar rol no_role: Sin rol title: Cambiar rol para %{username} @@ -55,7 +56,7 @@ es-AR: delete: Eliminar datos deleted: Eliminado demote: Bajar de nivel - destroyed_msg: "Los datos de %{username} están ahora en cola para ser eliminados inminentemente" + destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Congelar disable_sign_in_token_auth: Deshabilitar autenticación de token por correo electrónico disable_two_factor_authentication: Deshabilitar 2FA @@ -86,7 +87,7 @@ es-AR: media_attachments: Adjuntos memorialize: Convertir en cuenta conmemorativa memorialized: Cuenta conmemorativa - memorialized_msg: '%{username} se convirtió exitosamente en una cuenta conmemorativa' + memorialized_msg: "%{username} se convirtió exitosamente en una cuenta conmemorativa" moderation: active: Activas all: Todas @@ -125,7 +126,7 @@ es-AR: resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar enlace de confirmación - success: '¡Enlace de confirmación enviado exitosamente!' + success: "¡Enlace de confirmación enviado exitosamente!" reset: Restablecer reset_password: Cambiar contraseña resubscribe: Resuscribir @@ -292,7 +293,7 @@ es-AR: filter_by_user: Filtrar por usuario title: Registro de auditoría announcements: - destroyed_msg: '¡Anuncio eliminado exitosamente!' + destroyed_msg: "¡Anuncio eliminado exitosamente!" edit: title: Editar anuncio empty: No se encontraron anuncios. @@ -301,9 +302,9 @@ es-AR: create: Crear anuncio title: Nuevo anuncio publish: Publicar - published_msg: '¡Anuncio publicado exitosamente!' + published_msg: "¡Anuncio publicado exitosamente!" scheduled_for: Programado para %{time} - scheduled_msg: '¡Anuncio programado para su publicación!' + scheduled_msg: "¡Anuncio programado para su publicación!" title: Anuncios unpublish: Eliminar publicación unpublished_msg: "¡Se dejó de publicar el anuncio exitosamente!" @@ -316,9 +317,9 @@ es-AR: copy: Copiar copy_failed_msg: No se pudo realizar una copia local de ese emoji create_new_category: Crear nueva categoría - created_msg: '¡Emoji creado exitosamente!' + created_msg: "¡Emoji creado exitosamente!" delete: Eliminar - destroyed_msg: '¡Emoji destruido exitosamente!' + destroyed_msg: "¡Emoji destruido exitosamente!" disable: Deshabilitar disabled: Deshabilitado disabled_msg: Se deshabilitó ese emoji exitosamente @@ -341,7 +342,7 @@ es-AR: unlist: No listar unlisted: No listado update_failed_msg: No se pudo actualizar ese emoji - updated_msg: '¡Emoji actualizado exitosamente!' + updated_msg: "¡Emoji actualizado exitosamente!" upload: Subir dashboard: active_users: usuarios activos @@ -481,7 +482,7 @@ es-AR: back_to_limited: Limitados back_to_warning: Advertencia by_domain: Dominio - confirm_purge: '¿Estás seguro que querés eliminar permanentemente los datos de este dominio?' + confirm_purge: "¿Estás seguro que querés eliminar permanentemente los datos de este dominio?" content_policies: comment: Nota interna description_html: Podés definir políticas de contenido que se aplicarán a todas las cuentas de este dominio y a cualquiera de sus subdominios. @@ -557,7 +558,7 @@ es-AR: 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 relationships: - title: "Relaciones de %{acct}" + title: Relaciones de %{acct} relays: add_new: Agregar nuevo relé delete: Eliminar @@ -575,8 +576,8 @@ es-AR: status: Estado title: Relés report_notes: - created_msg: '¡La nota de denuncia fue creada exitosamente!' - destroyed_msg: '¡La nota de denuncia fue eliminada exitosamente!' + created_msg: "¡La nota de denuncia fue creada exitosamente!" + destroyed_msg: "¡La nota de denuncia fue eliminada exitosamente!" reports: account: notes: @@ -594,7 +595,7 @@ es-AR: actions_description_html: Decidí qué medidas tomar para resolver esta denuncia. Si tomás una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decidí qué medidas tomar para resolver esta denuncia. Esto sólo afectará la forma en que tu servidor se comunica con esta cuenta remota y maneja su contenido. add_to_report: Agregar más a la denuncia - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado by_target_domain: Dominio de la cuenta denunciada @@ -630,7 +631,7 @@ es-AR: reported_account: Cuenta denunciada reported_by: Denunciada por resolved: Resueltas - resolved_msg: '¡Denuncia exitosamente resuelta!' + resolved_msg: "¡Denuncia exitosamente resuelta!" skip_to_actions: Ir directamente a las acciones status: Estado statuses: Contenido denunciado @@ -927,7 +928,7 @@ es-AR: peaked_on_and_decaying: Alcanzó el pico el %{date}, ahora decreciendo title: Etiquetas en tendencia trendable: Pueden aparecer en tendencias - trending_rank: 'Tendencia n.º %{rank}' + trending_rank: Tendencia n.º %{rank} usable: Pueden usarse usage_comparison: Usadas %{today} veces hoy, comparado con la/s %{yesterday} vez/veces de ayer used_by_over_week: @@ -1044,11 +1045,11 @@ es-AR: 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!' + prefix_sign_up: "¡Unite a Mastodon hoy!" suffix: Con una cuenta vas a poder seguir a otras cuentas, escribir mensajes e intercambiarlos con usuarios de cualquier servidor de Mastodon, ¡y mucho más! - didnt_get_confirmation: '¿No recibiste un enlace de confirmación?' - dont_have_your_security_key: '¿No tenés tu llave de seguridad?' - forgot_password: '¿Te olvidaste la contraseña?' + didnt_get_confirmation: "¿No recibiste un enlace 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 @@ -1084,8 +1085,8 @@ es-AR: setup: email_below_hint_html: Revisá tu carpeta de correo no deseado / spam, o solicitá otro enlace de confirmación. Podés corregir tu dirección de correo electrónico si está mal. email_settings_hint_html: Hacé clic en el enlace que te enviamos para verificar %{email}. Te esperamos por acá. - link_not_received: '¿No recibiste un enlace?' - new_confirmation_instructions_sent: '¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!' + link_not_received: "¿No recibiste un enlace?" + new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisá tu bandeja de entrada sign_in: preamble_html: Iniciá sesión con tus credenciales de %{domain}. Si tu cuenta está alojada en un servidor diferente, no vas a poder iniciar sesión acá. @@ -1277,7 +1278,7 @@ es-AR: copy: Copiar delete: Eliminar deselect: Deseleccionar todo - none: '[Ninguna]' + none: "[Ninguna]" order_by: Ordenar por save_changes: Guardar cambios select_all_matching_items: @@ -1285,8 +1286,8 @@ es-AR: other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: - one: '¡Falta algo! Por favor, revisá el error abajo' - other: '¡Falta algo! Por favor, revisá los %{count} errores abajo' + one: "¡Falta algo! Por favor, revisá el error abajo" + other: "¡Falta algo! Por favor, revisá los %{count} errores abajo" imports: errors: empty: Archivo CSV vacío @@ -1445,7 +1446,7 @@ es-AR: report: subject: "%{name} envió una denuncia" sign_up: - subject: "Se registró %{name}" + subject: Se registró %{name} favourite: body: 'Tu mensaje fue marcado como favorito por %{name}:' subject: "%{name} marcó tu mensaje como favorito" @@ -1467,7 +1468,7 @@ es-AR: poll: subject: Terminó una encuesta de %{name} reblog: - body: '%{name} adhirió a tu mensaje:' + body: "%{name} adhirió a tu mensaje:" subject: "%{name} adhirió a tu mensaje" title: Nueva adhesión status: @@ -1493,10 +1494,10 @@ es-AR: 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." + 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?' + 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 @@ -1536,9 +1537,9 @@ es-AR: unrecognized_emoji: no es un emoji conocido relationships: activity: Actividad de la cuenta - confirm_follow_selected_followers: '¿Estás seguro que querés seguir a los seguidores seleccionados?' - confirm_remove_selected_followers: '¿Estás seguro que querés quitar a los seguidores seleccionados?' - confirm_remove_selected_follows: '¿Estás seguro que querés quitar a las cuentas seguidas seleccionadas?' + confirm_follow_selected_followers: "¿Estás seguro que querés seguir a los seguidores seleccionados?" + confirm_remove_selected_followers: "¿Estás seguro que querés quitar a los seguidores seleccionados?" + confirm_remove_selected_follows: "¿Estás seguro que querés quitar a las cuentas seguidas seleccionadas?" dormant: Inactivas follow_failure: No se pudieron seguir algunas de las cuentas seleccionadas. follow_selected_followers: Seguir a los seguidores seleccionados @@ -1579,7 +1580,7 @@ es-AR: edge: Edge electron: Electron firefox: Mozilla Firefox - generic: '[Navegador web desconocido]' + generic: "[Navegador web desconocido]" huawei_browser: Navegador Huawei ie: Internet Explorer micro_messenger: MicroMessenger @@ -1590,7 +1591,7 @@ es-AR: qq: QQ Browser safari: Safari uc_browser: UC Browser - unknown_browser: '[Navegador web desconocido]' + unknown_browser: "[Navegador web desconocido]" weibo: Weibo current_session: Sesión actual description: "%{browser} en %{platform}" @@ -1606,7 +1607,7 @@ es-AR: kai_os: KaiOS linux: GNU/Linux mac: macOS - unknown_platform: '[Plataforma desconocida]' + unknown_platform: "[Plataforma desconocida]" windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone @@ -1814,11 +1815,11 @@ es-AR: edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar final_action: Empezá a enviar mensajes - final_step: '¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación».' + final_step: "¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación»." full_handle: Tu nombre de usuario completo full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor. subject: Bienvenido a Mastodon - title: '¡Bienvenido a bordo, %{name}!' + title: "¡Bienvenido a bordo, %{name}!" users: follow_limit_reached: No podés seguir a más de %{limit} cuentas go_to_sso_account_settings: Andá a la configuración de cuenta de tu proveedor de identidad @@ -1839,7 +1840,7 @@ es-AR: 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?' + 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. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index edbcb2f21d1ab6..542478f7167555 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1,3 +1,4 @@ +--- es-MX: about: about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!' @@ -14,7 +15,7 @@ es-MX: 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. last_active: última conexión link_verified_on: La propiedad de este vínculo fue verificada el %{date} - nothing_here: '¡No hay nada aquí!' + nothing_here: "¡No hay nada aquí!" pin_errors: following: Debes estar siguiendo a la persona a la que quieres aprobar posts: @@ -27,13 +28,13 @@ es-MX: title: Moderar %{acct} account_moderation_notes: create: Crear - created_msg: '¡Nota de moderación creada con éxito!' - destroyed_msg: '¡Nota de moderación destruida con éxito!' + created_msg: "¡Nota de moderación creada con éxito!" + destroyed_msg: "¡Nota de moderación destruida con éxito!" accounts: add_email_domain_block: Poner en lista negra el dominio del correo approve: Aprobar approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" avatar: Foto de perfil by_domain: Dominio change_email: @@ -55,7 +56,7 @@ es-MX: delete: Eliminar datos deleted: Borrado demote: Degradar - destroyed_msg: "Los datos de %{username} están ahora en cola para ser eliminados inminentemente" + destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar disable_sign_in_token_auth: Desactivar la autenticación de doble factor disable_two_factor_authentication: Desactivar autenticación de dos factores @@ -86,7 +87,7 @@ es-MX: media_attachments: Multimedia memorialize: Convertir en memorial memorialized: Cuenta conmemorativa - memorialized_msg: '%{username} se convirtió con éxito en una cuenta conmemorativa' + memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa" moderation: active: Activo all: Todos @@ -125,7 +126,7 @@ es-MX: resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar enlace de confirmación - success: '¡Enlace de confirmación enviado con éxito!' + success: "¡Enlace de confirmación enviado con éxito!" reset: Reiniciar reset_password: Reiniciar contraseña resubscribe: Re-suscribir @@ -292,7 +293,7 @@ es-MX: filter_by_user: Filtrar por usuario title: Log de auditoría announcements: - destroyed_msg: '¡Anuncio eliminado con éxito!' + destroyed_msg: "¡Anuncio eliminado con éxito!" edit: title: Editar anuncio empty: No se encontraron anuncios. @@ -301,9 +302,9 @@ es-MX: create: Crear anuncio title: Nuevo anuncio publish: Publicar - published_msg: '¡Anuncio publicado con éxito!' + published_msg: "¡Anuncio publicado con éxito!" scheduled_for: Programado para %{time} - scheduled_msg: '¡Anuncio programado para su publicación!' + scheduled_msg: "¡Anuncio programado para su publicación!" title: Anuncios unpublish: Retirar publicación unpublished_msg: "¡Anuncio despublicado con éxito!" @@ -316,9 +317,9 @@ es-MX: copy: Copiar copy_failed_msg: No se pudo realizar una copia local de ese emoji create_new_category: Crear una nueva categoría - created_msg: '¡Emoji creado con éxito!' + created_msg: "¡Emoji creado con éxito!" delete: Borrar - destroyed_msg: '¡Emojo destruido con éxito!' + destroyed_msg: "¡Emojo destruido con éxito!" disable: Deshabilitar disabled: Desactivado disabled_msg: Se deshabilitó con éxito ese emoji @@ -341,7 +342,7 @@ es-MX: unlist: No listado unlisted: Sin listar update_failed_msg: No se pudo actualizar ese emoji - updated_msg: '¡Emoji actualizado con éxito!' + updated_msg: "¡Emoji actualizado con éxito!" upload: Subir dashboard: active_users: usuarios activos @@ -481,7 +482,7 @@ es-MX: back_to_limited: Limitados back_to_warning: Advertencia by_domain: Dominio - confirm_purge: '¿Seguro que quieres eliminar permanentemente los datos de este dominio?' + confirm_purge: "¿Seguro que quieres eliminar permanentemente los datos de este dominio?" content_policies: comment: Nota interna description_html: Puedes definir políticas de contenido que se aplicarán a todas las cuentas de este dominio y a cualquiera de sus subdominios. @@ -557,7 +558,7 @@ es-MX: no_ip_block_selected: No se han cambiado reglas IP ya que no se ha seleccionado ninguna title: Reglas IP relationships: - title: "Relaciones de %{acct}" + title: Relaciones de %{acct} relays: add_new: Añadir un nuevo relés delete: Borrar @@ -575,8 +576,8 @@ es-MX: status: Estado title: Releses report_notes: - created_msg: '¡El registro de la denuncia se ha creado correctamente!' - destroyed_msg: '¡El registro de la denuncia se ha borrado correctamente!' + created_msg: "¡El registro de la denuncia se ha creado correctamente!" + destroyed_msg: "¡El registro de la denuncia se ha borrado correctamente!" reports: account: notes: @@ -594,7 +595,7 @@ es-MX: actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. add_to_report: Añadir más al reporte - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado by_target_domain: Dominio de la cuenta reportada @@ -630,7 +631,7 @@ es-MX: reported_account: Cuenta reportada reported_by: Reportado por resolved: Resuelto - resolved_msg: '¡La denuncia se ha resuelto correctamente!' + resolved_msg: "¡La denuncia se ha resuelto correctamente!" skip_to_actions: Ir directamente a las acciones status: Estado statuses: Contenido reportado @@ -927,7 +928,7 @@ es-MX: peaked_on_and_decaying: Alcanzó el pico en %{date}, ahora decreciendo title: Etiquetas en tendencia trendable: Pueden aparecer en tendencias - trending_rank: 'Tendencia n.º %{rank}' + trending_rank: Tendencia n.º %{rank} usable: Pueden usarse usage_comparison: Usada %{today} veces hoy, comparado con %{yesterday} ayer used_by_over_week: @@ -1044,11 +1045,11 @@ es-MX: delete_account_html: Si desea eliminar su cuenta, puede proceder aquí. Será pedido de una confirmación. description: prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!" - 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 recibiste un enlace de confirmación?' - dont_have_your_security_key: '¿No tienes tu clave de seguridad?' - forgot_password: '¿Olvidaste tu contraseña?' + 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 recibiste un enlace 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 @@ -1084,8 +1085,8 @@ es-MX: setup: email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu correo electrónico si está mal. email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo. - link_not_received: '¿No recibiste un enlace?' - new_confirmation_instructions_sent: '¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!' + link_not_received: "¿No recibiste un enlace?" + new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisa tu bandeja de entrada sign_in: preamble_html: Registrate con tus credenciales de %{domain}. Si tu cuenta está alojada en un servidor diferente, no podrás iniciar sesión aquí. @@ -1285,8 +1286,8 @@ es-MX: other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: - one: '¡Algo no está bien! Por favor, revisa el error' - other: '¡Algo no está bien! Por favor, revise %{count} errores más abajo' + one: "¡Algo no está bien! Por favor, revisa el error" + other: "¡Algo no está bien! Por favor, revise %{count} errores más abajo" imports: errors: empty: Archivo CSV vacío @@ -1467,7 +1468,7 @@ es-MX: poll: subject: Una encuesta de %{name} ha terminado reblog: - body: '%{name} ha retooteado tu estado:' + body: "%{name} ha retooteado tu estado:" subject: "%{name} ha retooteado tu estado" title: Nueva difusión status: @@ -1496,7 +1497,7 @@ es-MX: 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ás que 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?' + 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 @@ -1536,9 +1537,9 @@ es-MX: unrecognized_emoji: no es un emoji conocido relationships: activity: Actividad de la cuenta - confirm_follow_selected_followers: '¿Estás seguro de que quieres seguir a las cuentas seleccionadas?' - confirm_remove_selected_followers: '¿Estás seguro de que quieres eliminar a los seguidores seleccionados?' - confirm_remove_selected_follows: '¿Estás seguro de que quieres eliminar los seguidos seleccionados?' + confirm_follow_selected_followers: "¿Estás seguro de que quieres seguir a las cuentas seleccionadas?" + confirm_remove_selected_followers: "¿Estás seguro de que quieres eliminar a los seguidores seleccionados?" + confirm_remove_selected_follows: "¿Estás seguro de que quieres eliminar los seguidos seleccionados?" dormant: Inactivo follow_failure: No se pudo seguir algunas de las cuentas seleccionadas. follow_selected_followers: Seguir a los seguidores seleccionados @@ -1667,7 +1668,7 @@ es-MX: reblog: Un boost no puede fijarse poll: total_people: - one: "persona %{count}" + one: persona %{count} other: "%{count} gente" total_votes: one: "%{count} voto" @@ -1814,7 +1815,7 @@ es-MX: edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar final_action: Empezar a publicar - final_step: '¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones.' + final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones." full_handle: Su sobrenombre completo full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon @@ -1839,7 +1840,7 @@ es-MX: 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?' + 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. diff --git a/config/locales/es.yml b/config/locales/es.yml index 2c83db81dfa4bc..4ad353e3aac114 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1,3 +1,4 @@ +--- es: about: about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!' @@ -14,7 +15,7 @@ es: 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. last_active: última conexión link_verified_on: La propiedad de este vínculo fue verificada el %{date} - nothing_here: '¡No hay nada aquí!' + nothing_here: "¡No hay nada aquí!" pin_errors: following: Debes estar siguiendo a la persona a la que quieres aprobar posts: @@ -27,24 +28,24 @@ es: title: Moderar %{acct} account_moderation_notes: create: Crear - created_msg: '¡Nota de moderación creada con éxito!' - destroyed_msg: '¡Nota de moderación destruida con éxito!' + created_msg: "¡Nota de moderación creada con éxito!" + destroyed_msg: "¡Nota de moderación destruida con éxito!" accounts: add_email_domain_block: Poner en lista negra el dominio del correo approve: Aprobar approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" avatar: Avatar by_domain: Dominio change_email: - changed_msg: '¡Email cambiado con éxito!' + changed_msg: "¡Email cambiado con éxito!" current_email: Correo electrónico actual label: Cambiar el correo electrónico new_email: Nuevo correo electrónico submit: Cambiar el correo electrónico title: Cambiar el correo electrónico de %{username} change_role: - changed_msg: '¡Rol cambiado con éxito!' + changed_msg: "¡Rol cambiado con éxito!" label: Cambiar rol no_role: Sin rol title: Cambiar rol para %{username} @@ -55,7 +56,7 @@ es: delete: Eliminar datos deleted: Borrado demote: Degradar - destroyed_msg: "Los datos de %{username} están ahora en cola para ser eliminados inminentemente" + destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar disable_sign_in_token_auth: Deshabilitar la autenticación por token de correo electrónico disable_two_factor_authentication: Desactivar autenticación de dos factores @@ -86,7 +87,7 @@ es: media_attachments: Multimedia memorialize: Convertir en memorial memorialized: Cuenta conmemorativa - memorialized_msg: '%{username} se convirtió con éxito en una cuenta conmemorativa' + memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa" moderation: active: Activo all: Todos @@ -125,7 +126,7 @@ es: resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar enlace de confirmación - success: '¡Enlace de confirmación enviado con éxito!' + success: "¡Enlace de confirmación enviado con éxito!" reset: Reiniciar reset_password: Reiniciar contraseña resubscribe: Re-suscribir @@ -292,7 +293,7 @@ es: filter_by_user: Filtrar por usuario title: Log de auditoría announcements: - destroyed_msg: '¡Anuncio eliminado con éxito!' + destroyed_msg: "¡Anuncio eliminado con éxito!" edit: title: Editar anuncio empty: No se encontraron anuncios. @@ -301,9 +302,9 @@ es: create: Crear anuncio title: Nuevo anuncio publish: Publicar - published_msg: '¡Anuncio publicado con éxito!' + published_msg: "¡Anuncio publicado con éxito!" scheduled_for: Programado para %{time} - scheduled_msg: '¡Anuncio programado para su publicación!' + scheduled_msg: "¡Anuncio programado para su publicación!" title: Anuncios unpublish: Retirar publicación unpublished_msg: "¡Anuncio despublicado con éxito!" @@ -316,9 +317,9 @@ es: copy: Copiar copy_failed_msg: No se pudo realizar una copia local de ese emoji create_new_category: Crear una nueva categoría - created_msg: '¡Emoji creado con éxito!' + created_msg: "¡Emoji creado con éxito!" delete: Borrar - destroyed_msg: '¡Emojo destruido con éxito!' + destroyed_msg: "¡Emojo destruido con éxito!" disable: Deshabilitar disabled: Desactivado disabled_msg: Se deshabilitó con éxito ese emoji @@ -341,7 +342,7 @@ es: unlist: No listado unlisted: Sin listar update_failed_msg: No se pudo actualizar ese emoji - updated_msg: '¡Emoji actualizado con éxito!' + updated_msg: "¡Emoji actualizado con éxito!" upload: Subir dashboard: active_users: usuarios activos @@ -481,7 +482,7 @@ es: back_to_limited: Limitados back_to_warning: Advertencia by_domain: Dominio - confirm_purge: '¿Seguro que quieres eliminar permanentemente los datos de este dominio?' + confirm_purge: "¿Seguro que quieres eliminar permanentemente los datos de este dominio?" content_policies: comment: Nota interna description_html: Puedes definir políticas de contenido que se aplicarán a todas las cuentas de este dominio y a cualquiera de sus subdominios. @@ -557,7 +558,7 @@ es: no_ip_block_selected: No se han cambiado reglas IP ya que no se ha seleccionado ninguna title: Reglas IP relationships: - title: "Relaciones de %{acct}" + title: Relaciones de %{acct} relays: add_new: Añadir un nuevo relés delete: Borrar @@ -575,8 +576,8 @@ es: status: Estado title: Releses report_notes: - created_msg: '¡El registro de la denuncia se ha creado correctamente!' - destroyed_msg: '¡El registro de la denuncia se ha borrado correctamente!' + created_msg: "¡El registro de la denuncia se ha creado correctamente!" + destroyed_msg: "¡El registro de la denuncia se ha borrado correctamente!" reports: account: notes: @@ -594,7 +595,7 @@ es: actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este informe. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. add_to_report: Añadir más al reporte - are_you_sure: '¿Estás seguro?' + are_you_sure: "¿Estás seguro?" assign_to_self: Asignármela a mí assigned: Moderador asignado by_target_domain: Dominio de la cuenta reportada @@ -630,7 +631,7 @@ es: reported_account: Cuenta reportada reported_by: Reportado por resolved: Resuelto - resolved_msg: '¡La denuncia se ha resuelto correctamente!' + resolved_msg: "¡La denuncia se ha resuelto correctamente!" skip_to_actions: Ir directamente a las acciones status: Estado statuses: Contenido reportado @@ -927,7 +928,7 @@ es: peaked_on_and_decaying: Alcanzó el pico en %{date}, ahora decreciendo title: Etiquetas en tendencia trendable: Pueden aparecer en tendencias - trending_rank: 'Tendencia n.º %{rank}' + trending_rank: Tendencia n.º %{rank} usable: Pueden usarse usage_comparison: Usada %{today} veces hoy, comparado con %{yesterday} ayer used_by_over_week: @@ -1084,8 +1085,8 @@ es: setup: email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal. email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo. - link_not_received: '¿No recibiste un enlace?' - new_confirmation_instructions_sent: '¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!' + link_not_received: "¿No recibiste un enlace?" + new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisa tu bandeja de entrada sign_in: preamble_html: Inicia sesión con tus credenciales de %{domain}. Si tu cuenta está alojada en un servidor diferente, no podrás iniciar sesión aquí. @@ -1285,8 +1286,8 @@ es: other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: - one: '¡Algo no está bien! Por favor, revisa el error' - other: '¡Algo no está bien! Por favor, revise %{count} errores más abajo' + one: "¡Algo no está bien! Por favor, revisa el error" + other: "¡Algo no está bien! Por favor, revise %{count} errores más abajo" imports: errors: empty: Archivo CSV vacío @@ -1496,7 +1497,7 @@ es: 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?' + 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 @@ -1536,9 +1537,9 @@ es: unrecognized_emoji: no es un emoji conocido relationships: activity: Actividad de la cuenta - confirm_follow_selected_followers: '¿Estás seguro de que quieres seguir a las cuentas seleccionadas?' - confirm_remove_selected_followers: '¿Estás seguro de que quieres eliminar los seguidores seleccionados?' - confirm_remove_selected_follows: '¿Estás seguro de que quieres eliminar los seguidos seleccionados?' + confirm_follow_selected_followers: "¿Estás seguro de que quieres seguir a las cuentas seleccionadas?" + confirm_remove_selected_followers: "¿Estás seguro de que quieres eliminar los seguidores seleccionados?" + confirm_remove_selected_follows: "¿Estás seguro de que quieres eliminar los seguidos seleccionados?" dormant: Inactivo follow_failure: No se pudieron seguir algunas de las cuentas seleccionadas. follow_selected_followers: Seguir a los seguidores seleccionados @@ -1814,7 +1815,7 @@ es: edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar final_action: Empezar a publicar - final_step: '¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones.' + final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones." full_handle: Su sobrenombre completo full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon @@ -1839,7 +1840,7 @@ es: 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?' + 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. diff --git a/config/locales/et.yml b/config/locales/et.yml index 6d042e547c6269..4f5a83624edc09 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1,3 +1,4 @@ +--- et: about: about_mastodon_html: 'Tuleviku sotsiaalvõrgustik: Reklaamivaba, korporatiivse järelvalveta, eetiline kujundus ning detsentraliseeritus! Oma enda andmeid Mastodonis!' @@ -47,7 +48,7 @@ et: changed_msg: Roll on muudetud! label: Muuda rolli no_role: Roll puudub - title: '%{username} rolli muutmine' + title: "%{username} rolli muutmine" confirm: Kinnita confirmed: Kinnitatud confirming: Kinnitamisel @@ -86,7 +87,7 @@ et: media_attachments: Lisatud meedia memorialize: Igaveseks lahkunud memorialized: Igaveselt lahkunuks märgitud - memorialized_msg: '%{username} on märgitud igavaselt lahkunuks' + memorialized_msg: "%{username} on märgitud igavaselt lahkunuks" moderation: active: Aktiivne all: Kõik @@ -113,15 +114,15 @@ et: public: Avalik push_subscription_expires: PuSH tellimus aegub redownload: Värskenda profiili - redownloaded_msg: '%{username} kasutajakonto algallikast värskendatud' + redownloaded_msg: "%{username} kasutajakonto algallikast värskendatud" reject: Hülga - rejected_msg: '%{username} liitumisavaldus tagasi lükatud' + rejected_msg: "%{username} liitumisavaldus tagasi lükatud" remote_suspension_irreversible: Selle konto andmed on pöördumatult kustutatud. remote_suspension_reversible_hint_html: Konto on lukustatud ja andmed kustutatakse jäädavalt %{date}. Seni võib teine server konto probleemideta taastada. Kui soovid andmied kohe jäädavalt eemaldada, võid seda teha allpool. remove_avatar: Kustuta profiilipilt remove_header: Kustuta päis - removed_avatar_msg: '%{username} tunnuspilt eemaldatud' - removed_header_msg: '%{username} päisepilt eemaldatud' + removed_avatar_msg: "%{username} tunnuspilt eemaldatud" + removed_header_msg: "%{username} päisepilt eemaldatud" resend_confirmation: already_confirmed: See kasutaja on juba kinnitatud send: Saada kinnituslink uuesti @@ -561,7 +562,7 @@ et: relays: add_new: Lisa uus vahendaja delete: Kustuta - description_html: Födereerumisvahendaja on vahendav server, mis kannab üle suures koguses avalikke postitusi nende serverite vahel, mis on sellega liitunud ja edastavad sellele oma postitusi. See aitab väikestel ja keskmistel serveritel avastada födiversumi sellist sisu, mis muidu eeldaks kohalikelt kasutajatelt nende serverite kasutajate jälgitavaks märkimist. + description_html: "Födereerumisvahendaja on vahendav server, mis kannab üle suures koguses avalikke postitusi nende serverite vahel, mis on sellega liitunud ja edastavad sellele oma postitusi. See aitab väikestel ja keskmistel serveritel avastada födiversumi sellist sisu, mis muidu eeldaks kohalikelt kasutajatelt nende serverite kasutajate jälgitavaks märkimist." disable: Keela disabled: Keelatud enable: Luba @@ -644,8 +645,8 @@ et: actions: delete_html: Solvava postituse eemaldamine mark_as_sensitive_html: Solvava postituse meedia märkimine tundlikuks - silence_html: @%{acct} ulatuse tugev piiramine muutes tema profiili ja sisu nähtavaks ainult neile, kes teda juba jälgivad, või neile, kes just tema profiili üles otsivad - suspend_html: @%{acct} peatamine, muutes tema profiili ja sisu mitteligipääsetavaks ning mitteinterakteerutavaks + silence_html: "@%{acct} ulatuse tugev piiramine muutes tema profiili ja sisu nähtavaks ainult neile, kes teda juba jälgivad, või neile, kes just tema profiili üles otsivad" + suspend_html: "@%{acct} peatamine, muutes tema profiili ja sisu mitteligipääsetavaks ning mitteinterakteerutavaks" close_report: 'Raporti #%{id} lahendatuks märkimine' close_reports_html: Märgi kõik raportid @%{acct} vastu lahendatuks delete_data_html: Kustuta tänasest 30 päeva pärast kasutaja @%{acct} profiil ja sisu, kui vahepeal tema kontot ei taastata @@ -672,7 +673,7 @@ et: moderation: Modereerimine special: Eriline delete: Kustuta - description_html: Kasutajarollide abil saab kohandada, millistele Mastodoni funktsioonidele ja piirkondadele kasutajad ligi pääsevad. + description_html: "Kasutajarollide abil saab kohandada, millistele Mastodoni funktsioonidele ja piirkondadele kasutajad ligi pääsevad." edit: Muuda '%{name}' rolli everyone: Vaikimisi load everyone_full_description_html: See on baasroll mõjudes kõigile kasutajatele, ka määramata rolliga. Kõik teised rollid pärivad selle rolli õigused. @@ -930,7 +931,7 @@ et: webhooks: add_new: Lisa lõpp-punkt delete: Kustuta - description_html: Veebihaak võimaldab Mastodonil edastada valitud sündmuste kohta su rakendusele reaalajas märguandeid, et rakendus saaks automaatselt reaktsioone käivitada. + description_html: "Veebihaak võimaldab Mastodonil edastada valitud sündmuste kohta su rakendusele reaalajas märguandeid, et rakendus saaks automaatselt reaktsioone käivitada." disable: Keela disabled: Keelatud edit: Muuda lõpp-punkti @@ -1191,7 +1192,7 @@ et: archive_takeout: date: Kuupäev download: Lae alla oma arhiiv - hint_html: Postitustest ja üleslaetud meediast on võimalik saada koopia. Eksporditud andmed on ActivityPub-formaadis, loetav vastava tarkvara poolt. Koopia saamine on võimalik iga 7 päeva järel. + hint_html: "Postitustest ja üleslaetud meediast on võimalik saada koopia. Eksporditud andmed on ActivityPub-formaadis, loetav vastava tarkvara poolt. Koopia saamine on võimalik iga 7 päeva järel." in_progress: Loome arhiivi... request: Taotle oma arhiivi size: Suurus @@ -1433,7 +1434,7 @@ et: sign_up: subject: "%{name} liitus" favourite: - body: '%{name} lisas su postituse lemmikutesse:' + body: "%{name} lisas su postituse lemmikutesse:" subject: "%{name} märkis su postituse lemmikuks" title: Uus lemmik follow: @@ -1447,13 +1448,13 @@ et: title: Uus jälgimistaotlus mention: action: Vasta - body: '%{name} mainis sind:' - subject: '%{name} mainis sind' + body: "%{name} mainis sind:" + subject: "%{name} mainis sind" title: Uus mainimine poll: - subject: '%{name} küsitlus lõppes' + subject: "%{name} küsitlus lõppes" reblog: - body: '%{name} jagas edasi postitust:' + body: "%{name} jagas edasi postitust:" subject: "%{name} jagas postitust" title: Uus jagamine status: @@ -1549,7 +1550,7 @@ et: rss: content_warning: 'Sisuhoiatus:' descriptions: - account: '@%{acct} avalikud postitused' + account: "@%{acct} avalikud postitused" tag: 'Avalikud postitused sildiga #%{hashtag}' scheduled_statuses: over_daily_limit: Lubatud ajastatud postituste arv %{limit} päevas on tänaseks ületatud @@ -1635,7 +1636,7 @@ et: video: one: "%{count} video" other: "%{count} videot" - boosted_from_html: '%{acct_link} jagamine' + boosted_from_html: "%{acct_link} jagamine" content_warning: 'Sisu hoiatus: %{warning}' default_language: Kasutajaliidese keelega sama disallowed_hashtags: @@ -1704,7 +1705,9 @@ et: '7889238': 3 kuud min_age_label: Ajalimiit min_favs: Säilita postitused, meeldimistega vähemalt - min_favs_hint: "Ei kustuta ühtegi postitust, mis on saanud vähemalt nii palju lemmikuks märkimist. Postituste kustutamiseks olenemata nende lemmikuks märkimise arvust,\njäta tühjaks" + min_favs_hint: |- + Ei kustuta ühtegi postitust, mis on saanud vähemalt nii palju lemmikuks märkimist. Postituste kustutamiseks olenemata nende lemmikuks märkimise arvust, + jäta tühjaks min_reblogs: Säilita postitused jagatud vähemalt min_reblogs_hint: Ei kustuta postitusi, kui need on jagatud vähemalt nii mitu korda. Tühjaks jättes kustuvad postitused olenemata jagamistest stream_entries: @@ -1746,12 +1749,12 @@ et: user_mailer: appeal_approved: action: Oma kontole - explanation: '%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on rahuldatud. Konto on ennistatud.' - subject: '%{date} esitatud vaidlustus on rahuldatud' + explanation: "%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on rahuldatud. Konto on ennistatud." + subject: "%{date} esitatud vaidlustus on rahuldatud" title: Vaidlustus rahuldatud appeal_rejected: - explanation: '%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on tagasi lükatud.' - subject: '%{date} esitatud vaidlustus on tagasi lükatud' + explanation: "%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on tagasi lükatud." + subject: "%{date} esitatud vaidlustus on tagasi lükatud" title: Vaidlustus tagasi lükatud backup_ready: explanation: Taotlesid oma Mastodoni konto varukoopiat. See on nüüd valmis allalaadimiseks! @@ -1797,7 +1800,10 @@ et: suspend: Konto kustutatud welcome: edit_profile_action: Seadista oma profiil - edit_profile_step: "Esmalt seadista oma profiil. Saad lisada profiilipildi, muuta ekraaninime, lisada lühikirjelduse ja teha paljut muud. Vaata üle oma konto seaded. Saad ise otsustada, kui nähtav on konto teiste jaoks, mis keeltes postitusi oma ajavoos näha soovid ning kui privaatne peaks konto olema.\n\nKui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q" + edit_profile_step: |- + Esmalt seadista oma profiil. Saad lisada profiilipildi, muuta ekraaninime, lisada lühikirjelduse ja teha paljut muud. Vaata üle oma konto seaded. Saad ise otsustada, kui nähtav on konto teiste jaoks, mis keeltes postitusi oma ajavoos näha soovid ning kui privaatne peaks konto olema. + + Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q explanation: Siin on mõned nõuanded, mis aitavad alustada final_action: Alusta postitamist final_step: 'Nüüd tee oma esimene postitus. Hea tava on uues kohas ennast tutvustada ning kindlasti kasuta selles postituses ka teemaviidet #tutvustus. Isegi kui sul ei ole veel jälgijaid, siis su postitusi näevad kohalikul ajajoonel ka kõik teised serveri kasutajad.' diff --git a/config/locales/eu.yml b/config/locales/eu.yml index c5bf8a68628fdd..d21259ee77e3d0 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1,3 +1,4 @@ +--- eu: about: about_mastodon_html: 'Etorkizuneko sare soziala: ez iragarkirik eta ez zelatatze korporatiborik, diseinu etikoa eta deszentralizazioa! Izan zure datuen jabea Mastodonekin!' @@ -32,7 +33,7 @@ eu: accounts: add_email_domain_block: Sartu domeinua zerrenda beltzean approve: Onartu - approved_msg: '%{username} erabiltzailearen erregistratzeko eskaera behar bezala onartu da' + approved_msg: "%{username} erabiltzailearen erregistratzeko eskaera behar bezala onartu da" are_you_sure: Ziur zaude? avatar: Abatarra by_domain: Domeinua @@ -68,7 +69,7 @@ eu: enable: Gaitu enable_sign_in_token_auth: Gaitu e-posta token autentifikazioa enabled: Gaituta - enabled_msg: '%{username} kontua behar bezala desblokeatu da' + enabled_msg: "%{username} kontua behar bezala desblokeatu da" followers: Jarraitzaileak follows: Jarraitzen du header: Goiburua @@ -86,7 +87,7 @@ eu: media_attachments: Multimedia eranskinak memorialize: Bihurtu memoriala memorialized: Oroigarri bihurtua - memorialized_msg: '%{username} behar bezala bihurtu da oroigarri kontu' + memorialized_msg: "%{username} behar bezala bihurtu da oroigarri kontu" moderation: active: Aktiboa all: Denak @@ -113,15 +114,15 @@ eu: public: Publikoa push_subscription_expires: Push harpidetzaren iraugitzea redownload: Freskatu profila - redownloaded_msg: '%{username} erabiltzailearen profila behar bezala freskatu da jatorritik' + redownloaded_msg: "%{username} erabiltzailearen profila behar bezala freskatu da jatorritik" reject: Ukatu - rejected_msg: '%{username} erabiltzailearen izen emate eskaera behar bezala ukatu da' + rejected_msg: "%{username} erabiltzailearen izen emate eskaera behar bezala ukatu da" remote_suspension_irreversible: Kontu honetako datuak betiko ezabatuak izan dira. remote_suspension_reversible_hint_html: Kontu hau kanporatua izan da bere zerbitzarian eta bere datuak %{date}(e)an behin betiko ezabatuko dira. Ordura arte urruneko zerbitzariak kontua kalterik gabe leheneratu dezake. Kontuaren datu guztiak oraintxe bertan ezabatu nahi badituzu, jarraian egin dezakezu. remove_avatar: Kendu abatarra remove_header: Kendu goiburua - removed_avatar_msg: '%{username} erabiltzailearen avatarra behar bezala kendu da' - removed_header_msg: '%{username} erabiltzailearen goiburuko irudia behar bezala kendu da' + removed_avatar_msg: "%{username} erabiltzailearen avatarra behar bezala kendu da" + removed_header_msg: "%{username} erabiltzailearen goiburuko irudia behar bezala kendu da" resend_confirmation: already_confirmed: Erabiltzaile hau berretsita dago send: Bidali berrespen-esteka berriro @@ -159,9 +160,9 @@ eu: undo_sensitized: Desegin hunkigarria undo_silenced: Utzi isilarazteari undo_suspension: Desegin kanporatzea - unsilenced_msg: '%{username} kontuaren mugak behar bezala kendu dira' + unsilenced_msg: "%{username} kontuaren mugak behar bezala kendu dira" unsubscribe: Kendu harpidetza - unsuspended_msg: '%{username} kontuaren kanporatzea behar bezala bota da atzera' + unsuspended_msg: "%{username} kontuaren kanporatzea behar bezala bota da atzera" username: Erabiltzaile-izena view_domain: Ikusi domeinuaren laburpena warn: Abisatu @@ -302,7 +303,7 @@ eu: title: Iragarpen berria publish: Argitaratu published_msg: Iragarpena ongi argitaratu da! - scheduled_for: '%{time}-rako programatuta' + scheduled_for: "%{time}-rako programatuta" scheduled_msg: Iragarpena argitaratzeko programatuta! title: Iragarpenak unpublish: Desargitaratu @@ -326,7 +327,7 @@ eu: enable: Gaitu enabled: Gaituta enabled_msg: Emoji hori ongi gaitu da - image_hint: '%{size} arteko PNG edo GIF' + image_hint: "%{size} arteko PNG edo GIF" list: Zerrendatu listed: Zerrendatua new: @@ -350,16 +351,16 @@ eu: new_users: erabiltzaile berri opened_reports: txosten irekita pending_appeals_html: - one: "Apelazio %{count} zain" + one: Apelazio %{count} zain other: "%{count} apelazio zain" pending_reports_html: - one: "Txosten %{count} zain" + one: Txosten %{count} zain other: "%{count} txosten zain" pending_tags_html: - one: "Traola %{count} zain" + one: Traola %{count} zain other: "%{count} traola zain" pending_users_html: - one: "Erabiltzaile %{count} zain" + one: Erabiltzaile %{count} zain other: "%{count} erabiltzaile zain" resolved_reports: txosten konponduta software: Softwarea @@ -403,7 +404,9 @@ eu: create: Sortu blokeoa hint: Domeinuaren blokeoak ez du eragotziko kontuen sarrerak sortzea datu-basean, baina automatikoki ezarriko zaizkie moderazio metodo bereziak iraganeko mezuetan ere. severity: - desc_html: "Mugatu aukerak, domeinu hontako kontu guztien bidalketak ikusezinak bihurtuko dira jarraitzen ez dituztenentzat.\nEgotzi aukerak, domeinu hontako kontu guztien, edukiak, media eta profilen datuak ezabatuak izango dira zure zerbitzaritik. Erabili Bat ere ez aukera soilik media-fitxategiak ukatu nahi badituzu." + desc_html: |- + Mugatu aukerak, domeinu hontako kontu guztien bidalketak ikusezinak bihurtuko dira jarraitzen ez dituztenentzat. + Egotzi aukerak, domeinu hontako kontu guztien, edukiak, media eta profilen datuak ezabatuak izango dira zure zerbitzaritik. Erabili Bat ere ez aukera soilik media-fitxategiak ukatu nahi badituzu. noop: Bat ere ez silence: Isilarazi suspend: Kanporatu @@ -425,8 +428,8 @@ eu: email_domain_blocks: add_new: Gehitu berria attempts_over_week: - one: "Izen-emateko saiakera %{count} azken astean" - other: "Izen-emateko %{count} saiakera azken astean" + one: Izen-emateko saiakera %{count} azken astean + other: Izen-emateko %{count} saiakera azken astean created_msg: Ongi gehitu da e-mail helbidea domeinuen zerrenda beltzera delete: Ezabatu dns: @@ -440,7 +443,7 @@ eu: no_email_domain_block_selected: Ez da eposta domeinu blokeorik aldatu ez delako bat ere hautatu not_permitted: Baimendu gabea resolved_dns_records_hint_html: Domeinu-izena ondorengo MX domeinuetara ebazten da, zeinek eposta onartzeko ardura duten. MX domeinu bat blokeatzeak MX domeinu hori erabiltzen duen edozein helbide elektronikotatik izena-ematea blokeatzen du, baita ikusgai dagoen domeinu-izena beste bat bada ere. Kontuz ibili eposta hornitzaile nagusiak blokeatu gabe. - resolved_through_html: '%{domain} domeinuaren bidez ebatzia' + resolved_through_html: "%{domain} domeinuaren bidez ebatzia" title: E-mail zerrenda beltza export_domain_allows: new: @@ -451,7 +454,7 @@ eu: description_html: Blokeatutako domeinuen zerrenda bat inportatzera zoaz. Mesedez, berrikusi zerrenda kontu handiz, batez ere, zuk ez baduzu zerrenda hau egin. existing_relationships_warning: Oraingo jarraipen-loturak private_comment_description_html: 'Inportatutako blokeoak nondik datozen zuri jakiten laguntzeko, hauek hurrengo iruzkin pribatuarekin sortuko dira: %{comment}' - private_comment_template: '%{date} %{source}-(e)tik inportatua' + private_comment_template: "%{date} %{source}-(e)tik inportatua" title: Domeinu-blokeoak inportatu invalid_domain_block: 'Domeinu-blokeatze bat edo gehiago ekidin dira ondorengo errorearen edo erroreengatik: %{error}' new: @@ -513,10 +516,10 @@ eu: delivery_available: Bidalketa eskuragarri dago delivery_error_days: Banaketa errore egunak delivery_error_hint: Banaketa ezin bada %{count} egunean egin, banaezin bezala markatuko da automatikoki. - destroyed_msg: '%{domain} domeinuko datuak berehala ezabatzeko ilaran daude orain.' + destroyed_msg: "%{domain} domeinuko datuak berehala ezabatzeko ilaran daude orain." empty: Ez da domeinurik aurkitu. known_accounts: - one: "Kontu ezagun %{count}" + one: Kontu ezagun %{count} other: "%{count} kontu ezagun" moderation: all: Denak @@ -561,7 +564,7 @@ eu: relays: add_new: Gehitu hari errelea delete: Ezabatu - description_html: Federazio errele bat zerbitzari tartekari bat da, bertara harpidetutako eta bertan argitaratzen duten zerbitzarien artean bidalketa publiko kopuru handiak banatzen ditu. Zerbitzari txiki eta ertainei Fedibertsoko edukia aurkitzen laguntzen die, bestela erabiltzaile lokalek eskuz jarraitu beharko lituzkete urruneko zerbitzarietako erabiltzaileak. + description_html: "Federazio errele bat zerbitzari tartekari bat da, bertara harpidetutako eta bertan argitaratzen duten zerbitzarien artean bidalketa publiko kopuru handiak banatzen ditu. Zerbitzari txiki eta ertainei Fedibertsoko edukia aurkitzen laguntzen die, bestela erabiltzaile lokalek eskuz jarraitu beharko lituzkete urruneko zerbitzarietako erabiltzaileak." disable: Desgaitu disabled: Desgaituta enable: Gaitu @@ -580,7 +583,7 @@ eu: reports: account: notes: - one: "Ohar %{count}" + one: Ohar %{count} other: "%{count} ohar" action_log: Auditoria-egunkaria action_taken_by: Neurrien hartzailea @@ -622,9 +625,9 @@ eu: placeholder: Azaldu hartutako neurriak, edo erlazioa duten bestelako berriak... title: Oharrak notes_description_html: Ikusi eta idatzi oharrak beste moderatzaileentzat eta zuretzat etorkizunerako - processed_msg: '#%{id} txostena ongi prozesatu da' + processed_msg: "#%{id} txostena ongi prozesatu da" quick_actions_description_html: 'Hartu ekintza azkar bat edo korritu behera salatutako edukia ikusteko:' - remote_user_placeholder: '%{instance} instantziako urruneko erabiltzailea' + remote_user_placeholder: "%{instance} instantziako urruneko erabiltzailea" reopen: Berrireki salaketa report: 'Salaketa #%{id}' reported_account: Salatutako kontua @@ -637,21 +640,21 @@ eu: statuses_description_html: Salatutako edukia salatutako kontuarekiko komunikazioan aipatuko da summary: action_preambles: - delete_html: '@%{acct} kontuaren bidalketa guztiak ezabatzera zoaz. Honek hau suposatuko du:' - mark_as_sensitive_html: '%{acct} kontuaren bidalketa guztiak hunkigarri gisa markatzera zoaz. Honek hau suposatuko du:' - silence_html: '@%{acct} kontua mugatzera zoaz. Honek hau suposatuko du:' - suspend_html: '@%{acct} kontua bertan behera uztera zoaz. Honek hau suposatuko du:' + delete_html: "@%{acct} kontuaren bidalketa guztiak ezabatzera zoaz. Honek hau suposatuko du:" + mark_as_sensitive_html: "%{acct} kontuaren bidalketa guztiak hunkigarri gisa markatzera zoaz. Honek hau suposatuko du:" + silence_html: "@%{acct} kontua mugatzera zoaz. Honek hau suposatuko du:" + suspend_html: "@%{acct} kontua bertan behera uztera zoaz. Honek hau suposatuko du:" actions: delete_html: Bidalketa iraingarriak ezabatu mark_as_sensitive_html: Bidalketa iraingarrien media hunkigarri gisa markatu - silence_html: @%{acct} kontuaren irismena gogorki mugatu, beraren profila eta edukia soilik bere jarraitzaileentzat eta espresuki profila aurkitzen dutenentzat ikusgarri egiten direlarik - suspend_html: @%{acct} kontua bertan behera utzi, bere profila eta edukia iritsezin eta elkarreragin ezina izango direlarik - close_report: '#%{id} txostena ebatzitako gisa markatu' - close_reports_html: @%{acct} kontuaren txosten guztiak ebatzitako gisa markatu - delete_data_html: @%{acct} kontuaren profila eta edukia, gaurtik hasita, 30 egunez ezabatu, ez bada bitartean kontua berraktibatzen + silence_html: "@%{acct} kontuaren irismena gogorki mugatu, beraren profila eta edukia soilik bere jarraitzaileentzat eta espresuki profila aurkitzen dutenentzat ikusgarri egiten direlarik" + suspend_html: "@%{acct} kontua bertan behera utzi, bere profila eta edukia iritsezin eta elkarreragin ezina izango direlarik" + close_report: "#%{id} txostena ebatzitako gisa markatu" + close_reports_html: "@%{acct} kontuaren txosten guztiak ebatzitako gisa markatu" + delete_data_html: "@%{acct} kontuaren profila eta edukia, gaurtik hasita, 30 egunez ezabatu, ez bada bitartean kontua berraktibatzen" preview_preamble_html: "@%{acct} kontuak ondorengo edukia duen abisu bat jasoko du:" - record_strike_html: @%{acct} kontuak eginiko eraso bat erregistratu, kontu honek etorkizunean egin ditzakeen erasoen aurrean erabakiak hartzen laguntzeko - send_email_html: @%{acct} kontuari abisu bat posta-elektronikoz bidali + record_strike_html: "@%{acct} kontuak eginiko eraso bat erregistratu, kontu honek etorkizunean egin ditzakeen erasoen aurrean erabakiak hartzen laguntzeko" + send_email_html: "@%{acct} kontuari abisu bat posta-elektronikoz bidali" warning_placeholder: Moderazio-ekintzarako aukerazkoak diren arrazoiketa gehigarriak. target_origin: Salatutako kontuaren jatorria title: Salaketak @@ -663,7 +666,7 @@ eu: roles: add_new: Gehitu rola assigned_users: - one: "Erabiltzaile %{count}" + one: Erabiltzaile %{count} other: "%{count} erabiltzaile" categories: administration: Administrazioa @@ -672,12 +675,12 @@ eu: moderation: Moderazioa special: Berezia delete: Ezabatu - description_html: Erabiltzaile rolak erabiliz erabiltzaileek Mastodonen ze funtzio eta lekutara sarbidea duten pertsonalizatu dezakezu. + description_html: "Erabiltzaile rolak erabiliz erabiltzaileek Mastodonen ze funtzio eta lekutara sarbidea duten pertsonalizatu dezakezu." edit: Editatu '%{name}' rola everyone: Baimen lehenetsiak everyone_full_description_html: Hau erabiltzaile guztiei eragiten dien oinarrizko rola da, rol bat esleitu gabekoei ere bai. Gainerako rolek honetatik heredatzen dituzte baimenak. permissions_count: - one: "Baimen %{count}" + one: Baimen %{count} other: "%{count} baimen" privileges: administrator: Administratzailea @@ -880,9 +883,9 @@ eu: no_publisher_selected: Ez da argitaratzailerik aldatu ez delako bat ere hautatu shared_by_over_week: one: Pertsona batek partekatua azken astean - other: '%{count} pertsonak partekatua azken astean' + other: "%{count} pertsonak partekatua azken astean" title: Esteken joerak - usage_comparison: '%{today} aldiz partekatua gaur, atzo %{yesterday} aldiz' + usage_comparison: "%{today} aldiz partekatua gaur, atzo %{yesterday} aldiz" not_allowed_to_trend: Joeretan agertzeko baimenik gabe only_allowed: Soilik onartutakoak pending_review: Berrikusketaren zain @@ -902,7 +905,7 @@ eu: not_discoverable: Egileak ez du aukeratu aurkikuntza ezaugarrietan agertzea shared_by: one: Behin partekatua edo gogoko egina - other: '%{friendly_count} aldiz partekatua edo gogoko egina' + other: "%{friendly_count} aldiz partekatua edo gogoko egina" title: Bidalketen joerak tags: current_score: Uneko emaitza%{score} @@ -918,15 +921,15 @@ eu: not_listable: Ez da gomendatuko not_trendable: Ez da joeretan agertuko not_usable: Ezin da erabili - peaked_on_and_decaying: '%{date} datan jo du goia, orain beherantz' + peaked_on_and_decaying: "%{date} datan jo du goia, orain beherantz" title: Traolak joeran trendable: Joeretan agertuko da - trending_rank: '%{rank}. joera' + trending_rank: "%{rank}. joera" usable: Erabili daiteke - usage_comparison: '%{today} aldiz erabili da gaur, atzo %{yesterday} aldiz' + usage_comparison: "%{today} aldiz erabili da gaur, atzo %{yesterday} aldiz" used_by_over_week: one: Pertsona batek erabilia azken astean - other: '%{count} pertsonak erabilia azken astean' + other: "%{count} pertsonak erabilia azken astean" title: Joerak trending: Joerak warning_presets: @@ -938,7 +941,7 @@ eu: webhooks: add_new: Gehitu amaiera-puntua delete: Ezabatu - description_html: Webhook batek aukera ematen dio Mastodoni zure aplikazioari aukeratutako gertaeren jakinarazpenak denbora errealean bidaltzeko, zure aplikazioak automatikoki erantzunak abiarazi ditzan. + description_html: "Webhook batek aukera ematen dio Mastodoni zure aplikazioari aukeratutako gertaeren jakinarazpenak denbora errealean bidaltzeko, zure aplikazioak automatikoki erantzunak abiarazi ditzan." disable: Desgaitu disabled: Desgaituta edit: Editatu amaiera-puntua @@ -947,7 +950,7 @@ eu: enabled: Aktiboa enabled_events: one: Gaitutako gertaera bat - other: "Gaitutako %{count} gertaera" + other: Gaitutako %{count} gertaera events: Gertaerak new: Webhook berria rotate_secret: Biratu sekretua @@ -975,8 +978,8 @@ eu: subject: Kontu berria berrikusteko %{instance} instantzian (%{username}) new_report: body: "%{reporter}(e)k %{target} salatu du" - body_remote: '%{domain} domeinuko norbaitek %{target} salatu du' - subject: 'Salaketa berria %{instance} instantzian (#%{id})' + body_remote: "%{domain} domeinuko norbaitek %{target} salatu du" + subject: Salaketa berria %{instance} instantzian (#%{id}) new_trends: body: 'Ondorengo elementuak berrikusi behar dira publikoki bistaratu aurretik:' new_trending_links: @@ -1079,11 +1082,11 @@ eu: title: Begiratu zure sarrera-ontzia sign_in: preamble_html: Zure %{domain}-(e)ko egiaztagiriekin saioa hasi. Zure kontua beste zerbitzari batean badago, ezin izango duzu hemen saioa hasi. - title: '%{domain}-(e)an saioa hasi' + title: "%{domain}-(e)an saioa hasi" sign_up: - manual_review: '%{domain}-(e)n eginiko izen-emateak gure moderatzaileek eskuz aztertzen dituzte. Zure izen-ematea prozesatzen lagun gaitzazun, idatz ezazu zertxobait zuri buruz eta azaldu zergatik nahi duzun %{domain}-(e)n kontu bat.' + manual_review: "%{domain}-(e)n eginiko izen-emateak gure moderatzaileek eskuz aztertzen dituzte. Zure izen-ematea prozesatzen lagun gaitzazun, idatz ezazu zertxobait zuri buruz eta azaldu zergatik nahi duzun %{domain}-(e)n kontu bat." preamble: Mastodon zerbitzari honetako kontu batekin, aukera izango duzu sareko edozein pertsona jarraitzeko, ez dio axola kontua non ostatatua dagoen. - title: '%{domain} zerbitzariko kontua prestatuko dizugu.' + title: "%{domain} zerbitzariko kontua prestatuko dizugu." status: account_status: Kontuaren egoera confirming: E-mail baieztapena osatu bitartean zain. @@ -1153,7 +1156,7 @@ eu: description_html: Hauek dira %{instance} instantziako arduradunek zure kontuaren aurka hartutako ekintzak eta bidali dizkizuten abisuak. recipient: Honi zuzendua reject_appeal: Baztertu apelazioa - status: '%{id} bidalketa' + status: "%{id} bidalketa" status_removed: Bidalketa dagoeneko ezabatu da sistematik title: "%{date}(e)ko %{action}" title_actions: @@ -1228,20 +1231,20 @@ eu: deprecated_api_multiple_keywords: Parametro hauek ezin dira aldatu aplikazio honetatik, iragazitako gako-hitz bat baino gehiagori eragiten diotelako. Erabili aplikazio berriago bat edo web interfazea. invalid_context: Testuinguru baliogabe edo hutsa eman da index: - contexts: '%{contexts} testuinguruetako iragazkiak' + contexts: "%{contexts} testuinguruetako iragazkiak" delete: Ezabatu empty: Ez duzu iragazkirik. - expires_in: '%{distance}(a)n iraungitzen da' - expires_on: '%{date}(a)n iraungitzen da' + expires_in: "%{distance}(a)n iraungitzen da" + expires_on: "%{date}(a)n iraungitzen da" keywords: - one: "Gako-hitz %{count}" + one: Gako-hitz %{count} other: "%{count} gako-hitz" statuses: - one: "Bidalketa %{count}" + one: Bidalketa %{count} other: "%{count} bidalketa" statuses_long: - one: "Banako bidalketa %{count} ezkutatuta" - other: "Banako %{count} bidalketa ezkutatuta" + one: Banako bidalketa %{count} ezkutatuta + other: Banako %{count} bidalketa ezkutatuta title: Iragazkiak new: save: Gorde iragazki berria @@ -1256,10 +1259,10 @@ eu: generic: all: Denak all_items_on_page_selected_html: - one: "Orri honetako elementu %{count} hautatuta." + one: Orri honetako elementu %{count} hautatuta. other: Orri honetako %{count} elementuak hautatuta. all_matching_items_selected_html: - one: "Zure bilaketarekin bat datorren elementu %{count} hautatuta." + one: Zure bilaketarekin bat datorren elementu %{count} hautatuta. other: Zure bilaketarekin bat datozen %{count} elementu hautatuta. cancel: Utzi changes_saved_msg: Aldaketak ongi gorde dira! @@ -1439,7 +1442,7 @@ eu: sign_up: subject: "%{name} erabiltzailea erregistratu da" favourite: - body: '%{name}(e)k zure bidalketa gogoko du:' + body: "%{name}(e)k zure bidalketa gogoko du:" subject: "%{name}(e)k zure bidalketa gogoko du" title: Gogoko berria follow: @@ -1453,13 +1456,13 @@ eu: title: Jarraitzeko eskaera berria mention: action: Erantzun - body: '%{name}(e)k aipatu zaitu:' - subject: '%{name}(e)k aipatu zaitu' + body: "%{name}(e)k aipatu zaitu:" + subject: "%{name}(e)k aipatu zaitu" title: Aipamen berria poll: - subject: '%{name} erabiltzailearen inkesta bat amaitu da' + subject: "%{name} erabiltzailearen inkesta bat amaitu da" reblog: - body: '%{name}(e)k bultzada eman dio zure bidalketari:' + body: "%{name}(e)k bultzada eman dio zure bidalketari:" subject: "%{name}(e)k bultzada eman dio zure bidalketari" title: Bultzada berria status: @@ -1555,8 +1558,8 @@ eu: rss: content_warning: 'Edukiaren abisua:' descriptions: - account: '@%{acct} kontuaren bidalketa publikoak' - tag: '#%{hashtag} traola duten bidalketa publikoak' + account: "@%{acct} kontuaren bidalketa publikoak" + tag: "#%{hashtag} traola duten bidalketa publikoak" scheduled_statuses: over_daily_limit: 'Egun horretarako programatutako bidalketa kopuruaren muga gainditu duzu: %{limit}' over_total_limit: 'Programatutako bidalketa kopuruaren muga gainditu duzu: %{limit}' @@ -1632,16 +1635,16 @@ eu: statuses: attached: audio: - one: "Audio %{count}" + one: Audio %{count} other: "%{count} audio" description: 'Erantsita: %{attached}' image: - one: "irudi %{count}" + one: irudi %{count} other: "%{count} irudi" video: - one: "bideo %{count}" + one: bideo %{count} other: "%{count} bideo" - boosted_from_html: '%{acct_link}(e)tik bultzatua' + boosted_from_html: "%{acct_link}(e)tik bultzatua" content_warning: 'Edukiaren abisua: %{warning}' default_language: Interfazearen hizkuntzaren berdina disallowed_hashtags: @@ -1651,7 +1654,7 @@ eu: errors: in_reply_not_found: Erantzuten saiatu zaren bidalketa antza ez da existitzen. open_in_web: Ireki web-ean - over_character_limit: '%{max}eko karaktere muga gaindituta' + over_character_limit: "%{max}eko karaktere muga gaindituta" pin_errors: direct: Aipatutako erabiltzaileentzat soilik ikusgai dauden bidalketak ezin dira finkatu limit: Gehienez finkatu daitekeen bidalketa kopurua finkatu duzu jada @@ -1659,10 +1662,10 @@ eu: reblog: Bultzada bat ezin da finkatu poll: total_people: - one: "pertsona %{count}" + one: pertsona %{count} other: "%{count} pertsona" total_votes: - one: "Boto %{count}" + one: Boto %{count} other: "%{count} boto" vote: Bozkatu show_more: Erakutsi gehiago @@ -1748,12 +1751,12 @@ eu: user_mailer: appeal_approved: action: Joan zure kontura - explanation: '%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa onartu da. Zure kontua egoera onean dago berriro.' - subject: '%{date}(e)ko zure apelazioa onartu da' + explanation: "%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa onartu da. Zure kontua egoera onean dago berriro." + subject: "%{date}(e)ko zure apelazioa onartu da" title: Apelazioa onartuta appeal_rejected: - explanation: '%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa baztertu da.' - subject: '%{date}(e)ko zure apelazioa baztertu da' + explanation: "%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa baztertu da." + subject: "%{date}(e)ko zure apelazioa baztertu da" title: Apelazioa baztertuta backup_ready: explanation: Zure Mastodon kontuaren babes-kopia osoa eskatu duzu. Deskargatzeko prest dago! @@ -1782,11 +1785,11 @@ eu: reason: 'Arrazoia:' statuses: 'Aipatutako bidalketak:' subject: - delete_statuses: '%{acct} zerbitzarian zure bidalketak ezabatu dira' + delete_statuses: "%{acct} zerbitzarian zure bidalketak ezabatu dira" disable: Zure %{acct} kontua izoztu da - mark_statuses_as_sensitive: '%{acct} zerbitzarian zure bidalketak hunkigarri gisa markatu dira' - none: '%{acct} konturako abisua' - sensitive: '%{acct} zerbitzarian zure bidalketak hunkigarri gisa markatuko dira hemendik aurrera' + mark_statuses_as_sensitive: "%{acct} zerbitzarian zure bidalketak hunkigarri gisa markatu dira" + none: "%{acct} konturako abisua" + sensitive: "%{acct} zerbitzarian zure bidalketak hunkigarri gisa markatuko dira hemendik aurrera" silence: Zure %{acct} kontua murriztu da suspend: Zure %{acct} kontua kanporatua izan da title: @@ -1837,4 +1840,4 @@ eu: not_enabled: Ez duzu WebAuthn gaitu oraindik not_supported: Nabigatzaile honek ez ditu segurtasun gakoak onartzen otp_required: Segurtasun gakoak erabili aurretik bi faktoreko autentifikazioa gaitu behar duzu. - registered_on: '%{date}(e)an erregistratua' + registered_on: "%{date}(e)an erregistratua" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index cd201db82c1e57..e2138e0aeb1fd6 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1,3 +1,4 @@ +--- fa: about: about_mastodon_html: 'شبکه‌ی اجتماعی آینده: بدون تبلیغات، بدون شنود از طرف شرکت‌ها، طراحی اخلاق‌مدار، و معماری غیرمتمرکز! با ماستودون صاحب داده‌های خودتان باشید!' @@ -55,7 +56,7 @@ fa: delete: حذف داده‌ها deleted: حذف شده demote: تنزل‌دادن - destroyed_msg: "داده‌های %{username} در صف حدف قرار گرفتند" + destroyed_msg: داده‌های %{username} در صف حدف قرار گرفتند disable: از کار انداختن disable_sign_in_token_auth: از کار انداختن تأیید هویت ژتون رایانامه‌ای disable_two_factor_authentication: از کار انداختن ورود دومرحله‌ای @@ -86,7 +87,7 @@ fa: media_attachments: پیوست‌های رسانه‌ای memorialize: تبدیل به یادمان memorialized: یادمان‌سازی شده - memorialized_msg: '%{username} با موفقیت به یک حساب یادمانی تبدیل شد' + memorialized_msg: "%{username} با موفقیت به یک حساب یادمانی تبدیل شد" moderation: active: فعّال all: همه @@ -531,7 +532,7 @@ fa: no_ip_block_selected: هیچ قاعدهٔ آی‌پی‌ای تغییری نکرد زیرا هیچ‌کدام گزیده نشده بودند title: قوانین IP relationships: - title: "روابط %{acct}" + title: روابط %{acct} relays: add_new: افزودن رلهٔ تازه delete: حذف @@ -828,9 +829,9 @@ fa: body: جزئیات حساب تازه این‌جاست. شما می‌توانید آن را تأیید یا رد کنید. subject: حساب تازه‌ای در %{instance} نیازمند بررسی است (%{username}) new_report: - body: "کاربر %{reporter} کاربر %{target} را گزارش داد" + body: کاربر %{reporter} کاربر %{target} را گزارش داد body_remote: کسی از %{domain} گزارش %{target} را فرستاده - subject: 'گزارش تازه‌ای برای %{instance} (#%{id})' + subject: گزارش تازه‌ای برای %{instance} (#%{id}) new_trends: new_trending_links: title: پیوندهای داغ @@ -849,7 +850,7 @@ fa: remove: حذف ارتباط نام مستعار appearance: advanced_web_interface: رابط کاربری پیشرفته - advanced_web_interface_hint: 'اگر می‌خواهید از تمامی پهنای صفحه‌تان استفاده کنید، رابط پیش‌رفتهٔ وب می‌گذارد هر چند ستون را که می‌خواهید، برای دیدن اطّلاعات بیش‌تر در یک زمان، پیکربندی کنید:‌خانه، آگاهی‌ها، خط زمانی عمومی،‌ هرتعدادی از سیاهه‌ها و برچسب‌ها.' + advanced_web_interface_hint: اگر می‌خواهید از تمامی پهنای صفحه‌تان استفاده کنید، رابط پیش‌رفتهٔ وب می‌گذارد هر چند ستون را که می‌خواهید، برای دیدن اطّلاعات بیش‌تر در یک زمان، پیکربندی کنید:‌خانه، آگاهی‌ها، خط زمانی عمومی،‌ هرتعدادی از سیاهه‌ها و برچسب‌ها. animations_and_accessibility: پویانمایی‌های و دسترسی‌پذیری confirmation_dialogs: پیغام‌های تأیید discovery: کاوش @@ -988,7 +989,7 @@ fa: description_html: این‌ها کنش‌های انجام شده روی حسابتان و هشدارهاییند که از سوی مدیران %{instance} به شما فرستاده شده‌اند. recipient: ابلاغی به reject_appeal: رد کردن درخواست تجدیدنظر - status: 'فرستهٔ ‪#%{id}‬' + status: فرستهٔ ‪#%{id}‬ status_removed: فرسته از روس سامانه برداشته شده است title: "%{action} در %{date}" title_actions: @@ -1025,7 +1026,7 @@ fa: noscript_html: برای استفاده از کارهٔ وب ماستودون، لطفاً جاوااسکریپت را به کار بیندازید. یا به جایش می‌توانید یک کارهٔ بومی را به کار ببرید. existing_username_validator: not_found: کاربری با این نام کاربری در این کارساز پیدا نشد - not_found_multiple: '%{usernames} پیدا نشد' + not_found_multiple: "%{usernames} پیدا نشد" exports: archive_takeout: date: تاریخ @@ -1223,7 +1224,7 @@ fa: sign_up: subject: "%{name} ثبت نام کرد" favourite: - body: '%{name} این نوشتهٔ شما را پسندید:' + body: "%{name} این نوشتهٔ شما را پسندید:" subject: "%{name} نوشتهٔ شما را پسندید" title: پسندیده‌شدن تازه follow: @@ -1243,7 +1244,7 @@ fa: poll: subject: نظرسنجی‌ای از %{name} پایان یافت reblog: - body: '%{name} فرستهٔ شما را تقویت کرد:' + body: "%{name} فرستهٔ شما را تقویت کرد:" subject: "%{name} فرستهٔ شما را تقویت کرد" title: تقویت تازه status: @@ -1334,7 +1335,7 @@ fa: content_warning: 'هشدا محتوا:' descriptions: account: فرسته‌های عمومی از ‪@%{acct}‬ - tag: 'فرسته‌های عمومی برچسب خورده با ‪#%{hashtag}‬' + tag: فرسته‌های عمومی برچسب خورده با ‪#%{hashtag}‬ scheduled_statuses: over_daily_limit: شما از حد مجاز %{limit} فرسته زمان‌بندی‌شده در آن روز فراتر رفته‌اید over_total_limit: شما از حد مجاز %{limit} فرسته زمان‌بندی‌شده فراتر رفته‌اید diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 3511affda8a285..cdc5d12678730e 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1,3 +1,4 @@ +--- fi: about: about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu rakenne! Pidä tietosi ominasi Mastodonin avulla!' @@ -11,7 +12,7 @@ fi: one: seuraaja other: seuraajaa following: seurattu(a) - instance_actor_flash: Tämä tili on virtuaalinen toimija, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään federointitarkoituksiin, eikä sitä tule jäädyttää. + instance_actor_flash: Tämä tili on virtuaalinen toimija, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään liittoutumistarkoituksiin, eikä sitä tule jäädyttää. last_active: viimeksi aktiivinen link_verified_on: Tämän linkin omistus on tarkastettu %{date} nothing_here: Täällä ei ole mitään! @@ -27,10 +28,10 @@ fi: title: Suorita valvontatoimi käyttäjälle %{acct} account_moderation_notes: create: Jätä muistiinpano - created_msg: Valvontamerkinnän luonti onnistui! - destroyed_msg: Valvontamerkinnän poisto onnistui! + created_msg: Valvontamuistiinpanon luonti onnistui! + destroyed_msg: Valvontamuistiinpanon poisto onnistui! accounts: - add_email_domain_block: Estä sähköpostidomain + add_email_domain_block: Estä sähköpostiverkkotunnus approve: Hyväksy approved_msg: Käyttäjän %{username} liittymishakemus hyväksyttiin are_you_sure: Oletko varma? @@ -55,7 +56,7 @@ fi: delete: Poista tiedot deleted: Poistettu demote: Alenna - destroyed_msg: "Käyttäjän %{username} tiedot ovat nyt jonossa poistettavaksi välittömästi" + destroyed_msg: Käyttäjän %{username} tiedot ovat nyt jonossa poistettavaksi välittömästi disable: Poista käytöstä disable_sign_in_token_auth: Poista sähköpostitunnuksen todennus käytöstä disable_two_factor_authentication: Poista 2FA käytöstä @@ -95,10 +96,10 @@ fi: silenced: Rajoitettu suspended: Jäädytetty title: Valvonta - moderation_notes: Valvontamerkinnät + moderation_notes: Valvontamuistiinpanot most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP - no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu + no_account_selected: Tilejä ei muutettu, koska yhtään ei ollut valittuna no_limits_imposed: Rajoituksia ei ole asetettu no_role_assigned: Roolia ei ole määritetty not_subscribed: Ei tilaaja @@ -117,7 +118,7 @@ fi: reject: Hylkää rejected_msg: Käyttäjän %{username} rekisteröitymishakemus hylättiin remote_suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. - remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja kaikki tiedot poistetaan %{date}. Sitä ennen etäpalvelin voi palauttaa tilin ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. + remote_suspension_reversible_hint_html: Tili on jäädytetty omalla palvelimellaan, ja kaikki tiedot poistetaan %{date}. Sitä ennen etäpalvelin voi palauttaa tilin ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. remove_avatar: Poista profiilikuva remove_header: Poista otsakekuva removed_avatar_msg: Käyttäjän %{username} avatar-kuva poistettu onnistuneesti @@ -137,7 +138,7 @@ fi: security_measures: only_password: Vain salasana password_and_2fa: Salasana ja kaksivaiheinen tunnistautuminen - sensitive: Pakotus arkaluonteiseksi + sensitive: Pakota arkaluonteiseksi sensitized: Merkitty arkaluonteiseksi shared_inbox_url: Jaetun saapuvan postilaatikon osoite show: @@ -156,17 +157,17 @@ fi: unblock_email: Poista sähköpostiosoitteen esto unblocked_email_msg: Käyttäjän %{username} sähköpostiosoitteen esto kumottiin unconfirmed_email: Sähköpostia ei vahvistettu - undo_sensitized: Kumoa pakotus arkaluonteiseksi tiliksi + undo_sensitized: Kumoa pakotus arkaluonteiseksi undo_silenced: Kumoa rajoitus undo_suspension: Peru jäähy unsilenced_msg: Tilin %{username} rajoituksen kumoaminen onnistui unsubscribe: Lopeta tilaus unsuspended_msg: Tilin %{username} jäädytyksen kumoaminen onnistui - username: Käyttäjätunnus + username: Käyttäjänimi view_domain: Näytä verkkotunnuksen yhteenveto warn: Varoita web: Verkko - whitelisted: Sallittu federoimaan + whitelisted: Sallittu liittoutua action_logs: action_types: approve_appeal: Hyväksy valitus @@ -181,7 +182,7 @@ fi: create_custom_emoji: Luo mukautettu emoji create_domain_allow: Luo verkkotunnuksen salliminen create_domain_block: Luo verkkotunnuksen esto - create_email_domain_block: Luo sähköpostin verkkotunnuksen esto + create_email_domain_block: Luo sähköpostiverkkotunnuksen esto create_ip_block: Luo IP-sääntö create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus create_user_role: Luo rooli @@ -191,7 +192,7 @@ fi: destroy_custom_emoji: Poista mukautettu emoji destroy_domain_allow: Poista verkkotunnuksen salliminen destroy_domain_block: Poista verkkotunnuksen esto - destroy_email_domain_block: Poista sähköpostin verkkotunnuksen esto + destroy_email_domain_block: Poista sähköpostiverkkotunnuksen esto destroy_instance: Tyhjennä verkkotunnus destroy_ip_block: Poista IP-sääntö destroy_status: Poista julkaisu @@ -213,12 +214,12 @@ fi: resend_user: Lähetä vahvistusviesti uudelleen reset_password_user: Nollaa salasana resolve_report: Selvitä raportti - sensitive_account: Pakotus arkaluontoiseksi tiliksi + sensitive_account: Pakotus arkaluonteiseksi tiliksi silence_account: Rajoita tiliä suspend_account: Jäädytä tili unassigned_report: Peruuta raportin määritys unblock_email_account: Poista sähköpostiosoitteen esto - unsensitive_account: Kumoa pakotus arkaluontoiseksi tiliksi + unsensitive_account: Kumoa pakotus arkaluonteiseksi tiliksi unsilence_account: Kumoa tilin rajoitus unsuspend_account: Kumoa tilin jäädytys update_announcement: Päivitä tiedote @@ -236,21 +237,21 @@ fi: confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" create_account_warning_html: "%{name} lähetti varoituksen käyttäjälle %{target}" create_announcement_html: "%{name} loi uuden tiedotteen %{target}" - create_canonical_email_block_html: "%{name} esti sähköpostin hashilla %{target}" + create_canonical_email_block_html: "%{name} esti sähköpostin tiivisteellä %{target}" create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}" - create_domain_allow_html: "%{name} salli federoinnin verkkotunnuksen %{target} kanssa" + create_domain_allow_html: "%{name} salli liittoutumisen verkkotunnuksen %{target} kanssa" create_domain_block_html: "%{name} esti verkkotunnuksen %{target}" - create_email_domain_block_html: "%{name} esti sähköpostin %{target}" + create_email_domain_block_html: "%{name} esti sähköpostiverkkotunnuksen %{target}" create_ip_block_html: "%{name} loi IP-säännön %{target}" create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" create_user_role_html: "%{name} loi roolin %{target}" demote_user_html: "%{name} alensi käyttäjän %{target}" destroy_announcement_html: "%{name} poisti tiedotteen %{target}" - destroy_canonical_email_block_html: "%{name} poisti sähköpostieston hashilla %{target}" + destroy_canonical_email_block_html: "%{name} poisti sähköpostin eston tiivisteellä %{target}" destroy_custom_emoji_html: "%{name} poisti emojin %{target}" - destroy_domain_allow_html: "%{name} kielsi federoinnin verkkotunnuksen %{target} kanssa" + destroy_domain_allow_html: "%{name} kielsi liittoutumisen verkkotunnuksen %{target} kanssa" destroy_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" - destroy_email_domain_block_html: "%{name} poisti sähköpostin verkkotunnuksen %{target} eston" + destroy_email_domain_block_html: "%{name} poisti sähköpostiverkkotunnuksen %{target} eston" destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}" destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun" @@ -277,7 +278,7 @@ fi: suspend_account_html: "%{name} jäädytti käyttäjän %{target} tilin" unassigned_report_html: "%{name} peruutti raportin määrityksen %{target}" unblock_email_account_html: "%{name} poisti käyttäjän %{target} sähköpostiosoitteen eston" - unsensitive_account_html: "%{name} poisti käyttäjän %{target} median arkaluonteisen merkinnän" + unsensitive_account_html: "%{name} kumosi käyttäjän %{target} median arkaluonteisuusmerkinnän" unsilence_account_html: "%{name} kumosi käyttäjän %{target} rajoituksen" unsuspend_account_html: "%{name} kumosi käyttäjän %{target} tilin jäädytyksen" update_announcement_html: "%{name} päivitti tiedotteen %{target}" @@ -331,7 +332,7 @@ fi: listed: Listalla new: title: Lisää uusi mukautettu emoji - no_emoji_selected: Emojeita ei muutettu, koska yhtään ei valittu + no_emoji_selected: Emojeita ei muutettu, koska yhtään ei ollut valittuna not_permitted: Sinulla ei ole oikeutta suorittaa tätä toimintoa overwrite: Korvaa shortcode: Lyhennekoodi @@ -374,14 +375,14 @@ fi: empty: Valituksia ei löytynyt. title: Valitukset domain_allows: - add_new: Salli liitto verkkotunnuksella - created_msg: Verkkotunnus on onnistuneesti sallittu federoinnille - destroyed_msg: Verkkotunnusta on kielletty federoimasta + add_new: Salli liittoutuminen tämän verkkotunnuksen kanssa + created_msg: Verkkotunnuksen on onnistuneesti sallittu liittoutua + destroyed_msg: Verkkotunnusta on kielletty liittoutumasta export: Vie import: Tuo - undo: Estä liitto verkkotunnukselle + undo: Kiellä liittoutuminen tämän verkkotunnuksen kanssa domain_blocks: - add_new: Lisää uusi + add_new: Lisää uusi verkkotunnuksen esto confirm_suspension: cancel: Peruuta confirm: Jäädytä @@ -408,7 +409,7 @@ fi: silence: Rajoita suspend: Jäädytä title: Uusi verkkotunnuksen esto - no_domain_block_selected: Verkkoalue-estoihin ei tehty muutoksia, koska valintoja ei tehty + no_domain_block_selected: Verkkotunnusten estoja ei muutettu, koska yhtään ei ollut valittuna not_permitted: Nykyiset käyttöoikeutesi eivät kata tätä toimintoa obfuscate: Peitä verkkotunnuksen nimi obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos julkinen verkkotunnusten rajoitusluettelo on käytössä @@ -420,14 +421,14 @@ fi: reject_media_hint: Poistaa paikallisesti tallennetut mediatiedostot eikä lataa niitä enää jatkossa. Ei merkitystä jäähyn kohdalla reject_reports: Hylkää raportit reject_reports_hint: Ohita kaikki tästä verkkotunnuksesta tulevat raportit. Erottamisen kannalta ei merkitystä - undo: Peru + undo: Peru verkkotunnuksen esto view: Näytä verkkotunnuksen esto email_domain_blocks: add_new: Lisää uusi attempts_over_week: one: "%{count} yritystä viimeisen viikon aikana" other: "%{count} rekisteröitymisyritystä viimeisen viikon aikana" - created_msg: Sähköpostiverkkotunnuksen lisäys estolistalle onnistui + created_msg: Sähköpostiverkkotunnus estetty onnistuneesti delete: Poista dns: types: @@ -436,26 +437,26 @@ fi: new: create: Lisää verkkotunnus resolve: Ratkaise verkkotunnus - title: Uusi sähköpostiestolistan merkintä - no_email_domain_block_selected: Sähköpostin verkkotunnuksia ei muutettu, koska yhtään ei valittu + title: Estä uusi sähköpostiverkkotunnus + no_email_domain_block_selected: Sähköpostin verkkotunnuksia ei muutettu, koska yhtään ei ollut valittuna not_permitted: Ei sallittu resolved_dns_records_hint_html: Verkkotunnuksen nimi määräytyy seuraaviin MX-verkkotunnuksiin, jotka ovat viime kädessä vastuussa sähköpostin vastaanottamisesta. MX-verkkotunnuksen estäminen estää kirjautumisen mistä tahansa sähköpostiosoitteesta, joka käyttää samaa MX-verkkotunnusta, vaikka näkyvä verkkotunnuksen nimi olisikin erilainen. Varo estämästä suuria sähköpostin palveluntarjoajia. resolved_through_html: Ratkaistu %{domain} kautta - title: Sähköpostiestolista + title: Estetyt sähköpostiverkkotunnukset export_domain_allows: new: - title: Tuo sallitut verkkoalueet + title: Tuo sallittuja verkkotunnuksia no_file: Yhtäkään tiedostoa ei ole valittu export_domain_blocks: import: description_html: Olet tuomassa verkkotunnusten estoluetteloa. Tarkista luettelo huolella – etenkin, jos et ole laatinut sitä itse. existing_relationships_warning: Olemassa olevat seuraussuhteet - private_comment_description_html: 'Tuodun estolistan alkuperän selvillä pitämiseksi, lisätään tietojen yhteyteen seuraava yksityinen kommentti: %{comment}' - private_comment_template: Tuotu lähteestä %{source}, pvm %{date} - title: Tuo luettelo verkkoalue-estoista - invalid_domain_block: 'Yksi tai useampi verkkotunnuksen lohko ohitettiin seuraavien virheiden vuoksi: %{error}' + private_comment_description_html: 'Seurataksesi tuotujen estojen alkuperää lisätään estojen yhteyteen seuraava yksityinen kommentti: %{comment}' + private_comment_template: Tuotu lähteestä %{source} %{date} + title: Tuo verkkotunnusten estoja + invalid_domain_block: 'Yksi tai useampi verkkotunnuksen esto ohitettiin seuraavien virheiden vuoksi: %{error}' new: - title: Tuo luettelo verkkoalue-estoista + title: Tuo verkkotunnusten estoja no_file: Yhtäkään tiedostoa ei ole valittu follow_recommendations: description_html: "Seuraamissuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä." @@ -481,9 +482,9 @@ fi: back_to_limited: Rajoitettu back_to_warning: Varoitus by_domain: Verkkotunnus - confirm_purge: Oletko varma, että haluat pysyvästi poistaa tiedot tältä verkkotunnukselta? + confirm_purge: Haluatko varmasti poistaa pysyvästi tämän verkkotunnuksen tiedot? content_policies: - comment: Sisäinen huomautus + comment: Sisäinen muistiinpano description_html: Voit määrittää sisältökäytännöt, joita sovelletaan kaikkiin tämän verkkotunnuksen ja sen aliverkkotunnuksien tileihin. limited_federation_mode_description_html: Voit valita sallitaanko federointi tällä verkkotunnuksella. policies: @@ -526,8 +527,8 @@ fi: public_comment: Julkinen kommentti purge: Tyhjennä purge_description_html: Jos uskot, että tämä verkkotunnus on offline-tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa. - title: Federointi - total_blocked_by_us: Estetty meidän toimesta + title: Liittoutuminen + total_blocked_by_us: Estämämme total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama total_reported: Niitä koskevat raportit @@ -554,14 +555,14 @@ fi: '94670856': 3 vuotta new: title: Luo uusi IP-sääntö - no_ip_block_selected: IP-sääntöjä ei muutettu, koska yhtään ei ole valittuna + no_ip_block_selected: IP-sääntöjä ei muutettu, koska yhtään ei ollut valittuna title: IP-säännöt relationships: title: "%{acct}n suhteet" relays: add_new: Lisää uusi välittäjä delete: Poista - description_html: "Federointivälittäjä on välityspalvelin, joka siirtää suuria määriä julkisia julkaisuja siihen liittyneiden palvelinten välillä. Se voi auttaa pieniä ja keskisuuria palvelimia löytämään fediversumin sisältöä, mikä muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvalinten käyttäjiä manuaalisesti." + description_html: "Liittoutumisvälittäjä on välityspalvelin, joka siirtää suuria määriä julkisia julkaisuja siihen liittyneiden palvelinten välillä. Se voi auttaa pieniä ja keskisuuria palvelimia löytämään fediversumin sisältöä, mikä muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvalinten käyttäjiä manuaalisesti." disable: Poista käytöstä disabled: Poissa käytöstä enable: Ota käyttöön @@ -575,13 +576,13 @@ fi: status: Tila title: Välittäjät report_notes: - created_msg: Muistiinpano onnistuneesti lisätty raporttiin! - destroyed_msg: Muistiinpano onnistuneesti poistettu raportista! + created_msg: Muistiinpano lisätty raporttiin onnistuneesti! + destroyed_msg: Muistiinpano poistettu raportista onnistuneesti! reports: account: notes: - one: "%{count} ilmoitus" - other: "%{count} ilmoitusta" + one: "%{count} muistiinpano" + other: "%{count} muistiinpanoa" action_log: Tarkastusloki action_taken_by: Toimen tehnyt actions: @@ -620,13 +621,13 @@ fi: create_and_unresolve: Avaa uudelleen ja lisää muistiinpano delete: Poista placeholder: Kuvaile mitä toimia on tehty tai muita päivityksiä tähän raporttiin… - title: Merkinnät - notes_description_html: Tarkastele ja jätä merkintöjä muille valvojille ja itsellesi tulevaisuuteen + title: Muistiinpanot + notes_description_html: Tarkastele ja jätä muistiinpanoja muille valvojille ja itsellesi tulevaisuuteen processed_msg: 'Raportti #%{id} käsitelty' quick_actions_description_html: 'Suorita nopea toiminto tai vieritä alas nähdäksesi raportoitu sisältö:' remote_user_placeholder: etäkäyttäjä instanssista %{instance} reopen: Avaa raportti uudestaan - report: 'Raportti nro %{id}' + report: Raportti nro %{id} reported_account: Raportoitu tili reported_by: Raportoija resolved: Ratkaistut @@ -670,56 +671,56 @@ fi: devops: DevOps invites: Kutsut moderation: Valvonta - special: Erikois + special: Erityistä delete: Poista description_html: "Käyttäjärooleilla voit muokata, mihin toimintoihin ja alueisiin käyttäjäsi pääsevät käsiksi." - edit: Muokkaa "%{name}" roolia - everyone: Oletus käyttöoikeudet - everyone_full_description_html: Tämä on perusrooli joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. + edit: Muokkaa roolia ”%{name}” + everyone: Oletuskäyttöoikeudet + everyone_full_description_html: Tämä on perusrooli, joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. permissions_count: one: "%{count} käyttöoikeus" other: "%{count} käyttöoikeutta" privileges: administrator: Ylläpitäjä administrator_description: Käyttäjät, joilla on tämä käyttöoikeus, ohittavat jokaisen käyttöoikeuden - delete_user_data: Poista käyttäjän tiedot + delete_user_data: Poistaa käyttäjän tiedot delete_user_data_description: Salli käyttäjien poistaa muiden käyttäjien tiedot viipymättä - invite_users: Kutsu käyttäjiä + invite_users: Kutsua käyttäjiä invite_users_description: Sallii käyttäjien kutsua uusia ihmisiä palvelimelle - manage_announcements: Hallitse tiedotteita + manage_announcements: Hallita tiedotteita manage_announcements_description: Sallii käyttäjien hallita tiedotteita palvelimella - manage_appeals: Hallitse valituksia + manage_appeals: Hallita valituksia manage_appeals_description: Sallii käyttäjien tarkistaa valvontatoimia koskevia valituksia - manage_blocks: Hallitse estoja + manage_blocks: Hallita estoja manage_blocks_description: Sallii käyttäjien estää sähköpostipalveluntarjoajia ja IP-osoitteita - manage_custom_emojis: Hallitse mukautettuja emojeita + manage_custom_emojis: Hallita mukautettuja emojeita manage_custom_emojis_description: Sallii käyttäjien hallita mukautettuja emojeita palvelimella - manage_federation: Hallitse federointia - manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta - manage_invites: Hallitse kutsuja + manage_federation: Hallita liittoutumista + manage_federation_description: Sallii käyttäjien estää tai sallia liittoutuminen muiden verkkotunnusten kanssa ja hallita toimitusta + manage_invites: Hallita kutsuja manage_invites_description: Sallii käyttäjien selata ja poistaa kutsulinkkejä käytöstä - manage_reports: Hallitse raportteja + manage_reports: Hallita raportteja manage_reports_description: Sallii käyttäjien tarkistaa raportteja ja suorittaa valvontatoimia niitä vastaan - manage_roles: Hallitse rooleja + manage_roles: Hallita rooleja manage_roles_description: Sallii käyttäjien hallita ja määrittää rooleja heidän alapuolellaan - manage_rules: Hallitse sääntöjä + manage_rules: Hallita sääntöjä manage_rules_description: Sallii käyttäjien muuttaa palvelimen sääntöjä - manage_settings: Hallitse asetuksia + manage_settings: Hallita asetuksia manage_settings_description: Sallii käyttäjien muuttaa sivuston asetuksia - manage_taxonomies: Hallitse luokittelua - manage_taxonomies_description: Sallii käyttäjien tarkistaa nousussa olevan sisällön ja päivittää aihetunnisteiden asetuksia - manage_user_access: Hallitse käyttäjäoikeuksia + manage_taxonomies: Hallita luokittelua + manage_taxonomies_description: Sallii käyttäjien tarkistaa suositun sisällön ja päivittää aihetunnisteiden asetuksia + manage_user_access: Hallita käyttäjäoikeuksia manage_user_access_description: Sallii käyttäjien poistaa muiden käyttäjien kaksivaiheinen todennus käytöstä, vaihtaa heidän sähköpostiosoitteensa ja nollata heidän salasanansa - manage_users: Hallitse käyttäjiä + manage_users: Hallita käyttäjiä manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä kohtaan - manage_webhooks: Hallitse webhookeja + manage_webhooks: Hallita webhookeja manage_webhooks_description: Sallii käyttäjien luoda webhookeja hallinnollisiin tapahtumiin view_audit_log: Katsoa valvontalokia view_audit_log_description: Sallii käyttäjien nähdä palvelimen hallinnollisten toimien historian - view_dashboard: Näytä koontinäyttö + view_dashboard: Katsoa koontinäyttöä view_dashboard_description: Sallii käyttäjien käyttää kojelautaa ja erilaisia mittareita view_devops: DevOps - view_devops_description: Sallii käyttäjille oikeuden käyttää Sidekiq ja pgHero dashboardeja + view_devops_description: Sallii käyttäjille pääsyn Sidekiq- ja pgHero-hallintapaneeleihin title: Roolit rules: add_new: Lisää sääntö @@ -731,14 +732,14 @@ fi: settings: about: manage_rules: Hallitse palvelimen sääntöjä - preamble: Anna perusteellista tietoa siitä, miten palvelinta käytetään, valvotaan, rahoitetaan. + preamble: Anna perusteellista tietoa siitä, miten palvelinta käytetään, valvotaan ja rahoitetaan. rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja appearance: - preamble: Mukauta Mastodonin verkkokäyttöliittymää. + preamble: Mukauta Mastodonin selainkäyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin verkkokäyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin selainkäyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -751,7 +752,7 @@ fi: title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle discovery: follow_recommendations: Seuraamissuositukset - preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset etsintäominaisuudet toimivat palvelimellasi. + preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset löytämisominaisuudet toimivat palvelimellasi. profile_directory: Profiilihakemisto public_timelines: Julkiset aikajanat publish_discovered_servers: Julkaise löydetyt palvelimet @@ -764,17 +765,17 @@ fi: users: Kirjautuneille paikallisille käyttäjille registrations: preamble: Määritä, kuka voi luoda tilin palvelimellesi. - title: Rekisteröinnit + title: Rekisteröityminen registrations_mode: modes: approved: Rekisteröinti vaatii hyväksynnän none: Kukaan ei voi rekisteröityä open: Kaikki voivat rekisteröityä security: - authorized_fetch: Vaadi todennus yhdistetyiltä palvelimilta - authorized_fetch_hint: Todennuksen vaatiminen federoiduilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin federoitujen palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. + authorized_fetch: Vaadi todennus liittoutuvilta palvelimilta + authorized_fetch_hint: Todennuksen vaatiminen liittoutuvilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin liittoutuvien palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. authorized_fetch_overridden_hint: Et voi tällä hetkellä muuttaa tätä asetusta, koska se on ohitettu ympäristömuuttujalla. - federation_authentication: Yhdistettyjen palvelinten todentamisen täytäntöönpano + federation_authentication: Liittoutumisen todentamisen täytäntöönpano title: Palvelimen asetukset site_uploads: delete: Poista ladattu tiedosto @@ -807,13 +808,13 @@ fi: media: title: Media metadata: Metadata - no_status_selected: Julkaisuja ei muutettu, koska yhtään ei ole valittuna + no_status_selected: Julkaisuja ei muutettu, koska yhtään ei ollut valittuna open: Avaa julkaisu original_status: Alkuperäinen julkaisu reblogs: Edelleen jako status_changed: Julkaisua muutettu title: Tilin tilat - trending: Nousussa + trending: Suosituttua visibility: Näkyvyys with_media: Sisältää mediaa strikes: @@ -832,7 +833,7 @@ fi: database_schema_check: message_html: Tietokannan siirto on vireillä. Suorita ne varmistaaksesi, että sovellus toimii odotetulla tavalla elasticsearch_health_red: - message_html: Elasticsearch-klusteri on vikatilassa (punainen tila); hakuominaisuudet eivät ole käytettävissä + message_html: Elasticsearch-klusteri on vikatilassa (punainen tila), joten hakuominaisuudet eivät ole käytettävissä elasticsearch_health_yellow: message_html: Elasticsearch-klusteri on häiriötilassa (keltainen tila), joten suosittelemme tutkimaan syyn elasticsearch_index_mismatch: @@ -842,13 +843,13 @@ fi: message_html: Elasticsearch-klusterissa on useampi kuin yksi solmu, mutta Mastodonia ei ole määritetty käyttämään niitä. elasticsearch_preset_single_node: action: Katso käyttöohjeet - message_html: Elasticsearch-klusterissa on vain yksi solmu, ES_PRESET tulisi asettaa arvoon single_node_cluster. + message_html: Elasticsearch-klusterissa on vain yksi solmu. ES_PRESET tulisi asettaa arvoon single_node_cluster. elasticsearch_reset_chewy: message_html: Elasticsearch-järjestelmäindeksi on vanhentunut asetusmuutoksen vuoksi. Suorita tootctl search deploy --reset-chewy päivittääksesi sen. elasticsearch_running_check: - message_html: Ei saatu yhteyttä Elasticsearch. Tarkista, että se on käynnissä tai poista kokotekstihaku käytöstä + message_html: Ei saatu yhteyttä Elasticsearchiin. Tarkista, että se on käynnissä tai poista kokotekstihaku käytöstä elasticsearch_version_check: - message_html: 'Yhteensopimaton Elasticsearch versio: %{value}' + message_html: 'Yhteensopimaton Elasticsearch-versio: %{value}' version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: action: Hallitse palvelimen sääntöjä @@ -881,9 +882,9 @@ fi: description_html: Nämä ovat linkkejä, joita jaetaan tällä hetkellä paljon tileillä, joilta palvelimesi näkee viestejä. Se voi auttaa käyttäjiäsi saamaan selville, mitä maailmassa tapahtuu. Linkkejä ei näytetä julkisesti, ennen kuin hyväksyt julkaisijan. Voit myös sallia tai hylätä yksittäiset linkit. disallow: Hylkää linkki disallow_provider: Estä julkaisija - no_link_selected: Yhtään linkkiä ei muutettu, koska yhtään ei valittu + no_link_selected: Linkkejä ei muutettu, koska yhtään ei ollut valittuna publishers: - no_publisher_selected: Julkaisijoita ei muutettu, koska yhtään ei valittu + no_publisher_selected: Julkaisijoita ei muutettu, koska yhtään ei ollut valittuna shared_by_over_week: one: Yksi henkilö jakanut viimeisen viikon aikana other: Jakanut %{count} henkilöä viimeisen viikon aikana @@ -904,7 +905,7 @@ fi: description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden julkaisijan ja julkaisija sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja. disallow: Kiellä julkaisu disallow_account: Estä tekijä - no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ole valittuna + no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ollut valittuna not_discoverable: Tekijä ei ole ilmoittanut olevansa löydettävissä shared_by: one: Jaettu tai lisätty suosikkeihin kerran @@ -920,21 +921,21 @@ fi: tag_uses_measure: käyttökerrat description_html: Nämä ovat aihetunnisteita, jotka näkyvät tällä hetkellä monissa julkaisuissa, jotka palvelimesi näkee. Tämä voi auttaa käyttäjiäsi selvittämään, mistä ihmiset puhuvat eniten tällä hetkellä. Mitään aihetunnisteita ei näytetä julkisesti, ennen kuin hyväksyt ne. listable: Voidaan ehdottaa - no_tag_selected: Yhtään tagia ei muutettu, koska yhtään ei valittu + no_tag_selected: Tunnisteita ei muutettu, koska yhtään ei ollut valittuna not_listable: Ei tulla ehdottamaan not_trendable: Ei näy trendien alla not_usable: Ei voida käyttää peaked_on_and_decaying: Saavutti huipun %{date}, nyt hiipuu title: Suositut aihetunnisteet trendable: Voi näkyä trendien alla - trending_rank: 'Nousussa #%{rank}' + trending_rank: 'Suosittua #%{rank}' usable: Voidaan käyttää usage_comparison: Käytetty %{today} kertaa tänään, verrattuna %{yesterday} eiliseen used_by_over_week: one: Yhden henkilön käyttämä viime viikon aikana other: Käyttänyt %{count} henkilöä viimeisen viikon aikana title: Trendit - trending: Nousussa + trending: Suosittua warning_presets: add_new: Lisää uusi delete: Poista @@ -994,8 +995,8 @@ fi: new_trending_statuses: title: Suositut julkaisut new_trending_tags: - no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä aihetunnisteita. - requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.' + no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä suosittuja aihetunnisteita. + requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn suositun aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} %{lowest_tag_score} pisteellä.' title: Suositut aihetunnisteet subject: Uusia trendejä tarkistettavaksi instanssissa %{instance} aliases: @@ -1007,7 +1008,7 @@ fi: remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä - advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen webkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.' + advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen selainkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.' animations_and_accessibility: Animaatiot ja saavutettavuus confirmation_dialogs: Vahvistusvalinnat discovery: Löytäminen @@ -1088,7 +1089,7 @@ fi: new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutamassa minuutissa! title: Tarkista sähköpostilaatikkosi sign_in: - preamble_html: Kirjaudu %{domain}-tunnuksellasi. Jos tilisi sijaitsee eri palvelimella, et voi kirjautua täällä. + preamble_html: Kirjaudu %{domain}-tunnuksellasi. Jos tilisi sijaitsee eri palvelimella, et voi kirjautua tässä. title: Kirjaudu palvelimelle %{domain} sign_up: manual_review: Palvelimen %{domain} valvojat tarkistavat rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. @@ -1200,7 +1201,7 @@ fi: noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin natiivisovelluksia. existing_username_validator: not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä - not_found_multiple: '%{usernames} ei löytynyt' + not_found_multiple: "%{usernames} ei löytynyt" exports: archive_takeout: date: Päiväys @@ -1219,8 +1220,8 @@ fi: featured_tags: add_new: Lisää uusi errors: - limit: Olet jo nostanut esille enimmäismäärän aihetunnisteita - hint_html: "Mitä ovat näkyvillä olevat hashtagit eli aihetunnisteet? Ne ovat näkyvissä julkisessa profiilissasi ja niiden avulla ihmiset voivat selata julkisia viestejäsi nimenomaan näiden aihetunnisteiden alla. Ne auttavat esimerkiksi luovan työn tai pitkäaikaisten projektien seurannassa." + limit: Pidät jo esillä aihetunnisteiden enimmäismäärää + hint_html: "Pidä tärkeimpiä aihetunnisteitasi esillä profiilissasi. Erinomainen työkalu, jolla pidät kirjaa luovista teoksistasi ja pitkäaikaisista projekteistasi. Esillä pitämäsi aihetunnisteet ovat näyttävällä paikalla profiilissasi ja mahdollistavat nopean pääsyn omiin julkaisuihisi." filters: contexts: account: Profiilit @@ -1235,10 +1236,10 @@ fi: statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: - deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai verkkokäyttöliittymää. + deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. invalid_context: Ei sisältöä tai se on virheellinen index: - contexts: Suodattimet %{contexts} + contexts: Suodattaa kontektissa %{contexts} delete: Poista empty: Sinulla ei ole suodattimia. expires_in: Vanhenee %{distance} @@ -1261,7 +1262,7 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen verkkokäyttöliittymästä. + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen selainkäyttöliittymästä. title: Suodatetut julkaisut generic: all: Kaikki @@ -1270,7 +1271,7 @@ fi: other: Kaikki %{count} kohdetta tällä sivulla on valittu. all_matching_items_selected_html: one: "%{count} kohde, joka vastaa hakuasi." - other: Kaikki %{count} kohdetta, jotka vastaavat hakuasi. + other: Kaikki %{count} hakuasi vastaavaa kohdetta. cancel: Peruuta changes_saved_msg: Muutosten tallennus onnistui! confirm: Vahvista @@ -1282,7 +1283,7 @@ fi: save_changes: Tallenna muutokset select_all_matching_items: one: Valitse %{count} kohde, joka vastaa hakuasi. - other: Valitse kaikki %{count} kohdetta, jotka vastaavat hakuasi. + other: Valitse kaikki %{count} hakuasi vastaavaa kohdetta. today: tänään validation_errors: one: Kaikki ei ole aivan oikein! Tarkasta alla oleva virhe @@ -1290,7 +1291,7 @@ fi: imports: errors: empty: Tyhjä CSV-tiedosto - incompatible_type: Yhteensopimaton valitun tuontilajin kanssa + incompatible_type: Yhteensopimaton valitun tuontityypin kanssa invalid_csv_file: 'Epäkelpo CSV-tiedosto. Virhe: %{error}' over_rows_processing_limit: sisältää yli %{count} riviä too_large: Tiedosto on liian suuri @@ -1331,8 +1332,8 @@ fi: bookmarks: Tuodaan kirjanmerkkejä domain_blocking: Tuodaan estettyjä verkkotunnuksia following: Tuodaan seurattuja tilejä - lists: Listojen tuonti - muting: Tuodaan hiljennettyjä tilejä + lists: Tuodaan listoja + muting: Tuodaan mykistettyjä tilejä type: Tuonnin tyyppi type_groups: constructive: Seuratut ja kirjanmerkit @@ -1340,7 +1341,7 @@ fi: types: blocking: Estoluettelo bookmarks: Kirjanmerkit - domain_blocking: Verkkotunnuksen estoluettelo + domain_blocking: Verkkotunnusten estoluettelo following: Seurattujen luettelo lists: Listat muting: Mykistettyjen luettelo @@ -1402,7 +1403,7 @@ fi: not_ready: Ei voi liittää tiedostoja, joiden käsittely on kesken. Yritä hetken kuluttua uudelleen! too_many: Tiedostoja voi liittää enintään 4 migrations: - acct: uuden tilin käyttäjätunnus@verkkotunnus + acct: Muuttanut tunnukselle cancel: Peruuta uudelleenohjaus cancel_explanation: Uudelleenohjauksen peruuttaminen aktivoi uudelleen nykyisen tilisi, mutta ei palauta seuraajia, jotka on siirretty kyseiselle tilille. cancelled_msg: Uudelleenohjaus peruttu onnistuneesti. @@ -1413,8 +1414,8 @@ fi: not_found: ei voitu löytää on_cooldown: Sinä olet jäähyllä followers_count: Seuraajat muuton aikana - incoming_migrations: Siirtyminen toiselta tililtä - incoming_migrations_html: Siirtyäksesi toisesta tilistä tähän, sinun täytyy ensin luoda tilin alias. + incoming_migrations: Muutto toiselta tililtä + incoming_migrations_html: Muuttaaksesi toisesta tilistä tähän, sinun täytyy ensin luoda tilin alias. moved_msg: Tilisi ohjaa nyt kohteeseen %{acct} ja seuraajiasi siirretään. not_redirecting: Tilisi ei ohjaa tällä hetkellä mihinkään muuhun tiliin. on_cooldown: Olet siirtänyt tilisi äskettäin. Tämä toiminto tulee saataville uudelleen %{count} päivän kuluttua. @@ -1436,7 +1437,7 @@ fi: title: Valvonta move_handler: carry_blocks_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka olit estänyt. - carry_mutes_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka mykistit. + carry_mutes_over_text: Tämä käyttäjä siirtyi tililtä %{acct}, jonka olet mykistänyt. copy_account_note_text: 'Tämä käyttäjä siirtyi paikasta %{acct}, tässä olivat aiemmat muistiinpanosi niistä:' navigation: toggle_menu: Avaa/sulje valikko @@ -1461,8 +1462,8 @@ fi: title: Uusi seuraamispyyntö mention: action: Vastaa - body: '%{name} mainitsi sinut:' - subject: '%{name} mainitsi sinut' + body: "%{name} mainitsi sinut:" + subject: "%{name} mainitsi sinut" title: Uusi maininta poll: subject: Äänestys käyttäjältä %{name} on päättynyt @@ -1525,7 +1526,7 @@ fi: privacy_hint_html: Määritä, kuinka paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja ja hienoja sovelluksia, kun he selaavat toisten seuraamia käyttäjiä ja kun he näkevät, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. reach: Tavoittavuus reach_hint_html: Määritä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko julkaisujesi näkyvän Selaa-sivulla? Haluatko muiden käyttäjien näkevän sinut seuraamissuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen? - search: Haku + search: Hae search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata. title: Yksityisyys ja tavoittavuus privacy_policy: @@ -1625,7 +1626,7 @@ fi: development: Kehitys edit_profile: Muokkaa profiilia export: Vie tietoja - featured_tags: Esiteltävät aihetunnisteet + featured_tags: Esillä pidettävät aihetunnisteet import: Tuo import_and_export: Tuonti ja vienti migrate: Tilin muutto muualle @@ -1706,7 +1707,7 @@ fi: keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut - keep_self_fav_hint: Ei poista julkaisujasi, jos olet lisännyt ne suosikkeihin + keep_self_fav_hint: Ei poista julkaisujasi, jos olet lisännyt ne suosikkeihisi min_age: '1209600': 2 viikkoa '15778476': 6 kuukautta @@ -1785,7 +1786,7 @@ fi: spam: Roskaposti violation: Sisältö rikkoo seuraavia yhteisön sääntöjä explanation: - delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, ja instanssin %{instance} valvojat ovat poistaneet ne. + delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, joten instanssin %{instance} valvojat ovat poistaneet ne. disable: Et voi enää käyttää tiliäsi, mutta profiilisi ja muut tiedot pysyvät muuttumattomina. Voit pyytää varmuuskopiota tiedoistasi, vaihtaa tilin asetuksia tai poistaa tilisi. mark_statuses_as_sensitive: Palvelimen %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa mediaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa. sensitive: Tästä lähtien kaikki ladatut mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse. @@ -1806,7 +1807,7 @@ fi: disable: Tili jäädytetty mark_statuses_as_sensitive: Julkaisut merkitty arkaluonteisiksi none: Varoitus - sensitive: Tili on merkitty arkaluonteiseksi + sensitive: Tili merkitty arkaluonteiseksi silence: Tiliä rajoitettu suspend: Tili jäädytetty welcome: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 370cd3203a7952..3c7fe4d9973729 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1,3 +1,4 @@ +--- fo: about: about_mastodon_html: 'Framtíðar sosiali miðilin: ongar lýsingar, eingin stórfyritøku-yvirvøka, etiskt snið og desentralisering! Eig tínar dátur við Mastodon!' @@ -55,7 +56,7 @@ fo: delete: Strika dátur deleted: Strikað demote: Lækka í tign - destroyed_msg: "Dáturnar hjá %{username} eru nú settar í bíðirøð at blíva strikaðar sum skjótast" + destroyed_msg: Dáturnar hjá %{username} eru nú settar í bíðirøð at blíva strikaðar sum skjótast disable: Fryst disable_sign_in_token_auth: Ger váttan við teldupostateknum óvirkna disable_two_factor_authentication: Ger 2FA óvirkið @@ -450,7 +451,7 @@ fo: import: description_html: Tú er í holt við at innflyta ein lista av navnaøkjablokeringum. Vinarliga eftirkanna listan gjølla, serliga um tú ikki hevur gjørt listan sjálv/ur. existing_relationships_warning: Verandi fylgjarasambond - private_comment_description_html: 'Fyri at hjálpa tær at fylgja við í, hvaðani innfluttir blokkar koma, verða innfluttu blokkarnir stovnaðir við hesi privatu viðmerkingini:%{comment}' + private_comment_description_html: Fyri at hjálpa tær at fylgja við í, hvaðani innfluttir blokkar koma, verða innfluttu blokkarnir stovnaðir við hesi privatu viðmerkingini:%{comment} private_comment_template: Innflutt frá %{source} tann %{date} title: Innflyt navnaøkjablokeringar invalid_domain_block: 'Ein ella fleiri navnaøkjablokeringar vóru umlopnar vegna hesar feil(ir): %{error}' @@ -557,7 +558,7 @@ fo: no_ip_block_selected: Ongar IP reglur vóru broyttar, tí ongar vóru valdar title: IP reglur relationships: - title: "Sambond hjá %{acct}" + title: Sambond hjá %{acct} relays: add_new: Legg nýtt reiðlag afturat delete: Strika @@ -1447,7 +1448,7 @@ fo: sign_up: subject: "%{name} meldaði seg til" favourite: - body: '%{name} dámdi postin hjá tær:' + body: "%{name} dámdi postin hjá tær:" subject: "%{name} merkti postin hjá tær sum yndispost" title: Nýggjur yndispostur follow: diff --git a/config/locales/fr-QC.yml b/config/locales/fr-QC.yml index 38d18b456a1ddf..b9605f3a6ae9b9 100644 --- a/config/locales/fr-QC.yml +++ b/config/locales/fr-QC.yml @@ -1,3 +1,4 @@ +--- fr-QC: about: about_mastodon_html: 'Le réseau social de l''avenir : pas de publicité, pas de surveillance institutionnelle, conception éthique et décentralisation ! Gardez le contrôle de vos données avec Mastodon !' @@ -55,7 +56,7 @@ fr-QC: 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" + destroyed_msg: Les données de %{username} sont maintenant en file d’attente pour être supprimées imminemment disable: Geler disable_sign_in_token_auth: Désactiver l'authentification basée sur les jetons envoyés par courriel disable_two_factor_authentication: Désactiver l’authentification à deux facteurs @@ -557,7 +558,7 @@ fr-QC: 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 relationships: - title: "Relations de %{acct}" + title: Relations de %{acct} relays: add_new: Ajouter un nouveau relais delete: Supprimer @@ -1447,7 +1448,7 @@ fr-QC: sign_up: subject: "%{name} s'est inscrit·e" favourite: - body: '%{name} a ajouté votre message à ses favoris :' + body: "%{name} a ajouté votre message à ses favoris :" subject: "%{name} a ajouté votre message à ses favoris" title: Nouveau favori follow: @@ -1461,8 +1462,8 @@ fr-QC: title: Nouvelle demande d’abonnement mention: action: Répondre - body: '%{name} vous a mentionné⋅e dans :' - subject: '%{name} vous a mentionné·e' + body: "%{name} vous a mentionné⋅e dans :" + subject: "%{name} vous a mentionné·e" title: Nouvelle mention poll: subject: Un sondage de %{name} est terminé diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b6a076735bebd2..821ef39dbe054e 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1,3 +1,4 @@ +--- fr: about: about_mastodon_html: 'Le réseau social de l''avenir : pas de publicité, pas de surveillance institutionnelle, conception éthique et décentralisation ! Gardez le contrôle de vos données avec Mastodon !' @@ -55,7 +56,7 @@ fr: 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" + destroyed_msg: Les données de %{username} sont maintenant en file d’attente pour être supprimées imminemment disable: Geler disable_sign_in_token_auth: Désactiver l'authentification basée sur les jetons envoyés par courriel disable_two_factor_authentication: Désactiver l’authentification à deux facteurs @@ -557,7 +558,7 @@ fr: 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 relationships: - title: "Relations de %{acct}" + title: Relations de %{acct} relays: add_new: Ajouter un nouveau relais delete: Supprimer @@ -1447,7 +1448,7 @@ fr: sign_up: subject: "%{name} s'est inscrit·e" favourite: - body: '%{name} a ajouté votre message à ses favoris :' + body: "%{name} a ajouté votre message à ses favoris :" subject: "%{name} a ajouté votre message à ses favoris" title: Nouveau favori follow: @@ -1461,8 +1462,8 @@ fr: title: Nouvelle demande d’abonnement mention: action: Répondre - body: '%{name} vous a mentionné⋅e dans :' - subject: '%{name} vous a mentionné·e' + body: "%{name} vous a mentionné⋅e dans :" + subject: "%{name} vous a mentionné·e" title: Nouvelle mention poll: subject: Un sondage de %{name} est terminé diff --git a/config/locales/fy.yml b/config/locales/fy.yml index b2a5691872d71f..41ad60cf69b880 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1,6 +1,7 @@ +--- fy: about: - about_mastodon_html: 'Mastodon is in sosjaal netwurk dat gebrûk makket fan iepen webprotokollen en frije software. It is krekt lykas desintralisearre e-mail!' + about_mastodon_html: Mastodon is in sosjaal netwurk dat gebrûk makket fan iepen webprotokollen en frije software. It is krekt lykas desintralisearre e-mail! contact_missing: Net ynsteld contact_unavailable: Net fan tapassing hosted_on: Mastodon op %{domain} @@ -55,7 +56,7 @@ fy: delete: Gegevens fuortsmite deleted: Fuortsmiten demote: Degradearje - destroyed_msg: "It fuortsmiten fan de gegevens fan %{username} stiet no yn de wachtrige" + destroyed_msg: It fuortsmiten fan de gegevens fan %{username} stiet no yn de wachtrige disable: Befrieze disable_sign_in_token_auth: Ferifikaasje mei in tagongskoade fia e-mailberjocht útskeakelje disable_two_factor_authentication: 2FA útskeakelje @@ -233,55 +234,55 @@ fy: assigned_to_self_report_html: "%{name} hat rapportaazje %{target} oan harrensels tawiisd" change_email_user_html: "%{name} hat it e-mailadres fan brûker %{target} wizige" change_role_user_html: "%{name} hat de rol fan %{target} wizige" - confirm_user_html: "E-mailadres fan brûker %{target} is troch %{name} befêstige" + confirm_user_html: E-mailadres fan brûker %{target} is troch %{name} befêstige create_account_warning_html: "%{name} hat in warskôging nei %{target} ferstjoerd" create_announcement_html: "%{name} hat de nije meidieling %{target} oanmakke" create_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} blokkearre" - create_custom_emoji_html: "Nije emoji %{target} is troch %{name} opladen" + create_custom_emoji_html: Nije emoji %{target} is troch %{name} opladen create_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} goedkard" - create_domain_block_html: "Domein %{target} is troch %{name} blokkearre" + create_domain_block_html: Domein %{target} is troch %{name} blokkearre create_email_domain_block_html: "%{name} hat it e-maildomein %{target} blokkearre" create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke" create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige" create_user_role_html: "%{name} hat de rol %{target} oanmakke" - demote_user_html: "Brûker %{target} is troch %{name} degradearre" + demote_user_html: Brûker %{target} is troch %{name} degradearre destroy_announcement_html: "%{name} hat de meidieling %{target} fuortsmiten" destroy_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} deblokkearre" - destroy_custom_emoji_html: "Emoji %{target} is troch %{name} fuortsmiten" + destroy_custom_emoji_html: Emoji %{target} is troch %{name} fuortsmiten destroy_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} ôfkard" - destroy_domain_block_html: "Domein %{target} is troch %{name} deblokkearre" - destroy_email_domain_block_html: "Domein %{target} is troch %{name} deblokkearre" + destroy_domain_block_html: Domein %{target} is troch %{name} deblokkearre + destroy_email_domain_block_html: Domein %{target} is troch %{name} deblokkearre destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten" destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten" - destroy_status_html: "Berjocht fan %{target} is troch %{name} fuortsmiten" + destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten destroy_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} opnij starte" destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten" - disable_2fa_user_html: "De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele" - disable_custom_emoji_html: "Emoji %{target} is troch %{name} útskeakele" + disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele + disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele disable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mailberjocht útskeakele foar %{target}" - disable_user_html: "Oanmelden foar %{target} is troch %{name} útskeakele" - enable_custom_emoji_html: "Emoji %{target} is troch %{name} ynskeakele" + disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele + enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele enable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mailberjocht ynskeakele foar %{target}" - enable_user_html: "Oanmelden foar %{target} is troch %{name} ynskeakele" - memorialize_account_html: "De account %{target} is troch %{name} yn in Yn memoriam wizige" - promote_user_html: "Brûker %{target} is troch %{name} promovearre" + enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele + memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige + promote_user_html: Brûker %{target} is troch %{name} promovearre reject_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} ôfwêzen" reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen" remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten" reopen_report_html: "%{name} hat rapportaazje %{target} opnij iepene" resend_user_html: "%{name} hat it befêstigings-e-mailberjocht foar %{target} opnij ferstjoerd" - reset_password_user_html: "Wachtwurd fan brûker %{target} is troch %{name} opnij ynsteld" + reset_password_user_html: Wachtwurd fan brûker %{target} is troch %{name} opnij ynsteld resolve_report_html: "%{name} hat rapportaazje %{target} oplost" sensitive_account_html: "%{name} markearre de media fan %{target} as gefoelich" - silence_account_html: "Account %{target} is troch %{name} beheind" - suspend_account_html: "Account %{target} is troch %{name} útsteld" + silence_account_html: Account %{target} is troch %{name} beheind + suspend_account_html: Account %{target} is troch %{name} útsteld unassigned_report_html: "%{name} hat it tawizen fan rapportaazje %{target} ûngedien makke" unblock_email_account_html: "%{name} deblokkearre it e-mailadres fan %{target}" unsensitive_account_html: "%{name} markearre de media fan %{target} as net gefoelich" - unsilence_account_html: "Beheining fan account %{target} is troch %{name} opheven" - unsuspend_account_html: "Utstellen fan account %{target} is troch %{name} opheven" + unsilence_account_html: Beheining fan account %{target} is troch %{name} opheven + unsuspend_account_html: Utstellen fan account %{target} is troch %{name} opheven update_announcement_html: "%{name} hat de meidieling %{target} bywurke" - update_custom_emoji_html: "Emoji %{target} is troch %{name} bywurke" + update_custom_emoji_html: Emoji %{target} is troch %{name} bywurke update_domain_block_html: "%{name} hat de domeinblokkade bywurke foar %{target}" update_ip_block_html: "%{name} hat de rigel foar IP %{target} wizige" update_status_html: "%{name} hat de berjochten %{target} bywurke" @@ -557,7 +558,7 @@ fy: no_ip_block_selected: Der binne gjin IP-rigels wizige, omdat der gjin ien selektearre waard title: IP-rigels relationships: - title: "Relaasjes fan %{acct}" + title: Relaasjes fan %{acct} relays: add_new: Nije relayserver tafoegje delete: Fuortsmite @@ -644,10 +645,10 @@ fy: actions: delete_html: De problematyske berjochten fuortsmite mark_as_sensitive_html: De media fan de problematyske berjochten as gefoelich markearje - silence_html: @%{acct} earnstich beheine, troch it profyl ende ynhâld allinnich sichtber te meitsjen foar de minsken dy’t harren al folgje of hantmjittich it profyl opsykje - suspend_html: @%{acct} blokkearje, sadat it profyl en de ynhâld net mear tagonklik is en it net mooglik is om ynteraksje dêr mei te hawwen + silence_html: "@%{acct} earnstich beheine, troch it profyl ende ynhâld allinnich sichtber te meitsjen foar de minsken dy’t harren al folgje of hantmjittich it profyl opsykje" + suspend_html: "@%{acct} blokkearje, sadat it profyl en de ynhâld net mear tagonklik is en it net mooglik is om ynteraksje dêr mei te hawwen" close_report: 'Rapportaazje #%{id} as oplost markearje' - close_reports_html: Alle meldingen tsjin @%{acct} as oplost markearje + close_reports_html: "Alle meldingen tsjin @%{acct} as oplost markearje" delete_data_html: It profyl en de ynhâld fan @%{acct} wurde nei 30 dagen fan no ôf fuortsmiten, útsein as de account yn de tuskentiid net mear blokkearre wurdt preview_preamble_html: "@%{acct} sil in warskôging ûntfange mei de folgjende ynhâld:" record_strike_html: In ban tsjin @%{acct} ynstelle, om jo te helpen by takomstige skeiningen fan dizze acount te eskalearjen @@ -819,12 +820,12 @@ fy: strikes: actions: delete_statuses: "%{name} hat de berjochten fan %{target} fuortsmiten" - disable: "Account %{target} is troch %{name} beferzen" + disable: Account %{target} is troch %{name} beferzen mark_statuses_as_sensitive: "%{name} markearre de berjochten fan %{target} as gefoelich" none: "%{name} hat in warskôging nei %{target} ferstjoerd" sensitive: "%{name} markearre de account fan %{target} as gefoelich" - silence: "Account %{target} is troch %{name} beheind" - suspend: "Account %{target} is troch %{name} útsteld" + silence: Account %{target} is troch %{name} beheind + suspend: Account %{target} is troch %{name} útsteld appeal_approved: Beswier yntsjinne appeal_pending: Beswier yn behanneling appeal_rejected: Beswier ôfwêzen @@ -908,7 +909,7 @@ fy: not_discoverable: Brûker hat gjin tastimming jûn om ûntdekt te wurden shared_by: one: Ien kear dield of as favoryt markearre - other: '%{friendly_count} kear dield of as favoryt markearre' + other: "%{friendly_count} kear dield of as favoryt markearre" title: Trending berjochten tags: current_score: Aktuele skoare is %{score} @@ -1281,7 +1282,7 @@ fy: order_by: Sortearje op save_changes: Wizigingen bewarje select_all_matching_items: - one: '%{count} item dat mei jo sykopdracht oerienkomt selektearje.' + one: "%{count} item dat mei jo sykopdracht oerienkomt selektearje." other: Alle %{count} items dy’t mei jo sykopdracht oerienkomme selektearje. today: hjoed validation_errors: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index f4aa5a432e523c..527512053be1ae 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1,3 +1,4 @@ +--- ga: about: about_mastodon_html: 'Líonra sóisialta a sheasfaidh an aimsir: Gan fógraíocht, gan faire chorparáideach, le leagan amach eiticiúil agus dílárú. Bíodh do chuid sonraí agatsa féin le Mastodon!' @@ -10,11 +11,11 @@ ga: following: Ag leanúint nothing_here: Níl rud ar bith anseo! posts: - one: Postáil - two: Postálacha few: Postálacha many: Postálacha + one: Postáil other: Postálacha + two: Postálacha posts_tab_heading: Postálacha admin: account_actions: @@ -125,9 +126,9 @@ ga: update_status: Nuashonraigh Postáil update_user_role: Nuashonraigh Ról actions: - create_account_warning_html: "Sheol %{name} rabhadh chuig %{target}" - destroy_user_role_html: "Scrios %{name} ról %{target}" - update_user_role_html: "D'athraigh %{name} ról %{target}" + create_account_warning_html: Sheol %{name} rabhadh chuig %{target} + destroy_user_role_html: Scrios %{name} ról %{target} + update_user_role_html: D'athraigh %{name} ról %{target} deleted_account: cuntas scriosta announcements: edit: @@ -292,7 +293,7 @@ ga: with_media: Le meáin strikes: actions: - delete_statuses: "Scrios %{name} postálacha de chuid %{target}" + delete_statuses: Scrios %{name} postálacha de chuid %{target} tags: review: Stádas athbhreithnithe title: Riar @@ -401,15 +402,15 @@ ga: notification_mailer: admin: report: - subject: "Chuir %{name} tuairisc isteach" + subject: Chuir %{name} tuairisc isteach follow: - body: "Tá %{name} do do leanúint anois!" - subject: "Tá %{name} do do leanúint anois" + body: Tá %{name} do do leanúint anois! + subject: Tá %{name} do do leanúint anois title: Leantóirí nua mention: action: Freagair reblog: - subject: "Mhol %{name} do phostáil" + subject: Mhol %{name} do phostáil title: Moladh nua otp_authentication: enable: Cumasaigh diff --git a/config/locales/gd.yml b/config/locales/gd.yml index d2d28d6252a540..e620db3a78e0ae 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1,3 +1,4 @@ +--- gd: about: about_mastodon_html: 'An lìonra sòisealta dhan àm ri teachd: Gun sanasachd, gun chaithris corporra, dealbhadh beusail agus dì-mheadhanachadh! Gabh sealbh air an dàta agad fhèin le Mastodon!' @@ -8,22 +9,22 @@ gd: accounts: follow: Lean followers: - one: Neach-leantainn - two: Luchd-leantainn few: Luchd-leantainn + one: Neach-leantainn other: Luchd-leantainn + two: Luchd-leantainn following: A’ leantainn - instance_actor_flash: '’S e actar biortail a tha sa chunntas seo a riochdaicheas am frithealaiche fhèin seach cleachdaiche sònraichte. Tha e ’ga chleachdadh a chùm co-nasgaidh agus cha bu chòir dhut a chur à rèim.' + instance_actor_flash: "’S e actar biortail a tha sa chunntas seo a riochdaicheas am frithealaiche fhèin seach cleachdaiche sònraichte. Tha e ’ga chleachdadh a chùm co-nasgaidh agus cha bu chòir dhut a chur à rèim." last_active: an gnìomh mu dheireadh link_verified_on: Chaidh dearbhadh cò leis a tha an ceangal seo %{date} nothing_here: Chan eil dad an-seo! pin_errors: following: Feumaidh tu neach a leantainn mus urrainn dhut a bhrosnachadh posts: - one: Post - two: Postaichean few: Postaichean + one: Post other: Postaichean + two: Postaichean posts_tab_heading: Postaichean admin: account_actions: @@ -54,12 +55,12 @@ gd: title: Atharraich an dreuchd aig %{username} confirm: Dearbh confirmed: Chaidh a dhearbhachadh - confirming: '’Ga dhearbhadh' + confirming: "’Ga dhearbhadh" custom: Gnàthaichte delete: Sguab às an dàta deleted: Chaidh a sguabadh às demote: Ìslich - destroyed_msg: "Chaidh an dàta aig %{username} a chur air a’ chiutha ach an dèid a sguabadh às an ceann greis bheag" + destroyed_msg: Chaidh an dàta aig %{username} a chur air a’ chiutha ach an dèid a sguabadh às an ceann greis bheag disable: Reòth disable_sign_in_token_auth: Cuir à comas dearbhadh le tòcan puist-d disable_two_factor_authentication: Cuir an dearbhadh dà-cheumnach à comas @@ -110,10 +111,10 @@ gd: perform_full_suspension: Cuir à rèim previous_strikes: Rabhaidhean roimhe previous_strikes_description_html: - one: Fhuair an cunntas seo %{count} rabhadh. - two: Fhuair an cunntas seo %{count} rabhadh. few: Fhuair an cunntas seo %{count} rabhaidhean. + one: Fhuair an cunntas seo %{count} rabhadh. other: Fhuair an cunntas seo %{count} rabhadh. + two: Fhuair an cunntas seo %{count} rabhadh. promote: Àrdaich protocol: Pròtacal public: Poblach @@ -234,64 +235,64 @@ gd: update_status: Ùraich am post update_user_role: Ùraich an dreuchd actions: - approve_appeal_html: "Dh’aontaich %{name} ri ath-thagradh air co-dhùnadh na maorsainneachd o %{target}" - approve_user_html: "Dh’aontaich %{name} ri clàradh o %{target}" - assigned_to_self_report_html: "Dh’iomruin %{name} an gearan %{target} dhaibh fhèin" - change_email_user_html: "Dh’atharraich %{name} seòladh puist-d a’ chleachdaiche %{target}" - change_role_user_html: "Atharraich %{name} an dreuchd aig %{target}" - confirm_user_html: "Dhearbh %{name} seòladh puist-d a’ chleachdaiche %{target}" - create_account_warning_html: "Chuir %{name} rabhadh gu %{target}" - create_announcement_html: "Chruthaich %{name} brath-fios %{target} ùr" - create_canonical_email_block_html: "Bhac %{name} am post-d air a bheil an hais %{target}" - create_custom_emoji_html: "Luchdaich %{name} suas Emoji %{target} ùr" - create_domain_allow_html: "Cheadaich %{name} co-nasgadh leis an àrainn %{target}" - create_domain_block_html: "Bhac %{name} an àrainn %{target}" - create_email_domain_block_html: "Bhac %{name} an àrainn puist-d %{target}" - create_ip_block_html: "Chruthaich %{name} riaghailt dhan IP %{target}" - create_unavailable_domain_html: "Sguir %{name} ris an lìbhrigeadh dhan àrainn %{target}" - create_user_role_html: "Chruthaich %{name} an dreuchd %{target}" - demote_user_html: "Dh’ìslich %{name} an cleachdaiche %{target}" - destroy_announcement_html: "Sguab %{name} às am brath-fios %{target}" - destroy_canonical_email_block_html: "Dhì-bhac %{name} am post-d air a bheil an hais %{target}" - destroy_custom_emoji_html: "Sguab %{name} às an Emoji %{target}" - destroy_domain_allow_html: "Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target}" - destroy_domain_block_html: "Dì-bhac %{name} an àrainn %{target}" - destroy_email_domain_block_html: "Dì-bhac %{name} an àrainn puist-d %{target}" - destroy_instance_html: "Purgaidich %{name} an àrainn %{target}" - destroy_ip_block_html: "Sguab %{name} às riaghailt dhan IP %{target}" - destroy_status_html: "Thug %{name} post aig %{target} air falbh" - destroy_unavailable_domain_html: "Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target}" - destroy_user_role_html: "Sguab %{name} às an dreuchd %{target}" - disable_2fa_user_html: "Chuir %{name} riatanas an dearbhaidh dà-cheumnaich à comas dhan chleachdaiche %{target}" - disable_custom_emoji_html: "Chuir %{name} an Emoji %{target} à comas" - disable_sign_in_token_auth_user_html: "Chuir %{name} à comas dearbhadh le tòcan puist-d dha %{target}" - disable_user_html: "Chuir %{name} an clàradh a-steach à comas dhan chleachdaiche %{target}" - enable_custom_emoji_html: "Chuir %{name} an Emoji %{target} an comas" - enable_sign_in_token_auth_user_html: "Chuir %{name} an comas dearbhadh le tòcan puist-d dha %{target}" - enable_user_html: "Chuir %{name} an clàradh a-steach an comas dhan chleachdaiche %{target}" - memorialize_account_html: "Rinn %{name} duilleag cuimhneachain dhen chunntas aig %{target}" - promote_user_html: "Dh’àrdaich %{name} an cleachdaiche %{target}" - reject_appeal_html: "Dhiùlt %{name} an t-ath-thagradh air co-dhùnadh na maorsainneachd o %{target}" - reject_user_html: "Dhiùlt %{name} an clàradh o %{target}" - remove_avatar_user_html: "Thug %{name} avatar aig %{target} air falbh" - reopen_report_html: "Dh’fhosgail %{name} an gearan %{target} a-rithist" - resend_user_html: "Chuir %{name} am post-d dearbhaidh airson %{target} a-rithist" - reset_password_user_html: "Dh’ath-shuidhich %{name} am facal-faire aig a’ chleachdaiche %{target}" - resolve_report_html: "Dh’fhuasgail %{name} an gearan %{target}" - sensitive_account_html: "Chuir %{name} comharra gu bheil e frionasach ri meadhan aig %{target}" - silence_account_html: "Chuingich %{name} an cunntas aig %{target}" - suspend_account_html: "Chuir %{name} an cunntas aig %{target} à rèim" - unassigned_report_html: "Neo-iomruin %{name} an gearan %{target}" - unblock_email_account_html: "Dhì-bhac %{name} an seòladh puist-d aig %{target}" - unsensitive_account_html: "Chuir %{name} comharra nach eil e frionasach ri meadhan aig %{target}" - unsilence_account_html: "Dì-chuingich %{name} an cunntas aig %{target}" - unsuspend_account_html: "Chuir %{name} an cunntas aig %{target} ann an rèim a-rithist" - update_announcement_html: "Dh’ùraich %{name} am brath-fios %{target}" - update_custom_emoji_html: "Dh’ùraich %{name} an Emoji %{target}" - update_domain_block_html: "Dh’ùraich %{name} bacadh na h-àrainne %{target}" - update_ip_block_html: "Sguab %{name} às riaghailt dhan IP %{target}" - update_status_html: "Dh’ùraich %{name} post le %{target}" - update_user_role_html: "Dh’atharraich %{name} an dreuchd %{target}" + approve_appeal_html: Dh’aontaich %{name} ri ath-thagradh air co-dhùnadh na maorsainneachd o %{target} + approve_user_html: Dh’aontaich %{name} ri clàradh o %{target} + assigned_to_self_report_html: Dh’iomruin %{name} an gearan %{target} dhaibh fhèin + change_email_user_html: Dh’atharraich %{name} seòladh puist-d a’ chleachdaiche %{target} + change_role_user_html: Atharraich %{name} an dreuchd aig %{target} + confirm_user_html: Dhearbh %{name} seòladh puist-d a’ chleachdaiche %{target} + create_account_warning_html: Chuir %{name} rabhadh gu %{target} + create_announcement_html: Chruthaich %{name} brath-fios %{target} ùr + create_canonical_email_block_html: Bhac %{name} am post-d air a bheil an hais %{target} + create_custom_emoji_html: Luchdaich %{name} suas Emoji %{target} ùr + create_domain_allow_html: Cheadaich %{name} co-nasgadh leis an àrainn %{target} + create_domain_block_html: Bhac %{name} an àrainn %{target} + create_email_domain_block_html: Bhac %{name} an àrainn puist-d %{target} + create_ip_block_html: Chruthaich %{name} riaghailt dhan IP %{target} + create_unavailable_domain_html: Sguir %{name} ris an lìbhrigeadh dhan àrainn %{target} + create_user_role_html: Chruthaich %{name} an dreuchd %{target} + demote_user_html: Dh’ìslich %{name} an cleachdaiche %{target} + destroy_announcement_html: Sguab %{name} às am brath-fios %{target} + destroy_canonical_email_block_html: Dhì-bhac %{name} am post-d air a bheil an hais %{target} + destroy_custom_emoji_html: Sguab %{name} às an Emoji %{target} + destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target} + destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target} + destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target} + destroy_instance_html: Purgaidich %{name} an àrainn %{target} + destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target} + destroy_status_html: Thug %{name} post aig %{target} air falbh + destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target} + destroy_user_role_html: Sguab %{name} às an dreuchd %{target} + disable_2fa_user_html: Chuir %{name} riatanas an dearbhaidh dà-cheumnaich à comas dhan chleachdaiche %{target} + disable_custom_emoji_html: Chuir %{name} an Emoji %{target} à comas + disable_sign_in_token_auth_user_html: Chuir %{name} à comas dearbhadh le tòcan puist-d dha %{target} + disable_user_html: Chuir %{name} an clàradh a-steach à comas dhan chleachdaiche %{target} + enable_custom_emoji_html: Chuir %{name} an Emoji %{target} an comas + enable_sign_in_token_auth_user_html: Chuir %{name} an comas dearbhadh le tòcan puist-d dha %{target} + enable_user_html: Chuir %{name} an clàradh a-steach an comas dhan chleachdaiche %{target} + memorialize_account_html: Rinn %{name} duilleag cuimhneachain dhen chunntas aig %{target} + promote_user_html: Dh’àrdaich %{name} an cleachdaiche %{target} + reject_appeal_html: Dhiùlt %{name} an t-ath-thagradh air co-dhùnadh na maorsainneachd o %{target} + reject_user_html: Dhiùlt %{name} an clàradh o %{target} + remove_avatar_user_html: Thug %{name} avatar aig %{target} air falbh + reopen_report_html: Dh’fhosgail %{name} an gearan %{target} a-rithist + resend_user_html: Chuir %{name} am post-d dearbhaidh airson %{target} a-rithist + reset_password_user_html: Dh’ath-shuidhich %{name} am facal-faire aig a’ chleachdaiche %{target} + resolve_report_html: Dh’fhuasgail %{name} an gearan %{target} + sensitive_account_html: Chuir %{name} comharra gu bheil e frionasach ri meadhan aig %{target} + silence_account_html: Chuingich %{name} an cunntas aig %{target} + suspend_account_html: Chuir %{name} an cunntas aig %{target} à rèim + unassigned_report_html: Neo-iomruin %{name} an gearan %{target} + unblock_email_account_html: Dhì-bhac %{name} an seòladh puist-d aig %{target} + unsensitive_account_html: Chuir %{name} comharra nach eil e frionasach ri meadhan aig %{target} + unsilence_account_html: Dì-chuingich %{name} an cunntas aig %{target} + unsuspend_account_html: Chuir %{name} an cunntas aig %{target} ann an rèim a-rithist + update_announcement_html: Dh’ùraich %{name} am brath-fios %{target} + update_custom_emoji_html: Dh’ùraich %{name} an Emoji %{target} + update_domain_block_html: Dh’ùraich %{name} bacadh na h-àrainne %{target} + update_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target} + update_status_html: Dh’ùraich %{name} post le %{target} + update_user_role_html: Dh’atharraich %{name} an dreuchd %{target} deleted_account: chaidh an cunntas a sguabadh às empty: Cha deach loga a lorg. filter_by_action: Criathraich a-rèir gnìomha @@ -356,25 +357,25 @@ gd: new_users: cleachdaichean ùra opened_reports: gearanan air am fosgladh pending_appeals_html: - one: "%{count} ath-thagradh ri dhèiligeadh" - two: "%{count} ath-thagradh ri dhèiligeadh" few: "%{count} ath-thagraidhean ri dhèiligeadh" + one: "%{count} ath-thagradh ri dhèiligeadh" other: "%{count} ath-thagradh ri dhèiligeadh" + two: "%{count} ath-thagradh ri dhèiligeadh" pending_reports_html: - one: "%{count} ghearan ri dhèiligeadh" - two: "%{count} ghearan ri dhèiligeadh" few: "%{count} gearanan ri dhèiligeadh" + one: "%{count} ghearan ri dhèiligeadh" other: "%{count} gearan ri dhèiligeadh" + two: "%{count} ghearan ri dhèiligeadh" pending_tags_html: - one: "%{count} taga hais ri dhèiligeadh" - two: "%{count} thaga hais ri dhèiligeadh" few: "%{count} tagaichean hais ri dhèiligeadh" + one: "%{count} taga hais ri dhèiligeadh" other: "%{count} taga hais ri dhèiligeadh" + two: "%{count} thaga hais ri dhèiligeadh" pending_users_html: - one: "%{count} chleachdaiche ri dhèiligeadh" - two: "%{count} chleachdaiche ri dhèiligeadh" few: "%{count} cleachdaichean ri dhèiligeadh" + one: "%{count} chleachdaiche ri dhèiligeadh" other: "%{count} cleachdaiche ri dhèiligeadh" + two: "%{count} chleachdaiche ri dhèiligeadh" resolved_reports: gearanan air am fuasgladh software: Bathar-bog sources: Tùsan clàraidh @@ -417,7 +418,7 @@ gd: create: Cruthaich bacadh hint: Cha chuir bacadh na h-àrainne crìoch air cruthachadh chunntasan san stòr-dàta ach cuiridh e dòighean maorsainneachd sònraichte an sàs gu fèin-obrachail air a h-uile dàta a tha aig na cunntasan ud. severity: - desc_html: "Falaichidh an cuingeachadh postaichean o chunntasan na h-àrainne seo do dhuine sam bith nach ail a’ leantainn orra. Bheir an cur à rèim air falbh gach susbaint, meadhan is dàta pròifil aig cunntasan na h-àrainne seo on fhrithealaiche agad. Tagh Chan eil gin mur eil thu ach airson faidhlichean meadhain a dhiùltadh." + desc_html: Falaichidh an cuingeachadh postaichean o chunntasan na h-àrainne seo do dhuine sam bith nach ail a’ leantainn orra. Bheir an cur à rèim air falbh gach susbaint, meadhan is dàta pròifil aig cunntasan na h-àrainne seo on fhrithealaiche agad. Tagh Chan eil gin mur eil thu ach airson faidhlichean meadhain a dhiùltadh. noop: Chan eil gin silence: Cuingich suspend: Cuir à rèim @@ -439,10 +440,10 @@ gd: email_domain_blocks: add_new: Cuir tè ùr ris attempts_over_week: - one: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" - two: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" few: "%{count} oidhirpean clàraidh rè na seachdain seo chaidh" + one: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" other: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" + two: "%{count} oidhirp clàraidh rè na seachdain seo chaidh" created_msg: Chaidh àrainn a’ phuist-d a bhacadh delete: Sguab às dns: @@ -484,16 +485,16 @@ gd: instances: availability: description_html: - one: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} latha, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. - two: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} latha, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. few: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} làithean, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. + one: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} latha, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. other: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} latha, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. + two: Ma dh’fhàilligeas an lìbhrigeadh dhan àrainn fad %{count} latha, chan fheuch sinn a-rithist leis an lìbhrigeadh ach às dèidh lìbhrigeadh fhaighinn on àrainn ud fhèin. failure_threshold_reached: Chaidh stairsneach an fhàilligidh a ruigsinn %{date}. failures_recorded: - one: Oidhirp a dh’fhàillig rè %{count} latha. - two: Oidhirp a dh’fhàillig rè %{count} latha. few: Oidhirp a dh’fhàillig rè %{count} làithean. + one: Oidhirp a dh’fhàillig rè %{count} latha. other: Oidhirp a dh’fhàillig rè %{count} latha. + two: Oidhirp a dh’fhàillig rè %{count} latha. no_failures_recorded: Cha deach fàilligeadh sam bith a chlàradh. title: Faotainneachd warning: Cha deach leis an oidhirp mu dheireadh air ceangal ris an fhrithealaiche seo @@ -504,8 +505,8 @@ gd: confirm_purge: A bheil thu cinnteach gu bheil thu airson an dàta on àrainn seo a sguabadh às gu buan? content_policies: comment: Nòta taobh a-staigh - description_html: '’S urrainn dhut poileasaidhean susbainte a mhìneachadh a thèid a chur an sàs air a h-uile cunntas on àrainn seo ’s a fo-àrainnean-se.' - limited_federation_mode_description_html: '’S urrainn dhut taghadh an ceadaich thu co-nasgadh leis an àrainn seo gus nach ceadaich.' + description_html: "’S urrainn dhut poileasaidhean susbainte a mhìneachadh a thèid a chur an sàs air a h-uile cunntas on àrainn seo ’s a fo-àrainnean-se." + limited_federation_mode_description_html: "’S urrainn dhut taghadh an ceadaich thu co-nasgadh leis an àrainn seo gus nach ceadaich." policies: reject_media: Diùlt meadhanan reject_reports: Diùlt gearanan @@ -536,10 +537,10 @@ gd: destroyed_msg: Tha an dàta o %{domain} air ciutha an sguabaidh às aithghearr. empty: Cha deach àrainn a lorg. known_accounts: - one: "%{count} chunntas as aithne dhuinn" - two: "%{count} chunntas as aithne dhuinn" few: "%{count} cunntasan as aithne dhuinn" + one: "%{count} chunntas as aithne dhuinn" other: "%{count} cunntas as aithne dhuinn" + two: "%{count} chunntas as aithne dhuinn" moderation: all: Na h-uile limited: Cuingichte @@ -549,9 +550,9 @@ gd: purge: Purgaidich purge_description_html: Ma tha thu dhen bheachd gu bheil an àrainn seo far loidhne gu buan, ’s urrainn dhut a h-uile clàr cunntais ’s an dàta co-cheangailte on àrainn ud a sguabadh às san stòras agad. Dh’fhaoidte gun doir sin greis mhath. title: Co-nasgadh - total_blocked_by_us: '‘Ga bhacadh leinne' - total_followed_by_them: '’Ga leantainn leotha-san' - total_followed_by_us: '’Ga leantainn leinne' + total_blocked_by_us: "‘Ga bhacadh leinne" + total_followed_by_them: "’Ga leantainn leotha-san" + total_followed_by_us: "’Ga leantainn leinne" total_reported: Gearanan mun dèidhinn total_storage: Ceanglachain mheadhanan totals_time_period_hint_html: Gabhaidh na h-iomlanan gu h-ìosal a-staigh an dàta o chian nan cian. @@ -579,11 +580,11 @@ gd: no_ip_block_selected: Cha deach riaghailt IP sam bith atharrachadh o nach deach gin dhiubh a thaghadh title: Riaghailtean IP relationships: - title: "Na dàimhean aig %{acct}" + title: Na dàimhean aig %{acct} relays: add_new: Cuir ath-sheachadan ùr ris delete: Sguab às - description_html: '’S e frithealaiche eadar-mheadhanach a th’ ann an ath-sheachadan co-nasgaidh a nì iomlaid air grunnan mòra de phostaichean poblach eadar na frithealaichean a dh’fho-sgrìobhas ’s a dh’fhoillsicheas dha. ’S urrainn dha cuideachadh a thoirt do dh’fhrithealaichean beaga is meadhanach mòr ach an rùraich iad susbaint sa cho-shaoghal agus às an aonais, bhiodh aig cleachdaichean ionadail daoine eile a leantainn air frithealaichean cèine a làimh.' + description_html: "’S e frithealaiche eadar-mheadhanach a th’ ann an ath-sheachadan co-nasgaidh a nì iomlaid air grunnan mòra de phostaichean poblach eadar na frithealaichean a dh’fho-sgrìobhas ’s a dh’fhoillsicheas dha. ’S urrainn dha cuideachadh a thoirt do dh’fhrithealaichean beaga is meadhanach mòr ach an rùraich iad susbaint sa cho-shaoghal agus às an aonais, bhiodh aig cleachdaichean ionadail daoine eile a leantainn air frithealaichean cèine a làimh." disable: Cuir à comas disabled: Chaidh a chur à comas enable: Cuir an comas @@ -602,10 +603,10 @@ gd: reports: account: notes: - one: "%{count} nòta" - two: "%{count} nòta" few: "%{count} nòtaichean" + one: "%{count} nòta" other: "%{count} nòta" + two: "%{count} nòta" action_log: Sgrùd an loga action_taken_by: Chaidh an gnìomh a ghabhail le actions: @@ -673,7 +674,7 @@ gd: close_report: 'Cuir comharra gun deach gearan #%{id} fhuasgladh' close_reports_html: Cuir comharra gun deach gach gearan an aghaidh @%{acct} fhuasgladh delete_data_html: Sguab às a’ phròifil ’s an t-susbaint aig @%{acct} an ceann 30 latha mura dèid an cur an gnìomh a-rithist roimhe sin - preview_preamble_html: "Gheibh @%{acct} rabhadh leis an t-susbaint seo:" + preview_preamble_html: 'Gheibh @%{acct} rabhadh leis an t-susbaint seo:' record_strike_html: Clàraich rabhadh an aghaidh @%{acct} airson do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on chunntas seo san àm ri teachd send_email_html: Cuir post-d rabhaidh gu @%{acct} warning_placeholder: Adhbharan roghainneil eile air gnìomh na maorsainneachd. @@ -687,10 +688,10 @@ gd: roles: add_new: Cuir dreuchd ris assigned_users: - one: "%{count} chleachdaiche" - two: "%{count} chleachdaiche" few: "%{count} cleachdaichean" + one: "%{count} chleachdaiche" other: "%{count} cleachdaiche" + two: "%{count} chleachdaiche" categories: administration: Rianachd devops: DevOps @@ -703,10 +704,10 @@ gd: everyone: Na ceadan bunaiteach everyone_full_description_html: Seo an dreuchd bhunaiteach a bheir buaidh air gach cleachdaiche, fiù an fheadhainn nach deach dreuchd iomruineadh dhaibh. Gheibh a h-uile dreuch ceadan uaipe mar dhìleab. permissions_count: - one: "%{count} chead" - two: "%{count} chead" few: "%{count} ceadan" + one: "%{count} chead" other: "%{count} cead" + two: "%{count} chead" privileges: administrator: Rianaire administrator_description: Chan eil cuingeachadh sam bith air na cleachdaichean aig bheil an cead seo @@ -846,15 +847,15 @@ gd: with_media: Le meadhanan riutha strikes: actions: - delete_statuses: "Sguab %{name} às na postaichean aig %{target}" - disable: "Reòth %{name} an cunntas aig %{target}" - mark_statuses_as_sensitive: "Chuir %{name} comharra gu bheil na postaichean aig %{target} frionasach" - none: "Chuir %{name} rabhadh gu %{target}" - sensitive: "Chuir %{name} comharra gu bheil an cunntas aig %{target} frionasach" - silence: "Chuingich %{name} an cunntas aig %{target}" - suspend: "Chuir %{name} an cunntas aig %{target} à rèim" + delete_statuses: Sguab %{name} às na postaichean aig %{target} + disable: Reòth %{name} an cunntas aig %{target} + mark_statuses_as_sensitive: Chuir %{name} comharra gu bheil na postaichean aig %{target} frionasach + none: Chuir %{name} rabhadh gu %{target} + sensitive: Chuir %{name} comharra gu bheil an cunntas aig %{target} frionasach + silence: Chuingich %{name} an cunntas aig %{target} + suspend: Chuir %{name} an cunntas aig %{target} à rèim appeal_approved: Air ath-thagradh - appeal_pending: '’Ga ath-thagradh' + appeal_pending: "’Ga ath-thagradh" appeal_rejected: Chaidh ath-thagradh a dhiùltadh system_checks: database_schema_check: @@ -913,10 +914,10 @@ gd: publishers: no_publisher_selected: Cha deach foillsichear sam bith atharrachadh o nach deach gin dhiubh a thaghadh shared_by_over_week: - one: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh - two: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh few: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh + one: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh other: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh + two: Chaidh a cho-roinneadh le %{count} rè na seachdain seo chaidh title: Ceanglaichean a’ treandadh usage_comparison: Chaidh a cho-roinneadh %{today} tura(i)s an-diugh an coimeas ri %{yesterday} an-dè not_allowed_to_trend: Chan fhaod seo treandadh @@ -963,10 +964,10 @@ gd: usable: Gabhaidh a chleachdadh usage_comparison: Chaidh a chleachdadh %{today} tura(i)s an-diugh an coimeas ri %{yesterday} an-dè used_by_over_week: - one: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh - two: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh few: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh + one: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh other: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh + two: Chaidh a chleachdadh le %{count} rè na seachdain seo chaidh title: Treandaichean trending: A’ treandadh warning_presets: @@ -986,10 +987,10 @@ gd: enable: Cuir an comas enabled: Gnìomhach enabled_events: + few: Tha %{count} tachartasan an comas one: Tha %{count} tachartas an comas - two: "Tha %{count} thachartas an comas" - few: "Tha %{count} tachartasan an comas" - other: "Tha %{count} tachartas an comas" + other: Tha %{count} tachartas an comas + two: Tha %{count} thachartas an comas events: Tachartasan new: Webhook ùr rotate_secret: Cuairtich an rùn @@ -1017,7 +1018,7 @@ gd: body: Chì thu mion-fhiosrachadh a’ chunntais ùir gu h-ìosal. ’S urrainn dhut gabhail ris an iarrtas seo no a dhiùltadh. subject: Tha cunntas ùr air %{instance} a’ feitheamh air lèirmheas (%{username}) new_report: - body: "Rinn %{reporter} gearan air %{target}" + body: Rinn %{reporter} gearan air %{target} body_remote: Rinn cuideigin o %{domain} gearan air %{target} subject: Tha gearan ùr aig %{instance} (#%{id}) new_software_updates: @@ -1031,7 +1032,7 @@ gd: title: Postaichean a’ treandadh new_trending_tags: no_approved_tags: Chan eil taga hais a’ treandadh le aontachadh ann. - requirements: '’S urrainn do ghin dhe na tagraichean seo dol thairis air #%{rank} a tha aig an taga hais #%{lowest_tag_name} a’ treandadh as ìsle le aontachadh agus sgòr de %{lowest_tag_score} air.' + requirements: "’S urrainn do ghin dhe na tagraichean seo dol thairis air #%{rank} a tha aig an taga hais #%{lowest_tag_name} a’ treandadh as ìsle le aontachadh agus sgòr de %{lowest_tag_score} air." title: Tagaichean hais a’ treandadh subject: Tha treandaichean ùra a’ feitheamh air lèirmheas air %{instance} aliases: @@ -1050,7 +1051,7 @@ gd: localization: body: Tha Mastodon ’ga eadar-theangachadh le saor-thoilich. guide_link: https://crowdin.com/project/mastodon - guide_link_text: '’S urrainn do neach sam bith cuideachadh.' + guide_link_text: "’S urrainn do neach sam bith cuideachadh." sensitive_content: Susbaint fhrionasach application_mailer: notification_preferences: Atharraich roghainnean a’ phuist-d @@ -1079,7 +1080,7 @@ gd: delete_account: Sguab às an cunntas delete_account_html: Nam bu mhiann leat an cunntas agad a sguabadh às, nì thu an-seo e. Thèid dearbhadh iarraidh ort. description: - prefix_invited_by_user: "Thug @%{name} cuireadh dhut ach am faigh thu ballrachd air an fhrithealaiche seo de Mhastodon!" + prefix_invited_by_user: Thug @%{name} cuireadh dhut ach am faigh thu ballrachd air an fhrithealaiche seo de Mhastodon! prefix_sign_up: Clàraich le Mastodon an-diugh! suffix: Le cunntas, ’s urrainn dhut daoine a leantainn, naidheachdan a phostadh agus conaltradh leis an luchd-chleachdaidh air frithealaiche Mastodon sam bith is a bharrachd! didnt_get_confirmation: Nach d’fhuair thu an ceangal dearbhaidh? @@ -1146,8 +1147,8 @@ gd: prompt: Dearbh am facal-faire airson leantainn air adhart crypto: errors: - invalid_key: '– chan e iuchair Ed25519 no Curve25519 dhligheach a th’ ann' - invalid_signature: '– chan e soidhneadh Ed25519 dligheach a th’ ann' + invalid_key: "– chan e iuchair Ed25519 no Curve25519 dhligheach a th’ ann" + invalid_signature: "– chan e soidhneadh Ed25519 dligheach a th’ ann" date: formats: default: "%d %b %Y" @@ -1176,7 +1177,7 @@ gd: before: 'Mus lean thu air adhart, leugh na nòtaichean seo gu cùramach:' caches: Dh’fhaoidte gum mair susbaint ann an tasgadain fhrithealaichean eile data_removal: Thèid na postaichean agad ’s dàta eile a thoirt air falbh gu buan - email_change_html: '’S urrainn dhut an seòladh puist-d agad atharrachadh gun a bhith a’ sguabadh às a’ chunntais agad' + email_change_html: ’S urrainn dhut an seòladh puist-d agad atharrachadh gun a bhith a’ sguabadh às a’ chunntais agad email_contact_html: Mura faigh thu fhathast e, ’s urrainn dhut post-d a chur gu %{email} airson cuideachaidh email_reconfirmation_html: Mur an d’ fhuair thu am post-d dearbhaidh, ’s urrainn dhut iarraidh a-rithist irreversible: Chan urrainn dhut an cunntas agad aiseag no ath-ghnìomhachadh @@ -1241,7 +1242,7 @@ gd: archive_takeout: date: Ceann-latha download: Luchdaich a-nuas an tasg-lann agad - hint_html: '’S urrainn dhut tasg-lann iarraidh dhe na postaichean agad is meadhanan a luchdaich thu suas. Thèid an dàta às-phortadh san fhòrmat ActivityPub a ghabhas leughadh le bathar-bog co-chòrdail sam bith. ’S urrainn dhut tasg-lann iarraidh gach 7 làithean.' + hint_html: "’S urrainn dhut tasg-lann iarraidh dhe na postaichean agad is meadhanan a luchdaich thu suas. Thèid an dàta às-phortadh san fhòrmat ActivityPub a ghabhas leughadh le bathar-bog co-chòrdail sam bith. ’S urrainn dhut tasg-lann iarraidh gach 7 làithean." in_progress: A’ cruinneachadh na tasg-lainn agad… request: Iarr an tasg-lann agad size: Meud @@ -1280,20 +1281,20 @@ gd: expires_in: Falbhaidh an ùine air an ceann %{distance} expires_on: Falbhaidh an ùine air %{date} keywords: - one: "%{count} fhacal-luirg" - two: "%{count} fhacal-luirg" few: "%{count} faclan-luirg" + one: "%{count} fhacal-luirg" other: "%{count} facal-luirg" + two: "%{count} fhacal-luirg" statuses: - one: "%{count} phost" - two: "%{count} phost" few: "%{count} postaichean" + one: "%{count} phost" other: "%{count} post" + two: "%{count} phost" statuses_long: - one: "Chaidh %{count} phost fa leth fhalach" - two: "Chaidh %{count} phost fa leth fhalach" - few: "Chaidh %{count} postaichean fa leth fhalach" - other: "Chaidh %{count} post fa leth fhalach" + few: Chaidh %{count} postaichean fa leth fhalach + one: Chaidh %{count} phost fa leth fhalach + other: Chaidh %{count} post fa leth fhalach + two: Chaidh %{count} phost fa leth fhalach title: Criathragan new: save: Sàbhail a’ chriathrag ùr @@ -1308,12 +1309,14 @@ gd: generic: all: Na h-uile all_items_on_page_selected_html: - one: "Chaidh %{count} nì a thaghadh air an duilleag seo." - two: Chaidh an %{count} nì uile a thaghadh air an duilleag seo. few: Chaidh na %{count} nithean uile a thaghadh air an duilleag seo. + one: Chaidh %{count} nì a thaghadh air an duilleag seo. other: Chaidh an %{count} nì uile a thaghadh air an duilleag seo. + two: Chaidh an %{count} nì uile a thaghadh air an duilleag seo. all_matching_items_selected_html: - one: "Chaidh %{count} nì a thaghadh a fhreagras dha na lorg thu." + few: Chaidh %{count} nithean a thaghadh a fhreagras dha na lorg thu. + one: Chaidh %{count} nì a thaghadh a fhreagras dha na lorg thu. + other: Chaidh %{count} nì a thaghadh a fhreagras dha na lorg thu. two: Chaidh %{count} nì a thaghadh a fhreagras dha na lorg thu. cancel: Sguir dheth changes_saved_msg: Chaidh na h-atharraichean a shàbhaladh! @@ -1325,16 +1328,16 @@ gd: order_by: Seòrsaich a-rèir save_changes: Sàbhail na h-atharraichean select_all_matching_items: - one: Tagh %{count} nì a fhreagras dha na lorg thu. - two: Tagh an %{count} nì uile a fhreagras dha na lorg thu. few: Tagh na %{count} nithean uile a fhreagras dha na lorg thu. + one: Tagh %{count} nì a fhreagras dha na lorg thu. other: Tagh an %{count} nì uile a fhreagras dha na lorg thu. + two: Tagh an %{count} nì uile a fhreagras dha na lorg thu. today: an-diugh validation_errors: - one: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal - two: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal few: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air na %{count} mhearachdan gu h-ìosal + one: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal other: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mearachd gu h-ìosal + two: Tha rud ann nach eil buileach ceart fhathast! Thoir sùil air an %{count} mhearachd gu h-ìosal imports: errors: empty: Faidhle CSV falamh @@ -1407,10 +1410,10 @@ gd: generate: Gin ceangal cuiridh invited_by: 'Fhuair thu cuireadh o:' max_uses: - one: '%{count} chleachdadh' - two: "%{count} chleachdadh" few: "%{count} cleachdaichean" + one: "%{count} chleachdadh" other: "%{count} cleachdadh" + two: "%{count} chleachdadh" max_uses_prompt: Gun chrìoch prompt: Cruthaich is co-roinn ceanglaichean le càch airson inntrigeadh dhan fhrithealaiche seo a thoirt dhaibh table: @@ -1457,10 +1460,10 @@ gd: cancel_explanation: Ma sguireas tu dhen ath-stiùireadh, thèid an cunntas làithreach agad a ghnìomhachadh a-rithist ach chan aisig sin an luchd-leantainn dhut a chaidh imrich dhan chunntas ud. cancelled_msg: Chaidh sgur dhen ath-stiùireadh. errors: - already_moved: '– seo an t-aon chunntas chan a ghluais thu mu thràth' - missing_also_known_as: '– chan eil seo ’na alias aig a’ chunntas seo' - move_to_self: '– chan fhaod thu an cunntas làithreach a chleachdadh dha seo' - not_found: '– cha deach seo a lorg' + already_moved: "– seo an t-aon chunntas chan a ghluais thu mu thràth" + missing_also_known_as: "– chan eil seo ’na alias aig a’ chunntas seo" + move_to_self: "– chan fhaod thu an cunntas làithreach a chleachdadh dha seo" + not_found: "– cha deach seo a lorg" on_cooldown: Tha àm socrachaidh ort followers_count: Luchd-leantainn aig àm na h-imrich incoming_migrations: Imrich o chunntas eile @@ -1493,20 +1496,20 @@ gd: notification_mailer: admin: report: - subject: "Rinn %{name} gearan" + subject: Rinn %{name} gearan sign_up: - subject: "Chlàraich %{name}" + subject: Chlàraich %{name} favourite: body: 'Is annsa le %{name} am post agad:' - subject: "Is annsa le %{name} am post agad" + subject: Is annsa le %{name} am post agad title: Annsachd ùr follow: - body: "Tha %{name} ’gad leantainn a-nis!" - subject: "Tha %{name} ’gad leantainn a-nis" + body: Tha %{name} ’gad leantainn a-nis! + subject: Tha %{name} ’gad leantainn a-nis title: Neach-leantainn ùr follow_request: action: Stiùirich na h-iarrtasan leantainn - body: "Dh’iarr %{name} leantainn" + body: Dh’iarr %{name} leantainn subject: 'Neach-leantainn ri dhèiligeadh: %{name}' title: Iarrtas leantainn ùr mention: @@ -1518,12 +1521,12 @@ gd: subject: Thàinig cunntas-bheachd le %{name} gu crìoch reblog: body: 'Chaidh am post agad a bhrosnachadh le %{name}:' - subject: "Bhrosnaich %{name} am post agad" + subject: Bhrosnaich %{name} am post agad title: Brosnachadh ùr status: - subject: "Tha %{name} air post a sgrìobhadh" + subject: Tha %{name} air post a sgrìobhadh update: - subject: "Dheasaich %{name} post" + subject: Dheasaich %{name} post notifications: administration_emails: Brathan puist-d na rianachd email_events: Tachartasan nam brathan puist-d @@ -1556,9 +1559,9 @@ gd: polls: errors: already_voted: Chuir thu bhòt sa chunntas-bheachd seo mu thràth - duplicate_options: '– tha nithean dùblaichte ann' - duration_too_long: '– tha seo ro fhad air falbh san àm ri teachd' - duration_too_short: '– tha seo ro aithghearr' + duplicate_options: "– tha nithean dùblaichte ann" + duration_too_long: "– tha seo ro fhad air falbh san àm ri teachd" + duration_too_short: "– tha seo ro aithghearr" expired: Tha an cunntas-bheachd air a thighinn gu crìoch invalid_choice: Chan eil an roghainn dhan a bhòt thu ann over_character_limit: "– chan fhaod a bhith nas fhaide na %{max} caractar" @@ -1583,7 +1586,7 @@ gd: reactions: errors: limit_reached: Ràinig thu crìoch nam freagairtean eadar-dhealaichte - unrecognized_emoji: '– chan aithne dhuinn an Emoji seo' + unrecognized_emoji: "– chan aithne dhuinn an Emoji seo" relationships: activity: Gnìomhachd a’ chunntais confirm_follow_selected_followers: A bheil thu cinnteach gu bheil thu airson an luchd-leantainn a thagh thu a leantainn? @@ -1690,29 +1693,29 @@ gd: statuses: attached: audio: - one: "%{count} fhuaim" - two: "%{count} fhuaim" few: "%{count} fuaimean" + one: "%{count} fhuaim" other: "%{count} fuaim" + two: "%{count} fhuaim" description: 'Ceanglachain: %{attached}' image: - one: "%{count} dealbh" - two: "%{count} dhealbh" few: "%{count} dealbhan" + one: "%{count} dealbh" other: "%{count} dealbh" + two: "%{count} dhealbh" video: - one: "%{count} video" - two: "%{count} video" few: "%{count} videothan" + one: "%{count} video" other: "%{count} video" + two: "%{count} video" boosted_from_html: Brosnachadh o %{acct_link} content_warning: 'Rabhadh susbainte: %{warning}' default_language: Co-ionnan ri cànan na h-eadar-aghaidh disallowed_hashtags: - one: '– bha na tagaichean hais toirmisgte seo ann: %{tags}' - two: '– bha na tagaichean hais toirmisgte seo ann: %{tags}' - few: '– bha na tagaichean hais toirmisgte seo ann: %{tags}' - other: '– bha na tagaichean hais toirmisgte seo ann: %{tags}' + few: "– bha na tagaichean hais toirmisgte seo ann: %{tags}" + one: "– bha na tagaichean hais toirmisgte seo ann: %{tags}" + other: "– bha na tagaichean hais toirmisgte seo ann: %{tags}" + two: "– bha na tagaichean hais toirmisgte seo ann: %{tags}" edited_at_html: Air a dheasachadh %{date} errors: in_reply_not_found: Tha coltas nach eil am post dhan a tha thu airson freagairt ann. @@ -1725,15 +1728,15 @@ gd: reblog: Chan urrainn dhut brosnachadh a phrìneachadh poll: total_people: - one: "%{count} neach" - two: "%{count} neach" few: "%{count} daoine" + one: "%{count} neach" other: "%{count} duine" + two: "%{count} neach" total_votes: - one: "%{count} bhòt" - two: "%{count} bhòt" few: "%{count} bhòtaichean" + one: "%{count} bhòt" other: "%{count} bhòt" + two: "%{count} bhòt" vote: Bhòt show_more: Seall barrachd dheth show_newer: Seall feadhainn as ùire @@ -1789,7 +1792,7 @@ gd: errors: too_late: Tha e ro anmoch airson an rabhadh seo ath-thagradh tags: - does_not_match_previous_name: '– chan eil seo a-rèir an ainm roimhe' + does_not_match_previous_name: "– chan eil seo a-rèir an ainm roimhe" themes: contrast: Mastodon (iomsgaradh àrd) default: Mastodon (dorcha) @@ -1851,7 +1854,7 @@ gd: disable: Chan urrainn dhut an cunntas agad a chleachdadh tuilleadh ach mairidh a’ phròifil ’s an dàta eile agad. Faodaidh tu lethbhreac-glèidhidh dhen dàta agad iarraidh, roghainnean a’ chunntais atharrachadh no an cunntas agad a sguabadh às. mark_statuses_as_sensitive: Chuir maoir %{instance} comharra na frionasachd ri cuid dhe na postaichean agad. Is ciall dha seo gum feumar gnogag a thoirt air na meadhanan sna postaichean mus faicear ro-shealladh. ’S urrainn dhut fhèin comharra a chur gu bheil meadhan frionasach nuair a sgrìobhas tu post san à ri teachd. sensitive: O seo a-mach, thèid comharra na frionasachd a chur ri faidhle meadhain sam bith a luchdaicheas tu suas agus thèid am falach air cùlaibh rabhaidh a ghabhas briogadh air. - silence: '’S urrainn dhut an cunntas agad a chleachdadh fhathast ach chan fhaic ach na daoine a tha ’gad leantainn mu thràth na postaichean agad air an fhrithealaiche seo agus dh’fhaoidte gun dèid d’ às-dhùnadh o iomadh gleus rùrachaidh. Gidheadh, faodaidh càch ’gad leantainn a làimh fhathast.' + silence: "’S urrainn dhut an cunntas agad a chleachdadh fhathast ach chan fhaic ach na daoine a tha ’gad leantainn mu thràth na postaichean agad air an fhrithealaiche seo agus dh’fhaoidte gun dèid d’ às-dhùnadh o iomadh gleus rùrachaidh. Gidheadh, faodaidh càch ’gad leantainn a làimh fhathast." suspend: Chan urrainn dhut an cunntas agad a chleachdadh tuilleadh agus chan fhaigh thu grèim air a’ phròifil no air an dàta eile agad. ’S urrainn dhut clàradh a-steach fhathast airson lethbhreac-glèidhidh dhen dàta agad iarraidh mur dèid an dàta a thoirt air falbh an ceann 30 latha gu slàn ach cumaidh sinn cuid dhen dàta bhunasach ach nach seachain thu an cur à rèim. reason: 'Adhbhar:' statuses: 'Iomradh air postaichean:' @@ -1873,7 +1876,7 @@ gd: suspend: Cunntas à rèim welcome: edit_profile_action: Suidhich a’ phròifil agad - edit_profile_step: '’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu.' + edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu." explanation: Seo gliocas no dhà gus tòiseachadh final_action: Tòisich air postadh final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith ’gad leantainn, chì cuid mhath na postaichean poblach agad, can air an loidhne-ama ionadail no le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #fàilte?' diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 3c7ccacf6fe135..14f78e46159287 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1,3 +1,4 @@ +--- gl: about: about_mastodon_html: 'A rede social do futuro: Sen publicidade, sen seguimento por empresas, deseño ético e descentralización! En Mastodon ti posúes os teus datos!' @@ -55,7 +56,7 @@ gl: delete: Eliminar datos deleted: Eliminado demote: Rebaixar - destroyed_msg: "Os datos de %{username} están na cola para ser eliminados axiña" + destroyed_msg: Os datos de %{username} están na cola para ser eliminados axiña disable: Desactivar disable_sign_in_token_auth: Desactivar a autenticación por token nun email disable_two_factor_authentication: Desactivar 2FA @@ -403,7 +404,7 @@ gl: create: Crear bloqueo hint: O bloqueo do dominio non previrá a creación de entradas de contas na base de datos, pero aplicará de xeito retroactivo e automático regras específicas de moderación sobre esas contas. severity: - desc_html: "Ao Limitar farás que as publicacións de contas deste dominio sexan invisibles para calquera que non as siga. Ao Suspender eliminarás do teu servidor todo o contido, multimedia, e datos de perfil para as contas deste dominio. Utiliza Nada se simplemente queres rexeitar ficheiros multimedia." + desc_html: Ao Limitar farás que as publicacións de contas deste dominio sexan invisibles para calquera que non as siga. Ao Suspender eliminarás do teu servidor todo o contido, multimedia, e datos de perfil para as contas deste dominio. Utiliza Nada se simplemente queres rexeitar ficheiros multimedia. noop: Ningún silence: Limitar suspend: Suspender @@ -557,7 +558,7 @@ gl: no_ip_block_selected: Non se cambiou ningunha regra iP porque non seleccionaches ningunha title: Regras IP relationships: - title: "Relacións de %{acct}" + title: Relacións de %{acct} relays: add_new: Engadir un novo repetidor delete: Eliminar @@ -1007,7 +1008,7 @@ gl: remove: Desligar alcume appearance: advanced_web_interface: Interface web avanzada - advanced_web_interface_hint: 'Se queres empregar todo o ancho da pantalla, a interface web avanzada permíteche configurar diferentes columnas para ver tanta información como queiras. Inicio, notificacións, cronoloxía federada, varias listaxes e cancelos.' + advanced_web_interface_hint: Se queres empregar todo o ancho da pantalla, a interface web avanzada permíteche configurar diferentes columnas para ver tanta información como queiras. Inicio, notificacións, cronoloxía federada, varias listaxes e cancelos. animations_and_accessibility: Animacións e accesibilidade confirmation_dialogs: Diálogos de confirmación discovery: Descubrir @@ -1047,7 +1048,7 @@ 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 recibiches a ligazón de confirmación? - dont_have_your_security_key: '¿Non tes a túa chave de seguridade?' + dont_have_your_security_key: "¿Non tes a túa chave de seguridade?" forgot_password: Non lembras o contrasinal? invalid_reset_password_token: O token para restablecer o contrasinal non é válido ou caducou. Por favor solicita un novo. link_to_otp: Escribe o código do segundo factor do móbil ou un código de recuperación @@ -1451,8 +1452,8 @@ gl: subject: "%{name} marcou como favorita a túa publicación" title: Nova favorita follow: - body: "Agora %{name} séguete!" - subject: "Agora %{name} séguete" + body: Agora %{name} séguete! + subject: Agora %{name} séguete title: Nova seguidora follow_request: action: Xestionar peticións de seguimento @@ -1461,7 +1462,7 @@ gl: title: Nova petición de seguimento mention: action: Responder - body: '%{name} mencionoute en:' + body: "%{name} mencionoute en:" subject: Foches mencionada por %{name} title: Nova mención poll: @@ -1839,7 +1840,7 @@ gl: 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?' + delete_confirmation: "¿Tes a certeza de que queres eliminar a chave de seguridade?" description_html: Se activas a autenticación con chave de seguridade, pediráseche que uses unha das túas chaves para acceder. destroy: error: Houbo un problema ó eliminar a túa chave de seguridade, inténtao outra vez. diff --git a/config/locales/he.yml b/config/locales/he.yml index 7c068d565e5dc7..a7c702e9790431 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1,6 +1,7 @@ +--- he: about: - about_mastodon_html: 'מסטודון היא רשת חברתית חופשית, מבוססת תוכנה חופשית ("קוד פתוח"). כאלטרנטיבה בלתי ריכוזית לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד — לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ברשת החברתית באופן חלק.' + about_mastodon_html: מסטודון היא רשת חברתית חופשית, מבוססת תוכנה חופשית ("קוד פתוח"). כאלטרנטיבה בלתי ריכוזית לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד — לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ברשת החברתית באופן חלק. contact_missing: ללא הגדרה contact_unavailable: לא רלוונטי/חסר hosted_on: מסטודון שיושב בכתובת %{domain} @@ -8,10 +9,10 @@ he: accounts: follow: לעקוב followers: - one: עוקב - two: עוקבים many: עוקבים + one: עוקב other: עוקבים + two: עוקבים following: נעקבים instance_actor_flash: חשבון זה הינו פועל וירטואלי המשמש לייצוג השרת עצמו ולא אף משתמש ספציפי. הוא משמש למטרות פדרציה ואין להשעותו. last_active: פעילות אחרונה @@ -20,10 +21,10 @@ he: pin_errors: following: עליך לעקוב אחרי חשבון לפני שניתן יהיה להמליץ עליו posts: - one: הודעה - two: הודעותיים many: הודעות + one: הודעה other: הודעות + two: הודעותיים posts_tab_heading: הודעות admin: account_actions: @@ -59,7 +60,7 @@ he: delete: מחיקת נתונים deleted: מחוקים demote: הורדה בדרגה - destroyed_msg: "הנתונים של %{username} נכנסו לתור המחיקה וצפויים להימחק באופן מיידי" + destroyed_msg: הנתונים של %{username} נכנסו לתור המחיקה וצפויים להימחק באופן מיידי disable: הקפאה disable_sign_in_token_auth: ביטול הזדהות באמצעות אסימון דוא״ל disable_two_factor_authentication: ביטול הזדהות דו־שלבית @@ -110,10 +111,10 @@ he: perform_full_suspension: ביצוע השעייה מלאה previous_strikes: פסילות קודמות previous_strikes_description_html: - one: לחשבון הזה פסילה אחת. - two: לחשבון הזה %{count} פסילות. many: לחשבון הזה יש %{count} פסילות. + one: לחשבון הזה פסילה אחת. other: לחשבון הזה %{count} פסילות. + two: לחשבון הזה %{count} פסילות. promote: להעלות בדרגה protocol: פרטיכל public: פומבי @@ -236,17 +237,17 @@ he: actions: approve_appeal_html: "%{name} אישר/ה ערעור על החלטת מנהלי הקהילה מ-%{target}" approve_user_html: "%{name} אישר/ה הרשמה מ-%{target}" - assigned_to_self_report_html: "%{name} הקצה/תה דו\"ח %{target} לעצמם" - change_email_user_html: "%{name} שינה/תה את כתובת הדוא\"ל של המשתמש %{target}" + assigned_to_self_report_html: '%{name} הקצה/תה דו"ח %{target} לעצמם' + change_email_user_html: '%{name} שינה/תה את כתובת הדוא"ל של המשתמש %{target}' change_role_user_html: "%{name} שינה את התפקיד של %{target}" - confirm_user_html: "%{name} אישר/ה את כותבת הדו\"אל של המשתמש %{target}" + confirm_user_html: '%{name} אישר/ה את כותבת הדו"אל של המשתמש %{target}' create_account_warning_html: "%{name} שלח/ה אזהרה ל %{target}" create_announcement_html: "%{name} יצר/ה הכרזה חדשה %{target}" create_canonical_email_block_html: "%{name} חסם/ה את הדואל %{target}" create_custom_emoji_html: "%{name} העלו אמוג'י חדש %{target}" create_domain_allow_html: "%{name} אישר/ה פדרציה עם הדומיין %{target}" create_domain_block_html: "%{name} חסם/ה את הדומיין %{target}" - create_email_domain_block_html: "%{name} חסם/ה את דומיין הדוא\"ל %{target}" + create_email_domain_block_html: '%{name} חסם/ה את דומיין הדוא"ל %{target}' create_ip_block_html: "%{name} יצר/ה כלל עבור IP %{target}" create_unavailable_domain_html: "%{name} הפסיק/ה משלוח לדומיין %{target}" create_user_role_html: "%{name} יצר את התפקיד של %{target}" @@ -256,33 +257,33 @@ he: destroy_custom_emoji_html: "%{name} מחק אמוג'י של %{target}" destroy_domain_allow_html: "%{name} לא התיר/ה פדרציה עם הדומיין %{target}" destroy_domain_block_html: "%{name} הסיר/ה חסימה מהדומיין %{target}" - destroy_email_domain_block_html: "%{name} הסיר/ה חסימה מדומיין הדוא\"ל %{target}" + destroy_email_domain_block_html: '%{name} הסיר/ה חסימה מדומיין הדוא"ל %{target}' destroy_instance_html: "%{name} טיהר/ה את הדומיין %{target}" destroy_ip_block_html: "%{name} מחק/ה את הכלל עבור IP %{target}" - destroy_status_html: "ההודעה של %{target} הוסרה ע\"י %{name}" + destroy_status_html: ההודעה של %{target} הוסרה ע"י %{name} destroy_unavailable_domain_html: "%{name} התחיל/ה מחדש משלוח לדומיין %{target}" destroy_user_role_html: "%{name} ביטל את התפקיד של %{target}" disable_2fa_user_html: "%{name} ביטל/ה את הדרישה לאימות דו-גורמי למשתמש %{target}" disable_custom_emoji_html: "%{name} השבית/ה את האמוג'י %{target}" - disable_sign_in_token_auth_user_html: "%{name} השבית/ה את האימות בעזרת אסימון דוא\"ל עבור %{target}" + disable_sign_in_token_auth_user_html: '%{name} השבית/ה את האימות בעזרת אסימון דוא"ל עבור %{target}' disable_user_html: "%{name} חסם/ה כניסה מהמשתמש/ת %{target}" enable_custom_emoji_html: "%{name} אפשר/ה את האמוג'י %{target}" - enable_sign_in_token_auth_user_html: "%{name} אפשר/ה אימות בעזרת אסימון דוא\"ל עבור %{target}" + enable_sign_in_token_auth_user_html: '%{name} אפשר/ה אימות בעזרת אסימון דוא"ל עבור %{target}' enable_user_html: "%{name} אפשר/ה כניסה עבור המשתמש %{target}" memorialize_account_html: "%{name} הפך/ה את חשבונו של %{target} לדף הנצחה" promote_user_html: "%{name} העלה בדרגה את המשתמש %{target}" reject_appeal_html: "%{name} דחו ערעור על החלטת הנהלת הקהילה מ-%{target}" reject_user_html: "%{name} דחו הרשמה מ-%{target}" remove_avatar_user_html: "%{name} הסירו את תמונת הפרופיל של %{target}" - reopen_report_html: "%{name} פתח מחדש דו\"ח %{target}" + reopen_report_html: '%{name} פתח מחדש דו"ח %{target}' resend_user_html: "%{name} הפעיל.ה שליחה מחדש של דואל אימות עבור %{target}" - reset_password_user_html: "הסיסמה עבור המשתמש %{target} התאפסה על־ידי %{name}" - resolve_report_html: "%{name} פתר/ה דו\"ח %{target}" + reset_password_user_html: הסיסמה עבור המשתמש %{target} התאפסה על־ידי %{name} + resolve_report_html: '%{name} פתר/ה דו"ח %{target}' sensitive_account_html: "%{name} סימן/ה את המדיה של %{target} כרגיש" silence_account_html: "%{name} הגביל/ה את חשבונו של %{target}" suspend_account_html: "%{name} השעו את חשבונו של %{target}" - unassigned_report_html: "%{name} דו\"ח לא מוקצה %{target}" - unblock_email_account_html: "%{name} הסיר/ה חסימה מחשבון הדוא\"ל של %{target}" + unassigned_report_html: '%{name} דו"ח לא מוקצה %{target}' + unblock_email_account_html: '%{name} הסיר/ה חסימה מחשבון הדוא"ל של %{target}' unsensitive_account_html: "%{name} ביטל/ה את סימון המדיה של %{target} כרגישה" unsilence_account_html: "%{name} ביטל/ה ההגבלה מהחשבון של %{target}" unsuspend_account_html: "%{name} ביטל/ה את ההשעיה של החשבון של %{target}" @@ -356,25 +357,25 @@ he: new_users: משתמשים חדשים opened_reports: דו"חות פתוחים pending_appeals_html: - one: "ערעור %{count} ממתין" - two: "%{count} ערעורים ממתינים" many: "%{count} ערעורים ממתינים" + one: ערעור %{count} ממתין other: "%{count} ערעורים ממתינים" + two: "%{count} ערעורים ממתינים" pending_reports_html: - one: "דו\"ח %{count} ממתין" - two: "%{count} דוחות ממתינים" many: "%{count} דוחות ממתינים" + one: דו"ח %{count} ממתין other: "%{count} דוחות ממתינים" + two: "%{count} דוחות ממתינים" pending_tags_html: - one: "תגית %{count} ממתינה" - two: "%{count} תגיות ממתינות" many: "%{count} תגיות ממתינות" + one: תגית %{count} ממתינה other: "%{count} תגיות ממתינות" + two: "%{count} תגיות ממתינות" pending_users_html: - one: "%{count} משתמש/ת ממתינ/ה" - two: "%{count} משתמשים ממתינים" many: "%{count} משתמשים ממתינים" + one: "%{count} משתמש/ת ממתינ/ה" other: "%{count} משתמשים ממתינים" + two: "%{count} משתמשים ממתינים" resolved_reports: דו"חות נפתרו software: תוכנה sources: משאבי הרשמה @@ -439,10 +440,10 @@ he: email_domain_blocks: add_new: הוספת חדש attempts_over_week: - one: "%{count} נסיון במשך השבוע שעבר" - two: "%{count} נסיונות הרשמה במשך השבוע שעבר" many: "%{count} נסיונות הרשמה במשך השבוע שעבר" + one: "%{count} נסיון במשך השבוע שעבר" other: "%{count} נסיונות הרשמה במשך השבוע שעבר" + two: "%{count} נסיונות הרשמה במשך השבוע שעבר" created_msg: כתובת מייל נחסמה בהצלחה delete: מחיקה dns: @@ -484,16 +485,16 @@ he: instances: availability: description_html: - one: אם משלוח לדומיין נכשל במשך %{count} ימים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. - two: אם משלוח לדומיין נכשל במשך %{count} ימים שונים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. many: אם משלוח לדומיין נכשל במשך %{count} ימים שונים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. + one: אם משלוח לדומיין נכשל במשך %{count} ימים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. other: אם משלוח לדומיין נכשל במשך %{count} ימים שונים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. + two: אם משלוח לדומיין נכשל במשך %{count} ימים שונים ולא מצליח, נסיונות משלוח נוספים לא יעשו אלא אם התקבל משלוח מהדומיין. failure_threshold_reached: סף כשלון הושג ב-%{date}. failures_recorded: - one: נסיון כושל ביום %{count}. - two: נסיונות כושלים ב-%{count} ימים שונים. many: נסיונות כושלים ב-%{count} ימים שונים. + one: נסיון כושל ביום %{count}. other: נסיונות כושלים ב-%{count} ימים שונים. + two: נסיונות כושלים ב-%{count} ימים שונים. no_failures_recorded: לא נמצאו כשלונות. title: זמינות warning: הנסיון האחרון להתחבר לשרת זה לא עלה בהצלחה @@ -536,10 +537,10 @@ he: destroyed_msg: מידע מ-%{domain} נמצא עתה בתור למחיקה מיידית. empty: לא נמצאו דומיינים. known_accounts: - one: "חשבון ידוע %{count}" - two: "%{count} חשבונות ידועים" many: "%{count} חשבונות ידועים" + one: חשבון ידוע %{count} other: "%{count} חשבונות ידועים" + two: "%{count} חשבונות ידועים" moderation: all: הכל limited: מוגבלים @@ -579,11 +580,11 @@ he: no_ip_block_selected: שום כלל IP לא שונה כי שום כלל IP לא נבחר title: כללי IP relationships: - title: "היחסים של %{acct}" + title: היחסים של %{acct} relays: add_new: הוספת ממסר חדש delete: מחיקה - description_html: ממסר פדרטיבי הוא שרת מתווך שמחליף כמויות גדולות של הודעות פומביות בין שרתים שרשומים ומפרסמים אליו. הוא יכול לעזור לשרתים קטנים ובינוניים לגלות תוכן מהפדרציה, מה שאחרת היה דורש ממשתמשים מקומיים לעקוב ידנית אחרי אנשים בשרתים מרוחקים. + description_html: "ממסר פדרטיבי הוא שרת מתווך שמחליף כמויות גדולות של הודעות פומביות בין שרתים שרשומים ומפרסמים אליו. הוא יכול לעזור לשרתים קטנים ובינוניים לגלות תוכן מהפדרציה, מה שאחרת היה דורש ממשתמשים מקומיים לעקוב ידנית אחרי אנשים בשרתים מרוחקים." disable: השבתה disabled: מושבת enable: לאפשר @@ -602,10 +603,10 @@ he: reports: account: notes: - one: "הערה %{count}" - two: "%{count} הערות" many: "%{count} הערות" + one: הערה %{count} other: "%{count} הערות" + two: "%{count} הערות" action_log: ביקורת יומן action_taken_by: פעולה בוצעה ע"י actions: @@ -646,7 +647,7 @@ he: placeholder: תאר/י אילו פעולות ננקטו, או עדכונים קשורים אחרים... title: הערות notes_description_html: צפייה והשארת הערות למנחים אחרים או לעצמך העתידי - processed_msg: 'דיווח %{id} עוּבָּד בהצלחה' + processed_msg: דיווח %{id} עוּבָּד בהצלחה quick_actions_description_html: 'נקוט/י פעולה מהירה או גלול/י למטה לצפייה בתוכן המדווח:' remote_user_placeholder: המשתמש המרוחק מ-%{instance} reopen: פתיחת דו"ח מחדש @@ -673,7 +674,7 @@ he: close_report: 'סימון דיווח #%{id} בתור פתור' close_reports_html: סימון כל הדיווחים נגד @%{acct} בתור פתורים delete_data_html: למחוק את הפרופיל והתוכן של @%{acct} בעוד 30 יום אלא אם תוסר ההגבלה עליהם לפני כן - preview_preamble_html: "שליחת אזהרה אל @%{acct} בזו הלשון:" + preview_preamble_html: 'שליחת אזהרה אל @%{acct} בזו הלשון:' record_strike_html: ציין נקודה שחורה נגד @%{acct} כדי לסייע בשיפוטו בדיווחים עתידיים על חריגות send_email_html: שליחת דואל אזהרה אל @%{acct} warning_placeholder: צידוקים אפשריים נוספים לפעולה המשמעתית. @@ -687,10 +688,10 @@ he: roles: add_new: הוספת תפקיד assigned_users: - one: "משתמש %{count} " - two: "%{count} שני משתמשים" many: "%{count} משתמשים" + one: 'משתמש %{count} ' other: "%{count} משתמשים" + two: "%{count} שני משתמשים" categories: administration: ניהול מערכת devops: DevOps @@ -703,10 +704,10 @@ he: everyone: הרשאות ברירת מחדל everyone_full_description_html: זהו התפקיד הבסיסי שמשפיע על כלל המשתשמשים, אפילו אלו ללא תפקיד. כל התפקידים האחרים יורשים את ההרשאות שלהם ממנו. permissions_count: - one: "הרשאה %{count}" - two: "%{count} הרשאות" many: "%{count} הרשאות" + one: הרשאה %{count} other: "%{count} הרשאות" + two: "%{count} הרשאות" privileges: administrator: מנהל מערכת administrator_description: משתמשים עם הרשאה זו יוכלו לעקוף כל הרשאה @@ -734,7 +735,7 @@ he: manage_rules_description: מאפשר למשתמשים לנהל את כללי השרת manage_settings: נהל הגדרות manage_settings_description: מאפשר למשתמשים לנהל את הגדרות השרת - manage_taxonomies: ניהול טקסונומיות + manage_taxonomies: ניהול טקסונומיות manage_taxonomies_description: מאפשר למשתמשים לסקור תוכן אופנתי (טרנדי) ולעדכן אפשרויות של תגיות. manage_user_access: ניהול גישת משתמשים manage_user_access_description: מאפשר למשתמשים לבטל אימות דו-שלבי של משתמשים אחרים, לשנות את כתובות הדוא"ל שלהם, ולאפס את סיסמתם @@ -745,9 +746,9 @@ he: view_audit_log: צפייה בלוג ביקורת view_audit_log_description: מאפשר למשתשמשים לצפות בהיסטוריה של פעולות מנהלתיות על השרת view_dashboard: הצג לוח מחוונים - view_dashboard_description: אפשר למשתמשים לגשת ללוח המחוונים + view_dashboard_description: אפשר למשתמשים לגשת ללוח המחוונים view_devops: DevOps - view_devops_description: מאפשר למשתמשים לגשת ללוחות המחוונים של Sidekiq ושל pgHero + view_devops_description: מאפשר למשתמשים לגשת ללוחות המחוונים של Sidekiq ושל pgHero title: תפקידים rules: add_new: הוספת כלל @@ -913,10 +914,10 @@ he: publishers: no_publisher_selected: לא בוצעו שינויים במפרסמים שכן לא נבחרו כאלו shared_by_over_week: - one: הופץ על ידי אדם אחד בשבוע האחרון - two: הופץ על ידי %{count} אנשים בשבוע האחרון many: הופץ על ידי %{count} אנשים בשבוע האחרון + one: הופץ על ידי אדם אחד בשבוע האחרון other: הופץ על ידי %{count} אנשים בשבוע האחרון + two: הופץ על ידי %{count} אנשים בשבוע האחרון title: קישוריות חמות usage_comparison: הופץ %{today} פעמים היום, לעומת %{yesterday} אתמול not_allowed_to_trend: לא מורשה להופיע כנושא חם @@ -937,10 +938,10 @@ he: no_status_selected: לא בוצעו שינויים בהודעות חמות שכן לא נבחרו כאלו not_discoverable: המחבר/ת לא בחר/ה לאפשר את גילויים shared_by: - one: הודהד או חובב פעם אחת - two: הודהד וחובב %{friendly_count} פעמים many: הודהד וחובב %{friendly_count} פעמים + one: הודהד או חובב פעם אחת other: הודהד וחובב %{friendly_count} פעמים + two: הודהד וחובב %{friendly_count} פעמים title: הודעות חמות tags: current_score: ציון נוכחי %{score} @@ -963,10 +964,10 @@ he: usable: ניתנת לשימוש usage_comparison: שומשה %{today} פעמים היום, לעומת %{yesterday} אתמול used_by_over_week: - one: הוצגה על ידי משתמש בודד במשך השבוע שעבר - two: הוצגה על ידי %{count} משתמשים במשך השבוע שעבר many: הוצגה על ידי %{count} משתמשים במשך השבוע שעבר + one: הוצגה על ידי משתמש בודד במשך השבוע שעבר other: הוצגה על ידי %{count} משתמשים במשך השבוע שעבר + two: הוצגה על ידי %{count} משתמשים במשך השבוע שעבר title: נושאים חמים trending: נושאים חמים warning_presets: @@ -986,10 +987,10 @@ he: enable: אפשר enabled: פעילים enabled_events: - one: אירוע %{count} מאופשר - two: "%{count} אירועים אופשרו" many: "%{count} אירועים אופשרו" + one: אירוע %{count} מאופשר other: "%{count} אירועים אופשרו" + two: "%{count} אירועים אופשרו" events: אירועים new: Webhook חדש rotate_secret: החלף מפתח @@ -1031,7 +1032,7 @@ he: title: הודעות חמות new_trending_tags: no_approved_tags: אין כרגע שום תגיות חמות מאושרות. - requirements: 'כל אחת מהמועמדות האלו עשויה לעבור את התגית החמה המאושרת מדרגה %{rank}, שהיא כרגע %{lowest_tag_name} עם ציון של %{lowest_tag_score}.' + requirements: כל אחת מהמועמדות האלו עשויה לעבור את התגית החמה המאושרת מדרגה %{rank}, שהיא כרגע %{lowest_tag_name} עם ציון של %{lowest_tag_score}. title: תגיות חמות subject: נושאים חמים חדשים מוכנים לסקירה ב-%{instance} aliases: @@ -1280,20 +1281,20 @@ he: expires_in: פג תוקף ב %{distance} expires_on: פג תוקף ב %{date} keywords: - one: "מילת מפתח %{count}" - two: "%{count} מילות מפתח" many: "%{count} מילות מפתח" + one: מילת מפתח %{count} other: "%{count} מילות מפתח" + two: "%{count} מילות מפתח" statuses: - one: "הודעה %{count}" - two: "%{count} הודעותיים" many: "%{count} הודעות" + one: הודעה %{count} other: "%{count} הודעות" + two: "%{count} הודעותיים" statuses_long: - one: "הודעה %{count} יחידה הוסתרה" - two: "הודעותיים %{count} הוסתרו" many: "%{count} הודעות הוסתרו" + one: הודעה %{count} יחידה הוסתרה other: "%{count} הודעות הוסתרו" + two: הודעותיים %{count} הוסתרו title: מסננים new: save: שמירת מסנן חדש @@ -1308,12 +1309,14 @@ he: generic: all: הכל all_items_on_page_selected_html: - one: "פריט %{count} נבחר בעמוד זה." - two: %{count} פריטים נבחרו בעמוד זה. - many: %{count} פריטים נבחרו בעמוד זה. - other: %{count} פריטים נבחרו בעמוד זה. + many: "%{count} פריטים נבחרו בעמוד זה." + one: פריט %{count} נבחר בעמוד זה. + other: "%{count} פריטים נבחרו בעמוד זה." + two: "%{count} פריטים נבחרו בעמוד זה." all_matching_items_selected_html: - one: "נבחר פריט %{count} שתאם לחיפוש בעמוד זה." + many: נבחרו %{count} פריטים שתאמו לחיפוש בעמוד זה. + one: נבחר פריט %{count} שתאם לחיפוש בעמוד זה. + other: נבחרו %{count} פריטים שתאמו לחיפוש בעמוד זה. two: נבחרו %{count} פריטים שתאמו לחיפוש בעמוד זה. cancel: ביטול changes_saved_msg: השינויים נשמרו בהצלחה! @@ -1325,16 +1328,16 @@ he: order_by: מיין לפי save_changes: שמור שינויים select_all_matching_items: - one: בחר.י פריט %{count} שתאם לחיפוש שלך. - two: בחר. י %{count} פריטים שתאמו לחיפוש שלך. many: בחר.י %{count} פריטים שתאמו לחיפוש שלך. + one: בחר.י פריט %{count} שתאם לחיפוש שלך. other: בחר.י %{count} פריטים שתאמו לחיפוש שלך. + two: בחר. י %{count} פריטים שתאמו לחיפוש שלך. today: היום validation_errors: - one: משהו עדיין לא בסדר! נא לעיין בשגיאה להלן - two: משהו עדיין לא בסדר! נא לעיין ב-%{count} השגיאות להלן many: משהו עדיין לא בסדר! נא לעיין ב-%{count} השגיאות להלן + one: משהו עדיין לא בסדר! נא לעיין בשגיאה להלן other: משהו עדיין לא בסדר! נא לעיין ב-%{count} השגיאות להלן + two: משהו עדיין לא בסדר! נא לעיין ב-%{count} השגיאות להלן imports: errors: empty: קובץ CSV ריק @@ -1405,12 +1408,12 @@ he: '86400': יום אחד expires_in_prompt: לעולם לא generate: צור קישור להזמנה - invited_by: 'הוזמנת ע"י' + invited_by: הוזמנת ע"י max_uses: - one: שימוש אחד - two: "%{count} שימושים" many: "%{count} שימושים" + one: שימוש אחד other: "%{count} שימושים" + two: "%{count} שימושים" max_uses_prompt: ללא הגבלה prompt: צור ושתף קישורים לאחרים על מנת להעניק גישה לשרת זה table: @@ -1493,12 +1496,12 @@ he: notification_mailer: admin: report: - subject: "%{name} שלח/ה דו\"ח" + subject: '%{name} שלח/ה דו"ח' sign_up: subject: "%{name} נרשמו" favourite: body: 'הודעתך חובבה על ידי %{name}:' - subject: "הודעתך חובבה על ידי %{name}" + subject: הודעתך חובבה על ידי %{name} title: חיבוב חדש follow: body: "%{name} עכשיו במעקב אחריך!" @@ -1506,7 +1509,7 @@ he: title: עוקב/ת חדש/ה follow_request: action: ניהול בקשות מעקב - body: "התקבלה בקשת מעקב מ־%{name}" + body: התקבלה בקשת מעקב מ־%{name} subject: 'בקשת מעקב בהמתנה: %{name}' title: בקשת מעקב חדשה mention: @@ -1518,7 +1521,7 @@ he: subject: סקר מאת %{name} הסתיים reblog: body: 'הודעתך הודהדה על ידי %{name}:' - subject: "הודעתך הודהדה על ידי%{name}" + subject: הודעתך הודהדה על ידי%{name} title: הדהוד חדש status: subject: "%{name} בדיוק פרסם" @@ -1690,29 +1693,29 @@ he: statuses: attached: audio: - one: "אודיו %{count}" - two: "%{count} אודיו" many: "%{count} אודיו" + one: אודיו %{count} other: "%{count} אודיו" + two: "%{count} אודיו" description: 'מצורף: %{attached}' image: - one: "תמונה %{count}" - two: "%{count} תמונותיים" many: "%{count} תמונות" + one: תמונה %{count} other: "%{count} תמונות" + two: "%{count} תמונותיים" video: - one: "סרטון %{count}" - two: "%{count} סרטונים" many: "%{count} סרטונים" + one: סרטון %{count} other: "%{count} סרטונים" + two: "%{count} סרטונים" boosted_from_html: הודהד מ-%{acct_link} content_warning: 'אזהרת תוכן: %{warning}' default_language: זהה לשפת ממשק disallowed_hashtags: - one: 'מכיל את התגית האסורה: %{tags}' - two: 'מכיל את התגיות האסורות: %{tags}' many: 'מכיל את התגיות האסורות: %{tags}' + one: 'מכיל את התגית האסורה: %{tags}' other: 'מכיל את התגיות האסורות: %{tags}' + two: 'מכיל את התגיות האסורות: %{tags}' edited_at_html: נערך ב-%{date} errors: in_reply_not_found: נראה שההודעה שאת/ה מנסה להגיב לה לא קיימת. @@ -1725,15 +1728,15 @@ he: reblog: אין אפשרות להצמיד הדהודים poll: total_people: - one: "איש/ה %{count}" - two: "%{count} אנשים" many: "%{count} אנשים" + one: איש/ה %{count} other: "%{count} אנשים" + two: "%{count} אנשים" total_votes: - one: "קול %{count}" - two: "%{count} קולות" many: "%{count} קולות" + one: קול %{count} other: "%{count} קולות" + two: "%{count} קולות" vote: הצבעה show_more: עוד show_newer: הצג חדשים יותר diff --git a/config/locales/hi.yml b/config/locales/hi.yml index f6fdcb41bb7cbb..9b505e5f92fbc0 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -1,3 +1,4 @@ +--- hi: about: contact_missing: सेट नहीं diff --git a/config/locales/hr.yml b/config/locales/hr.yml index a5e08fe5a83f2e..aa7ee760baf755 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -1,3 +1,4 @@ +--- hr: about: 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!' @@ -119,12 +120,12 @@ hr: generate: Generiraj poveznicu za pozivanje invited_by: 'Poziva Vas:' max_uses: - one: 1 korištenje few: "%{count} korištenja" + one: 1 korištenje other: "%{count} korištenja" notification_mailer: favourite: - body: '%{name} je označio/la Vaš status favoritom:' + body: "%{name} je označio/la Vaš status favoritom:" subject: "%{name} je označio/la Vaš status favoritom" follow: body: "%{name} Vas sada prati!" @@ -184,12 +185,12 @@ hr: over_character_limit: prijeđeno je ograničenje od %{max} znakova poll: total_people: - one: "%{count} osoba" few: "%{count} osobe" + one: "%{count} osoba" other: "%{count} ljudi" total_votes: - one: "%{count} glas" few: "%{count} glasa" + one: "%{count} glas" other: "%{count} glasova" vote: Glasaj show_more: Prikaži više diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 6bc0fd989a7e3d..f9eafb9081580d 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1,9 +1,10 @@ +--- hu: about: about_mastodon_html: 'A jövő közösségi hálózata: Hirdetések és céges megfigyelés nélkül, etikus dizájnnal és decentralizációval! Legyél a saját adataid ura a Mastodonnal!' contact_missing: Nincs megadva contact_unavailable: N/A - hosted_on: '%{domain} Mastodon szerver' + hosted_on: "%{domain} Mastodon szerver" title: Névjegy accounts: follow: Követés @@ -24,7 +25,7 @@ hu: admin: account_actions: action: Művelet végrehajtása - title: '%{acct} moderálása' + title: "%{acct} moderálása" account_moderation_notes: create: Új moderációs bejegyzés created_msg: Moderációs bejegyzés létrehozva! @@ -42,12 +43,12 @@ hu: label: E-mail megváltoztatása new_email: Új e-mail submit: E-mail megváltoztatása - title: '%{username} felhasználó e-mail változás' + title: "%{username} felhasználó e-mail változás" change_role: changed_msg: A szerepet sikeresen megváltoztattuk! label: Szerep megváltoztatása no_role: Nincs szerep - title: '%{username} szerepének megváltoztatása' + title: "%{username} szerepének megváltoztatása" confirm: Megerősítés confirmed: Megerősítve confirming: Megerősítés alatt @@ -55,7 +56,7 @@ hu: 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" + destroyed_msg: A %{username} fiók adatai bekerültek a végleges törlése váró sorba disable: Kikapcsolás disable_sign_in_token_auth: Tokenes e-mail hitelesítés letiltása disable_two_factor_authentication: Kétlépcsős hitelesítés kikapcsolása @@ -113,7 +114,7 @@ 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' + redownloaded_msg: "%{username} profilját sikeresen frissítettük az eredetiből" reject: Elutasítás rejected_msg: A %{username} fiók regisztrációs kérelmét sikeresen elutasítottuk remote_suspension_irreversible: A fiók adatait véglegesen törölték. @@ -403,7 +404,7 @@ hu: create: Tiltás létrehozása hint: A domain tiltása nem gátolja meg az új fiókok hozzáadását az abatbázishoz, de visszamenőlegesen és automatikusan aktivál bizonyos moderációs szabályokat ezen fiókok esetében. severity: - desc_html: "A Korlátozás elrejti a domain fiókjaitól származó bejegyzéseket azok elől, akik nem követik őket. A Felfüggesztés eltávolítja a domain fiókjaitól származó összes tartalmat, médiafájlt és profiladatot. Használd a Nincs lehetőséget, ha csak a médiafájlokat akarod elutasítani." + desc_html: A Korlátozás elrejti a domain fiókjaitól származó bejegyzéseket azok elől, akik nem követik őket. A Felfüggesztés eltávolítja a domain fiókjaitól származó összes tartalmat, médiafájlt és profiladatot. Használd a Nincs lehetőséget, ha csak a médiafájlokat akarod elutasítani. noop: Egyik sem silence: Korlátozás suspend: Felfüggesztés @@ -626,7 +627,7 @@ hu: quick_actions_description_html: 'Hozz egy gyors intézkedést, vagy görgess le a bejelentett tartalomhoz:' remote_user_placeholder: 'a távoli felhasználó innen: %{instance}' reopen: Bejelentés újranyitása - report: '#%{id} számú jelentés' + report: "#%{id} számú jelentés" reported_account: Bejelentett fiók reported_by: 'Jelentette:' resolved: Megoldott @@ -644,11 +645,11 @@ hu: actions: delete_html: Sértő bejegyzések eltávolítása mark_as_sensitive_html: Sértő bejegyzések médiatartalmainak érzékenyként történő megjelölése - silence_html: @%{acct} fiók elérésének jelentős korlátozása azzal, hogy ennek profilja és tartalmai csak olyanoknak legyen látható, akik követik vagy manuálisan rákeresnek - suspend_html: @%{acct} felfüggesztése a profil és tartalmainak elérhetetlenné tételével, a fiókkal való interakció ellehetetlenítésével + silence_html: "@%{acct} fiók elérésének jelentős korlátozása azzal, hogy ennek profilja és tartalmai csak olyanoknak legyen látható, akik követik vagy manuálisan rákeresnek" + suspend_html: "@%{acct} felfüggesztése a profil és tartalmainak elérhetetlenné tételével, a fiókkal való interakció ellehetetlenítésével" close_report: 'Bejelentés #%{id} megjelölése megoldottként' - close_reports_html: Minden @%{acct} ellen tett bejelentés megjelölése megoldottként - delete_data_html: @%{acct} profiljának és tartalmainak törlése 30 nap múlva, hacsak addig nem oldják fel a felfüggesztést + close_reports_html: "Minden @%{acct} ellen tett bejelentés megjelölése megoldottként" + delete_data_html: "@%{acct} profiljának és tartalmainak törlése 30 nap múlva, hacsak addig nem oldják fel a felfüggesztést" preview_preamble_html: "@%{acct} a következő tartalommal fog figyelmeztetést kapni:" record_strike_html: Vétség felrovása a @%{acct} fiók ellen, hogy segítsük az eszkalációt a fiók jövőbeni kihágásai esetén send_email_html: Figyelmeztető email küldése @%{acct} fiók részére @@ -673,7 +674,7 @@ hu: special: Speciális delete: Törlés description_html: A felhasználói szerepekkel testreszabhatod, hogy a felhasználóid milyen Mastodon funkciókat és területeket érjenek el. - edit: '''%{name}'' szerep szerkesztése' + edit: "'%{name}' szerep szerkesztése" everyone: Alapértelmezett engedélyek everyone_full_description_html: Ez az alap szerep, mely minden felhasználóra kihat, azokra is, akiknek nincs hozzárendelt szerepük. Minden más szerep ebből örökli az engedélyeit. permissions_count: @@ -886,9 +887,9 @@ hu: no_publisher_selected: Nem változott meg egy közzétevő sem, mert semmi sem volt kiválasztva shared_by_over_week: one: Egy ember osztotta meg a múlt héten - other: '%{count} ember osztotta meg a múlt héten' + other: "%{count} ember osztotta meg a múlt héten" title: Felkapott hivatkozások - usage_comparison: '%{today} alkalommal lett ma megosztva, a tegnapi %{yesterday} alkalomhoz képest' + usage_comparison: "%{today} alkalommal lett ma megosztva, a tegnapi %{yesterday} alkalomhoz képest" not_allowed_to_trend: Nem engedélyezett a trendekben only_allowed: Csak engedélyezett pending_review: Áttekintésre vár @@ -927,12 +928,12 @@ hu: peaked_on_and_decaying: 'Ekkor volt a csúcson: %{date}, most hanyatlik' title: Felkapott hashtagek trendable: Megjelenhet a trendek alatt - trending_rank: '%{rank}. felkapott' + trending_rank: "%{rank}. felkapott" usable: Használható - usage_comparison: '%{today} alkalommal lett ma használva, a tegnapi %{yesterday} alkalomhoz képest' + usage_comparison: "%{today} alkalommal lett ma használva, a tegnapi %{yesterday} alkalomhoz képest" used_by_over_week: one: Egy ember használta a múlt héten - other: '%{count} ember használta a múlt héten' + other: "%{count} ember használta a múlt héten" title: Trendek trending: Felkapott warning_presets: @@ -1281,7 +1282,7 @@ hu: order_by: Rendezés save_changes: Változások mentése select_all_matching_items: - one: '%{count}, a keresésnek megfelelő elem kiválasztása.' + one: "%{count}, a keresésnek megfelelő elem kiválasztása." other: Mind a(z) %{count}, a keresésnek megfelelő elem kiválasztása. today: ma validation_errors: @@ -1461,11 +1462,11 @@ hu: title: Új követési kérelem mention: action: Válasz - body: '%{name} megemlített téged:' - subject: '%{name} megemlített téged' + body: "%{name} megemlített téged:" + subject: "%{name} megemlített téged" title: Új említés poll: - subject: '%{name} szavazása véget ért' + subject: "%{name} szavazása véget ért" reblog: body: 'A bejegyzésedet %{name} megtolta:' subject: "%{name} megtolta a bejegyzésedet" @@ -1825,7 +1826,7 @@ hu: invalid_otp_token: Érvénytelen ellenőrző kód otp_lost_help_html: Ha mindkettőt elvesztetted, kérhetsz segítséget itt %{email} seamless_external_login: Külső szolgáltatáson keresztül jelentkeztél be, így a jelszó és e-mail beállítások nem elérhetőek. - signed_in_as: 'Bejelentkezve mint' + signed_in_as: Bejelentkezve mint verification: extra_instructions_html: Tipp: A hivatkozás a weboldaladon lehet láthatatlan. A fontos rész a rel="me", mely megakadályozza, hogy mások a nevedben lépjenek fel olyan oldalakon, ahol van felhasználók által előállított tartalom. A link tag-et az oldal fejlécében is használhatod az a tag helyett, de a HTML-nek elérhetőnek kell lennie JavaScript futtatása nélkül is. here_is_how: Itt van, hogyan kell diff --git a/config/locales/hy.yml b/config/locales/hy.yml index b9457c5f73e412..f3a6392ff09e0d 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -1,6 +1,7 @@ +--- hy: about: - about_mastodon_html: 'Ապագայի սոցցանցը։ Ոչ մի գովազդ, ոչ մի կորպորատիվ վերահսկողութիւն, էթիկական դիզայն, եւ ապակենտրոնացում։ Մաստադոնում դու ես քո տուեալների տէրը։' + about_mastodon_html: Ապագայի սոցցանցը։ Ոչ մի գովազդ, ոչ մի կորպորատիվ վերահսկողութիւն, էթիկական դիզայն, եւ ապակենտրոնացում։ Մաստադոնում դու ես քո տուեալների տէրը։ contact_missing: Սահմանված չէ contact_unavailable: Ոչինչ չկա hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում @@ -60,7 +61,7 @@ hy: email_status: Էլ․ փոստի կարգավիճակ enable: Միացնել enabled: Միացված է - enabled_msg: '%{username}֊ի հաշիւը բարեյաջող ապասառեցուեց' + enabled_msg: "%{username}֊ի հաշիւը բարեյաջող ապասառեցուեց" followers: Հետևորդներ follows: Հետևողներ header: Վերնագիր @@ -99,7 +100,7 @@ hy: public: Հրապարակային push_subscription_expires: PuSH բաժանորդագրութիւնը սպառուում է redownload: Թարմացնել հաշիւը - redownloaded_msg: '%{username}֊ի հաշիւը սկզբնաղբիւրից բարեյաջող թարմացուեց' + redownloaded_msg: "%{username}֊ի հաշիւը սկզբնաղբիւրից բարեյաջող թարմացուեց" reject: Մերժել rejected_msg: Յաջողութեամբ մերժուեց %{username}֊ի գրանցման յայտը remove_avatar: Հեռացնել աւատարը @@ -135,9 +136,9 @@ hy: undo_sensitized: Ետարկել դիւրազգացութիւնը undo_silenced: Ետարկել լռեցումը undo_suspension: Ետարկել կասեցումը - unsilenced_msg: '%{username}֊ի հաշիւը բարեյաջող դարձաւ անսահմանափակ' + unsilenced_msg: "%{username}֊ի հաշիւը բարեյաջող դարձաւ անսահմանափակ" unsubscribe: Ապաբաժանորդագրուել - unsuspended_msg: '%{username}֊ի հաշիւ բարեյաջող ապակասեցուեց։' + unsuspended_msg: "%{username}֊ի հաշիւ բարեյաջող ապակասեցուեց։" username: Մուտքանուն view_domain: Տեսնել տիրոյթի ամփոփումը warn: Նախազգուշացում @@ -387,7 +388,7 @@ hy: add_new: Աւելացնել կանոն delete: Ջնջել edit: Խմբագրել կանոնը - empty: Սերուերի կանոնները դեռեւս սահմանուած չեն։ + empty: Սերուերի կանոնները դեռեւս սահմանուած չեն։ title: Սերուերի կանոնները settings: about: @@ -438,13 +439,13 @@ hy: delete: Ջնջել admin_mailer: new_report: - subject: 'Նոր բողոք %{instance}ի համար(#%{id})' + subject: Նոր բողոք %{instance}ի համար(#%{id}) new_trends: new_trending_statuses: title: Թրենդային գրառումներ appearance: advanced_web_interface: Սյունակավոր ինտերֆեյս - advanced_web_interface_hint: 'Եթէ ցանկանում ես օգտագործել էկրանիդ ամբողջ լայնքը, ապա ընդլայնուած վեբ ինտերֆեյսով հնարաւոր է էկրանը բաժանել սիւնակների՝ զուգահեռ տեսնելու տարբեր տիպի ինֆորմացիա՝ տեղական հոսքը, ծանուցումները, ֆեդերացված հոսքը, և ցանկացած թվի ցուցակ ու հեշթեգ։' + advanced_web_interface_hint: Եթէ ցանկանում ես օգտագործել էկրանիդ ամբողջ լայնքը, ապա ընդլայնուած վեբ ինտերֆեյսով հնարաւոր է էկրանը բաժանել սիւնակների՝ զուգահեռ տեսնելու տարբեր տիպի ինֆորմացիա՝ տեղական հոսքը, ծանուցումները, ֆեդերացված հոսքը, և ցանկացած թվի ցուցակ ու հեշթեգ։ animations_and_accessibility: Անիմացիաներ եւ հասանելիութիւն confirmation_dialogs: Հաստատման պատուհաններ discovery: Բացայայտում @@ -455,7 +456,7 @@ hy: application_mailer: notification_preferences: Փոխել փոստային կարգաւորումները salutation: "%{name}" - view: 'Նայել․' + view: Նայել․ view_profile: Նայել անձնական էջը view_status: Նայել գրառումը applications: @@ -608,9 +609,9 @@ hy: '86400': 1 օր expires_in_prompt: Երբեք generate: Գեներացնել հրաւէրի յղում - invited_by: 'Ձեզ հրաւիրել է՝' + invited_by: Ձեզ հրաւիրել է՝ max_uses: - one: '%{count} կիրառում' + one: "%{count} կիրառում" other: "%{count} կիրառում" max_uses_prompt: Սահմանափակում չկայ table: @@ -645,7 +646,7 @@ hy: sign_up: subject: "%{name}-ը գրանցուած է" favourite: - body: 'Քո գրառումը հաւանել է %{name}-ը։' + body: Քո գրառումը հաւանել է %{name}-ը։ subject: "%{name} հաւանեց գրառումդ" title: Նոր հաւանում follow: @@ -654,15 +655,15 @@ hy: title: Նոր հետևորդներ follow_request: action: Կառավարել հետեւելու հայցերը - subject: '%{name} ցանկանում է հետեւել ձեզ' + subject: "%{name} ցանկանում է հետեւել ձեզ" title: Նոր հետեւելու հայցեր mention: action: Պատասխանել - body: '%{name} յիշատակել է ձեզ գրառման մէջ՝' + body: "%{name} յիշատակել է ձեզ գրառման մէջ՝" subject: Ձեզ յիշատակել է %{name} title: Նոր յիշատակում reblog: - body: 'Քո գրառումը տարածել է %{name}-ը։' + body: Քո գրառումը տարածել է %{name}-ը։ subject: "%{name} տարածեց գրառումդ" title: Նոր տարածում status: @@ -670,7 +671,7 @@ hy: update: subject: "%{name}-ը փոխել է գրառումը" notifications: - email_events_hint: 'Ընտրիր իրադարձութիւնները, որոնց վերաբերեալ ցանկանում ես ստանալ ծանուցումներ․' + email_events_hint: Ընտրիր իրադարձութիւնները, որոնց վերաբերեալ ցանկանում ես ստանալ ծանուցումներ․ other_settings: Ծանուցումների այլ կարգաւորումներ number: human: @@ -795,10 +796,10 @@ hy: video: one: "%{count} վիդեո" other: "%{count} վիդեո" - content_warning: 'Նախազգուշացում։ %{warning}' + content_warning: Նախազգուշացում։ %{warning} edited_at_html: Խմբագրուած՝ %{date} open_in_web: Բացել վէբում - over_character_limit: '%{max} նիշի սահմանը գերազանցուած է' + over_character_limit: "%{max} նիշի սահմանը գերազանցուած է" poll: total_people: one: "%{count} մարդ" @@ -862,7 +863,7 @@ hy: warning: categories: spam: Սպամ - reason: 'Պատճառ՝' + reason: Պատճառ՝ subject: disable: Քո %{acct} հաշիւը սառեցուել է none: Նախազգուշացուեմ %{acct}-ին @@ -879,7 +880,7 @@ hy: title: Բարի գալուստ նաւամատոյց, %{name} users: invalid_otp_token: Անվաւեր 2F կոդ - signed_in_as: 'Մոտք գործել որպէս․' + signed_in_as: Մոտք գործել որպէս․ verification: verification: Ստուգում webauthn_credentials: diff --git a/config/locales/id.yml b/config/locales/id.yml index 6c580b12c70b91..0e8f2b9b054f28 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1,3 +1,4 @@ +--- id: about: about_mastodon_html: 'Jaringan sosial masa depan: Tanpa iklan, tanpa pemantauan perusahaan, desain etis, dan terdesentralisasi! Miliki data Anda dengan Mastodon!' @@ -53,7 +54,7 @@ id: delete: Hapus data deleted: Terhapus demote: Turunkan - destroyed_msg: "Data %{username} masuk antrean untuk dihapus segera" + destroyed_msg: Data %{username} masuk antrean untuk dihapus segera disable: Nonaktifkan disable_sign_in_token_auth: Nonaktifkan otentikasi token email disable_two_factor_authentication: Nonaktifkan 2FA @@ -435,7 +436,7 @@ id: title: Impor blok domain no_file: Tidak ada file dipilih follow_recommendations: - description_html: "\"Rekomendasi untuk diikuti\" membantu pengguna baru untuk secara cepat menemukan konten yang menarik. Ketika pengguna belum cukup berinteraksi dengan lainnya sehingga belum memunculkan rekomendasi, akun-akun ini akan direkomendasikan. Mereka dihitung ulang secara harian dari campuran akun-akun dengan keterlibatan tertinggi baru-baru ini dan jumlah pengikut lokal tertinggi untuk bahasa tertentu." + description_html: "Rekomendasi untuk diikuti" membantu pengguna baru untuk secara cepat menemukan konten yang menarik. Ketika pengguna belum cukup berinteraksi dengan lainnya sehingga belum memunculkan rekomendasi, akun-akun ini akan direkomendasikan. Mereka dihitung ulang secara harian dari campuran akun-akun dengan keterlibatan tertinggi baru-baru ini dan jumlah pengikut lokal tertinggi untuk bahasa tertentu. language: Untuk bahasa status: Status suppress: Hapus akun yang direkomendasikan untuk diikuti @@ -530,11 +531,11 @@ id: no_ip_block_selected: Tak ada aturan IP yang berubah karena tak ada yang dipilih title: Aturan IP relationships: - title: "Hubungan %{acct}" + title: Hubungan %{acct} relays: add_new: Tambah relai baru delete: Hapus - description_html: Relai gabungan adalah server perantara yang menukarkan kiriman publik dalam jumlah besar antara server yang berlangganan dengan yang menerbitkannya. Ini akan membantu server kecil hingga medium menemukan konten dari fediverse, yang tentu saja mengharuskan pengguna lokal untuk mengikuti orang lain dari server jarak jauh. + description_html: "Relai gabungan adalah server perantara yang menukarkan kiriman publik dalam jumlah besar antara server yang berlangganan dengan yang menerbitkannya. Ini akan membantu server kecil hingga medium menemukan konten dari fediverse, yang tentu saja mengharuskan pengguna lokal untuk mengikuti orang lain dari server jarak jauh." disable: Matikan disabled: Dimatikan enable: Aktifkan @@ -618,7 +619,7 @@ id: special: Khusus delete: Hapus description_html: Dengan peran pengguna, Anda dapat mengubah fungsi dan area Mastodon apa pengguna Anda dapat mengakses. - edit: ערכי את התפקיד של '%{name}' + edit: ערכי את התפקיד של '%{name}' everyone: Izin bawaan everyone_full_description_html: Ini adalah peran dasaran yang memengaruhi semua pengguna, bahkan tanpa yang memiliki sebuah peran yang diberikan. Semua peran lainnya mendapatkan izin dari ini. permissions_count: @@ -869,7 +870,7 @@ id: new_report: body: "%{reporter} telah melaporkan %{target}" body_remote: Seseorang dari %{domain} telah melaporkan %{target} - subject: 'Laporan baru untuk %{instance} (#%{id})' + subject: Laporan baru untuk %{instance} (#%{id}) new_trends: body: 'Item berikut harus ditinjau sebelum ditampilkan secara publik:' new_trending_links: @@ -1112,9 +1113,9 @@ id: generic: all: Semua all_items_on_page_selected_html: - other: %{count} item di laman ini dipilih. + other: "%{count} item di laman ini dipilih." all_matching_items_selected_html: - other: %{count} item yang cocok dengan pencarian Anda dipilih. + other: "%{count} item yang cocok dengan pencarian Anda dipilih." changes_saved_msg: Perubahan berhasil disimpan! copy: Salin delete: Hapus diff --git a/config/locales/io.yml b/config/locales/io.yml index ae642e3fd7c94c..d09dfed70b5ef0 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1,6 +1,7 @@ +--- io: about: - about_mastodon_html: 'Mastodon esas gratuita, apertitkodexa sociala reto. Ol esas sencentra altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la sociala reto tote glate.' + about_mastodon_html: Mastodon esas gratuita, apertitkodexa sociala reto. Ol esas sencentra altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la sociala reto tote glate. contact_missing: Ne fixigita contact_unavailable: Nula hosted_on: Mastodon hostigesas che %{domain} @@ -55,7 +56,7 @@ io: delete: Efacez informi deleted: Efacita demote: Despromocez - destroyed_msg: "Informi di %{username} nun aranjesis por efacesar aparante" + destroyed_msg: Informi di %{username} nun aranjesis por efacesar aparante disable: Frostigez disable_sign_in_token_auth: Desaktivigez retpostofichyurizeso disable_two_factor_authentication: Desaktivigez 2FA @@ -524,7 +525,7 @@ io: relays: add_new: Insertez nova relayo delete: Efacez - description_html: Federatrelayo esas mediatajservilo quo interchanjas multa publika posti inter servili quo abonas e publikigas ibe. Ol povas helpar mikra e mezgranda servili deskovrar kontenajo de fediverso, quale ne bezonas lokala uzanti manuale sequar altra personi en nelokala servili. + description_html: "Federatrelayo esas mediatajservilo quo interchanjas multa publika posti inter servili quo abonas e publikigas ibe. Ol povas helpar mikra e mezgranda servili deskovrar kontenajo de fediverso, quale ne bezonas lokala uzanti manuale sequar altra personi en nelokala servili." disable: Desaktivigez disabled: Desaktivigita enable: Aktivigez @@ -812,7 +813,7 @@ io: webhooks: add_new: Insertez finpunto delete: Efacez - description_html: Rethoko povigas Mastodon sendar samtempoavizi pri selektita eventi a vua sua apliko, por ke vua apliko povas automate kauzigar reakti. + description_html: "Rethoko povigas Mastodon sendar samtempoavizi pri selektita eventi a vua sua apliko, por ke vua apliko povas automate kauzigar reakti." disable: Desaktivigez disabled: Desaktivigita edit: Modifikez finpunto @@ -848,7 +849,7 @@ io: new_report: body: "%{reporter} raportizis %{target}" body_remote: Ulu de %{domain} raportizis %{target} - subject: 'Nova raporto por %{instance} (#%{id})' + subject: Nova raporto por %{instance} (#%{id}) new_trends: body: 'Ca kozi bezonas kontrol ante ol povas montresar publike:' new_trending_links: @@ -1211,7 +1212,7 @@ io: sign_up: subject: "%{name} registris" favourite: - body: '%{name} favoris tua mesajo:' + body: "%{name} favoris tua mesajo:" subject: "%{name} favoris tua mesajo" title: Nova favorato follow: @@ -1221,17 +1222,17 @@ io: follow_request: action: Jerez sequodemandi body: "%{name} demandis sequar tu" - subject: '%{name} demandis sequar tu' + subject: "%{name} demandis sequar tu" title: Nova sequodemando mention: action: Respondez - body: '%{name} mencionis tu en:' - subject: '%{name} mencionis tu' + body: "%{name} mencionis tu en:" + subject: "%{name} mencionis tu" title: Nova menciono poll: subject: Votposto di %{name} finis reblog: - body: '%{name} diskonocigis tua mesajo:' + body: "%{name} diskonocigis tua mesajo:" subject: "%{name} diskonocigis tua mesajo" title: Nova busto status: diff --git a/config/locales/is.yml b/config/locales/is.yml index cfec0967985032..c3608a7359b3ae 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1,3 +1,4 @@ +--- is: about: about_mastodon_html: 'Samfélagsnet framtíðarinnar: Engar auglýsingar, ekkert eftirlit stórfyrirtækja, siðleg hönnun og engin miðstýring! Þú átt þín eigin gögn í Mastodon!' @@ -55,7 +56,7 @@ is: 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" + destroyed_msg: Gögn notandans %{username} eru núna í bið eftir að vera endanlega eytt disable: Gera óvirkt disable_sign_in_token_auth: Gera óvirka auðkenningu með teikni í tölvupósti disable_two_factor_authentication: Gera tveggja-þátta auðkenningu óvirka @@ -557,11 +558,11 @@ is: no_ip_block_selected: Engum IP-reglum var breytt því ekkert var valið title: IP-reglur relationships: - title: "Vensl %{acct}" + title: Vensl %{acct} relays: add_new: Bæta við nýjum endurvarpa delete: Eyða - description_html: Endurvarpi í skýjasambandi er milliþjónn sem skiptist á miklu magni opinberra færslna við aðra þjóna sem eru áskrifendur að honum og birta sín tíst á honum. Þetta getur hjálpað litlum og meðalstórum vefþjónum að uppgötva efni úr skýjasambandinu, sem annars myndi krefjast þess að staðværir notendur fylgist handvirkt með öðru fólki á fjartengdum vefþjónum. + description_html: "Endurvarpi í skýjasambandi er milliþjónn sem skiptist á miklu magni opinberra færslna við aðra þjóna sem eru áskrifendur að honum og birta sín tíst á honum. Þetta getur hjálpað litlum og meðalstórum vefþjónum að uppgötva efni úr skýjasambandinu, sem annars myndi krefjast þess að staðværir notendur fylgist handvirkt með öðru fólki á fjartengdum vefþjónum." disable: Gera óvirkt disabled: Óvirkt enable: Virkja @@ -946,7 +947,7 @@ is: webhooks: add_new: Bæta við endapunkti delete: Eyða - description_html: webhook-vefkrækja gerir Mastodon kleift að ýta rauntíma-tilkynningum um valda atburði til þinna eigin forrita, þannig að þau forrit getir sett sjálfvirk viðbrögð í gang. + description_html: "webhook-vefkrækja gerir Mastodon kleift að ýta rauntíma-tilkynningum um valda atburði til þinna eigin forrita, þannig að þau forrit getir sett sjálfvirk viðbrögð í gang." disable: Gera óvirkt disabled: Óvirkt edit: Breyta endapunkti @@ -1465,13 +1466,13 @@ is: title: Ný beiðni um að fylgjast með mention: action: Svara - body: '%{name} minntist á þig í:' - subject: '%{name} minntist á þig' + body: "%{name} minntist á þig í:" + subject: "%{name} minntist á þig" title: Ný tilvísun poll: subject: Könnun frá %{name} er lokið reblog: - body: '%{name} endurbirti færsluna þína:' + body: "%{name} endurbirti færsluna þína:" subject: "%{name} endurbirti færsluna þína" title: Ný endurbirting status: diff --git a/config/locales/it.yml b/config/locales/it.yml index d2337ac023e514..2438e7e62a19ba 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1,3 +1,4 @@ +--- it: about: about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza azienale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodon!' @@ -55,7 +56,7 @@ it: delete: Elimina i dati deleted: Eliminato demote: Retrocedi - destroyed_msg: "I dati di %{username} sono ora accodati per l'imminente eliminazione" + destroyed_msg: I dati di %{username} sono ora accodati per l'imminente eliminazione disable: Congela disable_sign_in_token_auth: Disabilita l'autenticazione con token via email disable_two_factor_authentication: Disabilita A2F @@ -86,7 +87,7 @@ it: media_attachments: Allegati multimediali memorialize: Trasforma in memoriam memorialized: Commemorato - memorialized_msg: '%{username} trasformato correttamente in un profilo commemorativo' + memorialized_msg: "%{username} trasformato correttamente in un profilo commemorativo" moderation: active: Attivo all: Tutto @@ -557,7 +558,7 @@ it: no_ip_block_selected: Nessuna regola IP è stata modificata poiché nessuna è stata selezionata title: Regole IP relationships: - title: "Relazioni di %{acct}" + title: Relazioni di %{acct} relays: add_new: Aggiungi ripetitore delete: Cancella @@ -1007,7 +1008,9 @@ it: remove: Scollega alias appearance: advanced_web_interface: Interfaccia web avanzata - advanced_web_interface_hint: "Se vuoi utilizzare l'intera larghezza dello schermo, l'interfaccia web avanzata ti consente di configurare varie colonne per mostrare più informazioni allo stesso tempo, secondo le tue preferenze:\nHome, notifiche, timeline federata, qualsiasi numero di liste e etichette." + advanced_web_interface_hint: |- + Se vuoi utilizzare l'intera larghezza dello schermo, l'interfaccia web avanzata ti consente di configurare varie colonne per mostrare più informazioni allo stesso tempo, secondo le tue preferenze: + Home, notifiche, timeline federata, qualsiasi numero di liste e etichette. animations_and_accessibility: Animazioni e accessibilità confirmation_dialogs: Dialoghi di conferma discovery: Scoperta diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 2c24017c366592..a5fbf480a12062 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1,3 +1,4 @@ +--- ja: about: about_mastodon_html: 'Mastodonは、オープンなウェブプロトコルを採用した、自由でオープンソースなソーシャルネットワークです。電子メールのような分散型の仕組みを採っています。' @@ -312,6 +313,8 @@ ja: updated_msg: お知らせを更新しました critical_update_pending: 重要な更新が保留中です custom_emojis: + aliases: エイリアス名 + aliases_hint: 絵文字ピッカー内で検索する際、ショートコードだけでなくエイリアス名でも検索できます。「,」(カンマ)で区切ることで、複数指定が可能です。 assign_category: カテゴリーを割り当て by_domain: ドメイン copied_msg: 絵文字のコピーをローカルに作成しました @@ -324,11 +327,17 @@ ja: disable: 無効化 disabled: 無効 disabled_msg: 絵文字を無効化しました + domain: ドメイン + edit: + label: 編集 + title: カスタム絵文字の編集 emoji: 絵文字 enable: 有効化 enabled: 有効 enabled_msg: 絵文字を有効化しました image_hint: '%{size}までのPNGまたはGIF画像を利用できます' + license: ライセンス + license_hint: カスタム絵文字のライセンス情報を設定します。ただしライセンス情報の連合に対応していないサーバーも多く、Misskeyもローカル絵文字のライセンス情報には対応しますが他のサーバーのライセンス情報は参照しません。ライセンスは無視される場合があることを考慮してください。 list: 表示 listed: 表示 new: @@ -345,6 +354,7 @@ ja: update_failed_msg: 絵文字を更新できませんでした updated_msg: 絵文字の更新に成功しました! upload: アップロード + visible_in_picker: 絵文字ピッカーで表示 dashboard: active_users: アクティブユーザー interactions: 交流 @@ -392,12 +402,17 @@ ja: created_msg: ドメインブロック処理を完了しました destroyed_msg: ドメインブロックを外しました detect_invalid_subscription: 不正な購読を行うサーバーとしてマークする - detect_invalid_subscription_hint: Misskey、Calckeyなどは購読機能で未フォローユーザーの未収載投稿を拾います。これをマークしたサーバーは、ユーザーが任意で配送を拒否できます。停止とは無関係です + detect_invalid_subscription_hint: 未フォローユーザーの未収載投稿が自由に購読・検索できるサーバーとしてマークします。Misskeyサーバーはこのチェックに関係なく、自動で制限が有効とみなされます。各ユーザーはそれぞれのプライバシー追加設定でMisskeyサーバーへの配送制限を有効にすることで、これらのサーバーへローカル公開・未収載投稿を鍵付きで配信できるようになります。停止とは無関係です domain: ドメイン edit: ドメインブロックを編集 existing_domain_block: あなたは既に%{name}さんに厳しい制限を課しています。 existing_domain_block_html: 既に%{name}に対して、より厳しい制限を課しています。先にその制限を解除する必要があります。 export: エクスポート + headers: + disagreement: 政治的な意見の相違からの敏感な投稿の保護 + harassment: 嫌がらせまたはスパム + invalid_privacy: プライバシーが守られていない + mastodon_default: 本家Mastodonの設定項目 hidden: 非公開にする hidden_hint: 公開することで当サーバーの安全が脅かされる場合、このドメインブロックを非公開にすることができます。 hidden_anonymous: 未ログインユーザーに非公開にする @@ -633,8 +648,12 @@ ja: ng_words: hide_local_users_for_anonymous: ログインしていない状態でローカルユーザーの投稿をタイムラインから取得できないようにする keywords: 投稿できないキーワード + keywords_for_stranger_mention: フォローしていないアカウントへのメンションで利用できないキーワード + keywords_for_stranger_mention_hint: フォローしていないアカウントへのメンションにのみ適用されます。現状は外部サーバーから来た投稿のみに適用されます keywords_hint: 行を「?」で始めると、正規表現が使えます post_hash_tags_max: 投稿に設定可能なハッシュタグの最大数 + stranger_mention_from_local_ng: フォローしていないアカウントへのメンションのNGワードを、ローカルユーザーによる投稿にも適用する + stranger_mention_from_local_ng_hint: サーバーの登録が承認制でない場合、あなたのサーバーにもスパムが入り込む可能性があります test_error: NGワードのテストに失敗しました。正規表現のミスが含まれているかもしれません title: NGワードとスパム relationships: @@ -1866,11 +1885,11 @@ ja: private: フォロワー限定 private_long: フォロワーにのみ表示されます public: 公開 - public_long: 誰でも見ることができ、かつ連合・ローカルタイムラインに表示されます + public_long: 誰でも見ることができ、かつ公開タイムラインに表示されます public_unlisted: ローカル公開 - public_unlisted_long: 誰でも見ることができますが、連合タイムラインには表示されません - unlisted: 未収載 - unlisted_long: 誰でも見ることができますが、連合・ローカルタイムラインには表示されません + public_unlisted_long: 誰でも見ることができますが、他のサーバーの連合タイムラインには表示されません + unlisted: 非収載 + unlisted_long: 誰でも見ることができますが、公開タイムラインには表示されません unset: 設定なし unset_long: デフォルトの挙動に従います statuses_cleanup: diff --git a/config/locales/ka.yml b/config/locales/ka.yml index ae3d7b87ea1639..d67f432688e3a3 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -1,6 +1,7 @@ +--- ka: about: - about_mastodon_html: 'მასტოდონი ღია ვებ პროტოკოლებზე და უფასო, ღია პროგრამებზე დაფუძნებული სოციალური ქსელია. ის ისეთი დეცენტრალიზებულია როგორც ელ-ფოსტა.' + about_mastodon_html: მასტოდონი ღია ვებ პროტოკოლებზე და უფასო, ღია პროგრამებზე დაფუძნებული სოციალური ქსელია. ის ისეთი დეცენტრალიზებულია როგორც ელ-ფოსტა. contact_missing: არაა დაყენებული contact_unavailable: მიუწ. hosted_on: მასტოდონს მასპინძლობს %{domain} @@ -152,7 +153,7 @@ ka: title: მოწვევები relays: add_new: ახელი რილეი - description_html: ფედერაციის რილეი შუამავალი სერვერია, რომელიც ცვლის საჯარო ტუტების დიდ ოდენობას იმ სერვერებს შორის, რომლებიც გამოიწერენ და მასზე გამოაქვეყნებენ. ეს მცირე და საშუალო სერვერებს ეხმარება აღმოაჩინონ კონტენტი ფედივერსისგან, რომელიც სხვა შემთხვევაში მომხარებლებს აიძულებდა მექნიკურ რეჟიმში გაჰყოლოდნენ ხალხს სხვა დისტანციურ სერვერებზე. + description_html: "ფედერაციის რილეი შუამავალი სერვერია, რომელიც ცვლის საჯარო ტუტების დიდ ოდენობას იმ სერვერებს შორის, რომლებიც გამოიწერენ და მასზე გამოაქვეყნებენ. ეს მცირე და საშუალო სერვერებს ეხმარება აღმოაჩინონ კონტენტი ფედივერსისგან, რომელიც სხვა შემთხვევაში მომხარებლებს აიძულებდა მექნიკურ რეჟიმში გაჰყოლოდნენ ხალხს სხვა დისტანციურ სერვერებზე." enable_hint: ამოქმდების შემდეგ, თქვენი სერვერი გამოიწერს ყველა საჯარო ტუტს ამ რილეიდან და დაიწყებს სერვერის ღია ტუტების იქ გაგზავნას. inbox_url: რილეი ურლ setup: რილეი კავშირის დამყარება @@ -200,7 +201,7 @@ ka: new_report: body: "%{reporter}-მა დაარეპორტა %{target}" body_remote: ვიღაცამ %{domain}-იდან დაარეპორტა %{target} - subject: 'ახალი რეპორტი %{instance} (#%{id})-ზე' + subject: ახალი რეპორტი %{instance} (#%{id})-ზე application_mailer: notification_preferences: შეცვალეთ ელ-ფოსტის პრეფერნსიები settings: 'შეცვალეთ ელ-ფოსტის პრეფერენსიები: %{link}' diff --git a/config/locales/kab.yml b/config/locales/kab.yml index bd9461d6482f22..eeb8f16ae4037a 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -1,3 +1,4 @@ +--- kab: about: about_mastodon_html: 'Azeṭṭa ametti n uzekka: Ulac deg-s asussen, ulac taɛessast n tsuddiwin fell-ak, yebna ɣef leqder d ttrebga, daɣen d akeslemmas! Akked Maṣṭudun, isefka-inek ad qimen inek!' @@ -334,7 +335,7 @@ kab: no_ip_block_selected: Ula yiwen n ulugen n IP ur yettwabeddel acku ula yiwen ur yettwafren title: Ilugan n IP relationships: - title: "Assaɣen n %{acct}" + title: Assaɣen n %{acct} relays: add_new: Rnu anmegli amaynut delete: Kkes @@ -429,7 +430,7 @@ kab: admin_mailer: new_report: body: "%{reporter} yettwazen ɣef %{target}" - subject: 'Aneqqis amaynut i %{instance} (#%{id})' + subject: Aneqqis amaynut i %{instance} (#%{id}) appearance: discovery: Asnirem localization: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 4e52c45344b099..98fe37f2966865 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -1,6 +1,7 @@ +--- kk: about: - about_mastodon_html: 'Mastodon - әлеуметтік желіге негізделген, тегін және веб протоколды, ашық кодты бағдарлама. Ол email сияқты орталығы жоқ құрылым.' + about_mastodon_html: Mastodon - әлеуметтік желіге негізделген, тегін және веб протоколды, ашық кодты бағдарлама. Ол email сияқты орталығы жоқ құрылым. contact_missing: Бапталмаған contact_unavailable: Белгісіз hosted_on: Mastodon орнатылған %{domain} доменінде @@ -302,11 +303,11 @@ kk: admin_mailer: new_pending_account: body: Жаңа есептік жазба туралы мәліметтер төменде берілген. Бұл қолданбаны мақұлдауыңызға немесе қабылдамауыңызға болады. - subject: 'Жаңа аккаунт күтілуде %{instance} (#%{username})' + subject: Жаңа аккаунт күтілуде %{instance} (#%{username}) new_report: body: "%{reporter} has rеported %{target}" body_remote: Someone from %{domain} has rеported %{target} - subject: 'New rеport for %{instance} (#%{id})' + subject: New rеport for %{instance} (#%{id}) aliases: add_new: Алиас қосу created_msg: Жаңа алиас сәтті жасалды. Енді сіз ескі аккаунттан көшіруді бастай аласыз. @@ -560,9 +561,9 @@ kk: duration_too_short: тым аз екен expired: Сауалнама уақыты аяқталған invalid_choice: Таңдалған жауап енді жоқ екен - over_character_limit: '%{max} таңбадан артық болмайды' + over_character_limit: "%{max} таңбадан артық болмайды" too_few_options: бір жауаптан көп болуы керек - too_many_options: '%{max} жауаптан көп болмайды' + too_many_options: "%{max} жауаптан көп болмайды" preferences: other: Басқа posting_defaults: Пост жазу негіздері @@ -663,7 +664,7 @@ kk: one: 'рұқсат етілмеген хэштег: %{tags}' other: 'рұқсат етілмеген хэштегтер: %{tags}' open_in_web: Вебте ашу - over_character_limit: '%{max} максимум таңбадан асып кетті' + over_character_limit: "%{max} максимум таңбадан асып кетті" pin_errors: limit: Жабыстырылатын жазба саны максимумынан асты ownership: Біреудің жазбасы жабыстырылмайды @@ -710,9 +711,9 @@ kk: warning: subject: disable: Аккаунтыңыз %{acct} уақытша тоқтатылды - none: '%{acct} ескертуі' - silence: '%{acct} аккаунтыңыз шектеулі' - suspend: '%{acct} аккаунт тоқтатылды' + none: "%{acct} ескертуі" + silence: "%{acct} аккаунтыңыз шектеулі" + suspend: "%{acct} аккаунт тоқтатылды" title: disable: Аккаунт қатырылды none: Ескерту diff --git a/config/locales/ko.yml b/config/locales/ko.yml index b6cbb46cb46f52..720d65731bf0cc 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1,9 +1,10 @@ +--- ko: about: about_mastodon_html: '미래의 소셜 네트워크: 광고 없음, 기업 감시 없음, 윤리적 설계, 탈중앙화! 여러분만의 데이터를 Mastodon으로 소유하세요!' contact_missing: 미설정 contact_unavailable: 없음 - hosted_on: '%{domain}에서 호스팅 되는 마스토돈' + hosted_on: "%{domain}에서 호스팅 되는 마스토돈" title: 정보 accounts: follow: 팔로우 @@ -12,7 +13,7 @@ ko: following: 팔로잉 instance_actor_flash: 이 계정은 서버 자신을 나타내기 위한 가상의 계정이며 개인 사용자가 아닙니다. 이 계정은 연합을 위해 사용되며 정지되지 않아야 합니다. last_active: 최근 활동 - link_verified_on: '%{date}에 이 링크의 소유가 확인되었습니다' + link_verified_on: "%{date}에 이 링크의 소유가 확인되었습니다" nothing_here: 아무 것도 없습니다! pin_errors: following: 추천하려는 사람을 팔로우 하고 있어야 합니다 @@ -22,7 +23,7 @@ ko: admin: account_actions: action: 조치 취하기 - title: '%{acct} 계정에 중재 취하기' + title: "%{acct} 계정에 중재 취하기" account_moderation_notes: create: 참고사항 남기기 created_msg: 중재 참고사항을 만들었습니다! @@ -66,7 +67,7 @@ ko: enable: 활성화 enable_sign_in_token_auth: 이메일 토큰 인증 활성화 enabled: 활성 - enabled_msg: '%{username}의 계정을 성공적으로 얼리기 해제하였습니다' + enabled_msg: "%{username}의 계정을 성공적으로 얼리기 해제하였습니다" followers: 팔로워 follows: 팔로우 header: 헤더 @@ -299,7 +300,7 @@ ko: title: 새 공지사항 publish: 게시 published_msg: 공지사항이 성공적으로 발행되었습니다! - scheduled_for: '%{time}에 예약됨' + scheduled_for: "%{time}에 예약됨" scheduled_msg: 공지의 발행이 예약되었습니다! title: 공지사항 unpublish: 게시 취소 @@ -323,7 +324,7 @@ ko: enable: 활성화 enabled: 활성화됨 enabled_msg: 성공적으로 에모지를 활성화하였습니다 - image_hint: '%{size} 이하의 PNG 또는 GIF' + image_hint: "%{size} 이하의 PNG 또는 GIF" list: 목록에 추가 listed: 목록에 실림 new: @@ -396,7 +397,9 @@ ko: create: 차단 추가 hint: 도메인 차단은 내부 데이터베이스에 계정이 생성되는 것까지는 막을 수 없지만, 그 도메인에서 생성된 계정에 자동적으로 특정한 중재 규칙을 적용하게 할 수 있습니다. severity: - desc_html: "제한은 이 도메인에 있는 계정을 팔로우 하지 않는 사람들에게 게시물을 보이지 않게 설정합니다.\n정지는 이 도메인에 있는 계정의 모든 콘텐츠, 미디어, 프로필 데이터를 삭제합니다. 미디어 파일만 거부하고 싶다면 없음을 사용하세요." + desc_html: |- + 제한은 이 도메인에 있는 계정을 팔로우 하지 않는 사람들에게 게시물을 보이지 않게 설정합니다. + 정지는 이 도메인에 있는 계정의 모든 콘텐츠, 미디어, 프로필 데이터를 삭제합니다. 미디어 파일만 거부하고 싶다면 없음을 사용하세요. noop: 없음 silence: 제한 suspend: 정지 @@ -418,7 +421,7 @@ ko: email_domain_blocks: add_new: 새로 추가하기 attempts_over_week: - other: "지난 주 동안 %{count}건의 가입 시도가 있었습니다" + other: 지난 주 동안 %{count}건의 가입 시도가 있었습니다 created_msg: 이메일 도메인 차단 규칙을 생성했습니다 delete: 삭제하기 dns: @@ -432,7 +435,7 @@ ko: no_email_domain_block_selected: 아무 것도 선택 되지 않아 어떤 이메일 도메인 차단도 변경되지 않았습니다 not_permitted: 허용하지 않음 resolved_dns_records_hint_html: 도메인 네임은 다음의 MX 도메인으로 연결되어 있으며, 이메일을 받는데 필수적입니다. MX 도메인을 차단하면 같은 MX 도메인을 사용하는 어떤 이메일이라도 가입할 수 없게 되며, 보여지는 도메인이 다르더라도 적용됩니다. 주요 이메일 제공자를 차단하지 않도록 조심하세요. - resolved_through_html: '%{domain}을 통해 리졸빙됨' + resolved_through_html: "%{domain}을 통해 리졸빙됨" title: Email 도메인 차단 export_domain_allows: new: @@ -443,7 +446,7 @@ ko: description_html: 도메인 차단 목록을 불러오려고 합니다. 조심스럽게 검토하시고, 특히나 이 목록을 스스로 작성하지 않았을 경우엔 더 면밀히 검토하세요. existing_relationships_warning: 이미 존재하는 팔로우 관계 private_comment_description_html: '어디서 불러온 것인지 추적을 원활하게 하기 위해서, 불러온 차단들은 다음과 같은 비공개 주석과 함께 생성될 것입니다: %{comment}' - private_comment_template: '%{date}에 %{source}에서 불러옴' + private_comment_template: "%{date}에 %{source}에서 불러옴" title: 도메인 차단 불러오기 invalid_domain_block: '한 개 이상의 도메인 차단이 생략되었습니다. 에러는 다음과 같습니다: %{error}' new: @@ -461,7 +464,7 @@ ko: availability: description_html: other: 도메인에 대한 전달이 성공 없이 %{count}일 실패한다면, 이후의 전달 시도는 해당 도메인에서 전달이 오기 전까지는 만들어지지 않습니다. - failure_threshold_reached: '%{date}에 실패 임계점에 도달했습니다.' + failure_threshold_reached: "%{date}에 실패 임계점에 도달했습니다." failures_recorded: other: 실패한 전달 시도 총 %{count}일. no_failures_recorded: 실패 기록이 없습니다. @@ -503,7 +506,7 @@ ko: delivery_available: 전송 가능 delivery_error_days: 전달 에러가 난 날짜들 delivery_error_hint: 만약 %{count}일 동안 전달이 불가능하다면, 자동으로 전달 불가로 표시됩니다. - destroyed_msg: '%{domain}의 데이터는 곧바로 지워지도록 대기열에 들어갔습니다.' + destroyed_msg: "%{domain}의 데이터는 곧바로 지워지도록 대기열에 들어갔습니다." empty: 도메인이 하나도 없습니다. known_accounts: other: "%{count} 개의 알려진 계정" @@ -550,7 +553,7 @@ ko: relays: add_new: 릴레이 추가 delete: 삭제 - description_html: 연합 릴레이는 서버들 사이에서 많은 양의 공개 게시물을 구독하고 중개하는 서버입니다. 이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다, 이제 로컬 사용자들이 다른 서버의 사용자들을 수동으로 팔로우 하지 않아도 됩니다. + description_html: "연합 릴레이는 서버들 사이에서 많은 양의 공개 게시물을 구독하고 중개하는 서버입니다. 이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다, 이제 로컬 사용자들이 다른 서버의 사용자들을 수동으로 팔로우 하지 않아도 됩니다." disable: 비활성화 disabled: 비활성화 됨 enable: 활성화 @@ -593,7 +596,7 @@ ko: none: 없음 comment_description_html: '더 많은 정보를 위해, %{name} 님이 작성했습니다:' confirm: 확정 - confirm_action: '@%{acct}에 취할 중재 결정에 대한 확인' + confirm_action: "@%{acct}에 취할 중재 결정에 대한 확인" created_at: 신고 시각 delete_and_resolve: 게시물 삭제 forwarded: 전달됨 @@ -625,21 +628,21 @@ ko: statuses_description_html: 문제가 되는 콘텐츠는 신고된 계정에게 인용되어 전달됩니다 summary: action_preambles: - delete_html: '@%{acct}의 게시물 중 일부를 지우려고 합니다. 이것은 아래의 행동이 수반됩니다:' - mark_as_sensitive_html: '@%{acct}의 게시물 중 일부를 민감함으로 표시 합니다. 이것은 아래의 행동이 수반됩니다:' - silence_html: '@%{acct}의 계정을 제한하려고 합니다. 이것은 아래의 행동이 수반됩니다:' - suspend_html: '@%{acct}의 계정을 정지하려고 합니다. 이것은 아래의 행동이 수반됩니다:' + delete_html: "@%{acct}의 게시물 중 일부를 지우려고 합니다. 이것은 아래의 행동이 수반됩니다:" + mark_as_sensitive_html: "@%{acct}의 게시물 중 일부를 민감함으로 표시 합니다. 이것은 아래의 행동이 수반됩니다:" + silence_html: "@%{acct}의 계정을 제한하려고 합니다. 이것은 아래의 행동이 수반됩니다:" + suspend_html: "@%{acct}의 계정을 정지하려고 합니다. 이것은 아래의 행동이 수반됩니다:" actions: delete_html: 문제가 되는 게시물을 지웁니다 mark_as_sensitive_html: 문제가 되는 게시물의 미디어를 민감함으로 표시합니다 silence_html: 이미 팔로우하고 있는 사람에게만 프로필을 보이게 하고 나머지 사람들에게는 수동으로 확인을 해야만 볼 수 있게 하여 @%{acct}의 도달 범위를 엄격하게 제한합니다. - suspend_html: @%{acct}의 계정을 정지합니다. 프로필과 콘텐츠가 사용 불가능하게 됩니다. + suspend_html: "@%{acct}의 계정을 정지합니다. 프로필과 콘텐츠가 사용 불가능하게 됩니다." close_report: '신고 #%{id}를 해결됨으로 표시합니다' - close_reports_html: @%{acct}에 대한 모든 신고를 해결됨으로 처리합니다 - delete_data_html: @%{acct}의 프로필과 콘텐츠를 30일의 유예기간 이후에 삭제합니다 + close_reports_html: "@%{acct}에 대한 모든 신고를 해결됨으로 처리합니다" + delete_data_html: "@%{acct}의 프로필과 콘텐츠를 30일의 유예기간 이후에 삭제합니다" preview_preamble_html: "@%{acct}는 다음 내용의 경고를 받게 됩니다:" record_strike_html: 향후 규칙위반에 대한 참고사항이 될 수 있도록 @%{acct}에 대한 처벌기록을 남깁니다 - send_email_html: @%{acct}에게 경고 메일을 보냅니다 + send_email_html: "@%{acct}에게 경고 메일을 보냅니다" warning_placeholder: 중재 결정에 대한 추가적인 이유. target_origin: 신고된 계정의 소속 title: 신고 @@ -659,8 +662,8 @@ ko: moderation: 중재 special: 특수 delete: 삭제 - description_html: 사용자 역할을 통해, 사용자들이 마스토돈의 어떤 기능과 영역에 접근할 수 있을지 설정할 수 있습니다. - edit: '%{name} 역할 수정' + description_html: "사용자 역할을 통해, 사용자들이 마스토돈의 어떤 기능과 영역에 접근할 수 있을지 설정할 수 있습니다." + edit: "%{name} 역할 수정" everyone: 기본 권한 everyone_full_description_html: 이것은 모든 사용자에게 적용될 기본 역할이며, 역할을 지정하지 않아도 적용됩니다. 다른 모든 역할들은 여기에서 권한을 상속합니다. permissions_count: @@ -878,9 +881,9 @@ ko: only_allowed: 허용된 것만 pending_review: 심사 대기 preview_card_providers: - allowed: 이 발행처의 링크는 유행록에 실릴 수 있음 + allowed: 이 발행처의 링크는 유행 목록에 실릴 수 있음 description_html: 당신의 서버에서 많은 링크가 공유되고 있는 도메인들입니다. 링크의 도메인이 승인되기 전까지는 링크들은 공개적으로 트렌드에 게시되지 않습니다. 당신의 승인(또는 거절)은 서브도메인까지 확장됩니다. - rejected: 이 발행처의 링크는 유행록에 실리지 않음 + rejected: 이 발행처의 링크는 유행 목록에 실리지 않음 title: 발행처 rejected: 거부됨 statuses: @@ -892,7 +895,7 @@ ko: no_status_selected: 아무 것도 선택 되지 않아 어떤 유행중인 게시물도 바뀌지 않았습니다 not_discoverable: 작성자가 발견되기를 원치 않습니다 shared_by: - other: '%{friendly_count} 번 공유되고 마음에 들어했습니다' + other: "%{friendly_count} 번 공유되고 마음에 들어했습니다" title: 유행하는 게시물 tags: current_score: 현재 %{score}점 @@ -903,15 +906,15 @@ ko: tag_servers_measure: 다른 서버들 tag_uses_measure: 총 사용 description_html: 현재 서버에서 볼 수 있는 게시물에서 많이 공유되고 있는 해시태그들입니다. 현재 사람들이 무슨 이야기를 하고 있는지 사용자들이 파악할 수 있도록 도움이 됩니다. 승인하지 않는 한 해시태그는 공개적으로 게시되지 않습니다. - listable: 추천될 수 있습니다 + listable: 추천될 수 있음 no_tag_selected: 아무 것도 선택 되지 않아 어떤 태그도 바뀌지 않았습니다 - not_listable: 추천될 수 없습니다 - not_trendable: 유행 목록에 나타나지 않습니다 - not_usable: 사용불가 - peaked_on_and_decaying: '%{date}에 고점을 찍고, 떨어지고 있습니다' + not_listable: 추천하지 않음 + not_trendable: 유행 목록에 나타내지 않음 + not_usable: 이용할 수 없음 + peaked_on_and_decaying: "%{date}에 고점을 찍고, 떨어지고 있습니다" title: 유행하는 해시태그 - trendable: 유행 목록에 나타날 수 있습니다 - trending_rank: '#%{rank}위로 유행 중' + trendable: 유행 목록에 나타날 수 있음 + trending_rank: "#%{rank}위로 유행 중" usable: 사용 가능 usage_comparison: 오늘은 %{today}회 쓰였고, 어제는 %{yesterday}회 쓰임 used_by_over_week: @@ -927,7 +930,7 @@ ko: webhooks: add_new: 엔드포인트 추가 delete: 삭제 - description_html: 웹훅은 선택한 이벤트에 대해 마스토돈이 실시간 알림을 각자의 응용프로그램에게 보냄으로서, 당신의 응용프로그램이 자동으로 반응을 할 수 있도록 만듧니다. + description_html: "웹훅은 선택한 이벤트에 대해 마스토돈이 실시간 알림을 각자의 응용프로그램에게 보냄으로서, 당신의 응용프로그램이 자동으로 반응을 할 수 있도록 만듧니다." disable: 비활성화 disabled: 비활성화됨 edit: 엔드포인트 수정 @@ -961,7 +964,7 @@ ko: subject: "%{instance}에 대해 긴급 업데이트가 있습니다!" new_pending_account: body: 아래에 새 계정에 대한 상세정보가 있습니다. 이 가입을 승인하거나 거부할 수 있습니다. - subject: '%{instance}의 새 계정(%{username})에 대한 심사가 대기중입니다' + subject: "%{instance}의 새 계정(%{username})에 대한 심사가 대기중입니다" new_report: body: "%{reporter} 님이 %{target}를 신고했습니다" body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다" @@ -1070,12 +1073,12 @@ ko: new_confirmation_instructions_sent: 확인 링크가 담긴 이메일이 몇 분 안에 도착할것입니다! title: 수신함 확인하기 sign_in: - preamble_html: %{domain}의 계정 정보를 이용해 로그인 하세요. 만약 내 계정이 다른 서버에 존재한다면, 여기서는 로그인 할 수 없습니다. - title: '%{domain}에 로그인' + preamble_html: "%{domain}의 계정 정보를 이용해 로그인 하세요. 만약 내 계정이 다른 서버에 존재한다면, 여기서는 로그인 할 수 없습니다." + title: "%{domain}에 로그인" sign_up: - manual_review: '%{domain} 가입은 중재자들의 심사를 거쳐 진행됩니다. 가입 절차를 원활하게 하기 위해, 간단한 자기소개와 왜 %{domain}에 계정을 만들려고 하는지 적어주세요.' + manual_review: "%{domain} 가입은 중재자들의 심사를 거쳐 진행됩니다. 가입 절차를 원활하게 하기 위해, 간단한 자기소개와 왜 %{domain}에 계정을 만들려고 하는지 적어주세요." preamble: 이 마스토돈 서버의 계정을 통해, 네트워크에 속한 다른 사람들을, 그들이 어떤 서버에 있든 팔로우 할 수 있습니다. - title: '%{domain}에 가입하기 위한 정보들을 입력하세요.' + title: "%{domain}에 가입하기 위한 정보들을 입력하세요." status: account_status: 계정 상태 confirming: 이메일 확인 과정이 완료되기를 기다리는 중. @@ -1182,7 +1185,7 @@ ko: noscript_html: 마스토돈을 사용하기 위해서는 자바스크립트를 켜 주십시오. 아니면 네이티브 앱 중 하나를 사용할 수 있습니다. existing_username_validator: not_found: 해당 사용자명에 대한 로컬 유저를 찾을 수 없습니다 - not_found_multiple: '%{usernames}를 찾을 수 없습니다' + not_found_multiple: "%{usernames}를 찾을 수 없습니다" exports: archive_takeout: date: 날짜 @@ -1220,11 +1223,11 @@ ko: deprecated_api_multiple_keywords: 이 파라미터들은 하나를 초과하는 필터 키워드에 적용되기 때문에 이 응용프로그램에서 수정될 수 없습니다. 더 최신의 응용프로그램이나 웹 인터페이스를 사용하세요. invalid_context: 컨텍스트가 없거나 올바르지 않습니다 index: - contexts: '%{contexts}에 대한 필터' + contexts: "%{contexts}에 대한 필터" delete: 삭제 empty: 필터가 없습니다. - expires_in: '%{distance} 안에 만료됨' - expires_on: '%{date}에 만료됨' + expires_in: "%{distance} 안에 만료됨" + expires_on: "%{date}에 만료됨" keywords: other: "%{count}개의 키워드" statuses: @@ -1431,7 +1434,7 @@ ko: follow_request: action: 팔로우 요청 관리 body: "%{name} 님이 내게 팔로우 요청을 보냈습니다" - subject: '%{name} 님이 보낸 팔로우 요청' + subject: "%{name} 님이 보낸 팔로우 요청" title: 새 팔로우 요청 mention: action: 답장 @@ -1537,8 +1540,8 @@ ko: rss: content_warning: '열람 주의:' descriptions: - account: '@%{acct}의 공개 게시물' - tag: '#%{hashtag} 해시태그가 붙은 공개 게시물' + account: "@%{acct}의 공개 게시물" + tag: "#%{hashtag} 해시태그가 붙은 공개 게시물" scheduled_statuses: over_daily_limit: 그 날짜에 대한 %{limit}개의 예약 게시물 제한을 초과합니다 over_total_limit: 예약 게시물 제한 %{limit}을 초과합니다 @@ -1620,12 +1623,12 @@ ko: other: "%{count}장의 이미지" video: other: "%{count}개의 영상" - boosted_from_html: '%{acct_link}의 글을 부스트' + boosted_from_html: "%{acct_link}의 글을 부스트" content_warning: '열람 주의: %{warning}' default_language: 화면 표시 언어와 동일하게 disallowed_hashtags: other: '허용되지 않은 해시태그를 포함하고 있습니다: %{tags}' - edited_at_html: '%{date}에 편집됨' + edited_at_html: "%{date}에 편집됨" errors: in_reply_not_found: 답장하려는 게시물이 존재하지 않습니다. open_in_web: Web으로 열기 @@ -1764,9 +1767,9 @@ ko: subject: delete_statuses: 당신의 계정 %{acct}에서 작성한 게시물이 삭제되었습니다 disable: 당신의 계정 %{acct}가 동결 되었습니다 - mark_statuses_as_sensitive: '%{acct}로 작성한 당신의 게시물은 민감한 것으로 표시되었습니다' - none: '%{acct}에게의 경고' - sensitive: '%{acct}로 작성되는 당신의 게시물은 이제부터 민감한 것으로 표시됩니다' + mark_statuses_as_sensitive: "%{acct}로 작성한 당신의 게시물은 민감한 것으로 표시되었습니다" + none: "%{acct}에게의 경고" + sensitive: "%{acct}로 작성되는 당신의 게시물은 이제부터 민감한 것으로 표시됩니다" silence: 당신의 계정 %{acct}가 제한 되었습니다 suspend: 당신의 계정 %{acct}가 정지 되었습니다 title: @@ -1808,7 +1811,7 @@ ko: success: 보안 키가 성공적으로 추가되었습니다. delete: 삭제 delete_confirmation: 정말로 이 보안 키를 삭제하시겠습니까? - description_html: 보안 키 인증을 활성화 하면, 로그인 시 보안 키 중 하나가 필요합니다. + description_html: "보안 키 인증을 활성화 하면, 로그인 시 보안 키 중 하나가 필요합니다." destroy: error: 보안 키를 삭제하는 데 문제가 발생했습니다. 다시 시도해보십시오. success: 보안 키가 성공적으로 삭제되었습니다. @@ -1817,4 +1820,4 @@ ko: not_enabled: 아직 WebAuthn을 활성화 하지 않았습니다. not_supported: 이 브라우저는 보안 키를 지원하지 않습니다 otp_required: 보안 키를 사용하기 위해서는 2단계 인증을 먼저 활성화 해 주세요 - registered_on: '%{date} 에 등록됨' + registered_on: "%{date} 에 등록됨" diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 36167193b96259..58c1885dfe47eb 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1,3 +1,4 @@ +--- ku: about: about_mastodon_html: 'Tora civakî ya pêşerojê: Ne reklam, ne şopandina şîrketan, dîzayna nenavendî! Bi Mastodon re bibe xwediyê daneyên xwe!' @@ -55,7 +56,7 @@ ku: delete: Daneyan jê bibe deleted: Hate jêbirin demote: Ast daxistin - destroyed_msg: "Daneyên %{username} niha ket rêzê da yê demek nêz da were jêbirin" + destroyed_msg: Daneyên %{username} niha ket rêzê da yê demek nêz da were jêbirin disable: Qerisî ye disable_sign_in_token_auth: E-name ya rastandina token neçalak bike disable_two_factor_authentication: 2FA ne çalak bike @@ -86,7 +87,7 @@ ku: media_attachments: Pêvekên medya memorialize: Vegerîne bîranînê memorialized: Bû bîranîn - memorialized_msg: '%{username} bi serkeftî veguherî ajimêra bîranînê' + memorialized_msg: "%{username} bi serkeftî veguherî ajimêra bîranînê" moderation: active: Çalak all: Hemû @@ -172,7 +173,7 @@ ku: change_role_user: Rola bikarhêner biguherîne confirm_user: Bikarhêner bipejirîne create_account_warning: Hişyariyekê çê bike - create_announcement: Daxûyaniyekê çê bike + create_announcement: Daxûyaniyekê çê bike create_canonical_email_block: Astengkirina e-nameyê biafirîne create_custom_emoji: Emojiyên kesanekirî çê bike create_domain_allow: Navpera ku destûr standiye peyda bike @@ -389,7 +390,9 @@ ku: create: Astengkirinekê çê bike hint: Astengkirina navperê pêşî li çêkirina têketinên ajimêra yên di danegehê de negire, lê wê bi riyeke vegerandî û xweberî rêbazên kontrolkirinê li ser van ajimêran pêk bîne. severity: - desc_html: "Sînor wê şandiyan ji ajimêrên li ser vê navperê re ji her kesê ku wan naşopîne re nedîtî bike. Rawestandin wê hemû naverok, medya û daneyên profîlê yên ajimêrên vê navperê ji rajekarê te rake. Ku tu tenê dixwazî pelên medyayê nepejirînî\nTu kes bi kar bîne." + desc_html: |- + Sînor wê şandiyan ji ajimêrên li ser vê navperê re ji her kesê ku wan naşopîne re nedîtî bike. Rawestandin wê hemû naverok, medya û daneyên profîlê yên ajimêrên vê navperê ji rajekarê te rake. Ku tu tenê dixwazî pelên medyayê nepejirînî + Tu kes bi kar bîne. noop: Ne yek silence: Sînor suspend: Dur bike @@ -540,11 +543,11 @@ ku: no_ip_block_selected: Ji ber ku tu ajimêr nehat hilbijartin tu rêzika IPyê nehate guhertin title: Rêbazên IP relationships: - title: "Têkiliyên %{acct}" + title: Têkiliyên %{acct} relays: add_new: Guhêrkerê nû tevlê bike delete: Jê bibe - description_html: Guhêrkerê giştî rajekareke navberkar e ku hejmareke mezin ji şandiyan di navbera rajekaran ku jê re dibin endam û weşanê dikin diguherîne. Ew dikare ji rajekarên piçûk û navîn re bibe alîkar ku naveroka ji fediverse ê bibîne, ku bi rengeke din pêdivî dike ku bikarhênerên herêmî bi desta li dû kesên din ên li rajekarên ji dûr be bişopînin. + description_html: "Guhêrkerê giştî rajekareke navberkar e ku hejmareke mezin ji şandiyan di navbera rajekaran ku jê re dibin endam û weşanê dikin diguherîne. Ew dikare ji rajekarên piçûk û navîn re bibe alîkar ku naveroka ji fediverse ê bibîne, ku bi rengeke din pêdivî dike ku bikarhênerên herêmî bi desta li dû kesên din ên li rajekarên ji dûr be bişopînin." disable: Neçalak bike disabled: Neçalakkirî enable: Çalak bike @@ -602,7 +605,7 @@ ku: quick_actions_description_html: 'Ji bo dîtina naveroka ragihandî çalakiyeke bilez bavêje an jî li jêr bigere:' remote_user_placeholder: bikarhênerê ji dûr ve ji %{instance} reopen: Ragihandina ji nû ve veke - report: '@%{id} Ragihîne' + report: "@%{id} Ragihîne" reported_account: Ajimêra ragihandî reported_by: Ragihandî ji aliyê resolved: Çareserkirî @@ -814,7 +817,7 @@ ku: not_discoverable: Nivîskar nejilbijartiye ji bo ku were kifşkirin shared_by: one: Yek carî parvekirî an bijartî - other: '%{friendly_count} carên parvekirî û bijartî' + other: "%{friendly_count} carên parvekirî û bijartî" title: Şandiyên rojevê tags: current_score: Encama niha %{score} @@ -835,7 +838,7 @@ ku: trendable: Dikare di bin rojevan de xuya bibe trending_rank: 'Rojev #%{rank}' usable: Dikare were bikaranîn - usage_comparison: '%{today} car îro hate bikaranîn, li gorî %{yesterday} duh' + usage_comparison: "%{today} car îro hate bikaranîn, li gorî %{yesterday} duh" used_by_over_week: one: Di nava hefteya dawî de ji aliyê kesekî ve hatiye bikaranîn other: Di nava hefteya dawî de ji %{count} kes ve hatiye bikaranîn @@ -850,7 +853,7 @@ ku: webhooks: add_new: Xala dawîbûnê tevlî bike delete: Jê bibe - description_html: çengeleke tevnê dihêle ku Mastodon agahdariyên dema-rastîn ên derbarê çalakiyên hilbijartî de bisepîne ser sepana te, bi vî awayî sepana te dikare reaksiyonan bi awayekî bixweber nîşan bide. + description_html: "çengeleke tevnê dihêle ku Mastodon agahdariyên dema-rastîn ên derbarê çalakiyên hilbijartî de bisepîne ser sepana te, bi vî awayî sepana te dikare reaksiyonan bi awayekî bixweber nîşan bide." disable: Neçalak bike disabled: Neçalakkirî edit: Xala dawîbûnê serrast bike @@ -882,11 +885,11 @@ ku: subject: "%{username} li ser %{instance} îtiraz li biryareke çavdêriyê dike" new_pending_account: body: Zanyariyênn ajimêra nû li jêr in. Tu dikarî vê serîlêdanê bipejirîne an pûç bike. - subject: (%{username}) ajimêrê nû ji bo vekolandina li ser %{instance} + subject: "(%{username}) ajimêrê nû ji bo vekolandina li ser %{instance}" new_report: body: "%{reporter} ji %{target} ê ragihand" body_remote: Kesekî bi navê %{domain} ji %{target} ê ragihand - subject: 'Ragihandinek nû ji bo %{instance} (#%{id})' + subject: Ragihandinek nû ji bo %{instance} (#%{id}) new_trends: body: 'Tiştên jêrîn berî ku ew bi gelemperî werin xuyakirin divê werin nirxandin:' new_trending_links: @@ -1069,7 +1072,7 @@ ku: noscript_html: Ji bo ku tu sepanaa Mastodon a tevnê bi kar bîne, jkx JavaScript-ê çalak bike. Wekî din, yek ji sepanên xwemalî ji bo Mastodon ji bo platforma xwe biceribîne. existing_username_validator: not_found: nikaribû bikarhênerek herêmî bi wê navê bikarhêner bibîne - not_found_multiple: '%{usernames} nehat dîtin' + not_found_multiple: "%{usernames} nehat dîtin" exports: archive_takeout: date: Dîrok @@ -1133,10 +1136,10 @@ ku: generic: all: Hemû all_items_on_page_selected_html: - one: "Berhemê %{count} li ser vê rûpelê hatiye hilbijartin." + one: Berhemê %{count} li ser vê rûpelê hatiye hilbijartin. other: Hemû berhemên %{count} li ser vê rûpelê hatine hilbijartin. all_matching_items_selected_html: - one: "Berhemê %{count} ku bi lêgerîna te re lihevhatî ye hatiye hilbijartin." + one: Berhemê %{count} ku bi lêgerîna te re lihevhatî ye hatiye hilbijartin. other: Hemû berhemên %{count} ku bi lêgerîna te re lihevhatî ne hatine hilbijartin. changes_saved_msg: Guhertin bi serkeftî tomar bû! copy: Jê bigire @@ -1264,7 +1267,7 @@ ku: follow_request: action: Daxwazên şopandinê bi rê ve bibe body: "%{name} daxwaza şopandina te kir" - subject: 'Şopîner li bendê ye:%{name}' + subject: Şopîner li bendê ye:%{name} title: Daxwazeke şopandinê ya nû mention: action: Bersivê bide diff --git a/config/locales/kw.yml b/config/locales/kw.yml index 12f4803413d415..b7731ca1a30e01 100644 --- a/config/locales/kw.yml +++ b/config/locales/kw.yml @@ -1,3 +1,4 @@ +--- kw: admin: accounts: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 79f408c9c4e2b0..cc00ed7e05a22d 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1,6 +1,7 @@ +--- lt: about: - about_mastodon_html: 'Mastodon, tai socialinis tinklas pagrįstas atviro kodo programavimu, ir atvirais web protokolais. Visiškai nemokamas. Ši sistema decantrilizuota kaip jūsų elektroninis paštas.' + about_mastodon_html: Mastodon, tai socialinis tinklas pagrįstas atviro kodo programavimu, ir atvirais web protokolais. Visiškai nemokamas. Ši sistema decantrilizuota kaip jūsų elektroninis paštas. contact_missing: Nenustatyta contact_unavailable: Nėra duomenų hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu @@ -189,7 +190,7 @@ lt: relays: add_new: Pridėti naują pamainą delete: Ištrinti - description_html: Federacijos perjungėjas tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius. + description_html: "Federacijos perjungėjas tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius." disable: Išjungti disabled: Išjungtas enable: Įjungti @@ -248,7 +249,7 @@ lt: new_report: body: "%{reporter} parašė skundą apie %{target}" body_remote: Kažkas iš %{domain} parašė skundą apie %{target} - subject: 'Naujas skundas %{instance} (#%{id})' + subject: Naujas skundas %{instance} (#%{id}) application_mailer: notification_preferences: Keisti el pašto parinktis settings: 'Keisti el pašto parinktis: %{link}' @@ -435,7 +436,7 @@ lt: development: Plėtojimas edit_profile: Keisti profilį export: Informacijos eksportas - featured_tags: 'Rodomi saitažodžiai(#)' + featured_tags: Rodomi saitažodžiai(#) import: Importuoti migrate: Paskyros migracija notifications: Pranešimai diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 9a09e496f53499..28a1a33dcb6540 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1,3 +1,4 @@ +--- lv: about: about_mastodon_html: 'Nākotnes sociālais tīkls: bez reklāmām, bez korporatīvās uzraudzības, ētisks dizains un decentralizācija! Pārvaldi savus datus ar Mastodon!' @@ -8,9 +9,9 @@ lv: accounts: follow: Sekot followers: - zero: Sekotāju one: Sekotājs other: Sekotāji + zero: Sekotāju following: Seko instance_actor_flash: Šis konts ir virtuāls aktieris, ko izmanto, lai pārstāvētu pašu serveri, nevis atsevišķu lietotāju. To izmanto federācijas nolūkos, un to nevajadzētu apturēt. last_active: pēdējā aktivitāte @@ -19,9 +20,9 @@ lv: pin_errors: following: Tev jau ir jāseko personai, kuru vēlies apstiprināt posts: - zero: Ziņu one: Ziņa other: Ziņas + zero: Ziņu posts_tab_heading: Ziņas admin: account_actions: @@ -57,7 +58,7 @@ lv: delete: Dzēst datus deleted: Dzēsts demote: Pazemināt - destroyed_msg: "Lietotāja %{username} dati tagad ievietoti rindā, lai tos nekavējoties izdzēstu" + destroyed_msg: Lietotāja %{username} dati tagad ievietoti rindā, lai tos nekavējoties izdzēstu disable: Iesaldēt disable_sign_in_token_auth: Atspējot autentifikāciju ar e-pasta marķieri disable_two_factor_authentication: Atspējot 2FA @@ -88,7 +89,7 @@ lv: media_attachments: Multivides pielikumi memorialize: Pārvērst atmiņās memorialized: Piemiņa saglabāta - memorialized_msg: '%{username} veiksmīgi pārvērsts par piemiņas kontu' + memorialized_msg: "%{username} veiksmīgi pārvērsts par piemiņas kontu" moderation: active: Aktīvie all: Visi @@ -108,9 +109,9 @@ lv: perform_full_suspension: Apturēt previous_strikes: Iepriekšējie brīdinājumi previous_strikes_description_html: - zero: Šim kontam ir %{count} brīdinājumi. one: Šim kontam ir viens brīdinājums. other: Šim kontam ir %{count} brīdinājumi. + zero: Šim kontam ir %{count} brīdinājumi. promote: Veicināt protocol: Protokols public: Publisks @@ -353,21 +354,21 @@ lv: new_users: jauni lietotāji opened_reports: atvērtie ziņojumi pending_appeals_html: - zero: "%{count} izskatāmo apelāciju" one: "%{count} izskatāmā apelācija" other: "%{count} izskatāmās apelācijas" + zero: "%{count} izskatāmo apelāciju" pending_reports_html: - zero: "%{count}ziņojumi gaida" one: "%{count}ziņojums gaida" other: "%{count}ziņojumi gaida" + zero: "%{count}ziņojumi gaida" pending_tags_html: - zero: "%{count}tēmturi gaida" one: "%{count}tēmturis gaida" other: "%{count}tēmturi gaida" + zero: "%{count}tēmturi gaida" pending_users_html: - zero: "%{count}lietotāji gaida" one: "%{count}lietotājs gaida" other: "%{count}lietotāji gaida" + zero: "%{count}lietotāji gaida" resolved_reports: ziņojumi atrisināti software: Programmatūra sources: Reģistrēšanās avoti @@ -432,9 +433,9 @@ lv: email_domain_blocks: add_new: Pievienot jaunu attempts_over_week: - zero: "%{count} mēģinājumu pagājušajā nedēļā" one: "%{count} mēģinājums pagājušajā nedēļā" other: "%{count} reģistrēšanās mēģinājumi pagājušajā nedēļā" + zero: "%{count} mēģinājumu pagājušajā nedēļā" created_msg: E-pasta domēns ir veiksmīgi bloķēts delete: Dzēst dns: @@ -476,14 +477,14 @@ lv: instances: availability: description_html: - zero: Ja piegāde uz domēnu neizdodas %{count} dažādas dienās, un tas neizdodas, turpmāki piegādes mēģinājumi netiks veikti, ja vien netiks saņemta piegāde no domēna. one: Ja piegāde uz domēnu neizdodas %{count} dienu bez panākumiem, turpmāki piegādes mēģinājumi netiks veikti, ja vien netiks saņemta piegāde no domēna. other: Ja piegāde uz domēnu neizdodas %{count} dažādas dienās, un tas neizdodas, turpmāki piegādes mēģinājumi netiks veikti, ja vien netiks saņemta piegāde no domēna. + zero: Ja piegāde uz domēnu neizdodas %{count} dažādas dienās, un tas neizdodas, turpmāki piegādes mēģinājumi netiks veikti, ja vien netiks saņemta piegāde no domēna. failure_threshold_reached: Kļūmju slieksnis sasniegts %{date}. failures_recorded: - zero: Neizdevušies mēģinājumi %{count} dienās. one: Neizdevies mēģinājums %{count} dienā. other: Neizdevušies mēģinājumi %{count} dienās. + zero: Neizdevušies mēģinājumi %{count} dienās. no_failures_recorded: Nav reģistrētu kļūdu. title: Pieejamība warning: Pēdējais mēģinājums izveidot savienojumu ar šo serveri ir bijis neveiksmīgs @@ -526,9 +527,9 @@ lv: destroyed_msg: Dati no %{domain} tagad ir gaidīšanas rindā, lai tos drīzumā dzēstu. empty: Domēni nav atrasti. known_accounts: - zero: "%{count} zināmu kontu" one: "%{count} zināms konts" other: "%{count} zināmi konti" + zero: "%{count} zināmu kontu" moderation: all: Visas limited: Ierobežotās @@ -572,7 +573,7 @@ lv: relays: add_new: Pievienot jaunu releju delete: Dzēst - description_html: Federācijas relejs ir starpniekserveris, kas apmainās ar lielu publisko ziņu apjomu starp serveriem, kas to abonē un publicē. Tas var palīdzēt maziem un vidējiem serveriem atklāt saturu no federācijas, pretējā gadījumā vietējiem lietotājiem manuāli jāseko citām personām attālos serveros. + description_html: "Federācijas relejs ir starpniekserveris, kas apmainās ar lielu publisko ziņu apjomu starp serveriem, kas to abonē un publicē. Tas var palīdzēt maziem un vidējiem serveriem atklāt saturu no federācijas, pretējā gadījumā vietējiem lietotājiem manuāli jāseko citām personām attālos serveros." disable: Atspējot disabled: Atspējots enable: Iespējot @@ -591,9 +592,9 @@ lv: reports: account: notes: - zero: "%{count} piezīmju" one: "%{count} piezīme" other: "%{count} piezīmes" + zero: "%{count} piezīmju" action_log: Auditācijas pieraksti action_taken_by: Veiktā darbība actions: @@ -675,9 +676,9 @@ lv: roles: add_new: Pievienot lomu assigned_users: - zero: "%{count} lietotāju" one: "%{count} lietotājs" other: "%{count} lietotāji" + zero: "%{count} lietotāju" categories: administration: Administrēšana devops: DevOps @@ -690,9 +691,9 @@ lv: everyone: Noklusētās atļaujas everyone_full_description_html: Šī ir pamata loma, kas ietekmē visus lietotājus, pat tos, kuriem nav piešķirta loma. Visas pārējās lomas manto atļaujas no šīs. permissions_count: - zero: "%{count} atļauju" one: "%{count} atļauja" other: "%{count} atļaujas" + zero: "%{count} atļauju" privileges: administrator: Administrators administrator_description: Lietotāji ar šo atļauju apies visas atļaujas @@ -899,9 +900,9 @@ lv: publishers: no_publisher_selected: Neviens publicētājs netika mainīts, jo neviens netika atlasīts shared_by_over_week: - zero: Pēdējās nedēļas laikā kopīgoja %{count} personas one: Pēdējās nedēļas laikā kopīgoja viena persona other: Pēdējās nedēļas laikā kopīgoja %{count} personas + zero: Pēdējās nedēļas laikā kopīgoja %{count} personas title: Populārākās saites usage_comparison: Šodien kopīgots %{today} reizes, salīdzinot ar %{yesterday} vakar not_allowed_to_trend: Popularizešana nav atļauta @@ -922,9 +923,9 @@ lv: no_status_selected: Neviena populāra ziņa netika mainīta, jo neviena netika atlasīta not_discoverable: Autors nav izvēlējies būt atklājams shared_by: - zero: '%{friendly_count} reižu kopīgots vai pievienots izlasei' one: Vienreiz kopīgots vai pievienots izlasei other: Kopīgots un pievienots izlasei %{friendly_count} reizes + zero: "%{friendly_count} reižu kopīgots vai pievienots izlasei" title: Populārākās ziņas tags: current_score: Pašreizējais rezultāts %{score} @@ -947,9 +948,9 @@ lv: usable: Var tikt lietots usage_comparison: Šodien lietots %{today} reizes, salīdzinot ar %{yesterday} vakar used_by_over_week: - zero: Pēdējās nedēļas laikā izmantoja %{count} personas one: Pēdējās nedēļas laikā izmantoja viens cilvēks other: Pēdējās nedēļas laikā izmantoja %{count} personas + zero: Pēdējās nedēļas laikā izmantoja %{count} personas title: Tendences trending: Populārākie warning_presets: @@ -969,9 +970,9 @@ lv: enable: Iespējot enabled: Aktīvie enabled_events: - zero: "%{count} iespējotu notikumu" one: 1 iespējots notikums other: "%{count} iespējoti notikumi" + zero: "%{count} iespējotu notikumu" events: Notikumi new: Jauna tīmekļa aizķere rotate_secret: Pagriezt noslēpumu @@ -1262,17 +1263,17 @@ lv: expires_in: Beidzas %{distance} expires_on: Beidzas %{date} keywords: - zero: "%{count} atslēgvārdu" one: "%{count} atsēgvārds" other: "%{count} atslēgvārdi" + zero: "%{count} atslēgvārdu" statuses: - zero: "%{count} ziņu" one: "%{count} ziņa" other: "%{count} ziņas" + zero: "%{count} ziņu" statuses_long: + one: paslēpta %{count} individuālā ziņa + other: slēptas %{count} individuālās ziņas zero: "%{count} paslēptu ziņu" - one: "paslēpta %{count} individuālā ziņa" - other: "slēptas %{count} individuālās ziņas" title: Filtri new: save: Saglabāt jauno filtru @@ -1287,10 +1288,12 @@ lv: generic: all: Visi all_items_on_page_selected_html: - zero: Šajā lapā ir atlasīts %{count} vienumu. - one: "Šajā lapā ir atlasīts %{count} vienums." + one: Šajā lapā ir atlasīts %{count} vienums. other: Šajā lapā ir atlasīti %{count} vienumi. + zero: Šajā lapā ir atlasīts %{count} vienumu. all_matching_items_selected_html: + one: Atlasīts %{count} vienums, kas atbilst tavam meklēšanas vaicājumam. + other: Atlasīti visi %{count} vienumi, kas atbilst tavam meklēšanas vaicājumam. zero: Atlasīts %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. cancel: Atcelt changes_saved_msg: Izmaiņas veiksmīgi saglabātas! @@ -1302,14 +1305,14 @@ lv: order_by: Kārtot pēc save_changes: Saglabāt izmaiņas select_all_matching_items: - zero: Atlasi %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. one: Atlasi %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. other: Atlasi visus %{count} vienumus, kas atbilst tavam meklēšanas vaicājumam. + zero: Atlasi %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. today: šodien validation_errors: - zero: '%{count} kļūdu' one: Kaut kas vēl nav īsti kārtībā! Lūdzu, pārskati zemāk norādīto kļūdu other: Kaut kas vēl nav īsti kārtībā! Lūdzu, pārskati %{count} kļūdas zemāk + zero: "%{count} kļūdu" imports: errors: empty: Tukšs CSV fails @@ -1382,9 +1385,9 @@ lv: generate: Ģenerēt uzaicinājuma saiti invited_by: 'Tevi uzaicināja:' max_uses: - zero: "%{count} lietojumu" one: 1 lietojums other: "%{count} lietojumi" + zero: "%{count} lietojumu" max_uses_prompt: Nav ierobežojuma prompt: Izveido un kopīgo saites ar citiem, lai piešķirtu piekļuvi šim serverim table: @@ -1489,7 +1492,7 @@ lv: subject: Tevi pieminēja %{name} title: Jauna pieminēšana poll: - subject: '%{name} aptauja ir beigusies' + subject: "%{name} aptauja ir beigusies" reblog: body: 'Tavu ziņu izcēla %{name}:' subject: "%{name} izcēla tavu ziņu" @@ -1664,25 +1667,25 @@ lv: statuses: attached: audio: - zero: "%{count} audio" one: "%{count} audio" other: "%{count} audio" + zero: "%{count} audio" description: 'Pievienots: %{attached}' image: - zero: "%{count} attēlu" one: "%{count} attēls" other: "%{count} attēli" + zero: "%{count} attēlu" video: - zero: "%{count} video" one: "%{count} video" other: "%{count} video" + zero: "%{count} video" boosted_from_html: Izcēla %{acct_link} content_warning: 'Satura brīdinājums: %{warning}' default_language: Tāda, kā saskarnes valoda disallowed_hashtags: - zero: 'neatļauti tēmturi: %{tags}' one: 'saturēja neatļautu tēmturi: %{tags}' other: 'saturēja neatļautus tēmturus: %{tags}' + zero: 'neatļauti tēmturi: %{tags}' edited_at_html: Rediģēts %{date} errors: in_reply_not_found: Šķiet, ka ziņa, uz kuru tu mēģini atbildēt, nepastāv. @@ -1695,13 +1698,13 @@ lv: reblog: Izceltu ierakstu nevar piespraust poll: total_people: - zero: "%{count} personu" one: "%{count} persona" other: "%{count} personas" + zero: "%{count} personu" total_votes: - zero: "%{count} balsu" one: "%{count} balss" other: "%{count} balsis" + zero: "%{count} balsu" vote: Balsu skaits show_more: Rādīt vairāk show_newer: Nekad nerādīt @@ -1817,7 +1820,7 @@ lv: explanation: delete_statuses: Tika konstatēts, ka dažas no tavām ziņām pārkāpj vienu vai vairākas kopienas vadlīnijas, un rezultātā %{instance} moderatori tās noņēma. disable: Tu vairs nevari izmantot savu kontu, taču tavs profils un citi dati paliek neskarti. Tu vari pieprasīt savu datu dublējumu, mainīt konta iestatījumus vai dzēst kontu. - mark_statuses_as_sensitive: '%{instance} moderatori dažas no tavām ziņām ir atzīmējušas kā sensitīvas. Tas nozīmē, ka cilvēkiem būs jāpieskaras ziņās esošajai multividei, pirms tiek parādīts priekšskatījums. Tu arī pats vari atzīmēt mediju kā sensitīvu, kad tādu publicēsi turpmāk.' + mark_statuses_as_sensitive: "%{instance} moderatori dažas no tavām ziņām ir atzīmējušas kā sensitīvas. Tas nozīmē, ka cilvēkiem būs jāpieskaras ziņās esošajai multividei, pirms tiek parādīts priekšskatījums. Tu arī pats vari atzīmēt mediju kā sensitīvu, kad tādu publicēsi turpmāk." sensitive: No šī brīža visi augšupielādētie multivides faili tiks atzīmēti kā sensitīvi un paslēpti aiz klikšķa brīdinājuma. silence: Tu joprojām vari izmantot savu kontu, taču tikai tie cilvēki, kuri jau tev seko, redzēs tavas ziņas šajā serverī, un tev var tikt liegtas dažādas atklāšanas funkcijas. Tomēr citi joprojām var tev manuāli sekot. suspend: Tu vairs nevari izmantot savu kontu, un tavs profils un citi dati vairs nav pieejami. Tu joprojām vari pieteikties, lai pieprasītu savu datu dublēšanu, līdz dati tiks pilnībā noņemti aptuveni 30 dienu laikā, taču mēs saglabāsim dažus pamata datus, lai neļautu tev izvairīties no apturēšanas. diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 3af19f79b14414..5f8de529872ced 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -1,3 +1,4 @@ +--- ml: about: contact_missing: സജ്ജമാക്കിയിട്ടില്ല @@ -21,7 +22,7 @@ ml: label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത് submit: ഇലക്ട്രോണിക് കത്ത് മേൽവിലാസം മാറ്റുക - title: '%{username} ന്റെ ഇലക്ട്രോണിക് കത്ത് മേൽവിലാസം മാറ്റുക' + title: "%{username} ന്റെ ഇലക്ട്രോണിക് കത്ത് മേൽവിലാസം മാറ്റുക" confirm: നിജപ്പെടുത്തുക confirmed: നിജപ്പെടുത്തി confirming: സ്ഥിരീകരിക്കുന്നു diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 0f6e5522274e48..6d1ededbc4ab14 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1,3 +1,4 @@ +--- ms: about: about_mastodon_html: 'Rangkaian sosial masa hadapan: Tiada iklan, tiada pengawasan korporat, reka bentuk beretika, dan desentralisasi! Miliki data anda dengan Mastodon!' @@ -53,7 +54,7 @@ ms: delete: Padam data deleted: Dipadamkan demote: Turunkan taraf - destroyed_msg: "Data %{username} kini menunggu giliran untuk dipadam sebentar lagi" + destroyed_msg: Data %{username} kini menunggu giliran untuk dipadam sebentar lagi disable: Bekukan disable_sign_in_token_auth: Nyahdaya pengesahan token e-mel disable_two_factor_authentication: Lumpuhkan 2FA @@ -545,11 +546,11 @@ ms: no_ip_block_selected: Tiada peraturan alamat IP diubah kerana tiada yang dipilih title: Peraturan alamat IP relationships: - title: "Hubungan %{acct}" + title: Hubungan %{acct} relays: add_new: Tambah geganti baharu delete: Padam - description_html: Geganti persekutuan ialah pelayan perantara yang saling menukar hantaran awam dalam jumlah yang banyak di antara pelayan yang melanggan ia dan menerbitkan kepadanya. Ia boleh bantu pelayan kecil dan sederhana untuk menemui kandungan daripada dunia persekutuan, yang mana jika tidak digunakan akan memerlukan pengguna tempatan mengikut orang lain di pelayan jarak jauh secara manual. + description_html: "Geganti persekutuan ialah pelayan perantara yang saling menukar hantaran awam dalam jumlah yang banyak di antara pelayan yang melanggan ia dan menerbitkan kepadanya. Ia boleh bantu pelayan kecil dan sederhana untuk menemui kandungan daripada dunia persekutuan, yang mana jika tidak digunakan akan memerlukan pengguna tempatan mengikut orang lain di pelayan jarak jauh secara manual." disable: Nyahdayakan disabled: Dinyahdayakan enable: Dayakan diff --git a/config/locales/my.yml b/config/locales/my.yml index 319122ccf640db..8e01e82afe60e7 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1,9 +1,10 @@ +--- my: about: - about_mastodon_html: 'အနာဂတ်အတွက်လူမှုကွန်ရက် - ကြော်ငြာများမရှိခြင်း၊ အဖွဲ့သားများအား စောင့်ကြည့်မှုမရှိခြင်း၊ ကျင့်ဝတ်ပိုင်းဆိုင်ရာစိတ်ချရခြင်းနှင့် ဗဟိုချုပ်ကိုင်မှုမရှိခြင်း၊ သင့်အချက်အလက်များကို သင်ကိုယ်တိုင် ပိုင်ဆိုင်သော Mastodon!' + about_mastodon_html: အနာဂတ်အတွက်လူမှုကွန်ရက် - ကြော်ငြာများမရှိခြင်း၊ အဖွဲ့သားများအား စောင့်ကြည့်မှုမရှိခြင်း၊ ကျင့်ဝတ်ပိုင်းဆိုင်ရာစိတ်ချရခြင်းနှင့် ဗဟိုချုပ်ကိုင်မှုမရှိခြင်း၊ သင့်အချက်အလက်များကို သင်ကိုယ်တိုင် ပိုင်ဆိုင်သော Mastodon! contact_missing: မသတ်မှတ်ထား contact_unavailable: မရှိ - hosted_on: '%{domain} မှ လက်ခံဆောင်ရွက်ထားသော Mastodon' + hosted_on: "%{domain} မှ လက်ခံဆောင်ရွက်ထားသော Mastodon" title: အကြောင်း accounts: follow: စောင့်ကြည့်မယ် @@ -22,7 +23,7 @@ my: admin: account_actions: action: ဆောင်ရွက်ရန် - title: '%{acct} စိစစ်မှုလုပ်ဆောင်ရန်' + title: "%{acct} စိစစ်မှုလုပ်ဆောင်ရန်" account_moderation_notes: create: မှတ်စု သိမ်း created_msg: စိစစ်ခြင်းမှတ်စုကို ဖန်တီးပြီးပါပြီ။ @@ -30,7 +31,7 @@ my: accounts: add_email_domain_block: ဒိုမိန်းကိုပိတ်မည် approve: အတည်ပြုပါ - approved_msg: '%{username} ၏ စာရင်းသွင်းခြင်းကို အတည်ပြုပြီးပါပြီ' + approved_msg: "%{username} ၏ စာရင်းသွင်းခြင်းကို အတည်ပြုပြီးပါပြီ" are_you_sure: သေချာပါသလား။ avatar: ကိုယ်စားပြုရုပ်ပုံ by_domain: ဒိုမိန်း @@ -40,12 +41,12 @@ my: label: အီးမေးလ်ပြောင်းရန် new_email: အီးမေးလ်အသစ် submit: အီးမေးလ်ပြောင်းပါ။ - title: '%{username} အတွက် အီးမေးလ်ပြောင်းပါ' + title: "%{username} အတွက် အီးမေးလ်ပြောင်းပါ" change_role: changed_msg: အခန်းကဏ္ဍကို ပြောင်းလဲပြီးပါပြီ။ label: အခန်းကဏ္ဍ ပြောင်းလဲရန် no_role: အခန်းကဏ္ဍမရှိ - title: '%{username} အတွက် အခန်းကဏ္ဍပြောင်းပါ' + title: "%{username} အတွက် အခန်းကဏ္ဍပြောင်းပါ" confirm: အတည်ပြု confirmed: အတည်ပြုပြီးပါပြီ confirming: အတည်ပြုနေသည် @@ -66,7 +67,7 @@ my: enable: မပိတ်သိမ်းထားသော enable_sign_in_token_auth: အီးမေးတိုကင် စစ်မှန်ကြောင်းအတည်ပြုချက်ကို ဖွင့်ပါ enabled: ဖွင့်ထားသည် - enabled_msg: '%{username} ၏ အကောင့်ကို ပိတ်သိမ်းထားသည်' + enabled_msg: "%{username} ၏ အကောင့်ကို ပိတ်သိမ်းထားသည်" followers: စောင့်ကြည့်သူများ follows: စောင့်ကြည့်မယ် header: မျက်နှာဖုံးပုံ @@ -84,7 +85,7 @@ my: media_attachments: မီဒီယာ ပူးတွဲချက်များ memorialize: အမှတ်တရအဖြစ် ပြောင်းပါ memorialized: အမှတ်တရ - memorialized_msg: '%{username} ကို အမှတ်တရအကောင့်အဖြစ် ပြောင်းလဲခဲ့သည်' + memorialized_msg: "%{username} ကို အမှတ်တရအကောင့်အဖြစ် ပြောင်းလဲခဲ့သည်" moderation: active: လက်ရှိအသုံးပြုလျက်ရှိခြင်း all: အားလုံး @@ -112,13 +113,13 @@ my: redownload: ပရိုဖိုင်ကို ပြန်လည်စတင်ရန် redownloaded_msg: မူလမှစ၍ %{username} ၏ ပရိုဖိုင်ကို ပြန်လည်စတင်ပြီးပါပြီ reject: ဖယ်ရှားပါ - rejected_msg: '%{username} ၏ အကောင့်ဖွင့်အက်ပလီကေးရှင်းကို ဖယ်ရှားလိုက်ပါပြီ' + rejected_msg: "%{username} ၏ အကောင့်ဖွင့်အက်ပလီကေးရှင်းကို ဖယ်ရှားလိုက်ပါပြီ" remote_suspension_irreversible: ဤအကောင့်၏အချက်အလက်ကို လုံးဝ ဖျက်လိုက်ပါပြီ။ remote_suspension_reversible_hint_html: အကောင့်ကို ၎င်းတို့၏ဆာဗာတွင် ဆိုင်းငံ့ထားပြီး အချက်အလက်ကို %{date} နေ့တွင် လုံးဝဖယ်ရှားလိုက်ပါမည်။ ထိုအချိန်အထိ အဝေးမှထိန်းချုပ်နိုင်သောဆာဗာက ဤအကောင့်ကို ပြန်လည်ရယူနိုင်သည်။ အကောင့်အချက်အလက်အားလုံးကို ချက်ချင်းဖယ်ရှားလိုပါက အောက်ပါအတိုင်း ပြုလုပ်နိုင်ပါသည်။ remove_avatar: ကိုယ်စားပြုရုပ်ပုံကို ဖယ်ရှားပါ remove_header: မျက်နှာဖုံးပုံ ဖယ်ရှားရန် - removed_avatar_msg: '%{username} ၏ ကိုယ်စားပြုရုပ်ပုံအား ဖယ်ရှားပြီးပါပြီ' - removed_header_msg: '%{username} ၏ မျက်နှာဖုံးပုံအား ဖယ်ရှားပြီးပါပြီ' + removed_avatar_msg: "%{username} ၏ ကိုယ်စားပြုရုပ်ပုံအား ဖယ်ရှားပြီးပါပြီ" + removed_header_msg: "%{username} ၏ မျက်နှာဖုံးပုံအား ဖယ်ရှားပြီးပါပြီ" resend_confirmation: already_confirmed: ဤအသုံးပြုသူကို အတည်ပြုပြီးပါပြီ send: အတည်ပြုချက်လင့်ခ်ကို ပြန်လည်ပေးပို့ပါ @@ -151,14 +152,14 @@ my: suspension_reversible_hint_html: အကောင့်ကို ဆိုင်းငံ့ထားပြီး၊ ဒေတာကို %{date} တွင် အပြည့်အဝ ဖယ်ရှားပါမည်။ ထိုအချိန်အထိ မည်သည့်ဆိုးကျိုးများမရှိဘဲ အကောင့်ကို ပြန်လည်ရယူနိုင်သည်။ အကောင့်၏ဒေတာအားလုံးကို ချက်ချင်းဖယ်ရှားလိုပါက အောက်ပါအတိုင်း ပြုလုပ်နိုင်ပါသည်။ title: အကောင့်များ unblock_email: အီးမေးလ်ကိုပြန်ဖွင့်မည် - unblocked_email_msg: ' %{username} အီးမေးလ်ကိုပြန်ဖွင့်လိုက်ပါပြီ' + unblocked_email_msg: " %{username} အီးမေးလ်ကိုပြန်ဖွင့်လိုက်ပါပြီ" unconfirmed_email: အတည်မပြုရသေးသော အီးမေးလ် undo_sensitized: သတိပြုရန်အား ပြန်ဖြုတ်ရန် undo_silenced: ကန့်သတ်ချက်မလုပ်တော့ပါ undo_suspension: ပိတ်ခြင်းကိုပြန်ဖွင့်မည် - unsilenced_msg: '%{username} ၏ အကောင့်၏ ကန့်သတ်ချက်ကို အောင်မြင်စွာ ပယ်ဖျက်ခဲ့သည်။' + unsilenced_msg: "%{username} ၏ အကောင့်၏ ကန့်သတ်ချက်ကို အောင်မြင်စွာ ပယ်ဖျက်ခဲ့သည်။" unsubscribe: စာရင်းမှထွက်ရန် - unsuspended_msg: '%{username} ၏ အကောင့်ကို ရပ်ဆိုင်းလိုက်ပါပြီ' + unsuspended_msg: "%{username} ၏ အကောင့်ကို ရပ်ဆိုင်းလိုက်ပါပြီ" username: အသုံးပြုသူအမည် view_domain: ဒိုမိန်းအတွက် အကျဉ်းချုပ်ကို ကြည့်ပါ warn: သတိပေးရန် @@ -243,7 +244,7 @@ my: create_user_role_html: "%{name} က %{target} အခန်းကဏ္ဍကို ဖန်တီးပြီးပါပြီ" demote_user_html: "%{name} က အသုံးပြုသူ %{target} ကို ဖြုတ်ပြီးပါပြီ" destroy_announcement_html: "%{name} က ကြေညာချက် %{target} ကို ဖျက်လိုက်သည်" - destroy_canonical_email_block_html: "ဟက်ရှ် %{target} ဖြင့် %{name} အီးမေးလ်ပိတ်သိမ်းထားခြင်းကို ဖယ်ရှားပြီးပါပြီ" + destroy_canonical_email_block_html: ဟက်ရှ် %{target} ဖြင့် %{name} အီးမေးလ်ပိတ်သိမ်းထားခြင်းကို ဖယ်ရှားပြီးပါပြီ destroy_custom_emoji_html: "%{name} ဖျက်လိုက်သော အီမိုဂျီ %{target}" destroy_domain_allow_html: "%{name} က ဒိုမိန်း %{target} ဖြင့် ဖက်ဒီကို ခွင့်မပြုခဲ့ပါ" destroy_domain_block_html: "%{name} မှ ပြန်ဖွင့်လိုက်သော ဒိုမိန်း %{target}" @@ -299,7 +300,7 @@ my: title: ကြေညာချက်အသစ် publish: ပို့စ်တင်မည် published_msg: ကြေညာချက်တင်ပြီးပါပြီ။ - scheduled_for: '%{time} အတွက် စီစဉ်ထားသည်' + scheduled_for: "%{time} အတွက် စီစဉ်ထားသည်" scheduled_msg: ကြေညာချက်ထုတ်ပြန်ရန် စီစဉ်ထားသည်။ title: ကြေညာချက်များ unpublish: ပြန်ဖြုတ်ပါ @@ -388,7 +389,7 @@ my: destroyed_msg: ဒိုမိန်းပိတ်ဆို့ခြင်းကို ပြန်ပြင်လိုက်ပါပြီ။ domain: ဒိုမိန်း edit: ဒိုမိန်းပိတ်ပင်ခြင်းကို ပြင်ဆင်ရန် - existing_domain_block: '%{name} အပေါ် ပိုမိုတင်းကျပ်သောကန့်သတ်ချက်များကို ချမှတ်ထားပြီးဖြစ်သည်။' + existing_domain_block: "%{name} အပေါ် ပိုမိုတင်းကျပ်သောကန့်သတ်ချက်များကို ချမှတ်ထားပြီးဖြစ်သည်။" existing_domain_block_html: '%{name} အပေါ် ပိုမိုတင်းကျပ်သော ကန့်သတ်ချက်များကို ချမှတ်ထားပြီး ၎င်းကို ပြန်ဖွင့်ရန် လိုအပ်ပါသည်။' export: ထုတ်ယူခြင်း import: ထည့်သွင်းခြင်း @@ -418,7 +419,7 @@ my: email_domain_blocks: add_new: အသစ် ထည့်ပါ attempts_over_week: - other: "ပြီးခဲ့သည့် ရက်သတ္တပတ်အတွင်း %{count} ကြိုးပမ်းမှု" + other: ပြီးခဲ့သည့် ရက်သတ္တပတ်အတွင်း %{count} ကြိုးပမ်းမှု created_msg: အီးမေးလ်ဒိုမိန်းကို ပိတ်ပင်နိုင်ခဲ့ပါသည် delete: ဖျက်ပါ dns: @@ -432,7 +433,7 @@ my: no_email_domain_block_selected: မည်သည့်အီးမေးလ်ဒိုမိန်းပိတ်ပင်ခြင်းကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ not_permitted: ခွင့်ပြုထားခြင်းမရှိပါ resolved_dns_records_hint_html: ဒိုမိန်းအမည်သည် အီးမေးလ်လက်ခံခြင်းအတွက် နောက်ဆုံးတွင် တာဝန်ရှိသည့် အောက်ပါ MX ဒိုမိန်းများသို့ ဖြေရှင်းပေးသည်။ MX ဒိုမိန်းကို ပိတ်ဆို့ခြင်းသည် တူညီသော MX ဒိုမိန်းကို အသုံးပြုသည့် မည်သည့်အီးမေးလ်လိပ်စာမှ အကောင့်ဖွင့်ခြင်းများကို ပိတ်ဆို့စေမည်၊ မြင်နိုင်သောဒိုမိန်းအမည်သည် ကွဲပြားသော်လည်း၊ အဓိက အီးမေးလ်ဝန်ဆောင်မှုပေးသူများကို မပိတ်ဆို့ရန် သတိထားပါ။ - resolved_through_html: '%{domain} မှတစ်ဆင့် ဖြေရှင်းခဲ့သည်' + resolved_through_html: "%{domain} မှတစ်ဆင့် ဖြေရှင်းခဲ့သည်" title: ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းများ export_domain_allows: new: @@ -442,10 +443,10 @@ my: import: description_html: ဒိုမိန်းပိတ်ဆို့စာရင်း ထည့်သွင်းပါမည်။ ဤစာရင်းကို သင်ကိုယ်တိုင် မရေးသားထားပါက ပြန်လည်သုံးသပ်ရန်လိုပါသည်။ existing_relationships_warning: လက်ရှိစောင့်ကြည့်သူများနှင့် ဆက်ဆံရေး - private_comment_description_html: 'ထည့်သွင်းထားသော ဒိုမိန်းပိတ်ဆို့စာရင်းများအား ကြည့်ရှုရန်အတွက် ပိတ်ဆို့စာရင်းများကို အောက်ပါသီးသန့်မှတ်ချက်ဖြင့် ဖန်တီးပါမည် - %{comment}' - private_comment_template: '%{date} တွင် %{source} မှ ထည့်သွင်းခဲ့သည်' + private_comment_description_html: ထည့်သွင်းထားသော ဒိုမိန်းပိတ်ဆို့စာရင်းများအား ကြည့်ရှုရန်အတွက် ပိတ်ဆို့စာရင်းများကို အောက်ပါသီးသန့်မှတ်ချက်ဖြင့် ဖန်တီးပါမည် - %{comment} + private_comment_template: "%{date} တွင် %{source} မှ ထည့်သွင်းခဲ့သည်" title: ဒိုမိန်းပိတ်ပင်ထားမှုများကို ထည့်သွင်းရန် - invalid_domain_block: 'အောက်ပါအမှား(များ)ကြောင့် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဒိုမိန်းပိတ်ပင်ထားမှုများကို ကျော်သွားခဲ့သည် - %{error}' + invalid_domain_block: အောက်ပါအမှား(များ)ကြောင့် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဒိုမိန်းပိတ်ပင်ထားမှုများကို ကျော်သွားခဲ့သည် - %{error} new: title: ဒိုမိန်းပိတ်ပင်ထားမှုများကို ထည့်သွင်းရန် no_file: ဖိုင်ရွေးထားခြင်းမရှိပါ @@ -461,9 +462,9 @@ my: availability: description_html: other: ဒိုမိန်းသို့ ပေးပို့ခြင်း မအောင်မြင်ဘဲ %{count} ရက် မအောင်မြင်ပါက၊ ဒိုမိန်းထံပေးပို့ခြင်း မှ မရရှိပါက နောက်ထပ်ပေးပို့ရန် ကြိုးပမ်းမှုများ ပြုလုပ်မည်မဟုတ်ပါ။ - failure_threshold_reached: '%{date} နေ့ တွင် မအောင်မြင်ခဲ့ပါ။' + failure_threshold_reached: "%{date} နေ့ တွင် မအောင်မြင်ခဲ့ပါ။" failures_recorded: - other: '%{count} ရက်နေ့တွင် ကြိုးစားမှု မအောင်မြင်ပါ။' + other: "%{count} ရက်နေ့တွင် ကြိုးစားမှု မအောင်မြင်ပါ။" no_failures_recorded: မှတ်တမ်းမရှိပါ။ title: ရရှိနိုင်မှု warning: ဤဆာဗာအသုံးပြုနိုင်ရန် နောက်ဆုံးကြိုးပမ်းမှုမှာ မအောင်မြင်ခဲ့ပါ @@ -491,7 +492,7 @@ my: instance_follows_measure: သူတို့၏စောင့်ကြည့်သူများ ဒီနေရာမှာပါ instance_languages_dimension: အသုံးများသည့်ဘာသာစကားများ instance_media_attachments_measure: သိမ်းဆည်းထားသော မီဒီယာပူးတွဲဖိုင်များ - instance_reports_measure: '၎င်းတို့နှင့်ဆိုင်သော အစီရင်ခံစာများ' + instance_reports_measure: "၎င်းတို့နှင့်ဆိုင်သော အစီရင်ခံစာများ" instance_statuses_measure: သိမ်းဆည်းထားသောပို့စ်များ delivery: all: အားလုံး @@ -502,11 +503,11 @@ my: unavailable: မရရှိနိုင်ပါ delivery_available: ပေးပို့နိုင်ပါပြီ delivery_error_days: ပေးပို့မှု မှားယွင်းသည့်ရက်များ - delivery_error_hint: '%{count} ရက်အတွင်း မပေးပို့နိုင်ပါက ၎င်းကို ပေးပို့မရနိုင်ဟု အလိုအလျောက် အမှတ်အသားပြုပါမည်။' - destroyed_msg: '%{domain} မှ အချက်အလက်များကို မကြာမီ ဖျက်ပါမည်။' + delivery_error_hint: "%{count} ရက်အတွင်း မပေးပို့နိုင်ပါက ၎င်းကို ပေးပို့မရနိုင်ဟု အလိုအလျောက် အမှတ်အသားပြုပါမည်။" + destroyed_msg: "%{domain} မှ အချက်အလက်များကို မကြာမီ ဖျက်ပါမည်။" empty: ဒိုမိန်းများ မတွေ့ပါ။ known_accounts: - other: "လူသိများသော အကောင့် %{count} ခု" + other: လူသိများသော အကောင့် %{count} ခု moderation: all: အားလုံး limited: ကန့်သတ်ထားသော @@ -517,9 +518,9 @@ my: purge_description_html: ဤဒိုမိန်းသည် အော့ဖ်လိုင်းဖြစ်နေပါက သင့်သိုလှောင်မှုမှ အကောင့်မှတ်တမ်းများနှင့် ဆက်စပ်အချက်အလက်အားလုံးကို ဖျက်နိုင်သည်။ အချိန်အနည်းငယ် ကြာနိုင်ပါသည်။ title: ဖက်ဒီ total_blocked_by_us: ကျွန်ုပ်တို့မှ ပိတ်ပင်ထားခြင်း - total_followed_by_them: '၎င်းတို့မှ စောင့်ကြည့်ခဲ့သည်' + total_followed_by_them: "၎င်းတို့မှ စောင့်ကြည့်ခဲ့သည်" total_followed_by_us: ကျွန်ုပ်တို့မှ စောင့်ကြည့်ခဲ့သည် - total_reported: '၎င်းတို့နှင့်ဆိုင်သော အစီရင်ခံစာများ' + total_reported: "၎င်းတို့နှင့်ဆိုင်သော အစီရင်ခံစာများ" total_storage: မီဒီယာ ပူးတွဲချက်များ totals_time_period_hint_html: အောက်တွင်ဖော်ပြထားသော စုစုပေါင်းမှာ အချိန်တိုင်းအတွက် အချက်အလက်များဖြစ်သည်။ invites: @@ -591,13 +592,13 @@ my: category_description_html: ဤအကောင့်နှင့်/သို့မဟုတ် အကြောင်းအရာကို အစီရင်ခံထားသည့် အကြောင်းရင်းကို အစီရင်ခံထားသည့်အကောင့်နှင့် ဆက်သွယ်မှုတွင် ကိုးကားပါမည်။ comment: none: တစ်ခုမျှမရှိ - comment_description_html: '%{name} က နောက်ထပ်အချက်အလက်များ ပံ့ပိုးပေးနိုင်ရန်အတွက် ရေးသားခဲ့သည် -' + comment_description_html: "%{name} က နောက်ထပ်အချက်အလက်များ ပံ့ပိုးပေးနိုင်ရန်အတွက် ရေးသားခဲ့သည် -" confirm: အတည်ပြုမည် - confirm_action: '@%{acct} ကို စိစစ်အကဲဖြတ်ခြင်းအား အတည်ပြုပါ' + confirm_action: "@%{acct} ကို စိစစ်အကဲဖြတ်ခြင်းအား အတည်ပြုပါ" created_at: အကြောင်းကြားပြီးပါပြီ delete_and_resolve: ပို့စ်များကို ဖျက်ပါ forwarded: ထပ်ဆင့်ပို့ပြီးပါပြီ - forwarded_to: '%{domain} သို့ ထပ်ဆင့်ပို့ထားသည်' + forwarded_to: "%{domain} သို့ ထပ်ဆင့်ပို့ထားသည်" mark_as_resolved: ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ mark_as_sensitive: သတိထားရသည်ဟု အမှတ်အသားပြုပါ mark_as_unresolved: မဖြေရှင်းရသေးကြောင်း အမှတ်အသားပြုပါ @@ -611,10 +612,10 @@ my: title: မှတ်စုများ notes_description_html: အခြားစိစစ်သူများနှင့် ကိုယ်တိုင်အတွက် မှတ်စုများ ထားခဲ့ပါ processed_msg: 'အကြောင်းကြားမှု #%{id} ကို ဆောင်ရွက်ပြီးပါပြီ' - quick_actions_description_html: 'တိုင်ကြားထားသောအကြောင်းအရာများကြည့်ရှုရန်အတွက် လုပ်ဆောင်ချက်တစ်ခု ဆောင်ရွက်ပါ သို့မဟုတ် Scroll ဆွဲ၍ ကြည့်ပါ -' - remote_user_placeholder: '%{instance} မှ အဝေးကနေအသုံးပြုသူ' + quick_actions_description_html: တိုင်ကြားထားသောအကြောင်းအရာများကြည့်ရှုရန်အတွက် လုပ်ဆောင်ချက်တစ်ခု ဆောင်ရွက်ပါ သို့မဟုတ် Scroll ဆွဲ၍ ကြည့်ပါ - + remote_user_placeholder: "%{instance} မှ အဝေးကနေအသုံးပြုသူ" reopen: အစီရင်ခံစာပြန်ဖွင့်ရန် - report: '#%{id} အစီရင်ခံရန်' + report: "#%{id} အစီရင်ခံရန်" reported_account: တိုင်ကြားထားသောအကောင့် reported_by: မှ တိုင်ကြားထားသည် resolved: ဖြေရှင်းပြီးပါပြီ @@ -625,18 +626,18 @@ my: statuses_description_html: စိတ်အ​နှောင့်အယှက်ဖြစ်​စေ​သောအကြောင်းအရာများကို အစီရင်ခံထားသောအကောင့်နှင့် ဆက်သွယ်ပြီး အ​ရေးယူ​ဆောင်ရွက်ပါမည် summary: action_preambles: - delete_html: 'သင်သည် @%{acct} ၏ ပို့စ်အချို့ကို ဖယ်ရှား တော့မည်ဖြစ်သည်။ ၎င်းတို့မှာ -' - mark_as_sensitive_html: 'သင်သည် @%{acct} ၏ ပို့စ်အချို့ကို သတိထားရသောပို့စ်များ အဖြစ် အမှတ်အသားပြုတော့မည်ဖြစ်သည်။ ၎င်းတို့မှာ -' - silence_html: 'သင်သည် @%{acct} ၏ အကောင့်ကို ကန့်သတ် တော့မည်ဖြစ်သည်။ ၎င်းမှာ -' - suspend_html: 'သင်သည် @%{acct} ၏ အကောင့်ကို ဆိုင်းငံ့ တော့မည်ဖြစ်သည်။ ၎င်းမှာ -' + delete_html: သင်သည် @%{acct} ၏ ပို့စ်အချို့ကို ဖယ်ရှား တော့မည်ဖြစ်သည်။ ၎င်းတို့မှာ - + mark_as_sensitive_html: သင်သည် @%{acct} ၏ ပို့စ်အချို့ကို သတိထားရသောပို့စ်များ အဖြစ် အမှတ်အသားပြုတော့မည်ဖြစ်သည်။ ၎င်းတို့မှာ - + silence_html: သင်သည် @%{acct} ၏ အကောင့်ကို ကန့်သတ် တော့မည်ဖြစ်သည်။ ၎င်းမှာ - + suspend_html: သင်သည် @%{acct} ၏ အကောင့်ကို ဆိုင်းငံ့ တော့မည်ဖြစ်သည်။ ၎င်းမှာ - actions: delete_html: စိတ်အနှောင့်အယှက်ဖြစ်စေသောပို့စ်များကို ဖယ်ရှားပါ mark_as_sensitive_html: စိတ်အနှောင့်အယှက်ဖြစ်စေသောပို့စ်များ၏ မီဒီယာကို သတိထားရသောမီဒီယာအဖြစ် အမှတ်အသားပြုပါ - silence_html: '၎င်းတို့၏ ပရိုဖိုင်နှင့် အကြောင်းအရာများကို ၎င်းတို့ကိုစောင့်ကြည့်နေသူများသာ မြင်နိုင်စေခြင်း သို့မဟုတ် ပရိုဖိုင်ကြည့်ရှုခြင်းဖြင့် @%{acct} အကောင့်ရောက်ရှိမှုကို ကန့်သတ်ပါ' - suspend_html: @%{acct} ကို ဆိုင်းငံ့ထားသောကြောင့် ပရိုဖိုင်နှင့် အကြောင်းအရာများအား ဝင်ရောက်ခွင့်မရှိတော့သဖြင့် အပြန်အလှန် တုံ့ပြန်၍ မရတော့ခြင်း + silence_html: "၎င်းတို့၏ ပရိုဖိုင်နှင့် အကြောင်းအရာများကို ၎င်းတို့ကိုစောင့်ကြည့်နေသူများသာ မြင်နိုင်စေခြင်း သို့မဟုတ် ပရိုဖိုင်ကြည့်ရှုခြင်းဖြင့် @%{acct} အကောင့်ရောက်ရှိမှုကို ကန့်သတ်ပါ" + suspend_html: "@%{acct} ကို ဆိုင်းငံ့ထားသောကြောင့် ပရိုဖိုင်နှင့် အကြောင်းအရာများအား ဝင်ရောက်ခွင့်မရှိတော့သဖြင့် အပြန်အလှန် တုံ့ပြန်၍ မရတော့ခြင်း" close_report: 'တိုင်ကြားစာ #%{id} ကို ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ' - close_reports_html: @%{acct} နှင့်ပတ်သက်သည့် အစီရင်ခံစာအားလုံး ကို ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ - delete_data_html: @%{acct} ၏ ပရိုဖိုင်နှင့် အကြောင်းအရာများကို ဆိုင်းငံ့ထားခြင်းမရှိပါက ယခုမှ ရက်ပေါင်း ၃၀ အတွင်း ဖျက်ရန် + close_reports_html: "@%{acct} နှင့်ပတ်သက်သည့် အစီရင်ခံစာအားလုံး ကို ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ" + delete_data_html: "@%{acct} ၏ ပရိုဖိုင်နှင့် အကြောင်းအရာများကို ဆိုင်းငံ့ထားခြင်းမရှိပါက ယခုမှ ရက်ပေါင်း ၃၀ အတွင်း ဖျက်ရန်" preview_preamble_html: "@%{acct} သည် အောက်ပါအကြောင်းအရာများကြောင့် သတိပေးချက်ကို လက်ခံရရှိပါမည် -" record_strike_html: ဤအကောင့်မှ နောင်လာမည့် ချိုးဖောက်မှုများအတွက် အရေးယူနိုင်ရန် @%{acct} သတိပေးချက်တစ်ခု မှတ်တမ်းယူထားပါ send_email_html: သတိပေးချက် အီးမေးလ်တစ်စောင် @%{acct} ပေးပို့ပါ @@ -644,7 +645,7 @@ my: target_origin: တိုင်ကြားထားသောအကောင့်၏ မူလအစ title: မှတ်တမ်းများ unassign: တာဝန်မှဖြုတ်ရန် - unknown_action_msg: 'အမည်မသိလုပ်ဆောင်ချက်- %{action}' + unknown_action_msg: အမည်မသိလုပ်ဆောင်ချက်- %{action} unresolved: မဖြေရှင်းရသေးပါ updated_at: ပြင်ဆင်ပြီးပါပြီ view_profile: ပရိုဖိုင်ကြည့်ရန် @@ -659,8 +660,8 @@ my: moderation: စိစစ်ခြင်း special: အထူး delete: ဖျက်ပါ - description_html: အသုံးပြုသူအခန်းကဏ္ဍများဖြင့် Mastodon အသုံးပြုသူများ၏ မည်သည့်လုပ်ဆောင်ချက်များနှင့် နေရာများကိုမဆို သင် စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ - edit: '''%{name} ၏ အခန်းကဏ္ဍကို ပြင်ဆင်ရန်' + description_html: "အသုံးပြုသူအခန်းကဏ္ဍများဖြင့် Mastodon အသုံးပြုသူများ၏ မည်သည့်လုပ်ဆောင်ချက်များနှင့် နေရာများကိုမဆို သင် စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။" + edit: "'%{name} ၏ အခန်းကဏ္ဍကို ပြင်ဆင်ရန်" everyone: မူလသတ်မှတ်ထားသည့် ခွင့်ပြုချက်များ everyone_full_description_html: ဤသည်မှာ အခန်းကဏ္ဍတာဝန်ပေးထားခြင်းမရှိသော အသုံးပြုသူအားလုံး အပေါ် သက်ရောက်သည့် အခြေခံအခန်းကဏ္ဍ ပင်ဖြစ်သည်။ အခြားကဏ္ဍများအားလုံးမှာ ၎င်းထံမှ ခွင့်ပြုချက်များ ယူရပါသည်။ permissions_count: @@ -818,7 +819,7 @@ my: elasticsearch_running_check: message_html: Elasticsearch သို့ ချိတ်ဆက်၍မရပါ။ ၎င်းသည် အလုပ်လုပ်နေသလား၊ သို့မဟုတ် စာသားအပြည့်အစုံရှာဖွေမှုကို ပိတ်ပါ။ elasticsearch_version_check: - message_html: 'သဟဇာတမဖြစ်သော Elasticsearch ဗားရှင်း- %{value}' + message_html: သဟဇာတမဖြစ်သော Elasticsearch ဗားရှင်း- %{value} version_comparison: Elasticsearch %{running_version} သည် %{required_version} လိုအပ်နေချိန်တွင် လုပ်ဆောင်နေသည် rules_check: action: ဆာဗာစည်းမျဉ်းများကို စီမံရန် @@ -848,7 +849,7 @@ my: links: allow: လင့်ခ်ကို ခွင့်ပြုရန် allow_provider: ပို့စ်တင်သူကိုခွင့်ပြုရန် - description_html: '၎င်းတို့သည် သင့်ဆာဗာမှ ပို့စ်များကို မြင်သည့် အကောင့်များမှ လောလောဆယ်တွင် အများအပြားမျှဝေနေသည့် လင့်ခ်များဖြစ်သည်။ ၎င်းသည် သင့်အသုံးပြုသူများအား ကမ္ဘာပေါ်တွင် ဖြစ်ပျက်နေသည့်အရာများကို ရှာဖွေရန် ကူညီပေးနိုင်ပါသည်။ ထုတ်ဝေသူအား သင်အတည်မပြုမချင်း လင့်ခ်များကို လူသိရှင်ကြားပြသခြင်းမရှိပါ။ တစ်ဦးချင်း လင့်ခ်များကို သင် ခွင့်ပြုနိုင်သည် သို့မဟုတ် ငြင်းပယ်နိုင်သည်။' + description_html: "၎င်းတို့သည် သင့်ဆာဗာမှ ပို့စ်များကို မြင်သည့် အကောင့်များမှ လောလောဆယ်တွင် အများအပြားမျှဝေနေသည့် လင့်ခ်များဖြစ်သည်။ ၎င်းသည် သင့်အသုံးပြုသူများအား ကမ္ဘာပေါ်တွင် ဖြစ်ပျက်နေသည့်အရာများကို ရှာဖွေရန် ကူညီပေးနိုင်ပါသည်။ ထုတ်ဝေသူအား သင်အတည်မပြုမချင်း လင့်ခ်များကို လူသိရှင်ကြားပြသခြင်းမရှိပါ။ တစ်ဦးချင်း လင့်ခ်များကို သင် ခွင့်ပြုနိုင်သည် သို့မဟုတ် ငြင်းပယ်နိုင်သည်။" disallow: လင့်ခ်ကို ခွင့်မပြုရန် disallow_provider: ပို့စ်တင်သူကို ခွင့်မပြုရန် no_link_selected: မည်သည့်လင့်ခ်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ @@ -863,7 +864,7 @@ my: pending_review: ဆိုင်းငံ့ထားသော သုံးသပ်ချက် preview_card_providers: allowed: ဤပို့စ်တင်သူထံမှ လင့်ခ်များ ခေတ်စားနိုင်သည် - description_html: '၎င်းတို့သည် သင့်ဆာဗာပေါ်တွင် မကြာခဏ လင့်ခ်များကို မျှဝေလေ့ရှိသည့် ဒိုမိန်းများဖြစ်သည်။ လင့်ခ်၏ဒိုမိန်းကို အတည်ပြုမထားပါက လင့်ခ်များသည် လူသိရှင်ကြား လမ်းကြောင်းပေါ်ရှိလိမ့်မည်မဟုတ်ပါ။ သင့်ခွင့်ပြုချက် (သို့မဟုတ် ငြင်းပယ်ခြင်း) သည် ဒိုမိန်းခွဲများသို့ အကျုံးဝင်ပါသည်။' + description_html: "၎င်းတို့သည် သင့်ဆာဗာပေါ်တွင် မကြာခဏ လင့်ခ်များကို မျှဝေလေ့ရှိသည့် ဒိုမိန်းများဖြစ်သည်။ လင့်ခ်၏ဒိုမိန်းကို အတည်ပြုမထားပါက လင့်ခ်များသည် လူသိရှင်ကြား လမ်းကြောင်းပေါ်ရှိလိမ့်မည်မဟုတ်ပါ။ သင့်ခွင့်ပြုချက် (သို့မဟုတ် ငြင်းပယ်ခြင်း) သည် ဒိုမိန်းခွဲများသို့ အကျုံးဝင်ပါသည်။" rejected: ဤထုတ်ဝေသူထံမှ လင့်ခ်များ ခေတ်စားလာမည်မဟုတ်ပါ။ title: ပို့စ်တင်သူများ rejected: ဖယ်ရှားပြီးပါပြီ @@ -879,23 +880,23 @@ my: other: မျှဝေမှုနှင့် နှစ်သက်မှု %{friendly_count} ကြိမ် title: လက်ရှိခေတ်စားနေသော ပို့စ်များ tags: - current_score: '%{score} လက်ရှိရမှတ်' + current_score: "%{score} လက်ရှိရမှတ်" dashboard: tag_accounts_measure: အများဆုံးအသုံပြုမှုများ tag_languages_dimension: အသုံးများသည့်ဘာသာစကားများ tag_servers_dimension: အသုံးများသည့်ဆာဗာများ tag_servers_measure: မတူညီသောဆာဗာများ tag_uses_measure: စုစုပေါင်းအသုံးပြုမှု - description_html: '၎င်းတို့သည် သင့်ဆာဗာမြင်နေရသည့် ပို့စ်အများအပြားတွင် လက်ရှိမြင်နေရသည့် hashtag များဖြစ်သည်။ ၎င်းသည် သင့်အသုံးပြုသူများအား ယခုအချိန်တွင် လူအများပြောနေသည့်အရာများကို သိရှိနိုင်ရန် ကူညီပေးနိုင်ပါသည်။ ၎င်းတို့ကို သင်အတည်မပြုမချင်း hashtags များကို လူသိရှင်ကြား ပြသမည်မဟုတ်ပါ။' + description_html: "၎င်းတို့သည် သင့်ဆာဗာမြင်နေရသည့် ပို့စ်အများအပြားတွင် လက်ရှိမြင်နေရသည့် hashtag များဖြစ်သည်။ ၎င်းသည် သင့်အသုံးပြုသူများအား ယခုအချိန်တွင် လူအများပြောနေသည့်အရာများကို သိရှိနိုင်ရန် ကူညီပေးနိုင်ပါသည်။ ၎င်းတို့ကို သင်အတည်မပြုမချင်း hashtags များကို လူသိရှင်ကြား ပြသမည်မဟုတ်ပါ။" listable: အကြံပြုနိုင်ပါသည် no_tag_selected: မည်သည့်တဂျ်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ not_listable: အကြံပြုမည်မဟုတ်ပါ not_trendable: လက်ရှိခေတ်စားနေသာပို့စ်များအောက်တွင် ပေါ်လာမည်မဟုတ်ပါ not_usable: အသုံးမပြုနိုင်ပါ - peaked_on_and_decaying: '%{date} ရက်တွင် ခေတ်စားခဲ့သော်လည်း ယခု ခေတ်မစားတော့ပါ' + peaked_on_and_decaying: "%{date} ရက်တွင် ခေတ်စားခဲ့သော်လည်း ယခု ခေတ်မစားတော့ပါ" title: လက်ရှိခေတ်စားနေသော hashtag များ trendable: လက်ရှိခေတ်စားနေသာပို့စ်များအောက်တွင် ပေါ်လာမည် - trending_rank: '#%{rank} ခေတ်စားနေခြင်း' + trending_rank: "#%{rank} ခေတ်စားနေခြင်း" usable: အသုံးပြုနိုင်သည် usage_comparison: မနေ့က %{yesterday} နှင့် နှိုင်းယှဉ်လျှင် ယနေ့ %{today} ကြိမ် အသုံးပြုခဲ့သည် used_by_over_week: @@ -911,7 +912,7 @@ my: webhooks: add_new: ဆုံးမှတ် ထည့်ပါ delete: ဖျက်ပါ - description_html: webhook သည် Mastodon အား ရွေးချယ်ထားသော အစီအစဉ်များအကြောင်း သင့်ကိုယ်ပိုင်အက်ပ်လီကေးရှင်းသို့ အချိန်နှင့်တစ်ပြေးညီ အသိပေးချက်များကို တွန်းပို့နိုင်သည်၊ ထို့ကြောင့် သင့်အပလီကေးရှင်းသည် တုံ့ပြန်မှုများကို အလိုအလျောက်စတင်နိုင်သည်။ + description_html: "webhook သည် Mastodon အား ရွေးချယ်ထားသော အစီအစဉ်များအကြောင်း သင့်ကိုယ်ပိုင်အက်ပ်လီကေးရှင်းသို့ အချိန်နှင့်တစ်ပြေးညီ အသိပေးချက်များကို တွန်းပို့နိုင်သည်၊ ထို့ကြောင့် သင့်အပလီကေးရှင်းသည် တုံ့ပြန်မှုများကို အလိုအလျောက်စတင်နိုင်သည်။" disable: ပိတ်ပါ disabled: ပိတ်ထားသည် edit: ဆုံးမှတ် ပြင်ဆင်ပါ @@ -919,7 +920,7 @@ my: enable: ဖွင့်ပါ enabled: လက်ရှိ enabled_events: - other: "ဖွင့်ထားသောအစီအစဉ်များ %{count} ခု" + other: ဖွင့်ထားသောအစီအစဉ်များ %{count} ခု events: ပွဲအစီအစဉ်များ new: webhook အသစ် rotate_secret: Rotate secret ထားပါ @@ -930,13 +931,13 @@ my: admin_mailer: new_appeal: actions: - delete_statuses: '၎င်းတို့၏ ပို့စ်များကို ဖျက်ရန်' - disable: '၎င်းတို့အကောင့်များအား ရပ်ထားရန်' - mark_statuses_as_sensitive: '၎င်းတို့၏ ပို့စ်များကို သတိထားရသော ပို့စ်များအဖြစ် အမှတ်အသားပြုရန်' + delete_statuses: "၎င်းတို့၏ ပို့စ်များကို ဖျက်ရန်" + disable: "၎င်းတို့အကောင့်များအား ရပ်ထားရန်" + mark_statuses_as_sensitive: "၎င်းတို့၏ ပို့စ်များကို သတိထားရသော ပို့စ်များအဖြစ် အမှတ်အသားပြုရန်" none: သတိပေးချက် - sensitive: '၎င်းတို့၏ အကောင့်များကို သတိထားရသော အကောင့်များအဖြစ် အမှတ်အသားပြုရန်' - silence: '၎င်းတို့၏ ပို့စ်များကို ကန့်သတ်ရန်' - suspend: '၎င်းတို့၏ အကောင့်ကို ရပ်ဆိုင်းရန်' + sensitive: "၎င်းတို့၏ အကောင့်များကို သတိထားရသော အကောင့်များအဖြစ် အမှတ်အသားပြုရန်" + silence: "၎င်းတို့၏ ပို့စ်များကို ကန့်သတ်ရန်" + suspend: "၎င်းတို့၏ အကောင့်ကို ရပ်ဆိုင်းရန်" body: "%{target} သည် %{type} ဖြစ်သည့် %{date} တွင် %{action_taken_by} ဖြင့် စိစစ်မှုတစ်ခုအား အယူခံဝင်နေပါသည်။ သူတို့ရေးသားခဲ့သည် -" next_steps: စိစစ်ဆုံးဖြတ်ချက်ပြန်ဖျက်ရန်အတွက် တင်ပြနိုင်သည် သို့မဟုတ် ၎င်းကို လျစ်လျူရှုနိုင်သည်။ subject: "%{username} က %{instance} တွင် စိစစ်ဆုံးဖြတ်ချက်ကို တင်ပြနေသည်" @@ -945,7 +946,7 @@ my: subject: Mastodon အပ်ဒိတ်များကို %{instance} အတွက် ရနိုင်ပါသည်။ new_pending_account: body: အကောင့်သစ်၏အသေးစိတ်ကို အောက်တွင်ဖော်ပြထားသည်။ ၎င်းကို အတည်ပြုနိုင်သည် သို့မဟုတ် ငြင်းပယ်နိုင်သည်။ - subject: ' (%{username}) %{instance} ပေါ်ရှိ ပြန်လည်သုံးသပ်ရမည့် အကောင့်သစ်' + subject: " (%{username}) %{instance} ပေါ်ရှိ ပြန်လည်သုံးသပ်ရမည့် အကောင့်သစ်" new_report: body: "%{reporter} က %{target} ကို တိုင်ကြားခဲ့သည်" body_remote: "%{domain} မှ တစ်စုံတစ်ယောက်က %{target} ကို တိုင်ကြားခဲ့သည်" @@ -954,7 +955,7 @@ my: body: Mastodon ဗားရှင်းအသစ်များ ထွက်ရှိပြီးပါပြီ၊ သင် update လုပ်နိုင်ပါပြီ။ subject: Mastodon ဗားရှင်းအသစ်များကို %{instance} အတွက် ရနိုင်ပါသည် new_trends: - body: 'အောက်ပါအရာများကို အများကိုမပြမီ ပြန်လည်သုံးသပ်ရန် လိုအပ်သည် -' + body: အောက်ပါအရာများကို အများကိုမပြမီ ပြန်လည်သုံးသပ်ရန် လိုအပ်သည် - new_trending_links: title: လက်ရှိခေတ်စားနေသော လင့်များ new_trending_statuses: @@ -963,7 +964,7 @@ my: no_approved_tags: လက်ရှိတွင် အတည်ပြုထားသော ခေတ်စားနေသည့် hashtag များမရှိပါ။ requirements: 'ဤလူများမှာ %{lowest_tag_score} ရမှတ်ဖြင့် လက်ရှိ #%{lowest_tag_name} ဖြစ်သည့် ခေတ်စားနေသော hashtag #%{rank} ကို ကျော်သွားနိုင်သည်။' title: လက်ရှိခေတ်စားနေသော hashtag များ - subject: '%{instance} တွင် ပြန်လည်သုံးသပ်ရမည့် ခေတ်စားနေသောပို့စ်အသစ်များ' + subject: "%{instance} တွင် ပြန်လည်သုံးသပ်ရမည့် ခေတ်စားနေသောပို့စ်အသစ်များ" aliases: add_new: နာမည်တူတစ်ခု ဖန်တီးမည် created_msg: နာမည်တူတစ်ခုကို ဖန်တီးပြီးပါပြီ။ အကောင့်ဟောင်းမှ စတင်ရွှေ့နိုင်ပါပြီ။ @@ -973,7 +974,7 @@ my: remove: နာမည်တူများကို လင့်ခ်ဖြုတ်ပါ appearance: advanced_web_interface: အဆင့်မြင့်ဝဘ်ပုံစံ - advanced_web_interface_hint: 'အဆင့်မြင့်ဝဘ်အင်တာဖေ့စ်သည် မျက်နှာပြင်အကျယ်တစ်ခုလုံးကို သင် အသုံးပြုလိုပါက သင်အလိုရှိသည့်အတိုင်း အချက်အလက်များကို တစ်ပြိုင်နက်ကြည့်ရှုရန် ကော်လံများစွာဖြင့် ပြသနိုင်သည် - ပင်မစာမျက်နှာ၊ အကြောင်းကြားချက်များ၊ ဖက်ဒီစာမျက်နှာ၊ စာရင်းအရေအတွက်နှင့် hashtags မှန်သမျှကို ချိန်ညှိဖော်ပြနိုင်သည်။' + advanced_web_interface_hint: အဆင့်မြင့်ဝဘ်အင်တာဖေ့စ်သည် မျက်နှာပြင်အကျယ်တစ်ခုလုံးကို သင် အသုံးပြုလိုပါက သင်အလိုရှိသည့်အတိုင်း အချက်အလက်များကို တစ်ပြိုင်နက်ကြည့်ရှုရန် ကော်လံများစွာဖြင့် ပြသနိုင်သည် - ပင်မစာမျက်နှာ၊ အကြောင်းကြားချက်များ၊ ဖက်ဒီစာမျက်နှာ၊ စာရင်းအရေအတွက်နှင့် hashtags မှန်သမျှကို ချိန်ညှိဖော်ပြနိုင်သည်။ animations_and_accessibility: လှုပ်ရှားမှုဆိုင်ရာများ confirmation_dialogs: အတည်ပြုချက် ဒိုင်ယာလော့ခ်များ discovery: ရှာဖွေတွေ့ရှိမှု @@ -1049,17 +1050,17 @@ my: set_new_password: စကားဝှက်အသစ် သတ်မှတ်ပါ။ setup: email_below_hint_html: သင်၏ Spam ဖိုင်တွဲကို စစ်ဆေးပါ၊ သို့မဟုတ် အခြားတစ်ခုကို တောင်းဆိုပါ။ သင့်အီးမေးလ်လိပ်စာမှားနေပါက သင်ပြင်ပေးနိုင်ပါသည်။ - email_settings_hint_html: '%{email} အတည်ပြုရန် သင့်ထံပေးပို့သော လင့်ခ်ကို နှိပ်ပါ။ စောင့်နေပါမည်။' + email_settings_hint_html: "%{email} အတည်ပြုရန် သင့်ထံပေးပို့သော လင့်ခ်ကို နှိပ်ပါ။ စောင့်နေပါမည်။" link_not_received: လင့်ခ် မရခဲ့ဘူးလား။ new_confirmation_instructions_sent: မိနစ်အနည်းငယ်အတွင်း အတည်ပြုချက်လင့်ခ်ပါရှိသော အီးမေးလ်အသစ်ကို သင်ရရှိမည်ဖြစ်သည်။ title: သင့်ဝင်စာပုံးကို စစ်ဆေးပါ sign_in: preamble_html: သင်၏ %{domain} အထောက်အထားများဖြင့် ဝင်ရောက်ပါ။ သင့်အကောင့်ကို အခြားဆာဗာတစ်ခုတွင် ဖွင့်ထားပါက ဤနေရာ၌ အကောင့်ဝင်ရောက်နိုင်မည်မဟုတ်ပါ။ - title: '%{domain} သို့ အကောင့်ဝင်ရန်' + title: "%{domain} သို့ အကောင့်ဝင်ရန်" sign_up: - manual_review: '%{domain} ၌ အကောင့်ဖွင့်ခြင်းများတွင် ကျွန်ုပ်တို့၏ ကြီးကြပ်သူများမှ ကိုယ်တိုင်သုံးသပ် လုပ်ဆောင်လျက်ရှိပါသည်။ သင့်အကြောင်းနှင့် %{domain} တွင် အကောင့်ဖွင့်လိုသည့်အကြောင်း အနည်းငယ်ရေးသားခြင်းဖြင့် သင့်အကောင့်စာရင်းသွင်းခြင်းမှာ ကျွန်ုပ်တို့ကို အကူအညီဖြစ်စေပါသည်။' + manual_review: "%{domain} ၌ အကောင့်ဖွင့်ခြင်းများတွင် ကျွန်ုပ်တို့၏ ကြီးကြပ်သူများမှ ကိုယ်တိုင်သုံးသပ် လုပ်ဆောင်လျက်ရှိပါသည်။ သင့်အကြောင်းနှင့် %{domain} တွင် အကောင့်ဖွင့်လိုသည့်အကြောင်း အနည်းငယ်ရေးသားခြင်းဖြင့် သင့်အကောင့်စာရင်းသွင်းခြင်းမှာ ကျွန်ုပ်တို့ကို အကူအညီဖြစ်စေပါသည်။" preamble: ဤ Mastodon အကောင့်တစ်ခုဖြင့် သင်သည် ကွန်ရက်ပေါ်ရှိ အခြားမည်သူ့မဆို မည်သည့်ဆာဗာတွင်ရှိစေကာမူ သင်စောင့်ကြည့်နိုင်မည်ဖြစ်ပါသည်။ - title: '%{domain} တွင် ထည့်သွင်းရန်။' + title: "%{domain} တွင် ထည့်သွင်းရန်။" status: account_status: အကောင့်အခြေအနေ confirming: အီးမေးလ်အတည်ပြုချက် အပြီးသတ်ရန် စောင့်ဆိုင်းခြင်း @@ -1103,7 +1104,7 @@ my: proceed: အကောင့်ဖျက်ပါ success_msg: သင့်အကောင့်ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ warning: - before: 'ရှေ့မဆက်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ -' + before: ရှေ့မဆက်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ - caches: အခြားဆာဗာများမှ ကက်ရှ်လုပ်ထားသော အကြောင်းအရာမှာ ဆက်ရှိနေနိုင်သည် data_removal: သင့်ပို့စ်များနှင့် အခြားအချက်အလက်များကို အပြီးတိုင် ဖယ်ရှားပါမည် email_change_html: သင့်အကောင့်မဖျက်ဘဲ သင့်အီးမေးလ်လိပ်စာကို ပြောင်းလဲနိုင်သည် @@ -1129,7 +1130,7 @@ my: description_html: ဤအရာများမှာ သင့်အကောင့်နှင့် %{instance} မှ သင့်ထံပေးပို့ထားသော သတိပေးချက်များကို ဆန့်ကျင်သည့် လုပ်ဆောင်ချက်များဖြစ်သည်။ recipient: လိပ်မူထားသည် reject_appeal: တင်သွင်းခြင်းကို ပယ်ချပါ - status: '#%{id} ပို့စ်' + status: "#%{id} ပို့စ်" status_removed: ပို့စ်ကို စနစ်မှ ဖယ်ရှားပြီးဖြစ်သည် title: "%{date} မှ %{action}" title_actions: @@ -1166,7 +1167,7 @@ my: noscript_html: Mastodon ဝဘ်အက်ပလီကေးရှင်းအသုံးပြုရန်အတွက် JavaScript ကို ဖွင့်ပါ။ တစ်နည်းအားဖြင့် သင့် Mastodon ပလက်ဖောင်းအတွက် မူရင်းအက်ပ်များ ထဲမှ တစ်ခုကို စမ်းကြည့်ပါ။ existing_username_validator: not_found: ထိုအသုံးပြုသူအမည်ဖြင့် ပြည်တွင်းအသုံးပြုသူကို ရှာမတွေ့ပါ - not_found_multiple: '%{usernames} ကို ရှာမတွေ့ပါ' + not_found_multiple: "%{usernames} ကို ရှာမတွေ့ပါ" exports: archive_takeout: date: ရက်စွဲ @@ -1204,17 +1205,17 @@ my: deprecated_api_multiple_keywords: ဤအချက်အလက်များမှာ စစ်ထုတ်ထားသည့်အဓိကစာလုံးတစ်ခုထက် ပို၍သက်ဆိုင်သောကြောင့် ဤအက်ပလီကေးရှင်းမှပြောင်း၍မရပါ။ မကြာသေးမီကအသုံးပြုထားသော အက်ပလီကေးရှင်း သို့မဟုတ် ဝဘ်အင်တာဖေ့စ်ကို အသုံးပြုပါ။ invalid_context: ပံ့ပိုးထား​သော အ​​ကြောင်းအရာ မရှိခြင်း သို့မဟုတ် မမှန်ကန်ခြင်း index: - contexts: '%{contexts} ရှိ စစ်ထုတ်ထားမှုများ' + contexts: "%{contexts} ရှိ စစ်ထုတ်ထားမှုများ" delete: ဖျက်ပါ empty: သင့်တွင် စစ်ထုတ်ထားခြင်းများ မရှိပါ။ - expires_in: '%{distance} တွင် သက်တမ်းကုန်မည်' - expires_on: '%{date} ရက်နေ့တွင် သက်တမ်းကုန်မည်' + expires_in: "%{distance} တွင် သက်တမ်းကုန်မည်" + expires_on: "%{date} ရက်နေ့တွင် သက်တမ်းကုန်မည်" keywords: other: "%{count} အဓိကစကားလုံး" statuses: other: "%{count} ပို့စ်" statuses_long: - other: "တစ်ဦးချင်းပို့စ် %{count} များ ကို ဖျောက်ထားသည်" + other: တစ်ဦးချင်းပို့စ် %{count} များ ကို ဖျောက်ထားသည် title: စစ်ထုတ်ခြင်းများ new: save: စစ်ထုတ်မှုအသစ် သိမ်းပါ @@ -1316,7 +1317,7 @@ my: '86400': ၁ ရက် expires_in_prompt: ဘယ်တော့မှ generate: ဖိတ်ကြားချက်လင့်ခ် ဖန်တီးပါ - invited_by: 'သင့်ကို ဖိတ်ခေါ်ထားသည် -' + invited_by: သင့်ကို ဖိတ်ခေါ်ထားသည် - max_uses: other: "%{count} အသုံးပြုမှုများ" max_uses_prompt: အကန့်အသတ်မဲ့ @@ -1336,8 +1337,8 @@ my: webauthn: လုံခြုံရေးကီးများ description_html: သင်မပြုလုပ်သည့် လုပ်ဆောင်ချက်တွေ့ရှိပါက သင့်စကားဝှက်ကို ပြောင်းလဲပြီး နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ကို အသုံးပြုသင့်ပါသည်။ empty: စစ်မှန်ကြောင်းအထောက်အထားမရရှိနိုင်ပါ - failed_sign_in_html: '%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်ရောက်ခြင်း မအောင်မြင်ပါ' - successful_sign_in_html: '%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်၍ရပါပြီ' + failed_sign_in_html: "%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်ရောက်ခြင်း မအောင်မြင်ပါ" + successful_sign_in_html: "%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်၍ရပါပြီ" title: အထောက်အထားမှတ်တမ်း mail_subscriptions: unsubscribe: @@ -1383,7 +1384,7 @@ my: set_redirect: ပြန်ညွှန်းသတ်မှတ်ပါ warning: backreference_required: အကောင့်အသစ်က ဤအကောင့်ကို ပြန်ကိုးကားရန်အတွက် ဦးစွာ ပြင်ဆင်သတ်မှတ်ရပါမည် - before: 'ဆက်လက်မလုပ်ဆောင်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ -' + before: ဆက်လက်မလုပ်ဆောင်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ - cooldown: ရွှေ့ပြီးပါက နောက်တစ်ကြိမ် ထပ်ရွှေ့ရန် အချိန်စောင့်ရပါမည် disabled_account: နောက်ပိုင်းတွင် သင့်လက်ရှိအကောင့်အား အပြည့်အဝအသုံးပြုနိုင်တော့မည်မဟုတ်သော်လည်း အချက်အလက်ထုတ်ယူခြင်းနှင့် ပြန်လည်အတည်ပြုခြင်းတို့ကို ဆောင်ရွက်နိုင်မည်ဖြစ်သည်။ followers: ဤလုပ်ဆောင်ချက်မှာ စောင့်ကြည့်သူအားလုံးကို လက်ရှိအကောင့်မှ အကောင့်အသစ်သို့ ရွှေ့ပြောင်းခြင်းဖြစ်သည် @@ -1395,7 +1396,7 @@ my: move_handler: carry_blocks_over_text: ဤအသုံးပြုသူသည် သင်ပိတ်ဆို့ထားသော %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။ carry_mutes_over_text: ဤအသုံးပြုသူသည် သင်အသံပိတ်ထားသော %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။ - copy_account_note_text: 'ဤအသုံးပြုသူသည် %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။ ဤသည်မှာ ၎င်းတို့နှင့်ပတ်သက်သော ယခင်မှတ်စုများဖြစ်သည် -' + copy_account_note_text: ဤအသုံးပြုသူသည် %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။ ဤသည်မှာ ၎င်းတို့နှင့်ပတ်သက်သော ယခင်မှတ်စုများဖြစ်သည် - navigation: toggle_menu: မီနူးပြောင်းရန် notification_mailer: @@ -1405,7 +1406,7 @@ my: sign_up: subject: "%{name} က အကောင့်ဖွင့်ထားသည်" favourite: - body: '%{name} က နှစ်သက်ခဲ့သော သင့်ပို့စ် -' + body: "%{name} က နှစ်သက်ခဲ့သော သင့်ပို့စ် -" subject: "%{name} က သင့်ပို့စ်ကို နှစ်သက်ခဲ့သည်" title: နှစ်သက်မှုအသစ်တစ်ခု follow: @@ -1415,17 +1416,17 @@ my: follow_request: action: စောင့်ကြည့်ရန်တောင်းဆိုမှုများကို ပြင်ဆင်ရန် body: "%{name} က သင့်ကို စောင့်ကြည့်ရန် တောင်းဆိုထားသည်" - subject: 'ဆိုင်းငံ့ထားသော စောင့်ကြည့်သူ - %{name}' + subject: ဆိုင်းငံ့ထားသော စောင့်ကြည့်သူ - %{name} title: စောင့်ကြည့်ခွင့်ပြုရန် တောင်းဆိုမှုအသစ် mention: action: စာပြန်ရန် - body: 'သင့်ကို %{name} မှ ဖော်ပြခဲ့သည်-' + body: သင့်ကို %{name} မှ ဖော်ပြခဲ့သည်- subject: သင့်ကို %{name} မှ ဖော်ပြခဲ့သည် title: ဖော်ပြမှုအသစ် poll: - subject: '%{name} ၏ စစ်တမ်းတစ်ခု ပြီးသွားပါပြီ' + subject: "%{name} ၏ စစ်တမ်းတစ်ခု ပြီးသွားပါပြီ" reblog: - body: '%{name} က သင့်ပို့စ်ကို Boost လုပ်ခဲ့သည် -' + body: "%{name} က သင့်ပို့စ်ကို Boost လုပ်ခဲ့သည် -" subject: "%{name} က သင့်ပို့စ်ကို Boost လုပ်ခဲ့သည်" title: Boost အသစ် status: @@ -1435,7 +1436,7 @@ my: notifications: administration_emails: စီမံခန့်ခွဲသူ အီးမေးလ် အသိပေးချက်များ email_events: အီးမေးလ်သတိပေးချက်များအတွက်အကြောင်းအရာများ - email_events_hint: 'အသိပေးချက်များရယူမည့် အစီအစဉ်များကို ရွေးပါ -' + email_events_hint: အသိပေးချက်များရယူမည့် အစီအစဉ်များကို ရွေးပါ - other_settings: အခြားအသိပေးချက်များ၏ သတ်မှတ်ချက်များ number: human: @@ -1452,7 +1453,7 @@ my: description_html: အထောက်အထားစိစစ်ခြင်းအက်ပ်ကို အသုံးပြု၍ နှစ်ဆင့်ခံလုံခြုံရေးစနစ် ဖွင့်ထားပါက အကောင့်ဝင်ရောက်ရန် သင့်ဖုန်းလက်ဝယ်ရှိရန် လိုအပ်မည်ဖြစ်ပြီး ၎င်းသည် သင်ဝင်ရောက်ရန်အတွက် တိုကင်များထုတ်ပေးမည်ဖြစ်သည်။ enable: ဖွင့်ပါ instructions_html: "ဤ QR ကုဒ်ကို Google Authenticator သို့မဟုတ် အလားတူ TOTP အက်ပ်ဖြင့် စကင်န်ဖတ်ပါ။ ယခုအချိန်မှစ၍ ထိုအက်ပ်သည် သင် အကောင့်ဝင်ရောက်သည့်အခါတိုင်း ထည့်သွင်းရမည့်တိုကင်များ ထုတ်ပေးမည်ဖြစ်သည်။" - manual_instructions: 'QR ကုဒ်စကင်န်ဖတ်၍မရပါက ကိုယ်တိုင်ရိုက်ထည့်ရန်လိုအပ်ပြီး ဤနေရာသည် စာရွက်အလွတ်နေရာဖြစ်သည်။' + manual_instructions: QR ကုဒ်စကင်န်ဖတ်၍မရပါက ကိုယ်တိုင်ရိုက်ထည့်ရန်လိုအပ်ပြီး ဤနေရာသည် စာရွက်အလွတ်နေရာဖြစ်သည်။ setup: သတ်မှတ်ရန် wrong_code: ထည့်သွင်းထားသောကုဒ်သည် မမှန်ကန်ပါ။ ဆာဗာအချိန်နှင့် စက်အချိန်မှာ မှန်ကန်ပါသလား။ pagination: @@ -1518,8 +1519,8 @@ my: rss: content_warning: 'အကြောင်းအရာသတိပေးချက် - ' descriptions: - account: '@%{acct} မှ အများမြင်ပို့စ်များ' - tag: '#%{hashtag} ကို တဂ်ထားသော အများမြင်ပို့စ်များ' + account: "@%{acct} မှ အများမြင်ပို့စ်များ" + tag: "#%{hashtag} ကို တဂ်ထားသော အများမြင်ပို့စ်များ" scheduled_statuses: over_daily_limit: ယနေ့အတွက် စီစဉ်ထားသည့် ပို့စ်များ၏ ကန့်သတ်ချက် %{limit} ကို ကျော်လွန်သွားပါပြီ over_total_limit: စီစဉ်ထားသည့် ပို့စ်များ၏ ကန့်သတ်ချက် %{limit} ကို ကျော်လွန်သွားပါပြီ @@ -1596,17 +1597,17 @@ my: attached: audio: other: "%{count} အသံ" - description: 'ပူးတွဲပါ- %{attached}' + description: ပူးတွဲပါ- %{attached} image: other: "%{count} ပုံ" video: other: "%{count} ဗီဒီယို" - boosted_from_html: '%{acct_link} မှ Boost လုပ်ခဲ့သည်' - content_warning: 'အကြောင်းအရာသတိပေးချက် - %{warning}' + boosted_from_html: "%{acct_link} မှ Boost လုပ်ခဲ့သည်" + content_warning: အကြောင်းအရာသတိပေးချက် - %{warning} default_language: လက်ရှိသုံးနေသောဘာသာစကားအတိုင်း ပြပေးပါမည် disallowed_hashtags: - other: 'ခွင့်မပြုထားသော hashtags များပါရှိသည် - %{tags}' - edited_at_html: '%{date} ကို ပြင်ဆင်ပြီးပါပြီ' + other: ခွင့်မပြုထားသော hashtags များပါရှိသည် - %{tags} + edited_at_html: "%{date} ကို ပြင်ဆင်ပြီးပါပြီ" errors: in_reply_not_found: သင် စာပြန်နေသည့်ပို့စ်မှာ မရှိတော့ပါ။ open_in_web: ဝဘ်တွင် ဖွင့်ပါ @@ -1620,7 +1621,7 @@ my: total_people: other: "%{count} ယောက်" total_votes: - other: "မဲအရေအတွက် %{count} မဲ" + other: မဲအရေအတွက် %{count} မဲ vote: မဲပေးမည် show_more: ပိုမိုပြရန် show_newer: ပို့စ်အသစ်များပြရန် @@ -1661,7 +1662,7 @@ my: '15778476': ၆ လ '2629746': ၁ လ '31556952': ၁ နှစ် - '5259492': ၂ လ + '5259492': ၂ လ '604800': ၁ ပတ် '63113904': ၂ နှစ် '7889238': ၃ လ @@ -1709,12 +1710,12 @@ my: user_mailer: appeal_approved: action: သင့်အကောင့်သို့ သွားပါ - explanation: '%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို အတည်ပြုပြီးဖြစ်သည်။ သင့်အကောင့်သည် ကောင်းမွန်သောအနေအထားတွင် ရှိနေပြန်သည်။' - subject: '%{date} တွင် သင့်အယူခံဝင်ချက်ကို အတည်ပြုပြီးပါပြီ' + explanation: "%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို အတည်ပြုပြီးဖြစ်သည်။ သင့်အကောင့်သည် ကောင်းမွန်သောအနေအထားတွင် ရှိနေပြန်သည်။" + subject: "%{date} တွင် သင့်အယူခံဝင်ချက်ကို အတည်ပြုပြီးပါပြီ" title: အယူခံဝင်သည် appeal_rejected: - explanation: '%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို ပယ်ချခဲ့သည်။' - subject: '%{date} တွင် သင့်တင်ပြချက်ကို ပယ်ချခဲ့သည်' + explanation: "%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို ပယ်ချခဲ့သည်။" + subject: "%{date} တွင် သင့်တင်ပြချက်ကို ပယ်ချခဲ့သည်" title: အယူခံကို ပယ်ချခဲ့သည် backup_ready: explanation: သင့် Mastodon အကောင့် အရန်ကူးယူရန် တောင်းဆိုပြီးဖြစ်သည်။ ယခု ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။ @@ -1722,7 +1723,7 @@ my: title: မှတ်တမ်းသိမ်းရန် suspicious_sign_in: change_password: သင်၏ စကားဝှက်ပြောင်းလဲပါ - details: 'ဤသည်မှာ အကောင့်ဝင်ရောက်ခြင်းအတွက် အသေးစိတ်အချက်များဖြစ်သည် -' + details: ဤသည်မှာ အကောင့်ဝင်ရောက်ခြင်းအတွက် အသေးစိတ်အချက်များဖြစ်သည် - explanation: IP လိပ်စာအသစ်တစ်ခုမှနေ၍ သင့်အကောင့်ဝင်ရောက်သည်ကို တွေ့ရှိခဲ့ပါသည်။ further_actions_html: သင် မဟုတ်ပါက သင့်အကောင့်လုံခြုံစေရန်အတွက် %{action} ကို ချက်ချင်းဆောင်ရွက်ပြီး နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ဖွင့်ထားရန် အကြံပြုပါသည်။ subject: သင့်အကောင့်ကို IP လိပ်စာအသစ်တစ်ခုမှ ဝင်ရောက်အသုံးပြုလျက်ရှိသည် @@ -1740,14 +1741,14 @@ my: sensitive: ယခုအချိန်မှစ၍ သင် အပ်လုဒ်လုပ်ထားသော မီဒီယာဖိုင်များအားလုံးကို သတိထားရသောမီဒီယာအဖြစ် အမှတ်အသားပြုပြီး ကလစ်နှိပ်၍သတိပေးချက်နောက်တွင် ဖျောက်ထားပါမည်။ silence: သင့်အကောင့်ကို ဆက်လက်အသုံးပြုနိုင်သော်လည်း သင့်စောင့်ကြည့်သူများသာ ဤဆာဗာတွင် သင့်ပို့စ်များကို မြင်နိုင်မည်ဖြစ်ပြီး အကြောင်းအရာခေါင်းစဉ်အမျိုးမျိုးမှ သင့်ကို ဖယ်ထုတ်ထားနိုင်သည်။ သို့သော် အခြားသူများက သင့်ကို စောင့်ကြည့်နေနိုင်ပါသေးသည်။ suspend: သင့်အကောင့်ကို အသုံးမပြုနိုင်တော့သည့်အပြင် ပရိုဖိုင်နှင့် အခြားအချက်အလက်များကိုလည်း အသုံးပြု၍မရတော့ပါ။ သင့်အချက်အလက်ကို ရက်ပေါင်း ၃၀ ခန့်အတွင်း အပြည့်အဝ မဖယ်ရှားမချင်း အချက်အလက်များ အရန်ကူးယူရန်အတွက် အကောင့်သို့ ဝင်ရောက်နိုင်ပါသေးသည်။ သို့သော် အကောင့်ရပ်ဆိုင်းထားမှုရှောင်လွှဲခြင်းမှ ကာကွယ်ရန်အတွက် အခြေခံအချက်အလက်အချို့ကို ကျွန်ုပ်တို့ ထိန်းသိမ်းထားရပါမည်။ - reason: 'အကြောင်းပြချက် -' - statuses: 'ကိုးကားထားသောပို့စ်များ -' + reason: အကြောင်းပြချက် - + statuses: ကိုးကားထားသောပို့စ်များ - subject: - delete_statuses: '%{acct} ရှိ သင့်ပို့စ်များကို ဖယ်ရှားလိုက်ပါပြီ' + delete_statuses: "%{acct} ရှိ သင့်ပို့စ်များကို ဖယ်ရှားလိုက်ပါပြီ" disable: သင့်အကောင့် %{acct} ကို ပိတ်သိမ်းထားသည် - mark_statuses_as_sensitive: '%{acct} ရှိ သင့်ပို့စ်များကို သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုထားသည်' - none: '%{acct} အတွက် သတိပေးချက်' - sensitive: '%{acct} ရှိ သင့်ပို့စ်များကို ယခုမှစပြီး သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုပါမည်' + mark_statuses_as_sensitive: "%{acct} ရှိ သင့်ပို့စ်များကို သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုထားသည်" + none: "%{acct} အတွက် သတိပေးချက်" + sensitive: "%{acct} ရှိ သင့်ပို့စ်များကို ယခုမှစပြီး သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုပါမည်" silence: သင့်အကောင့် %{acct} ကို ကန့်သတ်ထားသည် suspend: သင့်အကောင့် %{acct} ကို ဆိုင်းငံ့ထားသည် title: @@ -1767,14 +1768,14 @@ my: full_handle: ကိုယ်တိုင်ထိန်းချုပ်နိုင်သည် full_handle_hint: ဤသည်မှာ သင့်သူငယ်ချင်းများကို အခြားဆာဗာတစ်ခုမှ မက်ဆေ့ချ်ပို့နိုင်ကြောင်း သို့မဟုတ် စောင့်ကြည့်နိုင်ကြောင်း အသိပေးပါမည်။ subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။ - title: '%{name} က ကြိုဆိုပါတယ်။' + title: "%{name} က ကြိုဆိုပါတယ်။" users: follow_limit_reached: လူ %{limit} ထက် ပိုပြီး စောင့်ကြည့်၍မရပါ go_to_sso_account_settings: အထောက်အထားပေးသူ၏အကောင့်သတ်မှတ်ချက်များသို့ သွားပါ invalid_otp_token: မမှန်ကန်သော နှစ်ဆင့်ခံလုံခြုံရေးကုဒ် otp_lost_help_html: နှစ်ခုစလုံးကို ဝင်ရောက်ခွင့် ဆုံးရှုံးသွားပါက %{email} နှင့် ဆက်သွယ်နိုင်ပါသည် seamless_external_login: ပြင်ပဝန်ဆောင်မှုမှတစ်ဆင့် အကောင့်ဝင်ထားသောကြောင့် စကားဝှက်နှင့် အီးမေးလ်သတ်မှတ်ချက်များကို မရနိုင်ပါ။ - signed_in_as: 'အဖြစ် အကောင့်ဝင်ခဲ့သည် -' + signed_in_as: အဖြစ် အကောင့်ဝင်ခဲ့သည် - verification: extra_instructions_html: အကြံပြုချက်- သင့်ဝဘ်ဆိုက်ရှိ လင့်ခ်ကို မမြင်နိုင်ပါ။ အရေးကြီးသော အပိုင်းမှာ rel="me" သည် အသုံးပြုသူဖန်တီးထားသော အကြောင်းအရာများဖြင့် ဝဘ်ဆိုက်များတွင် အယောင်ဆောင်ခြင်းကို တားဆီးပေးသည်။ a အစား စာမျက်နှာ၏ ခေါင်းစီးတွင် link တဂ်ကိုပင် သုံးနိုင်သော်လည်း HTML ကို JavaScript မလုပ်ဆောင်ဘဲ အသုံးပြုနိုင်ရပါမည်။ here_is_how: ဘယ်လိုလဲ @@ -1789,7 +1790,7 @@ my: success: လုံခြုံရေးကီး ထည့်ပြီးပါပြီ။ delete: ဖျက်ရန် delete_confirmation: လုံခြုံရေးကီးဖျက်ရန် သေချာပါသလား။ - description_html: လုံခြုံရေးကီးအထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားပါက လုံခြုံရေးကီးများထဲမှ တစ်ခုကို အကောင့်ဝင်ရောက်ရန်အတွက် အသုံးပြုရန်လိုအပ်ပါသည် + description_html: "လုံခြုံရေးကီးအထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားပါက လုံခြုံရေးကီးများထဲမှ တစ်ခုကို အကောင့်ဝင်ရောက်ရန်အတွက် အသုံးပြုရန်လိုအပ်ပါသည်" destroy: error: သင့်လုံခြုံရေးကီးကို ဖျက်ရာတွင် ပြဿနာရှိနေသည်။ ထပ်စမ်းကြည့်ပါ။ success: လုံခြုံရေးကီး ဖျက်ပြီးပါပြီ။ @@ -1798,4 +1799,4 @@ my: not_enabled: WebAuthn ကို သင် မဖွင့်ရသေးပါ not_supported: ဤဘရောက်ဆာသည် လုံခြုံရေးကီးများကို မပံ့ပိုးပါ otp_required: လုံခြုံရေးကီးများကို အသုံးပြုရန်အတွက် နှစ်ဆင့်ခံလုံခြုံရေးစနစ်စိစစ်ခြင်းကို ဦးစွာဖွင့်ပါ။ - registered_on: '%{date} တွင် စာရင်းသွင်းထားသည်' + registered_on: "%{date} တွင် စာရင်းသွင်းထားသည်" diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 8388c509cd9953..3e9d502ae9ad06 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1,3 +1,4 @@ +--- nl: about: about_mastodon_html: 'Het sociale netwerk van de toekomst: geen reclame, geen meekijkende bedrijven, ethisch ontwerp, en gedecentraliseerd! Met Mastodon ben je baas over je eigen gegevens!' @@ -55,7 +56,7 @@ nl: delete: Gegevens verwijderen deleted: Verwijderd demote: Degraderen - destroyed_msg: "De verwijdering van de gegevens van %{username} staat nu in de wachtrij" + destroyed_msg: De verwijdering van de gegevens van %{username} staat nu in de wachtrij disable: Bevriezen disable_sign_in_token_auth: Verificatie met een toegangscode via e-mail uitschakelen disable_two_factor_authentication: 2FA uitschakelen @@ -233,55 +234,55 @@ nl: assigned_to_self_report_html: "%{name} heeft rapportage %{target} aan zichzelf toegewezen" change_email_user_html: "%{name} veranderde het e-mailadres van gebruiker %{target}" change_role_user_html: "%{name} wijzigde de rol van %{target}" - confirm_user_html: "E-mailadres van gebruiker %{target} is door %{name} bevestigd" + confirm_user_html: E-mailadres van gebruiker %{target} is door %{name} bevestigd create_account_warning_html: "%{name} verzond een waarschuwing naar %{target}" create_announcement_html: "%{name} heeft de nieuwe mededeling %{target} aangemaakt" create_canonical_email_block_html: "%{name} blokkeerde e-mail met de hash %{target}" - create_custom_emoji_html: "Nieuwe emoji %{target} is door %{name} geüpload" + create_custom_emoji_html: Nieuwe emoji %{target} is door %{name} geüpload create_domain_allow_html: "%{name} heeft de federatie met het domein %{target} goedgekeurd" - create_domain_block_html: "Domein %{target} is door %{name} geblokkeerd" + create_domain_block_html: Domein %{target} is door %{name} geblokkeerd create_email_domain_block_html: "%{name} heeft het e-maildomein %{target} geblokkeerd" create_ip_block_html: "%{name} maakte regel aan voor IP %{target}" create_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} beëindigd" create_user_role_html: "%{name} maakte de rol %{target} aan" - demote_user_html: "Gebruiker %{target} is door %{name} gedegradeerd" + demote_user_html: Gebruiker %{target} is door %{name} gedegradeerd destroy_announcement_html: "%{name} heeft de mededeling %{target} verwijderd" destroy_canonical_email_block_html: "%{name} deblokkeerde e-mail met de hash %{target}" destroy_custom_emoji_html: "%{name} verwijderde de emoji %{target}" destroy_domain_allow_html: "%{name} heeft de federatie met het domein %{target} afgekeurd" - destroy_domain_block_html: "Domein %{target} is door %{name} gedeblokkeerd" + destroy_domain_block_html: Domein %{target} is door %{name} gedeblokkeerd destroy_email_domain_block_html: "%{name} heeft het e-maildomein %{target} gedeblokkeerd" destroy_instance_html: "%{name} verwijderde het domein %{target} volledig" destroy_ip_block_html: "%{name} verwijderde regel voor IP %{target}" - destroy_status_html: "Bericht van %{target} is door %{name} verwijderd" + destroy_status_html: Bericht van %{target} is door %{name} verwijderd destroy_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} hervat" destroy_user_role_html: "%{name} verwijderde de rol %{target}" - disable_2fa_user_html: "De vereiste tweestapsverificatie voor %{target} is door %{name} uitgeschakeld" - disable_custom_emoji_html: "Emoji %{target} is door %{name} uitgeschakeld" + disable_2fa_user_html: De vereiste tweestapsverificatie voor %{target} is door %{name} uitgeschakeld + disable_custom_emoji_html: Emoji %{target} is door %{name} uitgeschakeld disable_sign_in_token_auth_user_html: "%{name} heeft verificatie met een toegangscode via e-mail uitgeschakeld voor %{target}" - disable_user_html: "Inloggen voor %{target} is door %{name} uitgeschakeld" - enable_custom_emoji_html: "Emoji %{target} is door %{name} ingeschakeld" + disable_user_html: Inloggen voor %{target} is door %{name} uitgeschakeld + enable_custom_emoji_html: Emoji %{target} is door %{name} ingeschakeld enable_sign_in_token_auth_user_html: "%{name} heeft verificatie met een toegangscode via e-mail ingeschakeld voor %{target}" - enable_user_html: "Inloggen voor %{target} is door %{name} ingeschakeld" - memorialize_account_html: "Het account %{target} is door %{name} in een In memoriam veranderd" - promote_user_html: "Gebruiker %{target} is door %{name} gepromoveerd" + enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld + memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd + promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatiemaatregel van %{target} afgewezen" reject_user_html: "%{name} heeft de registratie van %{target} afgewezen" remove_avatar_user_html: "%{name} verwijderde de profielfoto van %{target}" reopen_report_html: "%{name} heeft rapportage %{target} heropend" resend_user_html: "%{name} heeft de bevestigingsmail voor %{target} opnieuw verzonden" - reset_password_user_html: "Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld" + reset_password_user_html: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld resolve_report_html: "%{name} heeft rapportage %{target} opgelost" sensitive_account_html: "%{name} markeerde de media van %{target} als gevoelig" - silence_account_html: "Account %{target} is door %{name} beperkt" - suspend_account_html: "Account %{target} is door %{name} opgeschort" + silence_account_html: Account %{target} is door %{name} beperkt + suspend_account_html: Account %{target} is door %{name} opgeschort unassigned_report_html: "%{name} heeft het toewijzen van rapportage %{target} ongedaan gemaakt" unblock_email_account_html: "%{name} deblokkeerde het e-mailadres van %{target}" unsensitive_account_html: "%{name} markeerde media van %{target} als niet gevoelig" - unsilence_account_html: "Beperking van account %{target} is door %{name} opgeheven" - unsuspend_account_html: "Opschorten van account %{target} is door %{name} opgeheven" + unsilence_account_html: Beperking van account %{target} is door %{name} opgeheven + unsuspend_account_html: Opschorten van account %{target} is door %{name} opgeheven update_announcement_html: "%{name} heeft de mededeling %{target} bijgewerkt" - update_custom_emoji_html: "Emoji %{target} is door %{name} bijgewerkt" + update_custom_emoji_html: Emoji %{target} is door %{name} bijgewerkt update_domain_block_html: "%{name} heeft de domeinblokkade bijgewerkt voor %{target}" update_ip_block_html: "%{name} wijzigde de IP-regel voor %{target}" update_status_html: "%{name} heeft de berichten van %{target} bijgewerkt" @@ -557,7 +558,7 @@ nl: no_ip_block_selected: Er zijn geen IP-regels veranderd, omdat er geen een was geselecteerd title: IP-regels relationships: - title: "Relaties van %{acct}" + title: Relaties van %{acct} relays: add_new: Nieuwe relayserver toevoegen delete: Verwijderen @@ -647,7 +648,7 @@ nl: silence_html: Het account van @%{acct} ernstig beperken, door diens profiel en inhoud alleen zichtbaar te maken aan mensen die dit account al volgen of aan mensen die het account handmatig opzoeken suspend_html: Het account van @%{acct} opschorten, waarmee diens profiel en inhoud niet toegankelijk zijn en het onmogelijk is om interactie te hebben close_report: 'Rapportage #%{id} als opgelost markeren' - close_reports_html: Alle rapportages tegen @%{acct} als opgelost markeren + close_reports_html: "Alle rapportages tegen @%{acct} als opgelost markeren" delete_data_html: Het account en inhoud van @%{acct} over 30 dagen verwijderen, tenzij die in de tussentijd wordt gedeblokkeerd preview_preamble_html: "@%{acct} zal een waarschuwing ontvangen met de volgende inhoud:" record_strike_html: Registreer een overtreding van @%{acct} om je te helpen met het sneller afhandelen van toekomstige overtredingen van dit account @@ -819,7 +820,7 @@ nl: strikes: actions: delete_statuses: "%{name} heeft de berichten van %{target} verwijderd" - disable: "Account %{target} is door %{name} bevroren" + disable: Account %{target} is door %{name} bevroren mark_statuses_as_sensitive: "%{name} markeerde de berichten van %{target} als gevoelig" none: "%{name} verzond een waarschuwing naar %{target}" sensitive: "%{name} markeerde het account van %{target} als gevoelig" @@ -908,7 +909,7 @@ nl: not_discoverable: Gebruiker heeft geen toestemming gegeven om vindbaar te zijn shared_by: one: Een keer gedeeld of als favoriet gemarkeerd - other: '%{friendly_count} keer gedeeld of als favoriet gemarkeerd' + other: "%{friendly_count} keer gedeeld of als favoriet gemarkeerd" title: Trending berichten tags: current_score: Huidige score is %{score} @@ -929,7 +930,7 @@ nl: trendable: Kan onder trends verschijnen trending_rank: 'Trending #%{rank}' usable: Kan worden gebruikt - usage_comparison: '%{today} keer vandaag gebruikt, vergeleken met %{yesterday} keer gisteren' + usage_comparison: "%{today} keer vandaag gebruikt, vergeleken met %{yesterday} keer gisteren" used_by_over_week: one: Door één persoon tijdens de afgelopen week gebruikt other: Door %{count} mensen tijdens de afgelopen week gebruikt @@ -1281,7 +1282,7 @@ nl: order_by: Sorteer op save_changes: Wijzigingen opslaan select_all_matching_items: - one: '%{count} item dat met jouw zoekopdracht overeenkomt selecteren.' + one: "%{count} item dat met jouw zoekopdracht overeenkomt selecteren." other: Alle %{count} items die met jouw zoekopdracht overeenkomen selecteren. today: vandaag validation_errors: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index bcdebd724bbcb2..9f34e5621654a9 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1,9 +1,10 @@ +--- nn: about: about_mastodon_html: 'Framtidas sosiale nettverk: Ingen annonsar, ingen verksemder som overvaker deg, etisk design og desentralisering! Eig idéane dine med Mastodon!' contact_missing: Ikkje sett contact_unavailable: I/T - hosted_on: '%{domain} er vert for Mastodon' + hosted_on: "%{domain} er vert for Mastodon" title: Om accounts: follow: Fylg @@ -646,7 +647,7 @@ nn: mark_as_sensitive_html: Markera dei påtala mediefilene som sensitive silence_html: Sterkt avgrensa korleis @%{acct} kan samhandla ved å gjera brukarprofilen og innhaldet synleg berre for folk som allereie fylgjer brukarkontoen eller søkjer han opp manuelt suspend_html: Stengja brukarkontoen til @%{acct}, slik at brukarprofilen og innhaldet blir utilgjengeleg og umogleg å samhandla med - close_report: 'Marker rapport nr. %{id} som løyst' + close_report: Marker rapport nr. %{id} som løyst close_reports_html: Marker alle rapportane om @%{acct} som løyste delete_data_html: Slett brukarprofilen og innhaldet til@%{acct} om 30 dagar frå no med mindre brukarkontoen blir opna att preview_preamble_html: "@%{acct} vil få ei åtvaring med dette innhaldet:" @@ -1018,7 +1019,7 @@ nn: sensitive_content: Ømtolig innhald application_mailer: notification_preferences: Endr e-post-innstillingane - salutation: "Hei %{name}," + salutation: Hei %{name}, settings: 'Endr e-post-innstillingar: %{link}' unsubscribe: Meld av view: 'Sjå:' diff --git a/config/locales/no.yml b/config/locales/no.yml index 1487ec8738e3bf..dc8151d552c448 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1,6 +1,7 @@ -"no": +--- +'no': about: - about_mastodon_html: 'Mastodon er et sosialt nettverk laget med fri programvare. Et desentralisert alternativ til kommersielle plattformer. Slik kan det unngå risikoene ved å ha et enkelt selskap som monopoliserer din kommunikasjon. Velg en tjener du stoler på — uansett hvilken du velger så kan du kommunisere med alle andre. Alle kan kjøre sin egen Mastodon og delta sømløst i det sosiale nettverket.' + about_mastodon_html: Mastodon er et sosialt nettverk laget med fri programvare. Et desentralisert alternativ til kommersielle plattformer. Slik kan det unngå risikoene ved å ha et enkelt selskap som monopoliserer din kommunikasjon. Velg en tjener du stoler på — uansett hvilken du velger så kan du kommunisere med alle andre. Alle kan kjøre sin egen Mastodon og delta sømløst i det sosiale nettverket. contact_missing: Ikke innstilt contact_unavailable: Ikke tilgjengelig hosted_on: Mastodon driftet på %{domain} diff --git a/config/locales/oc.yml b/config/locales/oc.yml index b7d186ba901930..8145002e5679c6 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -1,6 +1,7 @@ +--- oc: about: - about_mastodon_html: 'Mastodon es un malhum social bastit amb de protocòls liures e gratuits. Es descentralizat coma los corrièls.' + about_mastodon_html: Mastodon es un malhum social bastit amb de protocòls liures e gratuits. Es descentralizat coma los corrièls. contact_missing: Pas parametrat contact_unavailable: Pas disponible hosted_on: Mastodon albergat sus %{domain} @@ -163,7 +164,7 @@ oc: reopen_report: Tornar dobrir lo rapòrt reset_password_user: Reïnicializar lo senhal resolve_report: Resòlver lo rapòrt - silence_account: ' Metre en silenci lo compte' + silence_account: " Metre en silenci lo compte" suspend_account: Suspendre lo compte unassigned_report: Desafectar lo rapòrt unsilence_account: Levar lo silenci del compte @@ -319,7 +320,7 @@ oc: title: Crear una règlas IP novèla title: Règlas IP relationships: - title: "Relacions de %{acct}" + title: Relacions de %{acct} relays: add_new: Ajustar un nòu relai delete: Suprimir @@ -444,7 +445,7 @@ oc: new_report: body: "%{reporter} a senhalat %{target}" body_remote: Qualqu’un de %{domain} senhalèt %{target} - subject: 'Novèl senhalament per %{instance} (#%{id})' + subject: Novèl senhalament per %{instance} (#%{id}) aliases: add_new: Crear un alias remove: Desligar l’alias @@ -690,7 +691,7 @@ oc: sign_up: subject: "%{name} se marquèt" favourite: - body: '%{name} a mes vòstre estatut en favorit :' + body: "%{name} a mes vòstre estatut en favorit :" subject: "%{name} a mes vòstre estatut en favorit" title: Novèl apondut als favorits follow: @@ -704,13 +705,13 @@ oc: title: Novèla demanda d’abonament mention: action: Respondre - body: '%{name} vos a mencionat dins :' - subject: '%{name} vos a mencionat' + body: "%{name} vos a mencionat dins :" + subject: "%{name} vos a mencionat" title: Novèla mencion poll: subject: Un sondatge de %{name} es terminat reblog: - body: '%{name} a tornat partejar vòstre estatut :' + body: "%{name} a tornat partejar vòstre estatut :" subject: "%{name} a tornat partejar vòstre estatut" title: Novèl partatge status: @@ -926,7 +927,7 @@ oc: mastodon-light: Mastodon (Clar) time: formats: - default: "Lo %-d %B de %Y a %Ho%M" + default: Lo %-d %B de %Y a %Ho%M month: "%B de %Y" time: "%H'h'%M" two_factor_authentication: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f7d0ee0b403dbd..3f585863a4dd2f 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1,3 +1,4 @@ +--- pl: about: about_mastodon_html: 'Sieć społecznościowa przyszłości: Bez reklam, bez inwigilacji, zaprojektowana etycznie i zdecentralizowanie! Władaj swoimi danymi z Mastodonem!' @@ -8,9 +9,9 @@ pl: accounts: follow: Obserwuj followers: - one: śledzący few: śledzących many: śledzących + one: śledzący other: obserwujących following: Obserwowanych 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. @@ -20,9 +21,9 @@ pl: pin_errors: following: Musisz obserwować osobę, którą chcesz polecać posts: - one: wpis few: wpisy many: wpisów + one: wpis other: Wpisów posts_tab_heading: Wpisy admin: @@ -59,7 +60,7 @@ pl: delete: Usuń dane deleted: Usunięto demote: Degraduj - destroyed_msg: "Dane %{username} są teraz w kolejce do natychmiastowego usunięcia" + destroyed_msg: Dane %{username} są teraz w kolejce do natychmiastowego usunięcia disable: Dezaktywuj disable_sign_in_token_auth: Wyłącz uwierzytelnianie tokenu e-mail disable_two_factor_authentication: Wyłącz uwierzytelnianie dwuskładnikowe @@ -110,9 +111,9 @@ pl: perform_full_suspension: Zawieś previous_strikes: Poprzednie ostrzeżenia previous_strikes_description_html: - one: To konto ma jedno ostrzeżenie. few: To konto ma %{count} ostrzeżenia. many: To konto ma %{count} ostrzeżeń. + one: To konto ma jedno ostrzeżenie. other: To konto ma %{count} ostrzeżeń. promote: Podnieś uprawnienia protocol: Protokół @@ -280,15 +281,15 @@ pl: resolve_report_html: "%{name} rozwiązał(a) zgłoszenie %{target}" sensitive_account_html: "%{name} oznaczył(a) zawartość multimedialną %{target} jako wrażliwą" silence_account_html: "%{name} wyciszył(a) konto %{target}" - suspend_account_html: "Zawieszono konto %{target} przez %{name}" + suspend_account_html: Zawieszono konto %{target} przez %{name} unassigned_report_html: "%{name} cofnął(-ęła) przypisanie zgłoszenia %{target}" unblock_email_account_html: "%{name} odblokował adres e-mail %{target}" unsensitive_account_html: "%{name} cofnął(-ęła) oznaczenie zawartości multimedialnej %{target} jako wrażliwą" unsilence_account_html: "%{name} cofnął(-ęła) wyciszenie konta %{target}" unsuspend_account_html: "%{name} cofnął(-ęła) zawieszenie konta %{target}" - update_announcement_html: "Zaktualizowane ogłoszenie %{target} przez %{name}" - update_custom_emoji_html: "Zaktualizowane emoji %{target} przez %{name}" - update_domain_block_html: "Zaktualizowano blokadę domeny dla %{target} przez %{name}" + update_announcement_html: Zaktualizowane ogłoszenie %{target} przez %{name} + update_custom_emoji_html: Zaktualizowane emoji %{target} przez %{name} + update_domain_block_html: Zaktualizowano blokadę domeny dla %{target} przez %{name} update_ip_block_html: "%{name} stworzył(a) regułę dla IP %{target}" update_status_html: "%{name} zaktualizował(a) wpis użytkownika %{target}" update_user_role_html: "%{name} zmienił rolę %{target}" @@ -356,24 +357,24 @@ pl: new_users: nowi użytkownicy opened_reports: otwarte zgłoszenia pending_appeals_html: - one: "%{count} oczekujących odwołań" few: "%{count} oczekujące odwołania" many: "%{count} oczekujących odwołań" + one: "%{count} oczekujących odwołań" other: "%{count} oczekujących odwołań" pending_reports_html: - one: "%{count} oczekujące zgłoszenie" few: "%{count} oczekujące raporty" many: "%{count} oczekujących raportów" + one: "%{count} oczekujące zgłoszenie" other: "%{count} oczekujących raportów" pending_tags_html: - one: "%{count} oczekujący hashtag" few: "%{count} oczekujące hashtagi" many: "%{count} oczekujących hashtagów" + one: "%{count} oczekujący hashtag" other: "%{count} oczekujących hashtagów" pending_users_html: - one: "%{count} oczekujący użytkownik" few: "%{count} oczekujących użytkowników" many: "%{count} oczekujących użytkowników" + one: "%{count} oczekujący użytkownik" other: "%{count} oczekujących użytkowników" resolved_reports: zamkniętych zgłoszeń software: Oprogramowanie @@ -439,9 +440,9 @@ pl: email_domain_blocks: add_new: Dodaj nową attempts_over_week: - one: "%{count} próba w ciągu ostatniego tygodnia" few: "%{count} próby w ciągu ostatniego tygodnia" many: "%{count} prób w ciągu ostatniego tygodnia" + one: "%{count} próba w ciągu ostatniego tygodnia" other: "%{count} prób w ciągu ostatniego tygodnia" created_msg: Pomyślnie utworzono blokadę domeny e-mail delete: Usuń @@ -484,15 +485,15 @@ pl: instances: availability: description_html: - one: Jeśli dostarczenie do domeny nie powiedzie się %{count} dzień bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. few: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. many: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. + one: Jeśli dostarczenie do domeny nie powiedzie się %{count} dzień bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. other: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. failure_threshold_reached: Próg niepowodzenia osiągnięty dnia %{date}. failures_recorded: - one: Nieudane próby %{count} dnia. few: Nieudane próby w %{count} różnych dniach. many: Nieudane próby w %{count} różnych dniach. + one: Nieudane próby %{count} dnia. other: Nieudane próby w %{count} różnych dniach. no_failures_recorded: Brak błędów w rejestrze. title: Dostępność @@ -536,9 +537,9 @@ pl: destroyed_msg: Dane z %{domain} są teraz w kolejce do bezpośredniego usunięcia. empty: Nie znaleziono domen. known_accounts: - one: "%{count} znane konto" few: "%{count} znane konta" many: "%{count} znanych kont" + one: "%{count} znane konto" other: "%{count} znane konta" moderation: all: Wszystkie @@ -579,11 +580,11 @@ pl: no_ip_block_selected: Żadna reguła nie została zmieniona, ponieważ żadna nie została wybrana title: Reguły adresów IP relationships: - title: "Relacje %{acct}" + title: Relacje %{acct} relays: add_new: Dodaj nowy delete: Usuń - description_html: Przekaźnik federacji jest pośredniczącym serwerem wymieniającym duże ilości publicznych wpisów pomiędzy serwerami które subskrybują je i publikują na nich. Pomaga to małym i średnim instancją poznawać nową zawartość z Fediwersum, co w innym przypadku wymagałoby od użytkowników ręcznej obserwacji osób z innych serwerów. + description_html: "Przekaźnik federacji jest pośredniczącym serwerem wymieniającym duże ilości publicznych wpisów pomiędzy serwerami które subskrybują je i publikują na nich. Pomaga to małym i średnim instancją poznawać nową zawartość z Fediwersum, co w innym przypadku wymagałoby od użytkowników ręcznej obserwacji osób z innych serwerów." disable: Wyłącz disabled: Wyłączony enable: Włącz @@ -602,9 +603,9 @@ pl: reports: account: notes: - one: "%{count} notatka" few: "%{count} notatki" many: "%{count} notatek" + one: "%{count} notatka" other: "%{count} notatki" action_log: Dziennik zdarzeń action_taken_by: Działanie podjęte przez @@ -687,9 +688,9 @@ pl: roles: add_new: Dodaj rolę assigned_users: - one: "%{count} użytkownik" few: "%{count} użytkowników" many: "%{count} użytkowników" + one: "%{count} użytkownik" other: "%{count} użytkowników" categories: administration: Administracja @@ -703,9 +704,9 @@ pl: everyone: Domyślnie uprawnienia everyone_full_description_html: To jest rola podstawowa wpływająca na wszystkich użytkowników, nawet tych, którzy nie mają przypisanej roli. Wszystkie inne role dziedziczą z niej uprawnienia. permissions_count: - one: "%{count} uprawnienie" few: "%{count} uprawnień" many: "%{count} uprawnień" + one: "%{count} uprawnienie" other: "%{count} uprawnień" privileges: administrator: Administrator @@ -913,9 +914,9 @@ pl: publishers: no_publisher_selected: Żadni publikujcy nie zostali zmienieni, ponieważ żadnych nie wybrano shared_by_over_week: - one: Udostępnione przez jedną osobę w ciągu ostatniego tygodnia few: Udostępnione przez %{count} osoby w ciągu ostatniego tygodnia many: Udostępnione przez %{count} osób w ciągu ostatniego tygodnia + one: Udostępnione przez jedną osobę w ciągu ostatniego tygodnia other: Udostępnione przez %{count} osoby w ciągu ostatniego tygodnia title: Popularne linki usage_comparison: Udostępnione %{today} razy dzisiaj, w porównaniu z %{yesterday} wczoraj @@ -937,9 +938,9 @@ pl: no_status_selected: Żadne popularne wpisy nie zostały zmienione, ponieważ żadnych nie wybrano not_discoverable: Autor nie włączył opcji, by być wyświetlany w katalogu shared_by: - one: Udostępnione lub dodane do ulubionych jednorazowo few: Udostępnione i dodane do ulubionych %{friendly_count} razy many: Udostępnione i dodane do ulubionych %{friendly_count} razy + one: Udostępnione lub dodane do ulubionych jednorazowo other: Udostępnione i dodane do ulubionych %{friendly_count} razy title: Popularne teraz tags: @@ -963,9 +964,9 @@ pl: usable: Może być użyty usage_comparison: Używane %{today} razy dzisiaj, w porównaniu z %{yesterday} wczoraj used_by_over_week: - one: Użyte przez jedną osobę w ciągu ostatniego tygodnia few: Użyte przez %{count} osoby w ciągu ostatniego tygodnia many: Użyte przez %{count} osób w ciągu ostatniego tygodnia + one: Użyte przez jedną osobę w ciągu ostatniego tygodnia other: Użyte przez %{count} osób w ciągu ostatniego tygodnia title: Na czasie trending: Popularne @@ -978,7 +979,7 @@ pl: webhooks: add_new: Dodaj punkt końcowy delete: Usuń - description_html: webhook umożliwia Mastodon dostarczanie powiadomień w czasie rzeczywistym o wybranych wydarzeniach do twojej aplikacji, aby mogła automatycznie wyzwalać reakcje. + description_html: "webhook umożliwia Mastodon dostarczanie powiadomień w czasie rzeczywistym o wybranych wydarzeniach do twojej aplikacji, aby mogła automatycznie wyzwalać reakcje." disable: Wyłącz disabled: Wyłączone edit: Edytuj punkt końcowy @@ -986,9 +987,9 @@ pl: enable: Włącz enabled: Aktywne enabled_events: - one: 1 włączone zdarzenie few: "%{count} włączone zdarzenia" many: "%{count} włączonych zdarzeń" + one: 1 włączone zdarzenie other: "%{count} włączonych zdarzeń" events: Zdarzenia new: Nowy webhook @@ -1017,7 +1018,7 @@ pl: body: Poniżej znajdują się szczegóły dotycząće nowego konta. Możesz przyjąć lub odrzucić to podanie. subject: Nowe konto czeka na przegląd na %{instance} (%{username}) new_report: - body: "Użytkownik %{reporter} zgłosił(a) %{target}" + body: Użytkownik %{reporter} zgłosił(a) %{target} body_remote: Użytkownik instancji %{domain} zgłosił(a) %{target} subject: Nowe zgłoszenie na %{instance} (#%{id}) new_software_updates: @@ -1043,7 +1044,7 @@ pl: remove: Odłącz alias appearance: advanced_web_interface: Zaawansowany interfejs użytkownika - advanced_web_interface_hint: 'Jeśli chcesz użyć pełną szerokość swojego ekranu, zaawansowany interfejs użytkownika pozwala Ci skonfigurować wiele różnych kolumn, by zobaczyć jak najwięcej informacji kiedy tylko chcesz. Strona główna, Powiadomienia, Globalna oś czasu, dowolna ilość list i hasztagów.' + advanced_web_interface_hint: Jeśli chcesz użyć pełną szerokość swojego ekranu, zaawansowany interfejs użytkownika pozwala Ci skonfigurować wiele różnych kolumn, by zobaczyć jak najwięcej informacji kiedy tylko chcesz. Strona główna, Powiadomienia, Globalna oś czasu, dowolna ilość list i hasztagów. animations_and_accessibility: Animacje i dostępność confirmation_dialogs: Dialogi potwierdzenia discovery: Odkrywanie @@ -1280,19 +1281,19 @@ pl: expires_in: Wygasa za %{distance} expires_on: Wygasa %{date} keywords: - one: "%{count} słowo kluczowe" few: "%{count} słowa kluczowe" many: "%{count} słów kluczowych" + one: "%{count} słowo kluczowe" other: "%{count} słów kluczowych" statuses: - one: "%{count} post" few: "%{count} posty" many: "%{count} postów" + one: "%{count} post" other: "%{count} postów" statuses_long: - one: "%{count} ukryty post" few: "%{count} ukryte posty" many: "%{count} ukrytych postów" + one: "%{count} ukryty post" other: "%{count} postów ukrytych" title: Filtry new: @@ -1308,14 +1309,14 @@ pl: generic: all: Wszystkie all_items_on_page_selected_html: + few: "%{count} elementy na tej stronie są wybrane." + many: "%{count} elementów na tej stronie jest wybrane." one: "%{count} element na tej stronie jest wybrany." - few: %{count} elementy na tej stronie są wybrane. - many: %{count} elementów na tej stronie jest wybrane. - other: %{count} elementów na tej stronie jest wybrane. + other: "%{count} elementów na tej stronie jest wybrane." all_matching_items_selected_html: - one: "%{count} element pasujący do Twojego wyszukiwania został wybrany." few: Wszystkie %{count} elementy pasujące do Twojego wyszukiwania zostały wybrane. many: Wszystkie %{count} elementy pasujące do Twojego wyszukiwania zostały wybrane. + one: "%{count} element pasujący do Twojego wyszukiwania został wybrany." other: Wszystkie %{count} elementy pasujące do Twojego wyszukiwania zostały wybrane. cancel: Anuluj changes_saved_msg: Ustawienia zapisane! @@ -1327,15 +1328,15 @@ pl: order_by: Uporządkuj według save_changes: Zapisz zmiany select_all_matching_items: - one: Zaznacz %{count} element pasujący do wyszukiwania. few: Zaznacz wszystkie %{count} elementy pasujące do wyszukiwania. many: Zaznacz wszystkie %{count} elementy pasujące do wyszukiwania. + one: Zaznacz %{count} element pasujący do wyszukiwania. other: Zaznacz wszystkie %{count} elementy pasujące do wyszukiwania. today: dzisiaj validation_errors: - one: Coś jest wciąż nie tak! Przyjrzyj się poniższemu błędowi few: Coś jest wciąż nie tak! Przejrzyj %{count} poniższe błędy many: Coś jest wciąż nie tak! Przejrzyj %{count} poniższych błędów + one: Coś jest wciąż nie tak! Przyjrzyj się poniższemu błędowi other: Coś jest wciąż nie tak! Przejrzyj poniższe błędy (%{count}) imports: errors: @@ -1409,9 +1410,9 @@ pl: generate: Wygeneruj invited_by: 'Zostałeś(-aś) zaproszony(-a) przez:' max_uses: - one: jedno użycie few: "%{count} użycia" many: "%{count} użyć" + one: jedno użycie other: "%{count} użyć" max_uses_prompt: Bez ograniczenia prompt: Wygeneruj odnośniki i udostępnij je innym, aby pozwolić na rejestrację na tym serwerze @@ -1520,10 +1521,10 @@ pl: subject: Ankieta %{name} zakończyła się reblog: body: 'Twój wpis został podbity przez %{name}:' - subject: "Twój wpis został podbity przez %{name}" + subject: Twój wpis został podbity przez %{name} title: Nowe podbicie status: - subject: "Właśnie opublikowano wpis %{name}" + subject: Właśnie opublikowano wpis %{name} update: subject: "%{name} edytował/a wpis" notifications: @@ -1692,28 +1693,28 @@ pl: statuses: attached: audio: - one: "%{count} plik dźwiękowy" few: "%{count} pliki dźwiękowe" many: "%{count} plików dźwiękowych" - other: "pliki dźwiękowe (%{count})" + one: "%{count} plik dźwiękowy" + other: pliki dźwiękowe (%{count}) description: 'Załączono: %{attached}' image: - one: "%{count} obraz" few: "%{count} obrazy" many: "%{count} obrazów" + one: "%{count} obraz" other: "%{count} obrazów" video: - one: "%{count} film" few: "%{count} filmy" many: "%{count} filmów" + one: "%{count} film" other: "%{count} filmów" boosted_from_html: Podbito przez %{acct_link} content_warning: 'Ostrzeżenie o zawartości: %{warning}' default_language: Taki sam jak język interfejsu użytkownika disallowed_hashtags: - one: 'zawiera niedozwolony hashtag: %{tags}' few: 'zawiera niedozwolone hashtagi: %{tags}' many: 'zawiera niedozwolone hashtagi: %{tags}' + one: 'zawiera niedozwolony hashtag: %{tags}' other: 'zawiera niedozwolone hashtagi: %{tags}' edited_at_html: Edytowane %{date} errors: @@ -1727,14 +1728,14 @@ pl: reblog: Nie możesz przypiąć podbicia wpisu poll: total_people: - one: "%{count} osoba" few: "%{count} osoby" many: "%{count} osób" + one: "%{count} osoba" other: "%{count} osoby" total_votes: - one: "%{count} głos" few: "%{count} głosy" many: "%{count} głosy" + one: "%{count} głos" other: "%{count} głosy" vote: Głosuj show_more: Pokaż więcej diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index cd9f18f5d1ae84..114a486e82a4c9 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1,3 +1,4 @@ +--- pt-BR: about: about_mastodon_html: 'A rede social do futuro: Sem anúncios, sem vigilância corporativa, com design ético e muita descentralização! Possua seus próprios dados com o Mastodon!' @@ -55,7 +56,7 @@ pt-BR: delete: Excluir dados deleted: Excluído demote: Rebaixar - destroyed_msg: "Os dados de %{username} estão na fila para serem excluídos em breve" + destroyed_msg: Os dados de %{username} estão na fila para serem excluídos em breve disable: Congelar disable_sign_in_token_auth: Desativar autenticação via token por email disable_two_factor_authentication: Desativar autenticação de dois fatores @@ -557,7 +558,7 @@ pt-BR: no_ip_block_selected: Nenhuma regra de IP foi alterada pois nenhuma foi selecionada title: Regras de IP relationships: - title: "Relações de %{acct}" + title: Relações de %{acct} relays: add_new: Adicionar novo repetidor delete: Excluir @@ -1447,7 +1448,7 @@ pt-BR: sign_up: subject: "%{name} se inscreveu" favourite: - body: '%{name} favoritou sua publicação:' + body: "%{name} favoritou sua publicação:" subject: "%{name} favoritou sua publicação" title: Novo favorito follow: @@ -1461,13 +1462,13 @@ pt-BR: title: Novo seguidor pendente mention: action: Responder - body: '%{name} te mencionou em:' - subject: '%{name} te mencionou' + body: "%{name} te mencionou em:" + subject: "%{name} te mencionou" title: Nova menção poll: subject: Uma enquete por %{name} terminou reblog: - body: '%{name} impulsionou a sua publicação:' + body: "%{name} impulsionou a sua publicação:" subject: "%{name} impulsionou a sua publicação" title: Novo impulso status: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index d6a66f7e864a0e..f4c363324cb872 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1,3 +1,4 @@ +--- pt-PT: about: about_mastodon_html: 'A rede social do futuro: sem publicidade, e sem vigilância empresarial; desenho ético, e descentralizado! Tome posse dos seus dados com o Mastodon!' @@ -55,7 +56,7 @@ pt-PT: delete: Eliminar dados deleted: Eliminada demote: Despromoveu - destroyed_msg: "Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato" + destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato disable: Congelar disable_sign_in_token_auth: Desativar token de autenticação por e-mail disable_two_factor_authentication: Desactivar autenticação por dois factores (2FA) @@ -557,7 +558,7 @@ pt-PT: no_ip_block_selected: Nenhuma regra de IP foi alterada pois nenhuma foi selecionada title: Regras de IP relationships: - title: "Relações de %{acct}" + title: Relações de %{acct} relays: add_new: Adicionar novo repetidor delete: Eliminar @@ -1462,7 +1463,7 @@ pt-PT: mention: action: Responder body: 'Foste mencionado por %{name}:' - subject: '%{name} mencionou-te' + subject: "%{name} mencionou-te" title: Nova menção poll: subject: A sondagem de %{name} encerrou diff --git a/config/locales/ro.yml b/config/locales/ro.yml index ba221be6b6fd47..a0f20d57dccd3b 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -1,3 +1,4 @@ +--- ro: about: about_mastodon_html: 'Rețeaua socială a viitorului: Fără reclame, fără supraveghere corporativă, design etic și descentralizare! Dețineți-vă datele cu Mastodon!' @@ -8,8 +9,8 @@ ro: accounts: follow: Urmărește followers: - one: Urmăritor few: Urmăritori + one: Urmăritor other: De Urmăritori following: Urmăriți instance_actor_flash: Acest cont este un actor virtual folosit pentru a reprezenta serverul în sine și nu un utilizator individual. Acesta este utilizat în scopuri federative şi nu trebuie suspendat. @@ -19,8 +20,8 @@ ro: pin_errors: following: Trebuie să urmăriți deja persoana pe care doriți să o aprobați posts: - one: Postare few: Postări + one: Postare other: De Postări posts_tab_heading: Postări admin: @@ -57,7 +58,7 @@ ro: delete: Ștergere datele deleted: Șters demote: Retrogradează - destroyed_msg: "Datele utilizatorului %{username} sunt acum în așteptare pentru a fi șterse iminent" + destroyed_msg: Datele utilizatorului %{username} sunt acum în așteptare pentru a fi șterse iminent disable: Dezactivează disable_sign_in_token_auth: Dezactivează autentificarea prin token e-mail disable_two_factor_authentication: Dezactivează 2FA @@ -314,7 +315,7 @@ ro: no_ip_block_selected: Nicio regulă IP nu a fost modificată deoarece niciuna nu era selectată title: Reguli IP relationships: - title: "Relațiile lui %{acct}" + title: Relațiile lui %{acct} relays: delete: Șterge disable: Dezactivează @@ -344,7 +345,7 @@ ro: delete: Șterge title: Note reopen: Redeschide raportarea - report: 'Raportare №%{id}' + report: Raportare №%{id} reported_account: Contul raportat reported_by: Raportat de către resolved: Rezolvată @@ -541,8 +542,8 @@ ro: generate: Generează link de invitație invited_by: 'Ai fost invitat de:' max_uses: - one: 1 utilizare few: "%{count} utilizări" + one: 1 utilizare other: "%{count} de utilizări" max_uses_prompt: Fără limită prompt: Generați și împărtășiți link-uri cu alții pentru a acorda acces la acest server @@ -633,14 +634,14 @@ ro: statuses: attached: image: - one: "%{count} imagine" few: "%{count} imagini" + one: "%{count} imagine" other: "%{count} de imagini" boosted_from_html: Impuls de la %{acct_link} content_warning: 'Avertisment privind conținutul: %{warning}' disallowed_hashtags: - one: 'conținea un hashtag nepermis: %{tags}' few: 'conținea aceste hashtag-uri nepermise: %{tags}' + one: 'conținea un hashtag nepermis: %{tags}' other: 'conținea aceste hashtag-uri nepermise: %{tags}' errors: in_reply_not_found: Postarea la care încercați să răspundeți nu pare să existe. @@ -652,12 +653,12 @@ ro: reblog: Un impuls nu poate fi fixat poll: total_people: - one: "%{count} persoană" few: "%{count} persoane" + one: "%{count} persoană" other: "%{count} de persoane" total_votes: - one: "%{count} vot" few: "%{count} voturi" + one: "%{count} vot" other: "%{count} de voturi" vote: Votează show_more: Arată mai mult diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b228402ac5a634..f9e526c4e8edf4 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1,3 +1,4 @@ +--- ru: about: about_mastodon_html: 'Социальная сеть будущего: никакой рекламы, слежки корпорациями, этичный дизайн и децентрализация! С Mastodon ваши данные под вашим контролем.' @@ -8,9 +9,9 @@ ru: accounts: follow: Подписаться followers: - one: подписчик few: подписчика many: подписчиков + one: подписчик other: подписчиков following: подписки instance_actor_flash: Эта учетная запись - виртуальный пользователь, используемый для представления самого сервера, а не отдельного пользователя. Она используется для организационных целей и не может быть заморожена. @@ -20,9 +21,9 @@ ru: pin_errors: following: Чтобы порекомендовать кого-то, надо сначала на них подписаться posts: - one: Пост few: поста many: статусов + one: Пост other: статусов posts_tab_heading: Посты admin: @@ -59,7 +60,7 @@ ru: delete: Удалить данные deleted: Удалён demote: Разжаловать - destroyed_msg: "Данные %{username} поставлены в очередь на удаление" + destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам disable_two_factor_authentication: Отключить 2FA @@ -90,7 +91,7 @@ ru: media_attachments: Медиафайлы memorialize: Сделать мемориалом memorialized: Превращён в памятник - memorialized_msg: '%{username} успешно превращён в памятник' + memorialized_msg: "%{username} успешно превращён в памятник" moderation: active: Действующие all: Все @@ -110,9 +111,9 @@ ru: perform_full_suspension: Блокировка previous_strikes: Предыдущие замечания previous_strikes_description_html: - one: У этой учётной записи одно замечание. few: У этой учётной записи %{count} замечания. many: У этой учётной записи %{count} замечаний. + one: У этой учётной записи одно замечание. other: У этой учетной записи %{count} замечание. promote: Повысить protocol: Протокол @@ -356,24 +357,24 @@ ru: new_users: новые пользователи opened_reports: жалоб открыто pending_appeals_html: - one: "%{count} ожидает апелляции" few: "%{count} ожидают аппеляции" many: "%{count} ожидают апелляции" - other: "Ожидают апелляции: %{count}" + one: "%{count} ожидает апелляции" + other: 'Ожидают апелляции: %{count}' pending_reports_html: - one: "%{count} ожидающий отчет" few: "%{count} ожидающих отчета" many: "%{count} ожидающих отчетов" + one: "%{count} ожидающий отчет" other: "%{count} ожидающих отчетов" pending_tags_html: - one: "%{count} ожидающий хэштег" few: "%{count} ожидающих хэштега" many: "%{count} ожидающих хэштегов" + one: "%{count} ожидающий хэштег" other: "%{count} ожидающих хэштегов" pending_users_html: - one: "%{count} ожидающий пользователь" few: "%{count} ожидающих пользователя" many: "%{count} ожидающих пользователей" + one: "%{count} ожидающий пользователь" other: "%{count} ожидающих пользователей" resolved_reports: жалоб решено software: Программное обеспечение @@ -439,9 +440,9 @@ ru: email_domain_blocks: add_new: Добавить новую attempts_over_week: - one: "%{count} попытка за последнюю неделю" few: "%{count} попытки за последнюю неделю" many: "%{count} попыток за последнюю неделю" + one: "%{count} попытка за последнюю неделю" other: "%{count} попыток регистрации за последнюю неделю" created_msg: E-mail домен внесён в список блокировки delete: Удалить @@ -484,15 +485,15 @@ ru: instances: availability: description_html: - one: Если доставка в домен завершается сбоем %{count} день, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. few: Если доставка в домен завершается сбоем %{count} дня, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. many: Если доставка в домен завершается сбоем %{count} дней, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. + one: Если доставка в домен завершается сбоем %{count} день, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. other: Если доставка в домен завершается сбоем на протяжении %{count} различных дней, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. failure_threshold_reached: Порог отказа достиг %{date}. failures_recorded: - one: Попытки неудачны %{count} день. few: Попытки неудачны уже %{count} дня. many: Попытки неудачны уже %{count} дней. + one: Попытки неудачны %{count} день. other: Попытки неудачны уже %{count} дней. no_failures_recorded: Сбоев в записи нет. title: Доступность @@ -536,9 +537,9 @@ ru: destroyed_msg: Данные для домена %{domain} поставлены в очередь на удаление. empty: Домены не найдены. known_accounts: - one: "%{count} известная учётная запись" few: "%{count} известные учётные записи" many: "%{count} известных учётных записей" + one: "%{count} известная учётная запись" other: "%{count} известная учётная запись" moderation: all: Все @@ -579,11 +580,11 @@ ru: no_ip_block_selected: Не было изменено ни одного IP правила, так как не было выбрано ни одного title: IP правила relationships: - title: "Связи %{acct}" + title: Связи %{acct} relays: add_new: Добавить ретранслятор delete: Удалить - description_html: Федеративный ретранслятор – это промежуточный сервер, который передаёт большие объёмы публичных постов между серверами, которые подписываются и публикуют туда. Это может помочь небольшим и средним серверам находить записи со всей федерации, ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов. + description_html: "Федеративный ретранслятор – это промежуточный сервер, который передаёт большие объёмы публичных постов между серверами, которые подписываются и публикуют туда. Это может помочь небольшим и средним серверам находить записи со всей федерации, ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов." disable: Отключить disabled: Отключено enable: Включить @@ -602,9 +603,9 @@ ru: reports: account: notes: - one: "%{count} заметка" few: "%{count} заметки" many: "%{count} заметок" + one: "%{count} заметка" other: "%{count} заметок" action_log: Журнал аудита action_taken_by: 'Действие предпринято:' @@ -650,7 +651,7 @@ ru: quick_actions_description_html: 'Выберите действие или прокрутите вниз, чтобы увидеть контент с жалобой:' remote_user_placeholder: удаленный пользователь из %{instance} reopen: Переоткрыть жалобу - report: 'Жалоба №%{id}' + report: Жалоба №%{id} reported_account: Учётная запись нарушителя reported_by: Отправитель жалобы resolved: Решённые @@ -687,9 +688,9 @@ ru: roles: add_new: Добавить роль assigned_users: - one: "%{count} пользователь" few: "%{count} пользователя" many: "%{count} пользователей" + one: "%{count} пользователь" other: "%{count} пользователей" categories: administration: Администрация @@ -703,9 +704,9 @@ ru: everyone: Разрешения по умолчанию everyone_full_description_html: Это базовая роль, касающаяся всех пользователей, даже тех, кто не имеет назначенной роли. Все другие роли наследуют разрешения от нее. permissions_count: - one: "%{count} разрешение" few: "%{count} разрешения" many: "%{count} разрешений" + one: "%{count} разрешение" other: "%{count} разрешений" privileges: administrator: Администратор @@ -913,9 +914,9 @@ ru: publishers: no_publisher_selected: Ничего не изменилось, так как ни один издатель не был выбран shared_by_over_week: - one: Поделился один человек за последнюю неделю few: Поделилось %{count} человека за последнюю неделю many: Поделилось %{count} человек за последнюю неделю + one: Поделился один человек за последнюю неделю other: Поделился %{count} человек за последнюю неделю title: Актуальные ссылки usage_comparison: Поделились %{today} раз сегодня, по сравнению с %{yesterday} вчера @@ -937,9 +938,9 @@ ru: no_status_selected: Тенденции не были изменены, так как ни одна запись не была выбрана not_discoverable: Автор решил не раскрывать себя shared_by: - one: Поделились или добавили в избранное один раз few: Поделились или добавили в избранное %{friendly_count} раза many: Поделились или добавили в избранное %{friendly_count} раз + one: Поделились или добавили в избранное один раз other: Поделились или добавили в избранное %{friendly_count} раз title: Популярные посты tags: @@ -963,9 +964,9 @@ ru: usable: Может использоваться usage_comparison: Использовано %{today} сегодня, для сравнения вчера %{yesterday} used_by_over_week: - one: За последнюю неделю использовал один человек few: За последнюю неделю использовало %{count} человека many: За последнюю неделю использовало %{count} человек + one: За последнюю неделю использовал один человек other: За последнюю неделю использовал %{count} человек title: Популярное trending: Популярное @@ -978,7 +979,7 @@ ru: webhooks: add_new: Добавить конечную точку delete: Удалить - description_html: Вебхуки позволяют Mastodon отправлять вашим приложениям уведомления в реальном времени о выбранных происходящих событиях, а они могут обрабатывать их в автоматическом режиме. + description_html: "Вебхуки позволяют Mastodon отправлять вашим приложениям уведомления в реальном времени о выбранных происходящих событиях, а они могут обрабатывать их в автоматическом режиме." disable: Отключить disabled: Отключено edit: Редактировать вебхук @@ -986,9 +987,9 @@ ru: enable: Включить enabled: Активен enabled_events: - one: '%{count} событие включено' few: "%{count} события включено" many: "%{count} событий включено" + one: "%{count} событие включено" other: "%{count} событий включено" events: События new: Новый вебхук @@ -1280,20 +1281,20 @@ ru: expires_in: Истекает через %{distance} expires_on: Истекает %{date} keywords: - one: "%{count} ключевое слово" few: "%{count} ключевых слова" many: "%{count} ключевых слов" + one: "%{count} ключевое слово" other: "%{count} ключевых слов" statuses: - one: "%{count} пост" few: "%{count} поста" many: "%{count} постов" - other: "Постов: %{count}" + one: "%{count} пост" + other: 'Постов: %{count}' statuses_long: - one: "Скрыт %{count} отдельный пост" - few: "Скрыто %{count} отдельных поста" - many: "Скрыто %{count} отдельных постов" - other: "Скрыто отдельных постов: %{count}" + few: Скрыто %{count} отдельных поста + many: Скрыто %{count} отдельных постов + one: Скрыт %{count} отдельный пост + other: 'Скрыто отдельных постов: %{count}' title: Фильтры new: save: Сохранить новый фильтр @@ -1308,14 +1309,14 @@ ru: generic: all: Любой all_items_on_page_selected_html: + few: "%{count} элемента выбрано на странице." + many: "%{count} элементов выбрано на странице." one: "%{count} элемент выбран на странице." - few: %{count} элемента выбрано на странице. - many: %{count} элементов выбрано на странице. other: Все %{count} элементов выбраны на странице. all_matching_items_selected_html: - one: "Выбран %{count} элемент, соответствующий вашему запросу." few: Выбрано %{count} элемента, соответствующих вашему запросу. many: Выбрано %{count} элементов, соответствующих вашему запросу. + one: Выбран %{count} элемент, соответствующий вашему запросу. other: Выбраны все %{count} элементов, соответствующих вашему запросу. cancel: Отмена changes_saved_msg: Изменения успешно сохранены! @@ -1327,15 +1328,15 @@ ru: order_by: Сортировка save_changes: Сохранить изменения select_all_matching_items: - one: Выберите %{count} предмет, совпадающий вашему поисковому запросу. few: Выберите %{count} предмета, совпадающих вашему поисковому запросу. many: Выберите %{count} предметов, совпадающих вашему поисковому запросу. + one: Выберите %{count} предмет, совпадающий вашему поисковому запросу. other: Выберите все %{count} предмет(-ов), совпадающий(-их) вашему поисковому запросу. today: сегодня validation_errors: - one: Что-то здесь не так! Пожалуйста, прочитайте об ошибке ниже few: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже many: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже + one: Что-то здесь не так! Пожалуйста, прочитайте об ошибке ниже other: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже imports: errors: @@ -1409,9 +1410,9 @@ ru: generate: Сгенерировать invited_by: 'Вас пригласил(а):' max_uses: - one: '%{count} раз' few: "%{count} раза" many: "%{count} раз" + one: "%{count} раз" other: "%{count} раза" max_uses_prompt: Без ограничения prompt: Создавайте и делитесь ссылками с другими, чтобы предоставить им доступом к этому узлу. @@ -1499,7 +1500,7 @@ ru: sign_up: subject: "%{name} зарегистрирован" favourite: - body: '%{name} добавил(а) ваш пост в избранное:' + body: "%{name} добавил(а) ваш пост в избранное:" subject: "%{name} добавил(а) ваш пост в избранное" title: Понравившийся статус follow: @@ -1509,12 +1510,12 @@ ru: follow_request: action: Управление запросами на подписку body: "%{name} отправил(а) вам запрос на подписку" - subject: '%{name} хочет подписаться на вас' + subject: "%{name} хочет подписаться на вас" title: Новый запрос на подписку mention: action: Ответить body: 'Вас упомянул(а) %{name} в:' - subject: '%{name} упомянул(а) вас' + subject: "%{name} упомянул(а) вас" title: Новое упоминание poll: subject: Опрос %{name} завершился @@ -1692,28 +1693,28 @@ ru: statuses: attached: audio: - one: "%{count} аудиозапись" few: "%{count} аудиозаписи" many: "%{count} аудиозаписей" + one: "%{count} аудиозапись" other: "%{count} аудиозаписи" description: 'Вложение: %{attached}' image: - one: "%{count} изображение" few: "%{count} изображения" many: "%{count} изображений" + one: "%{count} изображение" other: "%{count} изображений" video: - one: "%{count} видео" few: "%{count} видео" many: "%{count} видео" + one: "%{count} видео" other: "%{count} видео" boosted_from_html: Продвижение польз. %{acct_link} content_warning: 'Спойлер: %{warning}' default_language: Тот же, что язык интерфейса disallowed_hashtags: - one: 'содержался запрещённый хэштег: %{tags}' few: 'содержались запрещённые хэштеги: %{tags}' many: 'содержались запрещённые хэштеги: %{tags}' + one: 'содержался запрещённый хэштег: %{tags}' other: 'содержались запрещённые хэштеги: %{tags}' edited_at_html: Редактировано %{date} errors: @@ -1727,14 +1728,14 @@ ru: reblog: Нельзя закрепить продвинутый пост poll: total_people: - one: "%{count} человек" few: "%{count} человека" many: "%{count} человек" + one: "%{count} человек" other: "%{count} человек" total_votes: - one: "%{count} голос" few: "%{count} голоса" many: "%{count} голосов" + one: "%{count} голос" other: "%{count} голосов" vote: Голосовать show_more: Развернуть @@ -1861,7 +1862,7 @@ ru: delete_statuses: Опубликованные вами с учётной записи %{acct} посты были удалены disable: Ваша учётная запись %{acct} заморожена mark_statuses_as_sensitive: Ваши сообщения в %{acct} были отмечены как деликатные - none: '%{acct} вынесено предупреждение' + none: "%{acct} вынесено предупреждение" sensitive: Ваши сообщения в %{acct} будут отмечены с этого момента как деликатные silence: На учётную запись %{acct} наложены ограничения suspend: Ваша учётная запись %{acct} была заблокирована diff --git a/config/locales/sc.yml b/config/locales/sc.yml index eeee9e5f557ec9..fa7603f2b18bf9 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1,3 +1,4 @@ +--- sc: about: about_mastodon_html: 'Sa rete sotziale de su benidore: sena publitzidade, sena vigilàntzia corporativa, disinnu èticu e detzentralizatzione! Sias mere de is datos tuos cun Mastodon!' @@ -47,7 +48,7 @@ sc: delete: Cantzella datos deleted: Cantzelladu demote: Degrada - destroyed_msg: "Is datos de %{username} sunt a sa coa pro èssere cantzellados luego" + destroyed_msg: Is datos de %{username} sunt a sa coa pro èssere cantzellados luego disable: Disativa disable_two_factor_authentication: Disativa 2FA disabled: Disativadu @@ -212,7 +213,7 @@ sc: silence_account_html: "%{name} at postu su contu de %{target} a sa muda" suspend_account_html: "%{name} at suspèndidu su contu de %{target}" unassigned_report_html: "%{name} at bogadu s'assignatzione de s'informe %{target}" - unsensitive_account_html: "%{name} at bogadu sa marcadura \"sensìbile\" a s'elementu multimediale de %{target}" + unsensitive_account_html: '%{name} at bogadu sa marcadura "sensìbile" a s''elementu multimediale de %{target}' unsilence_account_html: "%{name} at ativadu is notìficas pro su contu de %{target}" unsuspend_account_html: "%{name} at bogadu sa suspensione de su contu de %{target}" update_announcement_html: "%{name} at atualizadu s'annùntziu %{target}" @@ -364,7 +365,7 @@ sc: no_ip_block_selected: Peruna règula IP est istada mudada dae chi non nd'as seletzionadu title: Règulas IP relationships: - title: "relatziones de %{acct}" + title: relatziones de %{acct} relays: add_new: Agiunghe unu ripetidore nou delete: Cantzella @@ -471,7 +472,7 @@ sc: new_report: body: "%{reporter} at sinnaladu %{target}" body_remote: Una persone de su domìniu %{domain} at sinnaladu %{target} - subject: 'Informe nou pro %{instance} (#%{id})' + subject: Informe nou pro %{instance} (#%{id}) aliases: add_new: Crea unu nomìngiu created_msg: Nomìngiu creadu. Immoe podes cumintzare a tramudare dae su contu betzu. @@ -728,7 +729,7 @@ sc: copy_account_note_text: 'Custa persone s''est tramudada dae %{acct}, custas sunt is notas antepostas tuas chi ddi pertocant:' notification_mailer: favourite: - body: '%{name} at marcadu comente a preferidu s''istadu tuo:' + body: "%{name} at marcadu comente a preferidu s'istadu tuo:" subject: "%{name} at marcadu comente a preferidu s'istadu tuo" title: Preferidu nou follow: @@ -742,13 +743,13 @@ sc: title: Rechesta de sighidura noa mention: action: Risponde - body: '%{name} t''at mentovadu in:' - subject: '%{name} t''at mentovadu' + body: "%{name} t'at mentovadu in:" + subject: "%{name} t'at mentovadu" title: Mèntovu nou poll: subject: Su sondàgiu de %{name} est acabadu reblog: - body: '%{name} at cumpartzidu s''istadu tuo:' + body: "%{name} at cumpartzidu s'istadu tuo:" subject: "%{name} at cumpartzidu s'istadu tuo" title: Cumpartzidura noa status: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index 38b71090a32d28..2199c5dbfdd04e 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1,3 +1,4 @@ +--- sco: about: about_mastodon_html: 'The social network o wir future: Nae adverts, nae corporate surveillance; ethical design, an decentralization! Ain yer ain data wi Mastodon!' @@ -881,7 +882,7 @@ sco: new_report: body: "%{reporter} haes clyped on %{target}" body_remote: Somebody fae %{domain} haes clyped on %{target} - subject: 'New coype fir %{instance} (#%{id})' + subject: New coype fir %{instance} (#%{id}) new_trends: body: 'The follaein items need luiked ower afore they kin get displayit publicly:' new_trending_links: diff --git a/config/locales/si.yml b/config/locales/si.yml index e9393e5c9acff6..2c2a8ae8245229 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,3 +1,4 @@ +--- si: about: about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, සංස්ථානික අවේක්‍ෂණ නැත, යහපතට නිර්මිතයි සහ විමධ්‍යගතයි! මාස්ටඩන් සමඟ ඔබගේ දත්ත අයිතිව තබාගන්න!' @@ -59,7 +60,7 @@ si: email_status: වි-තැපෑලෙහි තත්වය enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත - enabled_msg: '%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත' + enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" followers: අනුගාමිකයින් header: ශීර්ෂය inbox_url: එන ලිපි URL @@ -105,8 +106,8 @@ si: rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" remove_avatar: ප්‍රතිරූපය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න - removed_avatar_msg: '%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී' - removed_header_msg: '%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී' + removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" + removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" resend_confirmation: already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත reset: නැවත සකසන්න @@ -135,12 +136,12 @@ si: suspension_reversible_hint_html: ගිණුම අත්හිටුවා ඇති අතර, දත්ත සම්පූර්ණයෙන්ම %{date}දින ඉවත් කරනු ලැබේ. එතෙක් කිසිදු අයහපත් ප්‍රතිඵලයකින් තොරව ගිණුම යථා තත්ත්වයට පත් කළ හැක. ඔබට ගිණුමේ සියලුම දත්ත වහාම ඉවත් කිරීමට අවශ්‍ය නම්, ඔබට එය පහතින් කළ හැක. title: ගිණුම් unblock_email: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න - unblocked_email_msg: '%{username}ගේ විද්‍යුත් තැපැල් ලිපිනය අවහිර කිරීම සාර්ථකව ඉවත් කරන ලදී' + unblocked_email_msg: "%{username}ගේ විද්‍යුත් තැපැල් ලිපිනය අවහිර කිරීම සාර්ථකව ඉවත් කරන ලදී" unconfirmed_email: තහවුරු නොකළ ඊමේල් undo_sensitized: බල සංවේදී අහෝසි කරන්න undo_silenced: සීමාව අහෝසි කරන්න undo_suspension: අත්හිටුවීම අහෝසි කරන්න - unsilenced_msg: '%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී' + unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" unsubscribe: දායක නොවන්න unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" username: පරිශ්‍රීලක නාමය @@ -212,7 +213,7 @@ si: create_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවැත්වීය" demote_user_html: "%{name} පහත හෙලන ලද පරිශීලක %{target}" destroy_announcement_html: "%{name} මකා දැමූ නිවේදනය %{target}" - destroy_domain_allow_html: "වසම %{target}සමඟ %{name} අවසර නොදුන් සම්මේලනය" + destroy_domain_allow_html: වසම %{target}සමඟ %{name} අවසර නොදුන් සම්මේලනය destroy_domain_block_html: "%{name} අවහිර නොකළ වසම %{target}" destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" @@ -224,7 +225,7 @@ si: disable_user_html: "%{name} පරිශීලක %{target}සඳහා අබල කළ පිවිසුම" enable_custom_emoji_html: "%{name} සක්‍රීය ඉමොජි %{target}" enable_sign_in_token_auth_user_html: "%{name} %{target}විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කර ඇත" - enable_user_html: "පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම" + enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" promote_user_html: "%{name} උසස් පරිශීලක %{target}" reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" @@ -258,7 +259,7 @@ si: title: නව නිවේදනය publish: ප්‍රකාශ කරන්න published_msg: නිවේදනය සාර්ථකව ප්‍රකාශයට පත් කරන ලදි! - scheduled_for: '%{time}සඳහා සැලසුම් කර ඇත' + scheduled_for: "%{time}සඳහා සැලසුම් කර ඇත" scheduled_msg: නිවේදනය නිකුත් කිරීමට නියමිතයි! title: නිවේදන unpublish: ප්‍රකාශනය ඉවත් කරන්න @@ -298,7 +299,7 @@ si: updated_msg: ඉමොජි සාර්ථකව යාවත්කාලීන කරන ලදී! upload: උඩුගත කරන්න dashboard: - active_users: ක්රියාකාරී පරිශීලකයන් + active_users: සක්‍රිය පරිශ්‍රීලකයින් interactions: අන්තර්ක්රියා media_storage: මාධ්‍ය ආචයනය new_users: නව පරිශ්‍රීලකයින් @@ -360,8 +361,8 @@ si: email_domain_blocks: add_new: අලුතින් එකතු කරන්න attempts_over_week: - one: "පසුගිය සතිය පුරා %{count} උත්සාහයක්" - other: "පසුගිය සතියේ ලියාපදිංචි වීමේ උත්සාහයන් %{count} ක්" + one: පසුගිය සතිය පුරා %{count} උත්සාහයක් + other: පසුගිය සතියේ ලියාපදිංචි වීමේ උත්සාහයන් %{count} ක් created_msg: විද්‍යුත් තැපැල් වසම සාර්ථකව අවහිර කරන ලදී delete: මකන්න dns: @@ -374,7 +375,7 @@ si: title: නව විද්‍යුත් තැපැල් වසම අවහිර කරන්න no_email_domain_block_selected: කිසිවක් තෝරා නොගත් බැවින් විද්‍යුත් තැපැල් වසම් වාරණ කිසිවක් වෙනස් කර නැත resolved_dns_records_hint_html: ඩොමේන් නාමය පහත දැක්වෙන MX වසම් වලට විසඳයි, ඒවා අවසානයේ ඊමේල් පිළිගැනීම සඳහා වගකිව යුතුය. MX වසමක් අවහිර කිරීම දෘශ්‍ය වසම් නාමය වෙනස් වුවද, එකම MX වසම භාවිතා කරන ඕනෑම විද්‍යුත් තැපැල් ලිපිනයකින් ලියාපදිංචි වීම අවහිර කරයි. ප්‍රධාන විද්‍යුත් තැපැල් සපයන්නන් අවහිර නොකිරීමට ප්‍රවේශම් වන්න. - resolved_through_html: '%{domain}හරහා විසඳා ඇත' + resolved_through_html: "%{domain}හරහා විසඳා ඇත" title: අවහිර කළ වි-තැපැල් වසම් follow_recommendations: description_html: "නව පරිශීලකයින්ට රසවත් අන්තර්ගතයන් ඉක්මනින් සොයා ගැනීමට උපකාර වන නිර්දේශ අනුගමනය කරන්න. පෞද්ගලීකරණය කළ පසු විපරම් නිර්දේශ සැකසීමට තරම් පරිශීලකයෙකු අන් අය සමඟ අන්තර් ක්‍රියා කර නොමැති විට, ඒ වෙනුවට මෙම ගිණුම් නිර්දේශ කෙරේ. දී ඇති භාෂාවක් සඳහා ඉහළම මෑත කාලීන නියැලීම් සහ ඉහළම දේශීය අනුගාමික සංඛ්‍යාව සහිත ගිණුම් මිශ්‍රණයකින් ඒවා දෛනික පදනමින් නැවත ගණනය කෙරේ." @@ -435,7 +436,7 @@ si: empty: වසම් කිසිවක් හමු නොවීය. known_accounts: one: "%{count} දන්නා ගිණුම්" - other: "දන්නා ගිණුම් %{count} ක්" + other: දන්නා ගිණුම් %{count} ක් moderation: all: සියල්ල limited: සීමා සහිතයි @@ -709,7 +710,7 @@ si: not_listable: යෝජනා නොවනු ඇත not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත not_usable: භාවිතා කළ නොහැක - peaked_on_and_decaying: '%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී' + peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" title: ප්‍රවණතා හැෂ් ටැග් trendable: ප්රවණතා යටතේ පෙනී සිටිය හැක trending_rank: 'නැඹුරු #%{rank}' @@ -758,8 +759,8 @@ si: subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) new_report: body: "%{reporter} %{target}වාර්තා කර ඇත" - body_remote: '%{domain} සිට යමෙක් %{target}වාර්තා කර ඇත' - subject: '%{instance} සඳහා නව වාර්තාව (#%{id})' + body_remote: "%{domain} සිට යමෙක් %{target}වාර්තා කර ඇත" + subject: "%{instance} සඳහා නව වාර්තාව (#%{id})" new_trends: body: 'පහත අයිතම ප්‍රසිද්ධියේ ප්‍රදර්ශනය කිරීමට පෙර සමාලෝචනයක් අවශ්‍ය වේ:' new_trending_links: @@ -770,7 +771,7 @@ si: no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' title: ප්‍රවණතා හැෂ් ටැග් - subject: '%{instance}හි සමාලෝචනය සඳහා නව ප්‍රවණතා' + subject: "%{instance}හි සමාලෝචනය සඳහා නව ප්‍රවණතා" aliases: add_new: අන්වර්ථ නාමයක් සාදන්න created_msg: නව අන්වර්ථ නාමයක් සාර්ථකව නිර්මාණය කරන ලදී. ඔබට දැන් පැරණි ගිණුමෙන් මාරුවීම ආරම්භ කළ හැක. @@ -790,9 +791,9 @@ si: guide_link_text: පරිවර්තකයින්ට දායක වීමට හැකිය. sensitive_content: සංවේදී අන්තර්ගත application_mailer: - notification_preferences: ඊමේල් මනාප වෙනස් කරන්න + notification_preferences: වි-තැපැල් අභිප්‍රේත වෙනස් කරන්න salutation: "%{name}," - settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' + settings: 'වි-තැපැල් අභිප්‍රේත වෙනස් කරන්න: %{link}' view: 'දැක්ම:' view_profile: පැතිකඩ බලන්න view_status: ලිපිය බලන්න @@ -944,7 +945,7 @@ si: noscript_html: මාස්ටඩන් වියමන යෙදුම භාවිතා කිරීමට ජාවාස්ක්‍රිප්ට් සබල කරන්න. ඊට අමතරව, ඔබගේ වේදිකාව සඳහා වන නිසග යෙදුමක් අත්හදා බලන්න. existing_username_validator: not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය - not_found_multiple: '%{usernames}සොයා ගැනීමට නොහැකි විය' + not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය @@ -978,7 +979,7 @@ si: deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. invalid_context: කිසිවක් හෝ වලංගු නොවන සන්දර්භයක් සපයා නැත index: - contexts: '%{contexts}හි පෙරහන්' + contexts: "%{contexts}හි පෙරහන්" delete: මකන්න empty: ඔබ සතුව පෙරහන් නැත. expires_in: "%{distance} කින් ඉකුත් වේ" @@ -1069,8 +1070,8 @@ si: webauthn: ආරක්ෂක යතුරු description_html: ඔබ හඳුනා නොගත් ක්‍රියාකාරකම් ඔබ දුටුවහොත්, ඔබේ මුරපදය වෙනස් කිරීම සහ ද්වි-සාධක සත්‍යාපනය සක්‍රීය කිරීම සලකා බලන්න. empty: සත්‍යාපන ඉතිහාසයක් නොමැත - failed_sign_in_html: '%{ip} (%{browser}) සිට %{method} සමඟ අසාර්ථක පුරනය වීමේ උත්සාහය' - successful_sign_in_html: '%{ip} (%{browser}) සිට %{method} සමඟ සාර්ථක පුරනය වීම' + failed_sign_in_html: "%{ip} (%{browser}) සිට %{method} සමඟ අසාර්ථක පුරනය වීමේ උත්සාහය" + successful_sign_in_html: "%{ip} (%{browser}) සිට %{method} සමඟ සාර්ථක පුරනය වීම" title: සත්‍යාපන ඉතිහාසය media_attachments: validations: @@ -1392,11 +1393,11 @@ si: appeal_approved: action: ඔබගේ ගිණුමට යන්න explanation: ඔබ %{appeal_date} දින ඉදිරිපත් කළ %{strike_date} හි ඔබේ ගිණුමට එරෙහි වර්ජනයේ අභියාචනය අනුමත කර ඇත. ඔබගේ ගිණුම නැවත වරක් හොඳ තත්වයක පවතී. - subject: '%{date} සිට ඔබගේ අභියාචනය අනුමත කර ඇත' + subject: "%{date} සිට ඔබගේ අභියාචනය අනුමත කර ඇත" title: අභියාචනය අනුමත කර ඇත appeal_rejected: - explanation: '%{strike_date} දින ඔබේ ගිණුමට එරෙහිව ඔබ %{appeal_date} දින ඉදිරිපත් කළ වර්ජනයේ අභියාචනය ප්‍රතික්ෂේප කර ඇත.' - subject: '%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත' + explanation: "%{strike_date} දින ඔබේ ගිණුමට එරෙහිව ඔබ %{appeal_date} දින ඉදිරිපත් කළ වර්ජනයේ අභියාචනය ප්‍රතික්ෂේප කර ඇත." + subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! @@ -1404,11 +1405,11 @@ si: title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: change_password: මුරපදය වෙනස් කරන්න - details: 'පුරනය වීමේ විස්තර මෙන්න:' - explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. - further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. - subject: ඔබගේ ගිණුම නව IP ලිපිනයකින් ප්‍රවේශ වී ඇත - title: නව පුරනය වීමක් + details: 'ප්‍රවේශයට අදාළ විස්තර:' + explanation: ඔබගේ ගිණුමට නව අ.ජා.කෙ. (IP) ලිපිනයකින් ප්‍රවේශයක් අනාවරණය වී ඇත. + further_actions_html: මේ ඔබ නොවේ නම්, වහාම %{action}. ඔබගේ ගිණුම සුරක්‍ෂිතව තබා ගැනීමට ද්වි-සාධකය සබල කරන්න. + subject: ඔබගේ ගිණුමට නව අ.ජා.කෙ. (IP) ලිපිනයකින් ප්‍රවේශ වී ඇත + title: නව ප්‍රවේශයක් warning: appeal: අභියාචනයක් ඉදිරිපත් කරන්න appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. diff --git a/config/locales/simple_form.af.yml b/config/locales/simple_form.af.yml index ae83acf1113358..6c87a7a636bf7a 100644 --- a/config/locales/simple_form.af.yml +++ b/config/locales/simple_form.af.yml @@ -1,3 +1,4 @@ +--- af: simple_form: hints: diff --git a/config/locales/simple_form.an.yml b/config/locales/simple_form.an.yml index 5193990f62d812..f354e5ba8258c0 100644 --- a/config/locales/simple_form.an.yml +++ b/config/locales/simple_form.an.yml @@ -1,3 +1,4 @@ +--- an: simple_form: hints: @@ -297,4 +298,4 @@ an: title: sessions: webauthn: Utilice una d'as suyas claus de seguranza pa iniciar sesión - 'yes': 'Ell' + 'yes': Ell diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index fb5036d21789d4..92e181a8ed3f8d 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -1,3 +1,4 @@ +--- ar: simple_form: hints: @@ -320,7 +321,7 @@ ar: events: الأحداث المفعلة template: قالب الحمولة url: الرابط التشعبّي URL لنقطة النهاية - 'no': 'لا' + 'no': لا not_recommended: غير مستحسن overridden: مُتجاوَز recommended: موصى بها @@ -330,4 +331,4 @@ ar: title: sessions: webauthn: استخدم أحد مفاتيح الأمان الخاصة بك لتسجيل الدخول - 'yes': 'نعم' + 'yes': نعم diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index d2b2bbb1de5d4e..4ffc4bd1662b5b 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -1,3 +1,4 @@ +--- ast: simple_form: hints: @@ -149,7 +150,7 @@ ast: must_be_following: Bloquiar los avisos de los perfiles que nun sigues must_be_following_dm: Bloquiar los mensaxes direutos de los perfiles que nun sigues invite_request: - text: '¿Por qué quies xunite?' + text: "¿Por qué quies xunite?" ip_block: comment: Comentariu ip: IP @@ -181,9 +182,9 @@ ast: position: Prioridá webhook: events: Eventos activos - 'no': 'Non' + 'no': Non not_recommended: Nun s'aconseya recommended: Aconséyase required: mark: "*" - 'yes': 'Sí' + 'yes': Sí diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index ee6157cadcb04b..1ed6c80848829c 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -1,3 +1,4 @@ +--- be: simple_form: hints: @@ -320,7 +321,7 @@ be: events: Актыўныя падзеі template: Шаблон карыснай нагрузкі url: URL-адрас канцавога пункту - 'no': 'Не' + 'no': Не not_recommended: Не рэкамендавана overridden: Перавызначана recommended: Рэкамендуем @@ -330,4 +331,4 @@ be: title: sessions: webauthn: Выкарыстайце адзін са сваіх ключоў бяспекі для ўваходу - 'yes': 'Так' + 'yes': Так diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index b390e4c245489b..d576da71c65c4c 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -1,3 +1,4 @@ +--- bg: simple_form: hints: @@ -320,7 +321,7 @@ bg: events: Включване на събития template: Шаблон за полезен товар url: URL адрес на крайната точка - 'no': 'Не' + 'no': Не not_recommended: Непрепоръчително overridden: Претоварено recommended: Препоръчва се @@ -330,4 +331,4 @@ bg: title: sessions: webauthn: Употребете един от ключовете си за сигурност, за да влезете - 'yes': 'Да' + 'yes': Да diff --git a/config/locales/simple_form.bn.yml b/config/locales/simple_form.bn.yml index ea05dfdbfe2505..607e6bd8e0697e 100644 --- a/config/locales/simple_form.bn.yml +++ b/config/locales/simple_form.bn.yml @@ -1,3 +1,4 @@ +--- bn: simple_form: hints: diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml index 7dd7e3effde49f..09fe1f6d1d30c2 100644 --- a/config/locales/simple_form.br.yml +++ b/config/locales/simple_form.br.yml @@ -1,3 +1,4 @@ +--- br: simple_form: hints: @@ -71,9 +72,9 @@ br: role: Roll user_role: name: Anv - 'no': 'Ket' + 'no': Ket recommended: Erbedet required: mark: "*" text: rekis - 'yes': 'Ya' + 'yes': Ya diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 3a76a7421395e8..12a6ac1fe88153 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -1,3 +1,4 @@ +--- ca: simple_form: hints: @@ -330,4 +331,4 @@ ca: title: sessions: webauthn: Usa una de les teves claus de seguretat per a iniciar sessió - 'yes': 'Sí' + 'yes': Sí diff --git a/config/locales/simple_form.ckb.yml b/config/locales/simple_form.ckb.yml index 0c5f19183e0735..a6110e20348f01 100644 --- a/config/locales/simple_form.ckb.yml +++ b/config/locales/simple_form.ckb.yml @@ -1,3 +1,4 @@ +--- ckb: simple_form: hints: @@ -184,7 +185,7 @@ ckb: name: هەشتاگ trendable: ڕێگەبدە ئەم هەشتاگە لە نووسراوەی بەرچاوکراو نیسان بدرێت usable: ڕێگەبدە بە توتەکان بۆ بەکارهێنانی ئەم هەشتاگە - 'no': 'نە' + 'no': نە recommended: پێشنیارکراوە required: mark: "*" @@ -192,4 +193,4 @@ ckb: title: sessions: webauthn: یەکێک لە کلیلەکانی پاراستن بەکاربهێنە بۆ چوونە ژوورەوە - 'yes': 'بەڵێ' + 'yes': بەڵێ diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 4b8e00bb5e08e0..fd6f595e919c6d 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -1,3 +1,4 @@ +--- co: simple_form: hints: @@ -188,7 +189,7 @@ co: name: Hashtag trendable: Auturizà stu hashtag à esse vistu in e tendenze usable: Auturizà i statuti à utilizà stu hashtag - 'no': 'Nò' + 'no': Nò recommended: Ricumandati required: mark: "*" @@ -196,4 +197,4 @@ co: title: sessions: webauthn: Utilizà una chjave di sicurità per cunnettassi - 'yes': 'Ié' + 'yes': Ié diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 010335ed91e379..dff937809856ab 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -1,3 +1,4 @@ +--- cs: simple_form: hints: @@ -300,7 +301,7 @@ cs: events: Zapnuté události template: Šablona payloadu url: URL koncového bodu - 'no': 'Ne' + 'no': Ne not_recommended: Nedoporučuje se recommended: Doporučeno required: @@ -309,4 +310,4 @@ cs: title: sessions: webauthn: K přihlášení použijte jeden z Vašich bezpečnostních klíčů - 'yes': 'Ano' + 'yes': Ano diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index ebd590b8a7a27e..ddc1b1b9353c6b 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -1,3 +1,4 @@ +--- cy: simple_form: hints: @@ -320,7 +321,7 @@ cy: events: Digwyddiadau wedi'u galluogi template: Templed prif lwyth url: URL diweddbwynt - 'no': 'Na' + 'no': Na not_recommended: Heb ei argymell overridden: Wedi'i gwrth-wneud recommended: Argymhellwyd @@ -330,4 +331,4 @@ cy: title: sessions: webauthn: Defnyddiwch un o'ch allweddi diogelwch i fewngofnodi - 'yes': 'Ie' + 'yes': Ie diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 5b8430560c0aa7..0d86b2bc8d26a7 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -1,3 +1,4 @@ +--- da: simple_form: hints: @@ -320,7 +321,7 @@ da: events: Aktive begivenheder template: Payload skabelon url: Endepunkts-URL - 'no': 'Nej' + 'no': Nej not_recommended: Ikke anbefalet overridden: Tilsidesat recommended: Anbefalet @@ -330,4 +331,4 @@ da: title: sessions: webauthn: Brug en af dine sikkerhedskoder til indlogning - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 1711d4dc34b52d..fcf92e29f433d8 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -1,3 +1,4 @@ +--- de: simple_form: hints: @@ -320,7 +321,7 @@ de: events: Aktivierte Ereignisse template: Nutzdaten-Vorlage url: Endpunkt-URL - 'no': 'Nein' + 'no': Nein not_recommended: Nicht empfohlen overridden: Überschrieben recommended: Empfohlen @@ -330,4 +331,4 @@ de: title: sessions: webauthn: Verwende einen deiner Sicherheitsschlüssel zum Anmelden - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 7083a8bfccb19c..dc140a199fc941 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -1,3 +1,4 @@ +--- el: simple_form: hints: @@ -293,7 +294,7 @@ el: webhook: events: Ενεργοποιημένα συμβάντα url: Endpoint URL - 'no': 'Όχι' + 'no': Όχι not_recommended: Δεν προτείνεται recommended: Προτείνεται required: @@ -302,4 +303,4 @@ el: title: sessions: webauthn: Χρησιμοποιείστε ένα από τα κλειδιά ασφαλείας σας για να συνδεθείτε - 'yes': 'Ναι' + 'yes': Ναι diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 5274af246fb7ac..f0c18d1128b676 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -1,3 +1,4 @@ +--- en-GB: simple_form: hints: diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index de7de5a28bcc66..3504b3953791b9 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -1,3 +1,4 @@ +--- eo: simple_form: hints: @@ -302,7 +303,7 @@ eo: events: Ŝaltitaj eventoj template: Utilŝarĝa ŝablono url: Finpunkto-URL - 'no': 'Ne' + 'no': Ne not_recommended: Nerekomendita recommended: Rekomendita required: @@ -311,4 +312,4 @@ eo: title: sessions: webauthn: Uzi unu el viaj sekurecaj ŝlosiloj por ensaluti - 'yes': 'Jes' + 'yes': Jes diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index feef92d43440c5..9b52ece34e0346 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -1,3 +1,4 @@ +--- es-AR: simple_form: hints: @@ -271,7 +272,7 @@ es-AR: invite: comment: Comentar invite_request: - text: '¿Por qué querés unirte?' + text: "¿Por qué querés unirte?" ip_block: comment: Comentario ip: Dirección IP @@ -330,4 +331,4 @@ es-AR: title: sessions: webauthn: Usá una de tus llaves de seguridad para iniciar sesión - 'yes': 'Sí' + 'yes': Sí diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 4a79314825c9df..932ed6c59aa7c3 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -1,3 +1,4 @@ +--- es-MX: simple_form: hints: @@ -271,7 +272,7 @@ es-MX: invite: comment: Comentar invite_request: - text: '¿Por qué quiere unirse usted?' + text: "¿Por qué quiere unirse usted?" ip_block: comment: Comentario ip: IP @@ -330,4 +331,4 @@ es-MX: title: sessions: webauthn: Utilice una de sus claves de seguridad para iniciar sesión - 'yes': 'Sí' + 'yes': Sí diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index ae497b6f3ea09b..997f09bf08f8a6 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -1,3 +1,4 @@ +--- es: simple_form: hints: @@ -271,7 +272,7 @@ es: invite: comment: Comentar invite_request: - text: '¿Por qué quiere unirse usted?' + text: "¿Por qué quiere unirse usted?" ip_block: comment: Comentario ip: IP @@ -330,4 +331,4 @@ es: title: sessions: webauthn: Utilice una de sus claves de seguridad para iniciar sesión - 'yes': 'Sí' + 'yes': Sí diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 6b60428592a81c..b5a80da98126e4 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -1,3 +1,4 @@ +--- et: simple_form: hints: @@ -320,7 +321,7 @@ et: events: Lubatud sündmused template: Manuse mall url: Lõpp-punkti URL - 'no': 'Ei' + 'no': Ei not_recommended: Pole soovitatav overridden: Ülekirjutatud recommended: Soovituslik @@ -330,4 +331,4 @@ et: title: sessions: webauthn: Kasuta sisenemiseks ühte turvavõtmeist - 'yes': 'Jah' + 'yes': Jah diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index c5e2776e385fe6..6f2bbfd9695df2 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -1,3 +1,4 @@ +--- eu: simple_form: hints: @@ -320,7 +321,7 @@ eu: events: Gertaerak gaituta template: Karga txantiloia url: Amaiera-puntuaren URLa - 'no': 'Ez' + 'no': Ez not_recommended: Ez gomendatua overridden: Gainidatzita recommended: Aholkatua @@ -330,4 +331,4 @@ eu: title: sessions: webauthn: Erabili zure segurtasun gakoetako bat saioa hasteko - 'yes': 'Bai' + 'yes': Bai diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 6b132dc3151f57..676eb192ee8c2f 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -1,3 +1,4 @@ +--- fa: simple_form: hints: @@ -302,7 +303,7 @@ fa: webhook: events: رویدادهای به کار افتاده url: نشانی نقطهٔ پایانی - 'no': 'خیر' + 'no': خیر not_recommended: پیشنهاد نشده overridden: پایمال recommended: توصیه می‌شود @@ -312,4 +313,4 @@ fa: title: sessions: webauthn: برای ورود از یکی از کلیدهای امنیتیتان استفاده کنید - 'yes': 'بله' + 'yes': بله diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index e69527c64ee207..6c8875327bee31 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -1,3 +1,4 @@ +--- fi: simple_form: hints: @@ -24,7 +25,7 @@ fi: types: disable: Estä käyttäjää käyttämästä tiliään, mutta älä poista tai piilota sen sisältöä. none: Käytä tätä lähettääksesi varoituksen käyttäjälle käynnistämättä mitään muita toimintoja. - sensitive: Pakota kaikki tämän käyttäjän mediatiedostot arkaluontoisiksi. + sensitive: Pakota kaikki tämän käyttäjän mediatiedostot arkaluonteisiksi. silence: Estä käyttäjää lähettämästä viestejä julkisesti, piilota hänen viestinsä ja ilmoituksensa ihmisiltä, jotka eivät seuraa häntä. Sulkee kaikki tämän tilin raportit. suspend: Estä kaikki vuorovaikutus tältä -tai tälle tilille ja poista sen kaikki sisältö. Päätös voidaan peruuttaa 30 päivän aikana. Sulkee kaikki raportit tätä tiliä vasten. warning_preset_id: Valinnainen. Voit silti lisätä mukautetun tekstin esiasetuksen loppuun @@ -42,7 +43,7 @@ fi: bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja eikä sitä ehkä valvota context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana - current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus + current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjänimi digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana email: Sinulle lähetetään vahvistussähköposti header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px @@ -77,15 +78,15 @@ fi: form_admin_settings: activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä backups_retention_period: Säilytä luodut arkistot määritetyn määrän päiviä. - bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien suositusten yläpuolelle. - closed_registrations_message: Näkyy, kun ilmoittautuminen on suljettu - content_cache_retention_period: Viestit muilta palvelimilta poistetaan määritetyn määrän päiviä jälkeen, kun arvo on asetettu positiiviseksi. Tämä voi olla peruuttamatonta. + bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seuraamissuositusten yläpuolelle. + closed_registrations_message: Näkyy, kun rekisteröityminen on suljettu + content_cache_retention_period: Kaikki julkaisut ja tehostukset muilta palvelimilta poistetaan, kun määritelty määrä päiviä on kulunut. Osaa julkaisuista voi olla mahdoton palauttaa. Kaikki julkaisuihin liittyvät kirjanmerkit, suosikit ja tehostukset menetetään, eikä niitä voi palauttaa. custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa. - mascot: Ohittaa kuvituksen edistyneessä käyttöliittymässä. + mascot: Ohittaa kuvituksen edistyneessä selainkäyttöliittymässä. media_cache_retention_period: Ladatut mediatiedostot poistetaan määritetyn määrän päiviä jälkeen, kun arvo on positiivinen ja ladataan uudelleen pyynnöstä. - peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja liittoutumisesta yleisellä tasolla. + peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja federoinnista yleisellä tasolla. profile_directory: Profiilihakemisto lueteloi kaikki käyttäjät, jotka ovat ilmoittaneet olevansa löydettävissä. - require_invite_text: Kun kirjautuminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” teksti syötetään pakolliseksi eikä vapaaehtoiseksi + require_invite_text: Kun rekisteröityminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” -tekstikentästä pakollinen vapaaehtoisen sijaan site_contact_email: Kuinka ihmiset voivat tavoittaa sinut oikeudellisissa tai tukikysymyksissä. site_contact_username: Miten ihmiset voivat tavoittaa sinut Mastodonissa. site_extended_description: Kaikki lisätiedot, jotka voivat olla hyödyllisiä kävijöille ja käyttäjille. Voidaan jäsentää Markdown-syntaksilla. @@ -95,10 +96,10 @@ fi: status_page_url: URL-osoite sivulle, jonka kautta tämän palvelimen tila voidaan ongelmatilanteissa tarkastaa theme: Teema, jonka uloskirjautuneet vierailijat ja uudet käyttäjät näkevät. thumbnail: Noin 2:1 kuva näytetään palvelimen tietojen rinnalla. - timeline_preview: Uloskirjautuneet vierailijat voivat selata uusimpia julkisia viestejä, jotka ovat saatavilla palvelimella. + timeline_preview: Uloskirjautuneet vierailijat voivat selata uusimpia julkisia julkaisuja, jotka ovat saatavilla palvelimella. trendable_by_default: Ohita suositun sisällön manuaalinen tarkistus. Yksittäisiä kohteita voidaan edelleen poistaa jälkikäteen. trends: Trendit osoittavat, mitkä julkaisut, aihetunnisteet ja uutiset ovat saamassa vetoa palvelimellasi. - trends_as_landing_page: Näytä vierailijoille ja uloskirjautuneille käyttäjille suosittu sisältö palvelininstanssin kuvaustekstin sijaan. Edellytyksenä on, että suosittu sisältö -ominaisuus on käytössä. + trends_as_landing_page: Näytä vierailijoille ja uloskirjautuneille käyttäjille suosittua sisältöä palvelimen kuvauksen sijaan. Edellyttää, että trendit on otettu käyttöön. form_challenge: current_password: Olet menossa suojatulle alueelle imports: @@ -108,7 +109,7 @@ fi: ip_block: comment: Valinnainen. Muista miksi lisäsit tämän säännön. expires_in: IP-osoitteet ovat rajallinen resurssi, joskus niitä jaetaan ja vaihtavat usein omistajaa. Tästä syystä epämääräisiä IP-lohkoja ei suositella. - ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia alueita käyttämällä CIDR-syntaksia. Varo, että et lukitse itseäsi! + ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia alueita käyttämällä CIDR-syntaksia. Varo, että et lukitse itseäsi ulos! severities: no_access: Estä pääsy kaikkiin resursseihin sign_up_block: Uudet kirjautumiset eivät ole mahdollisia @@ -117,7 +118,7 @@ fi: rule: text: Kuvaile sääntöä tai vaatimusta tämän palvelimen käyttäjille. Yritä pitää se lyhyenä ja yksinkertaisena sessions: - otp: 'Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia.' + otp: Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia. webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä. settings: indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa. @@ -128,9 +129,9 @@ fi: chosen_languages: Kun valittu, vain valituilla kielillä kirjoitetut julkaisut näkyvät julkisilla aikajanoilla role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on user_role: - color: Väri, jota käytetään roolin koko käyttöliittymässä, RGB heksamuodossa + color: Väri, jota käytetään roolille kaikkialla käyttöliittymässä, RGB-heksadesimaalimuodossa highlighted: Tämä tekee roolista julkisesti näkyvän - name: Roolin julkinen nimi, jos rooli on asetettu näytettäväksi mekkinä + name: Roolin julkinen nimi, jos rooli on asetettu näytettäväksi merkkinä permissions_as_keys: Käyttäjillä, joilla on tämä rooli, on käyttöoikeus... position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: @@ -139,7 +140,7 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - discoverable: Nosta profiili ja julkaisut esille löytämisalgoritmeissa + discoverable: Pidä profiiliasi ja julkaisujasi esillä löytämisalgoritmeissa fields: name: Nimike value: Sisältö @@ -147,9 +148,9 @@ fi: show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: - acct: Vanhan tilin käyttäjätunnus + acct: Vanhan tilin käyttäjänimi account_migration: - acct: Uuden tilin käyttäjätunnus + acct: Uuden tilin käyttäjänimi account_warning_preset: text: Esiasetettu teksti title: Nimi @@ -162,8 +163,8 @@ fi: disable: Poista kirjautuminen käytöstä none: Älä tee mitään sensitive: Arkaluonteinen - silence: Hiljennä - suspend: Poista käytöstä ja tuhoa käyttäjätunnuksen tiedot peruuttamattomasti + silence: Rajoita + suspend: Jäädytä warning_preset_id: Käytä varoitusmallia announcement: all_day: Koko päivän kestävä tapahtuma @@ -224,9 +225,9 @@ fi: severity: Vakavuus sign_in_token_attempt: Turvakoodi title: Nimi - type: Tuontilaji + type: Tuontityyppi username: Käyttäjänimi - username_or_email: Käyttäjänimi tai sähköposti + username_or_email: Käyttäjänimi tai sähköpostiosoite whole_word: Koko sana email_domain_block: with_dns_records: Sisällytä toimialueen MX tietueet ja IP-osoite @@ -237,10 +238,10 @@ fi: hide: Piilota kokonaan warn: Piilota ja näytä varoitus form_admin_settings: - activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta rajapinnassa + activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta ohjelmointirajapinnassa backups_retention_period: Käyttäjän arkiston säilytysaika bootstrap_timeline_accounts: Suosittele aina näitä tilejä uusille käyttäjille - closed_registrations_message: Mukautettu viesti, kun kirjautumisia ei ole saatavilla + closed_registrations_message: Mukautettu viesti, kun rekisteröityminen ei ole saatavilla content_cache_retention_period: Sisällön välimuistin säilytysaika custom_css: Mukautettu CSS mascot: Mukautettu maskotti (legacy) @@ -249,10 +250,10 @@ fi: profile_directory: Ota profiilihakemisto käyttöön registrations_mode: Kuka voi rekisteröityä require_invite_text: Vaadi syy liittyä - show_domain_blocks: Näytä domainestot - show_domain_blocks_rationale: Näytä miksi verkkotunnukset on estetty + show_domain_blocks: Näytä verkkotunnusten estot + show_domain_blocks_rationale: Näytä, miksi verkkotunnukset on estetty site_contact_email: Ota yhteyttä sähköpostilla - site_contact_username: Kontaktin käyttäjänimi + site_contact_username: Yhteyshenkilön käyttäjänimi site_extended_description: Laajennettu kuvaus site_short_description: Palvelimen kuvaus site_terms: Tietosuojakäytäntö @@ -260,10 +261,10 @@ fi: status_page_url: Tilasivun URL-osoite theme: Oletusteema thumbnail: Palvelimen pikkukuva - timeline_preview: Salli todentamaton pääsy julkiselle aikajanalle + timeline_preview: Salli todentamaton pääsy julkisille aikajanoille trendable_by_default: Salli trendit ilman ennakkotarkastusta - trends: Trendit käyttöön - trends_as_landing_page: Käytä suosittua sisältöä aloitussivuna + trends: Ota trendit käyttöön + trends_as_landing_page: Käytä trendejä aloitussivuna interactions: must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa @@ -277,7 +278,7 @@ fi: ip: IP-osoite severities: no_access: Estä pääsy - sign_up_block: Estä kirjautumiset + sign_up_block: Estä rekisteröitymiset sign_up_requires_approval: Rajoita rekisteröitymisiä severity: Sääntö notification_emails: @@ -312,7 +313,7 @@ fi: time_zone: Aikavyöhyke user_role: color: Merkin väri - highlighted: Näyttä rooli merkkinä käyttäjäprofiileissa + highlighted: Näytä rooli merkkinä käyttäjäprofiileissa name: Nimi permissions_as_keys: Oikeudet position: Prioriteetti @@ -320,7 +321,7 @@ fi: events: Tapahtumat käytössä template: Hyötykuormapohja url: Päätepisteen URL - 'no': 'Ei' + 'no': Ei not_recommended: Ei suositella overridden: Ohitettu recommended: Suositeltu @@ -330,4 +331,4 @@ fi: title: sessions: webauthn: Käytä jotakin suojausavainta kirjautuaksesi sisään - 'yes': 'Kyllä' + 'yes': Kyllä diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index 5b7ee1a2194dfd..e4d87e1786a9ea 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -1,3 +1,4 @@ +--- fo: simple_form: hints: @@ -320,7 +321,7 @@ fo: events: Virknar hendingar template: Farmaformur url: Endapunkts-URLur - 'no': 'Nei' + 'no': Nei not_recommended: Ikki viðmælt overridden: Ógildað recommended: Viðmælt @@ -330,4 +331,4 @@ fo: title: sessions: webauthn: Brúka ein av tínum trygdarlyklum at rita inn - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.fr-QC.yml b/config/locales/simple_form.fr-QC.yml index 78de5908eb0cf4..7a95a1c882a171 100644 --- a/config/locales/simple_form.fr-QC.yml +++ b/config/locales/simple_form.fr-QC.yml @@ -1,3 +1,4 @@ +--- fr-QC: simple_form: hints: @@ -320,7 +321,7 @@ fr-QC: events: Événements activés template: Modèle de charge utile url: URL du point de terminaison - 'no': 'Non' + 'no': Non not_recommended: Non recommandé overridden: Surchargé recommended: Recommandé @@ -330,4 +331,4 @@ fr-QC: title: sessions: webauthn: Utilisez l'une de vos clés de sécurité pour vous connecter - 'yes': 'Oui' + 'yes': Oui diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 71c46706f5f60f..5a74facb7a24b8 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -1,3 +1,4 @@ +--- fr: simple_form: hints: @@ -320,7 +321,7 @@ fr: events: Événements activés template: Modèle de payload url: URL du point de terminaison - 'no': 'Non' + 'no': Non not_recommended: Non recommandé overridden: Surchargé recommended: Recommandé @@ -330,4 +331,4 @@ fr: title: sessions: webauthn: Utilisez l'une de vos clés de sécurité pour vous connecter - 'yes': 'Oui' + 'yes': Oui diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index a84e839ef64ecf..474d858382a468 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -1,3 +1,4 @@ +--- fy: simple_form: hints: @@ -320,7 +321,7 @@ fy: events: Ynskeakele eveneminten template: Payload-sjabloan url: Einpunt-URL - 'no': 'Nee' + 'no': Nee not_recommended: Net oanrekommandearre overridden: Oerskreaun recommended: Oanrekommandearre @@ -330,4 +331,4 @@ fy: title: sessions: webauthn: Brûk ien fan jo befeiligingskaaien om oan te melden - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 5cb947c7bf8230..3597544ce3a623 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -1,3 +1,4 @@ +--- ga: simple_form: hints: diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 065a921069d090..f567866c3e783a 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -1,3 +1,4 @@ +--- gd: simple_form: hints: @@ -14,7 +15,7 @@ gd: account_migration: acct: Sònraich ainm-cleachdaiche@àrainn dhen chunntas dhan a tha thu airson imrich account_warning_preset: - text: '’S urrainn dhut co-chàradh puist a chleachdadh, can URLaichean, tagaichean hais is iomraidhean' + text: "’S urrainn dhut co-chàradh puist a chleachdadh, can URLaichean, tagaichean hais is iomraidhean" title: Roghainneil. Chan fhaic am faightear seo admin_account_action: include_statuses: Chì an cleachdaiche dè na postaichean a dh’adhbharaich gnìomh maorsainneachd no rabhadh @@ -33,7 +34,7 @@ gd: ends_at: Roghainneil. Thèid am brath-fios a neo-fhoillseachadh gu fèin-obrachail aig an àm ud scheduled_at: Fàg seo bàn airson am brath-fios fhoillseachadh sa bhad starts_at: Roghainneil. Cleachd seo airson am brath-fios a chuingeachadh rè ama shònraichte - text: '’S urrainn dhut co-chàradh puist a chleachdadh. Thoir an aire air am meud a chaitheas am brath-fios air sgrìn an luchd-chleachdaidh' + text: "’S urrainn dhut co-chàradh puist a chleachdadh. Thoir an aire air am meud a chaitheas am brath-fios air sgrìn an luchd-chleachdaidh" appeal: text: Chan urrainn dhut ath-thagradh a dhèanamh air rabhadh ach aon turas defaults: @@ -63,7 +64,7 @@ gd: username: Faodaidh tu litrichean, àireamhan is fo-loidhnichean a chleachdadh whole_word: Mur eil ach litrichean is àireamhan san fhacal-luirg, cha dèid a chur an sàs ach ma bhios e a’ maidseadh an fhacail shlàin domain_allow: - domain: '’S urrainn dhan àrainn seo dàta fhaighinn on fhrithealaiche seo agus thèid an dàta a thig a-steach uaithe a phròiseasadh ’s a stòradh' + domain: "’S urrainn dhan àrainn seo dàta fhaighinn on fhrithealaiche seo agus thèid an dàta a thig a-steach uaithe a phròiseasadh ’s a stòradh" email_domain_block: domain: Seo ainm na h-àrainne a nochdas san t-seòladh puist-d no sa chlàr MX a chleachdas e. Thèid an dearbhadh aig àm a’ chlàraidh. with_dns_records: Thèid oidhirp a dhèanamh air fuasgladh clàran DNS na h-àrainne a chaidh a thoirt seachad agus thèid na toraidhean a bhacadh cuideachd @@ -95,7 +96,7 @@ gd: status_page_url: URL duilleige far am faicear staid an fhrithealaiche seo nuair a bhios e sìos theme: An t-ùrlar a chì na h-aoighean gun chlàradh a-staigh agus an luchd-cleachdaidh ùr. thumbnail: Dealbh mu 2:1 a thèid a shealltainn ri taobh fiosrachadh an fhrithealaiche agad. - timeline_preview: '’S urrainn dha na h-aoighean gun chlàradh a-staigh na postaichean poblach as ùire a tha ri fhaighinn air an fhrithealaiche a bhrabhsadh.' + timeline_preview: "’S urrainn dha na h-aoighean gun chlàradh a-staigh na postaichean poblach as ùire a tha ri fhaighinn air an fhrithealaiche a bhrabhsadh." trendable_by_default: Geàrr leum thar lèirmheas a làimh na susbainte a’ treandadh. Gabhaidh nithean fa leth a thoirt far nan treandaichean fhathast an uairsin. trends: Seallaidh na treandaichean na postaichean, tagaichean hais is naidheachdan a tha fèill mhòr orra air an fhrithealaiche agad. trends_as_landing_page: Seall susbaint a’ treandadh dhan fheadhainn nach do chlàraich a-steach is do dh’aoighean seach tuairisgeul an fhrithealaiche seo. Feumaidh treandaichean a bhith an comas airson sin. @@ -320,7 +321,7 @@ gd: events: Na tachartas an comas template: Teamplaid payload url: URL na puinge-deiridh - 'no': 'Chan eil' + 'no': Chan eil not_recommended: Cha mholamaid seo overridden: "’Ga thar-àithneadh" recommended: Molta @@ -330,4 +331,4 @@ gd: title: sessions: webauthn: Cleachd tè dhe na h-iuchraichean tèarainteachd agad airson clàradh a-steach - 'yes': 'Tha' + 'yes': Tha diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index e6d30242493c1d..4eb4ae4f24530e 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -1,3 +1,4 @@ +--- gl: simple_form: hints: @@ -320,7 +321,7 @@ gl: events: Eventos activados template: Modelo de carga url: URL do extremo - 'no': 'Non' + 'no': Non not_recommended: Non é recomendable overridden: Sobreescrita recommended: Recomendado @@ -330,4 +331,4 @@ gl: title: sessions: webauthn: Usa unha das túas chaves de seguridade para conectar - 'yes': 'Si' + 'yes': Si diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 5854732d1c5620..d8d47fee611fd2 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -1,3 +1,4 @@ +--- he: simple_form: hints: @@ -320,7 +321,7 @@ he: events: אירועים מאופשרים template: תבנית מטען url: כתובת URL של נקודת הקצה - 'no': 'לא' + 'no': לא not_recommended: לא מומלצים overridden: נאכף recommended: מומלץ @@ -330,4 +331,4 @@ he: title: sessions: webauthn: נא להשתמש באחד ממפתחות האבטחה שלך כדי להכנס - 'yes': 'כן' + 'yes': כן diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml index 87498dfab4897c..0f2896fe05d1d7 100644 --- a/config/locales/simple_form.hr.yml +++ b/config/locales/simple_form.hr.yml @@ -1,3 +1,4 @@ +--- hr: simple_form: hints: @@ -45,7 +46,7 @@ hr: follow_request: Netko zatraži da Vas prati mention: Netko Vas spomene reblog: Netko boosta Vaš status - 'no': 'Ne' + 'no': Ne required: text: obavezno - 'yes': 'Da' + 'yes': Da diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index d1568c2780b084..70c225e8ff994c 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -1,3 +1,4 @@ +--- hu: simple_form: hints: @@ -320,7 +321,7 @@ hu: events: Engedélyezett események template: Adatcsomag sablon url: Végponti URL - 'no': 'Nem' + 'no': Nem not_recommended: Nem ajánlott overridden: Felülbírálva recommended: Ajánlott @@ -330,4 +331,4 @@ hu: title: sessions: webauthn: Használd valamelyik biztonsági kulcsodat a bejelentkezéshez - 'yes': 'Igen' + 'yes': Igen diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index a5edc1d8e89442..56aa1d66b1ce6a 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -1,3 +1,4 @@ +--- hy: simple_form: hints: @@ -64,7 +65,7 @@ hy: sign_up_requires_approval: Նոր գրանցումները կը պահանջեն քո հաստատումը severity: Ընտրիր, թէ ինչ կարող է պատահել այս IP֊ից եկող յայտերի հետ sessions: - otp: 'Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝' + otp: Մուտքագրիր երկքայլ նոյնականացման կոդը, որը գեներացուես ես քո բջջային յաւելուածի օգնութեամբ կամ օգտագործիր այս կոդերից կէկը՝ webauthn: Եթէ սա USB է՝ վստահ եղիր տեղադրել այն եւ եթէ անհրաժեշտ է՝ թափահարել։ tag: name: Կարող ես միայն փոխել տառերի ձեւը, օրինակ, այն աւելի ընթեռնելի դարձնելու համար @@ -189,7 +190,7 @@ hy: name: Պիտակ trendable: Թոյլատրել, որ այս պիտակը յայտնուի թրենդներում usable: Թոյլատրել գրառումներին օգտագործել այս պիտակը - 'no': 'Ոչ' + 'no': Ոչ recommended: Խորհուրդ է տրվում required: mark: "*" @@ -197,4 +198,4 @@ hy: title: sessions: webauthn: Օգտագործիր անվտանգութեան բանալիները գրանցուելու համար - 'yes': 'Այո' + 'yes': Այո diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index c97b2031dbac98..51046ce9d46212 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -1,3 +1,4 @@ +--- id: simple_form: hints: @@ -282,7 +283,7 @@ id: webhook: events: Acara yang diaktifkan url: URL Titik Akhir - 'no': 'Tidak' + 'no': Tidak not_recommended: Tidak disarankan recommended: Direkomendasikan required: @@ -291,4 +292,4 @@ id: title: sessions: webauthn: Gunakan salah satu kunci keamanan untuk masuk - 'yes': 'Ya' + 'yes': Ya diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index ca5616b8df54b7..b21b86723c8f1c 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -1,3 +1,4 @@ +--- io: simple_form: hints: @@ -100,7 +101,7 @@ io: rule: text: Deskriptez regulo o bezonaj por uzanti en ca servilo. Vu debas lasar lu esar korta e simpla sessions: - otp: 'Enter the Two-factor code from your phone or use one of your recovery codes.' + otp: Enter the Two-factor code from your phone or use one of your recovery codes. webauthn: Se ol esas klefo di USB, certigar ke vu insertas e se bezonesas, tushetez. tag: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla @@ -280,7 +281,7 @@ io: webhook: events: Aktivigita eventi url: URL di finpunto - 'no': 'Ne' + 'no': Ne not_recommended: Ne rekomendesas recommended: Rekomendito required: diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 79ffa2303b903d..87190693f65472 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -1,3 +1,4 @@ +--- is: simple_form: hints: @@ -320,7 +321,7 @@ is: events: Virkjaðir atburðir template: Sniðmát gagna url: Slóð á endapunkt - 'no': 'Nei' + 'no': Nei not_recommended: Ekki mælt með þessu overridden: Yfirtekið recommended: Mælt með @@ -330,4 +331,4 @@ is: title: sessions: webauthn: Nota einn af öryggislyklunum þínum til að skrá inn - 'yes': 'Já' + 'yes': Já diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index f983dc6b5cf8db..9ad43235047ddd 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -1,3 +1,4 @@ +--- it: simple_form: hints: @@ -330,4 +331,4 @@ it: title: sessions: webauthn: Usa una delle tue chiavi di sicurezza per accedere - 'yes': 'Si' + 'yes': Si diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 41057cbed1b052..e474b47cbc8833 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -1,3 +1,4 @@ +--- ja: simple_form: hints: diff --git a/config/locales/simple_form.ka.yml b/config/locales/simple_form.ka.yml index f4fbde323b7ccf..e5d874c5a563d2 100644 --- a/config/locales/simple_form.ka.yml +++ b/config/locales/simple_form.ka.yml @@ -1,3 +1,4 @@ +--- ka: simple_form: hints: @@ -76,7 +77,7 @@ ka: follow_request: გამოიგზავნოს წერილი როდესაც ვინმე მოგთხოვთ გაჰყვეთ mention: გამოიგზავნოს წერილი როდესაც ვინმე გასახელებთ reblog: გამოიგზავნოს წერილი როდესაც ვინმე გაზრდის თქვენს სტატუსს - 'no': 'არა' + 'no': არა required: text: აუცილებელი - 'yes': 'კი' + 'yes': კი diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 3116e3bd966f54..1e1c52da24e37b 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -1,3 +1,4 @@ +--- kab: simple_form: hints: @@ -101,9 +102,9 @@ kab: user_role: name: Isem permissions_as_keys: Tisirag - 'no': 'Ala' + 'no': Ala recommended: Yettuwelleh required: mark: "*" text: ilaq - 'yes': 'Ih' + 'yes': Ih diff --git a/config/locales/simple_form.kk.yml b/config/locales/simple_form.kk.yml index 681781b415b447..5c1854d1886d38 100644 --- a/config/locales/simple_form.kk.yml +++ b/config/locales/simple_form.kk.yml @@ -1,3 +1,4 @@ +--- kk: simple_form: hints: @@ -86,8 +87,8 @@ kk: name: Хэштег trendable: Хештегті трендтерде көрсетуге рұқсат бер usable: Бұл хештегті қолдануға рұқсат бер - 'no': 'Жоқ' + 'no': Жоқ recommended: Рекоменделген required: text: міндетті - 'yes': 'Иә' + 'yes': Иә diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index d70a41bfefb4ec..7b26561553ed5c 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -1,3 +1,4 @@ +--- ko: simple_form: hints: @@ -20,7 +21,7 @@ ko: include_statuses: 사용자는 어떤 게시물에 대해 경고나 조치가 취해졌는지 볼 수 있게 됩니다 send_email_notification: 사용자는 어떤 일이 일어났는 지에 대한 설명을 받게 됩니다 text_html: 선택사항. 게시물 문법을 사용할 수 있습니다. 경고 틀을 추가하여 시간을 절약할 수 있습니다 - type_html: %{acct}에 대해 취할 행동 선택 + type_html: "%{acct}에 대해 취할 행동 선택" types: disable: 사용자가 계정을 사용하는 것을 막지만, 그의 게시물을 삭제하거나 숨기지는 않습니다. none: 이것을 사용해서 어떤 동작도 하지 않고, 사용자에게 경고를 보냅니다. @@ -320,7 +321,7 @@ ko: events: 활성화된 이벤트 template: 페이로드 템플릿 url: 엔드포인트 URL - 'no': '아니요' + 'no': 아니요 not_recommended: 추천하지 않음 overridden: 덮어씌워짐 recommended: 추천함 @@ -330,4 +331,4 @@ ko: title: sessions: webauthn: 로그인하기 위해서 보안 키를 사용해 주세요 - 'yes': '네' + 'yes': 네 diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index ecc70bb3d90928..fb7a45c34b31a3 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -1,3 +1,4 @@ +--- ku: simple_form: hints: @@ -41,7 +42,9 @@ ku: locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin password: Herî kêm 8 tîpan bi kar bîne phrase: Ji rewşa nivîsê tîpên girdek/hûrdek an jî ji hişyariya naveroka ya şandiyê wek serbixwe wê were hevbeş kirin - scopes: "Sepana ku dê kîjan maf bide bigihije APIyan.\nGer te asteke jor hilbijartibe, ne pêwîste ku tu yên berfirehî a kesane hilbijêrî." + scopes: |- + Sepana ku dê kîjan maf bide bigihije APIyan. + Ger te asteke jor hilbijartibe, ne pêwîste ku tu yên berfirehî a kesane hilbijêrî. setting_aggregate_reblogs: Bilindkirinên ku nû hatine weşan ji şandiyên di dema dawî de nîşan nede (tenê li ser bilindkirinên nû wergirtî bandor dike) setting_always_send_emails: Dema ku tu Mastodon bi rengek çalak bi kar tînî, bi gelemperî agahdariya e-nameyê nayê şandin setting_default_sensitive: Medyaya hestiyar berdestî ve tê veşartin û bi tikandin dikare were eşkere kirin @@ -282,7 +285,7 @@ ku: webhook: events: Bûyerên çalakkirî url: Girêdana xala dawîbûnê - 'no': 'Na' + 'no': Na not_recommended: Nayê pêşniyarkirin recommended: Pêşniyarkirî required: @@ -291,4 +294,4 @@ ku: title: sessions: webauthn: Yek ji kilîtên ewlehiyê yên xwe bi kar bîne bo têketinê - 'yes': 'Erê' + 'yes': Erê diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index e74deab7994157..bf831c946f5adb 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -1,3 +1,4 @@ +--- lv: simple_form: hints: @@ -320,7 +321,7 @@ lv: events: Iespējotie notikumi template: Noslodzes veidne url: Galapunkta URL - 'no': 'Nē' + 'no': Nē not_recommended: Nav ieteicams overridden: Ignorēts recommended: Ieteicams @@ -330,4 +331,4 @@ lv: title: sessions: webauthn: Lai pierakstītos, izmanto vienu no savām drošības atslēgām - 'yes': 'Jā' + 'yes': Jā diff --git a/config/locales/simple_form.ml.yml b/config/locales/simple_form.ml.yml index 380063870cb161..c60cd96998866e 100644 --- a/config/locales/simple_form.ml.yml +++ b/config/locales/simple_form.ml.yml @@ -1,8 +1,9 @@ +--- ml: simple_form: hints: admin_account_action: - type_html: %{acct} നെ എന്ത് ചെയ്യണമെന്ന് തീരുമാനിക്കുക + type_html: "%{acct} നെ എന്ത് ചെയ്യണമെന്ന് തീരുമാനിക്കുക" defaults: password: 8 അക്ഷരങ്ങൾ എങ്കിലും ഉപയോഗിക്കുക labels: diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index cc87aba5a1de01..c0d47ace0a14a5 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -1,3 +1,4 @@ +--- ms: simple_form: hints: diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml index 69afe2116d9ce6..80b234c17c9e85 100644 --- a/config/locales/simple_form.my.yml +++ b/config/locales/simple_form.my.yml @@ -1,3 +1,4 @@ +--- my: simple_form: hints: @@ -20,7 +21,7 @@ my: include_statuses: အသုံးပြုသူသည် မည်သည့်ပို့စ်များမှာ စိစစ်ထားခြင်း သို့မဟုတ် သတိပေးထားခြင်းဖြစ်စေသည်ကို တွေ့မြင်နိုင်ပါသည် send_email_notification: အသုံးပြုသူသည် ၎င်းတို့၏အကောင့်နှင့် ဖြစ်ပျက်ခဲ့သော ရှင်းလင်းချက်ကို လက်ခံရရှိမည်ဖြစ်သည် text_html: Post Syntax ကို သုံးနိုင်သည်။ အချိန်ကုန်သက်သာစေရန်အတွက် ကြိုတင်သတိပေးချက်များ ထည့်နိုင်သည် - type_html: %{acct} နှင့် ဘာလုပ်ရမည်ကို ရွေးပါ။ + type_html: "%{acct} နှင့် ဘာလုပ်ရမည်ကို ရွေးပါ။" types: disable: အသုံးပြုသူကို ၄င်း၏အကောင့်အား သုံးစွဲခြင်းမှ ဟန့်တားပါ။ သို့သော် ၄င်းဖန်တီးထားသည့် အချက်အလက်များကို မဖျက်ပါ။ မဖျောက်ပါ။ none: အခြားလုပ်ဆောင်ချက်တစ်ခုမှ မလုပ်ဘဲ အသုံးပြုသူထံ သတိပေးချက်ပေးပို့ရန် ၎င်းကို အသုံးပြုပါ။ @@ -65,10 +66,10 @@ my: domain_allow: domain: ဤဒိုမိန်းသည် ဤဆာဗာမှ အချက်အလက်များကို ရယူနိုင်မည်ဖြစ်ပြီး ဝင်လာသောအချက်အလက်များကို စီမံဆောင်ရွက်ပေးပြီး သိမ်းဆည်းသွားမည်ဖြစ်သည် email_domain_block: - domain: '၎င်းမှာ အီးမေးလ်လိပ်စာ သို့မဟုတ် အသုံးပြုသည့် MX မှတ်တမ်းတွင် ပေါ်လာသည့် ဒိုမိန်းအမည် ဖြစ်နိုင်သည်။ အကောင့်ဖွင့်ပြီးပါက စစ်ဆေးနိုင်မည်ဖြစ်သည်။' + domain: "၎င်းမှာ အီးမေးလ်လိပ်စာ သို့မဟုတ် အသုံးပြုသည့် MX မှတ်တမ်းတွင် ပေါ်လာသည့် ဒိုမိန်းအမည် ဖြစ်နိုင်သည်။ အကောင့်ဖွင့်ပြီးပါက စစ်ဆေးနိုင်မည်ဖြစ်သည်။" with_dns_records: ပေးထားသော ဒိုမိန်း၏ DNS မှတ်တမ်းများကို ဖြေရှင်းရန် ကြိုးပမ်းမှု ပြုလုပ်မည်ဖြစ်ပြီး ရလဒ်များကိုလည်း ပိတ်ဆို့သွားမည်ဖြစ်သည်။ featured_tag: - name: 'ဤသည်မှာ သင်မကြာသေးမီက အသုံးပြုခဲ့သော hashtag အချို့ဖြစ်သည် -' + name: ဤသည်မှာ သင်မကြာသေးမီက အသုံးပြုခဲ့သော hashtag အချို့ဖြစ်သည် - filters: action: ပို့စ်တစ်ခုသည် စစ်ထုတ်မှုနှင့် ကိုက်ညီချိန်တွင် မည်သည့်လုပ်ဆောင်ချက် ဆောင်ရွက်မည်ကို ရွေးချယ်ပါ actions: @@ -104,7 +105,7 @@ my: imports: data: အခြား Mastodon ဆာဗာမှ CSV ဖိုင်ကို ပို့ထားသည် invite_request: - text: '၎င်းသည် သင့်အက်ပလီကေးရှင်းကို ပြန်လည်သုံးသပ်ရန်အတွက် ကူညီပေးနိုင်ပါသည်' + text: "၎င်းသည် သင့်အက်ပလီကေးရှင်းကို ပြန်လည်သုံးသပ်ရန်အတွက် ကူညီပေးနိုင်ပါသည်" ip_block: comment: ဤစည်းမျဉ်း ဘာကြောင့်ထည့်ခဲ့သည်အား သတိရရန်။ expires_in: အိုင်ပီလိပ်စာများမှာ အကန့်အသတ်ရှိသည့် အရင်းအမြစ်ဖြစ်သည်။ တခါတရံ လိပ်စာများအား မျှဝေသုံးစွဲကြသည်။ အခါအားလျှော်စွာ လက်လွှဲသုံးစွဲမှုများလည်း ရှီတတ်သည်။ ထို့အတွက်ကြောင့် အကန့်အသတ်မဲ့ အိုင်ပီကန့်သတ်ထိန်းချုပ်မှု လုပ်ဆောင်ခြင်းကို အားမပေးပါ။ @@ -117,7 +118,7 @@ my: rule: text: ဤဆာဗာအသုံးပြုသူများအတွက် စည်းမျဉ်း သို့မဟုတ် လိုအပ်ချက် ဖော်ပြပါ။ လိုရင်းတိုရှင်းဖြစ်ပါစေ။ sessions: - otp: 'သင့်ဖုန်းအက်ပ်မှထုတ်ပေးသောနှစ်ဆင့်ခံလုံခြုံရေးကုဒ်ကို ထည့်ပါ သို့မဟုတ် ပြန်လည်ရယူရေးကုဒ်များထဲမှ တစ်ခုကို အသုံးပြုပါ -' + otp: သင့်ဖုန်းအက်ပ်မှထုတ်ပေးသောနှစ်ဆင့်ခံလုံခြုံရေးကုဒ်ကို ထည့်ပါ သို့မဟုတ် ပြန်လည်ရယူရေးကုဒ်များထဲမှ တစ်ခုကို အသုံးပြုပါ - webauthn: USB ကီးဖြစ်ပါက ထည့်သွင်းပါ။ လိုအပ်ပါက နှိပ်ပါ။ settings: indexable: သင့်ပရိုဖိုင်စာမျက်နှာသည် Google၊ Bing နှင့် အခြားရှိ ရှာဖွေမှုရလဒ်များတွင် ပေါ်လာနိုင်သည်။ @@ -320,7 +321,7 @@ my: events: အကြောင်းအရာများကဏ္ဍကို ဖွင့်ထားသည် template: Payload ပုံစံ url: URL ဆုံးမှတ် - 'no': 'မလုပ်ပါ' + 'no': မလုပ်ပါ not_recommended: ထောက်ခံထားမှုမရှိ overridden: ပယ်ဖျက် recommended: ထောက်ခံထားပြီး @@ -330,4 +331,4 @@ my: title: sessions: webauthn: အကောင့်ဝင်ရန်အတွက် သင့်လုံခြုံရေးကီးများထဲမှ တစ်ခုကို အသုံးပြုပါ - 'yes': 'ဟုတ်ကဲ့' + 'yes': ဟုတ်ကဲ့ diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index d977dd51d4252a..b0b695745b72de 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -1,3 +1,4 @@ +--- nl: simple_form: hints: @@ -320,7 +321,7 @@ nl: events: Ingeschakelde gebeurtenissen template: Sjabloon Payload url: Eindpunt URL - 'no': 'Nee' + 'no': Nee not_recommended: Niet aanbevolen overridden: Overschreven recommended: Aanbevolen @@ -330,4 +331,4 @@ nl: title: sessions: webauthn: Gebruik een van uw beveiligingssleutels om in te loggen - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 361259a0a488f2..266ef1fcce6a1b 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -1,3 +1,4 @@ +--- nn: simple_form: hints: @@ -117,7 +118,7 @@ nn: rule: text: Forklar ein regel eller eit krav for brukarar på denne tenaren. Prøv å skriva kort og lettfattleg sessions: - otp: 'Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder.' + otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. webauthn: Om det er ein USB-nøkkel må du setja han inn og om nødvendig trykkja på han. settings: indexable: Profilsida di kan dukka opp søkjeresultat frå Google, Bing, Duckduckgo og andre. @@ -320,7 +321,7 @@ nn: events: Aktiverte hendingar template: Nyttelastmal url: Endepunkts-URL - 'no': 'Nei' + 'no': Nei not_recommended: Ikkje anbefalt overridden: Overstyrt recommended: Tilrådt @@ -330,4 +331,4 @@ nn: title: sessions: webauthn: Bruk en av sikkerhetsnøklene dine til å logge på - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 3271d1222d5526..a9d5465f36461e 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -1,4 +1,5 @@ -"no": +--- +'no': simple_form: hints: account: @@ -329,4 +330,4 @@ title: sessions: webauthn: Bruk en av sikkerhetsnøklene dine til å logge på - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 5aa330b77cb440..7159eed3227a30 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -1,3 +1,4 @@ +--- oc: simple_form: hints: @@ -230,7 +231,7 @@ oc: webhook: events: Eveniments activats url: URL de ponch de terminason - 'no': 'Non' + 'no': Non not_recommended: Pas recomandat recommended: Recomandat required: @@ -239,4 +240,4 @@ oc: title: sessions: webauthn: Utilizatz una de vòstras clau de seguretat per vos identificar - 'yes': 'Òc' + 'yes': Òc diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index dd161027dcc910..a55a93556f9e3f 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -1,3 +1,4 @@ +--- pl: simple_form: hints: @@ -320,7 +321,7 @@ pl: events: Włączone zdarzenia template: Szablon zawartości url: Endpoint URL - 'no': 'Nie' + 'no': Nie not_recommended: Niezalecane overridden: Nadpisane recommended: Polecane @@ -330,4 +331,4 @@ pl: title: sessions: webauthn: Użyj jednego ze swoich kluczy bezpieczeństwa, aby się zalogować - 'yes': 'Tak' + 'yes': Tak diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index dd41ec7cbe21ed..1c303c0daed80c 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -1,3 +1,4 @@ +--- pt-BR: simple_form: hints: @@ -320,7 +321,7 @@ pt-BR: events: Eventos habilitados template: Conteúdo JSON url: URL do Endpoint - 'no': 'Não' + 'no': Não not_recommended: Não recomendado overridden: Sobreposto recommended: Recomendado @@ -330,4 +331,4 @@ pt-BR: title: sessions: webauthn: Utilize uma das suas chaves de segurança para entrar - 'yes': 'Sim' + 'yes': Sim diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index ea149e5fbdb0d1..691ecec3a06dfd 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -1,3 +1,4 @@ +--- pt-PT: simple_form: hints: @@ -320,7 +321,7 @@ pt-PT: events: Eventos ativados template: Modelo de conteúdo url: URL do Endpoint - 'no': 'Não' + 'no': Não not_recommended: Não recomendado overridden: Substituído recommended: Recomendado @@ -330,4 +331,4 @@ pt-PT: title: sessions: webauthn: Utilize uma das suas chaves de segurança para entrar - 'yes': 'Sim' + 'yes': Sim diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml index f16660139ae7cb..cade572f38c0d6 100644 --- a/config/locales/simple_form.ro.yml +++ b/config/locales/simple_form.ro.yml @@ -1,3 +1,4 @@ +--- ro: simple_form: hints: @@ -161,8 +162,8 @@ ro: listable: Permite acestui hashtag să apară în căutări și în directorul de profil trendable: Permite acestui hashtag să apară sub tendințe usable: Permite postărilor să folosească acest hashtag - 'no': 'Nu' + 'no': Nu recommended: Recomandat required: text: obligatoriu - 'yes': 'Da' + 'yes': Da diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index c0abc54006e9d2..2d82a66358cd99 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -1,3 +1,4 @@ +--- ru: simple_form: hints: @@ -320,7 +321,7 @@ ru: events: Включенные события template: Шаблон полезной нагрузки url: Endpoint URL - 'no': 'Нет' + 'no': Нет not_recommended: Не рекомендуется overridden: Переопределено recommended: Рекомендуется @@ -330,4 +331,4 @@ ru: title: sessions: webauthn: Используйте один из ваших ключей безопасности для входа в систему - 'yes': 'Да' + 'yes': Да diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml index 22d23e2328b3ea..2c47259961ac3b 100644 --- a/config/locales/simple_form.sc.yml +++ b/config/locales/simple_form.sc.yml @@ -1,3 +1,4 @@ +--- sc: simple_form: hints: @@ -192,7 +193,7 @@ sc: name: Eticheta trendable: Permite a custa eticheta de apàrrere in is tendèntzias usable: Permite a is tuts de impreare custa eticheta - 'no': 'Nono' + 'no': Nono recommended: Cussigiadu required: mark: "*" @@ -200,4 +201,4 @@ sc: title: sessions: webauthn: Imprea una de is craes de seguresa tuas pro intrare - 'yes': 'Eja' + 'yes': Eja diff --git a/config/locales/simple_form.sco.yml b/config/locales/simple_form.sco.yml index 1be25261f863fb..85fa66ddc94e8a 100644 --- a/config/locales/simple_form.sco.yml +++ b/config/locales/simple_form.sco.yml @@ -1,3 +1,4 @@ +--- sco: simple_form: hints: @@ -282,7 +283,7 @@ sco: webhook: events: Enabilt events url: Enpynt URL - 'no': 'Naw' + 'no': Naw not_recommended: No recommendit recommended: Recommendit required: @@ -291,4 +292,4 @@ sco: title: sessions: webauthn: Uise ane o yer security keys fir tae sign in - 'yes': 'Ay' + 'yes': Ay diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index c0871b9059619f..ededa85bcce76f 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -1,3 +1,4 @@ +--- si: simple_form: hints: @@ -228,4 +229,4 @@ si: title: sessions: webauthn: පුරනය වීමට ඔබගේ ආරක්ෂක යතුරු වලින් එකක් භාවිතා කරන්න - 'yes': 'ඔව්' + 'yes': ඔව් diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 34e3ad33315c1d..a89e1a4290ca21 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -1,3 +1,4 @@ +--- sk: simple_form: hints: @@ -162,8 +163,8 @@ sk: name: Haštag trendable: Povoľ zobrazovanie tohto haštagu medzi trendujúcimi usable: Povoľ používanie tohto haštagu v príspevkoch - 'no': 'Nie' + 'no': Nie recommended: Odporúčané required: text: povinné - 'yes': 'Áno' + 'yes': Áno diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index bb54ef83b7d9bb..ef345f78c39c16 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -1,3 +1,4 @@ +--- sl: simple_form: hints: @@ -320,7 +321,7 @@ sl: events: Omogočeni dogodki template: Predloga obremenitev url: URL končne točke - 'no': 'Ne' + 'no': Ne not_recommended: Ni priporočeno overridden: Preglašeno recommended: Priporočeno @@ -330,4 +331,4 @@ sl: title: sessions: webauthn: Za prijavo uporabite eno od svojih varnostnih kod - 'yes': 'Da' + 'yes': Da diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 43869f28344b18..3256e7378dd915 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -1,3 +1,4 @@ +--- sq: simple_form: hints: @@ -320,7 +321,7 @@ sq: events: Akte të aktivizuar template: Gjedhe ngarkese url: URL pikëmbarimi - 'no': 'Jo' + 'no': Jo not_recommended: Jo e këshilluar overridden: I anashkaluar recommended: E rekomanduar @@ -330,4 +331,4 @@ sq: title: sessions: webauthn: Që të bëhet hyrja, përdorni një nga kyçet tuaj të sigurisë - 'yes': 'Po' + 'yes': Po diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index f835a585286193..6405ee338a0e50 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -1,3 +1,4 @@ +--- sr-Latn: simple_form: hints: @@ -320,7 +321,7 @@ sr-Latn: events: Omogućeni događaji template: Šablon korisnih podataka url: URL krajnje tačke - 'no': 'Ne' + 'no': Ne not_recommended: Nije preporučeno overridden: Zamenjeno recommended: Preporučeno @@ -330,4 +331,4 @@ sr-Latn: title: sessions: webauthn: Koristi jedan od svojih bezbednosnih ključeva za prijavljivanje - 'yes': 'Da' + 'yes': Da diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index bccddb1fefe9b4..da1ac81233e656 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -1,3 +1,4 @@ +--- sr: simple_form: hints: @@ -320,7 +321,7 @@ sr: events: Омогућени догађаји template: Шаблон корисних података url: URL крајње тачке - 'no': 'Не' + 'no': Не not_recommended: Није препоручено overridden: Замењено recommended: Препоручено @@ -330,4 +331,4 @@ sr: title: sessions: webauthn: Користи један од својих безбедносних кључева за пријављивање - 'yes': 'Да' + 'yes': Да diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index ed3f172c28b411..b01436b415d950 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -1,3 +1,4 @@ +--- sv: simple_form: hints: @@ -320,7 +321,7 @@ sv: events: Aktiverade händelser template: Lastmall url: Slutpunkts-URL - 'no': 'Nej' + 'no': Nej not_recommended: Rekommenderas inte overridden: Åsidosatt recommended: Rekommenderad @@ -330,4 +331,4 @@ sv: title: sessions: webauthn: Använd en av dina säkerhetsnycklar för att logga in - 'yes': 'Ja' + 'yes': Ja diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml index 6f88bac8d6c702..a3819e5eb51a07 100644 --- a/config/locales/simple_form.ta.yml +++ b/config/locales/simple_form.ta.yml @@ -1,3 +1,4 @@ +--- ta: simple_form: hints: @@ -67,4 +68,4 @@ ta: with_dns_records: களத்தின் IP மற்றும் MX records-ஐ உள்ளடக்கு required: text: தேவை - 'yes': 'ஆம்' + 'yes': ஆம் diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 04e0995179b1c6..c388001888ef0f 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -1,3 +1,4 @@ +--- th: simple_form: hints: @@ -320,7 +321,7 @@ th: events: เหตุการณ์ที่เปิดใช้งาน template: แม่แบบส่วนข้อมูล url: URL ปลายทาง - 'no': 'ไม่' + 'no': ไม่ not_recommended: ไม่แนะนำ overridden: เขียนทับแล้ว recommended: แนะนำ @@ -330,4 +331,4 @@ th: title: sessions: webauthn: ใช้หนึ่งในกุญแจความปลอดภัยของคุณเพื่อลงชื่อเข้า - 'yes': 'ใช่' + 'yes': ใช่ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index d6373212730ca0..7d16531eaebc51 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -1,3 +1,4 @@ +--- tr: simple_form: hints: @@ -20,7 +21,7 @@ tr: include_statuses: Kullanıcı hangi gönderilerin denetleme eylemi veya uyarısına neden olduğunu görecektir send_email_notification: Kullanıcı, hesabına ne olduğuna dair bir açıklama alacak text_html: İsteğe bağlı. Gönderi sözdizimini kullanabilirsiniz. Zamandan kazanmak için uyarı ön-ayarları ekleyebilirsiniz - type_html: %{acct} ile ne yapılacağını seçin + type_html: "%{acct} ile ne yapılacağını seçin" types: disable: Kullanıcının hesabını kullanmasını engelle ama içeriklerini silme veya gizleme. none: Bunu, başka bir eylem tetiklemeden kullanıcıya bir uyarı göndermek için kullan. @@ -117,7 +118,7 @@ tr: rule: text: Bu sunucu üzerindeki kullanıcılar için bir kural veya gereksinimi tanımlayın. Kuralı kısa ve yalın tutmaya çalışın sessions: - otp: 'Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz.' + 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. settings: indexable: Profil sayfanız Google, Bing ve diğerlerindeki arama sonuçlarında görüntülenebilir. @@ -320,7 +321,7 @@ tr: events: Etkin olaylar template: Yük şablonu url: Uç nokta URL’si - 'no': 'Hayır' + 'no': Hayır not_recommended: Önerilmez overridden: Geçersiz kılındı recommended: Önerilen @@ -330,4 +331,4 @@ tr: title: sessions: webauthn: Oturum açmak için güvenlik anahtarlarınızdan birini kullanın - 'yes': 'Evet' + 'yes': Evet diff --git a/config/locales/simple_form.tt.yml b/config/locales/simple_form.tt.yml index 6ca6e0ce7ecfd2..656ded8cf3fe1c 100644 --- a/config/locales/simple_form.tt.yml +++ b/config/locales/simple_form.tt.yml @@ -1,3 +1,4 @@ +--- tt: simple_form: labels: @@ -57,4 +58,4 @@ tt: recommended: Тәкъдим ителгән required: mark: "*" - 'yes': 'Әйе' + 'yes': Әйе diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 811dc86b110719..aa64ecfdb75608 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -1,3 +1,4 @@ +--- uk: simple_form: hints: @@ -323,7 +324,7 @@ uk: events: Увімкнені події template: Шаблон корисного навантаження url: URL кінцевої точки - 'no': 'Ні' + 'no': Ні not_recommended: Не рекомендовано overridden: Перевизначено recommended: Рекомендовано @@ -333,4 +334,4 @@ uk: title: sessions: webauthn: Використайте один із ваших ключів безпеки для входу - 'yes': 'Так' + 'yes': Так diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 75650e1578df7a..8943527b16a481 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -1,3 +1,4 @@ +--- vi: simple_form: hints: @@ -320,7 +321,7 @@ vi: events: Những sự kiện đã bật template: Mẫu payload url: URL endpoint - 'no': 'Tắt' + 'no': Tắt not_recommended: Không đề xuất overridden: Đã ghi đè recommended: Đề xuất @@ -330,4 +331,4 @@ vi: 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' + 'yes': Bật diff --git a/config/locales/simple_form.zgh.yml b/config/locales/simple_form.zgh.yml index 1f51f40b8aac05..7ba82b1bf24a9f 100644 --- a/config/locales/simple_form.zgh.yml +++ b/config/locales/simple_form.zgh.yml @@ -1,3 +1,4 @@ +--- zgh: simple_form: hints: @@ -33,5 +34,5 @@ zgh: ip: ⵜⴰⵏⵙⴰ IP tag: name: ⵀⴰⵛⵟⴰⴳ - 'no': 'ⵓⵀⵓ' - 'yes': 'ⵢⴰⵀ' + 'no': ⵓⵀⵓ + 'yes': ⵢⴰⵀ diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 1b7e06629337a4..7a56fa25594245 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -1,3 +1,4 @@ +--- zh-CN: simple_form: hints: @@ -68,7 +69,7 @@ zh-CN: domain: 这可以是电子邮件地址的域名或它使用的 MX 记录所指向的域名。用户注册时,系统会对此检查。 with_dns_records: Mastodon 会尝试解析所给域名的 DNS 记录,然后把解析结果一并封禁 featured_tag: - name: '以下是你最近使用过的标签:' + name: 以下是你最近使用过的标签: filters: action: 选择在嘟文命中过滤器时要执行的操作 actions: @@ -320,7 +321,7 @@ zh-CN: events: 已启用事件 template: 载荷模板 url: 对端 URL - 'no': '否' + 'no': 否 not_recommended: 不推荐 overridden: 已覆盖 recommended: 推荐 @@ -330,4 +331,4 @@ zh-CN: title: sessions: webauthn: 使用你的安全密钥登录 - 'yes': '是' + 'yes': 是 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index bee7b9911385ca..ad963b32b6395d 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -1,3 +1,4 @@ +--- zh-HK: simple_form: hints: @@ -14,7 +15,7 @@ zh-HK: account_migration: acct: 指定欲移動至之帳戶的「使用者名稱@域名」 account_warning_preset: - text: '你可使用 toot 格式,例如網址、「#」標籤和提及功能' + text: 你可使用 toot 格式,例如網址、「#」標籤和提及功能 title: 可選,接收者不會見到 admin_account_action: include_statuses: 使用者將會看到哪些文章導致檢舉或警告 @@ -68,7 +69,7 @@ zh-HK: domain: 這可以是電郵地址所示的域名或它使用的 MX 紀錄。註冊時系統將檢查它。 with_dns_records: Mastodon 會嘗試解析所給域名的 DNS 記錄,然後與解析結果一併封禁 featured_tag: - name: '以下是你最近常用的標籤:' + name: 以下是你最近常用的標籤: filters: action: 選擇當帖文符合篩選器時要執行的動作 actions: @@ -117,7 +118,7 @@ zh-HK: rule: text: 請描述在此伺服器上用戶需要遵守的規則或要求。請盡量保持簡短易明。 sessions: - otp: '輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼:' + otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼: webauthn: 如果它是 USB 安全鑰匙的話,請先插入電腦。如鑰匙設計有需要,請按鍵啟用。 settings: indexable: 你的個人檔案可能會出現在 Google 和 Bing 等搜尋引擎的搜尋結果中。 @@ -320,7 +321,7 @@ zh-HK: events: 已啟用事件 template: Payload 範本 url: 端點網址 - 'no': '否' + 'no': 否 not_recommended: 不推薦 overridden: 已覆寫 recommended: 建議 @@ -330,4 +331,4 @@ zh-HK: title: sessions: webauthn: 使用你的安全密鑰裝置來登入 - 'yes': '是' + 'yes': 是 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 53f5fd6c7f4225..c48c659fa6a37b 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -1,10 +1,11 @@ +--- zh-TW: simple_form: hints: account: discoverable: 公開嘟文及個人檔案可能於各 Mastodon 功能中被推薦,並且您的個人檔案可能被推薦至其他使用者。 display_name: 完整名稱或暱稱。 - fields: 烘培雞,自我認同代稱,年齡,及任何您想分享的。 + fields: 烘培雞、自我認同代稱、年齡,及任何您想分享的。 indexable: 您的公開嘟文可能會顯示於 Mastodon 之搜尋結果中。曾與您嘟文互動過的人可能無論如何都能搜尋它們。 note: '您可以 @mention 其他人或者使用 #主題標籤。' show_collections: 人們將能瀏覽您跟隨中及跟隨者帳號。您所跟隨之人能得知您正在跟隨其帳號。 @@ -14,7 +15,7 @@ zh-TW: account_migration: acct: 指定要移動至的帳號的「使用者名稱@網域名稱」 account_warning_preset: - text: '您可使用嘟文語法,例如網址、「#」標籤和提及功能' + text: 您可使用嘟文語法,例如網址、「#」標籤和提及功能 title: 可選。不會向收件者顯示 admin_account_action: include_statuses: 使用者可看到導致檢舉或警告的嘟文 @@ -30,7 +31,7 @@ zh-TW: warning_preset_id: 選用。您仍可在預設的結尾新增自訂文字 announcement: all_day: 核取後,只會顯示出時間範圍中的日期部分 - ends_at: 可選的,公告會在該時間點自動取消發布 + ends_at: 可選的,公告會於該時間點自動取消發布 scheduled_at: 空白則立即發布公告 starts_at: 可選的,讓公告在特定時間範圍內顯示 text: 您可以使用嘟文語法,但請小心別讓公告太鴨霸而佔據使用者的整個版面。 @@ -58,8 +59,8 @@ zh-TW: setting_display_media_default: 隱藏標為敏感內容的媒體 setting_display_media_hide_all: 總是隱藏所有媒體 setting_display_media_show_all: 總是顯示標為敏感內容的媒體 - setting_use_blurhash: 彩色漸層圖樣是基於隱藏媒體內容顏色產生,所有細節會變得模糊 - setting_use_pending_items: 關閉自動捲動更新,時間軸只會在點擊後更新 + setting_use_blurhash: 彩色漸層圖樣是基於隱藏媒體內容顏色產生,所有細節將變得模糊 + setting_use_pending_items: 關閉自動捲動更新,時間軸只會於點擊後更新 username: 您可以使用字幕、數字與底線 whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用 domain_allow: @@ -68,7 +69,7 @@ zh-TW: domain: 這可以是顯示在電子郵件中的網域名稱,或是其使用的 MX 紀錄。其將於註冊時檢查。 with_dns_records: Mastodon 會嘗試解析所給網域的 DNS 記錄,解析結果一致者將一併封鎖 featured_tag: - name: '這些是您最近使用的一些主題標籤:' + name: 這些是您最近使用的一些主題標籤: filters: action: 請選擇當嘟文符合該過濾器時將被執行之動作 actions: @@ -117,7 +118,7 @@ zh-TW: rule: text: 說明使用者在此伺服器上需遵守的規則或條款。試著維持各項條款簡短而明瞭。 sessions: - otp: '請輸入產生自您手機 App 的兩階段驗證碼,或輸入其中一個備用驗證碼:' + otp: 請輸入產生自您手機 App 的兩階段驗證碼,或輸入其中一個備用驗證碼: webauthn: 如果它是 USB 安全金鑰的話,請確認已正確插入,如有需要請觸擊。 settings: indexable: 個人檔案可能出現於 Google、Bing、或其他搜尋引擎。 @@ -125,7 +126,7 @@ zh-TW: tag: name: 您只能變更大小寫,例如,以使其更易讀。 user: - chosen_languages: 當選取時,只有選取語言之嘟文會在公開時間軸中顯示 + chosen_languages: 當選取時,只有選取語言之嘟文會於公開時間軸中顯示 role: 角色控制使用者有哪些權限 user_role: color: 在整個使用者介面中用於角色的顏色,十六進位格式的 RGB @@ -231,7 +232,7 @@ zh-TW: email_domain_block: with_dns_records: 包括網域的 MX 記錄和 IP 位址 featured_tag: - name: '「#」主題標籤' + name: "「#」主題標籤" filters: actions: hide: 完全隱藏 @@ -320,7 +321,7 @@ zh-TW: events: 已啟用的事件 template: Payload 樣板 url: 端點 URL - 'no': '否' + 'no': 否 not_recommended: 不建議 overridden: 已覆寫 recommended: 建議 @@ -330,4 +331,4 @@ zh-TW: title: sessions: webauthn: 使用您的安全金鑰來登入 - 'yes': '是' + 'yes': 是 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d177eec300b39d..c25fab6aeb1849 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1,6 +1,7 @@ +--- sk: about: - about_mastodon_html: 'Mastodon je sociálna sieť založená na otvorených webových protokoloch a na slobodnom softvéri. Je decentralizovaná, podobne ako email.' + about_mastodon_html: Mastodon je sociálna sieť založená na otvorených webových protokoloch a na slobodnom softvéri. Je decentralizovaná, podobne ako email. contact_missing: Nezadaný contact_unavailable: Neuvedený/á hosted_on: Mastodon hostovaný na %{domain} @@ -8,9 +9,9 @@ sk: accounts: follow: Nasleduj followers: - one: Sledujúci few: Sledovateľov many: Sledovateľov + one: Sledujúci other: Sledovatelia following: Nasledujem instance_actor_flash: Toto konto je virtuálny aktér, ktorý predstavuje samotný server, a nie konkrétneho používateľa. Používa sa na účely federácie a nemal by byť pozastavený. @@ -20,9 +21,9 @@ sk: pin_errors: following: Musíš už následovať toho človeka, ktorého si praješ zviditeľniť posts: - one: Príspevok few: Príspevky many: Príspevkov + one: Príspevok other: Príspevkov posts_tab_heading: Príspevky admin: @@ -352,6 +353,7 @@ sk: silence: Obmedz suspend: Vylúč title: Nové blokovanie domény + not_permitted: Nemáš povolenie na vykonanie tohto kroku obfuscate: Zatemniť názov domény private_comment: Súkromný komentár private_comment_hint: Odôvodni toto doménové obmedzenie, pre vnútorné vyrozumenie moderátorov. @@ -464,11 +466,11 @@ sk: no_ip_block_selected: Žiadne IP pravidlá neboli zmenené, keďže si žiadne nemal/a zvolené title: pravidlá pre IP adresy relationships: - title: "Vzťahy užívateľa %{acct}" + title: Vzťahy užívateľa %{acct} relays: add_new: Pridaj nový federovací mostík delete: Vymaž - description_html: Federovací mostík je prechodný server, ktorý obmieňa veľké množstvá verejných príspevkov medzi tými servermi ktoré na od neho odoberajú, aj doňho prispievajú. Môže to pomôcť malým a stredným instanciám objavovať federovaný obsah, čo inak vyžaduje aby miestni užívatelia ručne následovali iných ľudí zo vzdialených instancií. + description_html: "Federovací mostík je prechodný server, ktorý obmieňa veľké množstvá verejných príspevkov medzi tými servermi ktoré na od neho odoberajú, aj doňho prispievajú. Môže to pomôcť malým a stredným instanciám objavovať federovaný obsah, čo inak vyžaduje aby miestni užívatelia ručne následovali iných ľudí zo vzdialených instancií." disable: Vypni disabled: Vypnutý enable: Povoľ @@ -545,9 +547,9 @@ sk: roles: add_new: Pridaj postavenie assigned_users: - one: "%{count} užívateľ" few: "%{count} užívateľov" many: "%{count} užívateľov" + one: "%{count} užívateľ" other: "%{count} užívatelia" categories: administration: Spravovanie @@ -686,7 +688,7 @@ sk: new_report: body: "%{reporter} nahlásil/a %{target}" body_remote: Niekto z %{domain} nahlásil/a %{target} - subject: 'Nové hlásenie pre %{instance} (#%{id})' + subject: Nové hlásenie pre %{instance} (#%{id}) new_trends: new_trending_links: title: Populárne odkazy @@ -873,9 +875,9 @@ sk: order_by: Zoraď podľa save_changes: Ulož zmeny validation_errors: - one: Niečo ešte nieje celkom v poriadku! Prosím skontroluj chybu uvedenú nižšie few: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie many: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie + one: Niečo ešte nieje celkom v poriadku! Prosím skontroluj chybu uvedenú nižšie other: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chyby uvedené nižšie imports: errors: @@ -910,9 +912,9 @@ sk: generate: Vygeneruj invited_by: 'Bol/a si pozvaný/á užívateľom:' max_uses: - one: 1 využitie few: "%{count} využití" many: "%{count} využití" + one: 1 využitie other: "%{count} využitia" max_uses_prompt: Bez obmedzení prompt: Vygeneruj a zdieľaj linky s ostatnými, aby mali umožnený prístup k tomuto serveru @@ -981,11 +983,11 @@ sk: follow_request: action: Spravuj žiadosti o sledovanie body: "%{name} žiada povolenie ťa následovať" - subject: '%{name} ťa žiadá o možnosť sledovania' + subject: "%{name} ťa žiadá o možnosť sledovania" title: Nová žiadosť o následovanie mention: action: Odpovedať - body: '%{name} ťa spomenul/a v:' + body: "%{name} ťa spomenul/a v:" subject: Bol/a si spomenutý/á užívateľom %{name} title: Novo spomenutý/á poll: @@ -1106,16 +1108,16 @@ sk: attached: description: 'Priložené: %{attached}' image: - one: "%{count} obrázok" few: "%{count} obrázkov" many: "%{count} obrázkov" + one: "%{count} obrázok" other: "%{count} obrázky" boosted_from_html: Vyzdvihnuté od %{acct_link} content_warning: 'Varovanie o obsahu: %{warning}' disallowed_hashtags: - one: 'obsahoval nepovolený haštag: %{tags}' few: 'obsah nepovolených haštagov: %{tags}' many: 'obsah nepovolených haštagov: %{tags}' + one: 'obsahoval nepovolený haštag: %{tags}' other: 'obsahoval nepovolené haštagy: %{tags}' errors: in_reply_not_found: Príspevok, na ktorý sa snažíš odpovedať, pravdepodobne neexistuje. @@ -1127,14 +1129,14 @@ sk: reblog: Vyzdvihnutie sa nedá pripnúť poll: total_people: - one: "%{count} človek" few: "%{count} ľudí" many: "%{count} ľudia" + one: "%{count} človek" other: "%{count} ľudí" total_votes: - one: "%{count} hlas" few: "%{count} hlasov" many: "%{count} hlasov" + one: "%{count} hlas" other: "%{count} hlasy" vote: Hlasuj show_more: Ukáž viac diff --git a/config/locales/sl.yml b/config/locales/sl.yml index fe5a6308065178..35230ceddb33f0 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1,3 +1,4 @@ +--- sl: about: about_mastodon_html: 'Družbeno omrežje prihodnosti: brez oglasov, brez nadzora korporacij, etično oblikovanje in decentralizacija! Ohranite lastništvo nad svojimi podatki z Mastodonom!' @@ -8,10 +9,10 @@ sl: accounts: follow: Sledi followers: - one: Sledilec - two: Sledilca few: Sledilci + one: Sledilec other: Sledilcev + two: Sledilca following: Sledi instance_actor_flash: Ta račun je navidezni akter, ki se uporablja za predstavljanje strežnika samega in ne posameznega uporabnika. Uporablja se za namene federacije in se ne sme začasno ustaviti. last_active: zadnja dejavnost @@ -20,10 +21,10 @@ sl: pin_errors: following: Verjetno že sledite osebi, ki jo želite potrditi posts: - one: Objava - two: Objavi few: Objave + one: Objava other: Objav + two: Objavi posts_tab_heading: Objave admin: account_actions: @@ -59,7 +60,7 @@ sl: delete: Izbriši podatke deleted: Izbrisano demote: Ponižaj - destroyed_msg: "Podatki uporabnika %{username} so zdaj v vrsti za trajen izbris" + destroyed_msg: Podatki uporabnika %{username} so zdaj v vrsti za trajen izbris disable: Zamrzni disable_sign_in_token_auth: Onemogoči overjanje z žetonom po e-pošti disable_two_factor_authentication: Onemogoči 2FA @@ -110,10 +111,10 @@ sl: perform_full_suspension: Suspendiraj previous_strikes: Predhodni ukrepi previous_strikes_description_html: - one: Ta račun ima %{count} ukrep. - two: Ta račun ima %{count} ukrepa. few: Ta račun ima %{count} ukrepe. + one: Ta račun ima %{count} ukrep. other: Ta račun ima %{count} ukrepov. + two: Ta račun ima %{count} ukrepa. promote: Promoviraj protocol: Protokol public: Javen @@ -356,25 +357,25 @@ sl: new_users: novih uporabnikov opened_reports: odprtih prijav pending_appeals_html: - one: "%{count} čakajoča pritožba" - two: "%{count} čakajoči pritožbi" few: "%{count} čakajoče pritožbe" + one: "%{count} čakajoča pritožba" other: "%{count} čakajočih pritožb" + two: "%{count} čakajoči pritožbi" pending_reports_html: - one: "%{count} čakajoča prijava" - two: "%{count} čakajoči prijavi" few: "%{count} čakajoče prijave" + one: "%{count} čakajoča prijava" other: "%{count} čakajočih prijav" + two: "%{count} čakajoči prijavi" pending_tags_html: - one: "%{count} čakajoči ključnik" - two: "%{count} čakajoča ključnika" few: "%{count} čakajoči ključniki" + one: "%{count} čakajoči ključnik" other: "%{count} čakajočih ključnikov" + two: "%{count} čakajoča ključnika" pending_users_html: - one: "%{count} čakajoči uporabnik" - two: "%{count} čakajoča uporabnika" few: "%{count} čakajoči uporabniki" + one: "%{count} čakajoči uporabnik" other: "%{count} čakajočih uporabnikov" + two: "%{count} čakajoča uporabnika" resolved_reports: razrešenih prijav software: Programska oprema sources: Viri registracij @@ -437,10 +438,10 @@ sl: email_domain_blocks: add_new: Dodaj novo attempts_over_week: - one: "%{count} poskus prijave zadnji teden" - two: "%{count} poskusa prijave zadnji teden" few: "%{count} poskusi prijave zadnji teden" + one: "%{count} poskus prijave zadnji teden" other: "%{count} poskusov prijave zadnji teden" + two: "%{count} poskusa prijave zadnji teden" created_msg: Domena e-pošte je bila uspešno dodana na črni seznam delete: Izbriši dns: @@ -482,16 +483,16 @@ sl: instances: availability: description_html: - one: Če dostava v domeno spodleti %{count} dan brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. - two: Če dostava v domeno spodleti %{count} različna dneva brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. few: Če dostava v domeno spodleti %{count} različne dni brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. + one: Če dostava v domeno spodleti %{count} dan brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. other: Če dostava v domeno spodleti %{count} različne dni brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. + two: Če dostava v domeno spodleti %{count} različna dneva brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. failure_threshold_reached: Prag neuspelih poskusov dosežen %{date}. failures_recorded: - one: Neuspel poskus %{count} različen dan. - two: Neuspeli poskusi %{count} različnih dni. few: Neuspeli poskusi %{count} različnih dni. + one: Neuspel poskus %{count} različen dan. other: Neuspeli poskusi %{count} različnih dni. + two: Neuspeli poskusi %{count} različnih dni. no_failures_recorded: Ni zabeleženih neuspelih poskusov. title: Razpoložljivost warning: Zadnji poskus povezave na ta strežnik je spodletel @@ -534,10 +535,10 @@ sl: destroyed_msg: Podatki iz %{domain} so zdaj v vrsti za takojšnje brisanje. empty: Ni zadetkov med domenami. known_accounts: - one: "%{count} znan račun" - two: "%{count} znana računa" few: "%{count} znani računi" + one: "%{count} znan račun" other: "%{count} znani računi" + two: "%{count} znana računa" moderation: all: Vse limited: Omejeno @@ -577,11 +578,11 @@ sl: no_ip_block_selected: Nobeno pravilo IP ni bilo spremenjeno, ker nobeno ni bilo izbrano title: IP-pravila relationships: - title: "Odnosi računa %{acct}" + title: Odnosi računa %{acct} relays: add_new: Dodaj nov rele delete: Izbriši - description_html: Rele federacije je posredniški strežnik, ki si izmenjuje velike količine javnih objav med strežniki, ki so se naročili in objavili na njem. Majhnim in srednjim strežnikom lahko pomaga pri odkrivanju vsebine iz sistema fediverse, kar bi sicer zahtevalo, da lokalni uporabniki ročno sledijo druge osebe na oddaljenih strežnikih. + description_html: "Rele federacije je posredniški strežnik, ki si izmenjuje velike količine javnih objav med strežniki, ki so se naročili in objavili na njem. Majhnim in srednjim strežnikom lahko pomaga pri odkrivanju vsebine iz sistema fediverse, kar bi sicer zahtevalo, da lokalni uporabniki ročno sledijo druge osebe na oddaljenih strežnikih." disable: Onemogoči disabled: Onemogočeno enable: Omogoči @@ -600,10 +601,10 @@ sl: reports: account: notes: - one: "%{count} opomba" - two: "%{count} opombi" few: "%{count} opombe" + one: "%{count} opomba" other: "%{count} opomb" + two: "%{count} opombi" action_log: Revizijski zapisnik action_taken_by: Dejanje, ki ga je sprejel actions: @@ -662,7 +663,7 @@ sl: delete_html: 'Nekatere od objav uporabnika/ce @%{acct} boste odstranili. S tem boste:' mark_as_sensitive_html: 'Nekatere od objav uporabnika/ce @%{acct} boste označili kot občutljive. S tem boste:' silence_html: 'Račun uporabnika/ce @%{acct} boste omejili. S tem boste:' - suspend_html: 'Suspendirali boste račun uporabnika/ce @%{acct}. S tem boste:' + suspend_html: "Suspendirali boste račun uporabnika/ce @%{acct}. S tem boste:" actions: delete_html: Odstrani žaljive objave mark_as_sensitive_html: Označi večpredstavnost žaljivih objav kot občutljivo @@ -671,7 +672,7 @@ sl: close_report: 'Označi prijavo #%{id} kot rešeno' close_reports_html: Označi vse prijave zoper @%{acct} kot rešene delete_data_html: Izbriši profil in vsebine @%{acct} čez 30 dni, razen če suspenz v tem času ni preklican - preview_preamble_html: "Oseba @%{acct} bo prejela opozorilo z naslednjo vsebino:" + preview_preamble_html: 'Oseba @%{acct} bo prejela opozorilo z naslednjo vsebino:' record_strike_html: Izdajte opomin računu @%{acct}, da boste lažje stopnjevali svoj odziv ob prihodnjih kršitvah s tega računa send_email_html: Pošlji @%{acct} opozorilno e-sporočilo warning_placeholder: Neobvezna dodatna utemeljitev dejanja moderiranja. @@ -685,10 +686,10 @@ sl: roles: add_new: Dodaj vlogo assigned_users: - one: "%{count} uporabnik" - two: "%{count} uporabnika" few: "%{count} uporabniki" + one: "%{count} uporabnik" other: "%{count} uporabnikov" + two: "%{count} uporabnika" categories: administration: Upravljanje devops: DevOps @@ -701,10 +702,10 @@ sl: everyone: Privzete pravice everyone_full_description_html: To je osnovna vloga, ki vpliva na vse uporabnike, celo na tiste brez dodeljene vloge. Vse druge vloge dedujejo njene pravice. permissions_count: - one: "%{count} pravica" - two: "%{count} pravici" few: "%{count} pravice" + one: "%{count} pravica" other: "%{count} pravic" + two: "%{count} pravici" privileges: administrator: Skrbnik administrator_description: Uporabniki s temi pravicami bodo zaobšli vse pravice @@ -893,10 +894,10 @@ sl: publishers: no_publisher_selected: Noben izdajatelj ni bil spremenjen, ker noben ni bila izbran shared_by_over_week: - one: Delila %{count} oseba v zadnjem tednu - two: Delili %{count} osebi v zadnjem tednu few: Delile %{count} osebe v zadnjem tednu + one: Delila %{count} oseba v zadnjem tednu other: Delilo %{count} oseb v zadnjem tednu + two: Delili %{count} osebi v zadnjem tednu title: Povezave v trendu usage_comparison: Danes deljeno %{today}-krat, včeraj pa %{yesterday}-krat not_allowed_to_trend: Ni dovoljeno, da bi bilo v trendu @@ -917,10 +918,10 @@ sl: no_status_selected: Nobena trendna objava ni bila spremenjena, ker ni bila nobena izbrana not_discoverable: Avtor ni dovolil, da bi ga bilo moč odkriti shared_by: - one: Deljeno ali priljubljeno %{friendly_count}-krat - two: Deljeno ali priljubljeno %{friendly_count}-krat few: Deljeno ali priljubljeno %{friendly_count}-krat + one: Deljeno ali priljubljeno %{friendly_count}-krat other: Deljeno ali priljubljeno %{friendly_count}-krat + two: Deljeno ali priljubljeno %{friendly_count}-krat title: Trendne objave tags: current_score: Trenutni rezultat %{score} @@ -943,10 +944,10 @@ sl: usable: Je moč uporabiti usage_comparison: Danes uporabljeno %{today}-krat, včeraj pa %{yesterday}-krat used_by_over_week: - one: Uporabila %{count} oseba v zadnjem tednu - two: Uporabili %{count} osebi v zadnjem tednu few: Uporabile %{count} osebe v zadnjem tednu + one: Uporabila %{count} oseba v zadnjem tednu other: Uporabilo %{count} oseb v zadnjem tednu + two: Uporabili %{count} osebi v zadnjem tednu title: Trendi trending: V porastu warning_presets: @@ -958,7 +959,7 @@ sl: webhooks: add_new: Dodaj končno točko delete: Izbriši - description_html: Spletna zanka omogoča, da Mastodon potiska obvestila v resničnem času o izbranih dogodkih vašemu programu, tako da ta lahko samodejno proži odzive. + description_html: "Spletna zanka omogoča, da Mastodon potiska obvestila v resničnem času o izbranih dogodkih vašemu programu, tako da ta lahko samodejno proži odzive." disable: Onemogoči disabled: Onemogočeno edit: Uredi končno točko @@ -966,10 +967,10 @@ sl: enable: Omogoči enabled: Dejaven enabled_events: - one: '%{count} omogočen dogodek' - two: "%{count} omogočena dogodka" few: "%{count} omogočeni dogodki" + one: "%{count} omogočen dogodek" other: "%{count} omogočenih dogodkov" + two: "%{count} omogočena dogodka" events: Dogodki new: Nova spletna zanka rotate_secret: Zasukaj skrivnost @@ -996,7 +997,7 @@ sl: new_report: body: "%{reporter} je prijavil %{target}" body_remote: Nekdo iz %{domain} je prijavil %{target} - subject: 'Nove prijave za %{instance} (#%{id})' + subject: Nove prijave za %{instance} (#%{id}) new_trends: body: 'Naslednji elementi potrebujejo pregled, preden jih je možno javno prikazati:' new_trending_links: @@ -1005,7 +1006,7 @@ sl: title: Trendne objave new_trending_tags: no_approved_tags: Trenutno ni odobrenih ključnikov v trendu. - requirements: 'Vsak od teh kandidatov bi lahko presegel odobreni ključnik v trendu št. %{rank}, ki je trenutno %{lowest_tag_name} z rezultatom %{lowest_tag_score}.' + requirements: Vsak od teh kandidatov bi lahko presegel odobreni ključnik v trendu št. %{rank}, ki je trenutno %{lowest_tag_name} z rezultatom %{lowest_tag_score}. title: Ključniki v trendu subject: Novi trendi za pregled na %{instance} aliases: @@ -1249,20 +1250,20 @@ sl: expires_in: Poteče čez %{distance} expires_on: Poteče %{date} keywords: - one: "%{count} ključna beseda" - two: "%{count} ključni besedi" few: "%{count} ključne besede" + one: "%{count} ključna beseda" other: "%{count} ključnih besed" + two: "%{count} ključni besedi" statuses: - one: "%{count} objava" - two: "%{count} objavi" few: "%{count} objave" + one: "%{count} objava" other: "%{count} objav" + two: "%{count} objavi" statuses_long: - one: "%{count} posamezna objava skrita" - two: "%{count} posamezni objavi skriti" few: "%{count} posamezne objave skrite" + one: "%{count} posamezna objava skrita" other: "%{count} posameznih objav skritih" + two: "%{count} posamezni objavi skriti" title: Filtri new: save: Shrani nov filter @@ -1277,12 +1278,14 @@ sl: generic: all: Vse all_items_on_page_selected_html: - one: "Na tej strani je izbran %{count} element." - two: Na tej strani sta izbrana %{count} elementa. few: Na tej strani so izbrani %{count} elementi. + one: Na tej strani je izbran %{count} element. other: Na tej strani je izbranih %{count} elementov. + two: Na tej strani sta izbrana %{count} elementa. all_matching_items_selected_html: - one: "Izbran je %{count} element, ki ustreza vašemu iskanju." + few: Izbrani so %{count} elementi, ki ustrezajo vašemu iskanju. + one: Izbran je %{count} element, ki ustreza vašemu iskanju. + other: Izbranih je %{count} elementov, ki ustrezajo vašemu iskanju. two: Izbrana sta %{count} elementa, ki ustrezata vašemu iskanju. cancel: Prekliči changes_saved_msg: Spremembe so uspešno shranjene! @@ -1294,16 +1297,16 @@ sl: order_by: Razvrsti po save_changes: Shrani spremembe select_all_matching_items: - one: Izberite %{count} element, ki ustreza vašemu iskanju. - two: Izberite %{count} elementa, ki ustrezata vašemu iskanju. few: Izberite %{count} elemente, ki ustrezajo vašemu iskanju. + one: Izberite %{count} element, ki ustreza vašemu iskanju. other: Izberite %{count} elementov, ki ustrezajo vašemu iskanju. + two: Izberite %{count} elementa, ki ustrezata vašemu iskanju. today: danes validation_errors: - one: Nekaj še ni čisto v redu! Spodaj si oglejte napako - two: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napaki few: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napake + one: Nekaj še ni čisto v redu! Spodaj si oglejte napako other: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napak + two: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napaki imports: errors: empty: Prazna datoteka CSV @@ -1362,10 +1365,10 @@ sl: generate: Ustvari invited_by: 'Povabil/a vas je:' max_uses: - one: 1 uporaba - two: "%{count} uporabi" few: "%{count} uporabe" + one: 1 uporaba other: "%{count} uporab" + two: "%{count} uporabi" max_uses_prompt: Brez omejitve prompt: Ustvarite in delite povezave z drugimi, da omogočite dostop do tega strežnika table: @@ -1450,7 +1453,7 @@ sl: sign_up: subject: "%{name} se je vpisal/a" favourite: - body: '%{name} je vzljubil/a vašo objavo:' + body: "%{name} je vzljubil/a vašo objavo:" subject: "%{name} je vzljubil/a vašo objavo" title: Novo priljubljeno follow: @@ -1464,8 +1467,8 @@ sl: title: Nova prošnja za sledenje mention: action: Odgovori - body: '%{name} vas je omenil/a v:' - subject: '%{name} vas je omenil/a' + body: "%{name} vas je omenil/a v:" + subject: "%{name} vas je omenil/a" title: Nova omemba poll: subject: Anketa, ki jo je pripravil/a %{name}, se je iztekla @@ -1639,29 +1642,29 @@ sl: statuses: attached: audio: - one: "%{count} zvočni posnetek" - two: "%{count} zvočna posnetka" few: "%{count} zvočni posnetki" + one: "%{count} zvočni posnetek" other: "%{count} zvočnih posnetkov" + two: "%{count} zvočna posnetka" description: 'Priloženo: %{attached}' image: - one: "%{count} slika" - two: "%{count} sliki" few: "%{count} slike" + one: "%{count} slika" other: "%{count} slik" + two: "%{count} sliki" video: - one: "%{count} video posnetek" - two: "%{count} video posnetka" few: "%{count} video posnetki" + one: "%{count} video posnetek" other: "%{count} video posnetkov" + two: "%{count} video posnetka" boosted_from_html: Izpostavljeno z računa %{acct_link} content_warning: 'Opozorilo o vsebini: %{warning}' default_language: Enak kot jezik vmesnika disallowed_hashtags: - one: 'vsebuje nedovoljeni ključnik: %{tags}' - two: 'vsebuje nedovoljena ključnika: %{tags}' few: 'vsebuje nedovoljene ključnike: %{tags}' + one: 'vsebuje nedovoljeni ključnik: %{tags}' other: 'vsebuje nedovoljenih ključnikov: %{tags}' + two: 'vsebuje nedovoljena ključnika: %{tags}' edited_at_html: Urejeno %{date} errors: in_reply_not_found: Objava, na katero želite odgovoriti, ne obstaja. @@ -1674,15 +1677,15 @@ sl: reblog: Izpostavitev ne more biti pripeta poll: total_people: - one: "%{count} Oseba" - two: "%{count} osebi" few: "%{count} osebe" + one: "%{count} Oseba" other: "%{count} oseb" + two: "%{count} osebi" total_votes: - one: "%{count} glas" - two: "%{count} glasova" few: "%{count} glasovi" + one: "%{count} glas" other: "%{count} glasov" + two: "%{count} glasova" vote: Glasuj show_more: Pokaži več show_newer: Pokaži novejše diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 03bd1cfcb0d9db..6cdfa268dbb27e 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1,3 +1,4 @@ +--- sq: about: about_mastodon_html: 'Rrjeti shoqëror i së ardhmes: Pa reklama, pa survejim nga korporata, konceptim etik dhe decentralizim! Jini zot i të dhënave tuaja, me Mastodon-in!' @@ -55,7 +56,7 @@ sq: 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" + destroyed_msg: Të dhënat e %{username} tani janë vënë në radhë për fshirje të menjëhershme disable: Çaktivizoje disable_sign_in_token_auth: Çaktivizo mirëfilltësim me token email-i disable_two_factor_authentication: Çaktivizoni 2FA-në @@ -86,7 +87,7 @@ sq: 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' + memorialized_msg: "%{username} u kthye me sukses në një llogari përkujtimore" moderation: active: Aktiv all: Krejt @@ -556,7 +557,7 @@ sq: no_ip_block_selected: S’u ndryshua ndonjë rregull IP, ngaqë s’u përzgjodh ndonjë i tillë title: Rregulla IP relationships: - title: "Marrëdhënie të %{acct}" + title: Marrëdhënie të %{acct} relays: add_new: Shtoni rele të re delete: Fshije @@ -950,7 +951,7 @@ sq: one: 1 akt i aktivizuar other: "%{count}s akte të aktivizuar" events: Akte - new: Webhook i ri + new: "Webhook i ri" rotate_secret: Ciklo të fshehtën secret: E fshehtë nënshkrimesh status: Gjendje @@ -1157,7 +1158,7 @@ sq: description_html: Këto janë veprime të ndërmarra kundër llogarisë tuaj dhe sinjalizime që ju janë dërguar nga stafi i %{instance}. recipient: Drejtuar reject_appeal: Hidheni poshtë apelimin - status: '#%{id} postimi' + status: "#%{id} postimi" status_removed: Postim i hequr tashmë nga sistemi title: "%{action} prej %{date}" title_actions: @@ -1260,10 +1261,10 @@ sq: generic: all: Krejt all_items_on_page_selected_html: - one: "Në këtë faqe është i përzgjedhur %{count} objekt." + one: Në këtë faqe është i përzgjedhur %{count} objekt. other: Në këtë faqe janë përzgjedhur krejt %{count} objektet. all_matching_items_selected_html: - one: "Është përzgjedhur %{count} objekt me përkim me kërkimin tuaj." + one: Është përzgjedhur %{count} objekt me përkim me kërkimin tuaj. other: Janë përzgjedhur krejt %{count} objektet me përkim me kërkimin tuaj. cancel: Anuloje changes_saved_msg: Ndryshimet u ruajtën me sukses! @@ -1445,8 +1446,8 @@ sq: subject: "%{name} parapëlqeu gjendjen tuaj" title: E parapëlqyer e re follow: - body: "Tani ju ndjek %{name}!" - subject: "Tani ju ndjek %{name}" + body: Tani ju ndjek %{name}! + subject: Tani ju ndjek %{name} title: Ndjekës i ri follow_request: action: Administroni kërkesa ndjekjeje diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a727904ae97160..82fbbff49e3065 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1,3 +1,4 @@ +--- sr-Latn: about: about_mastodon_html: 'Društvena mreža budućnosti: bez reklama, bez korporativnog praćenja, etički dizajn, i decentralizacija! Posedujte svoje podatke sa Mastodon-om!' @@ -8,8 +9,8 @@ sr-Latn: accounts: follow: Zaprati followers: - one: Pratilac few: Pratioca + one: Pratilac other: Pratilaca following: Pratim instance_actor_flash: Ovaj nalog je virtuelni akter koji ne predstavlja nijednog korisnika lično, već sâm server. Koristi se u svrhu federacije i ne treba ga suspendovati. @@ -19,8 +20,8 @@ sr-Latn: pin_errors: following: Morate pratiti osobu koju želite da preporučite posts: - one: Objava few: Objave + one: Objava other: Objava posts_tab_heading: Objave admin: @@ -57,7 +58,7 @@ sr-Latn: delete: Obriši podatke deleted: Izbrisano demote: Ražaluj - destroyed_msg: "Podaci korisnika %{username} su nepovratno stavljeni u red za brisanje" + destroyed_msg: Podaci korisnika %{username} su nepovratno stavljeni u red za brisanje disable: Zamrzni disable_sign_in_token_auth: Onemogući imejl autentifikaciju disable_two_factor_authentication: Isključi 2FA @@ -88,7 +89,7 @@ sr-Latn: media_attachments: Multimedijalni prilozi memorialize: Prebaci u in memoriam memorialized: Podignut spomenik - memorialized_msg: '%{username} je uspešno pretvoren u memorijalni nalog' + memorialized_msg: "%{username} je uspešno pretvoren u memorijalni nalog" moderation: active: Aktivan all: Svi @@ -108,8 +109,8 @@ sr-Latn: perform_full_suspension: Suspenduj previous_strikes: Prethodni prekršaji previous_strikes_description_html: - one: Ovaj nalog ima jedan prekršaj. few: Ovaj nalog ima %{count} prekršaja. + one: Ovaj nalog ima jedan prekršaj. other: Ovaj nalog ima %{count} prekršaja. promote: Unapredi protocol: Protokol @@ -353,20 +354,20 @@ sr-Latn: new_users: novi korisnici opened_reports: otvorene prijave pending_appeals_html: - one: "%{count} žalba na čekanju" few: "%{count} žalbe na čekanju" + one: "%{count} žalba na čekanju" other: "%{count} žalbi na čekanju" pending_reports_html: - one: "%{count} prijava na čekanju" few: "%{count} prijave na čekanju" + one: "%{count} prijava na čekanju" other: "%{count} prijava na čekanju" pending_tags_html: - one: "%{count} heš oznaka na čekanju" few: "%{count} heš oznake na čekanju" + one: "%{count} heš oznaka na čekanju" other: "%{count} heš oznaka na čekanju" pending_users_html: - one: "%{count} korisnik na čekanju" few: "%{count} korisnika na čekanju" + one: "%{count} korisnik na čekanju" other: "%{count} korisnika na čekanju" resolved_reports: rešene prijave software: Softver @@ -432,8 +433,8 @@ sr-Latn: email_domain_blocks: add_new: Dodaj novi attempts_over_week: - one: "%{count} pokušaj tokom prethodne nedelje" few: "%{count} pokušaja tokom prethodne nedelje" + one: "%{count} pokušaj tokom prethodne nedelje" other: "%{count} pokušaja registracije tokom prethodne nedelje" created_msg: Uspešno dodao domen E-pošte na crnu listu delete: Obriši @@ -476,13 +477,13 @@ sr-Latn: instances: availability: description_html: - one: Ako isporuka domenu ne uspe nijednom u vremenskom periodu od %{count} dana, dalji pokušaji isporuke se neće inicirati osim ukoliko se ne primi isporuka sa domena. few: Ukoliko isporuka domenu ne uspe nijednom tokom %{count} različitih dana, dalji pokušaji isporuke neće biti inicirani osim ukoliko se ne primi isporuka sa domena. + one: Ako isporuka domenu ne uspe nijednom u vremenskom periodu od %{count} dana, dalji pokušaji isporuke se neće inicirati osim ukoliko se ne primi isporuka sa domena. other: Ukoliko isporuka domenu ne uspe nijednom tokom %{count} različitih dana, dalji pokušaji isporuke se neće inicirati osim ukoliko se ne primi isporuka sa domena. failure_threshold_reached: Prag neuspeha dostignut datuma %{date}. failures_recorded: - one: Neuspeli pokušaj tokom %{count} dana. few: Neuspeli pokušaji tokom %{count} različita dana. + one: Neuspeli pokušaj tokom %{count} dana. other: Neuspeli pokušaji tokom %{count} različitih dana. no_failures_recorded: Bez zabeleženih neuspeha. title: Dostupnost @@ -526,8 +527,8 @@ sr-Latn: destroyed_msg: Podaci sa %{domain} su sada u redu za čekanje za izvesno brisanje. empty: Nijedan domen nije pronađen. known_accounts: - one: "%{count} poznat nalog" few: "%{count} poznata naloga" + one: "%{count} poznat nalog" other: "%{count} poznatih naloga" moderation: all: Sve @@ -568,11 +569,11 @@ sr-Latn: no_ip_block_selected: Nijedno IP pravilo nije promenjeno jer nijedno nije izabrano title: IP pravila relationships: - title: "Odnosi korisnika %{acct}" + title: Odnosi korisnika %{acct} relays: add_new: Dodaj novi relej delete: Obriši - description_html: Federalni relej je posrednički server koji razmenjuje velike količine javnih truba između servera na koji je pretplaćen i na koji objavljuje.Može pomoći malim i srednjim serverima da otkriju sadržaj iz fediversa, koji inače zahteva od lokalnih korisnika da ručno pratiti ostale ljude na udaljenim serverima. + description_html: "Federalni relej je posrednički server koji razmenjuje velike količine javnih truba između servera na koji je pretplaćen i na koji objavljuje.Može pomoći malim i srednjim serverima da otkriju sadržaj iz fediversa, koji inače zahteva od lokalnih korisnika da ručno pratiti ostale ljude na udaljenim serverima." disable: Isključi disabled: Isključen enable: Uključi @@ -591,8 +592,8 @@ sr-Latn: reports: account: notes: - one: "%{count} beleška" few: "%{count} beleške" + one: "%{count} beleška" other: "%{count} beležaka" action_log: Zapisnik action_taken_by: Akciju izveo @@ -675,8 +676,8 @@ sr-Latn: roles: add_new: Dodaj ulogu assigned_users: - one: "%{count} korisnik" few: "%{count} korisnika" + one: "%{count} korisnik" other: "%{count} korisnika" categories: administration: Administracija @@ -690,8 +691,8 @@ sr-Latn: everyone: Podrazumevana ovlašćenja everyone_full_description_html: Ovo je osnovna uloga koja se odnosi na sve korisnike, čak i one kojima nije dodeljena uloga. Sve druge uloge nasleđuju ovlašćenja od osnovne uloge. permissions_count: - one: "%{count} dozvola" few: "%{count} dozvole" + one: "%{count} dozvola" other: "%{count} dozvola" privileges: administrator: Administrator @@ -899,8 +900,8 @@ sr-Latn: publishers: no_publisher_selected: Nijedan izdavač nije promenjen jer nijedan nije izabran shared_by_over_week: - one: Podeljen od strane jedne osobe tokom prethodne nedelje few: Podeljen od strane %{count} osobe tokom prethodne nedelje + one: Podeljen od strane jedne osobe tokom prethodne nedelje other: Podeljen od strane %{count} osoba tokom prethodne nedelje title: Linkovi u trendu usage_comparison: Podeljeno %{today} puta danas, u poređenju sa %{yesterday} puta juče @@ -922,8 +923,8 @@ sr-Latn: no_status_selected: Nijedna objava u trendu nije promenjena jer nijedna nije izabrana not_discoverable: Autor nije dao saglasnost da bude preporučen shared_by: - one: Podeljeno ili stavljeno u „omiljene” jednom few: Podeljeno i stavljeno u „omiljene” %{friendly_count} puta + one: Podeljeno ili stavljeno u „omiljene” jednom other: Podeljeno i stavljeno u „omiljene” %{friendly_count} puta title: Objave u trendu tags: @@ -947,8 +948,8 @@ sr-Latn: usable: Može se koristiti usage_comparison: Upotrebljeno %{today} puta danas, u poređenju sa %{yesterday} puta juče used_by_over_week: - one: Korišćeno od strane jedne osobe tokom prethodne nedelje few: Korišćeno od strane %{count} osobe tokom prethodne nedelje + one: Korišćeno od strane jedne osobe tokom prethodne nedelje other: Korišćeno od strane %{count} ljudi tokom prethodne nedelje title: Trendovi trending: U trendu @@ -969,8 +970,8 @@ sr-Latn: enable: Omogući enabled: Aktivno enabled_events: - one: 1 omogućen događaj few: "%{count} omogućena događaja" + one: 1 omogućen događaj other: "%{count} omogućenih događaja" events: Događaji new: Novi webhook @@ -1036,7 +1037,7 @@ sr-Latn: sensitive_content: Osetljiv sadržaj application_mailer: notification_preferences: Promeni preference E-pošte - salutation: "Poštovani %{name}," + salutation: Poštovani %{name}, settings: 'Promeni podešavanja e-pošte: %{link}' unsubscribe: Odjavi se view: 'Pogledaj:' @@ -1262,16 +1263,16 @@ sr-Latn: expires_in: Ističe za %{distance} expires_on: Ističe datuma %{date} keywords: - one: "%{count} ključna reč" few: "%{count} ključne reči" + one: "%{count} ključna reč" other: "%{count} ključnih reči" statuses: - one: "%{count} objava" few: "%{count} objave" + one: "%{count} objava" other: "%{count} objava" statuses_long: - one: "%{count} zasebna objava sakrivena" few: "%{count} zasebne objave sakrivene" + one: "%{count} zasebna objava sakrivena" other: "%{count} zasebnih objava sakriveno" title: Filteri new: @@ -1287,12 +1288,12 @@ sr-Latn: generic: all: Svi all_items_on_page_selected_html: - one: "%{count} stavka sa ove stranice je izabrana." few: Sve %{count} stavke sa ove stranice su izabrane. + one: "%{count} stavka sa ove stranice je izabrana." other: Svih %{count} stavki sa ove stranice je izabrano. all_matching_items_selected_html: - one: "%{count} stavka koja se poklapa sa Vašom pretragom je izabrana." few: Sve %{count} stavke koje se poklapaju sa Vašom pretragom su izabrane. + one: "%{count} stavka koja se poklapa sa Vašom pretragom je izabrana." other: Svih %{count} stavki koje se poklapaju sa Vašom pretragom su izabrane. cancel: Otkaži changes_saved_msg: Promene su uspešno sačuvane! @@ -1304,13 +1305,13 @@ sr-Latn: order_by: Sortiraj prema save_changes: Sačuvaj promene select_all_matching_items: - one: Odaberite %{count} stavku koja se poklapa sa Vašom pretragom. few: Odaberite sve %{count} stavke koje se poklapaju sa Vašom pretragom. + one: Odaberite %{count} stavku koja se poklapa sa Vašom pretragom. other: Odaberite svih %{count} stavki koje se poklapaju sa Vašom pretragom. today: danas validation_errors: - one: Nešto nije baš kako treba! Pregledajte greške ispod few: Nešto nije baš kako treba! Pregledajte %{count} greške ispod + one: Nešto nije baš kako treba! Pregledajte greške ispod other: Nešto nije baš kako treba! Pregledajte %{count} grešaka ispod imports: errors: @@ -1384,8 +1385,8 @@ sr-Latn: generate: Generiši invited_by: 'Pozvao Vas je:' max_uses: - one: 1 korišćenje few: "%{count} korišćenja" + one: 1 korišćenje other: "%{count} korišćenja" max_uses_prompt: Bez ograničenja prompt: Generiši i podeli linkove sa drugima da im odobrite pristup ovoj instanci @@ -1487,13 +1488,13 @@ sr-Latn: title: Novi zahtev za praćenje mention: action: Odgovori - body: '%{name} Vas je pomenuo u:' - subject: '%{name} Vas je pomenuo' + body: "%{name} Vas je pomenuo u:" + subject: "%{name} Vas je pomenuo" title: Novo spominjanje poll: subject: Anketa korisnika %{name} se završila reblog: - body: '%{name} Vam je podržao/la status:' + body: "%{name} Vam je podržao/la status:" subject: "%{name} je podržao/la Vaš status" title: Nova podrška status: @@ -1666,17 +1667,17 @@ sr-Latn: statuses: attached: audio: - one: "%{count} audio zapis" few: "%{count} audio zapisa" + one: "%{count} audio zapis" other: "%{count} audio zapisa" description: 'U prilogu: %{attached}' image: - one: "%{count} sliku" few: "%{count} slika" + one: "%{count} sliku" other: "%{count} slika" video: - one: "%{count} video zapis" few: "%{count} video zapisa" + one: "%{count} video zapis" other: "%{count} video zapisa" boosted_from_html: Podržano od %{acct_link} content_warning: 'Upozorenje na sadržaj: %{warning}' @@ -1697,12 +1698,12 @@ sr-Latn: reblog: Podrška ne može da se prikači poll: total_people: - one: "%{count} osoba" few: "%{count} osobe" + one: "%{count} osoba" other: "%{count} ljudi" total_votes: - one: "%{count} glas" few: "%{count} glasa" + one: "%{count} glas" other: "%{count} glasova" vote: Glasajte show_more: Prikaži još diff --git a/config/locales/sr.yml b/config/locales/sr.yml index dc0dad9fbd97eb..ffddab8697deb3 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1,3 +1,4 @@ +--- sr: about: about_mastodon_html: 'Друштвена мрежа будућности: без реклама, без корпоративног праћења, етички дизајн, и децентрализација! Поседујте своје податке са Mastodon-ом!' @@ -8,8 +9,8 @@ sr: accounts: follow: Запрати followers: - one: Пратилац few: Пратиоца + one: Пратилац other: Пратилаца following: Пратим instance_actor_flash: Овај налог је виртуелни актер који не представља ниједног корисника лично, већ сâм сервер. Користи се у сврху федерације и не треба га суспендовати. @@ -19,8 +20,8 @@ sr: pin_errors: following: Морате пратити особу коју желите да препоручите posts: - one: Објава few: Објаве + one: Објава other: Објава posts_tab_heading: Објаве admin: @@ -57,7 +58,7 @@ sr: delete: Обриши податке deleted: Избрисано demote: Ражалуј - destroyed_msg: "Подаци корисника %{username} су неповратно стављени у ред за брисање" + destroyed_msg: Подаци корисника %{username} су неповратно стављени у ред за брисање disable: Замрзни disable_sign_in_token_auth: Онемогући имејл аутентификацију disable_two_factor_authentication: Искључи 2FA @@ -88,7 +89,7 @@ sr: media_attachments: Мултимедијални прилози memorialize: Пребаци у in memoriam memorialized: Подигнут споменик - memorialized_msg: '%{username} је успешно претворен у меморијални налог' + memorialized_msg: "%{username} је успешно претворен у меморијални налог" moderation: active: Активан all: Сви @@ -108,8 +109,8 @@ sr: perform_full_suspension: Суспендуј previous_strikes: Претходни прекршаји previous_strikes_description_html: - one: Овај налог има један прекршај. few: Овај налог има %{count} прекршаја. + one: Овај налог има један прекршај. other: Овај налог има %{count} прекршаја. promote: Унапреди protocol: Протокол @@ -353,20 +354,20 @@ sr: new_users: нови корисници opened_reports: отворене пријаве pending_appeals_html: - one: "%{count} жалба на чекању" few: "%{count} жалбе на чекању" + one: "%{count} жалба на чекању" other: "%{count} жалби на чекању" pending_reports_html: - one: "%{count} пријава на чекању" few: "%{count} пријаве на чекању" + one: "%{count} пријава на чекању" other: "%{count} пријава на чекању" pending_tags_html: - one: "%{count} хеш ознака на чекању" few: "%{count} хеш ознаке на чекању" + one: "%{count} хеш ознака на чекању" other: "%{count} хеш ознака на чекању" pending_users_html: - one: "%{count} корисник на чекању" few: "%{count} корисника на чекању" + one: "%{count} корисник на чекању" other: "%{count} корисника на чекању" resolved_reports: решене пријаве software: Софтвер @@ -432,8 +433,8 @@ sr: email_domain_blocks: add_new: Додај нови attempts_over_week: - one: "%{count} покушај током претходне недеље" few: "%{count} покушаја током претходне недеље" + one: "%{count} покушај током претходне недеље" other: "%{count} покушаја регистрације током претходне недеље" created_msg: Успешно додао домен Е-поште на црну листу delete: Обриши @@ -476,13 +477,13 @@ sr: instances: availability: description_html: - one: Ако испорука домену не успе ниједном у временском периоду од %{count} дана, даљи покушаји испоруке се неће иницирати осим уколико се не прими испорука са домена. few: Уколико испорука домену не успе ниједном током %{count} различитих дана, даљи покушаји испоруке неће бити иницирани осим уколико се не прими испорука са домена. + one: Ако испорука домену не успе ниједном у временском периоду од %{count} дана, даљи покушаји испоруке се неће иницирати осим уколико се не прими испорука са домена. other: Уколико испорука домену не успе ниједном током %{count} различитих дана, даљи покушаји испоруке се неће иницирати осим уколико се не прими испорука са домена. failure_threshold_reached: Праг неуспеха достигнут датума %{date}. failures_recorded: - one: Неуспели покушај током %{count} дана. few: Неуспели покушаји током %{count} различита дана. + one: Неуспели покушај током %{count} дана. other: Неуспели покушаји током %{count} различитих дана. no_failures_recorded: Без забележених неуспеха. title: Доступност @@ -526,8 +527,8 @@ sr: destroyed_msg: Подаци са %{domain} су сада у реду за чекање за извесно брисање. empty: Ниједан домен није пронађен. known_accounts: - one: "%{count} познат налог" few: "%{count} позната налога" + one: "%{count} познат налог" other: "%{count} познатих налога" moderation: all: Све @@ -568,11 +569,11 @@ sr: no_ip_block_selected: Ниједно IP правило није промењено јер ниједно није изабрано title: IP правила relationships: - title: "Односи корисника %{acct}" + title: Односи корисника %{acct} relays: add_new: Додај нови релеј delete: Обриши - description_html: Федерални релеј је посреднички сервер који размењује велике количине јавних труба између сервера на који је претплаћен и на који објављује.Може помоћи малим и средњим серверима да открију садржај из федиверса, који иначе захтева од локалних корисника да ручно пратити остале људе на удаљеним серверима. + description_html: "Федерални релеј је посреднички сервер који размењује велике количине јавних труба између сервера на који је претплаћен и на који објављује.Може помоћи малим и средњим серверима да открију садржај из федиверса, који иначе захтева од локалних корисника да ручно пратити остале људе на удаљеним серверима." disable: Искључи disabled: Искључен enable: Укључи @@ -591,8 +592,8 @@ sr: reports: account: notes: - one: "%{count} белешка" few: "%{count} белешке" + one: "%{count} белешка" other: "%{count} бележака" action_log: Записник action_taken_by: Акцију извео @@ -675,8 +676,8 @@ sr: roles: add_new: Додај улогу assigned_users: - one: "%{count} корисник" few: "%{count} корисника" + one: "%{count} корисник" other: "%{count} корисника" categories: administration: Администрација @@ -690,8 +691,8 @@ sr: everyone: Подразумевана овлашћења everyone_full_description_html: Ово је основна улога која се односи на све кориснике, чак и оне којима није додељена улога. Све друге улоге наслеђују овлашћења од основне улоге. permissions_count: - one: "%{count} дозвола" few: "%{count} дозволе" + one: "%{count} дозвола" other: "%{count} дозвола" privileges: administrator: Администратор @@ -899,8 +900,8 @@ sr: publishers: no_publisher_selected: Ниједан издавач није промењен јер ниједан није изабран shared_by_over_week: - one: Подељен од стране једне особе током претходне недеље few: Подељен од стране %{count} особе током претходне недеље + one: Подељен од стране једне особе током претходне недеље other: Подељен од стране %{count} особа током претходне недеље title: Линкови у тренду usage_comparison: Подељено %{today} пута данас, у поређењу са %{yesterday} пута јуче @@ -947,8 +948,8 @@ sr: usable: Може се користити usage_comparison: Употребљено %{today} пута данас, у поређењу са %{yesterday} пута јуче used_by_over_week: - one: Коришћено од стране једне особе током претходне недеље few: Коришћено од стране %{count} особе током претходне недеље + one: Коришћено од стране једне особе током претходне недеље other: Коришћено од стране %{count} људи током претходне недеље title: Трендови trending: У тренду @@ -969,8 +970,8 @@ sr: enable: Омогући enabled: Активно enabled_events: - one: 1 омогућен догађај few: "%{count} омогућена догађаја" + one: 1 омогућен догађај other: "%{count} омогућених догађаја" events: Догађаји new: Нови webhook @@ -1036,7 +1037,7 @@ sr: sensitive_content: Осетљив садржај application_mailer: notification_preferences: Промени преференце Е-поште - salutation: "Поштовани %{name}," + salutation: Поштовани %{name}, settings: 'Промени подешавања е-поште: %{link}' unsubscribe: Одјави се view: 'Погледај:' @@ -1262,16 +1263,16 @@ sr: expires_in: Истиче за %{distance} expires_on: Истиче датума %{date} keywords: - one: "%{count} кључна реч" few: "%{count} кључне речи" + one: "%{count} кључна реч" other: "%{count} кључних речи" statuses: - one: "%{count} објава" few: "%{count} објаве" + one: "%{count} објава" other: "%{count} објава" statuses_long: - one: "%{count} засебна објава сакривена" few: "%{count} засебне објаве сакривене" + one: "%{count} засебна објава сакривена" other: "%{count} засебних објава сакривено" title: Филтери new: @@ -1287,12 +1288,12 @@ sr: generic: all: Сви all_items_on_page_selected_html: - one: "%{count} ставка са ове странице је изабрана." few: Све %{count} ставке са ове странице су изабране. + one: "%{count} ставка са ове странице је изабрана." other: Свих %{count} ставки са ове странице је изабрано. all_matching_items_selected_html: - one: "%{count} ставка која се поклапа са Вашом претрагом је изабрана." few: Све %{count} ставке које се поклапају са Вашом претрагом су изабране. + one: "%{count} ставка која се поклапа са Вашом претрагом је изабрана." other: Свих %{count} ставки које се поклапају са Вашом претрагом су изабране. cancel: Откажи changes_saved_msg: Промене су успешно сачуване! @@ -1304,13 +1305,13 @@ sr: order_by: Сортирај према save_changes: Сачувај промене select_all_matching_items: - one: Одаберите %{count} ставку која се поклапа са Вашом претрагом. few: Одаберите све %{count} ставке које се поклапају са Вашом претрагом. + one: Одаберите %{count} ставку која се поклапа са Вашом претрагом. other: Одаберите свих %{count} ставки које се поклапају са Вашом претрагом. today: данас validation_errors: - one: Нешто није баш како треба! Прегледајте грешке испод few: Нешто није баш како треба! Прегледајте %{count} грешке испод + one: Нешто није баш како треба! Прегледајте грешке испод other: Нешто није баш како треба! Прегледајте %{count} грешака испод imports: errors: @@ -1384,8 +1385,8 @@ sr: generate: Генериши invited_by: 'Позвао Вас је:' max_uses: - one: 1 коришћење few: "%{count} коришћења" + one: 1 коришћење other: "%{count} коришћења" max_uses_prompt: Без ограничења prompt: Генериши и подели линкове са другима да им одобрите приступ овој инстанци @@ -1487,13 +1488,13 @@ sr: title: Нови захтев за праћење mention: action: Одговори - body: '%{name} Вас је поменуо у:' - subject: '%{name} Вас је поменуо' + body: "%{name} Вас је поменуо у:" + subject: "%{name} Вас је поменуо" title: Ново спомињање poll: subject: Анкета корисника %{name} се завршила reblog: - body: '%{name} Вам је подржао/ла статус:' + body: "%{name} Вам је подржао/ла статус:" subject: "%{name} је подржао/ла Ваш статус" title: Нова подршка status: @@ -1666,17 +1667,17 @@ sr: statuses: attached: audio: - one: "%{count} аудио запис" few: "%{count} аудио записа" + one: "%{count} аудио запис" other: "%{count} аудио записа" description: 'У прилогу: %{attached}' image: - one: "%{count} слику" few: "%{count} слика" + one: "%{count} слику" other: "%{count} слика" video: - one: "%{count} видео запис" few: "%{count} видео записа" + one: "%{count} видео запис" other: "%{count} видео записа" boosted_from_html: Подржано од %{acct_link} content_warning: 'Упозорење на садржај: %{warning}' @@ -1697,12 +1698,12 @@ sr: reblog: Подршка не може да се прикачи poll: total_people: - one: "%{count} особа" few: "%{count} особе" + one: "%{count} особа" other: "%{count} људи" total_votes: - one: "%{count} глас" few: "%{count} гласа" + one: "%{count} глас" other: "%{count} гласова" vote: Гласајте show_more: Прикажи још diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 0a1714e3ec81f5..3194d7a8c23395 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1,3 +1,4 @@ +--- sv: about: about_mastodon_html: 'Framtidens sociala medium: Ingen reklam. Ingen övervakning. Etisk design och decentralisering! Äg din data med Mastodon!' @@ -32,7 +33,7 @@ sv: accounts: add_email_domain_block: Blockera e-postdomän approve: Godkänn - approved_msg: '%{username}s registreringsansökan godkändes' + approved_msg: "%{username}s registreringsansökan godkändes" are_you_sure: Är du säker? avatar: Profilbild by_domain: Domän @@ -154,7 +155,7 @@ sv: suspension_reversible_hint_html: Kontot har stängts av och all data som tillhör det kommer att raderas permanent den %{date}. Tills dess kan kontot återställas utan dataförlust. Om du vill radera all kontodata redan nu, kan du göra detta nedan. title: Konton unblock_email: Avblockera e-postadress - unblocked_email_msg: '%{username}s e-postadress avblockerad' + unblocked_email_msg: "%{username}s e-postadress avblockerad" unconfirmed_email: Obekräftad e-postadress undo_sensitized: Ångra tvinga känsligt undo_silenced: Ångra tystnad @@ -1267,7 +1268,7 @@ sv: all: Alla all_items_on_page_selected_html: one: "%{count} objekt på denna sida valt." - other: %{count} objekt på denna sida valda. + other: "%{count} objekt på denna sida valda." all_matching_items_selected_html: one: "%{count} objekt som matchar din sökning är valt." other: "%{count} objekt som matchar din sökning är valda." diff --git a/config/locales/ta.yml b/config/locales/ta.yml index d7c091685a0566..b035a602c262c5 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -1,3 +1,4 @@ +--- ta: about: about_mastodon_html: 'எதிர்காலத்தின் சமூகப் பிணையம்: விளம்பரம் இல்லை, பொதுநிறுவனக் கண்காணிப்பு இல்லை, நெறிக்குட்பட்ட வரைவுத்திட்டம், மற்றும் பகிர்ந்தாளுதல்! மஸ்டோடோனுடன் உங்கள் தரவுகள் உங்களுக்கே சொந்தம்!' @@ -18,7 +19,7 @@ ta: admin: account_actions: action: நடவடிக்கை எடு - title: '%{acct}ஐ நடுநிலைப்படுத்தவும்' + title: "%{acct}ஐ நடுநிலைப்படுத்தவும்" account_moderation_notes: create: குறிப்பு எழுதவும் created_msg: நடுநிலை குறிப்பு வெற்றிகரமாக பதிவு செய்யப்பட்டது! @@ -34,7 +35,7 @@ ta: label: மின் அஞ்சலை மற்றுக new_email: புதிய மின் அஞ்சல் submit: மின் அஞ்சல் மாற்றுக - title: '%{username} உடைய மின் அஞ்சலை மாற்றுக' + title: "%{username} உடைய மின் அஞ்சலை மாற்றுக" confirm: உறுதிசெய் confirmed: உறுதி செய்யப்பட்டது confirming: உறுதி செய்யப்படுகிறது @@ -147,7 +148,7 @@ ta: create: அறிவிப்பை உருவாக்கு title: புதிய அறிவிப்பு published_msg: அறிவிப்பு வெற்றிகரமாகப் பதியப்பட்டது! - scheduled_for: '%{time} மணிக்குப் பதியப்படும்' + scheduled_for: "%{time} மணிக்குப் பதியப்படும்" scheduled_msg: அறிவிப்பு, குறித்த நேரத்தில் பதியப்படும்! title: அறிவிப்புகள் unpublished_msg: அறிவிப்பு வெற்றிகரமாகத் திரும்பப் பெறப்பட்டது! diff --git a/config/locales/te.yml b/config/locales/te.yml index c4fa3b619e23ea..a5eb8d77947b81 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -1,6 +1,7 @@ +--- te: about: - about_mastodon_html: 'మాస్టొడాన్ అనేది ఒక సామాజిక మాధ్యమం. ఇది పూర్తిగా ఉచితం మరియు స్వేచ్ఛా సాఫ్టువేరు. ఈమెయిల్ లాగానే ఇది వికేంద్రీకరించబడినది.' + about_mastodon_html: మాస్టొడాన్ అనేది ఒక సామాజిక మాధ్యమం. ఇది పూర్తిగా ఉచితం మరియు స్వేచ్ఛా సాఫ్టువేరు. ఈమెయిల్ లాగానే ఇది వికేంద్రీకరించబడినది. contact_missing: ఇంకా సెట్ చేయలేదు contact_unavailable: వర్తించదు hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది @@ -22,7 +23,7 @@ te: admin: account_actions: action: చర్య తీసుకో - title: '%{acct}పై మోడరేషన్ చర్యను తీసుకో' + title: "%{acct}పై మోడరేషన్ చర్యను తీసుకో" account_moderation_notes: create: ఏదైనా గమనికను వదులు created_msg: మోడరేషన్ గమనిక విజయవంతంగా సృష్టించబడింది! @@ -36,7 +37,7 @@ te: label: ఈమెయిల్ ను మార్చు new_email: కొత్త ఈమెయిల్ submit: ఈమెయిల్ ను మార్చు - title: '%{username} యొక్క ఈమెయిల్ ను మార్చు' + title: "%{username} యొక్క ఈమెయిల్ ను మార్చు" confirm: ధృవీకరించు confirmed: ధృవీకరించబడింది confirming: ధృవీకరిస్తుంది diff --git a/config/locales/th.yml b/config/locales/th.yml index 7e7cd6df186862..781c3df29cb4c0 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1,3 +1,4 @@ +--- th: about: about_mastodon_html: 'เครือข่ายสังคมแห่งอนาคต: ไม่มีโฆษณา ไม่มีการสอดแนมโดยองค์กร การออกแบบตามหลักจริยธรรม และการกระจายศูนย์! เป็นเจ้าของข้อมูลของคุณด้วย Mastodon!' @@ -53,7 +54,7 @@ th: delete: ลบข้อมูล deleted: ลบแล้ว demote: ลดขั้น - destroyed_msg: "ตอนนี้จัดคิวเพื่อลบข้อมูลของ %{username} ในเร็ว ๆ นี้แล้ว" + destroyed_msg: ตอนนี้จัดคิวเพื่อลบข้อมูลของ %{username} ในเร็ว ๆ นี้แล้ว disable: อายัด disable_sign_in_token_auth: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมล disable_two_factor_authentication: ปิดใช้งาน 2FA @@ -546,11 +547,11 @@ th: no_ip_block_selected: ไม่มีการเปลี่ยนแปลงกฎ IP เนื่องจากไม่มีการเลือก title: กฎ IP relationships: - title: "ความสัมพันธ์ของ %{acct}" + title: ความสัมพันธ์ของ %{acct} relays: add_new: เพิ่มรีเลย์ใหม่ delete: ลบ - description_html: รีเลย์การติดต่อกับภายนอก เป็นเซิร์ฟเวอร์ตัวกลางที่แลกเปลี่ยนโพสต์สาธารณะจำนวนมากระหว่างเซิร์ฟเวอร์ที่บอกรับและเผยแพร่ไปยังรีเลย์ รีเลย์สามารถช่วยให้เซิร์ฟเวอร์ขนาดเล็กและขนาดกลางค้นพบเนื้อหาจากจักรวาลสหพันธ์ ซึ่งมิฉะนั้นจะต้องให้ผู้ใช้ในเซิร์ฟเวอร์ติดตามผู้คนอื่น ๆ ในเซิร์ฟเวอร์ระยะไกลด้วยตนเอง + description_html: "รีเลย์การติดต่อกับภายนอก เป็นเซิร์ฟเวอร์ตัวกลางที่แลกเปลี่ยนโพสต์สาธารณะจำนวนมากระหว่างเซิร์ฟเวอร์ที่บอกรับและเผยแพร่ไปยังรีเลย์ รีเลย์สามารถช่วยให้เซิร์ฟเวอร์ขนาดเล็กและขนาดกลางค้นพบเนื้อหาจากจักรวาลสหพันธ์ ซึ่งมิฉะนั้นจะต้องให้ผู้ใช้ในเซิร์ฟเวอร์ติดตามผู้คนอื่น ๆ ในเซิร์ฟเวอร์ระยะไกลด้วยตนเอง" disable: ปิดใช้งาน disabled: ปิดใช้งานอยู่ enable: เปิดใช้งาน @@ -927,7 +928,7 @@ th: webhooks: add_new: เพิ่มปลายทาง delete: ลบ - description_html: เว็บฮุค ทำให้ Mastodon สามารถส่ง การแจ้งเตือนตามเวลาจริง แบบผลักเกี่ยวกับเหตุการณ์ที่เลือกไปยังแอปพลิเคชันของคุณเอง ดังนั้นแอปพลิเคชันของคุณสามารถ ทริกเกอร์การตอบสนองได้โดยอัตโนมัติ + description_html: "เว็บฮุค ทำให้ Mastodon สามารถส่ง การแจ้งเตือนตามเวลาจริง แบบผลักเกี่ยวกับเหตุการณ์ที่เลือกไปยังแอปพลิเคชันของคุณเอง ดังนั้นแอปพลิเคชันของคุณสามารถ ทริกเกอร์การตอบสนองได้โดยอัตโนมัติ" disable: ปิดใช้งาน disabled: ปิดใช้งานอยู่ edit: แก้ไขปลายทาง @@ -1230,7 +1231,7 @@ th: statuses: other: "%{count} โพสต์" statuses_long: - other: "มีการซ่อน %{count} โพสต์แต่ละรายการ" + other: มีการซ่อน %{count} โพสต์แต่ละรายการ title: ตัวกรอง new: save: บันทึกตัวกรองใหม่ @@ -1425,8 +1426,8 @@ th: subject: "%{name} ได้ชื่นชอบโพสต์ของคุณ" title: รายการโปรดใหม่ follow: - body: "ตอนนี้ %{name} กำลังติดตามคุณ!" - subject: "ตอนนี้ %{name} กำลังติดตามคุณ" + body: ตอนนี้ %{name} กำลังติดตามคุณ! + subject: ตอนนี้ %{name} กำลังติดตามคุณ title: ผู้ติดตามใหม่ follow_request: action: จัดการคำขอติดตาม diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 5f1ec8a5a2ff03..862667f3ce782e 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,6 +1,7 @@ +--- tr: about: - 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_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. contact_missing: Ayarlanmadı contact_unavailable: Bulunamadı hosted_on: Mastodon %{domain} üzerinde barındırılıyor @@ -24,7 +25,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 created_msg: Denetim notu başarıyla oluşturuldu! @@ -32,7 +33,7 @@ tr: accounts: add_email_domain_block: E-posta alan adını engelle approve: 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 misin? avatar: Profil resmi by_domain: Alan adı @@ -42,12 +43,12 @@ 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" change_role: changed_msg: Rol başarıyla değiştirildi! label: Rolü değiştir no_role: Rol yok - title: '%{username} için rolü değiştir' + title: "%{username} için rolü değiştir" confirm: Onayla confirmed: Onaylandı confirming: Onaylanıyor @@ -68,7 +69,7 @@ tr: enable: Etkinleştir enable_sign_in_token_auth: E-posta token doğrulamayı etkinleştir enabled: Etkin - enabled_msg: '%{username} hesabı başarıyla çözüldü' + enabled_msg: "%{username} hesabı başarıyla çözüldü" followers: Takipçi follows: Takip edilen header: Üstbilgi @@ -86,7 +87,7 @@ tr: media_attachments: Medya ekleri memorialize: Anıta dönüştür 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 @@ -113,15 +114,15 @@ tr: public: Herkese açık push_subscription_expires: PuSH aboneliği sona erdi 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 - 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" remote_suspension_irreversible: Bu hesaba ait veriler geri dönüşümsüz bir şekilde silindi. remote_suspension_reversible_hint_html: Hesap sunucusunda askıya alındı ve veriler %{date} tarihinde tamamen kaldırılacak. O zamana kadar, uzak sunucu herhangi bir olumsuz etki olmadan hesabı geri yüklenebilir. Hesabın tüm verilerini hemen kaldırmak isterseniz, bunu aşağıdan yapabilirsiniz. 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ı' + 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: Onaylama bağlantısını tekrar gönder @@ -154,14 +155,14 @@ tr: 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. title: Hesaplar unblock_email: E-posta adresinin engelini kaldır - unblocked_email_msg: '%{username} kişisinin e-posta adresinin engeli başarıyla kaldırıldı' + unblocked_email_msg: "%{username} kişisinin e-posta adresinin engeli başarıyla kaldırıldı" 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 @@ -302,7 +303,7 @@ tr: title: Yeni duyuru publish: Yayınla 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 zamanlandı! title: Duyurular unpublish: Yayından kaldır @@ -425,8 +426,8 @@ tr: email_domain_blocks: add_new: Yeni ekle attempts_over_week: - one: "Son haftada %{count} deneme" - other: "Son haftada %{count} kayıt denemesi" + one: Son haftada %{count} deneme + other: Son haftada %{count} kayıt denemesi created_msg: E-posta alan adı kara listeye başarıyla eklendi delete: Sil dns: @@ -440,7 +441,7 @@ tr: no_email_domain_block_selected: Seçim yapılmadığından hiç bir e-posta alan adı engeli değiştirilmedi not_permitted: İzin verilmedi resolved_dns_records_hint_html: Alan adı aşağıdaki MX alan adlarına çözümleniyor, ancak hiç biri nihayetinde e-posta kabulünden sorum değil. Bir MX alan adını engellemek, görünen alan adı farklı osa bile aynı MX alan adını kullanan e-posta adreslerinden gelen kayıtları engelleyecektir. Başlıca e-posta sağlayıcıları engellememek için dikkatli olun. - resolved_through_html: '%{domain} aracılığıyla çözümlendi' + resolved_through_html: "%{domain} aracılığıyla çözümlendi" title: E-posta kara listesi export_domain_allows: new: @@ -451,7 +452,7 @@ tr: description_html: Bir alan adı engeli listesini içe aktarmak üzeresiniz. Bu listeyi iyice gözden geçirin, özellikle listeyi siz hazırlamadıysanız. existing_relationships_warning: Mevcut takip ilişkileri private_comment_description_html: 'İçe aktarılan engellerin nereden geldiğini izlemenize olanak sağlamak için, içe aktarılan engeller şu özel yorum ile oluşturulacak: %{comment}' - private_comment_template: '%{source} kaynağından %{date} tarihinde içe aktarıldı' + private_comment_template: "%{source} kaynağından %{date} tarihinde içe aktarıldı" title: Domain bloklarını içe aktar invalid_domain_block: 'Bir veya daha fazla alan adı engeli şu hata(lar)dan dolayı atlandı: %{error}' new: @@ -472,8 +473,8 @@ tr: other: Eğer alan adına teslimat %{count} farklı gün boyunca başarısız olursa, alan adından bir teslimat gelmedikçe yeni bir iletim denemesi yapılmayacak. failure_threshold_reached: Başarısızlık eşiğine %{date} tarihinde ulaşıldı. failures_recorded: - one: '%{count} gün başarısız girişim.' - other: '%{count} farklı gün başarısız girişim.' + one: "%{count} gün başarısız girişim." + other: "%{count} farklı gün başarısız girişim." no_failures_recorded: Kayıtlı başarısızlık yok. title: Ulaşılabilirlik warning: Bu sunucuya önceki bağlanma denemesi başarısız olmuştu @@ -513,7 +514,7 @@ tr: delivery_available: Teslimat mevcut delivery_error_days: Teslimat hatası günleri delivery_error_hint: Eğer teslimat %{count} gün boyunca mümkün olmazsa, otomatik olarak teslim edilemiyor olarak işaretlenecek. - destroyed_msg: '%{domain} alan adından veriler hemen silinmek üzere kuyruğa alındı.' + destroyed_msg: "%{domain} alan adından veriler hemen silinmek üzere kuyruğa alındı." empty: Alan adı bulunamadı. known_accounts: one: "%{count} bilinen hesap" @@ -561,7 +562,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 gönderilerin 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 gönderilerin 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 @@ -605,11 +606,11 @@ tr: none: Yok comment_description_html: 'Daha fazla bilgi vermek için %{name} şunu yazdı:' confirm: Onayla - confirm_action: '%{acct} üzerindeki denetleme eylemini onayla' + confirm_action: "%{acct} üzerindeki denetleme eylemini onayla" created_at: Şikayet edildi delete_and_resolve: Gönderileri sil forwarded: İletildi - forwarded_to: '%{domain}''e iletildi' + forwarded_to: "%{domain}'e iletildi" mark_as_resolved: Giderildi olarak işaretle mark_as_sensitive: Hassas olarak işaretle mark_as_unresolved: Çözümlenmemiş olarak işaretle @@ -622,9 +623,9 @@ tr: placeholder: Hangi işlemlerin yapıldığını, ya da diğer ilgili güncellemeleri açıklayın... title: Notlar notes_description_html: Kendiniz ve diğer moderatörler için not bırakın veya notları görüntüleyin - processed_msg: '#%{id} Bildirimi başarıyla işlendi' + processed_msg: "#%{id} Bildirimi başarıyla işlendi" quick_actions_description_html: 'Hemen bir şey yapın veya bildirilen içeriği görmek için aşağı kaydırın:' - remote_user_placeholder: '%{instance}''dan uzak kullanıcı' + remote_user_placeholder: "%{instance}'dan uzak kullanıcı" reopen: Şikayeti tekrar aç report: 'Şikayet #%{id}' reported_account: Şikayet edilen hesap @@ -637,21 +638,21 @@ tr: statuses_description_html: İncitici içerik, bildirilen hesapla iletişimde alıntılanacaktır summary: action_preambles: - delete_html: '@%{acct} hesabının bazı gönderilerini kaldıracaksınız, böylece:' - mark_as_sensitive_html: '@%{acct} hesabının bazı gönderilerini hassas olarak işaretleyeceksiniz, böylece:' - silence_html: '@%{acct} hesabını sınırlayacaksınız, böylece:' - suspend_html: '@%{acct} hesabını askıya alacaksınız, böylece:' + delete_html: "@%{acct} hesabının bazı gönderilerini kaldıracaksınız, böylece:" + mark_as_sensitive_html: "@%{acct} hesabının bazı gönderilerini hassas olarak işaretleyeceksiniz, böylece:" + silence_html: "@%{acct} hesabını sınırlayacaksınız, böylece:" + suspend_html: "@%{acct} hesabını askıya alacaksınız, böylece:" actions: delete_html: Kuralı ihlal eden gönderileri kaldır mark_as_sensitive_html: Kuralı ihlal eden gönderilerin medyasını hassas olarak işaretle - silence_html: '@%{acct} hesabının erişimini oldukça kısıtla: profili ve içeriği sadece onları halihazırda takip edenler veya manuel olarak hesabına erişenlerce mümkün olacak' - suspend_html: @%{acct} hesabını askıya al, profilini ve içeriğini erişilmez ve etkileşimi imkansız yap - close_report: '#%{id} bildirimini çözüldü olarak işaretle' - close_reports_html: @%{acct} hesabına yönelik tüm bildirimleri çözüldü olarak işaretle + silence_html: "@%{acct} hesabının erişimini oldukça kısıtla: profili ve içeriği sadece onları halihazırda takip edenler veya manuel olarak hesabına erişenlerce mümkün olacak" + suspend_html: "@%{acct} hesabını askıya al, profilini ve içeriğini erişilmez ve etkileşimi imkansız yap" + close_report: "#%{id} bildirimini çözüldü olarak işaretle" + close_reports_html: "@%{acct} hesabına yönelik tüm bildirimleri çözüldü olarak işaretle" delete_data_html: İlgili sürede askıdan alınması kaldırılmazsa @%{acct} hesabının profilini ve içeriğini şu andan itibaren 30 gün içinde sil preview_preamble_html: "@%{acct} aşağıdaki içerikle bir uyarı alacaktır:" - record_strike_html: @%{acct} hesabına karşı bir eylem kaydet, böylece bu hesabın gelecekteki ihlallerini üst makama taşımanıza yardımcı olacaktır - send_email_html: @%{acct} adlı kullanıcıya uyarı e-maili gönder + record_strike_html: "@%{acct} hesabına karşı bir eylem kaydet, böylece bu hesabın gelecekteki ihlallerini üst makama taşımanıza yardımcı olacaktır" + send_email_html: "@%{acct} adlı kullanıcıya uyarı e-maili gönder" warning_placeholder: İsteğe bağlı ek nedenden denetim eylemi. target_origin: Şikayet edilen hesabın kökeni title: Şikayetler @@ -672,8 +673,8 @@ tr: moderation: Denetim special: Özel delete: Sil - description_html: Kullanıcı rolleri ile, kullanıcılarınızın Mastodon'un hangi işlevlerine ve alanlarına erişebileceğini düzenleyebilirsiniz. - edit: '''%{name}'' rolünü düzenle' + description_html: "Kullanıcı rolleri ile, kullanıcılarınızın Mastodon'un hangi işlevlerine ve alanlarına erişebileceğini düzenleyebilirsiniz." + edit: "'%{name}' rolünü düzenle" everyone: Varsayılan izinler everyone_full_description_html: Bu, herhangi bir rol atanmamış olanlar da olmak üzere tüm kullanıcıları etkileyen temel roldür. Diğer tüm roller izinleri bu rolden alıyorlar. permissions_count: @@ -924,7 +925,7 @@ tr: not_listable: Önerilmeyecek not_trendable: Öne çıkanlar altında görünmeyecek not_usable: Kullanılamaz - peaked_on_and_decaying: '%{date} tarihinde zirvedeydi, şimdi azalıyor' + peaked_on_and_decaying: "%{date} tarihinde zirvedeydi, şimdi azalıyor" title: Öne çıkan etiketler trendable: Öne çıkanlar altında görünebilir trending_rank: 'Öne çıkanlar #%{rank}' @@ -979,7 +980,7 @@ tr: subject: "%{instance} için kritik Mastodon güncellemeleri mevcut!" 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" @@ -997,7 +998,7 @@ tr: no_approved_tags: Şu anda onaylanmış öne çıkan etiket yok. requirements: 'Aşağıdaki adaylardan herhangi biri, şu anda %{lowest_tag_score} skoruna sahip "%{lowest_tag_name}" olan #%{rank} onaylanmış öne çıkan etiketi geçebilir.' title: Öne çıkan etiketler - subject: '%{instance}, inceleme bekleyen yeni öne çıkan öğelere sahip' + subject: "%{instance}, inceleme bekleyen yeni öne çıkan öğelere sahip" 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. @@ -1083,17 +1084,17 @@ tr: set_new_password: Yeni parola belirle setup: email_below_hint_html: İstenmeyenler dizininize bakın veya başka bir onay bağlantısı isteyin. Eğer yanlışsa e-posta adresinizi de düzeltebilirsiniz. - email_settings_hint_html: '%{email} adresinizi doğrulamak için size gönderdiğimiz bağlantıya tıklayın. Biz burada bekliyoruz.' + email_settings_hint_html: "%{email} adresinizi doğrulamak için size gönderdiğimiz bağlantıya tıklayın. Biz burada bekliyoruz." link_not_received: Bağlantı gelmedi mi? new_confirmation_instructions_sent: Birkaç dakika içerisinde onaylama bağlantısını içeren yeni bir e-posta alacaksınız! title: Gelen kutunuzu kontrol edin sign_in: - preamble_html: %{domain} kimlik bilgilerinizi kullanarak giriş yapın. Eğer hesabınız başka bir sunucuda barındırılıyorsa, burada giriş yapamazsınız. - title: '%{domain} giriş yapın' + preamble_html: "%{domain} kimlik bilgilerinizi kullanarak giriş yapın. Eğer hesabınız başka bir sunucuda barındırılıyorsa, burada giriş yapamazsınız." + title: "%{domain} giriş yapın" sign_up: - manual_review: '%{domain} kayıtları moderatörler tarafından manuel olarak inceleniyor. Kaydınızı işlememizi kolaylaştırmak için kendiniz ve %{domain} sunucusundan neden hesap istediğiniz hakkında biraz bilgi verin.' + manual_review: "%{domain} kayıtları moderatörler tarafından manuel olarak inceleniyor. Kaydınızı işlememizi kolaylaştırmak için kendiniz ve %{domain} sunucusundan neden hesap istediğiniz hakkında biraz bilgi verin." preamble: Bu Mastodon sunucusu üzerinden bir hesap ile ağdaki herhangi bir kişiyi, hesabı hangi sunucuda saklanırsa saklansın, takip edebilirsiniz. - title: '%{domain} için kurulumunuzu yapalım.' + title: "%{domain} için kurulumunuzu yapalım." status: account_status: Hesap durumu confirming: E-posta doğrulamasının tamamlanması bekleniyor. @@ -1200,12 +1201,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: Gönderileriniz ve yüklediğiniz medya dosyalarının bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub biçiminde olacaktır. Her 7 günde bir arşiv talep edebilirsiniz. + hint_html: "Gönderileriniz ve yüklediğiniz medya dosyalarının bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub biçiminde olacaktır. Her 7 günde bir arşiv talep edebilirsiniz." in_progress: Arşivinizi derliyoruz... request: Arşivinizi isteyin size: Boyut @@ -1238,11 +1239,11 @@ tr: deprecated_api_multiple_keywords: Bu parametreler, birden fazla filtre anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın. invalid_context: Sıfır ya da geçersiz içerik sağlandı index: - contexts: '%{contexts} içindeki filtreler' + contexts: "%{contexts} içindeki filtreler" delete: Sil empty: Hiç filtreniz yok. - expires_in: '%{distance} sürede sona eriyor' - expires_on: '%{date} tarihinde sona eriyor' + expires_in: "%{distance} sürede sona eriyor" + expires_on: "%{date} tarihinde sona eriyor" keywords: one: "%{count} anahtar sözcük" other: "%{count} anahtar sözcük" @@ -1266,10 +1267,10 @@ tr: generic: all: Tümü all_items_on_page_selected_html: - one: "Bu sayfadaki %{count} öğe seçilmiş." + one: Bu sayfadaki %{count} öğe seçilmiş. other: Bu sayfadaki tüm %{count} öğe seçilmiş. all_matching_items_selected_html: - one: "Aramanızla eşleşen %{count} öğe seçilmiş." + one: Aramanızla eşleşen %{count} öğe seçilmiş. other: Aramanızla eşleşen tüm %{count} öğe seçilmiş. cancel: İptal changes_saved_msg: Değişiklikler başarıyla kaydedildi! @@ -1378,8 +1379,8 @@ tr: webauthn: güvenlik anahtarları description_html: Eğer tanımadığınız bir faaliyet görüyorsanız, parolanızı değiştirmeyi ve iki aşamalı kimlik doğrulamayı etkinleştirmeyi düşünün. empty: Kimlik doğrulama geçmişi yok - failed_sign_in_html: '%{method} yöntemiyle %{ip} (%{browser}) adresinden başarısız oturum açma girişimi' - successful_sign_in_html: '%{method} yöntemiyle %{ip} (%{browser}) adresinden başarılı oturum açma' + failed_sign_in_html: "%{method} yöntemiyle %{ip} (%{browser}) adresinden başarısız oturum açma girişimi" + successful_sign_in_html: "%{method} yöntemiyle %{ip} (%{browser}) adresinden başarılı oturum açma" title: Kimlik doğrulama geçmişi mail_subscriptions: unsubscribe: @@ -1447,7 +1448,7 @@ tr: sign_up: subject: "%{name} kaydoldu" favourite: - body: '%{name} durumunu beğendi:' + body: "%{name} durumunu beğendi:" subject: "%{name} durumunu beğendi" title: Yeni Favori follow: @@ -1461,13 +1462,13 @@ 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 poll: subject: Anket %{name} tarafından sonlandırıldı reblog: - body: '%{name} durumunuzu boostladı:' + body: "%{name} durumunuzu boostladı:" subject: "%{name} durumunuzu boostladı" title: Yeni boost status: @@ -1514,7 +1515,7 @@ tr: over_character_limit: her biri %{max} karakterden daha uzun olamaz self_vote: Kendi anketlerinizde oy kullanamazsınız 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ı @@ -1563,11 +1564,11 @@ tr: rss: content_warning: 'İçerik uyarısı:' descriptions: - account: '@%{acct} hesabından herkese açık gönderiler' - tag: '#%{hashtag} etiketli herkese açık gönderiler' + account: "@%{acct} hesabından herkese açık gönderiler" + tag: "#%{hashtag} etiketli herkese açık gönderiler" scheduled_statuses: over_daily_limit: Bugün için %{limit} zamanlanmış gönderi sınırını aştınız - over_total_limit: '%{limit} zamanlanmış gönderi sınırını aştınız' + over_total_limit: "%{limit} zamanlanmış gönderi sınırını aştınız" too_soon: Programlanan tarih bugünden ileri bir tarihte olmalıdır sessions: activity: Son etkinlik @@ -1649,17 +1650,17 @@ 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}' default_language: Arayüz diliyle aynı disallowed_hashtags: one: 'izin verilmeyen bir etiket içeriyordu: %{tags}' other: 'izin verilmeyen hashtag''leri içeriyordu: %{tags}' - edited_at_html: '%{date} tarihinde düzenlendi' + edited_at_html: "%{date} tarihinde düzenlendi" errors: in_reply_not_found: Yanıtlamaya çalıştığınız durum yok gibi görünüyor. 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: direct: Sadece değinilen kullanıcıların görebileceği gönderiler üstte tutulamaz limit: Halihazırda maksimum sayıda gönderi sabitlediniz @@ -1760,12 +1761,12 @@ tr: user_mailer: appeal_approved: action: Hesabınıza gidin - explanation: '%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız onaylandı. Hesabınız artık tekrar iyi durumda.' - subject: '%{date} tarihli itirazınız kabul edildi' + explanation: "%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız onaylandı. Hesabınız artık tekrar iyi durumda." + subject: "%{date} tarihli itirazınız kabul edildi" title: İtiraz onaylandı appeal_rejected: - explanation: '%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız reddedildi.' - subject: '%{date} tarihli itirazınız reddedildi' + explanation: "%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız reddedildi." + subject: "%{date} tarihli itirazınız reddedildi" title: İtiraz reddedildi backup_ready: explanation: Mastodon hesabınızın tam yedeğini istemiştiniz. Şimdi indirilebilir durumda! @@ -1794,13 +1795,13 @@ tr: reason: 'Gerekçe:' statuses: 'Sözü geçen gönderiler:' subject: - delete_statuses: '%{acct} hesabınızdaki gönderiler kaldırıldı' - disable: '%{acct} hesabınız donduruldu' - mark_statuses_as_sensitive: '%{acct} hesabındaki gönderiler hassas olarak işaretlendi' - none: '%{acct} için uyarı' - sensitive: '%{acct} hesabınızdaki gönderiler artık hassas olarak işaretlenecek' - silence: '%{acct} hesabınız sınırlandırıldı' - suspend: '%{acct} hesabınız askıya alındı' + delete_statuses: "%{acct} hesabınızdaki gönderiler kaldırıldı" + disable: "%{acct} hesabınız donduruldu" + mark_statuses_as_sensitive: "%{acct} hesabındaki gönderiler hassas olarak işaretlendi" + none: "%{acct} için uyarı" + sensitive: "%{acct} hesabınızdaki gönderiler artık hassas olarak işaretlenecek" + silence: "%{acct} hesabınız sınırlandırıldı" + suspend: "%{acct} hesabınız askıya alındı" title: delete_statuses: Kaldırılan gönderiler disable: Hesap donduruldu @@ -1820,7 +1821,7 @@ tr: subject: Mastodon'a hoş geldiniz title: Gemiye hoşgeldin, %{name}! users: - follow_limit_reached: '%{limit} kişiden daha fazlasını takip edemezsiniz' + follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz" go_to_sso_account_settings: Kimlik sağlayıcı hesap ayarlarına gidin invalid_otp_token: Geçersiz iki adımlı doğrulama kodu otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz @@ -1840,7 +1841,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. @@ -1849,4 +1850,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" diff --git a/config/locales/tt.yml b/config/locales/tt.yml index cc6c1d0547d40a..845b33a02102b0 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -1,3 +1,4 @@ +--- tt: about: contact_unavailable: Юк diff --git a/config/locales/uk.yml b/config/locales/uk.yml index fd4acf2e1b2e05..93cdc041747883 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1,3 +1,4 @@ +--- uk: about: about_mastodon_html: 'Соціальна мережа майбутнього: жодної реклами, жодного корпоративного нагляду, етичний дизайн та децентралізація! З Mastodon ваші дані під вашим контролем!' @@ -8,9 +9,9 @@ uk: accounts: follow: Підписатися followers: - one: Підписник few: Підписники many: Підписників + one: Підписник other: Підписники following: Підписок instance_actor_flash: Цей обліковий запис є віртуальним персонажем, який використовується для показу самого сервера, а не будь-якого окремого користувача. Він використовується з метою федералізації і не повинен бути зупинений. @@ -20,9 +21,9 @@ uk: pin_errors: following: Ви повинні бути підписаним на людину, яку бажаєте схвалити posts: - one: Допис few: Дописи many: Дописів + one: Допис other: Дописів posts_tab_heading: Дописів admin: @@ -59,7 +60,7 @@ uk: delete: Видалити дані deleted: Видалено demote: Усунути - destroyed_msg: "Дані %{username} тепер в черзі на негайне видалення" + destroyed_msg: Дані %{username} тепер в черзі на негайне видалення disable: Вимкнути disable_sign_in_token_auth: Вимкнути автентифікацію за допомогою е-пошти disable_two_factor_authentication: Вимкнути двофакторну авторизацію @@ -90,7 +91,7 @@ uk: media_attachments: Мультимедійні вкладення memorialize: Меморіалізувати memorialized: Перетворено на пам'ятник - memorialized_msg: '%{username} успішно перетворено на пам''ятний обліковий запис' + memorialized_msg: "%{username} успішно перетворено на пам'ятний обліковий запис" moderation: active: Активний all: Усі @@ -110,9 +111,9 @@ uk: perform_full_suspension: Призупинити previous_strikes: Попередні попередження previous_strikes_description_html: - one: У цього облікового запису є одне попередження. few: У цього облікового запису є %{count} попередження. many: У цього облікового запису є %{count} попереджень. + one: У цього облікового запису є одне попередження. other: У цього облікового запису є %{count} попереджень. promote: Просунути protocol: Протокол @@ -283,7 +284,7 @@ uk: suspend_account_html: "%{name} заморожує обліковий запис %{target}" unassigned_report_html: "%{name} прибирає призначення скарги %{target}" unblock_email_account_html: "%{name} розблоковує електронну пошту %{target}" - unsensitive_account_html: "%{name} прибирає позначку \"делікатне\" з медіа від %{target}" + unsensitive_account_html: '%{name} прибирає позначку "делікатне" з медіа від %{target}' unsilence_account_html: "%{name} розглушує обліковий запис %{target}" unsuspend_account_html: "%{name} розморожує обліковий запис %{target}" update_announcement_html: "%{name} оновлює оголошення %{target}" @@ -356,24 +357,24 @@ uk: new_users: нові користувачі opened_reports: звітів відкрито pending_appeals_html: - one: "%{count} апеляція в черзі" few: "%{count} апеляції в черзі" many: "%{count} апеляцій в черзі" + one: "%{count} апеляція в черзі" other: "%{count} апеляції в черзі" pending_reports_html: - one: "%{count} звіт у черзі" few: "%{count} звіти у черзі" many: "%{count} звітів у черзі" + one: "%{count} звіт у черзі" other: "%{count} звіти у черзі" pending_tags_html: - one: "%{count} хештеґ у черзі" few: "%{count} хештеґи у черзі" many: "%{count} хештеґів у черзі" + one: "%{count} хештеґ у черзі" other: "%{count} хештеґа у черзі" pending_users_html: - one: "%{count} користувач у черзі" few: "%{count} користувачі у черзі" many: "%{count} користувачів у черзі" + one: "%{count} користувач у черзі" other: "%{count} користувача у черзі" resolved_reports: розв'язані звіти software: Програмне забезпечення @@ -439,9 +440,9 @@ uk: email_domain_blocks: add_new: Додати attempts_over_week: - one: "%{count} спроба за останній тиждень" few: "%{count} спроби входу за останній тиждень" many: "%{count} спроб входу за останній тиждень" + one: "%{count} спроба за останній тиждень" other: "%{count} спроби входу за останній тиждень" created_msg: Успішно додано поштовий домен до чорного списку delete: Видалити @@ -484,15 +485,15 @@ uk: instances: availability: description_html: - one: Якщо доставлення до домену не вдалася %{count} день, жодних спроб доставлення не здійснюється, доки доставлення від домену не отримуватиметься. few: Якщо доставлення до домену не вдалася за %{count} інших дні, жодних спроб доставлення не здійснюється, доки доставлення від домену не отримуватиметься. many: Якщо доставлення до домену не вдалася за %{count} інших днів, жодних спроб доставлення не здійснюється, доки доставлення від домену не отримуватиметься. + one: Якщо доставлення до домену не вдалася %{count} день, жодних спроб доставлення не здійснюється, доки доставлення від домену не отримуватиметься. other: Якщо доставлення до домену не вдалася за %{count} інших днів, жодних спроб доставлення не здійснюється, доки доставлення від домену не отримуватиметься. failure_threshold_reached: Досягнуто поріг допустимих помилок станом на %{date}. failures_recorded: - one: Невдалих спроб за %{count} день. few: Невдалих спроб за %{count} різні дні. many: Невдалих спроб за %{count} різних днів. + one: Невдалих спроб за %{count} день. other: Невдалих спроб за %{count} різних днів. no_failures_recorded: Проблем щодо запису немає. title: Доступність @@ -536,9 +537,9 @@ uk: destroyed_msg: Дані з %{domain} тепер у черзі на видалення. empty: Доменів не знайдено. known_accounts: - one: "%{count} відомий обліковий запис" few: "%{count} відомі облікові записи" many: "%{count} відомих облікових записів" + one: "%{count} відомий обліковий запис" other: "%{count} відомих облікових записів" moderation: all: Усі @@ -583,7 +584,7 @@ uk: relays: add_new: Додати новий ретранслятор delete: Видалити - description_html: Ретранслятор дописів (federation relay) — це проміжний сервер, що обмінюється великими обсягами публічних дописів між серверами, які цього хочуть. Він може допомогти маленьким та середнім серверам отримувати вміст з усього федесвіту (fediverse). Без нього локальним користувачам довелося б вручну підписуватися на людей з віддалених серверів. + description_html: "Ретранслятор дописів (federation relay) — це проміжний сервер, що обмінюється великими обсягами публічних дописів між серверами, які цього хочуть. Він може допомогти маленьким та середнім серверам отримувати вміст з усього федесвіту (fediverse). Без нього локальним користувачам довелося б вручну підписуватися на людей з віддалених серверів." disable: Вимкнути disabled: Вимкнено enable: Увімкнути @@ -602,9 +603,9 @@ uk: reports: account: notes: - one: "%{count} примітка" few: "%{count} приміток" many: "%{count} приміток" + one: "%{count} примітка" other: "%{count} приміток" action_log: Журнал подій action_taken_by: Дія виконана @@ -687,9 +688,9 @@ uk: roles: add_new: Додати роль assigned_users: - one: "%{count} користувач" few: "%{count} користувачі" many: "%{count} користувачів" + one: "%{count} користувач" other: "%{count} користувача" categories: administration: Адміністрування @@ -703,9 +704,9 @@ uk: everyone: Типові дозволи everyone_full_description_html: Це базова роль, яка впливає на всіх користувачів, навіть ті, яким не призначені ролі. Усі інші ролі успадковують її дозволи. permissions_count: - one: "%{count} дозвіл" few: "%{count} дозволи" many: "%{count} дозволів" + one: "%{count} дозвіл" other: "%{count} дозволи" privileges: administrator: Адміністратор @@ -913,9 +914,9 @@ uk: publishers: no_publisher_selected: Жодного видавця не було змінено, оскільки жодного не було вибрано shared_by_over_week: - one: Поширила одна людина за останній тиждень few: Поширили %{count} людини за останній тиждень many: Поширили %{count} людей за останній тиждень + one: Поширила одна людина за останній тиждень other: Поширили %{count} людей за останній тиждень title: Популярні посилання usage_comparison: Сьогодні поширено %{today} разів, у порівнянні з %{yesterday} вчора @@ -937,9 +938,9 @@ uk: no_status_selected: Жодного популярного допису не було змінено, оскільки жодного не було вибрано not_discoverable: Автор не вирішив бути видимим shared_by: - one: Поділитись або додати в улюблені один раз few: Поділитись або додати в улюблені %{friendly_count} рази many: Поділитись або додати в улюблені %{friendly_count} разів + one: Поділитись або додати в улюблені один раз other: Поділитись або додати в улюблені %{friendly_count} рази title: Популярні дописи tags: @@ -963,9 +964,9 @@ uk: usable: Може бути використано usage_comparison: Сьогодні використано %{today} разів, у порівнянні з %{yesterday} вчора used_by_over_week: - one: Використала одна людина за минулий тиждень few: Використали %{count} людини за минулий тиждень many: Використали %{count} людей за минулий тиждень + one: Використала одна людина за минулий тиждень other: Використали %{count} людей за минулий тиждень title: Популярні trending: Популярне @@ -978,7 +979,7 @@ uk: webhooks: add_new: Додати кінцеву точку delete: Видалити - description_html: Вебхук дає змогу Mastodon надсилати повідомлення про обрані події до вашого застосунку в реальному часі, щоб застосунок міг автоматично реагувати на реакції. + description_html: "Вебхук дає змогу Mastodon надсилати повідомлення про обрані події до вашого застосунку в реальному часі, щоб застосунок міг автоматично реагувати на реакції." disable: Вимкнути disabled: Вимкнено edit: Редагувати кінцеву точку @@ -986,9 +987,9 @@ uk: enable: Увімкнути enabled: Активні enabled_events: - one: 1 увімкнена подія few: "%{count} увімкнені події" many: "%{count} увімкнених подій" + one: 1 увімкнена подія other: "%{count} увімкнені події" events: Події new: Новий вебхук @@ -1280,20 +1281,20 @@ uk: expires_in: Закінчується %{distance} expires_on: Закінчується %{date} keywords: - one: "%{count} ключове слово" few: "%{count} ключові слова" many: "%{count} ключових слів" + one: "%{count} ключове слово" other: "%{count} ключових слів" statuses: - one: "%{count} допис" few: "%{count} дописи" many: "%{count} дописів" + one: "%{count} допис" other: "%{count} дописа" statuses_long: - one: "Сховано %{count} окремий допис" - few: "Сховано %{count} окремі дописи" - many: "Сховано %{count} окремих дописів" - other: "Сховано %{count} окремі дописи" + few: Сховано %{count} окремі дописи + many: Сховано %{count} окремих дописів + one: Сховано %{count} окремий допис + other: Сховано %{count} окремі дописи title: Фільтри new: save: Зберегти новий фільтр @@ -1308,14 +1309,14 @@ uk: generic: all: Усі all_items_on_page_selected_html: - one: "%{count} елемент на цій сторінці вибрано." few: Усі %{count} елементи на цій сторінці вибрано. many: Усі %{count} елементів на цій сторінці вибрано. - other: %{count} елементи на цій сторінці вибрано. + one: "%{count} елемент на цій сторінці вибрано." + other: "%{count} елементи на цій сторінці вибрано." all_matching_items_selected_html: - one: "%{count} елемент, що збігається з вашим пошуком вибрано." few: Усі %{count} елементи, що збігаються з вашим пошуком вибрано. many: Усі %{count} елементів, що збігаються з вашим пошуком вибрано. + one: "%{count} елемент, що збігається з вашим пошуком вибрано." other: Усі %{count} елементи, що збігаються з вашим пошуком вибрано. cancel: Скасувати changes_saved_msg: Зміни успішно збережені! @@ -1327,15 +1328,15 @@ uk: order_by: Сортувати за save_changes: Зберегти зміни select_all_matching_items: - one: Вибрати %{count} елемент, що збігається з вашим пошуком. few: Вибрати всі %{count} елементи, що збігаються з вашим пошуком. many: Вибрати всі %{count} елементів, що збігаються з вашим пошуком. + one: Вибрати %{count} елемент, що збігається з вашим пошуком. other: Вибрати всі %{count} елементи, що збігаються з вашим пошуком. today: сьогодні validation_errors: - one: Щось досі не гаразд! Перегляньте повідомлення про помилку few: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки many: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки + one: Щось досі не гаразд! Перегляньте повідомлення про помилку other: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки imports: errors: @@ -1409,9 +1410,9 @@ uk: generate: Згенерувати invited_by: 'Вас запросив:' max_uses: - one: 1 використання few: "%{count} використання" many: "%{count} використань" + one: 1 використання other: "%{count} використань" max_uses_prompt: Без обмеження prompt: Генеруйте та діліться посиланням з іншими для надання доступу до сайту @@ -1500,7 +1501,7 @@ uk: subject: "%{name} приєднується" favourite: body: 'Ваш допис подобається %{name}:' - subject: "Ваш допис сподобався %{name}" + subject: Ваш допис сподобався %{name} title: Нове вподобання follow: body: "%{name} тепер стежить за вами!" @@ -1509,7 +1510,7 @@ uk: follow_request: action: Керувати запитами на підписку body: "%{name} надіслав запит на підписку" - subject: '%{name} хоче підписатися на Вас' + subject: "%{name} хоче підписатися на Вас" title: Новий запит на підписку mention: action: Відповісти @@ -1519,7 +1520,7 @@ uk: poll: subject: Опитування від %{name} завершено reblog: - body: '%{name} поширює ваш допис:' + body: "%{name} поширює ваш допис:" subject: "%{name} поширив ваш статус" title: Нове поширення status: @@ -1692,28 +1693,28 @@ uk: statuses: attached: audio: - one: "%{count} аудіозапис" few: "%{count} аудіозаписи" many: "%{count} аудіозаписів" + one: "%{count} аудіозапис" other: "%{count} аудіозаписів" description: 'Прикріплено: %{attached}' image: - one: "%{count} зображення" few: "%{count} зображень" many: "%{count} зображень" + one: "%{count} зображення" other: "%{count} зображення" video: - one: "%{count} відео" few: "%{count} відео" many: "%{count} відео" + one: "%{count} відео" other: "%{count} відео" boosted_from_html: Просунуто від %{acct_link} content_warning: 'Попередження про контент: %{warning}' default_language: Така ж як і мова інтерфейсу disallowed_hashtags: - one: 'заборонений хештеґ: %{tags}' few: 'заборонених хештеґа: %{tags}' many: 'заборонених хештеґів: %{tags}' + one: 'заборонений хештеґ: %{tags}' other: 'заборонених хештеґів: %{tags}' edited_at_html: Відредаговано %{date} errors: @@ -1727,14 +1728,14 @@ uk: reblog: Не можна закріпити просунутий допис poll: total_people: - one: "%{count} людина" few: "%{count} людей" many: "%{count} людей" + one: "%{count} людина" other: "%{count} людей" total_votes: - one: "%{count} голос" few: "%{count} голоса" many: "%{count} голосів" + one: "%{count} голос" other: "%{count} голоси" vote: Проголосувати show_more: Розгорнути diff --git a/config/locales/uz.yml b/config/locales/uz.yml index 02b0a37ec8bca3..403ffd33cfe3b4 100644 --- a/config/locales/uz.yml +++ b/config/locales/uz.yml @@ -1,3 +1,4 @@ +--- uz: about: title: Haqida @@ -25,7 +26,7 @@ uz: media_attachments: Media qo'shimchalari memorialize: Xotiraga aylantiring memorialized: Yodga olingan - memorialized_msg: '%{username} esdalik hisobiga muvaffaqiyatli aylantirildi' + memorialized_msg: "%{username} esdalik hisobiga muvaffaqiyatli aylantirildi" moderation: active: Aktiv all: Barchasi diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 4d29beaf641bd1..73222a6047e24a 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1,9 +1,10 @@ +--- vi: about: about_mastodon_html: 'Mạng xã hội của tương lai: Không quảng cáo, không bán thông tin người dùng và phi tập trung! Làm chủ dữ liệu của bạn với Mastodon!' contact_missing: Chưa thiết lập contact_unavailable: N/A - hosted_on: '%{domain} vận hành nhờ Mastodon' + hosted_on: "%{domain} vận hành nhờ Mastodon" title: Giới thiệu accounts: follow: Theo dõi @@ -53,7 +54,7 @@ vi: delete: Xóa dữ liệu deleted: Đã xóa demote: Xóa vai trò - destroyed_msg: "Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ" + destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ disable: Khóa disable_sign_in_token_auth: Vô hiệu hóa xác minh bằng email disable_two_factor_authentication: Vô hiệu hóa xác minh 2 bước @@ -546,11 +547,11 @@ vi: no_ip_block_selected: Bạn chưa chọn bất kỳ IP nào title: Những IP bị chặn relationships: - title: "Mối quan hệ của %{acct}" + title: Mối quan hệ của %{acct} relays: add_new: Thêm liên hợp mới delete: Loại bỏ - description_html: Liên hợp nghĩa là cho phép bài đăng công khai của máy chủ này xuất hiện trên bảng tin của máy chủ khác và ngược lại. Nó giúp các máy chủ vừa và nhỏ tiếp cận nội dung từ các máy chủ lớn hơn. Nếu không chọn, người ở máy chủ này vẫn có thể theo dõi người khác trên các máy chủ khác. + description_html: "Liên hợp nghĩa là cho phép bài đăng công khai của máy chủ này xuất hiện trên bảng tin của máy chủ khác và ngược lại. Nó giúp các máy chủ vừa và nhỏ tiếp cận nội dung từ các máy chủ lớn hơn. Nếu không chọn, người ở máy chủ này vẫn có thể theo dõi người khác trên các máy chủ khác." disable: Tắt disabled: Đã tắt enable: Kích hoạt @@ -591,7 +592,7 @@ vi: category_description_html: Lý do tài khoản hoặc nội dung này bị báo cáo sẽ được trích dẫn khi giao tiếp với họ comment: none: Không có mô tả - comment_description_html: '%{name} cho biết thêm:' + comment_description_html: "%{name} cho biết thêm:" confirm: Xác nhận confirm_action: Xác nhận kiểm duyệt với %{acct} created_at: Báo cáo lúc @@ -915,7 +916,7 @@ vi: usable: Có thể dùng usage_comparison: Dùng %{today} lần hôm nay, so với %{yesterday} hôm qua used_by_over_week: - other: '%{count} người dùng tuần rồi' + other: "%{count} người dùng tuần rồi" title: Xu hướng trending: Xu hướng warning_presets: @@ -927,7 +928,7 @@ vi: webhooks: add_new: Thêm endpoint delete: Xóa bỏ - description_html: Webhook cho phép Mastodon gửi nhận thông báo đẩy thời gian thật về những sự kiện cho ứng dụng thứ ba của bạn, cho ứng dụng của bạn có thể tự động kích hoạt reaction. + description_html: "Webhook cho phép Mastodon gửi nhận thông báo đẩy thời gian thật về những sự kiện cho ứng dụng thứ ba của bạn, cho ứng dụng của bạn có thể tự động kích hoạt reaction." disable: Tắt disabled: Đã tắt edit: Sửa endpoint @@ -1421,11 +1422,11 @@ vi: sign_up: subject: "%{name} đã được đăng ký" favourite: - body: 'Tút của bạn vừa được thích bởi %{name}' + body: Tút của bạn vừa được thích bởi %{name} 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 được %{name} theo dõi!" + 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: @@ -1441,11 +1442,11 @@ vi: poll: subject: Cuộc bình chọn của %{name} kết thúc reblog: - body: 'Tút của bạn vừa được %{name} đăng lại' + body: Tút của bạn vừa được %{name} đăng lại subject: "%{name} vừa đăng lại tút của bạn" title: Lượt đăng lại mới status: - subject: "Bài đăng mới từ %{name}" + subject: Bài đăng mới từ %{name} update: subject: "%{name} đã sửa một tút" notifications: diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 4b2ce54eaffc08..1db573369a1099 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -1,3 +1,4 @@ +--- zgh: accounts: follow: ⴹⴼⵕ diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 81abc1156f84a8..51baaf7a4e6479 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1,6 +1,7 @@ +--- zh-CN: about: - about_mastodon_html: '来自未来的社交网络:无广告、无监视、去中心化、合乎道德!使用 Mastodon 夺回你的数据!' + about_mastodon_html: 来自未来的社交网络:无广告、无监视、去中心化、合乎道德!使用 Mastodon 夺回你的数据! contact_missing: 未设定 contact_unavailable: 未公开 hosted_on: 运行在 %{domain} 上的 Mastodon 实例 @@ -396,7 +397,7 @@ zh-CN: create: 添加屏蔽 hint: 域名屏蔽不会阻止该域名下的帐户进入本站的数据库,但是会对来自这个域名的帐户自动进行预先设置的管理操作。 severity: - desc_html: "选择隐藏会将该域名下帐户发送的嘟文设置为仅关注者可见;选择封禁会将该域名下帐户发送的嘟文、媒体文件以及个人资料数据从本实例上删除;如果你只是想拒绝接收来自该域名的任何媒体文件,请选择。" + desc_html: 选择隐藏会将该域名下帐户发送的嘟文设置为仅关注者可见;选择封禁会将该域名下帐户发送的嘟文、媒体文件以及个人资料数据从本实例上删除;如果你只是想拒绝接收来自该域名的任何媒体文件,请选择。 noop: 无 silence: 隐藏 suspend: 封禁 @@ -418,7 +419,7 @@ zh-CN: email_domain_blocks: add_new: 添加新条目 attempts_over_week: - other: "上周有 %{count} 次注册尝试" + other: 上周有 %{count} 次注册尝试 created_msg: 成功屏蔽电子邮件域名 delete: 删除 dns: @@ -442,10 +443,10 @@ zh-CN: import: description_html: 您即将导入域名列表,如果您不是此域名列表的作者,请仔细检查核对。 existing_relationships_warning: 现有的关注关系 - private_comment_description_html: '为了帮助您追踪域名列表来源,导入的域名列表将被添加如下的私人注释:%{comment}' + private_comment_description_html: 为了帮助您追踪域名列表来源,导入的域名列表将被添加如下的私人注释:%{comment} private_comment_template: 从 %{source} 导入 %{date} title: 导入域名列表 - invalid_domain_block: '由于以下错误,一个或多个域名屏蔽被跳过: %{error}' + invalid_domain_block: 由于以下错误,一个或多个域名屏蔽被跳过: %{error} new: title: 导入域名列表 no_file: 没有选择文件 @@ -503,7 +504,7 @@ zh-CN: delivery_available: 可投递 delivery_error_days: 投递错误天数 delivery_error_hint: 如果投递已不可用 %{count} 天,它将被自动标记为无法投递。 - destroyed_msg: '%{domain} 中的数据现在正在排队等待被立刻删除。' + destroyed_msg: "%{domain} 中的数据现在正在排队等待被立刻删除。" empty: 暂无域名。 known_accounts: other: "%{count} 个已知账号" @@ -550,7 +551,7 @@ zh-CN: relays: add_new: 订阅新的中继站 delete: 删除 - description_html: 中继服务器是一个信息统合服务器,各服务器可以通过订阅中继服务器和向中继服务器推送信息来大量交换公开嘟文。它可以帮助中小型服务器发现联邦宇宙中的其他服务器的内容,而无需本站用户手动关注其他远程服务器上的用户。 + description_html: "中继服务器是一个信息统合服务器,各服务器可以通过订阅中继服务器和向中继服务器推送信息来大量交换公开嘟文。它可以帮助中小型服务器发现联邦宇宙中的其他服务器的内容,而无需本站用户手动关注其他远程服务器上的用户。" disable: 禁用 disabled: 已禁用 enable: 启用 @@ -591,7 +592,7 @@ zh-CN: category_description_html: 在与被举报账户的通信时,将引用该账号和/或内容被举报的原因 comment: none: 没有 - comment_description_html: '%{name} 补充道:' + comment_description_html: "%{name} 补充道:" confirm: 确认 confirm_action: 确认对 @%{acct} 的管理操作 created_at: 举报时间 @@ -611,7 +612,7 @@ zh-CN: title: 备注 notes_description_html: 查看备注或向其他监察员留言 processed_msg: '举报 #%{id} 处理成功' - quick_actions_description_html: '快捷选择操作或向下滚动以查看举报内容:' + quick_actions_description_html: 快捷选择操作或向下滚动以查看举报内容: remote_user_placeholder: 来自 %{instance} 的远程实例用户 reopen: 重开举报 report: '举报 #%{id}' @@ -644,7 +645,7 @@ zh-CN: target_origin: 被举报账号的来源 title: 举报 unassign: 取消接管 - unknown_action_msg: '未知操作:%{action}' + unknown_action_msg: 未知操作:%{action} unresolved: 未处理 updated_at: 更新时间 view_profile: 查看资料 @@ -927,7 +928,7 @@ zh-CN: webhooks: add_new: 新增对端 delete: 删除 - description_html: Webhook 使 Mastodon 能够推送 关于所选事件的实时通知 到你自己的应用程序,进而由你的应用程序自动触发反应。 + description_html: "Webhook 使 Mastodon 能够推送 关于所选事件的实时通知 到你自己的应用程序,进而由你的应用程序自动触发反应。" disable: 禁用 disabled: 已禁用 edit: 编辑对端 @@ -970,7 +971,7 @@ zh-CN: body: 新的 Mastodon 版本已发布,您可能想要更新! subject: 适用于 %{instance} 的Mastodon版本更新已经可用! new_trends: - body: '以下项目需要审核才能公开显示:' + body: 以下项目需要审核才能公开显示: new_trending_links: title: 热门链接 new_trending_statuses: @@ -979,7 +980,7 @@ zh-CN: no_approved_tags: 目前没有经批准的热门标签。 requirements: '这些候选人都可能会超过#%{rank} 批准的热门标签,目前是 #%{lowest_tag_name} ,分数为 %{lowest_tag_score}。' title: 热门标签 - subject: '%{instance} 上有新热门等待审核' + subject: "%{instance} 上有新热门等待审核" aliases: add_new: 创建别名 created_msg: 成功创建了一个新别名。你现在可以从旧账户开始迁移了。 @@ -989,7 +990,7 @@ zh-CN: remove: 取消关联别名 appearance: advanced_web_interface: 高级 Web 界面 - advanced_web_interface_hint: '如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。' + advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。 animations_and_accessibility: 动画和访问选项 confirmation_dialogs: 确认对话框 discovery: 发现 @@ -1119,7 +1120,7 @@ zh-CN: proceed: 删除账户 success_msg: 你的账户已成功删除 warning: - before: '在删除前,请仔细阅读下列说明:' + before: 在删除前,请仔细阅读下列说明: caches: 已被其他服务器缓存的内容可能还会保留 data_removal: 你的嘟文和其他数据将被永久删除 email_change_html: 你可以 更换邮箱地址 无需删除账号 @@ -1224,7 +1225,7 @@ zh-CN: delete: 删除 empty: 你没有过滤器。 expires_in: 在 %{distance} 后过期 - expires_on: '%{date} 后到期' + expires_on: "%{date} 后到期" keywords: other: "%{count} 关键词" statuses: @@ -1332,7 +1333,7 @@ zh-CN: '86400': 1 天后 expires_in_prompt: 永不过期 generate: 生成邀请链接 - invited_by: '你的邀请人是:' + invited_by: 你的邀请人是: max_uses: other: "%{count} 次" max_uses_prompt: 无限制 @@ -1399,7 +1400,7 @@ zh-CN: set_redirect: 设置跳转 warning: backreference_required: 新账号必须先引用当前账号 - before: '在继续前,请仔细阅读下列说明:' + before: 在继续前,请仔细阅读下列说明: cooldown: 移动后会有一个冷却期,在此期间你将无法再次移动 disabled_account: 此后,你的当前账户将无法使用。但是,你仍然有权导出数据或者重新激活。 followers: 这步操作将把所有关注者从当前账户移动到新账户 @@ -1421,7 +1422,7 @@ zh-CN: sign_up: subject: "%{name} 注册了" favourite: - body: '你的嘟文被 %{name} 喜欢了:' + body: 你的嘟文被 %{name} 喜欢了: subject: "%{name} 喜欢了你的嘟文" title: 新的喜欢 follow: @@ -1431,17 +1432,17 @@ zh-CN: follow_request: action: 处理关注请求 body: "%{name} 向你发送了关注请求" - subject: '来自 %{name} 的关注请求' + subject: 来自 %{name} 的关注请求 title: 新的关注请求 mention: action: 回复 - body: '%{name} 在嘟文中提到了你:' - subject: '%{name} 提到了你' + body: "%{name} 在嘟文中提到了你:" + subject: "%{name} 提到了你" title: 新的提及 poll: - subject: '%{name} 创建的一个投票已经结束' + subject: "%{name} 创建的一个投票已经结束" reblog: - body: '你的嘟文被 %{name} 转嘟了:' + body: 你的嘟文被 %{name} 转嘟了: subject: "%{name} 转嘟了你的嘟文" title: 新的转嘟 status: @@ -1451,7 +1452,7 @@ zh-CN: notifications: administration_emails: 管理员电子邮件通知 email_events: 电子邮件通知事件 - email_events_hint: '选择你想要收到通知的事件:' + email_events_hint: 选择你想要收到通知的事件: other_settings: 其它通知设置 number: human: @@ -1468,7 +1469,7 @@ zh-CN: description_html: 如果你使用身份验证应用并启用了双因素认证,登录时将需要用到你的手机,由它生成所需的令牌。 enable: 启用 instructions_html: "请使用 Google 身份验证器或其他的TOTP双重认证手机应用扫描此处的二维码。启用双重认证后,在登录时,你需要输入该应用生成的代码。" - manual_instructions: '如果你无法扫描二维码,请手动输入下列文本:' + manual_instructions: 如果你无法扫描二维码,请手动输入下列文本: setup: 设置 wrong_code: 输入的认证码无效!请确认服务器时间与设备时间是否正确? pagination: @@ -1535,10 +1536,10 @@ zh-CN: errors: invalid_rules: 没有引用有效的规则 rss: - content_warning: '内容警告:' + content_warning: 内容警告: descriptions: - account: '@%{acct} 的公开嘟文' - tag: '#%{hashtag} 标签下的公开嘟文' + account: "@%{acct} 的公开嘟文" + tag: "#%{hashtag} 标签下的公开嘟文" scheduled_statuses: over_daily_limit: 你已超出每日定时嘟文的上限(%{limit} 条) over_total_limit: 你已超出定时嘟文的上限(%{limit} 条) @@ -1615,16 +1616,16 @@ zh-CN: attached: audio: other: "%{count} 条音频" - description: '附加媒体:%{attached}' + description: 附加媒体:%{attached} image: other: "%{count} 张图片" video: other: "%{count} 段视频" boosted_from_html: 转嘟自 %{acct_link} - content_warning: '内容警告:%{warning}' + content_warning: 内容警告:%{warning} default_language: 与界面显示语言相同 disallowed_hashtags: - other: '包含了这些禁止的话题标签:%{tags}' + other: 包含了这些禁止的话题标签:%{tags} edited_at_html: 编辑于 %{date} errors: in_reply_not_found: 你回复的嘟文似乎不存在 @@ -1741,7 +1742,7 @@ zh-CN: title: 存档导出 suspicious_sign_in: change_password: 更改密码 - details: '以下是该次登录的详细信息:' + details: 以下是该次登录的详细信息: explanation: 我们检测到有新 IP 地址登录了您的账号。 further_actions_html: 如果不是您本人操作,我们建议您立即 %{action} 并启用双因素认证,以确保账号安全。 subject: 已有新 IP 地址访问了您的账号 @@ -1759,8 +1760,8 @@ zh-CN: sensitive: 即刻起,你上传的所有媒体文件都将被标记为敏感内容并隐藏,在点击警告后才能查看。 silence: 你可以继续使用你的账号,但只有已关注你的人才能在看到你在此服务器上的嘟文,并且你会被排除在各类公共列表之外。其他用户仍可以手动关注你。 suspend: 你不能再使用你的账户,并且你的个人资料和其他数据都将无法访问。在大约30天内,你仍可以登录并请求数据备份,之后相关数据将被完全删除。我们会保留一些基础数据以避免封禁失效。 - reason: '理由:' - statuses: '被引用的嘟文:' + reason: 理由: + statuses: 被引用的嘟文: subject: delete_statuses: 你在 %{acct} 的嘟文已被删除 disable: 你的账户 %{acct} 已被冻结 @@ -1786,14 +1787,14 @@ zh-CN: full_handle: 你的完整用户地址 full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一台服务器向你发送信息或者关注你。 subject: 欢迎来到 Mastodon - title: '%{name},欢迎你的加入!' + title: "%{name},欢迎你的加入!" users: follow_limit_reached: 你不能关注超过 %{limit} 个人 go_to_sso_account_settings: 转到您的身份提供商进行账户设置 invalid_otp_token: 输入的双因素认证代码无效 otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助 seamless_external_login: 因为你是通过外部服务登录的,所以密码和电子邮件地址设置都不可用。 - signed_in_as: '当前登录的账户:' + signed_in_as: 当前登录的账户: verification: extra_instructions_html: 提示:您网站上的链接可能是不可见的。重要的部分是 rel="me",它可以防止在具有用户生成内容的网站上冒充身份。您甚至可以在页面头部使用 link 标签而不是 a,但 HTML 必须能够在不执行 JavaScript 的情况下访问。 here_is_how: 具体方法如下: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 6c95bc973a933c..626cf22e71cd20 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1,6 +1,7 @@ +--- zh-HK: about: - about_mastodon_html: 'Mastodon(萬象)是屬於未來的社交網路︰無廣告煩擾、無企業監控、設計講道義、分散無大台!立即重奪個人資料的控制權,使用 Mastodon 吧!' + about_mastodon_html: Mastodon(萬象)是屬於未來的社交網路︰無廣告煩擾、無企業監控、設計講道義、分散無大台!立即重奪個人資料的控制權,使用 Mastodon 吧! contact_missing: 未設定 contact_unavailable: 不適用 hosted_on: 在 %{domain} 運作的 Mastodon 伺服器 @@ -53,7 +54,7 @@ zh-HK: delete: 刪除資料 deleted: 已刪除 demote: 降權 - destroyed_msg: "即將刪除 %{username} 的數據" + destroyed_msg: 即將刪除 %{username} 的數據 disable: 停用 disable_sign_in_token_auth: 停用 e-mail 驗證碼 disable_two_factor_authentication: 關閉雙重認證 @@ -394,7 +395,7 @@ zh-HK: import: 匯入 new: create: 新增域名阻隔 - hint: '「域名阻隔」不會隔絕該域名帳號進入本站資料庫,但是會在符合條件的帳號進入資料庫後,自動對它們套用特定審批操作。' + hint: "「域名阻隔」不會隔絕該域名帳號進入本站資料庫,但是會在符合條件的帳號進入資料庫後,自動對它們套用特定審批操作。" severity: desc_html: "限制將使沒有追蹤該網域帳號的人看不到他們的帖文。停權將從你的伺服器中,刪除此網域帳號的所有內容、媒體和個人檔案資料。如果你只想拒絕接收媒體檔案,請選擇。" noop: 無 @@ -418,7 +419,7 @@ zh-HK: email_domain_blocks: add_new: 新增 attempts_over_week: - other: "上週嘗試了註冊 %{count} 次" + other: 上週嘗試了註冊 %{count} 次 created_msg: 已新增電郵網域阻隔 delete: 刪除 dns: @@ -442,10 +443,10 @@ zh-HK: import: description_html: 你即將匯入網域封鎖列表。請審慎檢查,尤其是如果你並非親自編纂的。 existing_relationships_warning: 現存追蹤關係 - private_comment_description_html: '為了幫助你追蹤匯入封鎖的源頭,匯入的封鎖會在建立時將會有以下的私密備註:%{comment}' + private_comment_description_html: 為了幫助你追蹤匯入封鎖的源頭,匯入的封鎖會在建立時將會有以下的私密備註:%{comment} private_comment_template: 於 %{date} 從 %{source} 匯入 title: 匯入封鎖的網域 - invalid_domain_block: '由於以下錯誤,已略過一個或多個域名封鎖:%{error}' + invalid_domain_block: 由於以下錯誤,已略過一個或多個域名封鎖:%{error} new: title: 匯入封鎖的網域 no_file: 未選擇檔案 @@ -550,7 +551,7 @@ zh-HK: relays: add_new: 新增中繼 delete: 刪除 - description_html: 聯盟中繼站是一種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦中探索內容,而無須本地使用者手動關注遠端伺服器的其他使用者。 + description_html: "聯盟中繼站是一種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦中探索內容,而無須本地使用者手動關注遠端伺服器的其他使用者。" disable: 停用 disabled: 已停用 enable: 啟用 @@ -591,7 +592,7 @@ zh-HK: category_description_html: 此帳號及/或內容被檢舉的原因,將會被引用在與被檢舉帳號的通訊中。 comment: none: 沒有 - comment_description_html: '為了提供更多資訊,%{name} 寫道:' + comment_description_html: 為了提供更多資訊,%{name} 寫道: confirm: 確定 confirm_action: 確認對 @%{acct} 執行管理操作 created_at: 日期 @@ -611,7 +612,7 @@ zh-HK: title: 筆記 notes_description_html: 查看並給其他管理員和日後的自己留下筆記 processed_msg: '已成功處理檢舉報告 #%{id}' - quick_actions_description_html: '採取快捷操作或向下捲動以查看檢舉內容:' + quick_actions_description_html: 採取快捷操作或向下捲動以查看檢舉內容: remote_user_placeholder: 來自 %{instance} 的遠端使用者 reopen: 重開舉報個案 report: '舉報 #%{id}' @@ -625,10 +626,10 @@ zh-HK: statuses_description_html: 違規內容將被引用在被檢舉帳號的通訊中 summary: action_preambles: - delete_html: '你即將移除 @%{acct} 的部份帖文。這會:' - mark_as_sensitive_html: '你即將把 @%{acct} 的部份帖文標記敏感內容。這會:' - silence_html: '你即將限制 @%{acct} 的帳號。這會:' - suspend_html: '你即將把 @%{acct} 的帳號停權。這會:' + delete_html: 你即將移除 @%{acct} 的部份帖文。這會: + mark_as_sensitive_html: 你即將把 @%{acct} 的部份帖文標記敏感內容。這會: + silence_html: 你即將限制 @%{acct} 的帳號。這會: + suspend_html: 你即將把 @%{acct} 的帳號停權。這會: actions: delete_html: 移除違規帖文 mark_as_sensitive_html: 將違規帖文的媒體標記為敏感內容 @@ -644,7 +645,7 @@ zh-HK: target_origin: 被檢舉帳號來源 title: 舉報 unassign: 取消指派 - unknown_action_msg: '未知的動作:%{action}' + unknown_action_msg: 未知的動作:%{action} unresolved: 未處理 updated_at: 更新 view_profile: 查看個人檔案 @@ -834,7 +835,7 @@ zh-HK: elasticsearch_running_check: message_html: 無法連接到 Elasticsearch。請檢查它是否運行中,或停用全文搜索。 elasticsearch_version_check: - message_html: '不相容的 Elasticsearch 版本:%{value}' + message_html: 不相容的 Elasticsearch 版本:%{value} version_comparison: 正在運行 Elasticsearch 版本 %{running_version},需要版本 %{required_version} 。 rules_check: action: 管理伺服器規則 @@ -927,7 +928,7 @@ zh-HK: webhooks: add_new: 新增端點 delete: 刪除 - description_html: Webhook 讓 Mastodon 將有關所選事件的實時通知推送到你自己的應用程式,如此應用程式便可以自動觸發反應。 + description_html: "Webhook 讓 Mastodon 將有關所選事件的實時通知推送到你自己的應用程式,如此應用程式便可以自動觸發反應。" disable: 停用 disabled: 已停用 edit: 編輯端點 @@ -970,7 +971,7 @@ zh-HK: body: 已推出全新 Mastodon 版本,你或許想要更新它! subject: "%{instance} 有全新的 Mastodon 版本可用!" new_trends: - body: '以下項目需要經過審核才能公開顯示:' + body: 以下項目需要經過審核才能公開顯示: new_trending_links: title: 熱門連結 new_trending_statuses: @@ -979,7 +980,7 @@ zh-HK: no_approved_tags: 目前沒有經核准的熱門標籤。 requirements: '任何一個候選都可能超過 #%{rank} 被核准的標籤。目前是 %{lowest_tag_name} 標籤,得分為 %{lowest_tag_score}。' title: 熱門標籤 - subject: '%{instance} 上有待審核的新熱門' + subject: "%{instance} 上有待審核的新熱門" aliases: add_new: 建立別名 (Alias) created_msg: 成功建立別名 (alias)。你可以從舊帳號開始轉移。 @@ -989,7 +990,7 @@ zh-HK: remove: 取消連結別名 (Alias) appearance: advanced_web_interface: 進階網頁介面 - advanced_web_interface_hint: '如果你想善用整個螢幕闊度,你可以啟用「進階網頁介面」,在畫面上配置多個不同的欄目,讓你能根據需要,同時查看盡可能多的信息,支援的欄位包括:主頁、通知、其他站點和任何的列表和標籤。' + advanced_web_interface_hint: 如果你想善用整個螢幕闊度,你可以啟用「進階網頁介面」,在畫面上配置多個不同的欄目,讓你能根據需要,同時查看盡可能多的信息,支援的欄位包括:主頁、通知、其他站點和任何的列表和標籤。 animations_and_accessibility: 動畫和輔助功能 confirmation_dialogs: 確認對話框 discovery: 探索 @@ -1103,9 +1104,9 @@ zh-HK: about_x_hours: "%{count}小時前" about_x_months: "%{count}個月前" about_x_years: "%{count}年前" - almost_x_years: "接近%{count}年前" + almost_x_years: 接近%{count}年前 half_a_minute: 剛剛 - less_than_x_minutes: "少於%{count}分鐘前" + less_than_x_minutes: 少於%{count}分鐘前 less_than_x_seconds: 剛剛 over_x_years: "%{count}年" x_days: "%{count}日" @@ -1119,7 +1120,7 @@ zh-HK: proceed: 刪除帳戶 success_msg: 你的帳戶已經成功刪除 warning: - before: '在繼續之前,請仔細閱讀以下說明:' + before: 在繼續之前,請仔細閱讀以下說明: caches: 已被其他服務器緩存的內容可能不會消失 data_removal: 你的文章和其他資料將被永久刪除 email_change_html: 你可以在不刪除帳戶的情況下更改電子郵件地址 @@ -1220,7 +1221,7 @@ zh-HK: deprecated_api_multiple_keywords: 無法從此應用程式更改這些參數,因為參數適用於多個篩選器關鍵字。請使用較新的應用程式或網頁介面。 invalid_context: 沒有提供內文或內文無效 index: - contexts: '%{contexts} 中的篩選器' + contexts: "%{contexts} 中的篩選器" delete: 刪除 empty: 你沒有過濾器。 expires_in: 於 %{distance} 過期 @@ -1332,7 +1333,7 @@ zh-HK: '86400': 1 天後 expires_in_prompt: 永不過期 generate: 生成邀請連結 - invited_by: '你的邀請人是:' + invited_by: 你的邀請人是: max_uses: other: "%{count} 次" max_uses_prompt: 無限制 @@ -1399,7 +1400,7 @@ zh-HK: set_redirect: 設定重新定向 warning: backreference_required: 新帳戶必須首先反向標識(back-reference)當前帳戶 - before: '在繼續之前,請仔細閱讀以下說明:' + before: 在繼續之前,請仔細閱讀以下說明: cooldown: 在轉移帳號之後將會有一段冷卻時間,在冷卻時間內你將不能再次轉移帳號 disabled_account: 你的當前帳號將不能完整地運作。但你將會有權力匯出你的數據和重新啟用你的帳號。 followers: 此操作將會由當前帳號轉移所有追隨者至新帳號 @@ -1411,7 +1412,7 @@ zh-HK: move_handler: carry_blocks_over_text: 此用戶從%{acct} 轉移,該帳號已被你封鎖。 carry_mutes_over_text: 此用戶從%{acct} 轉移,該帳號已被你靜音。 - copy_account_note_text: '此用戶從%{acct} 轉移,這是你之前在該帳號留下的備注:' + copy_account_note_text: 此用戶從%{acct} 轉移,這是你之前在該帳號留下的備注: navigation: toggle_menu: 切換選單 notification_mailer: @@ -1421,7 +1422,7 @@ zh-HK: sign_up: subject: "%{name} 已註冊" favourite: - body: '你的文章被 %{name} 喜愛:' + body: 你的文章被 %{name} 喜愛: subject: "%{name} 喜歡你的文章" title: 新的最愛 follow: @@ -1431,17 +1432,17 @@ zh-HK: follow_request: action: 處理關注請求 body: "%{name} 要求關注你" - subject: '等候關注你的用戶︰ %{name}' + subject: 等候關注你的用戶︰ %{name} title: 新的關注請求 mention: action: 回覆 - body: '%{name} 在文章中提及你︰' - subject: '%{name} 在文章中提及你' + body: "%{name} 在文章中提及你︰" + subject: "%{name} 在文章中提及你" title: 新的提及 poll: - subject: '%{name} 發起的投票已截止' + subject: "%{name} 發起的投票已截止" reblog: - body: '你的文章被 %{name} 轉推:' + body: 你的文章被 %{name} 轉推: subject: "%{name} 轉推了你的文章" title: 新的轉推 status: @@ -1451,7 +1452,7 @@ zh-HK: notifications: administration_emails: 管理員電郵通知 email_events: 電郵通知活動 - email_events_hint: '選擇你想接收通知的活動:' + email_events_hint: 選擇你想接收通知的活動: other_settings: 其他通知設定 number: human: @@ -1468,7 +1469,7 @@ zh-HK: description_html: 當你啟用雙重認證後,你登入時將需要使用你的手機或其他認證器所產生的代碼。 enable: 啟用 instructions_html: "請用你手機的認證器應用程式(如 Google Authenticator、Authy),掃描這裏的QR 圖形碼。在雙重認證啟用後,你登入時將須要使用此應用程式產生的認證碼。" - manual_instructions: '如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰' + manual_instructions: 如果你無法掃描 QR 圖形碼,請手動輸入這個文字密碼︰ setup: 設定 wrong_code: 你輸入的認證碼並不正確!可能伺服器時間和你手機不一致,請檢查你手機的時鐘,或與本站管理員聯絡。 pagination: @@ -1535,10 +1536,10 @@ zh-HK: errors: invalid_rules: 未引用有效的規則 rss: - content_warning: '內容警告:' + content_warning: 內容警告: descriptions: account: 來自 @%{acct} 的公開帖文 - tag: '#%{hashtag} 標籤的公開帖文' + tag: "#%{hashtag} 標籤的公開帖文" scheduled_statuses: over_daily_limit: 你已經超越了當天排定發文的限額 (%{limit}) over_total_limit: 你已經超越了排定發文的限額 (%{limit}) @@ -1615,16 +1616,16 @@ zh-HK: attached: audio: other: "%{count} 段影片" - description: '附件: %{attached}' + description: 附件: %{attached} image: other: "%{count} 幅圖片" video: other: "%{count} 段影片" boosted_from_html: 轉推自 %{acct_link} - content_warning: '內容警告: %{warning}' + content_warning: 內容警告: %{warning} default_language: 與介面語言相同 disallowed_hashtags: - other: '包含不允許的標籤: %{tags}' + other: 包含不允許的標籤: %{tags} edited_at_html: 編輯於 %{date} errors: in_reply_not_found: 你所回覆的嘟文並不存在。 @@ -1740,7 +1741,7 @@ zh-HK: title: 檔案匯出 suspicious_sign_in: change_password: 更改你的密碼 - details: '以下是登入的細節:' + details: 以下是登入的細節: explanation: 我們偵測到有新的 IP 地址登入你的帳號。 further_actions_html: 如果這不是你,我們建議你立即 %{action} 並啟用雙重認證,以確保帳號安全。 subject: 你的帳號被一個新的 IP 地址存取 @@ -1758,8 +1759,8 @@ zh-HK: sensitive: 從今開始,你上傳的所有媒體檔案將被標記為敏感內容並隱藏,須點擊警告後方可查看。 silence: 你仍然可以使用你的帳號,但只有你的追蹤者方可看見你在此伺服器上的帖文,你亦可能會被排除在各種探索功能之外,但其他人仍然可以手動追蹤你。 suspend: 你不能再使用你的帳號及存取你的個人檔案和其他資料。你仍然可以登入並要求取得資料備份,直至資料在大約 30 天內被完全刪除為止,但我們將保留部份基本資料,以防止你規避處罰。 - reason: '原因:' - statuses: '引用帖文:' + reason: 原因: + statuses: 引用帖文: subject: delete_statuses: 你在 %{acct} 的帖文已被移除 disable: 你的帳號 %{acct} 已經被涷結 @@ -1792,7 +1793,7 @@ zh-HK: invalid_otp_token: 雙重認證碼不正確 otp_lost_help_html: 如果這兩者你均無法登入,你可以聯繫 %{email} seamless_external_login: 因為你正在使用第三方服務登入,所以不能設定密碼和電郵。 - signed_in_as: '目前登入的帳戶:' + signed_in_as: 目前登入的帳戶: verification: extra_instructions_html: 提示:你是可以隱藏網站上的連結的。重點是rel="me",它可以防止有用戶生成內容的網站假冒身份。你甚至可以在頁面標頭 (header) 使用 link 標籤,而非 a,但你必須確保沒有執行 Javascript 下也可存取 HTML。 here_is_how: 驗證方法 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index c65b253955d750..e139742ff17e54 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1,6 +1,7 @@ +--- zh-TW: about: - about_mastodon_html: 'Mastodon (長毛象)是一個自由、開放原始碼的社群網站。它是一個分散式的服務,避免您的通訊被單一商業機構壟斷操控。請您選擇一家您信任的 Mastodon 站點,在上面建立帳號,然後您就可以和任一 Mastodon 站點上的使用者互通,享受無縫的社群網路交流。' + about_mastodon_html: Mastodon (長毛象)是一個自由、開放原始碼的社群網站。它是一個分散式的服務,避免您的通訊被單一商業機構壟斷操控。請您選擇一家您信任的 Mastodon 站點,在上面建立帳號,然後您就可以和任一 Mastodon 站點上的使用者互通,享受無縫的社群網路交流。 contact_missing: 未設定 contact_unavailable: 未公開 hosted_on: 在 %{domain} 運作的 Mastodon 站點 @@ -53,7 +54,7 @@ zh-TW: delete: 刪除資料 deleted: 已刪除 demote: 降級 - destroyed_msg: "即將刪除 %{username} 的資料" + destroyed_msg: 即將刪除 %{username} 的資料 disable: 停用 disable_sign_in_token_auth: 停用電子郵件 token 驗證 disable_two_factor_authentication: 停用兩階段認證 @@ -133,7 +134,7 @@ zh-TW: security: 安全性 security_measures: only_password: 僅使用密碼 - password_and_2fa: 密碼及兩階段驗證 (2FA) + password_and_2fa: 密碼及兩階段驗證 (2FA) sensitive: 強制標記為敏感内容 sensitized: 已標記為敏感內容 shared_inbox_url: 共享收件匣 URL @@ -389,7 +390,7 @@ zh-TW: domain: 站點 edit: 更改封鎖的站台 existing_domain_block: 您已對 %{name} 施加更嚴格的限制。 - existing_domain_block_html: 您已對 %{name} 施加更嚴格的限制,您需要先 解除封鎖。 + existing_domain_block_html: 您已對 %{name} 施加更嚴格的限制,您需要先解除封鎖。 export: 匯出 import: 匯入 new: @@ -418,7 +419,7 @@ zh-TW: email_domain_blocks: add_new: 加入新項目 attempts_over_week: - other: "上週共有 %{count} 次註冊嘗試" + other: 上週共有 %{count} 次註冊嘗試 created_msg: 已成功將電子郵件網域加入黑名單 delete: 刪除 dns: @@ -442,15 +443,15 @@ zh-TW: import: description_html: 您將匯入網域黑名單列表。若您非自行編纂此列表,請審慎檢查。 existing_relationships_warning: 既存之跟隨關係 - private_comment_description_html: '為了幫助您追蹤匯入黑名單之來源,匯入黑名單建立時將隨附以下私密備註:%{comment}' + private_comment_description_html: 為了幫助您追蹤匯入黑名單之來源,匯入黑名單建立時將隨附以下私密備註:%{comment} private_comment_template: 於 %{date} 由 %{source} 匯入 title: 匯入網域黑名單 - invalid_domain_block: '由於此錯誤,以致一個或多個網域封鎖被略過:%{error}' + invalid_domain_block: 由於此錯誤,以致一個或多個網域封鎖被略過:%{error} new: title: 匯入網域黑名單 no_file: 尚未選擇檔案 follow_recommendations: - description_html: "跟隨建議幫助新使用者們快速找到有趣的內容。當使用者沒有與其他帳號有足夠多的互動以建立個人化跟隨建議時,這些帳號將會被推薦。這些帳號將基於某選定語言之高互動和高本地跟隨者數量帳號而\n每日重新更新。" + description_html: "跟隨建議幫助新使用者們快速找到有趣的內容。當使用者沒有與其他帳號有足夠多的互動以建立個人化跟隨建議時,這些帳號將會被推薦。這些帳號將基於某選定語言之高互動和高本地跟隨者數量帳號而每日重新更新。" language: 對於語言 status: 狀態 suppress: 取消跟隨建議 @@ -550,7 +551,7 @@ zh-TW: relays: add_new: 新增中繼站 delete: 刪除 - description_html: 聯邦中繼站 是種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦宇宙中探索內容,而無須本地使用者手動跟隨遠端伺服器的其他使用者。 + description_html: "聯邦中繼站 是種中繼伺服器,會於訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器從聯邦宇宙中探索內容,而無須本地使用者手動跟隨遠端伺服器的其他使用者。" disable: 停用 disabled: 停用 enable: 啟用 @@ -591,7 +592,7 @@ zh-TW: category_description_html: 此帳號及/或被檢舉內容之原因會被引用在檢舉帳號通知中 comment: none: 無 - comment_description_html: '提供更多資訊,%{name} 寫道:' + comment_description_html: 提供更多資訊,%{name} 寫道: confirm: 確認 confirm_action: 確認對 @%{acct} 執行站務動作 created_at: 日期 @@ -611,7 +612,7 @@ zh-TW: title: 備註 notes_description_html: 檢視及留下些給其他管理員和未來的自己的備註 processed_msg: '檢舉報告 #%{id} 已被成功處理' - quick_actions_description_html: '採取一個快速行動,或者下捲以檢視檢舉內容:' + quick_actions_description_html: 採取一個快速行動,或者下捲以檢視檢舉內容: remote_user_placeholder: 來自 %{instance} 之遠端使用者 reopen: 重開檢舉 report: '檢舉 #%{id}' @@ -625,10 +626,10 @@ zh-TW: statuses_description_html: 侵犯性違規內容會被引用在檢舉帳號通知中 summary: action_preambles: - delete_html: '您將要 移除 某些 @%{acct} 之嘟文。此將會:' - mark_as_sensitive_html: '您將要 標記 某些 @%{acct} 之嘟文為 敏感內容 。此將會:' - silence_html: '您將要 限制 @%{acct} 之帳號。此將會:' - suspend_html: '您將要 停權 @%{acct} 之帳號。此將會:' + delete_html: 您將要 移除 某些 @%{acct} 之嘟文。此將會: + mark_as_sensitive_html: 您將要 標記 某些 @%{acct} 之嘟文為 敏感內容 。此將會: + silence_html: 您將要 限制 @%{acct} 之帳號。此將會: + suspend_html: 您將要 停權 @%{acct} 之帳號。此將會: actions: delete_html: 移除違反規則之嘟文 mark_as_sensitive_html: 將違反規則之嘟文多媒體標記為敏感內容 @@ -644,7 +645,7 @@ zh-TW: target_origin: 檢舉帳號之來源 title: 檢舉 unassign: 取消指派 - unknown_action_msg: '未知的動作:%{action}' + unknown_action_msg: 未知的動作:%{action} unresolved: 未解決 updated_at: 更新 view_profile: 檢視個人檔案頁面 @@ -836,7 +837,7 @@ zh-TW: elasticsearch_running_check: message_html: 無法連接 Elasticsearch。請檢查是否正在執行中,或者已關閉全文搜尋。 elasticsearch_version_check: - message_html: '不相容的 Elasticsearch 版本:%{value}' + message_html: 不相容的 Elasticsearch 版本:%{value} version_comparison: Elasticsearch %{running_version} 版正在執行,需要 %{required_version} 版。 rules_check: action: 管理伺服器規則 @@ -929,7 +930,7 @@ zh-TW: webhooks: add_new: 新增端點 delete: 刪除 - description_html: Webhook 讓 Mastodon 可以將關於選定的事件的即時通知推送到您自己的應用程式,如此您的應用程式就可以自動觸發反應。 + description_html: "Webhook 讓 Mastodon 可以將關於選定的事件的即時通知推送到您自己的應用程式,如此您的應用程式就可以自動觸發反應。" disable: 停用 disabled: 已停用 edit: 編輯端點 @@ -963,7 +964,7 @@ zh-TW: subject: "%{instance} 有可取得的重要 Mastodon 更新!" new_pending_account: body: 以下是新帳號的詳細資訊。您可以同意或拒絕這項申請。 - subject: '%{instance} 上有新帳號 (%{username}) 待審核' + subject: "%{instance} 上有新帳號 (%{username}) 待審核" new_report: body: "%{reporter} 已檢舉使用者 %{target}" body_remote: 來自 %{domain} 的使用者已檢舉使用者 %{target} @@ -972,7 +973,7 @@ zh-TW: body: Mastodon 新版本已發佈,您可能想升級! subject: "%{instance} 有可取得的 Mastodon 新版本!" new_trends: - body: '以下項目需要經過審核才能公開顯示:' + body: 以下項目需要經過審核才能公開顯示: new_trending_links: title: 熱門連結 new_trending_statuses: @@ -981,11 +982,11 @@ zh-TW: no_approved_tags: 這些是目前仍未被審核之熱門主題標籤。 requirements: '這些候選中的任何一個都可能超過 #%{rank} 已批准的熱門主題標籤,該主題標籤目前是 #%{lowest_tag_name},得分為 %{lowest_tag_score}。' title: 熱門主題標籤 - subject: '%{instance} 有待審核之新熱門' + subject: "%{instance} 有待審核之新熱門" aliases: add_new: 建立別名 created_msg: 成功建立別名。您可以自舊帳號開始轉移。 - deleted_msg: 成功移除別名。您將無法再由舊帳號轉移到目前的帳號。 + deleted_msg: 成功移除別名。您將無法再由舊帳號轉移至目前的帳號。 empty: 您目前沒有任何別名。 hint_html: 如果想由其他帳號轉移至此帳號,您可以在此處新增別名,稍後系統將容許您將跟隨者由舊帳號轉移至此。此項作業是無害且可復原的帳號的遷移程序需要在舊帳號啟動。 remove: 取消連結別名 @@ -996,7 +997,7 @@ zh-TW: confirmation_dialogs: 確認對話框 discovery: 探索 localization: - body: Mastodon 是由志願者翻譯的。 + body: Mastodon 是由志願者所翻譯。 guide_link: https://crowdin.com/project/mastodon guide_link_text: 每個人都能貢獻。 sensitive_content: 敏感內容 @@ -1039,8 +1040,8 @@ zh-TW: log_in_with: 登入,使用 login: 登入 logout: 登出 - migrate_account: 轉移到另一個帳號 - migrate_account_html: 如果您希望引導他人跟隨另一個帳號,請 到這裡設定。 + migrate_account: 轉移至另一個帳號 + migrate_account_html: 如果您希望引導他人跟隨另一個帳號,請至這裡設定。 or_log_in_with: 或透過其他方式登入 privacy_policy_agreement_html: 我已閱讀且同意 隱私權政策 progress: @@ -1069,19 +1070,19 @@ zh-TW: email_below_hint_html: 請檢查您的垃圾郵件資料夾,或是請求另一個。如果是錯的,您可以更正您的電子郵件地址。 email_settings_hint_html: 請點擊我們寄給您連結以驗證 %{email}。我們將於此稍候。 link_not_received: 無法取得連結嗎? - new_confirmation_instructions_sent: 您將會在幾分鐘之內收到新的包含確認連結的電子郵件! + new_confirmation_instructions_sent: 您將於幾分鐘之內收到新的包含確認連結的電子郵件! title: 請檢查您的收件匣 sign_in: preamble_html: 請使用您於 %{domain} 的帳號密碼登入。若您的帳號託管於其他伺服器,您將無法在此登入。 title: 登入 %{domain} sign_up: - manual_review: '%{domain} 上的註冊由我們的管理員進行人工審核。為協助我們處理您的註冊,請寫一些關於您自己的資訊以及您想要在 %{domain} 上註冊帳號的原因。' + manual_review: "%{domain} 上的註冊由我們的管理員進行人工審核。為協助我們處理您的註冊,請寫一些關於您自己的資訊以及您想要在 %{domain} 上註冊帳號的原因。" preamble: 於此 Mastodon 伺服器擁有帳號的話,您將能跟隨聯邦宇宙網路中任何一份子,無論他們的帳號託管於何處。 title: 讓我們一起設定 %{domain} 吧! status: account_status: 帳號狀態 confirming: 等待電子郵件確認完成。 - functional: 您的帳號可以正常使用了。 + functional: "您的帳號可以正常使用了。🎉" pending: 管管們正在處理您的申請,這可能需要一點時間處理。我們將於申請通過後以電子郵件方式通知您。 redirecting_to: 您的帳號因目前重定向至 %{acct} 而被停用。 view_strikes: 檢視針對您帳號過去的警示 @@ -1105,9 +1106,9 @@ zh-TW: about_x_hours: "%{count}小時前" about_x_months: "%{count}個月前" about_x_years: "%{count}年前" - almost_x_years: "接近%{count}年前" + almost_x_years: 接近%{count}年前 half_a_minute: 剛剛 - less_than_x_minutes: "小於%{count}分鐘前" + less_than_x_minutes: 小於%{count}分鐘前 less_than_x_seconds: 剛剛 over_x_years: "%{count}年" x_days: "%{count}天" @@ -1121,7 +1122,7 @@ zh-TW: proceed: 刪除帳號 success_msg: 您的帳號已經成功刪除 warning: - before: '在進行下一步驟之前,請詳細閱讀以下説明:' + before: 在進行下一步驟之前,請詳細閱讀以下説明: caches: 已被其他節點快取的內容可能會殘留其中 data_removal: 您的嘟文和其他資料將會被永久刪除 email_change_html: 您可以在不刪除帳號的情況下變更您的電子郵件地址 @@ -1222,7 +1223,7 @@ zh-TW: deprecated_api_multiple_keywords: 這些參數無法從此應用程式中更改,因為它們適用於一或多個過濾器關鍵字。請使用較新的應用程式或是網頁介面。 invalid_context: 沒有提供內文或內文無效 index: - contexts: '%{contexts} 中的過濾器' + contexts: "%{contexts} 中的過濾器" delete: 刪除 empty: 您沒有過濾器。 expires_in: 於 %{distance} 過期 @@ -1334,7 +1335,7 @@ zh-TW: '86400': 1 天後 expires_in_prompt: 永不過期 generate: 建立邀請連結 - invited_by: '您的邀請人是:' + invited_by: 您的邀請人是: max_uses: other: "%{count} 則" max_uses_prompt: 無限制 @@ -1401,19 +1402,19 @@ zh-TW: set_redirect: 設定重新導向 warning: backreference_required: 新的帳號必須先設定為反向參照到目前帳號 - before: '在進行下一步驟之前,請詳細閱讀以下説明:' + before: 在進行下一步驟之前,請詳細閱讀以下説明: cooldown: 在轉移帳號後會有一段等待時間,在等待時間內您將無法再次轉移 disabled_account: 之後您的目前帳號將完全無法使用。但您可以存取資料匯出與重新啟用。 followers: 此動作將會將目前帳號的所有跟隨者轉移至新帳號 only_redirect_html: 或者,您也可以僅在您的個人檔案中設定重新導向。 other_data: 其他資料並不會自動轉移 - redirect: 您目前的帳號將會在個人檔案頁面新增重新導向公告,並會被排除在搜尋結果之外 + redirect: 您目前的帳號將於個人檔案頁面新增重新導向公告,並會被排除在搜尋結果之外 moderation: title: 站務 move_handler: carry_blocks_over_text: 此使用者轉移自被您封鎖的 %{acct}。 carry_mutes_over_text: 此使用者轉移自被您靜音的 %{acct}。 - copy_account_note_text: '此使用者轉移自 %{acct},以下是您之前關於他們的備註:' + copy_account_note_text: 此使用者轉移自 %{acct},以下是您之前關於他們的備註: navigation: toggle_menu: 切換選單 notification_mailer: @@ -1423,7 +1424,7 @@ zh-TW: sign_up: subject: "%{name} 已進行註冊" favourite: - body: '您的嘟文被 %{name} 加入了最愛:' + body: 您的嘟文被 %{name} 加入了最愛: subject: "%{name} 將您的嘟文加入了最愛" title: 新的最愛 follow: @@ -1433,17 +1434,17 @@ zh-TW: follow_request: action: 處理跟隨請求 body: "%{name} 要求跟隨您" - subject: '等待跟隨您的使用者︰ %{name}' + subject: 等待跟隨您的使用者︰ %{name} title: 新的跟隨請求 mention: action: 回覆 - body: '%{name} 在嘟文中提及您:' - subject: '%{name} 在嘟文中提及您' + body: "%{name} 在嘟文中提及您:" + subject: "%{name} 在嘟文中提及您" title: 新的提及 poll: subject: 由 %{name} 發起的投票已結束 reblog: - body: '您的嘟文被 %{name} 轉嘟:' + body: 您的嘟文被 %{name} 轉嘟: subject: "%{name} 已轉嘟您的嘟文" title: 新的轉嘟 status: @@ -1453,7 +1454,7 @@ zh-TW: notifications: administration_emails: 管理員電子郵件通知 email_events: 電子郵件通知設定 - email_events_hint: '選取您想接收通知的事件:' + email_events_hint: 選取您想接收通知的事件: other_settings: 其他通知設定 number: human: @@ -1470,7 +1471,7 @@ zh-TW: description_html: 若您啟用使用驗證應用程式的兩階段驗證,您每次登入都需要輸入由您的手機所產生之 Token。 enable: 啟用 instructions_html: "請用您手機上的 Google Authenticator 或類似的 TOTP 應用程式掃描此 QR code。從現在開始,該應用程式將會產生您每次登入都必須輸入的 token。" - manual_instructions: '如果您無法掃描 QR code,則必須手動輸入此明文密碼:' + manual_instructions: 如果您無法掃描 QR code,則必須手動輸入此明文密碼: setup: 設定 wrong_code: 您輸入的驗證碼無效!伺服器時間或是裝置時間無誤嗎? pagination: @@ -1496,9 +1497,7 @@ zh-TW: posting_defaults: 嘟文預設值 public_timelines: 公開時間軸 privacy: - hint_html: |- - 自訂您希望如何讓您的個人檔案及嘟文被找到。 - 藉由啟用一系列 Mastodon 功能以幫助您觸及更廣的受眾。煩請花些時間確認您是否欲啟用這些設定。 + hint_html: "自訂您希望如何讓您的個人檔案及嘟文被發現。藉由啟用一系列 Mastodon 功能以幫助您觸及更廣的受眾。煩請花些時間確認您是否欲啟用這些設定。" privacy: 隱私權 privacy_hint_html: 控制您希望向其他人揭露之內容。人們透過瀏覽其他人的跟隨者與其發嘟之應用程式發現有趣的個人檔案和酷炫的 Mastodon 應用程式,但您能選擇將其隱藏。 reach: 觸及 @@ -1539,7 +1538,7 @@ zh-TW: errors: invalid_rules: 未引用有效規則 rss: - content_warning: '內容警告:' + content_warning: 內容警告: descriptions: account: 來自 @%{acct} 之公開嘟文 tag: '帶有 #%{hashtag} 之公開嘟文' @@ -1619,16 +1618,16 @@ zh-TW: attached: audio: other: "%{count} 則音訊" - description: '附件: %{attached}' + description: 附件: %{attached} image: other: "%{count} 張圖片" video: other: "%{count} 段影片" boosted_from_html: 轉嘟自 %{acct_link} - content_warning: '內容警告: %{warning}' + content_warning: 內容警告: %{warning} default_language: 與介面語言相同 disallowed_hashtags: - other: '含有不得使用的標籤: %{tags}' + other: 含有不得使用的標籤: %{tags} edited_at_html: 編輯於 %{date} errors: in_reply_not_found: 您嘗試回覆的嘟文看起來不存在。 @@ -1662,7 +1661,7 @@ zh-TW: enabled: 自動刪除舊嘟文 enabled_hint: 一旦達到指定的保存期限,就會自動刪除您的嘟文,除非該嘟文符合下列例外 exceptions: 例外 - explanation: 因為刪除嘟文是耗費資源的操作,當伺服器不那麼忙碌時才會慢慢完成。因此,您的嘟文會在到達保存期限後一段時間才會被刪除。 + explanation: 因為刪除嘟文是耗費資源的操作,當伺服器不那麼忙碌時才會慢慢完成。因此,您的嘟文將於到達保存期限後一段時間才會被刪除。 ignore_favs: 忽略最愛數 ignore_reblogs: 忽略轉嘟數 interaction_exceptions: 基於互動的例外規則 @@ -1745,7 +1744,7 @@ zh-TW: title: 檔案匯出 suspicious_sign_in: change_password: 變更密碼 - details: '以下是該登入之詳細資訊:' + details: 以下是該登入之詳細資訊: explanation: 我們偵測到有新 IP 地址登入您的帳號 further_actions_html: 如果這個不是您,我們建議您立即 %{action} ,並且啟用二階段驗證 (2FA) 以確保帳號安全。 subject: 您的帳號已被新 IP 地址存取 @@ -1763,8 +1762,8 @@ zh-TW: sensitive: 由此刻起,您所有上傳的媒體檔案將被標記為敏感內容,並且隱藏於點擊警告之後。 silence: 您仍然能使用您的帳號,但僅有已跟隨您的人才能見到您於此伺服器之嘟文,您也可能會從各式探索功能中被排除。但其他人仍可手動跟隨您。 suspend: 您將不能使用您的帳號,您的個人檔案頁面及其他資料將不再能被存取。您仍可於約 30 日內資料被完全刪除前要求下載您的資料,但我們仍會保留一部份基本資料,以防止有人規避停權處罰。 - reason: '原因:' - statuses: '引用的嘟文:' + reason: 原因: + statuses: 引用的嘟文: subject: delete_statuses: 您於 %{acct} 之嘟文已被移除 disable: 您的帳號 %{acct} 已被凍結 @@ -1790,14 +1789,14 @@ zh-TW: full_handle: 您的完整帳號名稱 full_handle_hint: 您需要將這告訴您的朋友們,這樣他們就能從另一個伺服器向您發送訊息或跟隨您。 subject: 歡迎來到 Mastodon - title: '%{name} 誠摯歡迎您的加入!' + title: "%{name} 誠摯歡迎您的加入!" users: follow_limit_reached: 您無法跟隨多於 %{limit} 個人 go_to_sso_account_settings: 前往您的身分提供商 (identity provider) 之帳號設定 invalid_otp_token: 兩階段認證碼不正確 otp_lost_help_html: 如果您無法存取這兩者,您可以透過 %{email} 與我們聯繫 seamless_external_login: 由於您是由外部系統登入,所以不能設定密碼與電子郵件。 - signed_in_as: '目前登入的帳號:' + signed_in_as: 目前登入的帳號: verification: extra_instructions_html: 小撇步:您網站上之此連結可以是不可見的。其重要的部分是 rel="me" ,防止透過使用者產生內容模擬。您甚至能使用頁面標頭之 link 標籤取代頁面中的 a 標籤,但 HTML 必須能於不執行 JavaScript 情況下所存取。 here_is_how: 如此這般 diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 8c10f5935b21cb..f4bcf5766f653a 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -167,7 +167,7 @@ resource :role, only: [:show, :update], controller: 'users/roles' end - resources :custom_emojis, only: [:index, :new, :create] do + resources :custom_emojis, only: [:index, :new, :create, :edit, :update] do collection do post :batch end diff --git a/config/settings.yml b/config/settings.yml index 1fb106e680a2e9..65128db7f0ff7f 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -44,6 +44,7 @@ defaults: &defaults check_lts_version_only: true enable_public_unlisted_visibility: true unlocked_friend: false + stranger_mention_from_local_ng: true development: <<: *defaults diff --git a/db/post_migrate/20231021005339_remove_remote_uri_from_local_custom_emojis.rb b/db/post_migrate/20231021005339_remove_remote_uri_from_local_custom_emojis.rb new file mode 100644 index 00000000000000..d541de7429d261 --- /dev/null +++ b/db/post_migrate/20231021005339_remove_remote_uri_from_local_custom_emojis.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class RemoveRemoteUriFromLocalCustomEmojis < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + class CustomEmoji < ApplicationRecord; end + + def up + safety_assured do + CustomEmoji.transaction do + CustomEmoji.where(domain: nil).update_all(image_remote_url: nil, uri: nil) # rubocop:disable Rails/SkipsModelValidations + end + end + end + + def down; end +end diff --git a/db/post_migrate/20231022074913_add_statuses_quote_index.rb b/db/post_migrate/20231022074913_add_statuses_quote_index.rb new file mode 100644 index 00000000000000..98025700fcb40e --- /dev/null +++ b/db/post_migrate/20231022074913_add_statuses_quote_index.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddStatusesQuoteIndex < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured { add_index :statuses, [:quote_of_id, :account_id], unique: false } + end +end diff --git a/db/schema.rb b/db/schema.rb index 7a4ee11608c751..071f29c2e0d91c 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[7.0].define(version: 2023_10_09_235215) do +ActiveRecord::Schema[7.0].define(version: 2023_10_22_074913) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1228,6 +1228,7 @@ t.index ["id", "account_id"], name: "index_statuses_public_20200119", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))" t.index ["in_reply_to_account_id"], name: "index_statuses_on_in_reply_to_account_id", where: "(in_reply_to_account_id IS NOT NULL)" t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id", where: "(in_reply_to_id IS NOT NULL)" + t.index ["quote_of_id", "account_id"], name: "index_statuses_on_quote_of_id_and_account_id" t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id" t.index ["uri"], name: "index_statuses_on_uri", unique: true, opclass: :text_pattern_ops, where: "(uri IS NOT NULL)" end diff --git a/docker-compose.yml b/docker-compose.yml index 1a180b089070f1..f7639d9867335c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -111,7 +111,7 @@ services: test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"] ## Uncomment to enable federation with tor instances along with adding the following ENV variables - ## http_proxy=http://privoxy:8118 + ## http_hidden_proxy=http://privoxy:8118 ## ALLOW_ACCESS_TO_HIDDEN_SERVICE=true # tor: # image: sirboops/tor diff --git a/lib/mastodon/cli/domains.rb b/lib/mastodon/cli/domains.rb index d17b25368181b6..329f1716725b52 100644 --- a/lib/mastodon/cli/domains.rb +++ b/lib/mastodon/cli/domains.rb @@ -125,7 +125,7 @@ def crawl(start = nil) failed = Concurrent::AtomicFixnum.new(0) start_at = Time.now.to_f seed = start ? [start] : Instance.pluck(:domain) - blocked_domains = /\.?(#{DomainBlock.where(severity: 1).pluck(:domain).map { |domain| Regexp.escape(domain) }.join('|')})$/ + blocked_domains = /\.?(#{Regexp.union(domain_block_suspended_domains).source})$/ progress = create_progress_bar pool = Concurrent::ThreadPoolExecutor.new(min_threads: 0, max_threads: options[:concurrency], idletime: 10, auto_terminate: true, max_queue: 0) @@ -189,6 +189,10 @@ def crawl(start = nil) private + def domain_block_suspended_domains + DomainBlock.suspend.pluck(:domain) + end + def stats_to_summary(stats, processed, failed, start_at) stats.compact! diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index aca8ccb2e6dc54..7416de85caeb7d 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -5,11 +5,11 @@ module Version module_function def kmyblue_major - 7 + 8 end def kmyblue_minor - 2 + 1 end def kmyblue_flag @@ -21,15 +21,15 @@ def major end def minor - 2 + 3 end def patch - 1 + 0 end def default_prerelease - '' + 'alpha.0' end def prerelease diff --git a/spec/config/initializers/rack_attack_spec.rb b/spec/config/initializers/rack_attack_spec.rb index 7cd4ac76bbb3ab..c9ce9e27d023a9 100644 --- a/spec/config/initializers/rack_attack_spec.rb +++ b/spec/config/initializers/rack_attack_spec.rb @@ -16,37 +16,63 @@ def app # https://github.com/rack/rack-attack/blob/v6.6.1/lib/rack/attack/cache.rb#L64-L66 # So we want to minimize `Time.now.to_i % period` - travel_to Time.zone.at((Time.now.to_i / period.seconds).to_i * period.seconds) + travel_to Time.zone.at(counter_prefix * period.seconds) end context 'when the number of requests is lower than the limit' do + before do + below_limit.times { increment_counter } + end + it 'does not change the request status' do - limit.times do - request.call - expect(response).to_not have_http_status(429) - end + expect { request.call }.to change { throttle_count }.by(1) + + expect(response).to_not have_http_status(429) end end context 'when the number of requests is higher than the limit' do + before do + above_limit.times { increment_counter } + end + it 'returns http too many requests after limit and returns to normal status after period' do - (limit * 2).times do |i| - request.call - expect(response).to have_http_status(429) if i > limit - end + expect { request.call }.to change { throttle_count }.by(1) + expect(response).to have_http_status(429) travel period - request.call + expect { request.call }.to change { throttle_count }.by(1) expect(response).to_not have_http_status(429) end end + + def below_limit + limit - 1 + end + + def above_limit + limit * 2 + end + + def throttle_count + described_class.cache.read("#{counter_prefix}:#{throttle}:#{remote_ip}") || 0 + end + + def counter_prefix + (Time.now.to_i / period.seconds).to_i + end + + def increment_counter + described_class.cache.count("#{throttle}:#{remote_ip}", period) + end end let(:remote_ip) { '1.2.3.5' } describe 'throttle excessive sign-up requests by IP address' do context 'when accessed through the website' do + let(:throttle) { 'throttle_sign_up_attempts/ip' } let(:limit) { 25 } let(:period) { 5.minutes } let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } @@ -65,6 +91,7 @@ def app end context 'when accessed through the API' do + let(:throttle) { 'throttle_api_sign_up' } let(:limit) { 5 } let(:period) { 30.minutes } let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } @@ -87,6 +114,7 @@ def app end describe 'throttle excessive sign-in requests by IP address' do + let(:throttle) { 'throttle_login_attempts/ip' } let(:limit) { 25 } let(:period) { 5.minutes } let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } } diff --git a/spec/controllers/accounts_controller_spec.rb b/spec/controllers/accounts_controller_spec.rb index 5a8585b0697b99..cc9e3198b6fbdb 100644 --- a/spec/controllers/accounts_controller_spec.rb +++ b/spec/controllers/accounts_controller_spec.rb @@ -7,468 +7,319 @@ let(:account) { Fabricate(:account) } - shared_examples 'cacheable response' do - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - expect(session).to be_empty - end + shared_examples 'unapproved account check' do + before { account.user.update(approved: false) } - it 'returns Vary header' do - expect(response.headers['Vary']).to include 'Accept' - end + it 'returns http not found' do + get :show, params: { username: account.username, format: format } - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' + expect(response).to have_http_status(404) end end - describe 'GET #show' do - let(:format) { 'html' } - - let!(:status) { Fabricate(:status, account: account) } - let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } - let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } - let!(:status_media) { Fabricate(:status, account: account) } - let!(:status_pinned) { Fabricate(:status, account: account) } - let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } - let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } - let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } - + shared_examples 'permanently suspended account check' do before do - status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) - account.pinned_statuses << status_pinned - account.pinned_statuses << status_private + account.suspend! + account.deletion_request.destroy end - shared_examples 'preliminary checks' do - context 'when account is not approved' do - before do - account.user.update(approved: false) - end + it 'returns http gone' do + get :show, params: { username: account.username, format: format } - it 'returns http not found' do - get :show, params: { username: account.username, format: format } - expect(response).to have_http_status(404) - end - end + expect(response).to have_http_status(410) end + end - context 'with HTML' do - let(:format) { 'html' } - - 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 'temporarily suspended account check' do |code: 403| + before { account.suspend! } - shared_examples 'common response characteristics' do - it 'returns http success' do - expect(response).to have_http_status(200) - end + it 'returns appropriate http response code' do + get :show, params: { username: account.username, format: format } - it 'returns Link header' do - expect(response.headers['Link'].to_s).to include ActivityPub::TagManager.instance.uri_for(account) - end - - it 'renders show template' do - expect(response).to render_template(:show) - end - end + expect(response).to have_http_status(code) + end + end - context 'with a normal account in an HTML request' do - before do - get :show, params: { username: account.username, format: format } - end + describe 'GET #show' do + context 'with basic account status checks' do + context 'with HTML' do + let(:format) { 'html' } - it_behaves_like 'common response characteristics' + it_behaves_like 'unapproved account check' + it_behaves_like 'permanently suspended account check' + it_behaves_like 'temporarily suspended account check' end - context 'with replies' do - before do - allow(controller).to receive(:replies_requested?).and_return(true) - get :show, params: { username: account.username, format: format } - end + context 'with JSON' do + let(:format) { 'json' } - it_behaves_like 'common response characteristics' + it_behaves_like 'unapproved account check' + it_behaves_like 'permanently suspended account check' + it_behaves_like 'temporarily suspended account check', code: 200 end - context 'with media' do - before do - allow(controller).to receive(:media_requested?).and_return(true) - get :show, params: { username: account.username, format: format } - end + context 'with RSS' do + let(:format) { 'rss' } - it_behaves_like 'common response characteristics' - end - - context 'with tag' do - let(:tag) { Fabricate(:tag) } - - let!(:status_tag) { Fabricate(:status, account: account) } - - before do - allow(controller).to receive(:tag_requested?).and_return(true) - status_tag.tags << tag - get :show, params: { username: account.username, format: format, tag: tag.to_param } - end - - it_behaves_like 'common response characteristics' + it_behaves_like 'unapproved account check' + it_behaves_like 'permanently suspended account check' + it_behaves_like 'temporarily suspended account check' end end - context 'with JSON' do - let(:authorized_fetch_mode) { false } - let(:format) { 'json' } + context 'with existing statuses' do + let!(:status) { Fabricate(:status, account: account) } + let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } + let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } + let!(:status_media) { Fabricate(:status, account: account) } + let!(:status_pinned) { Fabricate(:status, account: account) } + let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } + let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } + let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } before do - allow(controller).to receive(:authorized_fetch_mode?).and_return(authorized_fetch_mode) + status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) + account.pinned_statuses << status_pinned + account.pinned_statuses << status_private end - it_behaves_like 'preliminary checks' + context 'with HTML' do + let(:format) { 'html' } - 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 + shared_examples 'common HTML response' do + it 'returns a standard HTML response', :aggregate_failures do + expect(response).to have_http_status(200) - it 'returns http success' do - get :show, params: { username: account.username, format: format } - expect(response).to have_http_status(200) - end - end + expect(response.headers['Link'].to_s).to include ActivityPub::TagManager.instance.uri_for(account) - context 'with a normal account in a JSON request' do - before do - get :show, params: { username: account.username, format: format } + expect(response).to render_template(:show) + end end - it 'returns http success' do - expect(response).to have_http_status(200) - end + context 'with a normal account in an HTML request' do + before do + get :show, params: { username: account.username, format: format } + end - it 'returns application/activity+json' do - expect(response.media_type).to eq 'application/activity+json' + it_behaves_like 'common HTML response' end - it_behaves_like 'cacheable response' + context 'with replies' do + before do + allow(controller).to receive(:replies_requested?).and_return(true) + get :show, params: { username: account.username, format: format } + end - it 'renders account' do - json = body_as_json - expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) + it_behaves_like 'common HTML response' end - context 'with authorized fetch mode' do - let(:authorized_fetch_mode) { true } - - it 'returns http unauthorized' do - expect(response).to have_http_status(401) + context 'with media' do + before do + allow(controller).to receive(:media_requested?).and_return(true) + get :show, params: { username: account.username, format: format } end - end - end - - context 'when signed in' do - let(:user) { Fabricate(:user) } - before do - sign_in(user) - get :show, params: { username: account.username, format: format } + it_behaves_like 'common HTML response' end - it 'returns http success' do - expect(response).to have_http_status(200) - end + context 'with tag' do + let(:tag) { Fabricate(:tag) } - it 'returns application/activity+json' do - expect(response.media_type).to eq 'application/activity+json' - end + let!(:status_tag) { Fabricate(:status, account: account) } - it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'private' - end + before do + allow(controller).to receive(:tag_requested?).and_return(true) + status_tag.tags << tag + get :show, params: { username: account.username, format: format, tag: tag.to_param } + end - it 'renders account' do - json = body_as_json - expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) + it_behaves_like 'common HTML response' end end - context 'with signature' do - let(:remote_account) { Fabricate(:account, domain: 'example.com') } + context 'with JSON' do + let(:authorized_fetch_mode) { false } + let(:format) { 'json' } before do - allow(controller).to receive(:signed_request_actor).and_return(remote_account) - get :show, params: { username: account.username, format: format } - end - - it 'returns http success' do - expect(response).to have_http_status(200) + allow(controller).to receive(:authorized_fetch_mode?).and_return(authorized_fetch_mode) end - it 'returns application/activity+json' do - expect(response.media_type).to eq 'application/activity+json' - end - - it_behaves_like 'cacheable response' - - it 'renders account' do - json = body_as_json - expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) - end - - context 'with authorized fetch mode' do - let(:authorized_fetch_mode) { true } + context 'with a normal account in a JSON request' do + before do + get :show, params: { username: account.username, format: format } + end - it 'returns http success' do + it 'returns a JSON version of the account', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns application/activity+json' do expect(response.media_type).to eq 'application/activity+json' - end - it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'private' + expect(body_as_json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) end - it 'returns Vary header with Signature' do - expect(response.headers['Vary']).to include 'Signature' - end - - it 'renders account' do - json = body_as_json - expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) - end - end - end - end + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' - context 'with RSS' do - let(:format) { 'rss' } + context 'with authorized fetch mode' do + let(:authorized_fetch_mode) { true } - 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) + it 'returns http unauthorized' do + expect(response).to have_http_status(401) + end + end end - it_behaves_like 'cacheable response' - end + context 'when signed in' do + let(:user) { Fabricate(:user) } - context 'with a normal account in an RSS request' do - before do - get :show, params: { username: account.username, format: format } - end - - it_behaves_like 'common response characteristics' + before do + sign_in(user) + get :show, params: { username: account.username, format: format } + end - it 'renders public status' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status)) - end + it 'returns a private JSON version of the account', :aggregate_failures do + expect(response).to have_http_status(200) - it 'renders self-reply' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_self_reply)) - end + expect(response.media_type).to eq 'application/activity+json' - it 'renders status with media' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_media)) - end + expect(response.headers['Cache-Control']).to include 'private' - it 'does not render reblog' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reblog.reblog)) + expect(body_as_json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) + end end - it 'does not render private status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_private)) - end + context 'with signature' do + let(:remote_account) { Fabricate(:account, domain: 'example.com') } - it 'does not render direct status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_direct)) - end + before do + allow(controller).to receive(:signed_request_actor).and_return(remote_account) + get :show, params: { username: account.username, format: format } + end - it 'does not render reply to someone else' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reply)) - end - end + it 'returns a JSON version of the account', :aggregate_failures do + expect(response).to have_http_status(200) - context 'with replies' do - before do - allow(controller).to receive(:replies_requested?).and_return(true) - get :show, params: { username: account.username, format: format } - end + expect(response.media_type).to eq 'application/activity+json' - it_behaves_like 'common response characteristics' + expect(body_as_json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) + end - it 'renders public status' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status)) - end + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' - it 'renders self-reply' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_self_reply)) - end + context 'with authorized fetch mode' do + let(:authorized_fetch_mode) { true } - it 'renders status with media' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_media)) - end + it 'returns a private signature JSON version of the account', :aggregate_failures do + expect(response).to have_http_status(200) - it 'does not render reblog' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reblog.reblog)) - end + expect(response.media_type).to eq 'application/activity+json' - it 'does not render private status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_private)) - end + expect(response.headers['Cache-Control']).to include 'private' - it 'does not render direct status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_direct)) - end + expect(response.headers['Vary']).to include 'Signature' - it 'renders reply to someone else' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_reply)) + expect(body_as_json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary) + end + end end end - context 'with media' do - before do - allow(controller).to receive(:media_requested?).and_return(true) - get :show, params: { username: account.username, format: format } - end - - it_behaves_like 'common response characteristics' + context 'with RSS' do + let(:format) { 'rss' } - it 'does not render public status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status)) - end - - it 'does not render self-reply' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_self_reply)) - end + shared_examples 'common RSS response' do + it 'returns http success' do + expect(response).to have_http_status(200) + end - it 'renders status with media' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_media)) + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' end - it 'does not render reblog' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reblog.reblog)) - end + context 'with a normal account in an RSS request' do + before do + get :show, params: { username: account.username, format: format } + end - it 'does not render private status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_private)) - end + it_behaves_like 'common RSS response' - it 'does not render direct status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_direct)) - end - - it 'does not render reply to someone else' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reply)) + it 'responds with correct statuses', :aggregate_failures do + expect(response.body).to include_status_tag(status_media) + expect(response.body).to include_status_tag(status_self_reply) + expect(response.body).to include_status_tag(status) + expect(response.body).to_not include_status_tag(status_direct) + expect(response.body).to_not include_status_tag(status_private) + expect(response.body).to_not include_status_tag(status_reblog.reblog) + expect(response.body).to_not include_status_tag(status_reply) + end end - end - - context 'with tag' do - let(:tag) { Fabricate(:tag) } - - let!(:status_tag) { Fabricate(:status, account: account) } - before do - allow(controller).to receive(:tag_requested?).and_return(true) - status_tag.tags << tag - get :show, params: { username: account.username, format: format, tag: tag.to_param } - end + context 'with replies' do + before do + allow(controller).to receive(:replies_requested?).and_return(true) + get :show, params: { username: account.username, format: format } + end - it_behaves_like 'common response characteristics' + it_behaves_like 'common RSS response' - it 'does not render public status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status)) + it 'responds with correct statuses with replies', :aggregate_failures do + expect(response.body).to include_status_tag(status_media) + expect(response.body).to include_status_tag(status_reply) + expect(response.body).to include_status_tag(status_self_reply) + expect(response.body).to include_status_tag(status) + expect(response.body).to_not include_status_tag(status_direct) + expect(response.body).to_not include_status_tag(status_private) + expect(response.body).to_not include_status_tag(status_reblog.reblog) + end end - it 'does not render self-reply' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_self_reply)) - end + context 'with media' do + before do + allow(controller).to receive(:media_requested?).and_return(true) + get :show, params: { username: account.username, format: format } + end - it 'does not render status with media' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_media)) - end + it_behaves_like 'common RSS response' - it 'does not render reblog' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reblog.reblog)) + it 'responds with correct statuses with media', :aggregate_failures do + expect(response.body).to include_status_tag(status_media) + expect(response.body).to_not include_status_tag(status_direct) + expect(response.body).to_not include_status_tag(status_private) + expect(response.body).to_not include_status_tag(status_reblog.reblog) + expect(response.body).to_not include_status_tag(status_reply) + expect(response.body).to_not include_status_tag(status_self_reply) + expect(response.body).to_not include_status_tag(status) + end end - it 'does not render private status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_private)) - end + context 'with tag' do + let(:tag) { Fabricate(:tag) } - it 'does not render direct status' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_direct)) - end + let!(:status_tag) { Fabricate(:status, account: account) } - it 'does not render reply to someone else' do - expect(response.body).to_not include(ActivityPub::TagManager.instance.url_for(status_reply)) - end + before do + allow(controller).to receive(:tag_requested?).and_return(true) + status_tag.tags << tag + get :show, params: { username: account.username, format: format, tag: tag.to_param } + end - it 'renders status with tag' do - expect(response.body).to include(ActivityPub::TagManager.instance.url_for(status_tag)) + it_behaves_like 'common RSS response' + + it 'responds with correct statuses with a tag', :aggregate_failures do + expect(response.body).to include_status_tag(status_tag) + expect(response.body).to_not include_status_tag(status_direct) + expect(response.body).to_not include_status_tag(status_media) + expect(response.body).to_not include_status_tag(status_private) + expect(response.body).to_not include_status_tag(status_reblog.reblog) + expect(response.body).to_not include_status_tag(status_reply) + expect(response.body).to_not include_status_tag(status_self_reply) + expect(response.body).to_not include_status_tag(status) + end end end end end + + def include_status_tag(status) + include ActivityPub::TagManager.instance.url_for(status) + end end diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb index e2802cf565ba55..cf484ff5a43ad9 100644 --- a/spec/controllers/activitypub/collections_controller_spec.rb +++ b/spec/controllers/activitypub/collections_controller_spec.rb @@ -7,22 +7,6 @@ let!(:private_pinned) { Fabricate(:status, account: account, text: 'secret private stuff', visibility: :private) } let(:remote_account) { nil } - shared_examples 'cacheable response' do - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - response - expect(session).to be_empty - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end - end - before do allow(controller).to receive(:signed_request_actor).and_return(remote_account) diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index 6946fdfcffc721..53c4f0c09cca7c 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -5,22 +5,6 @@ RSpec.describe ActivityPub::OutboxesController do let!(:account) { Fabricate(:account) } - shared_examples 'cacheable response' do - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - response - expect(session).to be_empty - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end - end - before do Fabricate(:status, account: account, visibility: :public) Fabricate(:status, account: account, visibility: :unlisted) diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index c7b65f004deeb3..7e6e0ffb0d04a7 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -8,22 +8,6 @@ let(:remote_reply_id) { 'https://foobar.com/statuses/1234' } let(:remote_querier) { nil } - shared_examples 'cacheable response' do - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - response - expect(session).to be_empty - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end - end - shared_examples 'common behavior' do context 'when status is private' do let(:parent_visibility) { :private } diff --git a/spec/controllers/admin/disputes/appeals_controller_spec.rb b/spec/controllers/admin/disputes/appeals_controller_spec.rb index 3c3f23f5292b6a..4afe074921aa3a 100644 --- a/spec/controllers/admin/disputes/appeals_controller_spec.rb +++ b/spec/controllers/admin/disputes/appeals_controller_spec.rb @@ -15,6 +15,16 @@ let(:strike) { Fabricate(:account_warning, target_account: target_account, action: :suspend) } let(:appeal) { Fabricate(:appeal, strike: strike, account: target_account) } + describe 'GET #index' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'lists appeals' do + get :index + + expect(response).to have_http_status(200) + end + end + describe 'POST #approve' do let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } diff --git a/spec/controllers/admin/domain_blocks_controller_spec.rb b/spec/controllers/admin/domain_blocks_controller_spec.rb index 9be55906ed303f..13826be3665ad1 100644 --- a/spec/controllers/admin/domain_blocks_controller_spec.rb +++ b/spec/controllers/admin/domain_blocks_controller_spec.rb @@ -165,6 +165,17 @@ end end + describe 'GET #edit' do + let(:domain_block) { Fabricate(:domain_block) } + + it 'returns http success' do + get :edit, params: { id: domain_block.id } + + expect(assigns(:domain_block)).to be_instance_of(DomainBlock) + expect(response).to have_http_status(200) + end + end + describe 'PUT #update' do subject do post :update, params: { :id => domain_block.id, :domain_block => { domain: 'example.com', severity: new_severity }, 'confirm' => '' } diff --git a/spec/controllers/admin/export_domain_allows_controller_spec.rb b/spec/controllers/admin/export_domain_allows_controller_spec.rb index 9d50c04aad1d31..e1e5ecc1f0d463 100644 --- a/spec/controllers/admin/export_domain_allows_controller_spec.rb +++ b/spec/controllers/admin/export_domain_allows_controller_spec.rb @@ -9,6 +9,14 @@ sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user end + describe 'GET #new' do + it 'returns http success' do + get :new + + expect(response).to have_http_status(200) + end + end + describe 'GET #export' do it 'renders instances' do Fabricate(:domain_allow, domain: 'good.domain') diff --git a/spec/controllers/admin/export_domain_blocks_controller_spec.rb b/spec/controllers/admin/export_domain_blocks_controller_spec.rb index 1a630777364297..5a282c9572e678 100644 --- a/spec/controllers/admin/export_domain_blocks_controller_spec.rb +++ b/spec/controllers/admin/export_domain_blocks_controller_spec.rb @@ -9,6 +9,14 @@ sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user end + describe 'GET #new' do + it 'returns http success' do + get :new + + expect(response).to have_http_status(200) + end + end + describe 'GET #export' do it 'renders instances' do Fabricate(:domain_block, domain: 'bad.domain', severity: 'silence', public_comment: 'bad server') diff --git a/spec/controllers/admin/instances_controller_spec.rb b/spec/controllers/admin/instances_controller_spec.rb index dd772d10366b79..5fed5d98d2a43d 100644 --- a/spec/controllers/admin/instances_controller_spec.rb +++ b/spec/controllers/admin/instances_controller_spec.rb @@ -34,6 +34,63 @@ end end + describe 'GET #show' do + it 'shows an instance page' do + get :show, params: { id: account_popular_main.domain } + + expect(response).to have_http_status(200) + end + end + + describe 'POST #clear_delivery_errors' do + let(:tracker) { instance_double(DeliveryFailureTracker, clear_failures!: true) } + + before { allow(DeliveryFailureTracker).to receive(:new).and_return(tracker) } + + it 'clears instance delivery errors' do + post :clear_delivery_errors, params: { id: account_popular_main.domain } + + expect(response).to redirect_to(admin_instance_path(account_popular_main.domain)) + expect(tracker).to have_received(:clear_failures!) + end + end + + describe 'POST #restart_delivery' do + let(:tracker) { instance_double(DeliveryFailureTracker, track_success!: true) } + + before { allow(DeliveryFailureTracker).to receive(:new).and_return(tracker) } + + context 'with an unavailable instance' do + before { Fabricate(:unavailable_domain, domain: account_popular_main.domain) } + + it 'tracks success on the instance' do + post :restart_delivery, params: { id: account_popular_main.domain } + + expect(response).to redirect_to(admin_instance_path(account_popular_main.domain)) + expect(tracker).to have_received(:track_success!) + end + end + + context 'with an available instance' do + it 'does not track success on the instance' do + post :restart_delivery, params: { id: account_popular_main.domain } + + expect(response).to redirect_to(admin_instance_path(account_popular_main.domain)) + expect(tracker).to_not have_received(:track_success!) + end + end + end + + describe 'POST #stop_delivery' do + it 'clears instance delivery errors' do + expect do + post :stop_delivery, params: { id: account_popular_main.domain } + end.to change(UnavailableDomain, :count).by(1) + + expect(response).to redirect_to(admin_instance_path(account_popular_main.domain)) + end + end + describe 'DELETE #destroy' do subject { delete :destroy, params: { id: Instance.first.id } } diff --git a/spec/controllers/admin/settings/about_controller_spec.rb b/spec/controllers/admin/settings/about_controller_spec.rb index 2ae26090b60041..f322cb44346b01 100644 --- a/spec/controllers/admin/settings/about_controller_spec.rb +++ b/spec/controllers/admin/settings/about_controller_spec.rb @@ -18,4 +18,12 @@ expect(response).to have_http_status(:success) end end + + describe 'PUT #update' do + it 'updates the settings' do + put :update, params: { form_admin_settings: { site_extended_description: 'new site description' } } + + expect(response).to redirect_to(admin_settings_about_path) + end + end end diff --git a/spec/controllers/admin/settings/appearance_controller_spec.rb b/spec/controllers/admin/settings/appearance_controller_spec.rb index 65b29acc3e11f1..ea6f3b7833a834 100644 --- a/spec/controllers/admin/settings/appearance_controller_spec.rb +++ b/spec/controllers/admin/settings/appearance_controller_spec.rb @@ -18,4 +18,12 @@ expect(response).to have_http_status(:success) end end + + describe 'PUT #update' do + it 'updates the settings' do + put :update, params: { form_admin_settings: { custom_css: 'html { display: inline; }' } } + + expect(response).to redirect_to(admin_settings_appearance_path) + end + end end diff --git a/spec/controllers/admin/settings/content_retention_controller_spec.rb b/spec/controllers/admin/settings/content_retention_controller_spec.rb index 53ce84d1893e05..fb6a3d28484dc2 100644 --- a/spec/controllers/admin/settings/content_retention_controller_spec.rb +++ b/spec/controllers/admin/settings/content_retention_controller_spec.rb @@ -18,4 +18,12 @@ expect(response).to have_http_status(:success) end end + + describe 'PUT #update' do + it 'updates the settings' do + put :update, params: { form_admin_settings: { media_cache_retention_period: '2' } } + + expect(response).to redirect_to(admin_settings_content_retention_path) + end + end end diff --git a/spec/controllers/admin/settings/discovery_controller_spec.rb b/spec/controllers/admin/settings/discovery_controller_spec.rb index c7307ffc880382..33109e3c014ef5 100644 --- a/spec/controllers/admin/settings/discovery_controller_spec.rb +++ b/spec/controllers/admin/settings/discovery_controller_spec.rb @@ -18,4 +18,12 @@ expect(response).to have_http_status(:success) end end + + describe 'PUT #update' do + it 'updates the settings' do + put :update, params: { form_admin_settings: { trends: '1' } } + + expect(response).to redirect_to(admin_settings_discovery_path) + end + end end diff --git a/spec/controllers/admin/settings/registrations_controller_spec.rb b/spec/controllers/admin/settings/registrations_controller_spec.rb index 3fc1f9d13217e3..e0765446037de8 100644 --- a/spec/controllers/admin/settings/registrations_controller_spec.rb +++ b/spec/controllers/admin/settings/registrations_controller_spec.rb @@ -18,4 +18,12 @@ expect(response).to have_http_status(:success) end end + + describe 'PUT #update' do + it 'updates the settings' do + put :update, params: { form_admin_settings: { registrations_mode: 'open' } } + + expect(response).to redirect_to(admin_settings_registrations_path) + end + end end diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb index 313298f14a3216..4e06adaca6780d 100644 --- a/spec/controllers/admin/tags_controller_spec.rb +++ b/spec/controllers/admin/tags_controller_spec.rb @@ -20,4 +20,26 @@ expect(response).to have_http_status(200) end end + + describe 'PUT #update' do + let!(:tag) { Fabricate(:tag, listable: false) } + + context 'with valid params' do + it 'updates the tag' do + put :update, params: { id: tag.id, tag: { listable: '1' } } + + expect(response).to redirect_to(admin_tag_path(tag.id)) + expect(tag.reload).to be_listable + end + end + + context 'with invalid params' do + it 'does not update the tag' do + put :update, params: { id: tag.id, tag: { name: 'cant-change-name' } } + + expect(response).to have_http_status(200) + expect(response).to render_template(:show) + end + end + end end diff --git a/spec/controllers/admin/webhooks_controller_spec.rb b/spec/controllers/admin/webhooks_controller_spec.rb index 0ccfbbcc6e0450..17d85060256207 100644 --- a/spec/controllers/admin/webhooks_controller_spec.rb +++ b/spec/controllers/admin/webhooks_controller_spec.rb @@ -86,6 +86,24 @@ end end + describe 'POST #enable' do + it 'enables the webhook' do + post :enable, params: { id: webhook.id } + + expect(webhook.reload).to be_enabled + expect(response).to redirect_to(admin_webhook_path(webhook)) + end + end + + describe 'POST #disable' do + it 'disables the webhook' do + post :disable, params: { id: webhook.id } + + expect(webhook.reload).to_not be_enabled + expect(response).to redirect_to(admin_webhook_path(webhook)) + end + end + describe 'DELETE #destroy' do it 'destroys the record' do expect do diff --git a/spec/controllers/api/oembed_controller_spec.rb b/spec/controllers/api/oembed_controller_spec.rb index 70248c398217dd..5f0ca560d22864 100644 --- a/spec/controllers/api/oembed_controller_spec.rb +++ b/spec/controllers/api/oembed_controller_spec.rb @@ -14,11 +14,8 @@ get :show, params: { url: short_account_status_url(alice, status) }, format: :json end - it 'returns http success' do + it 'returns private cache control headers', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'returns private cache control headers' do expect(response.headers['Cache-Control']).to include('private, no-store') end end diff --git a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb b/spec/controllers/api/v1/accounts/credentials_controller_spec.rb index b5d5c37a9c79f9..a62fa54e60735e 100644 --- a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/credentials_controller_spec.rb @@ -41,11 +41,9 @@ } end - it 'returns http success' do + it 'updates account info', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'updates account info' do user.reload user.account.reload @@ -55,9 +53,7 @@ expect(user.account.header).to exist expect(user.setting_default_privacy).to eq('unlisted') expect(user.setting_default_sensitive).to be(true) - end - it 'queues up an account update distribution' do expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(user.account_id) end end diff --git a/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb b/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb index 7a387f326fb497..510a47566b371f 100644 --- a/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb @@ -18,23 +18,19 @@ end describe 'GET #index' do - it 'returns http success' do + it 'returns accounts following the given account', :aggregate_failures do get :index, params: { account_id: account.id, limit: 2 } expect(response).to have_http_status(200) - end - - it 'returns accounts following the given account' do - get :index, params: { account_id: account.id, limit: 2 } - expect(body_as_json.size).to eq 2 expect([body_as_json[0][:id], body_as_json[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) end - it 'does not return blocked users' do + it 'does not return blocked users', :aggregate_failures do user.account.block!(bob) get :index, params: { account_id: account.id, limit: 2 } + expect(response).to have_http_status(200) expect(body_as_json.size).to eq 1 expect(body_as_json[0][:id]).to eq alice.id.to_s end diff --git a/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb b/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb index b69b0bd395bd5c..a7d07a6bec9a01 100644 --- a/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb @@ -18,23 +18,19 @@ end describe 'GET #index' do - it 'returns http success' do + it 'returns accounts followed by the given account', :aggregate_failures do get :index, params: { account_id: account.id, limit: 2 } expect(response).to have_http_status(200) - end - - it 'returns accounts followed by the given account' do - get :index, params: { account_id: account.id, limit: 2 } - expect(body_as_json.size).to eq 2 expect([body_as_json[0][:id], body_as_json[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) end - it 'does not return blocked users' do + it 'does not return blocked users', :aggregate_failures do user.account.block!(bob) get :index, params: { account_id: account.id, limit: 2 } + expect(response).to have_http_status(200) expect(body_as_json.size).to eq 1 expect(body_as_json[0][:id]).to eq alice.id.to_s end diff --git a/spec/controllers/api/v1/accounts/notes_controller_spec.rb b/spec/controllers/api/v1/accounts/notes_controller_spec.rb index 4107105afd70bd..75599b32b2a069 100644 --- a/spec/controllers/api/v1/accounts/notes_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/notes_controller_spec.rb @@ -19,30 +19,24 @@ post :create, params: { account_id: account.id, comment: comment } end - context 'when account note has reasonable length' do + context 'when account note has reasonable length', :aggregate_failures do let(:comment) { 'foo' } - it 'returns http success' do - subject - expect(response).to have_http_status(200) - end - it 'updates account note' do subject + + expect(response).to have_http_status(200) expect(AccountNote.find_by(account_id: user.account.id, target_account_id: account.id).comment).to eq comment end end - context 'when account note exceeds allowed length' do + context 'when account note exceeds allowed length', :aggregate_failures do let(:comment) { 'a' * 2_001 } - it 'returns 422' do - subject - expect(response).to have_http_status(422) - end - it 'does not create account note' do subject + + expect(response).to have_http_status(422) expect(AccountNote.where(account_id: user.account.id, target_account_id: account.id)).to_not exist end end diff --git a/spec/controllers/api/v1/accounts/pins_controller_spec.rb b/spec/controllers/api/v1/accounts/pins_controller_spec.rb index b4aa9b7116edac..36f525e756bfe1 100644 --- a/spec/controllers/api/v1/accounts/pins_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/pins_controller_spec.rb @@ -15,14 +15,11 @@ describe 'POST #create' do subject { post :create, params: { account_id: kevin.account.id } } - it 'returns 200' do - expect(response).to have_http_status(200) - end - - it 'creates account_pin' do + it 'creates account_pin', :aggregate_failures do expect do subject end.to change { AccountPin.where(account: john.account, target_account: kevin.account).count }.by(1) + expect(response).to have_http_status(200) end end @@ -33,14 +30,11 @@ Fabricate(:account_pin, account: john.account, target_account: kevin.account) end - it 'returns 200' do - expect(response).to have_http_status(200) - end - - it 'destroys account_pin' do + it 'destroys account_pin', :aggregate_failures do expect do subject end.to change { AccountPin.where(account: john.account, target_account: kevin.account).count }.by(-1) + expect(response).to have_http_status(200) end end end diff --git a/spec/controllers/api/v1/accounts/relationships_controller_spec.rb b/spec/controllers/api/v1/accounts/relationships_controller_spec.rb index 993ead636a99bc..5ba6f2a1f8de99 100644 --- a/spec/controllers/api/v1/accounts/relationships_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/relationships_controller_spec.rb @@ -26,13 +26,10 @@ get :index, params: { id: simon.id } end - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'returns JSON with correct data' do + it 'returns JSON with correct data', :aggregate_failures do json = body_as_json + expect(response).to have_http_status(200) expect(json).to be_a Enumerable expect(json.first[:following]).to be true expect(json.first[:followed_by]).to be false @@ -51,11 +48,14 @@ context 'when there is returned JSON data' do let(:json) { body_as_json } - it 'returns an enumerable json' do + it 'returns an enumerable json with correct elements', :aggregate_failures do expect(json).to be_a Enumerable + + expect_simon_item_one + expect_lewis_item_two end - it 'returns a correct first element' do + def expect_simon_item_one expect(json.first[:id]).to eq simon.id.to_s expect(json.first[:following]).to be true expect(json.first[:showing_reblogs]).to be true @@ -65,7 +65,7 @@ expect(json.first[:domain_blocking]).to be false end - it 'returns a correct second element' do + def expect_lewis_item_two expect(json.second[:id]).to eq lewis.id.to_s expect(json.second[:following]).to be false expect(json.second[:showing_reblogs]).to be false diff --git a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb b/spec/controllers/api/v1/accounts/statuses_controller_spec.rb index cb62afcf936813..0e4fa930177c07 100644 --- a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/statuses_controller_spec.rb @@ -14,15 +14,10 @@ end describe 'GET #index' do - it 'returns http success' do + it 'returns expected headers', :aggregate_failures do get :index, params: { account_id: user.account.id, limit: 1 } expect(response).to have_http_status(200) - end - - it 'returns expected headers' do - get :index, params: { account_id: user.account.id, limit: 1 } - expect(response.headers['Link'].links.size).to eq(2) end @@ -44,14 +39,11 @@ get :index, params: { account_id: user.account.id, exclude_replies: true } end - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'returns posts along with self replies' do + it 'returns posts along with self replies', :aggregate_failures do json = body_as_json post_ids = json.map { |item| item[:id].to_i }.sort + expect(response).to have_http_status(200) expect(post_ids).to eq [status.id, status_self_reply.id] end end diff --git a/spec/controllers/api/v1/accounts_controller_spec.rb b/spec/controllers/api/v1/accounts_controller_spec.rb index 985e2b947b1cb1..0d9b4c8cc20f79 100644 --- a/spec/controllers/api/v1/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts_controller_spec.rb @@ -25,15 +25,10 @@ context 'when given truthy agreement' do let(:agreement) { 'true' } - it 'returns http success' do + it 'creates a user', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'returns a new access token as JSON' do expect(body_as_json[:access_token]).to_not be_blank - end - it 'creates a user' do user = User.find_by(email: 'hello@world.tld') expect(user).to_not be_nil expect(user.created_by_application_id).to eq app.id @@ -65,18 +60,14 @@ context 'with unlocked account' do let(:locked) { false } - it 'returns http success' do + it 'creates a following relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns JSON with following=true and requested=false' do json = body_as_json expect(json[:following]).to be true expect(json[:requested]).to be false - end - it 'creates a following relation between user and target user' do expect(user.account.following?(other_account)).to be true end @@ -86,18 +77,14 @@ context 'with locked account' do let(:locked) { true } - it 'returns http success' do + it 'creates a follow request relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns JSON with following=false and requested=true' do json = body_as_json expect(json[:following]).to be false expect(json[:requested]).to be true - end - it 'creates a follow request relation between user and target user' do expect(user.account.requested?(other_account)).to be true end @@ -177,11 +164,8 @@ post :unfollow, params: { id: other_account.id } end - it 'returns http success' do + it 'removes the following relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the following relation between user and target user' do expect(user.account.following?(other_account)).to be false end @@ -197,11 +181,8 @@ post :remove_from_followers, params: { id: other_account.id } end - it 'returns http success' do + it 'removes the followed relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the followed relation between user and target user' do expect(user.account.followed_by?(other_account)).to be false end @@ -217,15 +198,9 @@ post :block, params: { id: other_account.id } end - it 'returns http success' do + it 'creates a blocking relation', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the following relation between user and target user' do expect(user.account.following?(other_account)).to be false - end - - it 'creates a blocking relation' do expect(user.account.blocking?(other_account)).to be true end @@ -241,11 +216,8 @@ post :unblock, params: { id: other_account.id } end - it 'returns http success' do + it 'removes the blocking relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the blocking relation between user and target user' do expect(user.account.blocking?(other_account)).to be false end @@ -261,19 +233,10 @@ post :mute, params: { id: other_account.id } end - it 'returns http success' do + it 'mutes notifications', :aggregate_failures 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 @@ -289,19 +252,10 @@ post :mute, params: { id: other_account.id, notifications: false } end - it 'returns http success' do + it 'does not mute notifications', :aggregate_failures 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 'does not mute notifications' do expect(user.account.muting_notifications?(other_account)).to be false end @@ -317,19 +271,10 @@ post :mute, params: { id: other_account.id, duration: 300 } end - it 'returns http success' do + it 'mutes notifications', :aggregate_failures 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 @@ -345,11 +290,8 @@ post :unmute, params: { id: other_account.id } end - it 'returns http success' do + it 'removes the muting relation between user and target user', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the muting relation between user and target user' do expect(user.account.muting?(other_account)).to be false end diff --git a/spec/controllers/api/v1/admin/accounts_controller_spec.rb b/spec/controllers/api/v1/admin/accounts_controller_spec.rb deleted file mode 100644 index 36f6e398cbe09a..00000000000000 --- a/spec/controllers/api/v1/admin/accounts_controller_spec.rb +++ /dev/null @@ -1,198 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::Admin::AccountsController do - render_views - - let(:role) { UserRole.find_by(name: 'Moderator') } - let(:user) { Fabricate(:user, role: role) } - let(:scopes) { 'admin:read admin:write' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:account) { Fabricate(:account) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do - let!(:remote_account) { Fabricate(:account, domain: 'example.org') } - let!(:other_remote_account) { Fabricate(:account, domain: 'foo.bar') } - let!(:suspended_account) { Fabricate(:account, suspended: true) } - let!(:suspended_remote) { Fabricate(:account, domain: 'foo.bar', suspended: true) } - let!(:disabled_account) { Fabricate(:user, disabled: true).account } - let!(:pending_account) { Fabricate(:user, approved: false).account } - let!(:admin_account) { user.account } - - let(:params) { {} } - - before do - pending_account.user.update(approved: false) - get :index, params: params - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - [ - [{ active: 'true', local: 'true', staff: 'true' }, [:admin_account]], - [{ by_domain: 'example.org', remote: 'true' }, [:remote_account]], - [{ suspended: 'true' }, [:suspended_account]], - [{ disabled: 'true' }, [:disabled_account]], - [{ pending: 'true' }, [:pending_account]], - ].each do |params, expected_results| - context "when called with #{params.inspect}" do - let(:params) { params } - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it "returns the correct accounts (#{expected_results.inspect})" do - json = body_as_json - - expect(json.map { |a| a[:id].to_i }).to eq(expected_results.map { |symbol| send(symbol).id }) - end - end - end - end - - describe 'GET #show' do - before do - get :show, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - - describe 'POST #approve' do - before do - account.user.update(approved: false) - post :approve, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'approves user' do - expect(account.reload.user_approved?).to be true - end - - it 'logs action' do - log_item = Admin::ActionLog.last - - expect(log_item).to_not be_nil - expect(log_item.action).to eq :approve - expect(log_item.account_id).to eq user.account_id - expect(log_item.target_id).to eq account.user.id - end - end - - describe 'POST #reject' do - before do - account.user.update(approved: false) - post :reject, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'removes user' do - expect(User.where(id: account.user.id).count).to eq 0 - end - - it 'logs action' do - log_item = Admin::ActionLog.last - - expect(log_item).to_not be_nil - expect(log_item.action).to eq :reject - expect(log_item.account_id).to eq user.account_id - expect(log_item.target_id).to eq account.user.id - end - end - - describe 'POST #enable' do - before do - account.user.update(disabled: true) - post :enable, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'enables user' do - expect(account.reload.user_disabled?).to be false - end - end - - describe 'POST #unsuspend' do - before do - account.suspend! - post :unsuspend, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'unsuspends account' do - expect(account.reload.suspended?).to be false - 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', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'unsensitizes account' do - expect(account.reload.sensitized?).to be false - end - end - - describe 'POST #unsilence' do - before do - account.touch(:silenced_at) - post :unsilence, params: { id: account.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'unsilences account' do - expect(account.reload.silenced?).to be false - end - end -end diff --git a/spec/controllers/api/v1/admin/trends/links_controller_spec.rb b/spec/controllers/api/v1/admin/trends/links_controller_spec.rb deleted file mode 100644 index d9aa06824db344..00000000000000 --- a/spec/controllers/api/v1/admin/trends/links_controller_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Admin::Trends::LinksController do - render_views - - let(:role) { UserRole.find_by(name: 'Admin') } - let(:user) { Fabricate(:user, role: role) } - let(:scopes) { 'admin:read admin:write' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:account) { Fabricate(:account) } - let(:preview_card) { Fabricate(:preview_card) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do - it 'returns http success' do - get :index, params: { account_id: account.id, limit: 2 } - - expect(response).to have_http_status(200) - end - end - - describe 'POST #approve' do - before do - post :approve, params: { id: preview_card.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - - describe 'POST #reject' do - before do - post :reject, params: { id: preview_card.id } - end - - it_behaves_like 'forbidden for wrong scope', 'write:statuses' - it_behaves_like 'forbidden for wrong role', '' - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb b/spec/controllers/api/v1/announcements/reactions_controller_spec.rb index 10aaa553f5a3ac..c1debc33fe22cc 100644 --- a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb +++ b/spec/controllers/api/v1/announcements/reactions_controller_spec.rb @@ -25,11 +25,8 @@ put :update, params: { announcement_id: announcement.id, id: '😂' } end - it 'returns http success' do + it 'creates reaction', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates reaction' do expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to_not be_nil end end @@ -53,11 +50,8 @@ delete :destroy, params: { announcement_id: announcement.id, id: '😂' } end - it 'returns http success' do + it 'creates reaction', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates reaction' do expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to be_nil end end diff --git a/spec/controllers/api/v1/announcements_controller_spec.rb b/spec/controllers/api/v1/announcements_controller_spec.rb index 15d94b45120906..95ce8fd9fc1b01 100644 --- a/spec/controllers/api/v1/announcements_controller_spec.rb +++ b/spec/controllers/api/v1/announcements_controller_spec.rb @@ -47,11 +47,8 @@ post :dismiss, params: { id: announcement.id } end - it 'returns http success' do + it 'dismisses announcement', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'dismisses announcement' do expect(announcement.announcement_mutes.find_by(account: user.account)).to_not be_nil end end diff --git a/spec/controllers/api/v1/blocks_controller_spec.rb b/spec/controllers/api/v1/blocks_controller_spec.rb deleted file mode 100644 index eaafc1b4fa0eb4..00000000000000 --- a/spec/controllers/api/v1/blocks_controller_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::BlocksController do - render_views - - let(:user) { Fabricate(:user) } - let(:scopes) { 'read:blocks' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before { allow(controller).to receive(:doorkeeper_token) { token } } - - describe 'GET #index' do - it 'limits according to limit parameter' do - Array.new(2) { Fabricate(:block, account: user.account) } - get :index, params: { limit: 1 } - expect(body_as_json.size).to eq 1 - end - - it 'queries blocks in range according to max_id' do - blocks = Array.new(2) { Fabricate(:block, account: user.account) } - - get :index, params: { max_id: blocks[1] } - - expect(body_as_json.size).to eq 1 - expect(body_as_json[0][:id]).to eq blocks[0].target_account_id.to_s - end - - it 'queries blocks in range according to since_id' do - blocks = Array.new(2) { Fabricate(:block, account: user.account) } - - get :index, params: { since_id: blocks[0] } - - expect(body_as_json.size).to eq 1 - expect(body_as_json[0][:id]).to eq blocks[1].target_account_id.to_s - end - - it 'sets pagination header for next path' do - blocks = Array.new(2) { Fabricate(:block, account: user.account) } - get :index, params: { limit: 1, since_id: blocks[0] } - expect(response.headers['Link'].find_link(%w(rel next)).href).to eq api_v1_blocks_url(limit: 1, max_id: blocks[1]) - end - - it 'sets pagination header for previous path' do - block = Fabricate(:block, account: user.account) - get :index - expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq api_v1_blocks_url(since_id: block) - end - - it 'returns http success' do - get :index - expect(response).to have_http_status(200) - end - - context 'with wrong scopes' do - let(:scopes) { 'write:blocks' } - - it 'returns http forbidden' do - get :index - expect(response).to have_http_status(403) - end - end - end -end diff --git a/spec/controllers/api/v1/circles/accounts_controller_spec.rb b/spec/controllers/api/v1/circles/accounts_controller_spec.rb deleted file mode 100644 index bddd8aa2115cfb..00000000000000 --- a/spec/controllers/api/v1/circles/accounts_controller_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Circles::AccountsController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:circle) { Fabricate(:circle, account: user.account) } - let(:follow) { Fabricate(:follow, target_account: user.account) } - - before do - circle.accounts << follow.account - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do - let(:scopes) { 'read:lists' } - - it 'returns http success' do - get :show, params: { circle_id: circle.id } - - expect(response).to have_http_status(200) - end - end - - describe 'POST #create' do - let(:scopes) { 'write:lists' } - let(:bob) { Fabricate(:account, username: 'bob') } - - context 'when the added account is followed' do - before do - bob.follow!(user.account) - post :create, params: { circle_id: circle.id, account_ids: [bob.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'adds account to the circle' do - expect(circle.accounts.include?(bob)).to be true - end - end - - context 'when the added account has been sent a follow request' do - before do - bob.follow_requests.create!(target_account: user.account) - post :create, params: { circle_id: circle.id, account_ids: [bob.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(404) - end - - it 'adds account to the circle' do - expect(circle.accounts.include?(bob)).to be false - end - end - - context 'when the added account is not followed' do - before do - post :create, params: { circle_id: circle.id, account_ids: [bob.id] } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - - it 'does not add the account to the circle' do - expect(circle.accounts.include?(bob)).to be false - end - end - end - - describe 'DELETE #destroy' do - let(:scopes) { 'write:lists' } - - before do - delete :destroy, params: { circle_id: circle.id, account_ids: [circle.accounts.first.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'removes account from the circle' do - expect(circle.accounts.count).to eq 0 - end - end -end diff --git a/spec/controllers/api/v1/circles_controller_spec.rb b/spec/controllers/api/v1/circles_controller_spec.rb deleted file mode 100644 index 1e54a8af9684db..00000000000000 --- a/spec/controllers/api/v1/circles_controller_spec.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::CirclesController do - render_views - - let(:user) { Fabricate(:user) } - let(:circle) { Fabricate(:circle, account: user.account) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - context 'with a user context' do - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:lists') } - - describe 'GET #show' do - it 'returns http success' do - get :show, params: { id: circle.id } - expect(response).to have_http_status(200) - end - end - - describe 'GET #index' do - it 'returns http success' do - circle_id = circle.id.to_s - Fabricate(:circle) - get :index - expect(response).to have_http_status(200) - - circle_ids = body_as_json.pluck(:id) - expect(circle_ids.size).to eq 1 - expect(circle_ids).to include circle_id - end - end - end - - context 'with the wrong user context' do - let(:other_user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: other_user.id, scopes: 'read') } - - describe 'GET #show' do - it 'returns http not found' do - get :show, params: { id: circle.id } - expect(response).to have_http_status(404) - end - end - end - - context 'without a user context' do - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: nil, scopes: 'read') } - - describe 'GET #show' do - it 'returns http unprocessable entity' do - get :show, params: { id: circle.id } - - expect(response).to have_http_status(422) - expect(response.headers['Link']).to be_nil - end - end - end -end diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/controllers/api/v1/conversations_controller_spec.rb index 28d7c7f3ae8f71..50e2a62efd82c3 100644 --- a/spec/controllers/api/v1/conversations_controller_spec.rb +++ b/spec/controllers/api/v1/conversations_controller_spec.rb @@ -21,17 +21,14 @@ PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') end - it 'returns http success' do - get :index - expect(response).to have_http_status(200) - end - - it 'returns pagination headers' do + it 'returns pagination headers', :aggregate_failures do get :index, params: { limit: 1 } + + expect(response).to have_http_status(200) expect(response.headers['Link'].links.size).to eq(2) end - it 'returns conversations' do + it 'returns conversations', :aggregate_failures do get :index json = body_as_json expect(json.size).to eq 2 diff --git a/spec/controllers/api/v1/favourites_controller_spec.rb b/spec/controllers/api/v1/favourites_controller_spec.rb deleted file mode 100644 index c9ca046be0d598..00000000000000 --- a/spec/controllers/api/v1/favourites_controller_spec.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::FavouritesController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } - - describe 'GET #index' do - context 'without token' do - it 'returns http unauthorized' do - get :index - expect(response).to have_http_status 401 - end - end - - context 'with token' do - context 'without read scope' do - before do - allow(controller).to receive(:doorkeeper_token) do - Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: '') - end - end - - it 'returns http forbidden' do - get :index - expect(response).to have_http_status 403 - end - end - - context 'without valid resource owner' do - before do - token = Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') - user.destroy! - - allow(controller).to receive(:doorkeeper_token) { token } - end - - it 'returns http unprocessable entity' do - get :index - expect(response).to have_http_status 422 - end - end - - context 'with read scope and valid resource owner' do - before do - allow(controller).to receive(:doorkeeper_token) do - Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:favourites') - end - end - - it 'shows favourites owned by the user' do - favourite_by_user = Fabricate(:favourite, account: user.account) - favourite_by_others = Fabricate(:favourite) - - get :index - - expect(assigns(:statuses)).to contain_exactly(favourite_by_user.status) - end - - it 'adds pagination headers if necessary' do - favourite = Fabricate(:favourite, account: user.account) - - get :index, params: { limit: 1 } - - expect(response.headers['Link'].find_link(%w(rel next)).href).to eq "http://test.host/api/v1/favourites?limit=1&max_id=#{favourite.id}" - expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq "http://test.host/api/v1/favourites?limit=1&min_id=#{favourite.id}" - end - - it 'does not add pagination headers if not necessary' do - get :index - - expect(response.headers['Link']).to be_nil - end - end - end - end -end diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/controllers/api/v1/filters_controller_spec.rb index 8ccd2f4d6667b4..8d5408cf548c0a 100644 --- a/spec/controllers/api/v1/filters_controller_spec.rb +++ b/spec/controllers/api/v1/filters_controller_spec.rb @@ -31,12 +31,10 @@ post :create, params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word } end - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'creates a filter' do + it 'creates a filter', :aggregate_failures do filter = user.account.custom_filters.first + + expect(response).to have_http_status(200) expect(filter).to_not be_nil expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] expect(filter.context).to eq %w(home) @@ -48,12 +46,10 @@ let(:irreversible) { false } let(:whole_word) { true } - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'creates a filter' do + it 'creates a filter', :aggregate_failures do filter = user.account.custom_filters.first + + expect(response).to have_http_status(200) expect(filter).to_not be_nil expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] expect(filter.context).to eq %w(home) @@ -83,11 +79,8 @@ put :update, params: { id: keyword.id, phrase: 'updated' } end - it 'returns http success' do + it 'updates the filter', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'updates the filter' do expect(keyword.reload.phrase).to eq 'updated' end end @@ -101,11 +94,8 @@ delete :destroy, params: { id: keyword.id } end - it 'returns http success' do + it 'removes the filter', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the filter' do expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound end end diff --git a/spec/controllers/api/v1/followed_tags_controller_spec.rb b/spec/controllers/api/v1/followed_tags_controller_spec.rb deleted file mode 100644 index c1a366d4e372f4..00000000000000 --- a/spec/controllers/api/v1/followed_tags_controller_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::FollowedTagsController do - render_views - - let(:user) { Fabricate(:user) } - let(:scopes) { 'read:follows' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before { allow(controller).to receive(:doorkeeper_token) { token } } - - describe 'GET #index' do - let!(:tag_follows) { Fabricate.times(5, :tag_follow, account: user.account) } - - before do - get :index, params: { limit: 1 } - end - - it 'returns http success' do - expect(response).to have_http_status(:success) - end - end -end diff --git a/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb b/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb index 88bcc403416449..f79687df66b7ad 100644 --- a/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb +++ b/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb @@ -5,7 +5,7 @@ describe Api::V1::Instances::TranslationLanguagesController do describe 'GET #show' do context 'when no translation service is configured' do - it 'returns empty language matrix' do + it 'returns empty language matrix', :aggregate_failures do get :show expect(response).to have_http_status(200) @@ -19,7 +19,7 @@ allow(TranslationService).to receive_messages(configured?: true, configured: service) end - it 'returns language matrix' do + it 'returns language matrix', :aggregate_failures do get :show expect(response).to have_http_status(200) diff --git a/spec/controllers/api/v1/lists/accounts_controller_spec.rb b/spec/controllers/api/v1/lists/accounts_controller_spec.rb deleted file mode 100644 index d4550dd769c585..00000000000000 --- a/spec/controllers/api/v1/lists/accounts_controller_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Lists::AccountsController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:list) { Fabricate(:list, account: user.account) } - - before do - follow = Fabricate(:follow, account: user.account) - list.accounts << follow.target_account - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do - let(:scopes) { 'read:lists' } - - it 'returns http success' do - get :show, params: { list_id: list.id } - - expect(response).to have_http_status(200) - end - end - - describe 'POST #create' do - let(:scopes) { 'write:lists' } - let(:bob) { Fabricate(:account, username: 'bob') } - - context 'when the added account is followed' do - before do - user.account.follow!(bob) - post :create, params: { list_id: list.id, account_ids: [bob.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'adds account to the list' do - expect(list.accounts.include?(bob)).to be true - end - end - - context 'when the added account has been sent a follow request' do - before do - user.account.follow_requests.create!(target_account: bob) - post :create, params: { list_id: list.id, account_ids: [bob.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'adds account to the list' do - expect(list.accounts.include?(bob)).to be true - end - end - - context 'when the added account is not followed' do - before do - post :create, params: { list_id: list.id, account_ids: [bob.id] } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - - it 'does not add the account to the list' do - expect(list.accounts.include?(bob)).to be false - end - end - end - - describe 'DELETE #destroy' do - let(:scopes) { 'write:lists' } - - before do - delete :destroy, params: { list_id: list.id, account_ids: [list.accounts.first.id] } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'removes account from the list' do - expect(list.accounts.count).to eq 0 - end - end -end diff --git a/spec/controllers/api/v1/markers_controller_spec.rb b/spec/controllers/api/v1/markers_controller_spec.rb index 64e9dcafb6fa13..e954bbd1b6f30d 100644 --- a/spec/controllers/api/v1/markers_controller_spec.rb +++ b/spec/controllers/api/v1/markers_controller_spec.rb @@ -18,13 +18,10 @@ get :index, params: { timeline: %w(home notifications) } end - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'returns markers' do + it 'returns markers', :aggregate_failures do json = body_as_json + expect(response).to have_http_status(200) expect(json.key?(:home)).to be true expect(json[:home][:last_read_id]).to eq '123' expect(json.key?(:notifications)).to be true @@ -38,11 +35,8 @@ post :create, params: { home: { last_read_id: '69420' } } end - it 'returns http success' do + it 'creates a marker', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates a marker' do expect(user.markers.first.timeline).to eq 'home' expect(user.markers.first.last_read_id).to eq 69_420 end @@ -54,11 +48,8 @@ post :create, params: { home: { last_read_id: '70120' } } end - it 'returns http success' do + it 'updates a marker', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'updates a marker' do expect(user.markers.first.timeline).to eq 'home' expect(user.markers.first.last_read_id).to eq 70_120 end diff --git a/spec/controllers/api/v1/media_controller_spec.rb b/spec/controllers/api/v1/media_controller_spec.rb index 94b2a0a98f8ee6..b574381f90c986 100644 --- a/spec/controllers/api/v1/media_controller_spec.rb +++ b/spec/controllers/api/v1/media_controller_spec.rb @@ -38,19 +38,10 @@ post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') } end - it 'returns http success' do + it 'creates a media attachment', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates a media attachment' do expect(MediaAttachment.first).to_not be_nil - end - - it 'uploads a file' do expect(MediaAttachment.first).to have_attached_file(:file) - end - - it 'returns media ID in JSON' do expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s end end @@ -60,19 +51,10 @@ post :create, params: { file: fixture_file_upload('attachment.gif', 'image/gif') } end - it 'returns http success' do + it 'creates a media attachment', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates a media attachment' do expect(MediaAttachment.first).to_not be_nil - end - - it 'uploads a file' do expect(MediaAttachment.first).to have_attached_file(:file) - end - - it 'returns media ID in JSON' do expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s end end @@ -82,17 +64,10 @@ post :create, params: { file: fixture_file_upload('attachment.webm', 'video/webm') } end - it do - # returns http success + it 'creates a media attachment', :aggregate_failures do expect(response).to have_http_status(200) - - # creates a media attachment expect(MediaAttachment.first).to_not be_nil - - # uploads a file expect(MediaAttachment.first).to have_attached_file(:file) - - # returns media ID in JSON expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s end end diff --git a/spec/controllers/api/v1/notifications_controller_spec.rb b/spec/controllers/api/v1/notifications_controller_spec.rb deleted file mode 100644 index 6615848b8322a4..00000000000000 --- a/spec/controllers/api/v1/notifications_controller_spec.rb +++ /dev/null @@ -1,137 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::NotificationsController do - render_views - - let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:other) { Fabricate(:user) } - let(:third) { Fabricate(:user) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do - let(:scopes) { 'read:notifications' } - - it 'returns http success' do - notification = Fabricate(:notification, account: user.account) - get :show, params: { id: notification.id } - - expect(response).to have_http_status(200) - end - end - - describe 'POST #dismiss' do - let(:scopes) { 'write:notifications' } - - it 'destroys the notification' do - notification = Fabricate(:notification, account: user.account) - post :dismiss, params: { id: notification.id } - - expect(response).to have_http_status(200) - expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - end - - describe 'POST #clear' do - let(:scopes) { 'write:notifications' } - - it 'clears notifications for the account' do - notification = Fabricate(:notification, account: user.account) - post :clear - - expect(notification.account.reload.notifications).to be_empty - expect(response).to have_http_status(200) - end - end - - describe 'GET #index' do - let(:scopes) { 'read:notifications' } - - before do - first_status = PostStatusService.new.call(user.account, text: 'Test') - @reblog_of_first_status = ReblogService.new.call(other.account, first_status) - mentioning_status = PostStatusService.new.call(other.account, text: 'Hello @alice') - @mention_from_status = mentioning_status.mentions.first - @favourite = FavouriteService.new.call(other.account, first_status) - @second_favourite = FavouriteService.new.call(third.account, first_status) - @follow = FollowService.new.call(other.account, user.account) - end - - describe 'with no options' do - before do - get :index - end - - it 'returns expected notification types', :aggregate_failures do - expect(response).to have_http_status(200) - - expect(body_json_types).to include 'reblog' - expect(body_json_types).to include 'mention' - expect(body_json_types).to include 'favourite' - expect(body_json_types).to include 'follow' - end - end - - describe 'with account_id param' do - before do - get :index, params: { account_id: third.account.id } - end - - it 'returns only notifications from specified user', :aggregate_failures do - expect(response).to have_http_status(200) - - expect(body_json_account_ids.uniq).to eq [third.account.id.to_s] - end - - def body_json_account_ids - body_as_json.map { |x| x[:account][:id] } - end - end - - describe 'with invalid account_id param' do - before do - get :index, params: { account_id: 'foo' } - end - - it 'returns nothing', :aggregate_failures do - expect(response).to have_http_status(200) - - expect(body_as_json.size).to eq 0 - end - end - - describe 'with exclude_types param' do - before do - get :index, params: { exclude_types: %w(mention) } - end - - it 'returns everything but excluded type', :aggregate_failures do - expect(response).to have_http_status(200) - - expect(body_as_json.size).to_not eq 0 - expect(body_json_types.uniq).to_not include 'mention' - end - end - - describe 'with types param' do - before do - get :index, params: { types: %w(mention) } - end - - it 'returns only requested type', :aggregate_failures do - expect(response).to have_http_status(200) - - expect(body_json_types.uniq).to eq ['mention'] - end - end - - def body_json_types - body_as_json.pluck(:type) - end - end -end diff --git a/spec/controllers/api/v1/polls/votes_controller_spec.rb b/spec/controllers/api/v1/polls/votes_controller_spec.rb index 7abd2a1b171c1a..5de225a48796ed 100644 --- a/spec/controllers/api/v1/polls/votes_controller_spec.rb +++ b/spec/controllers/api/v1/polls/votes_controller_spec.rb @@ -18,18 +18,13 @@ post :create, params: { poll_id: poll.id, choices: %w(1) } end - it 'returns http success' do + it 'creates a vote', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates a vote' do vote = poll.votes.where(account: user.account).first expect(vote).to_not be_nil expect(vote.choice).to eq 1 - end - it 'updates poll tallies' do expect(poll.reload.cached_tallies).to eq [0, 1] end end diff --git a/spec/controllers/api/v1/reports_controller_spec.rb b/spec/controllers/api/v1/reports_controller_spec.rb deleted file mode 100644 index f923ff07945ffe..00000000000000 --- a/spec/controllers/api/v1/reports_controller_spec.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::ReportsController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'POST #create' do - let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - - let(:scopes) { 'write:reports' } - let(:status) { Fabricate(:status) } - let(:target_account) { status.account } - let(:category) { nil } - let(:forward) { nil } - let(:rule_ids) { nil } - - before do - post :create, params: { status_ids: [status.id], account_id: target_account.id, comment: 'reasons', category: category, rule_ids: rule_ids, forward: forward } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'creates a report' do - expect(target_account.targeted_reports).to_not be_empty - end - - it 'saves comment' do - expect(target_account.targeted_reports.first.comment).to eq 'reasons' - end - - it 'sends e-mails to admins' do - expect(ActionMailer::Base.deliveries.first.to).to eq([admin.email]) - end - - context 'when a status does not belong to the reported account' do - let(:target_account) { Fabricate(:account) } - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - - context 'when a category is chosen' do - let(:category) { 'spam' } - - it 'saves category' do - expect(target_account.targeted_reports.first.spam?).to be true - end - end - - context 'when violated rules are chosen' do - let(:rule) { Fabricate(:rule) } - let(:category) { 'violation' } - let(:rule_ids) { [rule.id] } - - it 'saves category' do - expect(target_account.targeted_reports.first.violation?).to be true - end - - it 'saves rule_ids' do - expect(target_account.targeted_reports.first.rule_ids).to contain_exactly(rule.id) - end - end - end -end diff --git a/spec/controllers/api/v1/statuses/mutes_controller_spec.rb b/spec/controllers/api/v1/statuses/mutes_controller_spec.rb index bffa9fe0d9c6a5..03274fe1cd2b5c 100644 --- a/spec/controllers/api/v1/statuses/mutes_controller_spec.rb +++ b/spec/controllers/api/v1/statuses/mutes_controller_spec.rb @@ -21,11 +21,8 @@ post :create, params: { status_id: status.id } end - it 'returns http success' do + it 'creates a conversation mute', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'creates a conversation mute' do expect(ConversationMute.find_by(account: user.account, conversation_id: status.conversation_id)).to_not be_nil end end @@ -38,11 +35,8 @@ post :destroy, params: { status_id: status.id } end - it 'returns http success' do + it 'destroys the conversation mute', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'destroys the conversation mute' do expect(ConversationMute.find_by(account: user.account, conversation_id: status.conversation_id)).to be_nil end end diff --git a/spec/controllers/api/v1/statuses/reblogged_by_accounts_controller_spec.rb b/spec/controllers/api/v1/statuses/reblogged_by_accounts_controller_spec.rb index 756010af87e2d4..0d15cca75c3430 100644 --- a/spec/controllers/api/v1/statuses/reblogged_by_accounts_controller_spec.rb +++ b/spec/controllers/api/v1/statuses/reblogged_by_accounts_controller_spec.rb @@ -24,14 +24,12 @@ Fabricate(:status, account: bob, reblog_of_id: status.id) end - it 'returns http success' do + it 'returns accounts who reblogged the status', :aggregate_failures do get :index, params: { status_id: status.id, limit: 2 } + expect(response).to have_http_status(200) expect(response.headers['Link'].links.size).to eq(2) - end - it 'returns accounts who reblogged the status' do - get :index, params: { status_id: status.id, limit: 2 } expect(body_as_json.size).to eq 2 expect([body_as_json[0][:id], body_as_json[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) end diff --git a/spec/controllers/api/v1/statuses/reblogs_controller_spec.rb b/spec/controllers/api/v1/statuses/reblogs_controller_spec.rb index 16ce95dc22bc66..2f2b30b07d0539 100644 --- a/spec/controllers/api/v1/statuses/reblogs_controller_spec.rb +++ b/spec/controllers/api/v1/statuses/reblogs_controller_spec.rb @@ -28,19 +28,13 @@ end context 'with public status' do - it 'returns http success' do + it 'reblogs the status', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'updates the reblogs count' do expect(status.reblogs.count).to eq 1 - end - it 'updates the reblogged attribute' do expect(user.account.reblogged?(status)).to be true - end - it 'returns json with updated attributes' do hash_body = body_as_json expect(hash_body[:reblog][:id]).to eq status.id.to_s @@ -67,19 +61,13 @@ post :destroy, params: { status_id: status.id } end - it 'returns http success' do + it 'destroys the reblog', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'updates the reblogs count' do expect(status.reblogs.count).to eq 0 - end - it 'updates the reblogged attribute' do expect(user.account.reblogged?(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 @@ -97,19 +85,13 @@ post :destroy, params: { status_id: status.id } end - it 'returns http success' do + it 'destroys the reblog', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'updates the reblogs count' do expect(status.reblogs.count).to eq 0 - end - it 'updates the reblogged attribute' do expect(user.account.reblogged?(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 diff --git a/spec/controllers/api/v1/statuses/sources_controller_spec.rb b/spec/controllers/api/v1/statuses/sources_controller_spec.rb deleted file mode 100644 index fbe6fa0be6cbc1..00000000000000 --- a/spec/controllers/api/v1/statuses/sources_controller_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Statuses::SourcesController do - render_views - - let(:user) { Fabricate(:user) } - let(:app) { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses', application: app) } - - context 'with an oauth token' do - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do - let(:status) { Fabricate(:status, account: user.account) } - - before do - get :show, params: { status_id: status.id } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - end -end diff --git a/spec/controllers/api/v1/statuses_controller_spec.rb b/spec/controllers/api/v1/statuses_controller_spec.rb index c2bdba9ace3bf6..30bafe19ac30e5 100644 --- a/spec/controllers/api/v1/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/statuses_controller_spec.rb @@ -30,14 +30,11 @@ user.account.custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide, keywords_attributes: [{ keyword: 'banned' }, { keyword: 'irrelevant' }]) end - it 'returns http success' do - get :show, params: { id: status.id } - expect(response).to have_http_status(200) - end - - it 'returns filter information' do + it 'returns filter information', :aggregate_failures do get :show, params: { id: status.id } json = body_as_json + + expect(response).to have_http_status(200) expect(json[:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -57,14 +54,11 @@ filter.statuses.create!(status_id: status.id) end - it 'returns http success' do - get :show, params: { id: status.id } - expect(response).to have_http_status(200) - end - - it 'returns filter information' do + it 'returns filter information', :aggregate_failures do get :show, params: { id: status.id } json = body_as_json + + expect(response).to have_http_status(200) expect(json[:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -83,14 +77,11 @@ user.account.custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide, keywords_attributes: [{ keyword: 'banned' }, { keyword: 'irrelevant' }]) end - it 'returns http success' do - get :show, params: { id: status.id } - expect(response).to have_http_status(200) - end - - it 'returns filter information' do + it 'returns filter information', :aggregate_failures do get :show, params: { id: status.id } json = body_as_json + + expect(response).to have_http_status(200) expect(json[:reblog][:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -125,11 +116,8 @@ post :create, params: { status: 'Hello world' } end - it 'returns http success' do + it 'returns rate limit headers', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'returns rate limit headers' do expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s expect(response.headers['X-RateLimit-Remaining']).to eq (RateLimiter::FAMILIES[:statuses][:limit] - 1).to_s end @@ -143,11 +131,8 @@ post :create, params: { status: '@alice hm, @bob is really annoying lately', allowed_mentions: [alice.id] } end - it 'returns http unprocessable entity' do + it 'returns serialized extra accounts in body', :aggregate_failures do expect(response).to have_http_status(422) - end - - it 'returns serialized extra accounts in body' do expect(body_as_json[:unexpected_accounts].map { |a| a.slice(:id, :acct) }).to eq [{ id: bob.id.to_s, acct: bob.acct }] end end @@ -157,11 +142,8 @@ post :create, params: {} end - it 'returns http unprocessable entity' do + it 'returns rate limit headers', :aggregate_failures do expect(response).to have_http_status(422) - end - - it 'returns rate limit headers' do expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s end end @@ -173,11 +155,8 @@ post :create, params: { status: 'Hello world' } end - it 'returns http too many requests' do + it 'returns rate limit headers', :aggregate_failures do expect(response).to have_http_status(429) - end - - it 'returns rate limit headers' do expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s expect(response.headers['X-RateLimit-Remaining']).to eq '0' end @@ -192,11 +171,8 @@ post :destroy, params: { id: status.id } end - it 'returns http success' do + it 'removes the status', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'removes the status' do expect(Status.find_by(id: status.id)).to be_nil end end @@ -209,11 +185,8 @@ put :update, params: { id: status.id, status: 'I am updated' } end - it 'returns http success' do + it 'updates the status', :aggregate_failures do expect(response).to have_http_status(200) - end - - it 'updates the status' do expect(status.reload.text).to eq 'I am updated' end end diff --git a/spec/controllers/api/v1/timelines/tag_controller_spec.rb b/spec/controllers/api/v1/timelines/tag_controller_spec.rb deleted file mode 100644 index 1c60798fcf6fed..00000000000000 --- a/spec/controllers/api/v1/timelines/tag_controller_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Timelines::TagController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do - subject do - get :show, params: { id: 'test' } - end - - before do - PostStatusService.new.call(user.account, text: 'It is a #test') - end - - context 'when the instance allows public preview' do - context 'when the user is not authenticated' do - let(:token) { nil } - - it 'returns http success', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(response.headers['Link'].links.size).to eq(2) - end - end - - context 'when the user is authenticated' do - it 'returns http success', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(response.headers['Link'].links.size).to eq(2) - end - end - end - - context 'when the instance does not allow public preview' do - before do - Form::AdminSettings.new(timeline_preview: false).save - end - - context 'when the user is not authenticated' do - let(:token) { nil } - - it 'returns http unauthorized' do - subject - - expect(response).to have_http_status(401) - end - end - - context 'when the user is authenticated' do - it 'returns http success', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(response.headers['Link'].links.size).to eq(2) - end - end - end - end -end diff --git a/spec/controllers/api/v2/admin/accounts_controller_spec.rb b/spec/controllers/api/v2/admin/accounts_controller_spec.rb index 635f645915beef..18b3950140eb4f 100644 --- a/spec/controllers/api/v2/admin/accounts_controller_spec.rb +++ b/spec/controllers/api/v2/admin/accounts_controller_spec.rb @@ -44,14 +44,14 @@ context "when called with #{params.inspect}" do let(:params) { params } - it 'returns http success' do + it "returns the correct accounts (#{expected_results.inspect})" do expect(response).to have_http_status(200) - end - it "returns the correct accounts (#{expected_results.inspect})" do - json = body_as_json + expect(body_json_ids).to eq(expected_results.map { |symbol| send(symbol).id }) + end - expect(json.map { |a| a[:id].to_i }).to eq(expected_results.map { |symbol| send(symbol).id }) + def body_json_ids + body_as_json.map { |a| a[:id].to_i } end end end diff --git a/spec/controllers/api/v2/filters/keywords_controller_spec.rb b/spec/controllers/api/v2/filters/keywords_controller_spec.rb index 057a9c3d00390f..5321f787a1aedc 100644 --- a/spec/controllers/api/v2/filters/keywords_controller_spec.rb +++ b/spec/controllers/api/v2/filters/keywords_controller_spec.rb @@ -40,17 +40,13 @@ post :create, params: { filter_id: filter_id, keyword: 'magic', whole_word: false } end - it 'returns http success' do + it 'creates a filter', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns a keyword' do json = body_as_json expect(json[:keyword]).to eq 'magic' expect(json[:whole_word]).to be false - end - it 'creates a keyword' do filter = user.account.custom_filters.first expect(filter).to_not be_nil expect(filter.keywords.pluck(:keyword)).to eq ['magic'] @@ -73,11 +69,9 @@ get :show, params: { id: keyword.id } end - it 'returns http success' do + it 'responds with the keyword', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns expected data' do json = body_as_json expect(json[:keyword]).to eq 'foo' expect(json[:whole_word]).to be false @@ -100,11 +94,9 @@ get :update, params: { id: keyword.id, keyword: 'updated' } end - it 'returns http success' do + it 'updates the keyword', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'updates the keyword' do expect(keyword.reload.keyword).to eq 'updated' end @@ -125,11 +117,9 @@ delete :destroy, params: { id: keyword.id } end - it 'returns http success' do + it 'destroys the keyword', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'removes the filter' do expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound end diff --git a/spec/controllers/api/v2/filters/statuses_controller_spec.rb b/spec/controllers/api/v2/filters/statuses_controller_spec.rb index 588532ffd22bea..5c2a623954f4be 100644 --- a/spec/controllers/api/v2/filters/statuses_controller_spec.rb +++ b/spec/controllers/api/v2/filters/statuses_controller_spec.rb @@ -41,16 +41,12 @@ post :create, params: { filter_id: filter_id, status_id: status.id } end - it 'returns http success' do + it 'creates a filter', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns a status filter' do json = body_as_json expect(json[:status_id]).to eq status.id.to_s - end - it 'creates a status filter' do filter = user.account.custom_filters.first expect(filter).to_not be_nil expect(filter.statuses.pluck(:status_id)).to eq [status.id] @@ -73,11 +69,9 @@ get :show, params: { id: status_filter.id } end - it 'returns http success' do + it 'responds with the filter', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'returns expected data' do json = body_as_json expect(json[:status_id]).to eq status_filter.status_id.to_s end @@ -99,11 +93,9 @@ delete :destroy, params: { id: status_filter.id } end - it 'returns http success' do + it 'destroys the filter', :aggregate_failures do expect(response).to have_http_status(200) - end - it 'removes the filter' do expect { status_filter.reload }.to raise_error ActiveRecord::RecordNotFound end diff --git a/spec/controllers/settings/imports_controller_spec.rb b/spec/controllers/settings/imports_controller_spec.rb index 76e1e4ecb0c5db..35d2f081939006 100644 --- a/spec/controllers/settings/imports_controller_spec.rb +++ b/spec/controllers/settings/imports_controller_spec.rb @@ -252,6 +252,19 @@ include_examples 'export failed rows', "https://foo.com/1\nhttps://foo.com/2\n" end + + context 'with lists' do + let(:import_type) { 'lists' } + + let!(:rows) do + [ + { 'list_name' => 'Amigos', 'acct' => 'user@example.com' }, + { 'list_name' => 'Frenemies', 'acct' => 'user@org.org' }, + ].map { |data| Fabricate(:bulk_import_row, bulk_import: bulk_import, data: data) } + end + + include_examples 'export failed rows', "Amigos,user@example.com\nFrenemies,user@org.org\n" + end end describe 'POST #create' do diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index bd98929c0267ea..8b715824b88cbc 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -5,25 +5,6 @@ describe StatusesController do render_views - shared_examples 'cacheable response' do - it 'does not set cookies' do - expect(response.cookies).to be_empty - expect(response.headers['Set-Cookies']).to be_nil - end - - it 'does not set sessions' do - expect(session).to be_empty - end - - it 'returns Vary header' do - expect(response.headers['Vary']).to include 'Accept, Accept-Language, Cookie' - end - - it 'returns public Cache-Control header' do - expect(response.headers['Cache-Control']).to include 'public' - end - end - describe 'GET #show' do let(:account) { Fabricate(:account) } let(:status) { Fabricate(:status, account: account) } @@ -88,7 +69,7 @@ context 'with JSON' do let(:format) { 'json' } - it_behaves_like 'cacheable response' + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' it 'renders ActivityPub Note object successfully', :aggregate_failures do expect(response).to have_http_status(200) @@ -371,7 +352,7 @@ context 'with JSON' do let(:format) { 'json' } - it_behaves_like 'cacheable response' + it_behaves_like 'cacheable response', expects_vary: 'Accept, Accept-Language, Cookie' it 'renders ActivityPub Note object successfully', :aggregate_failures do expect(response).to have_http_status(200) diff --git a/spec/features/admin/accounts_spec.rb b/spec/features/admin/accounts_spec.rb new file mode 100644 index 00000000000000..ad9c51485a76db --- /dev/null +++ b/spec/features/admin/accounts_spec.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Accounts' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + let(:unapproved_user_account) { Fabricate(:account) } + let(:approved_user_account) { Fabricate(:account) } + + before do + unapproved_user_account.user.update(approved: false) + approved_user_account.user.update(approved: true) + + visit admin_accounts_path + end + + context 'without selecting any accounts' do + it 'displays a notice about account selection' do + click_button button_for_suspend + + expect(page).to have_content(selection_error_text) + end + end + + context 'with action of `suspend`' do + it 'suspends the account' do + batch_checkbox_for(approved_user_account).check + + click_button button_for_suspend + + expect(approved_user_account.reload).to be_suspended + end + end + + context 'with action of `approve`' do + it 'approves the account user' do + batch_checkbox_for(unapproved_user_account).check + + click_button button_for_approve + + expect(unapproved_user_account.reload.user).to be_approved + end + end + + context 'with action of `reject`' do + it 'rejects and removes the account' do + batch_checkbox_for(unapproved_user_account).check + + click_button button_for_reject + + expect { unapproved_user_account.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + end + + def button_for_suspend + I18n.t('admin.accounts.perform_full_suspension') + end + + def button_for_approve + I18n.t('admin.accounts.approve') + end + + def button_for_reject + I18n.t('admin.accounts.reject') + end + + def selection_error_text + I18n.t('admin.accounts.no_account_selected') + end + + def batch_checkbox_for(account) + find("#form_account_batch_account_ids_#{account.id}") + end + end +end diff --git a/spec/features/admin/custom_emojis_spec.rb b/spec/features/admin/custom_emojis_spec.rb new file mode 100644 index 00000000000000..3fea8f06fe6f50 --- /dev/null +++ b/spec/features/admin/custom_emojis_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::CustomEmojis' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_custom_emojis_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_enable + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_enable + I18n.t('admin.custom_emojis.enable') + end + + def selection_error_text + I18n.t('admin.custom_emojis.no_emoji_selected') + end + end +end diff --git a/spec/features/admin/domain_blocks_spec.rb b/spec/features/admin/domain_blocks_spec.rb index 4672c1e1a9ee45..0d7b90c21cd5d2 100644 --- a/spec/features/admin/domain_blocks_spec.rb +++ b/spec/features/admin/domain_blocks_spec.rb @@ -13,7 +13,7 @@ fill_in 'domain_block_domain', with: 'example.com' select I18n.t('admin.domain_blocks.new.severity.silence'), from: 'domain_block_severity' - click_on I18n.t('admin.domain_blocks.new.create') + click_button I18n.t('admin.domain_blocks.new.create') expect(DomainBlock.exists?(domain: 'example.com', severity: 'silence')).to be true end @@ -25,13 +25,13 @@ fill_in 'domain_block_domain', with: 'example.com' select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity' - click_on I18n.t('admin.domain_blocks.new.create') + click_button I18n.t('admin.domain_blocks.new.create') # It presents a confirmation screen expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com')) # Confirming creates a block - click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm') + click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm') expect(DomainBlock.exists?(domain: 'example.com', severity: 'suspend')).to be true end @@ -45,13 +45,13 @@ fill_in 'domain_block_domain', with: 'example.com' select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity' - click_on I18n.t('admin.domain_blocks.new.create') + click_button I18n.t('admin.domain_blocks.new.create') # It presents a confirmation screen expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com')) # Confirming updates the block - click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm') + click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm') expect(domain_block.reload.severity).to eq 'suspend' end @@ -65,13 +65,13 @@ fill_in 'domain_block_domain', with: 'subdomain.example.com' select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity' - click_on I18n.t('admin.domain_blocks.new.create') + click_button I18n.t('admin.domain_blocks.new.create') # It presents a confirmation screen expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com')) # Confirming creates the block - click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm') + click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm') expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist @@ -88,13 +88,13 @@ visit edit_admin_domain_block_path(domain_block) select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity' - click_on I18n.t('generic.save_changes') + click_button I18n.t('generic.save_changes') # It presents a confirmation screen expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com')) # Confirming updates the block - click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm') + click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm') expect(domain_block.reload.severity).to eq 'suspend' end diff --git a/spec/features/admin/email_domain_blocks_spec.rb b/spec/features/admin/email_domain_blocks_spec.rb new file mode 100644 index 00000000000000..80efe72e95c568 --- /dev/null +++ b/spec/features/admin/email_domain_blocks_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::EmailDomainBlocks' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_email_domain_blocks_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_delete + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_delete + I18n.t('admin.email_domain_blocks.delete') + end + + def selection_error_text + I18n.t('admin.email_domain_blocks.no_email_domain_block_selected') + end + end +end diff --git a/spec/features/admin/ip_blocks_spec.rb b/spec/features/admin/ip_blocks_spec.rb new file mode 100644 index 00000000000000..465c8891907013 --- /dev/null +++ b/spec/features/admin/ip_blocks_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::IpBlocks' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_ip_blocks_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_delete + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_delete + I18n.t('admin.ip_blocks.delete') + end + + def selection_error_text + I18n.t('admin.ip_blocks.no_ip_block_selected') + end + end +end diff --git a/spec/features/admin/software_updates_spec.rb b/spec/features/admin/software_updates_spec.rb index 4a635d1a794f8f..a2373d35a6080c 100644 --- a/spec/features/admin/software_updates_spec.rb +++ b/spec/features/admin/software_updates_spec.rb @@ -11,13 +11,13 @@ it 'shows a link to the software updates page, which links to release notes' do visit settings_profile_path - click_on I18n.t('admin.critical_update_pending') + click_link I18n.t('admin.critical_update_pending') expect(page).to have_title(I18n.t('admin.software_updates.title')) expect(page).to have_content('99.99.99') - click_on I18n.t('admin.software_updates.release_notes') + click_link I18n.t('admin.software_updates.release_notes') expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true) end end diff --git a/spec/features/admin/statuses_spec.rb b/spec/features/admin/statuses_spec.rb new file mode 100644 index 00000000000000..a21c901a921b23 --- /dev/null +++ b/spec/features/admin/statuses_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Statuses' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + _status = Fabricate(:status, account: current_user.account) + visit admin_account_statuses_path(account_id: current_user.account_id) + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_report + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_report + I18n.t('admin.statuses.batch.report') + end + + def selection_error_text + I18n.t('admin.statuses.no_status_selected') + end + end +end diff --git a/spec/features/admin/trends/links/preview_card_providers_spec.rb b/spec/features/admin/trends/links/preview_card_providers_spec.rb new file mode 100644 index 00000000000000..cf9796abf362cd --- /dev/null +++ b/spec/features/admin/trends/links/preview_card_providers_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Trends::Links::PreviewCardProviders' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_trends_links_preview_card_providers_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_allow + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_allow + I18n.t('admin.trends.allow') + end + + def selection_error_text + I18n.t('admin.trends.links.publishers.no_publisher_selected') + end + end +end diff --git a/spec/features/admin/trends/links_spec.rb b/spec/features/admin/trends/links_spec.rb new file mode 100644 index 00000000000000..8b1b991a5a85cc --- /dev/null +++ b/spec/features/admin/trends/links_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Trends::Links' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_trends_links_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_allow + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_allow + I18n.t('admin.trends.links.allow') + end + + def selection_error_text + I18n.t('admin.trends.links.no_link_selected') + end + end +end diff --git a/spec/features/admin/trends/statuses_spec.rb b/spec/features/admin/trends/statuses_spec.rb new file mode 100644 index 00000000000000..a578ab05593c08 --- /dev/null +++ b/spec/features/admin/trends/statuses_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Trends::Statuses' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_trends_statuses_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_allow + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_allow + I18n.t('admin.trends.statuses.allow') + end + + def selection_error_text + I18n.t('admin.trends.statuses.no_status_selected') + end + end +end diff --git a/spec/features/admin/trends/tags_spec.rb b/spec/features/admin/trends/tags_spec.rb new file mode 100644 index 00000000000000..7502bc8c6f50c1 --- /dev/null +++ b/spec/features/admin/trends/tags_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Admin::Trends::Tags' do + let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before do + sign_in current_user + end + + describe 'Performing batch updates' do + before do + visit admin_trends_tags_path + end + + context 'without selecting any records' do + it 'displays a notice about selection' do + click_button button_for_allow + + expect(page).to have_content(selection_error_text) + end + end + + def button_for_allow + I18n.t('admin.trends.allow') + end + + def selection_error_text + I18n.t('admin.trends.tags.no_tag_selected') + end + end +end diff --git a/spec/features/captcha_spec.rb b/spec/features/captcha_spec.rb index db89ff3e616c58..6ccf066208fae5 100644 --- a/spec/features/captcha_spec.rb +++ b/spec/features/captcha_spec.rb @@ -27,7 +27,7 @@ expect(user.reload.confirmed?).to be false # It redirects to app and confirms user - click_on I18n.t('challenge.confirm') + click_button I18n.t('challenge.confirm') expect(user.reload.confirmed?).to be true expect(page).to have_current_path(/\A#{client_app.confirmation_redirect_uri}/, url: true) end diff --git a/spec/features/log_in_spec.rb b/spec/features/log_in_spec.rb index c64e19d2b7c43f..7e5196aba99564 100644 --- a/spec/features/log_in_spec.rb +++ b/spec/features/log_in_spec.rb @@ -19,7 +19,7 @@ it 'A valid email and password user is able to log in' do fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(subject).to have_css('div.app-holder') end @@ -27,7 +27,7 @@ it 'A invalid email and password user is not able to log in' do fill_in 'user_email', with: 'invalid_email' fill_in 'user_password', with: 'invalid_password' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(subject).to have_css('.flash-message', text: failure_message('invalid')) end @@ -38,7 +38,7 @@ it 'A unconfirmed user is able to log in' do fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(subject).to have_css('div.admin-wrapper') end diff --git a/spec/features/oauth_spec.rb b/spec/features/oauth_spec.rb index 967956cc8ea91a..0e612b56a5a24f 100644 --- a/spec/features/oauth_spec.rb +++ b/spec/features/oauth_spec.rb @@ -20,7 +20,7 @@ expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') + click_button I18n.t('doorkeeper.authorizations.buttons.authorize') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It grants the app access to the account @@ -35,7 +35,7 @@ expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.deny')) # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') + click_button I18n.t('doorkeeper.authorizations.buttons.deny') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It does not grant the app access to the account @@ -63,17 +63,17 @@ # Failing to log-in presents the form again fill_in 'user_email', with: email fill_in 'user_password', with: 'wrong password' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('auth.login')) # Logging in redirects to an authorization page fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') + click_button I18n.t('doorkeeper.authorizations.buttons.authorize') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It grants the app access to the account @@ -90,17 +90,17 @@ # Failing to log-in presents the form again fill_in 'user_email', with: email fill_in 'user_password', with: 'wrong password' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('auth.login')) # Logging in redirects to an authorization page fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') + click_button I18n.t('doorkeeper.authorizations.buttons.deny') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It does not grant the app access to the account @@ -120,27 +120,27 @@ # Failing to log-in presents the form again fill_in 'user_email', with: email fill_in 'user_password', with: 'wrong password' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('auth.login')) # Logging in redirects to a two-factor authentication page fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) # Filling in an incorrect two-factor authentication code presents the form again fill_in 'user_otp_attempt', with: 'wrong' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) # Filling in the correct TOTP code redirects to an app authorization page fill_in 'user_otp_attempt', with: user.current_otp - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') + click_button I18n.t('doorkeeper.authorizations.buttons.authorize') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It grants the app access to the account @@ -157,27 +157,27 @@ # Failing to log-in presents the form again fill_in 'user_email', with: email fill_in 'user_password', with: 'wrong password' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('auth.login')) # Logging in redirects to a two-factor authentication page fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) # Filling in an incorrect two-factor authentication code presents the form again fill_in 'user_otp_attempt', with: 'wrong' - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('simple_form.hints.sessions.otp')) # Filling in the correct TOTP code redirects to an app authorization page fill_in 'user_otp_attempt', with: user.current_otp - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') + click_button I18n.t('doorkeeper.authorizations.buttons.deny') expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) # It does not grant the app access to the account diff --git a/spec/fixtures/requests/json-ld.activitystreams.txt b/spec/fixtures/requests/json-ld.activitystreams.txt deleted file mode 100644 index 395797b2721801..00000000000000 --- a/spec/fixtures/requests/json-ld.activitystreams.txt +++ /dev/null @@ -1,391 +0,0 @@ -HTTP/1.1 200 OK -Date: Tue, 01 May 2018 23:25:57 GMT -Content-Location: activitystreams.jsonld -Vary: negotiate,accept -TCN: choice -Last-Modified: Mon, 16 Apr 2018 00:28:23 GMT -ETag: "1eb0-569ec4caa97c0;d3-540ee27e0eec0" -Accept-Ranges: bytes -Content-Length: 7856 -Cache-Control: max-age=21600 -Expires: Wed, 02 May 2018 05:25:57 GMT -P3P: policyref="http://www.w3.org/2014/08/p3p.xml" -Access-Control-Allow-Origin: * -Content-Type: application/ld+json -Strict-Transport-Security: max-age=15552000; includeSubdomains; preload -Content-Security-Policy: upgrade-insecure-requests - -{ - "@context": { - "@vocab": "_:", - "xsd": "http://www.w3.org/2001/XMLSchema#", - "as": "https://www.w3.org/ns/activitystreams#", - "ldp": "http://www.w3.org/ns/ldp#", - "id": "@id", - "type": "@type", - "Accept": "as:Accept", - "Activity": "as:Activity", - "IntransitiveActivity": "as:IntransitiveActivity", - "Add": "as:Add", - "Announce": "as:Announce", - "Application": "as:Application", - "Arrive": "as:Arrive", - "Article": "as:Article", - "Audio": "as:Audio", - "Block": "as:Block", - "Collection": "as:Collection", - "CollectionPage": "as:CollectionPage", - "Relationship": "as:Relationship", - "Create": "as:Create", - "Delete": "as:Delete", - "Dislike": "as:Dislike", - "Document": "as:Document", - "Event": "as:Event", - "Follow": "as:Follow", - "Flag": "as:Flag", - "Group": "as:Group", - "Ignore": "as:Ignore", - "Image": "as:Image", - "Invite": "as:Invite", - "Join": "as:Join", - "Leave": "as:Leave", - "Like": "as:Like", - "Link": "as:Link", - "Mention": "as:Mention", - "Note": "as:Note", - "Object": "as:Object", - "Offer": "as:Offer", - "OrderedCollection": "as:OrderedCollection", - "OrderedCollectionPage": "as:OrderedCollectionPage", - "Organization": "as:Organization", - "Page": "as:Page", - "Person": "as:Person", - "Place": "as:Place", - "Profile": "as:Profile", - "Question": "as:Question", - "Reject": "as:Reject", - "Remove": "as:Remove", - "Service": "as:Service", - "TentativeAccept": "as:TentativeAccept", - "TentativeReject": "as:TentativeReject", - "Tombstone": "as:Tombstone", - "Undo": "as:Undo", - "Update": "as:Update", - "Video": "as:Video", - "View": "as:View", - "Listen": "as:Listen", - "Read": "as:Read", - "Move": "as:Move", - "Travel": "as:Travel", - "IsFollowing": "as:IsFollowing", - "IsFollowedBy": "as:IsFollowedBy", - "IsContact": "as:IsContact", - "IsMember": "as:IsMember", - "subject": { - "@id": "as:subject", - "@type": "@id" - }, - "relationship": { - "@id": "as:relationship", - "@type": "@id" - }, - "actor": { - "@id": "as:actor", - "@type": "@id" - }, - "attributedTo": { - "@id": "as:attributedTo", - "@type": "@id" - }, - "attachment": { - "@id": "as:attachment", - "@type": "@id" - }, - "bcc": { - "@id": "as:bcc", - "@type": "@id" - }, - "bto": { - "@id": "as:bto", - "@type": "@id" - }, - "cc": { - "@id": "as:cc", - "@type": "@id" - }, - "context": { - "@id": "as:context", - "@type": "@id" - }, - "current": { - "@id": "as:current", - "@type": "@id" - }, - "first": { - "@id": "as:first", - "@type": "@id" - }, - "generator": { - "@id": "as:generator", - "@type": "@id" - }, - "icon": { - "@id": "as:icon", - "@type": "@id" - }, - "image": { - "@id": "as:image", - "@type": "@id" - }, - "inReplyTo": { - "@id": "as:inReplyTo", - "@type": "@id" - }, - "items": { - "@id": "as:items", - "@type": "@id" - }, - "instrument": { - "@id": "as:instrument", - "@type": "@id" - }, - "orderedItems": { - "@id": "as:items", - "@type": "@id", - "@container": "@list" - }, - "last": { - "@id": "as:last", - "@type": "@id" - }, - "location": { - "@id": "as:location", - "@type": "@id" - }, - "next": { - "@id": "as:next", - "@type": "@id" - }, - "object": { - "@id": "as:object", - "@type": "@id" - }, - "oneOf": { - "@id": "as:oneOf", - "@type": "@id" - }, - "anyOf": { - "@id": "as:anyOf", - "@type": "@id" - }, - "closed": { - "@id": "as:closed", - "@type": "xsd:dateTime" - }, - "origin": { - "@id": "as:origin", - "@type": "@id" - }, - "accuracy": { - "@id": "as:accuracy", - "@type": "xsd:float" - }, - "prev": { - "@id": "as:prev", - "@type": "@id" - }, - "preview": { - "@id": "as:preview", - "@type": "@id" - }, - "replies": { - "@id": "as:replies", - "@type": "@id" - }, - "result": { - "@id": "as:result", - "@type": "@id" - }, - "audience": { - "@id": "as:audience", - "@type": "@id" - }, - "partOf": { - "@id": "as:partOf", - "@type": "@id" - }, - "tag": { - "@id": "as:tag", - "@type": "@id" - }, - "target": { - "@id": "as:target", - "@type": "@id" - }, - "to": { - "@id": "as:to", - "@type": "@id" - }, - "url": { - "@id": "as:url", - "@type": "@id" - }, - "altitude": { - "@id": "as:altitude", - "@type": "xsd:float" - }, - "content": "as:content", - "contentMap": { - "@id": "as:content", - "@container": "@language" - }, - "name": "as:name", - "nameMap": { - "@id": "as:name", - "@container": "@language" - }, - "duration": { - "@id": "as:duration", - "@type": "xsd:duration" - }, - "endTime": { - "@id": "as:endTime", - "@type": "xsd:dateTime" - }, - "height": { - "@id": "as:height", - "@type": "xsd:nonNegativeInteger" - }, - "href": { - "@id": "as:href", - "@type": "@id" - }, - "hreflang": "as:hreflang", - "latitude": { - "@id": "as:latitude", - "@type": "xsd:float" - }, - "longitude": { - "@id": "as:longitude", - "@type": "xsd:float" - }, - "mediaType": "as:mediaType", - "published": { - "@id": "as:published", - "@type": "xsd:dateTime" - }, - "radius": { - "@id": "as:radius", - "@type": "xsd:float" - }, - "rel": "as:rel", - "startIndex": { - "@id": "as:startIndex", - "@type": "xsd:nonNegativeInteger" - }, - "startTime": { - "@id": "as:startTime", - "@type": "xsd:dateTime" - }, - "summary": "as:summary", - "summaryMap": { - "@id": "as:summary", - "@container": "@language" - }, - "totalItems": { - "@id": "as:totalItems", - "@type": "xsd:nonNegativeInteger" - }, - "units": "as:units", - "updated": { - "@id": "as:updated", - "@type": "xsd:dateTime" - }, - "width": { - "@id": "as:width", - "@type": "xsd:nonNegativeInteger" - }, - "describes": { - "@id": "as:describes", - "@type": "@id" - }, - "formerType": { - "@id": "as:formerType", - "@type": "@id" - }, - "deleted": { - "@id": "as:deleted", - "@type": "xsd:dateTime" - }, - "inbox": { - "@id": "ldp:inbox", - "@type": "@id" - }, - "outbox": { - "@id": "as:outbox", - "@type": "@id" - }, - "following": { - "@id": "as:following", - "@type": "@id" - }, - "followers": { - "@id": "as:followers", - "@type": "@id" - }, - "streams": { - "@id": "as:streams", - "@type": "@id" - }, - "preferredUsername": "as:preferredUsername", - "endpoints": { - "@id": "as:endpoints", - "@type": "@id" - }, - "uploadMedia": { - "@id": "as:uploadMedia", - "@type": "@id" - }, - "proxyUrl": { - "@id": "as:proxyUrl", - "@type": "@id" - }, - "liked": { - "@id": "as:liked", - "@type": "@id" - }, - "oauthAuthorizationEndpoint": { - "@id": "as:oauthAuthorizationEndpoint", - "@type": "@id" - }, - "oauthTokenEndpoint": { - "@id": "as:oauthTokenEndpoint", - "@type": "@id" - }, - "provideClientKey": { - "@id": "as:provideClientKey", - "@type": "@id" - }, - "signClientKey": { - "@id": "as:signClientKey", - "@type": "@id" - }, - "sharedInbox": { - "@id": "as:sharedInbox", - "@type": "@id" - }, - "Public": { - "@id": "as:Public", - "@type": "@id" - }, - "source": "as:source", - "likes": { - "@id": "as:likes", - "@type": "@id" - }, - "shares": { - "@id": "as:shares", - "@type": "@id" - } - } -} diff --git a/spec/fixtures/requests/json-ld.identity.txt b/spec/fixtures/requests/json-ld.identity.txt deleted file mode 100644 index 8810526cb13931..00000000000000 --- a/spec/fixtures/requests/json-ld.identity.txt +++ /dev/null @@ -1,100 +0,0 @@ -HTTP/1.1 200 OK -Accept-Ranges: bytes -Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept-Encoding -Access-Control-Allow-Origin: * -Content-Type: application/ld+json -Date: Tue, 01 May 2018 23:28:21 GMT -Etag: "e26-547a6fc75b04a-gzip" -Last-Modified: Fri, 03 Feb 2017 21:30:09 GMT -Server: Apache/2.4.7 (Ubuntu) -Vary: Accept-Encoding -Transfer-Encoding: chunked - -{ - "@context": { - "id": "@id", - "type": "@type", - - "cred": "https://w3id.org/credentials#", - "dc": "http://purl.org/dc/terms/", - "identity": "https://w3id.org/identity#", - "perm": "https://w3id.org/permissions#", - "ps": "https://w3id.org/payswarm#", - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "sec": "https://w3id.org/security#", - "schema": "http://schema.org/", - "xsd": "http://www.w3.org/2001/XMLSchema#", - - "Group": "https://www.w3.org/ns/activitystreams#Group", - - "claim": {"@id": "cred:claim", "@type": "@id"}, - "credential": {"@id": "cred:credential", "@type": "@id"}, - "issued": {"@id": "cred:issued", "@type": "xsd:dateTime"}, - "issuer": {"@id": "cred:issuer", "@type": "@id"}, - "recipient": {"@id": "cred:recipient", "@type": "@id"}, - "Credential": "cred:Credential", - "CryptographicKeyCredential": "cred:CryptographicKeyCredential", - - "about": {"@id": "schema:about", "@type": "@id"}, - "address": {"@id": "schema:address", "@type": "@id"}, - "addressCountry": "schema:addressCountry", - "addressLocality": "schema:addressLocality", - "addressRegion": "schema:addressRegion", - "comment": "rdfs:comment", - "created": {"@id": "dc:created", "@type": "xsd:dateTime"}, - "creator": {"@id": "dc:creator", "@type": "@id"}, - "description": "schema:description", - "email": "schema:email", - "familyName": "schema:familyName", - "givenName": "schema:givenName", - "image": {"@id": "schema:image", "@type": "@id"}, - "label": "rdfs:label", - "name": "schema:name", - "postalCode": "schema:postalCode", - "streetAddress": "schema:streetAddress", - "title": "dc:title", - "url": {"@id": "schema:url", "@type": "@id"}, - "Person": "schema:Person", - "PostalAddress": "schema:PostalAddress", - "Organization": "schema:Organization", - - "identityService": {"@id": "identity:identityService", "@type": "@id"}, - "idp": {"@id": "identity:idp", "@type": "@id"}, - "Identity": "identity:Identity", - - "paymentProcessor": "ps:processor", - "preferences": {"@id": "ps:preferences", "@type": "@vocab"}, - - "cipherAlgorithm": "sec:cipherAlgorithm", - "cipherData": "sec:cipherData", - "cipherKey": "sec:cipherKey", - "digestAlgorithm": "sec:digestAlgorithm", - "digestValue": "sec:digestValue", - "domain": "sec:domain", - "expires": {"@id": "sec:expiration", "@type": "xsd:dateTime"}, - "initializationVector": "sec:initializationVector", - "member": {"@id": "schema:member", "@type": "@id"}, - "memberOf": {"@id": "schema:memberOf", "@type": "@id"}, - "nonce": "sec:nonce", - "normalizationAlgorithm": "sec:normalizationAlgorithm", - "owner": {"@id": "sec:owner", "@type": "@id"}, - "password": "sec:password", - "privateKey": {"@id": "sec:privateKey", "@type": "@id"}, - "privateKeyPem": "sec:privateKeyPem", - "publicKey": {"@id": "sec:publicKey", "@type": "@id"}, - "publicKeyPem": "sec:publicKeyPem", - "publicKeyService": {"@id": "sec:publicKeyService", "@type": "@id"}, - "revoked": {"@id": "sec:revoked", "@type": "xsd:dateTime"}, - "signature": "sec:signature", - "signatureAlgorithm": "sec:signatureAlgorithm", - "signatureValue": "sec:signatureValue", - "CryptographicKey": "sec:Key", - "EncryptedMessage": "sec:EncryptedMessage", - "GraphSignature2012": "sec:GraphSignature2012", - "LinkedDataSignature2015": "sec:LinkedDataSignature2015", - - "accessControl": {"@id": "perm:accessControl", "@type": "@id"}, - "writePermission": {"@id": "perm:writePermission", "@type": "@id"} - } -} diff --git a/spec/fixtures/requests/json-ld.security.txt b/spec/fixtures/requests/json-ld.security.txt deleted file mode 100644 index 0d29903e60731f..00000000000000 --- a/spec/fixtures/requests/json-ld.security.txt +++ /dev/null @@ -1,61 +0,0 @@ -HTTP/1.1 200 OK -Accept-Ranges: bytes -Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept-Encoding -Access-Control-Allow-Origin: * -Content-Type: application/ld+json -Date: Wed, 02 May 2018 16:25:32 GMT -Etag: "7e3-5651ec0f7c5ed-gzip" -Last-Modified: Tue, 13 Feb 2018 21:34:04 GMT -Server: Apache/2.4.7 (Ubuntu) -Vary: Accept-Encoding -Content-Length: 2019 - -{ - "@context": { - "id": "@id", - "type": "@type", - - "dc": "http://purl.org/dc/terms/", - "sec": "https://w3id.org/security#", - "xsd": "http://www.w3.org/2001/XMLSchema#", - - "EcdsaKoblitzSignature2016": "sec:EcdsaKoblitzSignature2016", - "Ed25519Signature2018": "sec:Ed25519Signature2018", - "EncryptedMessage": "sec:EncryptedMessage", - "GraphSignature2012": "sec:GraphSignature2012", - "LinkedDataSignature2015": "sec:LinkedDataSignature2015", - "LinkedDataSignature2016": "sec:LinkedDataSignature2016", - "CryptographicKey": "sec:Key", - - "authenticationTag": "sec:authenticationTag", - "canonicalizationAlgorithm": "sec:canonicalizationAlgorithm", - "cipherAlgorithm": "sec:cipherAlgorithm", - "cipherData": "sec:cipherData", - "cipherKey": "sec:cipherKey", - "created": {"@id": "dc:created", "@type": "xsd:dateTime"}, - "creator": {"@id": "dc:creator", "@type": "@id"}, - "digestAlgorithm": "sec:digestAlgorithm", - "digestValue": "sec:digestValue", - "domain": "sec:domain", - "encryptionKey": "sec:encryptionKey", - "expiration": {"@id": "sec:expiration", "@type": "xsd:dateTime"}, - "expires": {"@id": "sec:expiration", "@type": "xsd:dateTime"}, - "initializationVector": "sec:initializationVector", - "iterationCount": "sec:iterationCount", - "nonce": "sec:nonce", - "normalizationAlgorithm": "sec:normalizationAlgorithm", - "owner": {"@id": "sec:owner", "@type": "@id"}, - "password": "sec:password", - "privateKey": {"@id": "sec:privateKey", "@type": "@id"}, - "privateKeyPem": "sec:privateKeyPem", - "publicKey": {"@id": "sec:publicKey", "@type": "@id"}, - "publicKeyBase58": "sec:publicKeyBase58", - "publicKeyPem": "sec:publicKeyPem", - "publicKeyService": {"@id": "sec:publicKeyService", "@type": "@id"}, - "revoked": {"@id": "sec:revoked", "@type": "xsd:dateTime"}, - "salt": "sec:salt", - "signature": "sec:signature", - "signatureAlgorithm": "sec:signingAlgorithm", - "signatureValue": "sec:signatureValue" - } -} diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 7659ed82a00155..3e27c32a1b197a 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -1334,6 +1334,199 @@ expect(status.language).to eq 'en-US' end end + + context 'when ng word is set' do + let(:custom_before) { true } + let(:custom_before_sub) { false } + let(:content) { 'Lorem ipsum' } + let(:ng_words) { 'hello' } + let(:ng_words_for_stranger_mention) { 'ohagi' } + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: content, + to: 'https://www.w3.org/ns/activitystreams#Public', + } + end + + before do + Form::AdminSettings.new(ng_words: ng_words, ng_words_for_stranger_mention: ng_words_for_stranger_mention).save + subject.perform unless custom_before_sub + end + + context 'when not contains ng words' do + let(:content) { 'ohagi, world!' } + + it 'creates status' do + expect(sender.statuses.first).to_not be_nil + end + end + + context 'when hit ng words' do + let(:content) { 'hello, world!' } + + it 'creates status' do + expect(sender.statuses.first).to be_nil + end + end + + context 'when mention from tags' do + let(:recipient) { Fabricate(:user).account } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: content, + tag: [ + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(recipient), + }, + ], + } + end + + context 'with not using ng words for stranger' do + let(:content) { 'among us' } + + it 'creates status' do + expect(sender.statuses.first).to_not be_nil + end + end + + context 'with using ng words for stranger' do + let(:content) { 'oh, ohagi!' } + + it 'creates status' do + expect(sender.statuses.first).to be_nil + end + end + + context 'with using ng words for stranger but receiver is following him' do + let(:content) { 'oh, ohagi!' } + let(:custom_before_sub) { true } + + before do + recipient.follow!(sender) + subject.perform + end + + it 'creates status' do + expect(sender.statuses.first).to_not be_nil + end + end + + context 'with using ng words for stranger but multiple receivers are partically following him' do + let(:content) { 'oh, ohagi' } + let(:custom_before_sub) { true } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: content, + tag: [ + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(recipient), + }, + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(Fabricate(:user).account), + }, + ], + } + end + + before do + recipient.follow!(sender) + subject.perform + end + + it 'creates status' do + expect(sender.statuses.first).to be_nil + end + end + end + + context 'when a reply' do + let(:recipient) { Fabricate(:user).account } + let(:original_status) { Fabricate(:status, account: recipient) } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'ohagi peers', + inReplyTo: ActivityPub::TagManager.instance.uri_for(original_status), + } + end + + context 'with a simple case' do + it 'creates status' do + expect(sender.statuses.first).to be_nil + end + end + + context 'with following' do + let(:custom_before_sub) { true } + + before do + recipient.follow!(sender) + subject.perform + end + + it 'creates status' do + expect(sender.statuses.first).to_not be_nil + end + end + end + end + + context 'when hashtags limit is set' do + let(:post_hash_tags_max) { 2 } + let(:custom_before) { true } + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + tag: [ + { + type: 'Hashtag', + href: 'http://example.com/blah', + name: '#test', + }, + { + type: 'Hashtag', + href: 'http://example.com/blah2', + name: '#test2', + }, + ], + } + end + + before do + Form::AdminSettings.new(post_hash_tags_max: post_hash_tags_max).save + subject.perform + end + + context 'when limit is enough' do + it 'creates status' do + expect(sender.statuses.first).to_not be_nil + end + end + + context 'when limit is over' do + let(:post_hash_tags_max) { 1 } + + it 'creates status' do + expect(sender.statuses.first).to be_nil + end + end + end end context 'with an encrypted message' do diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index 16ea81dccdf436..804d2410522fde 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -16,6 +16,28 @@ object: ActivityPub::TagManager.instance.uri_for(status), }.with_indifferent_access end + let(:original_emoji) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'This is ohagi', + } + end + let(:original_invalid_emoji) do + { + id: 'https://example.com/invalid', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'other', + license: 'This is other ohagi', + } + end describe '#perform' do subject { described_class.new(json, sender) } @@ -37,6 +59,9 @@ before do stub_request(:get, 'http://example.com/emoji.png').to_return(body: attachment_fixture('emojo.png')) + stub_request(:get, 'http://foo.bar/emoji2.png').to_return(body: attachment_fixture('emojo.png')) + stub_request(:get, 'https://example.com/aaa').to_return(status: 200, body: Oj.dump(original_emoji)) + stub_request(:get, 'https://example.com/invalid').to_return(status: 200, body: Oj.dump(original_invalid_emoji)) end let(:json) do @@ -122,13 +147,12 @@ end end - context 'with custom emoji and custom domain' do + context 'with custom emoji from non-original server account' do let(:content) { ':tinking:' } let(:tag) do { id: 'https://example.com/aaa', type: 'Emoji', - domain: 'post.kmycode.net', icon: { url: 'http://example.com/emoji.png', }, @@ -136,17 +160,98 @@ } end + before do + sender.update(domain: 'ohagi.com') + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', shortcode: 'tinking') + end + it 'create emoji reaction' do expect(subject.count).to eq 1 expect(subject.first.name).to eq 'tinking' expect(subject.first.account).to eq sender expect(subject.first.custom_emoji).to_not be_nil expect(subject.first.custom_emoji.shortcode).to eq 'tinking' - expect(subject.first.custom_emoji.domain).to eq 'post.kmycode.net' + expect(subject.first.custom_emoji.domain).to eq 'example.com' expect(sender.favourited?(status)).to be false end end + context 'with custom emoji and update license from non-original server account' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Old license', + } + end + + before do + sender.update(domain: 'ohagi.com') + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', shortcode: 'tinking') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.custom_emoji.license).to eq 'This is ohagi' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but icon url is not valid' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://foo.bar/emoji.png', + }, + name: 'tinking', + license: 'Good for using darwin', + } + end + + before do + sender.update(domain: 'ohagi.com') + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', shortcode: 'tinking', image_remote_url: 'http://example.com/emoji.png') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.custom_emoji.reload.license).to eq 'This is ohagi' + expect(subject.first.custom_emoji.image_remote_url).to eq 'http://example.com/emoji.png' + end + end + + context 'with custom emoji but uri is not valid' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/invalid', + type: 'Emoji', + icon: { + url: 'http://foo.bar/emoji2.png', + }, + name: 'tinking', + license: 'Good for using darwin', + } + end + + before do + sender.update(domain: 'ohagi.com') + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', shortcode: 'tinking', image_remote_url: 'http://example.com/emoji.png') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + end + end + context 'with custom emoji but invalid id' do let(:content) { ':tinking:' } let(:tag) do @@ -175,13 +280,14 @@ let(:content) { ':tinking:' } let(:tag) do { - id: 'aaa', + id: 'https://cb6e6126.ngrok.io/aaa', type: 'Emoji', domain: Rails.configuration.x.local_domain, icon: { url: 'http://example.com/emoji.png', }, name: 'tinking', + license: 'Ohagi but everyone', } end @@ -196,8 +302,14 @@ expect(subject.first.custom_emoji).to_not be_nil expect(subject.first.custom_emoji.shortcode).to eq 'tinking' expect(subject.first.custom_emoji.domain).to be_nil + expect(subject.first.custom_emoji.license).to eq 'Everyone but Ohagi' expect(sender.favourited?(status)).to be false end + + it 'not change license' do + expect(subject.first.custom_emoji.reload.license).to eq 'Everyone but Ohagi' + expect(subject.first.custom_emoji.reload.uri).to be_nil + end end context 'with unicode emoji and reject_media enabled' do diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb index feda725654679f..cd12c5bd0cae82 100644 --- a/spec/lib/activitypub/activity/undo_spec.rb +++ b/spec/lib/activitypub/activity/undo_spec.rb @@ -5,7 +5,8 @@ RSpec.describe ActivityPub::Activity::Undo do subject { described_class.new(json, sender) } - let(:sender) { Fabricate(:account, domain: 'example.com') } + let(:sender_domain) { 'example.com' } + let(:sender) { Fabricate(:account, domain: sender_domain) } let(:json) do { @@ -218,6 +219,8 @@ let(:status) { Fabricate(:status) } let(:content) { '😀' } + let(:name) { '😀' } + let(:tag) { nil } let(:object_json) do { id: 'bar', @@ -225,20 +228,69 @@ actor: ActivityPub::TagManager.instance.uri_for(sender), object: ActivityPub::TagManager.instance.uri_for(status), content: content, + tag: tag, } end + let(:custom_emoji) { nil } before do Fabricate(:favourite, account: sender, status: status) - Fabricate(:emoji_reaction, account: sender, status: status, name: content) + Fabricate(:emoji_reaction, account: sender, status: status, name: name, custom_emoji: custom_emoji) end it 'delete emoji reaction' do subject.perform - reaction = EmojiReaction.find_by(account: sender, status: status) - expect(reaction).to be_nil + expect(sender.emoji_reacted?(status)).to be false expect(sender.favourited?(status)).to be true end + + context 'with custom emoji' do + let(:content) { ':tinking:' } + let(:name) { 'tinking' } + let(:tag) do + { + id: custom_emoji_uri, + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: name, + } + end + let(:custom_emoji_domain) { 'example.com' } + let(:custom_emoji_uri) { "https://#{custom_emoji_domain}/aaa" } + let(:custom_emoji) { Fabricate(:custom_emoji, uri: custom_emoji_uri, domain: custom_emoji_domain, shortcode: name) } + + it 'delete emoji reaction' do + subject.perform + expect(sender.emoji_reacted?(status)).to be false + expect(sender.favourited?(status)).to be true + end + + context 'when third server' do + let(:sender_domain) { 'foo.bar' } + + it 'delete emoji reaction' do + subject.perform + expect(sender.emoji_reacted?(status)).to be false + expect(sender.favourited?(status)).to be true + end + end + + context 'when local' do + let(:custom_emoji_domain) { 'cb6e6126.ngrok.io' } + + before do + custom_emoji.update(domain: nil, uri: nil) + end + + it 'delete emoji reaction' do + subject.perform + expect(sender.emoji_reacted?(status)).to be false + expect(sender.favourited?(status)).to be true + end + end + end end end end diff --git a/spec/lib/activitypub/linked_data_signature_spec.rb b/spec/lib/activitypub/linked_data_signature_spec.rb index 6a6ad1a706430a..d5b713b347ad20 100644 --- a/spec/lib/activitypub/linked_data_signature_spec.rb +++ b/spec/lib/activitypub/linked_data_signature_spec.rb @@ -18,10 +18,6 @@ let(:json) { raw_json.merge('signature' => signature) } - before do - stub_jsonld_contexts! - end - describe '#verify_actor!' do context 'when signature matches' do let(:raw_signature) do diff --git a/spec/lib/link_details_extractor_spec.rb b/spec/lib/link_details_extractor_spec.rb index 599bc4e6de2f60..8c485cef2afb5b 100644 --- a/spec/lib/link_details_extractor_spec.rb +++ b/spec/lib/link_details_extractor_spec.rb @@ -82,6 +82,10 @@ 'name' => 'Pet News', 'url' => 'https://example.com', }, + 'inLanguage' => { + name: 'English', + alternateName: 'en', + }, }.to_json end @@ -115,6 +119,12 @@ expect(subject.provider_name).to eq 'Pet News' end end + + describe '#language' do + it 'returns the language from structured data' do + expect(subject.language).to eq 'en' + end + end end context 'when is wrapped in CDATA tags' do diff --git a/spec/lib/mastodon/cli/accounts_spec.rb b/spec/lib/mastodon/cli/accounts_spec.rb index a263d673de760b..5ecea5ea162b4e 100644 --- a/spec/lib/mastodon/cli/accounts_spec.rb +++ b/spec/lib/mastodon/cli/accounts_spec.rb @@ -6,6 +6,24 @@ describe Mastodon::CLI::Accounts do let(:cli) { described_class.new } + # `parallelize_with_progress` cannot run in transactions, so instead, + # stub it with an alternative implementation that runs sequentially + # and can run in transactions. + def stub_parallelize_with_progress! + allow(cli).to receive(:parallelize_with_progress) do |scope, &block| + aggregate = 0 + total = 0 + + scope.reorder(nil).find_each do |record| + value = block.call(record) + aggregate += value if value.is_a?(Integer) + total += 1 + end + + [total, aggregate] + end + end + describe '.exit_on_failure?' do it 'returns true' do expect(described_class.exit_on_failure?).to be true @@ -551,20 +569,15 @@ let!(:follower_rony) { Fabricate(:account, username: 'rony') } let!(:follower_charles) { Fabricate(:account, username: 'charles') } let(:follow_service) { instance_double(FollowService, call: nil) } - let(:scope) { Account.local.without_suspended } before do - allow(cli).to receive(:parallelize_with_progress).and_yield(follower_bob) - .and_yield(follower_rony) - .and_yield(follower_charles) - .and_return([3, nil]) allow(FollowService).to receive(:new).and_return(follow_service) + stub_parallelize_with_progress! end it 'makes all local accounts follow the target account' do cli.follow(target_account.username) - expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(follow_service).to have_received(:call).with(follower_bob, target_account, any_args).once expect(follow_service).to have_received(:call).with(follower_rony, target_account, any_args).once expect(follow_service).to have_received(:call).with(follower_charles, target_account, any_args).once @@ -572,7 +585,7 @@ it 'displays a successful message' do expect { cli.follow(target_account.username) }.to output( - a_string_including('OK, followed target from 3 accounts') + a_string_including("OK, followed target from #{Account.local.count} accounts") ).to_stdout end end @@ -592,26 +605,21 @@ context 'when the given username is found' do let!(:target_account) { Fabricate(:account) } - let!(:follower_chris) { Fabricate(:account, username: 'chris') } - let!(:follower_rambo) { Fabricate(:account, username: 'rambo') } - let!(:follower_ana) { Fabricate(:account, username: 'ana') } + let!(:follower_chris) { Fabricate(:account, username: 'chris', domain: nil) } + let!(:follower_rambo) { Fabricate(:account, username: 'rambo', domain: nil) } + let!(:follower_ana) { Fabricate(:account, username: 'ana', domain: nil) } let(:unfollow_service) { instance_double(UnfollowService, call: nil) } - let(:scope) { target_account.followers.local } before do accounts = [follower_chris, follower_rambo, follower_ana] - accounts.each { |account| target_account.follow!(account) } - allow(cli).to receive(:parallelize_with_progress).and_yield(follower_chris) - .and_yield(follower_rambo) - .and_yield(follower_ana) - .and_return([3, nil]) + accounts.each { |account| account.follow!(target_account) } allow(UnfollowService).to receive(:new).and_return(unfollow_service) + stub_parallelize_with_progress! end it 'makes all local accounts unfollow the target account' do cli.unfollow(target_account.username) - expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(unfollow_service).to have_received(:call).with(follower_chris, target_account).once expect(unfollow_service).to have_received(:call).with(follower_rambo, target_account).once expect(unfollow_service).to have_received(:call).with(follower_ana, target_account).once @@ -671,6 +679,8 @@ let(:scope) { Account.remote } before do + # TODO: we should be using `stub_parallelize_with_progress!` but + # this makes the assertions harder to write allow(cli).to receive(:parallelize_with_progress).and_yield(remote_account_example_com) .and_yield(account_example_net) .and_return([2, nil]) @@ -1112,26 +1122,19 @@ describe '#cull' do let(:delete_account_service) { instance_double(DeleteAccountService, call: nil) } - let!(:tom) { Fabricate(:account, updated_at: 30.days.ago, username: 'tom', uri: 'https://example.com/users/tom', domain: 'example.com') } - let!(:bob) { Fabricate(:account, updated_at: 30.days.ago, last_webfingered_at: nil, username: 'bob', uri: 'https://example.org/users/bob', domain: 'example.org') } - let!(:gon) { Fabricate(:account, updated_at: 15.days.ago, last_webfingered_at: 15.days.ago, username: 'gon', uri: 'https://example.net/users/gon', domain: 'example.net') } - let!(:ana) { Fabricate(:account, username: 'ana', uri: 'https://example.com/users/ana', domain: 'example.com') } - let!(:tales) { Fabricate(:account, updated_at: 10.days.ago, last_webfingered_at: nil, username: 'tales', uri: 'https://example.net/users/tales', domain: 'example.net') } + let!(:tom) { Fabricate(:account, updated_at: 30.days.ago, username: 'tom', uri: 'https://example.com/users/tom', domain: 'example.com', protocol: :activitypub) } + let!(:bob) { Fabricate(:account, updated_at: 30.days.ago, last_webfingered_at: nil, username: 'bob', uri: 'https://example.org/users/bob', domain: 'example.org', protocol: :activitypub) } + let!(:gon) { Fabricate(:account, updated_at: 15.days.ago, last_webfingered_at: 15.days.ago, username: 'gon', uri: 'https://example.net/users/gon', domain: 'example.net', protocol: :activitypub) } + let!(:ana) { Fabricate(:account, username: 'ana', uri: 'https://example.com/users/ana', domain: 'example.com', protocol: :activitypub) } + let!(:tales) { Fabricate(:account, updated_at: 10.days.ago, last_webfingered_at: nil, username: 'tales', uri: 'https://example.net/users/tales', domain: 'example.net', protocol: :activitypub) } before do allow(DeleteAccountService).to receive(:new).and_return(delete_account_service) end context 'when no domain is specified' do - let(:scope) { Account.remote.where(protocol: :activitypub).partitioned } - before do - allow(cli).to receive(:parallelize_with_progress).and_yield(tom) - .and_yield(bob) - .and_yield(gon) - .and_yield(ana) - .and_yield(tales) - .and_return([5, 3]) + stub_parallelize_with_progress! stub_request(:head, 'https://example.org/users/bob').to_return(status: 404) stub_request(:head, 'https://example.net/users/gon').to_return(status: 410) stub_request(:head, 'https://example.net/users/tales').to_return(status: 200) @@ -1140,7 +1143,6 @@ it 'deletes all inactive remote accounts that longer exist in the origin server' do cli.cull - expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(delete_account_service).to have_received(:call).with(bob, reserve_username: false).once expect(delete_account_service).to have_received(:call).with(gon, reserve_username: false).once end @@ -1148,35 +1150,27 @@ it 'does not delete any active remote account that still exists in the origin server' do cli.cull - expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(delete_account_service).to_not have_received(:call).with(tom, reserve_username: false) expect(delete_account_service).to_not have_received(:call).with(ana, reserve_username: false) expect(delete_account_service).to_not have_received(:call).with(tales, reserve_username: false) end it 'touches inactive remote accounts that have not been deleted' do - allow(tales).to receive(:touch) - - cli.cull - - expect(tales).to have_received(:touch).once + expect { cli.cull }.to(change { tales.reload.updated_at }) end it 'displays the summary correctly' do expect { cli.cull }.to output( - a_string_including('Visited 5 accounts, removed 3') + a_string_including('Visited 5 accounts, removed 2') ).to_stdout end end context 'when a domain is specified' do let(:domain) { 'example.net' } - let(:scope) { Account.remote.where(protocol: :activitypub, domain: domain).partitioned } before do - allow(cli).to receive(:parallelize_with_progress).and_yield(gon) - .and_yield(tales) - .and_return([2, 2]) + stub_parallelize_with_progress! stub_request(:head, 'https://example.net/users/gon').to_return(status: 410) stub_request(:head, 'https://example.net/users/tales').to_return(status: 404) end @@ -1184,13 +1178,12 @@ it 'deletes inactive remote accounts that longer exist in the specified domain' do cli.cull(domain) - expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(delete_account_service).to have_received(:call).with(gon, reserve_username: false).once expect(delete_account_service).to have_received(:call).with(tales, reserve_username: false).once end it 'displays the summary correctly' do - expect { cli.cull }.to output( + expect { cli.cull(domain) }.to output( a_string_including('Visited 2 accounts, removed 2') ).to_stdout end @@ -1199,7 +1192,9 @@ context 'when a domain is unavailable' do shared_examples 'an unavailable domain' do before do - allow(cli).to receive(:parallelize_with_progress).and_yield(tales).and_return([1, 0]) + stub_parallelize_with_progress! + stub_request(:head, 'https://example.org/users/bob').to_return(status: 200) + stub_request(:head, 'https://example.net/users/gon').to_return(status: 200) end it 'skips accounts from the unavailable domain' do @@ -1210,7 +1205,7 @@ it 'displays the summary correctly' do expect { cli.cull }.to output( - a_string_including("Visited 1 accounts, removed 0\nThe following domains were not available during the check:\n example.net") + a_string_including("Visited 5 accounts, removed 0\nThe following domains were not available during the check:\n example.net") ).to_stdout end end diff --git a/spec/lib/mastodon/cli/media_spec.rb b/spec/lib/mastodon/cli/media_spec.rb index 29f7d424a9cbfe..9543640e967667 100644 --- a/spec/lib/mastodon/cli/media_spec.rb +++ b/spec/lib/mastodon/cli/media_spec.rb @@ -4,9 +4,78 @@ require 'mastodon/cli/media' describe Mastodon::CLI::Media do + let(:cli) { described_class.new } + describe '.exit_on_failure?' do it 'returns true' do expect(described_class.exit_on_failure?).to be true end end + + describe '#remove' do + context 'with --prune-profiles and --remove-headers' do + let(:options) { { prune_profiles: true, remove_headers: true } } + + it 'warns about usage and exits' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('--prune-profiles and --remove-headers should not be specified simultaneously') + ).to_stdout.and raise_error(SystemExit) + end + end + + context 'with --include-follows but not including --prune-profiles and --remove-headers' do + let(:options) { { include_follows: true } } + + it 'warns about usage and exits' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('--include-follows can only be used with --prune-profiles or --remove-headers') + ).to_stdout.and raise_error(SystemExit) + end + end + + context 'with a relevant account' do + let!(:account) do + Fabricate(:account, domain: 'example.com', updated_at: 1.month.ago, last_webfingered_at: 1.month.ago, avatar: attachment_fixture('attachment.jpg'), header: attachment_fixture('attachment.jpg')) + end + + context 'with --prune-profiles' do + let(:options) { { prune_profiles: true } } + + it 'removes account avatars' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('Visited 1') + ).to_stdout + + expect(account.reload.avatar).to be_blank + end + end + + context 'with --remove-headers' do + let(:options) { { remove_headers: true } } + + it 'removes account header' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('Visited 1') + ).to_stdout + + expect(account.reload.header).to be_blank + end + end + end + + context 'with a relevant media attachment' do + let!(:media_attachment) { Fabricate(:media_attachment, remote_url: 'https://example.com/image.jpg', created_at: 1.month.ago) } + + context 'without options' do + it 'removes account avatars' do + expect { cli.invoke(:remove) }.to output( + a_string_including('Removed 1') + ).to_stdout + + expect(media_attachment.reload.file).to be_blank + expect(media_attachment.reload.thumbnail).to be_blank + end + end + end + end end diff --git a/spec/lib/mastodon/cli/preview_cards_spec.rb b/spec/lib/mastodon/cli/preview_cards_spec.rb index b4b018b3be5cb5..1e064ed58ed0cf 100644 --- a/spec/lib/mastodon/cli/preview_cards_spec.rb +++ b/spec/lib/mastodon/cli/preview_cards_spec.rb @@ -4,9 +4,52 @@ require 'mastodon/cli/preview_cards' describe Mastodon::CLI::PreviewCards do + let(:cli) { described_class.new } + describe '.exit_on_failure?' do it 'returns true' do expect(described_class.exit_on_failure?).to be true end end + + describe '#remove' do + context 'with relevant preview cards' do + before do + Fabricate(:preview_card, updated_at: 10.years.ago, type: :link) + Fabricate(:preview_card, updated_at: 10.months.ago, type: :photo) + Fabricate(:preview_card, updated_at: 10.days.ago, type: :photo) + end + + context 'with no arguments' do + it 'deletes thumbnails for local preview cards' do + expect { cli.invoke(:remove) }.to output( + a_string_including('Removed 2 preview cards') + .and(a_string_including('approx. 119 KB')) + ).to_stdout + end + end + + context 'with the --link option' do + let(:options) { { link: true } } + + it 'deletes thumbnails for local preview cards' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('Removed 1 link-type preview cards') + .and(a_string_including('approx. 59.6 KB')) + ).to_stdout + end + end + + context 'with the --days option' do + let(:options) { { days: 365 } } + + it 'deletes thumbnails for local preview cards' do + expect { cli.invoke(:remove, [], options) }.to output( + a_string_including('Removed 1 preview cards') + .and(a_string_including('approx. 59.6 KB')) + ).to_stdout + end + end + end + end end diff --git a/spec/lib/mastodon/cli/statuses_spec.rb b/spec/lib/mastodon/cli/statuses_spec.rb index 2430a8841644b8..38ebcd99347103 100644 --- a/spec/lib/mastodon/cli/statuses_spec.rb +++ b/spec/lib/mastodon/cli/statuses_spec.rb @@ -4,9 +4,31 @@ require 'mastodon/cli/statuses' describe Mastodon::CLI::Statuses do + let(:cli) { described_class.new } + describe '.exit_on_failure?' do it 'returns true' do expect(described_class.exit_on_failure?).to be true end end + + describe '#remove', use_transactional_tests: false do + context 'with small batch size' do + let(:options) { { batch_size: 0 } } + + it 'exits with error message' do + expect { cli.invoke :remove, [], options }.to output( + a_string_including('Cannot run') + ).to_stdout.and raise_error(SystemExit) + end + end + + context 'with default batch size' do + it 'removes unreferenced statuses' do + expect { cli.invoke :remove }.to output( + a_string_including('Done after') + ).to_stdout + end + end + end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index c13d57c7614cc1..5cdc31ecd94358 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -246,6 +246,207 @@ end end + describe '#allow_emoji_reaction?' do + let(:policy) { :allow } + let(:reactioned) { Fabricate(:user, settings: { emoji_reaction_policy: policy }).account } + let(:followee) { Fabricate(:account) } + let(:follower) { Fabricate(:account) } + let(:mutual) { Fabricate(:account) } + let(:anyone) { Fabricate(:account) } + + before do + follower.follow!(reactioned) + reactioned.follow!(followee) + mutual.follow!(reactioned) + reactioned.follow!(mutual) + end + + context 'when policy is arrow' do + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be true + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be true + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be true + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be true + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + end + end + + context 'when policy is following_only' do + let(:policy) { :following_only } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be true + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be false + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be true + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + end + end + + context 'when policy is followers_only' do + let(:policy) { :followers_only } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be false + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be true + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be true + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + end + end + + context 'when policy is mutuals_only' do + let(:policy) { :mutuals_only } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be false + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be false + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be true + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + end + end + + context 'when policy is outside_only' do + let(:policy) { :outside_only } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be true + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be true + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be true + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + end + end + + context 'when policy is block' do + let(:policy) { :block } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be false + end + + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be false + end + + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be false + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be false + end + end + + context 'when reactioned is remote user' do + let(:reactioned) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor', settings: { emoji_reaction_policy: :following_only }) } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be true + end + end + + context 'when reactor is remote user' do + let(:anyone) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor/anyone') } + let(:policy) { :following_only } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be false + end + + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be true + end + end + + context 'when both are remote user' do + let(:reactioned) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor', settings: { emoji_reaction_policy: policy }) } + let(:anyone) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor/anyone') } + let(:followee) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor/followee') } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be true + end + + context 'with blocking' do + let(:policy) { :block } + + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be true + end + end + end + end + describe '#favourited?' do subject { Fabricate(:account) } diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 8ae04ca41f8188..5aa5548cc83a1f 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -29,4 +29,23 @@ end end end + + describe 'validations' do + context 'when valid' do + let(:poll) { Fabricate.build(:poll) } + + it 'is valid with valid attributes' do + expect(poll).to be_valid + end + end + + context 'when not valid' do + let(:poll) { Fabricate.build(:poll, expires_at: nil) } + + it 'is invalid without an expire date' do + poll.valid? + expect(poll).to model_have_error_on_field(:expires_at) + end + end + end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 7b8dccb6a0b34c..8d9677f6ced70f 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -54,26 +54,6 @@ def sign_in(resource, _deprecated = nil, scope: nil) end end -module SignedRequestHelpers - def get(path, headers: nil, sign_with: nil, **args) - return super path, headers: headers, **args if sign_with.nil? - - headers ||= {} - headers['Date'] = Time.now.utc.httpdate - headers['Host'] = ENV.fetch('LOCAL_DOMAIN') - signed_headers = headers.merge('(request-target)' => "get #{path}").slice('(request-target)', 'Host', 'Date') - - key_id = ActivityPub::TagManager.instance.key_uri_for(sign_with) - keypair = sign_with.keypair - signed_string = signed_headers.map { |key, value| "#{key.downcase}: #{value}" }.join("\n") - signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) - - headers['Signature'] = "keyId=\"#{key_id}\",algorithm=\"rsa-sha256\",headers=\"#{signed_headers.keys.join(' ').downcase}\",signature=\"#{signature}\"" - - super path, headers: headers, **args - end -end - RSpec.configure do |config| # This is set before running spec:system, see lib/tasks/tests.rake config.filter_run_excluding type: lambda { |type| @@ -105,6 +85,12 @@ def get(path, headers: nil, sign_with: nil, **args) config.include Redisable config.include SignedRequestHelpers, type: :request + config.around(:each, use_transactional_tests: false) do |example| + self.use_transactional_tests = false + example.run + self.use_transactional_tests = true + end + config.before :each, type: :cli do stub_stdout stub_reset_connection_pools @@ -114,14 +100,6 @@ def get(path, headers: nil, sign_with: nil, **args) Capybara.current_driver = :rack_test end - config.before :each, type: :controller do - stub_jsonld_contexts! - end - - config.before :each, type: :service do - stub_jsonld_contexts! - end - config.before :suite do if RUN_SYSTEM_SPECS Webpacker.compile @@ -212,9 +190,3 @@ def stub_reset_connection_pools allow(ActiveRecord::Base).to receive(:establish_connection) allow(RedisConfiguration).to receive(:establish_pool) end - -def stub_jsonld_contexts! - stub_request(:get, 'https://www.w3.org/ns/activitystreams').to_return(request_fixture('json-ld.activitystreams.txt')) - stub_request(:get, 'https://w3id.org/identity/v1').to_return(request_fixture('json-ld.identity.txt')) - stub_request(:get, 'https://w3id.org/security/v1').to_return(request_fixture('json-ld.security.txt')) -end diff --git a/spec/requests/api/v1/admin/account_actions_spec.rb b/spec/requests/api/v1/admin/account_actions_spec.rb index 9295d262d61d5e..bdf1f08e43b75c 100644 --- a/spec/requests/api/v1/admin/account_actions_spec.rb +++ b/spec/requests/api/v1/admin/account_actions_spec.rb @@ -51,14 +51,9 @@ it_behaves_like 'a successful notification delivery' it_behaves_like 'a successful logged action', :disable, :user - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - it 'disables the target account' do expect { subject }.to change { target_account.reload.user_disabled? }.from(false).to(true) + expect(response).to have_http_status(200) end end @@ -70,14 +65,9 @@ it_behaves_like 'a successful notification delivery' it_behaves_like 'a successful logged action', :sensitive, :account - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - it 'marks the target account as sensitive' do expect { subject }.to change { target_account.reload.sensitized? }.from(false).to(true) + expect(response).to have_http_status(200) end end @@ -89,14 +79,9 @@ it_behaves_like 'a successful notification delivery' it_behaves_like 'a successful logged action', :silence, :account - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - it 'marks the target account as silenced' do expect { subject }.to change { target_account.reload.silenced? }.from(false).to(true) + expect(response).to have_http_status(200) end end @@ -108,14 +93,9 @@ it_behaves_like 'a successful notification delivery' it_behaves_like 'a successful logged action', :suspend, :account - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - it 'marks the target account as suspended' do expect { subject }.to change { target_account.reload.suspended? }.from(false).to(true) + expect(response).to have_http_status(200) end end diff --git a/spec/requests/api/v1/admin/accounts_spec.rb b/spec/requests/api/v1/admin/accounts_spec.rb new file mode 100644 index 00000000000000..8e158f623d690c --- /dev/null +++ b/spec/requests/api/v1/admin/accounts_spec.rb @@ -0,0 +1,401 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Accounts' do + let(:role) { UserRole.find_by(name: 'Admin') } + let(:user) { Fabricate(:user, role: role) } + let(:scopes) { 'admin:read:accounts admin:write:accounts' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/admin/accounts' do + subject do + get '/api/v1/admin/accounts', headers: headers, params: params + end + + shared_examples 'a successful request' do + it 'returns the correct accounts', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json.pluck(:id)).to match_array(expected_results.map { |a| a.id.to_s }) + end + end + + let!(:remote_account) { Fabricate(:account, domain: 'example.org') } + let!(:suspended_account) { Fabricate(:account, suspended: true) } + let!(:disabled_account) { Fabricate(:user, disabled: true).account } + let!(:pending_account) { Fabricate(:user, approved: false).account } + let!(:admin_account) { user.account } + let(:params) { {} } + + it_behaves_like 'forbidden for wrong scope', 'read read:accounts admin:write admin:write:accounts' + it_behaves_like 'forbidden for wrong role', '' + + context 'when requesting active local staff accounts' do + let(:expected_results) { [admin_account] } + let(:params) { { active: 'true', local: 'true', staff: 'true' } } + + it_behaves_like 'a successful request' + end + + context 'when requesting remote accounts from a specified domain' do + let(:expected_results) { [remote_account] } + let(:params) { { by_domain: 'example.org', remote: 'true' } } + + before do + Fabricate(:account, domain: 'foo.bar') + end + + it_behaves_like 'a successful request' + end + + context 'when requesting suspended accounts' do + let(:expected_results) { [suspended_account] } + let(:params) { { suspended: 'true' } } + + before do + Fabricate(:account, domain: 'foo.bar', suspended: true) + end + + it_behaves_like 'a successful request' + end + + context 'when requesting disabled accounts' do + let(:expected_results) { [disabled_account] } + let(:params) { { disabled: 'true' } } + + it_behaves_like 'a successful request' + end + + context 'when requesting pending accounts' do + let(:expected_results) { [pending_account] } + let(:params) { { pending: 'true' } } + + before do + pending_account.user.update(approved: false) + end + + it_behaves_like 'a successful request' + end + + context 'when no parameter is given' do + let(:expected_results) { [disabled_account, pending_account, admin_account] } + + it_behaves_like 'a successful request' + end + + context 'with limit param' do + let(:params) { { limit: 2 } } + + it 'returns only the requested number of accounts', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json.size).to eq(params[:limit]) + end + end + end + + describe 'GET /api/v1/admin/accounts/:id' do + subject do + get "/api/v1/admin/accounts/#{account.id}", headers: headers + end + + let(:account) { Fabricate(:account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:accounts admin:write admin:write:accounts' + it_behaves_like 'forbidden for wrong role', '' + + it 'returns the requested account successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match( + a_hash_including(id: account.id.to_s, username: account.username, email: account.user.email) + ) + end + + context 'when the account is not found' do + it 'returns http not found' do + get '/api/v1/admin/accounts/-1', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/approve' do + subject do + post "/api/v1/admin/accounts/#{account.id}/approve", headers: headers + end + + let(:account) { Fabricate(:account) } + + context 'when the account is pending' do + before do + account.user.update(approved: false) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'approves the user successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(account.reload.user_approved?).to be(true) + end + + it 'logs action', :aggregate_failures do + subject + + log_item = Admin::ActionLog.last + + expect(log_item).to be_present + expect(log_item.action).to eq :approve + expect(log_item.account_id).to eq user.account_id + expect(log_item.target_id).to eq account.user.id + end + end + + context 'when the account is already approved' do + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/approve', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/reject' do + subject do + post "/api/v1/admin/accounts/#{account.id}/reject", headers: headers + end + + let(:account) { Fabricate(:account) } + + context 'when the account is pending' do + before do + account.user.update(approved: false) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'removes the user successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(User.where(id: account.user.id)).to_not exist + end + + it 'logs action', :aggregate_failures do + subject + + log_item = Admin::ActionLog.last + + expect(log_item).to be_present + expect(log_item.action).to eq :reject + expect(log_item.account_id).to eq user.account_id + expect(log_item.target_id).to eq account.user.id + end + end + + context 'when account is already approved' do + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/reject', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/enable' do + subject do + post "/api/v1/admin/accounts/#{account.id}/enable", headers: headers + end + + let(:account) { Fabricate(:account) } + + before do + account.user.update(disabled: true) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'enables the user successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(account.reload.user_disabled?).to be false + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/enable', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/unsuspend' do + subject do + post "/api/v1/admin/accounts/#{account.id}/unsuspend", headers: headers + end + + let(:account) { Fabricate(:account) } + + context 'when the account is suspended' do + before do + account.suspend! + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'unsuspends the account successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(account.reload.suspended?).to be false + end + end + + context 'when the account is not suspended' do + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/unsuspend', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/unsensitive' do + subject do + post "/api/v1/admin/accounts/#{account.id}/unsensitive", headers: headers + end + + let(:account) { Fabricate(:account) } + + before do + account.update(sensitized_at: 10.days.ago) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'unsensitizes the account successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(account.reload.sensitized?).to be false + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/unsensitive', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/admin/accounts/:id/unsilence' do + subject do + post "/api/v1/admin/accounts/#{account.id}/unsilence", headers: headers + end + + let(:account) { Fabricate(:account) } + + before do + account.update(silenced_at: 3.days.ago) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'unsilences the account successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(account.reload.silenced?).to be false + end + + context 'when the account is not found' do + it 'returns http not found' do + post '/api/v1/admin/accounts/-1/unsilence', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'DELETE /api/v1/admin/accounts/:id' do + subject do + delete "/api/v1/admin/accounts/#{account.id}", headers: headers + end + + let(:account) { Fabricate(:account) } + + context 'when account is suspended' do + before do + account.suspend! + end + + it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' + it_behaves_like 'forbidden for wrong role', '' + + it 'deletes the account successfully', :aggregate_failures do + allow(Admin::AccountDeletionWorker).to receive(:perform_async) + subject + + expect(response).to have_http_status(200) + expect(Admin::AccountDeletionWorker).to have_received(:perform_async).with(account.id).once + end + end + + context 'when account is not suspended' do + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + + context 'when the account is not found' do + it 'returns http not found' do + delete '/api/v1/admin/accounts/-1', headers: headers + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb index 4382cb84e545f2..3f33b50f39ab1f 100644 --- a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb +++ b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb @@ -92,15 +92,10 @@ it_behaves_like 'forbidden for wrong role', 'Moderator' context 'when the requested canonical email block exists' do - it 'returns http success' do + it 'returns the requested canonical email block data correctly', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the requested canonical email block data correctly' do - subject - json = body_as_json expect(json[:id]).to eq(canonical_email_block.id.to_s) @@ -142,29 +137,19 @@ context 'when there is a matching canonical email block' do let!(:canonical_email_block) { CanonicalEmailBlock.create(params) } - it 'returns http success' do + it 'returns the expected canonical email hash', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the expected canonical email hash' do - subject - expect(body_as_json[0][:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end end context 'when there is no matching canonical email block' do - it 'returns http success' do + it 'returns an empty list', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns an empty list' do - subject - expect(body_as_json).to be_empty end end @@ -183,15 +168,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the canonical_email_hash correctly', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the canonical_email_hash correctly' do - subject - expect(body_as_json[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end @@ -208,15 +188,10 @@ context 'when the canonical_email_hash param is provided instead of email' do let(:params) { { canonical_email_hash: 'dd501ce4e6b08698f19df96f2f15737e48a75660b1fa79b6ff58ea25ee4851a4' } } - it 'returns http success' do + it 'returns the correct canonical_email_hash', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct canonical_email_hash' do - subject - expect(body_as_json[:canonical_email_hash]).to eq(params[:canonical_email_hash]) end end @@ -224,15 +199,10 @@ context 'when both email and canonical_email_hash params are provided' do let(:params) { { email: 'example@email.com', canonical_email_hash: 'dd501ce4e6b08698f19df96f2f15737e48a75660b1fa79b6ff58ea25ee4851a4' } } - it 'returns http success' do + it 'ignores the canonical_email_hash param', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'ignores the canonical_email_hash param' do - subject - expect(body_as_json[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end end @@ -262,15 +232,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'deletes the canonical email block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'deletes the canonical email block' do - subject - expect(CanonicalEmailBlock.find_by(id: canonical_email_block.id)).to be_nil end diff --git a/spec/requests/api/v1/admin/domain_allows_spec.rb b/spec/requests/api/v1/admin/domain_allows_spec.rb index 96000e3ef4832c..6db1ab6e307a17 100644 --- a/spec/requests/api/v1/admin/domain_allows_spec.rb +++ b/spec/requests/api/v1/admin/domain_allows_spec.rb @@ -75,15 +75,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the expected allowed domain name', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the expected allowed domain name' do - subject - expect(body_as_json[:domain]).to eq domain_allow.domain end @@ -108,21 +103,11 @@ it_behaves_like 'forbidden for wrong role', 'Moderator' context 'with a valid domain name' do - it 'returns http success' do + it 'returns the expected domain name', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the expected domain name' do - subject - expect(body_as_json[:domain]).to eq 'foo.bar.com' - end - - it 'creates a domain allow' do - subject - expect(DomainAllow.find_by(domain: 'foo.bar.com')).to be_present end end @@ -171,15 +156,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'deletes the allowed domain', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'deletes the allowed domain' do - subject - expect(DomainAllow.find_by(id: domain_allow.id)).to be_nil end diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 1432e5262356e3..1041fdb713b910 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -45,22 +45,6 @@ ] end let(:expected_responde) do - domain_blocks.map do |domain_block| - { - id: domain_block.id.to_s, - domain: domain_block.domain, - created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'), - severity: domain_block.severity.to_s, - reject_media: domain_block.reject_media, - reject_reports: domain_block.reject_reports, - private_comment: domain_block.private_comment, - public_comment: domain_block.public_comment, - obfuscate: domain_block.obfuscate, - } - end - end - - let(:expected_responde_with_kb_custom) do domain_blocks.map do |domain_block| { id: domain_block.id.to_s, @@ -84,6 +68,7 @@ reject_send_public_unlisted: domain_block.reject_send_public_unlisted, reject_send_sensitive: domain_block.reject_send_sensitive, reject_straight_follow: domain_block.reject_straight_follow, + reject_friend: domain_block.reject_friend, } end end @@ -91,7 +76,7 @@ it 'returns the expected domain blocks' do subject - expect(body_as_json).to match_array(expected_responde_with_kb_custom) + expect(body_as_json).to match_array(expected_responde) end context 'with limit param' do @@ -136,6 +121,7 @@ reject_send_public_unlisted: domain_block.reject_send_public_unlisted, reject_send_sensitive: domain_block.reject_send_sensitive, reject_straight_follow: domain_block.reject_straight_follow, + reject_friend: domain_block.reject_friend, } end @@ -143,16 +129,36 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the expected domain block content', :aggregate_failures do # rubocop:disable RSpec/ExampleLength subject expect(response).to have_http_status(200) - end - - it 'returns the expected domain block content' do - subject - - expect(body_as_json).to eq(expected_response) + expect(body_as_json).to eq( + { + id: domain_block.id.to_s, + domain: domain_block.domain, + created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'), + severity: domain_block.severity.to_s, + reject_media: domain_block.reject_media, + reject_reports: domain_block.reject_reports, + private_comment: domain_block.private_comment, + public_comment: domain_block.public_comment, + obfuscate: domain_block.obfuscate, + reject_favourite: domain_block.reject_favourite, + reject_hashtag: domain_block.reject_hashtag, + detect_invalid_subscription: domain_block.detect_invalid_subscription, + reject_new_follow: domain_block.reject_new_follow, + reject_reply: domain_block.reject_reply, + reject_reply_exclude_followers: domain_block.reject_reply_exclude_followers, + reject_send_dissubscribable: domain_block.reject_send_dissubscribable, + reject_send_media: domain_block.reject_send_media, + reject_send_not_public_searchability: domain_block.reject_send_not_public_searchability, + reject_send_public_unlisted: domain_block.reject_send_public_unlisted, + reject_send_sensitive: domain_block.reject_send_sensitive, + reject_straight_follow: domain_block.reject_straight_follow, + reject_friend: domain_block.reject_friend, + } + ) end context 'when the requested domain block does not exist' do @@ -175,27 +181,18 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'returns expected domain name and severity' do + it 'returns expected domain name and severity', :aggregate_failures do subject body = body_as_json + expect(response).to have_http_status(200) expect(body).to match a_hash_including( { domain: 'foo.bar.com', severity: 'silence', } ) - end - - it 'creates a domain block' do - subject expect(DomainBlock.find_by(domain: 'foo.bar.com')).to be_present end @@ -205,15 +202,10 @@ Fabricate(:domain_block, domain: 'bar.com', severity: :suspend) end - it 'returns http unprocessable entity' do + it 'returns existing domain block in error', :aggregate_failures do subject expect(response).to have_http_status(422) - end - - it 'returns existing domain block in error' do - subject - expect(body_as_json[:existing_domain_block][:domain]).to eq('bar.com') end end @@ -241,15 +233,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the updated domain block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the updated domain block' do - subject - expect(body_as_json).to match a_hash_including( { id: domain_block.id.to_s, @@ -283,15 +270,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'deletes the domain block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'deletes the domain block' do - subject - expect(DomainBlock.find_by(id: domain_block.id)).to be_nil end diff --git a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb index d512def86690d0..16656e0202c2f2 100644 --- a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb @@ -93,15 +93,10 @@ it_behaves_like 'forbidden for wrong role', 'Moderator' context 'when email domain block exists' do - it 'returns http success' do + it 'returns the correct blocked domain', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct blocked domain' do - subject - expect(body_as_json[:domain]).to eq(email_domain_block.domain) end end @@ -126,15 +121,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the correct blocked email domain', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct blocked email domain' do - subject - expect(body_as_json[:domain]).to eq(params[:domain]) end @@ -182,21 +172,11 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'deletes email domain block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns an empty body' do - subject - expect(body_as_json).to be_empty - end - - it 'deletes email domain block' do - subject - expect(EmailDomainBlock.find_by(id: email_domain_block.id)).to be_nil end diff --git a/spec/requests/api/v1/admin/ip_blocks_spec.rb b/spec/requests/api/v1/admin/ip_blocks_spec.rb index d03886c51b06d1..fbcb39e3bef371 100644 --- a/spec/requests/api/v1/admin/ip_blocks_spec.rb +++ b/spec/requests/api/v1/admin/ip_blocks_spec.rb @@ -84,15 +84,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the correct ip block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct ip block' do - subject - json = body_as_json expect(json[:ip]).to eq("#{ip_block.ip}/#{ip_block.ip.prefix}") @@ -119,15 +114,10 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do + it 'returns the correct ip block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct ip block' do - subject - json = body_as_json expect(json[:ip]).to eq("#{params[:ip]}/32") @@ -186,15 +176,10 @@ let!(:ip_block) { IpBlock.create(ip: '185.200.13.3', severity: 'no_access', comment: 'Spam', expires_in: 48.hours) } let(:params) { { severity: 'sign_up_requires_approval', comment: 'Decreasing severity' } } - it 'returns http success' do + it 'returns the correct ip block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the correct ip block' do - subject - expect(body_as_json).to match(hash_including({ ip: "#{ip_block.ip}/#{ip_block.ip.prefix}", severity: 'sign_up_requires_approval', @@ -226,21 +211,11 @@ let!(:ip_block) { IpBlock.create(ip: '185.200.13.3', severity: 'no_access') } - it 'returns http success' do + it 'deletes the ip block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns an empty body' do - subject - expect(body_as_json).to be_empty - end - - it 'deletes the ip block' do - subject - expect(IpBlock.find_by(id: ip_block.id)).to be_nil end diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index 91c3c11f5dab49..5403457db029ee 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -122,15 +122,10 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do + it 'returns the requested report content', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the requested report content' do - subject - expect(body_as_json).to include( { id: report.id.to_s, @@ -155,18 +150,10 @@ let!(:report) { Fabricate(:report, category: :other) } let(:params) { { category: 'spam' } } - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'updates the report category' do + it 'updates the report category', :aggregate_failures do expect { subject }.to change { report.reload.category }.from('other').to('spam') - end - it 'returns the updated report content' do - subject + expect(response).to have_http_status(200) report.reload @@ -196,14 +183,9 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'marks report as resolved' do + it 'marks report as resolved', :aggregate_failures do expect { subject }.to change { report.reload.unresolved? }.from(true).to(false) + expect(response).to have_http_status(200) end end @@ -217,14 +199,9 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'marks report as unresolved' do + it 'marks report as unresolved', :aggregate_failures do expect { subject }.to change { report.reload.unresolved? }.from(false).to(true) + expect(response).to have_http_status(200) end end @@ -238,14 +215,9 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'assigns report to the requesting user' do + it 'assigns report to the requesting user', :aggregate_failures do expect { subject }.to change { report.reload.assigned_account_id }.from(nil).to(user.account.id) + expect(response).to have_http_status(200) end end @@ -259,14 +231,9 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'unassigns report from assignee' do + it 'unassigns report from assignee', :aggregate_failures do expect { subject }.to change { report.reload.assigned_account_id }.from(user.account.id).to(nil) + expect(response).to have_http_status(200) end end end diff --git a/spec/requests/api/v1/admin/trends/links/links_spec.rb b/spec/requests/api/v1/admin/trends/links/links_spec.rb new file mode 100644 index 00000000000000..05020b0fd0642c --- /dev/null +++ b/spec/requests/api/v1/admin/trends/links/links_spec.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Links' do + let(:role) { UserRole.find_by(name: 'Admin') } + let(:user) { Fabricate(:user, role: role) } + let(:scopes) { 'admin:read admin:write' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/admin/trends/links' do + subject do + get '/api/v1/admin/trends/links', headers: headers + end + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + end + + describe 'POST /api/v1/admin/trends/links/:id/approve' do + subject do + post "/api/v1/admin/trends/links/#{preview_card.id}/approve", headers: headers + end + + let(:preview_card) { Fabricate(:preview_card, trendable: false) } + + it_behaves_like 'forbidden for wrong scope', 'read write' + it_behaves_like 'forbidden for wrong role', '' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'sets the link as trendable' do + expect { subject }.to change { preview_card.reload.trendable }.from(false).to(true) + end + + it 'returns the link data' do + subject + + expect(body_as_json).to match( + a_hash_including( + url: preview_card.url, + title: preview_card.title, + description: preview_card.description, + type: 'link', + requires_review: false + ) + ) + end + + context 'when the link does not exist' do + it 'returns http not found' do + post '/api/v1/admin/trends/links/-1/approve', headers: headers + + expect(response).to have_http_status(404) + end + end + + context 'without an authorization header' do + let(:headers) { {} } + + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + end + + describe 'POST /api/v1/admin/trends/links/:id/reject' do + subject do + post "/api/v1/admin/trends/links/#{preview_card.id}/reject", headers: headers + end + + let(:preview_card) { Fabricate(:preview_card, trendable: false) } + + it_behaves_like 'forbidden for wrong scope', 'read write' + it_behaves_like 'forbidden for wrong role', '' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'does not set the link as trendable' do + expect { subject }.to_not(change { preview_card.reload.trendable }) + end + + it 'returns the link data' do + subject + + expect(body_as_json).to match( + a_hash_including( + url: preview_card.url, + title: preview_card.title, + description: preview_card.description, + type: 'link', + requires_review: false + ) + ) + end + + context 'when the link does not exist' do + it 'returns http not found' do + post '/api/v1/admin/trends/links/-1/reject', headers: headers + + expect(response).to have_http_status(404) + end + end + + context 'without an authorization header' do + let(:headers) { {} } + + it 'returns http forbidden' do + subject + + expect(response).to have_http_status(403) + end + end + end +end diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index dafe168c56f645..1268b36f8ae08a 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -12,14 +12,10 @@ let(:token) { Fabricate(:accessible_access_token, scopes: 'read', application: Fabricate(:application)) } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - it 'returns http success' do + it 'returns the app information correctly', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the app information correctly' do - subject expect(body_as_json).to match( a_hash_including( diff --git a/spec/requests/api/v1/apps_spec.rb b/spec/requests/api/v1/apps_spec.rb index 88f9eee360c1c7..acabbc93f0bbd3 100644 --- a/spec/requests/api/v1/apps_spec.rb +++ b/spec/requests/api/v1/apps_spec.rb @@ -23,20 +23,11 @@ end context 'with valid params' do - it 'returns http success' do + it 'creates an OAuth app', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'creates an OAuth app' do - subject - expect(Doorkeeper::Application.find_by(name: client_name)).to be_present - end - - it 'returns client ID and client secret' do - subject body = body_as_json @@ -58,15 +49,10 @@ context 'with many duplicate scopes' do let(:scopes) { (%w(read) * 40).join(' ') } - it 'returns http success' do + it 'only saves the scope once', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'only saves the scope once' do - subject - expect(Doorkeeper::Application.find_by(name: client_name).scopes.to_s).to eq 'read' end end diff --git a/spec/requests/api/v1/blocks_spec.rb b/spec/requests/api/v1/blocks_spec.rb new file mode 100644 index 00000000000000..62543157c32df4 --- /dev/null +++ b/spec/requests/api/v1/blocks_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Blocks' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:blocks' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/blocks' do + subject do + get '/api/v1/blocks', headers: headers, params: params + end + + let!(:blocks) { Fabricate.times(3, :block, account: user.account) } + let(:params) { {} } + + let(:expected_response) do + blocks.map { |block| a_hash_including(id: block.target_account.id.to_s, username: block.target_account.username) } + end + + it_behaves_like 'forbidden for wrong scope', 'write write:blocks' + + it 'returns the blocked accounts', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match_array(expected_response) + end + + context 'with limit param' do + let(:params) { { limit: 2 } } + + it 'returns only the requested number of blocked accounts' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + + it 'sets the correct pagination header for the prev path' do + subject + + expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq(api_v1_blocks_url(limit: params[:limit], since_id: blocks.last.id)) + end + + it 'sets the correct pagination header for the next path' do + subject + + expect(response.headers['Link'].find_link(%w(rel next)).href).to eq(api_v1_blocks_url(limit: params[:limit], max_id: blocks[1].id)) + end + end + + context 'with max_id param' do + let(:params) { { max_id: blocks[1].id } } + + it 'queries the blocks in range according to max_id', :aggregate_failures do + subject + + response_body = body_as_json + + expect(response_body.size).to be 1 + expect(response_body[0][:id]).to eq(blocks[0].target_account.id.to_s) + end + end + + context 'with since_id param' do + let(:params) { { since_id: blocks[1].id } } + + it 'queries the blocks in range according to since_id', :aggregate_failures do + subject + + response_body = body_as_json + + expect(response_body.size).to be 1 + expect(response_body[0][:id]).to eq(blocks[2].target_account.id.to_s) + end + end + end +end diff --git a/spec/requests/api/v1/circles/accounts_spec.rb b/spec/requests/api/v1/circles/accounts_spec.rb new file mode 100644 index 00000000000000..162c4f111c1b8b --- /dev/null +++ b/spec/requests/api/v1/circles/accounts_spec.rb @@ -0,0 +1,165 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Accounts' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:lists write:lists' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/circles/:id/accounts' do + subject do + get "/api/v1/circles/#{circle.id}/accounts", headers: headers, params: params + end + + let(:params) { { limit: 0 } } + let(:circle) { Fabricate(:circle, account: user.account) } + let(:accounts) { Fabricate.times(3, :account) } + + let(:expected_response) do + accounts.map do |account| + a_hash_including(id: account.id.to_s, username: account.username, acct: account.acct) + end + end + + before do + accounts.each { |account| account.follow!(user.account) } + circle.accounts << accounts + end + + it_behaves_like 'forbidden for wrong scope', 'write write:lists' + + it 'returns the accounts in the requested circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match_array(expected_response) + end + + context 'with limit param' do + let(:params) { { limit: 1 } } + + it 'returns only the requested number of accounts' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + end + end + + describe 'POST /api/v1/circles/:id/accounts' do + subject do + post "/api/v1/circles/#{circle.id}/accounts", headers: headers, params: params + end + + let(:circle) { Fabricate(:circle, account: user.account) } + let(:bob) { Fabricate(:account, username: 'bob') } + let(:params) { { account_ids: [bob.id] } } + + it_behaves_like 'forbidden for wrong scope', 'read read:lists' + + context 'when the added account is followed' do + before do + bob.follow!(user.account) + end + + it 'adds account to the circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(circle.accounts).to include(bob) + end + end + + context 'when the added account is not followed' do + it 'does not add the account to the circle', :aggregate_failures do + subject + + expect(response).to have_http_status(404) + expect(circle.accounts).to_not include(bob) + end + end + + context 'when the circle is not owned by the requesting user' do + let(:circle) { Fabricate(:circle) } + + before do + bob.follow!(user.account) + end + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'when account is already in the circle' do + before do + bob.follow!(user.account) + circle.accounts << bob + end + + it 'returns http unprocessable entity' do + subject + + expect(response).to have_http_status(422) + end + end + end + + describe 'DELETE /api/v1/circles/:id/accounts' do + subject do + delete "/api/v1/circles/#{circle.id}/accounts", headers: headers, params: params + end + + context 'when the circle is owned by the requesting user' do + let(:circle) { Fabricate(:circle, account: user.account) } + let(:bob) { Fabricate(:account, username: 'bob') } + let(:peter) { Fabricate(:account, username: 'peter') } + let(:params) { { account_ids: [bob.id] } } + + before do + bob.follow!(user.account) + peter.follow!(user.account) + circle.accounts << [bob, peter] + end + + it 'removes the specified account from the circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(circle.accounts).to_not include(bob) + end + + it 'does not remove any other account from the circle' do + subject + + expect(circle.accounts).to include(peter) + end + + context 'when the specified account is not in the circle' do + let(:params) { { account_ids: [0] } } + + it 'does not remove any account from the circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(circle.accounts).to contain_exactly(bob, peter) + end + end + end + + context 'when the circle is not owned by the requesting user' do + let(:circle) { Fabricate(:circle) } + let(:params) { {} } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/requests/api/v1/circles_spec.rb b/spec/requests/api/v1/circles_spec.rb new file mode 100644 index 00000000000000..7dfce7c1337095 --- /dev/null +++ b/spec/requests/api/v1/circles_spec.rb @@ -0,0 +1,193 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Circles' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:lists write:lists' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/circles' do + subject do + get '/api/v1/circles', headers: headers + end + + let!(:circles) do + [ + Fabricate(:circle, account: user.account, title: 'first circle'), + Fabricate(:circle, account: user.account, title: 'second circle'), + Fabricate(:circle, account: user.account, title: 'third circle'), + Fabricate(:circle, account: user.account, title: 'fourth circle'), + ] + end + + let(:expected_response) do + circles.map do |circle| + { + id: circle.id.to_s, + title: circle.title, + } + end + end + + before do + Fabricate(:circle) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:lists' + + it 'returns the expected circles', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match_array(expected_response) + end + end + + describe 'GET /api/v1/circles/:id' do + subject do + get "/api/v1/circles/#{circle.id}", headers: headers + end + + let(:circle) { Fabricate(:circle, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'write write:lists' + + it 'returns the requested circle correctly', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to eq({ + id: circle.id.to_s, + title: circle.title, + }) + end + + context 'when the circle belongs to a different user' do + let(:circle) { Fabricate(:circle) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'when the circle does not exist' do + it 'returns http not found' do + get '/api/v1/circles/-1', headers: headers + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/circles' do + subject do + post '/api/v1/circles', headers: headers, params: params + end + + let(:params) { { title: 'my circle' } } + + it_behaves_like 'forbidden for wrong scope', 'read read:lists' + + it 'returns the new circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match(a_hash_including(title: 'my circle')) + expect(Circle.where(account: user.account).count).to eq(1) + end + + context 'when a title is not given' do + let(:params) { { title: '' } } + + it 'returns http unprocessable entity' do + subject + + expect(response).to have_http_status(422) + end + end + end + + describe 'PUT /api/v1/circles/:id' do + subject do + put "/api/v1/circles/#{circle.id}", headers: headers, params: params + end + + let(:circle) { Fabricate(:circle, account: user.account, title: 'my circle') } + let(:params) { { title: 'circle' } } + + it_behaves_like 'forbidden for wrong scope', 'read read:lists' + + it 'returns the updated circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + circle.reload + + expect(body_as_json).to eq({ + id: circle.id.to_s, + title: circle.title, + }) + end + + it 'updates the circle title' do + expect { subject }.to change { circle.reload.title }.from('my circle').to('circle') + end + + context 'when the circle does not exist' do + it 'returns http not found' do + put '/api/v1/circles/-1', headers: headers, params: params + + expect(response).to have_http_status(404) + end + end + + context 'when the circle belongs to another user' do + let(:circle) { Fabricate(:circle) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'DELETE /api/v1/circles/:id' do + subject do + delete "/api/v1/circles/#{circle.id}", headers: headers + end + + let(:circle) { Fabricate(:circle, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:lists' + + it 'deletes the circle', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(Circle.where(id: circle.id)).to_not exist + end + + context 'when the circle does not exist' do + it 'returns http not found' do + delete '/api/v1/circles/-1', headers: headers + + expect(response).to have_http_status(404) + end + end + + context 'when the circle belongs to another user' do + let(:circle) { Fabricate(:circle) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/requests/api/v1/domain_blocks_spec.rb b/spec/requests/api/v1/domain_blocks_spec.rb index 0f4fd4e90e5448..954497ebe15131 100644 --- a/spec/requests/api/v1/domain_blocks_spec.rb +++ b/spec/requests/api/v1/domain_blocks_spec.rb @@ -22,15 +22,10 @@ it_behaves_like 'forbidden for wrong scope', 'write:blocks' - it 'returns http success' do + it 'returns the domains blocked by the requesting user', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the domains blocked by the requesting user' do - subject - expect(body_as_json).to match_array(blocked_domains) end @@ -54,15 +49,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:blocks' - it 'returns http success' do + it 'creates a domain block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'creates a domain block' do - subject - expect(user.account.domain_blocking?(params[:domain])).to be(true) end @@ -100,15 +90,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:blocks' - it 'returns http success' do + it 'deletes the specified domain block', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'deletes the specified domain block' do - subject - expect(user.account.domain_blocking?('example.com')).to be(false) end diff --git a/spec/requests/api/v1/favourites_spec.rb b/spec/requests/api/v1/favourites_spec.rb new file mode 100644 index 00000000000000..713990592c38a5 --- /dev/null +++ b/spec/requests/api/v1/favourites_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Favourites' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:favourites' } + let(:headers) { { Authorization: "Bearer #{token.token}" } } + + describe 'GET /api/v1/favourites' do + subject do + get '/api/v1/favourites', headers: headers, params: params + end + + let(:params) { {} } + let!(:favourites) { Fabricate.times(3, :favourite, account: user.account) } + + let(:expected_response) do + favourites.map do |favourite| + a_hash_including(id: favourite.status.id.to_s, account: a_hash_including(id: favourite.status.account.id.to_s)) + end + end + + it_behaves_like 'forbidden for wrong scope', 'write' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'returns the favourites' do + subject + + expect(body_as_json).to match_array(expected_response) + end + + context 'with limit param' do + let(:params) { { limit: 2 } } + + it 'returns only the requested number of favourites' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + + it 'sets the correct pagination header for the prev path' do + subject + + expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq(api_v1_favourites_url(limit: params[:limit], min_id: favourites.last.id)) + end + + it 'sets the correct pagination header for the next path' do + subject + + expect(response.headers['Link'].find_link(%w(rel next)).href).to eq(api_v1_favourites_url(limit: params[:limit], max_id: favourites[1].id)) + end + end + + context 'without an authorization header' do + let(:headers) { {} } + + it 'returns http unauthorized' do + subject + + expect(response).to have_http_status(401) + end + end + end +end diff --git a/spec/requests/api/v1/follow_requests_spec.rb b/spec/requests/api/v1/follow_requests_spec.rb index 9d4ef8cd55970a..1d78c9be19fdfe 100644 --- a/spec/requests/api/v1/follow_requests_spec.rb +++ b/spec/requests/api/v1/follow_requests_spec.rb @@ -32,15 +32,10 @@ it_behaves_like 'forbidden for wrong scope', 'write write:follows' - it 'returns http success' do + it 'returns the expected content from accounts requesting to follow', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the expected content from accounts requesting to follow' do - subject - expect(body_as_json).to match_array(expected_response) end @@ -68,19 +63,9 @@ it_behaves_like 'forbidden for wrong scope', 'read read:follows' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'allows the requesting follower to follow' do + it 'allows the requesting follower to follow', :aggregate_failures do expect { subject }.to change { follower.following?(user.account) }.from(false).to(true) - end - - it 'returns JSON with followed_by set to true' do - subject - + expect(response).to have_http_status(200) expect(body_as_json[:followed_by]).to be true end end @@ -98,21 +83,11 @@ it_behaves_like 'forbidden for wrong scope', 'read read:follows' - it 'returns http success' do + it 'removes the follow request', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'removes the follow request' do - subject - expect(FollowRequest.where(target_account: user.account, account: follower)).to_not exist - end - - it 'returns JSON with followed_by set to false' do - subject - expect(body_as_json[:followed_by]).to be false end end diff --git a/spec/requests/api/v1/followed_tags_spec.rb b/spec/requests/api/v1/followed_tags_spec.rb new file mode 100644 index 00000000000000..9391c7bdc8b9ba --- /dev/null +++ b/spec/requests/api/v1/followed_tags_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Followed tags' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:follows' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/followed_tags' do + subject do + get '/api/v1/followed_tags', headers: headers, params: params + end + + let!(:tag_follows) { Fabricate.times(5, :tag_follow, account: user.account) } + let(:params) { {} } + + let(:expected_response) do + tag_follows.map do |tag_follow| + a_hash_including(name: tag_follow.tag.name, following: true) + end + end + + before do + Fabricate(:tag_follow) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:follows' + + it 'returns http success' do + subject + + expect(response).to have_http_status(:success) + end + + it 'returns the followed tags correctly' do + subject + + expect(body_as_json).to match_array(expected_response) + end + + context 'with limit param' do + let(:params) { { limit: 3 } } + + it 'returns only the requested number of follow tags' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + + it 'sets the correct pagination header for the prev path' do + subject + + expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq(api_v1_followed_tags_url(limit: params[:limit], since_id: tag_follows.last.id)) + end + + it 'sets the correct pagination header for the next path' do + subject + + expect(response.headers['Link'].find_link(%w(rel next)).href).to eq(api_v1_followed_tags_url(limit: params[:limit], max_id: tag_follows[2].id)) + end + end + end +end diff --git a/spec/requests/api/v1/lists/accounts_spec.rb b/spec/requests/api/v1/lists/accounts_spec.rb new file mode 100644 index 00000000000000..4d2a168b34b512 --- /dev/null +++ b/spec/requests/api/v1/lists/accounts_spec.rb @@ -0,0 +1,178 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Accounts' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:lists write:lists' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/lists/:id/accounts' do + subject do + get "/api/v1/lists/#{list.id}/accounts", headers: headers, params: params + end + + let(:params) { { limit: 0 } } + let(:list) { Fabricate(:list, account: user.account) } + let(:accounts) { Fabricate.times(3, :account) } + + let(:expected_response) do + accounts.map do |account| + a_hash_including(id: account.id.to_s, username: account.username, acct: account.acct) + end + end + + before do + accounts.each { |account| user.account.follow!(account) } + list.accounts << accounts + end + + it_behaves_like 'forbidden for wrong scope', 'write write:lists' + + it 'returns the accounts in the requested list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match_array(expected_response) + end + + context 'with limit param' do + let(:params) { { limit: 1 } } + + it 'returns only the requested number of accounts' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + end + end + + describe 'POST /api/v1/lists/:id/accounts' do + subject do + post "/api/v1/lists/#{list.id}/accounts", headers: headers, params: params + end + + let(:list) { Fabricate(:list, account: user.account) } + let(:bob) { Fabricate(:account, username: 'bob') } + let(:params) { { account_ids: [bob.id] } } + + it_behaves_like 'forbidden for wrong scope', 'read read:lists' + + context 'when the added account is followed' do + before do + user.account.follow!(bob) + end + + it 'adds account to the list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(list.accounts).to include(bob) + end + end + + context 'when the added account has been sent a follow request' do + before do + user.account.follow_requests.create!(target_account: bob) + end + + it 'adds account to the list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(list.accounts).to include(bob) + end + end + + context 'when the added account is not followed' do + it 'does not add the account to the list', :aggregate_failures do + subject + + expect(response).to have_http_status(404) + expect(list.accounts).to_not include(bob) + end + end + + context 'when the list is not owned by the requesting user' do + let(:list) { Fabricate(:list) } + + before do + user.account.follow!(bob) + end + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'when account is already in the list' do + before do + user.account.follow!(bob) + list.accounts << bob + end + + it 'returns http unprocessable entity' do + subject + + expect(response).to have_http_status(422) + end + end + end + + describe 'DELETE /api/v1/lists/:id/accounts' do + subject do + delete "/api/v1/lists/#{list.id}/accounts", headers: headers, params: params + end + + context 'when the list is owned by the requesting user' do + let(:list) { Fabricate(:list, account: user.account) } + let(:bob) { Fabricate(:account, username: 'bob') } + let(:peter) { Fabricate(:account, username: 'peter') } + let(:params) { { account_ids: [bob.id] } } + + before do + user.account.follow!(bob) + user.account.follow!(peter) + list.accounts << [bob, peter] + end + + it 'removes the specified account from the list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(list.accounts).to_not include(bob) + end + + it 'does not remove any other account from the list' do + subject + + expect(list.accounts).to include(peter) + end + + context 'when the specified account is not in the list' do + let(:params) { { account_ids: [0] } } + + it 'does not remove any account from the list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(list.accounts).to contain_exactly(bob, peter) + end + end + end + + context 'when the list is not owned by the requesting user' do + let(:list) { Fabricate(:list) } + let(:params) { {} } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/requests/api/v1/lists_spec.rb b/spec/requests/api/v1/lists_spec.rb index a970ddcd2fd3d4..a2466060c0bf72 100644 --- a/spec/requests/api/v1/lists_spec.rb +++ b/spec/requests/api/v1/lists_spec.rb @@ -23,17 +23,6 @@ end let(:expected_response) do - lists.map do |list| - { - id: list.id.to_s, - title: list.title, - replies_policy: list.replies_policy, - exclusive: list.exclusive, - } - end - end - - let(:expected_response_with_antennas) do lists.map do |list| { id: list.id.to_s, @@ -51,16 +40,11 @@ it_behaves_like 'forbidden for wrong scope', 'write write:lists' - it 'returns http success' do + it 'returns the expected lists', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the expected lists' do - subject - - expect(body_as_json).to match_array(expected_response_with_antennas) + expect(body_as_json).to match_array(expected_response) end end @@ -73,15 +57,10 @@ it_behaves_like 'forbidden for wrong scope', 'write write:lists' - it 'returns http success' do + it 'returns the requested list correctly', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the requested list correctly' do - subject - expect(body_as_json).to eq({ id: list.id.to_s, title: list.title, @@ -119,21 +98,11 @@ it_behaves_like 'forbidden for wrong scope', 'read read:lists' - it 'returns http success' do + it 'returns the new list', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the new list' do - subject - expect(body_as_json).to match(a_hash_including(title: 'my list', replies_policy: 'none', exclusive: true)) - end - - it 'creates a list' do - subject - expect(List.where(account: user.account).count).to eq(1) end @@ -168,15 +137,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:lists' - it 'returns http success' do + it 'returns the updated list', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the updated list' do - subject - list.reload expect(body_as_json).to eq({ @@ -228,15 +192,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:lists' - it 'returns http success' do + it 'deletes the list', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'deletes the list' do - subject - expect(List.where(id: list.id)).to_not exist end diff --git a/spec/requests/api/v1/notifications_spec.rb b/spec/requests/api/v1/notifications_spec.rb new file mode 100644 index 00000000000000..7a879c35b7cba7 --- /dev/null +++ b/spec/requests/api/v1/notifications_spec.rb @@ -0,0 +1,183 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Notifications' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/notifications' do + subject do + get '/api/v1/notifications', headers: headers, params: params + end + + let(:bob) { Fabricate(:user) } + let(:tom) { Fabricate(:user) } + let(:params) { {} } + + before do + first_status = PostStatusService.new.call(user.account, text: 'Test') + ReblogService.new.call(bob.account, first_status) + mentioning_status = PostStatusService.new.call(bob.account, text: 'Hello @alice') + mentioning_status.mentions.first + FavouriteService.new.call(bob.account, first_status) + FavouriteService.new.call(tom.account, first_status) + FollowService.new.call(bob.account, user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns expected notification types', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_json_types).to include 'reblog' + expect(body_json_types).to include 'mention' + expect(body_json_types).to include 'favourite' + expect(body_json_types).to include 'follow' + end + end + + context 'with account_id param' do + let(:params) { { account_id: tom.account.id } } + + it 'returns only notifications from specified user', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_json_account_ids.uniq).to eq [tom.account.id.to_s] + end + + def body_json_account_ids + body_as_json.map { |x| x[:account][:id] } + end + end + + context 'with invalid account_id param' do + let(:params) { { account_id: 'foo' } } + + it 'returns nothing', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json.size).to eq 0 + end + end + + context 'with exclude_types param' do + let(:params) { { exclude_types: %w(mention) } } + + it 'returns everything but excluded type', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json.size).to_not eq 0 + expect(body_json_types.uniq).to_not include 'mention' + end + end + + context 'with types param' do + let(:params) { { types: %w(mention) } } + + it 'returns only requested type', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_json_types.uniq).to eq ['mention'] + end + end + + context 'with limit param' do + let(:params) { { limit: 3 } } + + it 'returns the requested number of notifications paginated', :aggregate_failures do + subject + + notifications = user.account.notifications + + expect(body_as_json.size).to eq(params[:limit]) + expect(response.headers['Link'].find_link(%w(rel prev)).href).to eq(api_v1_notifications_url(limit: params[:limit], min_id: notifications.last.id.to_s)) + expect(response.headers['Link'].find_link(%w(rel next)).href).to eq(api_v1_notifications_url(limit: params[:limit], max_id: notifications[2].id.to_s)) + end + end + + def body_json_types + body_as_json.pluck(:type) + end + end + + describe 'GET /api/v1/notifications/:id' do + subject do + get "/api/v1/notifications/#{notification.id}", headers: headers + end + + let(:notification) { Fabricate(:notification, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + context 'when notification belongs to someone else' do + let(:notification) { Fabricate(:notification) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/notifications/:id/dismiss' do + subject do + post "/api/v1/notifications/#{notification.id}/dismiss", headers: headers + end + + let!(:notification) { Fabricate(:notification, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'destroys the notification' do + subject + + expect(response).to have_http_status(200) + expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + + context 'when notification belongs to someone else' do + let(:notification) { Fabricate(:notification) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/notifications/clear' do + subject do + post '/api/v1/notifications/clear', headers: headers + end + + before do + Fabricate.times(3, :notification, account: user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'clears notifications for the account' do + subject + + expect(user.account.reload.notifications).to be_empty + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/api/v1/reports_spec.rb b/spec/requests/api/v1/reports_spec.rb new file mode 100644 index 00000000000000..ba3d2b3060e033 --- /dev/null +++ b/spec/requests/api/v1/reports_spec.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Reports' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'write:reports' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'POST /api/v1/reports' do + subject do + post '/api/v1/reports', headers: headers, params: params + end + + let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + let(:status) { Fabricate(:status) } + let(:target_account) { status.account } + let(:category) { 'other' } + let(:forward) { nil } + let(:rule_ids) { nil } + + let(:params) do + { + status_ids: [status.id], + account_id: target_account.id, + comment: 'reasons', + category: category, + rule_ids: rule_ids, + forward: forward, + } + end + + it_behaves_like 'forbidden for wrong scope', 'read read:reports' + + it 'creates a report', :aggregate_failures do + perform_enqueued_jobs do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match( + a_hash_including( + status_ids: [status.id.to_s], + category: category, + comment: 'reasons' + ) + ) + + expect(target_account.targeted_reports).to_not be_empty + expect(target_account.targeted_reports.first.comment).to eq 'reasons' + + expect(ActionMailer::Base.deliveries.first.to).to eq([admin.email]) + end + end + + context 'when a status does not belong to the reported account' do + let(:target_account) { Fabricate(:account) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'when a category is chosen' do + let(:category) { 'spam' } + + it 'saves category' do + subject + + expect(target_account.targeted_reports.first.spam?).to be true + end + end + + context 'when violated rules are chosen' do + let(:rule) { Fabricate(:rule) } + let(:category) { 'violation' } + let(:rule_ids) { [rule.id] } + + it 'saves category and rule_ids' do + subject + + expect(target_account.targeted_reports.first.violation?).to be true + expect(target_account.targeted_reports.first.rule_ids).to contain_exactly(rule.id) + end + end + end +end diff --git a/spec/requests/api/v1/statuses/emoji_reactions_spec.rb b/spec/requests/api/v1/statuses/emoji_reactions_spec.rb new file mode 100644 index 00000000000000..e85404379d1472 --- /dev/null +++ b/spec/requests/api/v1/statuses/emoji_reactions_spec.rb @@ -0,0 +1,271 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'EmojiReactions' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'write:favourites' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'POST /api/v1/statuses/:status_id/emoji_reactions' do + subject do + post "/api/v1/statuses/#{status.id}/emoji_reactions", headers: headers, params: { emoji: emoji } + end + + let(:status) { Fabricate(:status) } + let(:emoji) { '😀' } + + it_behaves_like 'forbidden for wrong scope', 'read read:favourites' + + context 'with public status' do + it 'reacts the status successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status, emoji)).to be true + end + + it 'returns json with updated attributes' do + subject + + expect(body_as_json).to match( + a_hash_including(id: status.id.to_s, emoji_reactions_count: 1) + ) + end + end + + context 'with private status of not-followed account' do + let(:status) { Fabricate(:status, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'with private status of followed account' do + let(:status) { Fabricate(:status, visibility: :private) } + + before do + user.account.follow!(status.account) + end + + it 'reacts the status successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be true + end + end + + context 'when local custom emoji' do + before { Fabricate(:custom_emoji, shortcode: 'ohagi') } + + let(:emoji) { 'ohagi' } + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status, 'ohagi')).to be true + end + end + + context 'when remote custom emoji' do + let!(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji') } + let(:emoji) { 'ohagi@foo.bar' } + + before { Fabricate(:emoji_reaction, status: status, name: 'ohagi', custom_emoji: custom_emoji) } + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status, 'ohagi', 'foo.bar')).to be true + end + end + + context 'when not existing custom emoji' do + let(:emoji) { 'ohagi' } + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(422) + end + end + + context 'without an authorization header' do + let(:headers) { {} } + + it 'returns http unauthorized' do + subject + + expect(response).to have_http_status(401) + end + end + end + + describe 'POST /api/v1/statuses/:status_id/emoji_unreaction' do + subject do + post "/api/v1/statuses/#{status.id}/emoji_unreaction", headers: headers, params: { emoji: emoji } + end + + let(:status) { Fabricate(:status) } + let(:emoji) { '😀' } + + it_behaves_like 'forbidden for wrong scope', 'read read:favourites' + + context 'with public status' do + before do + EmojiReactService.new.call(user.account, status, emoji) + end + + it 'unreacts the status successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be false + end + + it 'returns json with updated attributes' do + subject + + expect(body_as_json).to match( + a_hash_including(id: status.id.to_s, emoji_reactions_count: 0) + ) + end + end + + context 'when the requesting user was blocked by the status author' do + before do + EmojiReactService.new.call(user.account, status, emoji) + status.account.block!(user.account) + end + + it 'unreacts the status successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be false + end + + it 'returns json with updated attributes' do + subject + + expect(body_as_json).to match( + a_hash_including(id: status.id.to_s, emoji_reactions_count: 0) + ) + end + end + + context 'when status is not reacted' do + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + end + + context 'with private status that was not reacted' do + let(:status) { Fabricate(:status, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'with private status that was not reacted without emoji parameter' do + let(:status) { Fabricate(:status, visibility: :private) } + let(:emoji) { nil } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'when local custom emoji' do + before do + Fabricate(:custom_emoji, shortcode: 'ohagi') + EmojiReactService.new.call(user.account, status, emoji) + end + + let(:emoji) { 'ohagi' } + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be false + end + end + + context 'when remote custom emoji' do + let(:emoji) { 'ohagi@foo.bar' } + + before do + custom_emoji = Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji') + Fabricate(:emoji_reaction, name: 'ohagi', status: status, custom_emoji: custom_emoji) + EmojiReactService.new.call(user.account, status, emoji) + end + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be false + end + end + + context 'when remote custom emoji but not specified domain' do + let(:emoji) { 'ohagi' } + + before do + custom_emoji = Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji') + Fabricate(:emoji_reaction, name: 'ohagi', status: status, custom_emoji: custom_emoji) + EmojiReactService.new.call(user.account, status, 'ohagi@foo.bar') + end + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be true + end + end + + context 'without specified domain and reacted same name multiple domains' do + let(:emoji) { 'ohagi' } + + before do + Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji') + Fabricate(:custom_emoji, shortcode: 'ohagi') + EmojiReactService.new.call(user.account, status, 'ohagi') + EmojiReactService.new.call(user.account, status, 'ohagi@foo.bar') + end + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(user.account.emoji_reacted?(status)).to be false + end + end + + context 'when not existing custom emoji' do + let(:emoji) { 'ohagi' } + + it 'reacts the status succeessfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + end +end diff --git a/spec/requests/api/v1/statuses/sources_spec.rb b/spec/requests/api/v1/statuses/sources_spec.rb new file mode 100644 index 00000000000000..723b81905e9a62 --- /dev/null +++ b/spec/requests/api/v1/statuses/sources_spec.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Sources' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/statuses/:status_id/source' do + subject do + get "/api/v1/statuses/#{status.id}/source", headers: headers + end + + let(:status) { Fabricate(:status) } + + it_behaves_like 'forbidden for wrong scope', 'write write:statuses' + + context 'with public status' do + it 'returns the source properties of the status', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to eq({ + id: status.id.to_s, + text: status.text, + spoiler_text: status.spoiler_text, + }) + end + end + + context 'with private status of non-followed account' do + let(:status) { Fabricate(:status, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + + context 'with private status of followed account' do + let(:status) { Fabricate(:status, visibility: :private) } + + before do + user.account.follow!(status.account) + end + + it 'returns the source properties of the status', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to eq({ + id: status.id.to_s, + text: status.text, + spoiler_text: status.spoiler_text, + }) + end + end + + context 'without an authorization header' do + let(:headers) { {} } + + it 'returns http unauthorized' do + subject + + expect(response).to have_http_status(401) + end + end + end +end diff --git a/spec/requests/api/v1/tags_spec.rb b/spec/requests/api/v1/tags_spec.rb index 300ddf805c91f1..db74a6f0373572 100644 --- a/spec/requests/api/v1/tags_spec.rb +++ b/spec/requests/api/v1/tags_spec.rb @@ -17,15 +17,10 @@ let!(:tag) { Fabricate(:tag) } let(:name) { tag.name } - it 'returns http success' do + it 'returns the tag', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns the tag' do - subject - expect(body_as_json[:name]).to eq(name) end end @@ -62,15 +57,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:follows' context 'when the tag exists' do - it 'returns http success' do + it 'creates follow', :aggregate_failures do subject expect(response).to have_http_status(:success) - end - - it 'creates follow' do - subject - expect(TagFollow.where(tag: tag, account: user.account)).to exist end end @@ -78,21 +68,11 @@ context 'when the tag does not exist' do let(:name) { 'hoge' } - it 'returns http success' do + it 'creates a new tag with the specified name', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'creates a new tag with the specified name' do - subject - expect(Tag.where(name: name)).to exist - end - - it 'creates follow' do - subject - expect(TagFollow.where(tag: Tag.find_by(name: name), account: user.account)).to exist end end @@ -133,15 +113,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:follows' - it 'returns http success' do + it 'removes the follow', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'removes the follow' do - subject - expect(TagFollow.where(tag: tag, account: user.account)).to_not exist end diff --git a/spec/requests/api/v1/timelines/tag_spec.rb b/spec/requests/api/v1/timelines/tag_spec.rb new file mode 100644 index 00000000000000..a118af13e2ff69 --- /dev/null +++ b/spec/requests/api/v1/timelines/tag_spec.rb @@ -0,0 +1,112 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Tag' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + shared_examples 'a successful request to the tag timeline' do + it 'returns the expected statuses', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json.pluck(:id)).to match_array(expected_statuses.map { |status| status.id.to_s }) + end + end + + describe 'GET /api/v1/timelines/tag/:hashtag' do + subject do + get "/api/v1/timelines/tag/#{hashtag}", headers: headers, params: params + end + + let(:account) { Fabricate(:account) } + let!(:private_status) { PostStatusService.new.call(account, visibility: :private, text: '#life could be a dream') } # rubocop:disable RSpec/LetSetup + let!(:life_status) { PostStatusService.new.call(account, text: 'tell me what is my #life without your #love') } + let!(:war_status) { PostStatusService.new.call(user.account, text: '#war, war never changes') } + let!(:love_status) { PostStatusService.new.call(account, text: 'what is #love?') } + let(:params) { {} } + let(:hashtag) { 'life' } + + context 'when given only one hashtag' do + let(:expected_statuses) { [life_status] } + + it_behaves_like 'a successful request to the tag timeline' + end + + context 'with any param' do + let(:expected_statuses) { [life_status, love_status] } + let(:params) { { any: %(love) } } + + it_behaves_like 'a successful request to the tag timeline' + end + + context 'with all param' do + let(:expected_statuses) { [life_status] } + let(:params) { { all: %w(love) } } + + it_behaves_like 'a successful request to the tag timeline' + end + + context 'with none param' do + let(:expected_statuses) { [war_status] } + let(:hashtag) { 'war' } + let(:params) { { none: %w(life love) } } + + it_behaves_like 'a successful request to the tag timeline' + end + + context 'with limit param' do + let(:hashtag) { 'love' } + let(:params) { { limit: 1 } } + + it 'returns only the requested number of statuses' do + subject + + expect(body_as_json.size).to eq(params[:limit]) + end + + it 'sets the correct pagination headers', :aggregate_failures do + subject + + headers = response.headers['Link'] + + expect(headers.find_link(%w(rel prev)).href).to eq(api_v1_timelines_tag_url(limit: 1, min_id: love_status.id.to_s)) + expect(headers.find_link(%w(rel next)).href).to eq(api_v1_timelines_tag_url(limit: 1, max_id: love_status.id.to_s)) + end + end + + context 'when the instance allows public preview' do + context 'when the user is not authenticated' do + let(:headers) { {} } + let(:expected_statuses) { [life_status] } + + it_behaves_like 'a successful request to the tag timeline' + end + end + + context 'when the instance does not allow public preview' do + before do + Form::AdminSettings.new(timeline_preview: false).save + end + + context 'when the user is not authenticated' do + let(:headers) { {} } + + it 'returns http unauthorized' do + subject + + expect(response).to have_http_status(401) + end + end + + context 'when the user is authenticated' do + let(:expected_statuses) { [life_status] } + + it_behaves_like 'a successful request to the tag timeline' + end + end + end +end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index 9d91f31cc5c2c5..0612c94d8c42ea 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -9,19 +9,24 @@ def poll_option_json(name, votes) RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do subject { described_class.new } - let!(:status) { Fabricate(:status, text: 'Hello world', account: Fabricate(:account, domain: 'example.com')) } + let(:thread) { nil } + let!(:status) { Fabricate(:status, text: 'Hello world', account: Fabricate(:account, domain: 'example.com'), thread: thread) } + let(:json_tags) do + [ + { type: 'Hashtag', name: 'hoge' }, + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'Hello universe' } let(:payload) do { '@context': 'https://www.w3.org/ns/activitystreams', id: 'foo', type: 'Note', summary: 'Show more', - content: 'Hello universe', + content: content, updated: '2021-09-08T22:39:25Z', - tag: [ - { type: 'Hashtag', name: 'hoge' }, - { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, - ], + tag: json_tags, } end let(:json) { Oj.load(Oj.dump(payload)) } @@ -462,5 +467,161 @@ def poll_option_json(name, votes) subject.call(status, json, json) expect(status.reload.edited_at.to_s).to eq '2021-09-08 22:39:25 UTC' end + + describe 'ng word is set' do + let(:json_tags) { [] } + + context 'when hit ng words' do + let(:content) { 'ng word test' } + + it 'update status' do + Form::AdminSettings.new(ng_words: 'test').save + + subject.call(status, json, json) + expect(status.reload.text).to_not eq content + end + end + + context 'when not hit ng words' do + let(:content) { 'ng word aiueo' } + + it 'update status' do + Form::AdminSettings.new(ng_words: 'test').save + + subject.call(status, json, json) + expect(status.reload.text).to eq content + end + end + + context 'when hit ng words for mention' do + let(:json_tags) do + [ + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'ng word test' } + + it 'update status' do + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + subject.call(status, json, json) + expect(status.reload.text).to_not eq content + expect(status.mentioned_accounts.pluck(:id)).to_not include alice.id + end + end + + context 'when hit ng words for mention but local posts are not checked' do + let(:json_tags) do + [ + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'ng word test' } + + it 'update status' do + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '0').save + + subject.call(status, json, json) + expect(status.reload.text).to_not eq content + expect(status.mentioned_accounts.pluck(:id)).to_not include alice.id + end + end + + context 'when hit ng words for mention to follower' do + let(:json_tags) do + [ + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'ng word test' } + + before do + alice.follow!(status.account) + end + + it 'update status' do + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test').save + + subject.call(status, json, json) + expect(status.reload.text).to eq content + expect(status.mentioned_accounts.pluck(:id)).to include alice.id + end + end + + context 'when hit ng words for reply' do + let(:json_tags) do + [ + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'ng word test' } + let(:thread) { Fabricate(:status, account: alice) } + + it 'update status' do + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test').save + + subject.call(status, json, json) + expect(status.reload.text).to_not eq content + expect(status.mentioned_accounts.pluck(:id)).to_not include alice.id + end + end + + context 'when hit ng words for reply to follower' do + let(:json_tags) do + [ + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + ] + end + let(:content) { 'ng word test' } + let(:thread) { Fabricate(:status, account: alice) } + + before do + alice.follow!(status.account) + end + + it 'update status' do + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test').save + + subject.call(status, json, json) + expect(status.reload.text).to eq content + expect(status.mentioned_accounts.pluck(:id)).to include alice.id + end + end + + context 'when using hashtag under limit' do + let(:json_tags) do + [ + { type: 'Hashtag', name: 'a' }, + { type: 'Hashtag', name: 'b' }, + ] + end + let(:content) { 'ohagi is good' } + + it 'update status' do + Form::AdminSettings.new(post_hash_tags_max: 2).save + + subject.call(status, json, json) + expect(status.reload.text).to eq content + end + end + + context 'when using hashtag over limit' do + let(:json_tags) do + [ + { type: 'Hashtag', name: 'a' }, + { type: 'Hashtag', name: 'b' }, + { type: 'Hashtag', name: 'c' }, + ] + end + let(:content) { 'ohagi is good' } + + it 'update status' do + Form::AdminSettings.new(post_hash_tags_max: 2).save + + subject.call(status, json, json) + expect(status.reload.text).to_not eq content + end + end + end end end diff --git a/spec/services/after_block_domain_from_account_service_spec.rb b/spec/services/after_block_domain_from_account_service_spec.rb index 9bfaa35807f20a..05af125997c750 100644 --- a/spec/services/after_block_domain_from_account_service_spec.rb +++ b/spec/services/after_block_domain_from_account_service_spec.rb @@ -9,7 +9,6 @@ let!(:alice) { Fabricate(:account, username: 'alice') } before do - stub_jsonld_contexts! allow(ActivityPub::DeliveryWorker).to receive(:perform_async) end diff --git a/spec/services/backup_service_spec.rb b/spec/services/backup_service_spec.rb index 806ba18323ea56..f5ad319136992b 100644 --- a/spec/services/backup_service_spec.rb +++ b/spec/services/backup_service_spec.rb @@ -9,6 +9,8 @@ let!(:attachment) { Fabricate(:media_attachment, account: user.account) } let!(:status) { Fabricate(:status, account: user.account, text: 'Hello', visibility: :public, media_attachments: [attachment]) } let!(:private_status) { Fabricate(:status, account: user.account, text: 'secret', visibility: :private) } + let!(:limited_status) { Fabricate(:status, account: user.account, text: 'sec mutual', visibility: :limited, limited_scope: :mutual) } + let!(:reblog_status) { Fabricate(:status, account: user.account, reblog_of_id: Fabricate(:status).id) } let!(:favourite) { Fabricate(:favourite, account: user.account) } let!(:bookmark) { Fabricate(:bookmark, account: user.account) } let!(:backup) { Fabricate(:backup, user: user) } @@ -60,10 +62,12 @@ def expect_outbox_export aggregate_failures do expect(json['@context']).to_not be_nil expect(json['type']).to eq 'OrderedCollection' - expect(json['totalItems']).to eq 2 + expect(json['totalItems']).to eq 4 expect(json['orderedItems'][0]['@context']).to be_nil expect(json['orderedItems'][0]).to include_create_item(status) expect(json['orderedItems'][1]).to include_create_item(private_status) + expect(json['orderedItems'][2]).to include_create_item(limited_status) + expect(json['orderedItems'][3]).to include_announce_item(reblog_status) end end @@ -98,4 +102,11 @@ def include_create_item(status) }), }) end + + def include_announce_item(status) + include({ + 'type' => 'Announce', + 'object' => ActivityPub::TagManager.instance.uri_for(status.reblog), + }) + end end diff --git a/spec/services/emoji_react_service_spec.rb b/spec/services/emoji_react_service_spec.rb index 629a7818d44e0c..8ba0466ef111e5 100644 --- a/spec/services/emoji_react_service_spec.rb +++ b/spec/services/emoji_react_service_spec.rb @@ -19,15 +19,6 @@ expect(subject.first.custom_emoji_id).to be_nil end - context 'with name duplication on same account' do - before { Fabricate(:emoji_reaction, status: status, name: '😀') } - - it 'react with emoji' do - expect(subject.count).to eq 1 - expect(subject.first.name).to eq '😀' - end - end - context 'when multiple reactions by same account' do let(:name) { '😂' } @@ -47,6 +38,7 @@ it 'react with emoji' do expect(subject.count).to eq 1 expect(subject.pluck(:name)).to contain_exactly('😂') + expect(EmojiReaction.where(status: status).count).to eq 2 end end @@ -56,6 +48,7 @@ it 'react with emoji' do expect(subject.count).to eq 1 expect(subject.first.name).to eq '😀' + expect(EmojiReaction.where(status: status).count).to eq 2 end end @@ -136,4 +129,85 @@ expect(subject.first.custom_emoji.domain).to eq 'foo.bar' end end + + context 'with name duplication of unicode emoji on same account' do + before { Fabricate(:emoji_reaction, status: status, name: '😀') } + + it 'react with emoji' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + end + end + + context 'with name duplication of local cuetom emoji on same account' do + let(:name) { 'ohagi' } + let!(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'ohagi') } + + before { Fabricate(:emoji_reaction, account: sender, status: status, name: 'ohagi', custom_emoji: custom_emoji) } + + it 'react with emoji' do + expect { subject.count }.to raise_error Mastodon::ValidationError + end + end + + context 'with name duplication of remote cuetom emoji on same account' do + let(:name) { 'ohagi@foo.bar' } + let!(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji/ohagi') } + + before { Fabricate(:emoji_reaction, account: sender, status: status, name: 'ohagi', custom_emoji: custom_emoji) } + + it 'react with emoji' do + expect { subject.count }.to raise_error Mastodon::ValidationError + end + end + + context 'when has remote followers' do + let!(:bob) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor', inbox_url: 'https://foo.bar/inbox', protocol: 'activitypub') } + + before do + bob.follow!(author) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 1 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end + + context 'when has relay server' do + before do + Fabricate(:relay, inbox_url: 'https://foo.bar/inbox', state: :accepted) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 1 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end + + context 'when has friend server' do + before do + Fabricate(:friend_domain, inbox_url: 'https://foo.bar/inbox', active_state: :accepted, pseudo_relay: true) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 1 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end end diff --git a/spec/services/fan_out_on_write_service_spec.rb b/spec/services/fan_out_on_write_service_spec.rb index 17d9f9125260d8..1df413b7a8d6d9 100644 --- a/spec/services/fan_out_on_write_service_spec.rb +++ b/spec/services/fan_out_on_write_service_spec.rb @@ -6,6 +6,7 @@ subject { described_class.new } let(:last_active_at) { Time.now.utc } + let(:visibility) { 'public' } let(:searchability) { 'public' } let(:dissubscribable) { false } let(:status) { Fabricate(:status, account: alice, visibility: visibility, searchability: searchability, text: 'Hello @bob #hoge') } @@ -20,6 +21,8 @@ let!(:antenna) { nil } let!(:empty_antenna) { nil } + let(:custom_before) { false } + before do bob.follow!(alice) tom.follow!(alice) @@ -30,7 +33,7 @@ allow(redis).to receive(:publish) - subject.call(status) + subject.call(status) unless custom_before end def home_feed_of(account) @@ -469,4 +472,35 @@ def antenna_with_options(owner, **options) end end end + + context 'when updated status is already boosted or quoted' do + let(:custom_before) { true } + + before do + ReblogService.new.call(bob, status) + PostStatusService.new.call(tom, text: "Hello QT #{ActivityPub::TagManager.instance.uri_for(status)}") + + subject.call(status, update: true) + end + + it 'notified to boosted account' do + notification = Notification.find_by(account: bob, type: 'update') + + expect(notification).to_not be_nil + expect(notification.activity_id).to eq status.id + end + + it 'notified to quoted account' do + notification = Notification.find_by(account: tom, type: 'update') + + expect(notification).to_not be_nil + expect(notification.activity_id).to eq status.id + end + + it 'notified not to non-boosted account' do + notification = Notification.find_by(account: ohagi, type: 'update') + + expect(notification).to be_nil + end + end end diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 529ab09969bdd9..a1a242a51752c4 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -209,6 +209,17 @@ expect(status.mentioned_accounts.first.id).to eq mutual_account.id end + it 'limited visibility and direct searchability' do + account = Fabricate(:account) + text = 'This is an English text.' + + status = subject.call(account, text: text, visibility: 'mutual', searchability: 'public') + + expect(status.visibility).to eq 'limited' + expect(status.limited_scope).to eq 'personal' + expect(status.searchability).to eq 'direct' + end + it 'personal visibility with mutual' do account = Fabricate(:account) text = 'This is an English text.' @@ -425,6 +436,102 @@ expect(status2.id).to eq status1.id end + describe 'ng word is set' do + it 'hit ng words' do + account = Fabricate(:account) + text = 'ng word test' + Form::AdminSettings.new(ng_words: 'test').save + + expect { subject.call(account, text: text) }.to raise_error(Mastodon::ValidationError) + end + + it 'not hit ng words' do + account = Fabricate(:account) + text = 'ng word aiueo' + Form::AdminSettings.new(ng_words: 'test').save + + status = subject.call(account, text: text) + + expect(status).to be_persisted + expect(status.text).to eq text + end + + it 'hit ng words for mention' do + account = Fabricate(:account) + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + expect { subject.call(account, text: text) }.to raise_error(Mastodon::ValidationError) + end + + it 'hit ng words for mention but local posts are not checked' do + account = Fabricate(:account) + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '0').save + + status = subject.call(account, text: text) + + expect(status).to be_persisted + expect(status.text).to eq text + end + + it 'hit ng words for mention to follower' do + account = Fabricate(:account) + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + mentioned.follow!(account) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + status = subject.call(account, text: text) + + expect(status).to be_persisted + expect(status.text).to eq text + end + + it 'hit ng words for reply' do + account = Fabricate(:account) + text = 'ng word test' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + expect { subject.call(account, text: text, thread: Fabricate(:status)) }.to raise_error(Mastodon::ValidationError) + end + + it 'hit ng words for reply to follower' do + account = Fabricate(:account) + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + mentioned.follow!(account) + text = 'ng word test' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + status = subject.call(account, text: text) + + expect(status).to be_persisted + expect(status.text).to eq text + end + + it 'using hashtag under limit' do + account = Fabricate(:account) + text = '#a #b' + Form::AdminSettings.new(post_hash_tags_max: 2).save + + status = subject.call(account, text: text) + + expect(status).to be_persisted + expect(status.tags.count).to eq 2 + expect(status.text).to eq text + end + + it 'using hashtag over limit' do + account = Fabricate(:account) + text = '#a #b #c' + Form::AdminSettings.new(post_hash_tags_max: 2).save + + expect { subject.call(account, text: text) }.to raise_error Mastodon::ValidationError + end + end + def create_status_with_options(**options) subject.call(Fabricate(:account), options.merge(text: 'test')) end diff --git a/spec/services/un_emoji_react_service_spec.rb b/spec/services/un_emoji_react_service_spec.rb new file mode 100644 index 00000000000000..393e83b2e06e2c --- /dev/null +++ b/spec/services/un_emoji_react_service_spec.rb @@ -0,0 +1,139 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UnEmojiReactService, type: :service do + subject do + described_class.new.call(sender.id, status.id, emoji_reaction) + EmojiReaction.where(status: status, account: sender) + end + + let!(:emoji_reaction) { nil } + let(:sender) { Fabricate(:user).account } + let(:author) { Fabricate(:user).account } + let(:status) { Fabricate(:status, account: author) } + + context 'when a simple case' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + it 'unreact with emoji' do + expect(subject.count).to eq 0 + end + end + + context 'when no emoji reactions' do + it 'unreact with emoji' do + expect(subject.count).to eq 0 + end + end + + context 'with custom emoji of local' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: 'ohagi', custom_emoji: custom_emoji) } + let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'ohagi') } + + it 'react with emoji' do + expect(subject.count).to eq 0 + end + end + + context 'with custom emoji of remote' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: 'ohagi', custom_emoji: custom_emoji) } + let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'ohagi', domain: 'foo.bar', uri: 'https://foo.bar/emoji/ohagi') } + + it 'react with emoji' do + expect(subject.count).to eq 0 + end + end + + context 'when other account already set' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + before { Fabricate(:emoji_reaction, status: status, name: '😀') } + + it 'unreact with emoji' do + expect(subject.count).to eq 0 + expect(EmojiReaction.where(status: status).count).to eq 1 + end + end + + context 'when this account already set multiple emojis' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + before do + Fabricate(:emoji_reaction, account: sender, status: status, name: '😂') + Fabricate(:emoji_reaction, account: sender, status: status, name: '🚗') + end + + it 'unreact with emoji' do + expect(subject.count).to eq 2 + expect(subject.pluck(:name)).to contain_exactly('😂', '🚗') + end + end + + context 'with remove all emojis' do + before do + Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') + Fabricate(:emoji_reaction, account: sender, status: status, name: '😂') + Fabricate(:emoji_reaction, account: sender, status: status, name: '🚗') + end + + it 'react with emoji' do + expect(subject.count).to eq 0 + end + end + + context 'when has remote followers' do + let!(:bob) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor', inbox_url: 'https://foo.bar/inbox', protocol: 'activitypub') } + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + before do + bob.follow!(author) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 0 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end + + context 'when has relay server' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + before do + Fabricate(:relay, inbox_url: 'https://foo.bar/inbox', state: :accepted) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 0 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end + + context 'when has friend server' do + let(:emoji_reaction) { Fabricate(:emoji_reaction, account: sender, status: status, name: '😀') } + + before do + Fabricate(:friend_domain, inbox_url: 'https://foo.bar/inbox', active_state: :accepted, pseudo_relay: true) + stub_request(:post, 'https://foo.bar/inbox') + end + + it 'react with emoji' do + expect(subject.count).to eq 0 + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(sender), + content: '😀', + }))).to have_been_made.once + end + end +end diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index 288466bdeb784a..d2f3d42a0f09ed 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -218,4 +218,103 @@ subject.call(status, status.account_id, text: 'Bar') expect(ActivityPub::DistributionWorker).to have_received(:perform_async) end + + describe 'ng word is set' do + let(:account) { Fabricate(:account) } + let(:status) { PostStatusService.new.call(account, text: 'ohagi') } + + it 'hit ng words' do + text = 'ng word test' + Form::AdminSettings.new(ng_words: 'test').save + + expect { subject.call(status, status.account_id, text: text) }.to raise_error(Mastodon::ValidationError) + end + + it 'not hit ng words' do + text = 'ng word aiueo' + Form::AdminSettings.new(ng_words: 'test').save + + status2 = subject.call(status, status.account_id, text: text) + + expect(status2).to be_persisted + expect(status2.text).to eq text + end + + it 'hit ng words for mention' do + Fabricate(:account, username: 'ohagi', domain: nil) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + expect { subject.call(status, status.account_id, text: text) }.to raise_error(Mastodon::ValidationError) + expect(status.reload.text).to_not eq text + expect(status.mentioned_accounts.pluck(:username)).to_not include 'ohagi' + end + + it 'hit ng words for mention but local posts are not checked' do + Fabricate(:account, username: 'ohagi', domain: nil) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '0').save + + status2 = subject.call(status, status.account_id, text: text) + + expect(status2).to be_persisted + expect(status2.text).to eq text + end + + it 'hit ng words for mention to follower' do + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + mentioned.follow!(account) + text = 'ng word test @ohagi' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + status2 = subject.call(status, status.account_id, text: text) + + expect(status2).to be_persisted + expect(status2.text).to eq text + end + + it 'hit ng words for reply' do + text = 'ng word test' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + status = PostStatusService.new.call(account, text: 'hello', thread: Fabricate(:status)) + + expect { subject.call(status, status.account_id, text: text) }.to raise_error(Mastodon::ValidationError) + expect(status.reload.text).to_not eq text + end + + it 'hit ng words for reply to follower' do + mentioned = Fabricate(:account, username: 'ohagi', domain: nil) + mentioned.follow!(account) + text = 'ng word test' + Form::AdminSettings.new(ng_words_for_stranger_mention: 'test', stranger_mention_from_local_ng: '1').save + + status = PostStatusService.new.call(account, text: 'hello', thread: Fabricate(:status, account: mentioned)) + + status = subject.call(status, status.account_id, text: text) + + expect(status).to be_persisted + expect(status.text).to eq text + end + + it 'using hashtag under limit' do + text = '#a #b' + Form::AdminSettings.new(post_hash_tags_max: 2).save + + subject.call(status, status.account_id, text: text) + + expect(status.reload.tags.count).to eq 2 + expect(status.text).to eq text + end + + it 'using hashtag over limit' do + text = '#a #b #c' + Form::AdminSettings.new(post_hash_tags_max: 2).save + + expect { subject.call(status, status.account_id, text: text) }.to raise_error Mastodon::ValidationError + + expect(status.reload.tags.count).to eq 0 + expect(status.text).to_not eq text + end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 85a43f5d00969a..95bed8f59b80b3 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -42,6 +42,12 @@ # for RSpec::Retry config.verbose_retry = true config.display_try_failure_messages = true + + # Use the GitHub Annotations formatter for CI + if ENV['GITHUB_ACTIONS'] == 'true' + require 'rspec/github' + config.add_formatter RSpec::Github::Formatter + end end def body_as_json diff --git a/spec/support/examples/cache.rb b/spec/support/examples/cache.rb new file mode 100644 index 00000000000000..43cfbade8242f9 --- /dev/null +++ b/spec/support/examples/cache.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +shared_examples 'cacheable response' do |expects_vary: false| + it 'does not set cookies' do + expect(response.cookies).to be_empty + expect(response.headers['Set-Cookies']).to be_nil + end + + it 'does not set sessions' do + expect(session).to be_empty + end + + if expects_vary + it 'returns Vary header' do + expect(response.headers['Vary']).to include(expects_vary) + end + end + + it 'returns public Cache-Control header' do + expect(response.headers['Cache-Control']).to include('public') + end +end diff --git a/spec/support/signed_request_helpers.rb b/spec/support/signed_request_helpers.rb new file mode 100644 index 00000000000000..33d7dba6b87b90 --- /dev/null +++ b/spec/support/signed_request_helpers.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module SignedRequestHelpers + def get(path, headers: nil, sign_with: nil, **args) + return super path, headers: headers, **args if sign_with.nil? + + headers ||= {} + headers['Date'] = Time.now.utc.httpdate + headers['Host'] = ENV.fetch('LOCAL_DOMAIN') + signed_headers = headers.merge('(request-target)' => "get #{path}").slice('(request-target)', 'Host', 'Date') + + key_id = ActivityPub::TagManager.instance.key_uri_for(sign_with) + keypair = sign_with.keypair + signed_string = signed_headers.map { |key, value| "#{key.downcase}: #{value}" }.join("\n") + signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) + + headers['Signature'] = "keyId=\"#{key_id}\",algorithm=\"rsa-sha256\",headers=\"#{signed_headers.keys.join(' ').downcase}\",signature=\"#{signature}\"" + + super path, headers: headers, **args + end +end diff --git a/spec/support/stories/profile_stories.rb b/spec/support/stories/profile_stories.rb index 2b345ddef10b31..82667ca080c99b 100644 --- a/spec/support/stories/profile_stories.rb +++ b/spec/support/stories/profile_stories.rb @@ -18,7 +18,7 @@ def as_a_logged_in_user visit new_user_session_path fill_in 'user_email', with: email fill_in 'user_password', with: password - click_on I18n.t('auth.login') + click_button I18n.t('auth.login') end def with_alice_as_local_user diff --git a/spec/system/new_statuses_spec.rb b/spec/system/new_statuses_spec.rb index 6faed6c808c30c..244101f4d4fd6b 100644 --- a/spec/system/new_statuses_spec.rb +++ b/spec/system/new_statuses_spec.rb @@ -24,10 +24,10 @@ within('.compose-form') do fill_in "What's on your mind?", with: status_text - click_on 'Publish!' + click_button 'Publish!' end - expect(subject).to have_selector('.status__content__text', text: status_text) + expect(subject).to have_css('.status__content__text', text: status_text) end it 'can be posted again' do @@ -37,9 +37,9 @@ within('.compose-form') do fill_in "What's on your mind?", with: status_text - click_on 'Publish!' + click_button 'Publish!' end - expect(subject).to have_selector('.status__content__text', text: status_text) + expect(subject).to have_css('.status__content__text', text: status_text) end end diff --git a/spec/validators/existing_username_validator_spec.rb b/spec/validators/existing_username_validator_spec.rb new file mode 100644 index 00000000000000..4f1dd55a17bb07 --- /dev/null +++ b/spec/validators/existing_username_validator_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ExistingUsernameValidator do + let(:record_class) do + Class.new do + include ActiveModel::Validations + attr_accessor :contact, :friends + + def self.name + 'Record' + end + + validates :contact, existing_username: true + validates :friends, existing_username: { multiple: true } + end + end + let(:record) { record_class.new } + + describe '#validate_each' do + context 'with a nil value' do + it 'does not add errors' do + record.contact = nil + + expect(record).to be_valid + expect(record.errors).to be_empty + end + end + + context 'when there are no accounts' do + it 'adds errors to the record' do + record.contact = 'user@example.com' + + expect(record).to_not be_valid + expect(record.errors.first.attribute).to eq(:contact) + expect(record.errors.first.type).to eq I18n.t('existing_username_validator.not_found') + end + end + + context 'when there are accounts' do + before { Fabricate(:account, domain: 'example.com', username: 'user') } + + context 'when the value does not match' do + it 'adds errors to the record' do + record.contact = 'friend@other.host' + + expect(record).to_not be_valid + expect(record.errors.first.attribute).to eq(:contact) + expect(record.errors.first.type).to eq I18n.t('existing_username_validator.not_found') + end + + context 'when multiple is true' do + it 'adds errors to the record' do + record.friends = 'friend@other.host' + + expect(record).to_not be_valid + expect(record.errors.first.attribute).to eq(:friends) + expect(record.errors.first.type).to eq I18n.t('existing_username_validator.not_found_multiple', usernames: 'friend@other.host') + end + end + end + + context 'when the value does match' do + it 'does not add errors to the record' do + record.contact = 'user@example.com' + + expect(record).to be_valid + expect(record.errors).to be_empty + end + + context 'when multiple is true' do + it 'does not add errors to the record' do + record.friends = 'user@example.com' + + expect(record).to be_valid + expect(record.errors).to be_empty + end + end + end + end + end +end diff --git a/spec/validators/unreserved_username_validator_spec.rb b/spec/validators/unreserved_username_validator_spec.rb index 6f353eeafdc517..0eb5f83683df4f 100644 --- a/spec/validators/unreserved_username_validator_spec.rb +++ b/spec/validators/unreserved_username_validator_spec.rb @@ -2,41 +2,118 @@ require 'rails_helper' -RSpec.describe UnreservedUsernameValidator, type: :validator do - describe '#validate' do - before do - allow(validator).to receive(:reserved_username?) { reserved_username } - validator.validate(account) - end +describe UnreservedUsernameValidator do + let(:record_class) do + Class.new do + include ActiveModel::Validations + attr_accessor :username - let(:validator) { described_class.new } - let(:account) { instance_double(Account, username: username, errors: errors) } - let(:errors) { instance_double(ActiveModel::Errors, add: nil) } + validates_with UnreservedUsernameValidator + end + end + let(:record) { record_class.new } - context 'when @username is blank?' do - let(:username) { nil } + describe '#validate' do + context 'when username is nil' do + it 'does not add errors' do + record.username = nil - it 'not calls errors.add' do - expect(errors).to_not have_received(:add).with(:username, any_args) + expect(record).to be_valid + expect(record.errors).to be_empty end end - context 'when @username is not blank?' do - let(:username) { 'f' } + context 'when PAM is enabled' do + before do + allow(Devise).to receive(:pam_authentication).and_return(true) + end + + context 'with a pam service available' do + let(:service) { double } + let(:pam_class) do + Class.new do + def self.account(service, username); end + end + end + + before do + stub_const('Rpam2', pam_class) + allow(Devise).to receive(:pam_controlled_service).and_return(service) + end + + context 'when the account exists' do + before do + allow(Rpam2).to receive(:account).with(service, 'username').and_return(true) + end + + it 'adds errors to the record' do + record.username = 'username' + + expect(record).to_not be_valid + expect(record.errors.first.attribute).to eq(:username) + expect(record.errors.first.type).to eq(:reserved) + end + end + + context 'when the account does not exist' do + before do + allow(Rpam2).to receive(:account).with(service, 'username').and_return(false) + end - context 'with reserved_username?' do - let(:reserved_username) { true } + it 'does not add errors to the record' do + record.username = 'username' - it 'calls errors.add' do - expect(errors).to have_received(:add).with(:username, :reserved) + expect(record).to be_valid + expect(record.errors).to be_empty + end end end - context 'when username is not reserved' do - let(:reserved_username) { false } + context 'without a pam service' do + before do + allow(Devise).to receive(:pam_controlled_service).and_return(false) + end + + context 'when there are not any reserved usernames' do + before do + stub_reserved_usernames(nil) + end + + it 'does not add errors to the record' do + record.username = 'username' + + expect(record).to be_valid + expect(record.errors).to be_empty + end + end + + context 'when there are reserved usernames' do + before do + stub_reserved_usernames(%w(alice bob)) + end + + context 'when the username is reserved' do + it 'adds errors to the record' do + record.username = 'alice' + + expect(record).to_not be_valid + expect(record.errors.first.attribute).to eq(:username) + expect(record.errors.first.type).to eq(:reserved) + end + end + + context 'when the username is not reserved' do + it 'does not add errors to the record' do + record.username = 'chris' + + expect(record).to be_valid + expect(record.errors).to be_empty + end + end + end - it 'not calls errors.add' do - expect(errors).to_not have_received(:add).with(:username, any_args) + def stub_reserved_usernames(value) + allow(Setting).to receive(:[]).with('reserved_usernames').and_return(value) end end end diff --git a/spec/workers/move_worker_spec.rb b/spec/workers/move_worker_spec.rb index 7577f6e896847f..efad92c047be38 100644 --- a/spec/workers/move_worker_spec.rb +++ b/spec/workers/move_worker_spec.rb @@ -67,39 +67,31 @@ end shared_examples 'block and mute handling' do - it 'makes blocks carry over and add a note' do + it 'makes blocks and mutes carry over and adds a note' do subject.perform(source_account.id, target_account.id) + expect(block_service).to have_received(:call).with(blocking_account, target_account) expect(AccountNote.find_by(account: blocking_account, target_account: target_account).comment).to include(source_account.acct) - end - it 'makes mutes carry over and add a note' do - subject.perform(source_account.id, target_account.id) expect(muting_account.muting?(target_account)).to be true expect(AccountNote.find_by(account: muting_account, target_account: target_account).comment).to include(source_account.acct) end end shared_examples 'followers count handling' do - it 'updates the source account followers count' do + it 'updates the source and target account followers counts' do subject.perform(source_account.id, target_account.id) - expect(source_account.reload.followers_count).to eq(source_account.passive_relationships.count) - end - it 'updates the target account followers count' do - subject.perform(source_account.id, target_account.id) + expect(source_account.reload.followers_count).to eq(source_account.passive_relationships.count) expect(target_account.reload.followers_count).to eq(target_account.passive_relationships.count) end end shared_examples 'lists handling' do - it 'puts the new account on the list' do + it 'puts the new account on the list and makes valid lists', sidekiq: :inline do subject.perform(source_account.id, target_account.id) - expect(list.accounts.include?(target_account)).to be true - end - it 'does not create invalid list memberships' do - subject.perform(source_account.id, target_account.id) + expect(list.accounts.include?(target_account)).to be true expect(ListAccount.all).to all be_valid end end diff --git a/streaming/index.js b/streaming/index.js index c1569b1fb733b4..b02fedfccca237 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -256,7 +256,7 @@ const startServer = async () => { CHANNEL_NAMES.forEach(( channel ) => { connectedChannels.set({ type: 'websocket', channel }, 0); connectedChannels.set({ type: 'eventsource', channel }, 0); - }) + }); // Prime the counters so that we don't loose metrics between restarts. // Unfortunately counters don't support the set() API, so instead I'm using @@ -1363,7 +1363,7 @@ const startServer = async () => { log.verbose(request.requestId, 'Subscription error:', err.toString()); socket.send(JSON.stringify({ error: err.toString() })); }); - } + }; const removeSubscription = (subscriptions, channelIds, request) => { @@ -1383,7 +1383,7 @@ const startServer = async () => { subscription.stopHeartbeat(); delete subscriptions[channelIds.join(';')]; - } + }; /** * @param {WebSocketSession} session @@ -1403,7 +1403,7 @@ const startServer = async () => { socket.send(JSON.stringify({ error: "Error unsubscribing from channel" })); } }); - } + }; /** * @param {WebSocketSession} session @@ -1481,7 +1481,7 @@ const startServer = async () => { const subscriptions = Object.keys(session.subscriptions); subscriptions.forEach(channelIds => { - removeSubscription(session.subscriptions, channelIds.split(';'), req) + removeSubscription(session.subscriptions, channelIds.split(';'), req); }); // Decrement the metrics for connected clients: diff --git a/yarn.lock b/yarn.lock index 80f1d7b76e0f8a..24284fe7882928 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1305,15 +1305,10 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" - integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== - -"@eslint-community/regexpp@^4.6.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" + integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== "@eslint/eslintrc@^2.1.2": version "2.1.2" @@ -1330,10 +1325,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" - integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== +"@eslint/js@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" + integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== "@floating-ui/core@^1.3.1": version "1.3.1" @@ -2399,9 +2394,9 @@ integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4": - version "18.2.8" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.8.tgz#338f1b0a646c9f10e0a97208c1d26b9f473dffd6" - integrity sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw== + version "18.2.11" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.11.tgz#4332c315544698a0875dfdb6e320dda59e1b3d58" + integrity sha512-zq6Dy0EiCuF9pWFW6I6k6W2LdpUixLE4P6XjXU1QHLfak3GPACQfLwEuHzY5pOYa4hzj1d0GxX/P141aFjZsyg== dependencies: "@types/react" "*" @@ -2501,9 +2496,9 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7": - version "18.2.24" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.24.tgz#3c7d68c02e0205a472f04abe4a0c1df35d995c05" - integrity sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw== + version "18.2.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.25.tgz#99fa44154132979e870ff409dc5b6e67f06f0199" + integrity sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2594,14 +2589,14 @@ integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== "@types/uuid@^9.0.0": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.4.tgz#e884a59338da907bda8d2ed03e01c5c49d036f1c" - integrity sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA== + version "9.0.5" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.5.tgz#25a71eb73eba95ac0e559ff3dd018fc08294acf6" + integrity sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ== "@types/warning@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" - integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.1.tgz#a62d1d2b7f34376da84ee0afe0145152e62b9699" + integrity sha512-ywJmriP+nvjBKNBEMaNZgj2irZHoxcKeYcyMLbqhYKbDVn8yCIULy2Ol/tvIb37O3IBeZj3RU4tXqQTtGwoAMg== "@types/webpack-sources@*": version "3.2.1" @@ -2630,22 +2625,22 @@ integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== "@types/yargs@^17.0.24", "@types/yargs@^17.0.8": - version "17.0.26" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.26.tgz#388e5002a8b284ad7b4599ba89920a6d74d8d79a" - integrity sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw== + version "17.0.28" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.28.tgz#d106e4301fbacde3d1796ab27374dd16588ec851" + integrity sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.0.0": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz#d98046e9f7102d49a93d944d413c6055c47fafd7" - integrity sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA== + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz#057338df21b6062c2f2fc5999fbea8af9973ac6d" + integrity sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/type-utils" "6.7.3" - "@typescript-eslint/utils" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/scope-manager" "6.7.4" + "@typescript-eslint/type-utils" "6.7.4" + "@typescript-eslint/utils" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2654,31 +2649,31 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.3.tgz#aaf40092a32877439e5957e18f2d6a91c82cc2fd" - integrity sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ== - dependencies: - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.4.tgz#23d1dd4fe5d295c7fa2ab651f5406cd9ad0bd435" + integrity sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA== + dependencies: + "@typescript-eslint/scope-manager" "6.7.4" + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/typescript-estree" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz#07e5709c9bdae3eaf216947433ef97b3b8b7d755" - integrity sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ== +"@typescript-eslint/scope-manager@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz#a484a17aa219e96044db40813429eb7214d7b386" + integrity sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" -"@typescript-eslint/type-utils@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz#c2c165c135dda68a5e70074ade183f5ad68f3400" - integrity sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw== +"@typescript-eslint/type-utils@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz#847cd3b59baf948984499be3e0a12ff07373e321" + integrity sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ== dependencies: - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/utils" "6.7.3" + "@typescript-eslint/typescript-estree" "6.7.4" + "@typescript-eslint/utils" "6.7.4" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2687,10 +2682,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.3.tgz#0402b5628a63f24f2dc9d4a678e9a92cc50ea3e9" - integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== +"@typescript-eslint/types@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.4.tgz#5d358484d2be986980c039de68e9f1eb62ea7897" + integrity sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2705,30 +2700,30 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz#ec5bb7ab4d3566818abaf0e4a8fa1958561b7279" - integrity sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g== +"@typescript-eslint/typescript-estree@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz#f2baece09f7bb1df9296e32638b2e1130014ef1a" + integrity sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/visitor-keys" "6.7.4" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.3.tgz#96c655816c373135b07282d67407cb577f62e143" - integrity sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg== +"@typescript-eslint/utils@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.4.tgz#2236f72b10e38277ee05ef06142522e1de470ff2" + integrity sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/scope-manager" "6.7.4" + "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/typescript-estree" "6.7.4" semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": @@ -2739,12 +2734,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz#83809631ca12909bd2083558d2f93f5747deebb2" - integrity sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg== +"@typescript-eslint/visitor-keys@6.7.4": + version "6.7.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz#80dfecf820fc67574012375859085f91a4dff043" + integrity sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA== dependencies: - "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/types" "6.7.4" eslint-visitor-keys "^3.4.1" "@webassemblyjs/ast@1.9.0": @@ -3838,9 +3833,9 @@ buffer@^6.0.3: ieee754 "^1.2.1" bufferutil@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" @@ -5548,14 +5543,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.41.0: - version "8.50.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" - integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== + version "8.51.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" + integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.50.0" + "@eslint/js" "8.51.0" "@humanwhocodes/config-array" "^0.11.11" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -6021,15 +6016,15 @@ findup-sync@^3.0.0: resolve-dir "^1.0.1" flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: +flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== @@ -6328,9 +6323,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" @@ -8039,9 +8034,9 @@ keycode@^2.1.7: integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -8791,9 +8786,9 @@ node-forge@^0.10.0: integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== node-int64@^0.4.0: version "0.4.0"