From f51e991561865ea68187cbf2281e4d3354f5a863 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 01:51:10 +0200 Subject: [PATCH 001/163] Add client-side timeout on resend confirmation button (#26300) --- app/javascript/packs/sign_up.js | 26 ++++++++++++++++++++++++++ app/views/auth/setup/show.html.haml | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/javascript/packs/sign_up.js b/app/javascript/packs/sign_up.js index 9aae9c11b8..cf9c837773 100644 --- a/app/javascript/packs/sign_up.js +++ b/app/javascript/packs/sign_up.js @@ -13,4 +13,30 @@ ready(() => { console.error(error); }); }, 5000); + + document.querySelectorAll('.timer-button').forEach(button => { + let counter = 30; + + const container = document.createElement('span'); + + const updateCounter = () => { + container.innerText = ` (${counter})`; + }; + + updateCounter(); + + const countdown = setInterval(() => { + counter--; + + if (counter === 0) { + button.disabled = false; + button.removeChild(container); + clearInterval(countdown); + } else { + updateCounter(); + } + }, 1000); + + button.appendChild(container); + }); }); diff --git a/app/views/auth/setup/show.html.haml b/app/views/auth/setup/show.html.haml index 64deca3345..97c826d704 100644 --- a/app/views/auth/setup/show.html.haml +++ b/app/views/auth/setup/show.html.haml @@ -19,6 +19,6 @@ = f.input :email, required: true, hint: false, input_html: { 'aria-label': t('simple_form.labels.defaults.email'), autocomplete: 'off' } .actions - = f.submit t('auth.resend_confirmation'), class: 'button' + = f.button :button, t('auth.resend_confirmation'), type: :submit, class: 'button timer-button', disabled: true .form-footer= render 'auth/shared/links' From dab14e6b2ed5b4a1753864e5c8560e24e5eec0eb Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Thu, 3 Aug 2023 10:05:35 +0200 Subject: [PATCH 002/163] Allow spaces around commas in ALLOWED_PRIVATE_ADDRESSES (#26297) --- app/lib/request.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/request.rb b/app/lib/request.rb index adc9a48f3d..e5a9476a8e 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -346,7 +346,7 @@ class Request end def private_address_exceptions - @private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(',').map { |addr| IPAddr.new(addr) } + @private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(/(?:\s*,\s*|\s+)/).map { |addr| IPAddr.new(addr) } end end end From 4c8daf28bba8e5ca71a2134c982dfdd847563af9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 11:04:05 +0200 Subject: [PATCH 003/163] Change indexing frequency from 5 minutes to 1 minute, add locks to schedulers (#26304) --- app/workers/scheduler/follow_recommendations_scheduler.rb | 2 +- app/workers/scheduler/indexing_scheduler.rb | 6 ++---- app/workers/scheduler/instance_refresh_scheduler.rb | 2 +- app/workers/scheduler/ip_cleanup_scheduler.rb | 2 +- app/workers/scheduler/pghero_scheduler.rb | 2 +- app/workers/scheduler/scheduled_statuses_scheduler.rb | 2 +- app/workers/scheduler/suspended_user_cleanup_scheduler.rb | 2 +- app/workers/scheduler/user_cleanup_scheduler.rb | 2 +- app/workers/scheduler/vacuum_scheduler.rb | 2 +- config/sidekiq.yml | 2 +- 10 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/workers/scheduler/follow_recommendations_scheduler.rb b/app/workers/scheduler/follow_recommendations_scheduler.rb index 17cf3f2cc3..ea59ad986b 100644 --- a/app/workers/scheduler/follow_recommendations_scheduler.rb +++ b/app/workers/scheduler/follow_recommendations_scheduler.rb @@ -4,7 +4,7 @@ class Scheduler::FollowRecommendationsScheduler include Sidekiq::Worker include Redisable - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i # The maximum number of accounts that can be requested in one page from the # API is 80, and the suggestions API does not allow pagination. This number diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb index d622f5586e..2868a3b715 100644 --- a/app/workers/scheduler/indexing_scheduler.rb +++ b/app/workers/scheduler/indexing_scheduler.rb @@ -4,7 +4,7 @@ class Scheduler::IndexingScheduler include Sidekiq::Worker include Redisable - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i IMPORT_BATCH_SIZE = 1000 SCAN_BATCH_SIZE = 10 * IMPORT_BATCH_SIZE @@ -16,9 +16,7 @@ class Scheduler::IndexingScheduler with_redis do |redis| redis.sscan_each("chewy:queue:#{type.name}", count: SCAN_BATCH_SIZE).each_slice(IMPORT_BATCH_SIZE) do |ids| type.import!(ids) - redis.pipelined do |pipeline| - pipeline.srem("chewy:queue:#{type.name}", ids) - end + redis.srem("chewy:queue:#{type.name}", ids) end end end diff --git a/app/workers/scheduler/instance_refresh_scheduler.rb b/app/workers/scheduler/instance_refresh_scheduler.rb index 59f91dc623..818682a5d2 100644 --- a/app/workers/scheduler/instance_refresh_scheduler.rb +++ b/app/workers/scheduler/instance_refresh_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::InstanceRefreshScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform Instance.refresh diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb index 8f607db037..f78c0584d7 100644 --- a/app/workers/scheduler/ip_cleanup_scheduler.rb +++ b/app/workers/scheduler/ip_cleanup_scheduler.rb @@ -6,7 +6,7 @@ class Scheduler::IpCleanupScheduler IP_RETENTION_PERIOD = ENV.fetch('IP_RETENTION_PERIOD', 1.year).to_i.seconds.freeze SESSION_RETENTION_PERIOD = ENV.fetch('SESSION_RETENTION_PERIOD', 1.year).to_i.seconds.freeze - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform clean_ip_columns! diff --git a/app/workers/scheduler/pghero_scheduler.rb b/app/workers/scheduler/pghero_scheduler.rb index a756b13b93..49bf2db7a6 100644 --- a/app/workers/scheduler/pghero_scheduler.rb +++ b/app/workers/scheduler/pghero_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::PgheroScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform PgHero.capture_space_stats diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb index 3bf6300b3c..b5801248f2 100644 --- a/app/workers/scheduler/scheduled_statuses_scheduler.rb +++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::ScheduledStatusesScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform publish_scheduled_statuses! diff --git a/app/workers/scheduler/suspended_user_cleanup_scheduler.rb b/app/workers/scheduler/suspended_user_cleanup_scheduler.rb index 87e22161bc..90feead676 100644 --- a/app/workers/scheduler/suspended_user_cleanup_scheduler.rb +++ b/app/workers/scheduler/suspended_user_cleanup_scheduler.rb @@ -16,7 +16,7 @@ class Scheduler::SuspendedUserCleanupScheduler # has the capacity for it. MAX_DELETIONS_PER_JOB = 10 - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform return if Sidekiq::Queue.new('pull').size > MAX_PULL_SIZE diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb index 4aee7935a2..2d2efc731a 100644 --- a/app/workers/scheduler/user_cleanup_scheduler.rb +++ b/app/workers/scheduler/user_cleanup_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::UserCleanupScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform clean_unconfirmed_accounts! diff --git a/app/workers/scheduler/vacuum_scheduler.rb b/app/workers/scheduler/vacuum_scheduler.rb index 9c040f6e47..1c9a2aabe3 100644 --- a/app/workers/scheduler/vacuum_scheduler.rb +++ b/app/workers/scheduler/vacuum_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::VacuumScheduler include Sidekiq::Worker - sidekiq_options retry: 0, lock: :until_executed + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i def perform vacuum_operations.each do |operation| diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 2278329a56..12c45c22a1 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -23,7 +23,7 @@ class: Scheduler::Trends::ReviewNotificationsScheduler queue: scheduler indexing_scheduler: - every: '5m' + interval: 1 minute class: Scheduler::IndexingScheduler queue: scheduler vacuum_scheduler: From 5ec0d5faa9bcfd56be8785fb727b8036d3dd5009 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 3 Aug 2023 11:12:52 +0200 Subject: [PATCH 004/163] Add primary key to preview_cards_statuses join table (includes deduplication migration) (#25243) --- app/services/fetch_link_card_service.rb | 10 +++-- ..._unique_index_on_preview_cards_statuses.rb | 39 +++++++++++++++++++ ...ey_to_preview_cards_statuses_join_table.rb | 20 ++++++++++ db/schema.rb | 4 +- lib/tasks/tests.rake | 25 ++++++++++++ 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb create mode 100644 db/post_migrate/20230803112520_add_primary_key_to_preview_cards_statuses_join_table.rb diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index 8865824609..13775e63c1 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -61,9 +61,13 @@ class FetchLinkCardService < BaseService end def attach_card - @status.preview_cards << @card - Rails.cache.delete(@status) - Trends.links.register(@status) + with_redis_lock("attach_card:#{@status.id}") do + return if @status.preview_cards.any? + + @status.preview_cards << @card + Rails.cache.delete(@status) + Trends.links.register(@status) + end end def parse_urls diff --git a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb new file mode 100644 index 0000000000..936d7840eb --- /dev/null +++ b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + + def up + add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true + rescue ActiveRecord::RecordNotUnique + deduplicate_and_reindex! + end + + def down + remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey + end + + private + + def deduplicate_and_reindex! + deduplicate_preview_cards! + + safety_assured { execute 'REINDEX INDEX preview_cards_statuses_pkey' } + rescue ActiveRecord::RecordNotUnique + retry + end + + def deduplicate_preview_cards! + # Statuses should have only one preview card at most, even if that's not the database + # constraint we will end up with + duplicate_ids = select_all('SELECT status_id FROM preview_cards_statuses GROUP BY status_id HAVING count(*) > 1;').rows + + duplicate_ids.each_slice(1000) do |ids| + # This one is tricky: since we don't have primary keys to keep only one record, + # use the physical `ctid` + safety_assured do + execute "DELETE FROM preview_cards_statuses p WHERE p.status_id IN (#{ids.join(', ')}) AND p.ctid NOT IN (SELECT q.ctid FROM preview_cards_statuses q WHERE q.status_id = p.status_id LIMIT 1)" + end + end + end +end diff --git a/db/post_migrate/20230803112520_add_primary_key_to_preview_cards_statuses_join_table.rb b/db/post_migrate/20230803112520_add_primary_key_to_preview_cards_statuses_join_table.rb new file mode 100644 index 0000000000..34877ac672 --- /dev/null +++ b/db/post_migrate/20230803112520_add_primary_key_to_preview_cards_statuses_join_table.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AddPrimaryKeyToPreviewCardsStatusesJoinTable < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + + def up + safety_assured do + execute 'ALTER TABLE preview_cards_statuses ADD PRIMARY KEY USING INDEX preview_cards_statuses_pkey' + end + end + + def down + safety_assured do + # I have found no way to demote the primary key to an index, instead, re-create the index + execute 'CREATE UNIQUE INDEX CONCURRENTLY preview_cards_statuses_pkey_tmp ON preview_cards_statuses (status_id, preview_card_id)' + execute 'ALTER TABLE preview_cards_statuses DROP CONSTRAINT preview_cards_statuses_pkey' + execute 'ALTER INDEX preview_cards_statuses_pkey_tmp RENAME TO preview_cards_statuses_pkey' + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 59ab9dbedf..0c8ede3831 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_07_24_160715) do +ActiveRecord::Schema[7.0].define(version: 2023_08_03_112520) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -805,7 +805,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_24_160715) do t.index ["url"], name: "index_preview_cards_on_url", unique: true end - create_table "preview_cards_statuses", id: false, force: :cascade do |t| + create_table "preview_cards_statuses", primary_key: ["status_id", "preview_card_id"], force: :cascade do |t| t.bigint "preview_card_id", null: false t.bigint "status_id", null: false t.index ["status_id", "preview_card_id"], name: "index_preview_cards_statuses_on_status_id_and_preview_card_id" diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 3c88ce4509..ef4d46fe09 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -63,6 +63,11 @@ namespace :tests do puts 'Account domains not properly normalized' exit(1) end + + unless Status.find(12).preview_cards.pluck(:url) == ['https://joinmastodon.org/'] + puts 'Preview cards not deduplicated as expected' + exit(1) + end end desc 'Populate the database with test data for 2.4.3' @@ -238,6 +243,11 @@ namespace :tests do (10, 2, '@admin hey!', NULL, 1, 3, now(), now()), (11, 1, '@user hey!', 10, 1, 3, now(), now()); + INSERT INTO "statuses" + (id, account_id, text, created_at, updated_at) + VALUES + (12, 1, 'check out https://joinmastodon.org/', now(), now()); + -- mentions (from previous statuses) INSERT INTO "mentions" @@ -326,6 +336,21 @@ namespace :tests do (1, 6, 2, 'Follow', 2, now(), now()), (2, 2, 1, 'Mention', 4, now(), now()), (3, 1, 2, 'Mention', 5, now(), now()); + + -- preview cards + + INSERT INTO "preview_cards" + (id, url, title, created_at, updated_at) + VALUES + (1, 'https://joinmastodon.org/', 'Mastodon - Decentralized social media', now(), now()); + + -- many-to-many association between preview cards and statuses + + INSERT INTO "preview_cards_statuses" + (status_id, preview_card_id) + VALUES + (12, 1), + (12, 1); SQL end end From 788d7a6a2a4582601dd741ad880ef7b775335d14 Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Thu, 3 Aug 2023 06:25:47 -0300 Subject: [PATCH 005/163] Add `GET /api/v1/instance/languages` to REST API (#24443) Co-authored-by: Eugen Rochko Co-authored-by: Claire --- .../api/v1/instances/languages_controller.rb | 21 +++++++++++++++++++ app/presenters/language_presenter.rb | 20 ++++++++++++++++++ app/serializers/rest/language_serializer.rb | 5 +++++ config/routes/api.rb | 1 + .../api/v1/instances/languages_spec.rb | 19 +++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 app/controllers/api/v1/instances/languages_controller.rb create mode 100644 app/presenters/language_presenter.rb create mode 100644 app/serializers/rest/language_serializer.rb create mode 100644 spec/requests/api/v1/instances/languages_spec.rb diff --git a/app/controllers/api/v1/instances/languages_controller.rb b/app/controllers/api/v1/instances/languages_controller.rb new file mode 100644 index 0000000000..17509e748c --- /dev/null +++ b/app/controllers/api/v1/instances/languages_controller.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class Api::V1::Instances::LanguagesController < Api::BaseController + skip_before_action :require_authenticated_user!, unless: :limited_federation_mode? + skip_around_action :set_locale + + before_action :set_languages + + vary_by '' + + def show + cache_even_if_authenticated! + render json: @languages, each_serializer: REST::LanguageSerializer + end + + private + + def set_languages + @languages = LanguagesHelper::SUPPORTED_LOCALES.keys.map { |code| LanguagePresenter.new(code) } + end +end diff --git a/app/presenters/language_presenter.rb b/app/presenters/language_presenter.rb new file mode 100644 index 0000000000..69ea991d54 --- /dev/null +++ b/app/presenters/language_presenter.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class LanguagePresenter < ActiveModelSerializers::Model + attributes :code, :name, :native_name + + def initialize(code) + super() + + @code = code + @item = LanguagesHelper::SUPPORTED_LOCALES[code] + end + + def name + @item[0] + end + + def native_name + @item[1] + end +end diff --git a/app/serializers/rest/language_serializer.rb b/app/serializers/rest/language_serializer.rb new file mode 100644 index 0000000000..e07956465c --- /dev/null +++ b/app/serializers/rest/language_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class REST::LanguageSerializer < ActiveModel::Serializer + attributes :code, :name +end diff --git a/config/routes/api.rb b/config/routes/api.rb index 6db03147b2..48c4c65220 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -120,6 +120,7 @@ namespace :api, format: false do resource :privacy_policy, only: [:show], controller: 'instances/privacy_policies' resource :extended_description, only: [:show], controller: 'instances/extended_descriptions' resource :translation_languages, only: [:show], controller: 'instances/translation_languages' + resource :languages, only: [:show], controller: 'instances/languages' resource :activity, only: [:show], controller: 'instances/activity' end diff --git a/spec/requests/api/v1/instances/languages_spec.rb b/spec/requests/api/v1/instances/languages_spec.rb new file mode 100644 index 0000000000..8ab8bf99ce --- /dev/null +++ b/spec/requests/api/v1/instances/languages_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Languages' do + describe 'GET /api/v1/instance/languages' do + before do + get '/api/v1/instance/languages' + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns the supported languages' do + expect(body_as_json.pluck(:code)).to match_array LanguagesHelper::SUPPORTED_LOCALES.keys.map(&:to_s) + end + end +end From 147a4ffb268bcac5b10f3d04098e9374561e4876 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:53:25 +0200 Subject: [PATCH 006/163] Update dependency aws-sdk-s3 to v1.132.0 (#26227) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 151a372017..10a6464c84 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -103,8 +103,8 @@ GEM attr_required (1.0.1) awrence (1.2.1) aws-eventstream (1.2.0) - aws-partitions (1.791.0) - aws-sdk-core (3.178.0) + aws-partitions (1.793.0) + aws-sdk-core (3.180.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.5) @@ -112,8 +112,8 @@ GEM aws-sdk-kms (1.71.0) aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.131.0) - aws-sdk-core (~> 3, >= 3.177.0) + aws-sdk-s3 (1.132.0) + aws-sdk-core (~> 3, >= 3.179.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.6) aws-sigv4 (1.6.0) From ecb00fa5ac19629f1548eaf3774467e0287ad2f5 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 3 Aug 2023 15:41:51 +0200 Subject: [PATCH 007/163] Add alt text for preview card thumbnails (#26184) --- .../features/explore/components/story.jsx | 5 +- .../mastodon/features/explore/links.jsx | 1 + .../features/status/components/card.jsx | 3 +- app/lib/link_details_extractor.rb | 5 + app/models/preview_card.rb | 1 + .../rest/preview_card_serializer.rb | 2 +- ..._add_image_description_to_preview_cards.rb | 17 + db/schema.rb | 1 + spec/lib/link_details_extractor_spec.rb | 323 ++++++++++++------ 9 files changed, 258 insertions(+), 100 deletions(-) create mode 100644 db/migrate/20230725213448_add_image_description_to_preview_cards.rb diff --git a/app/javascript/mastodon/features/explore/components/story.jsx b/app/javascript/mastodon/features/explore/components/story.jsx index 92eb41cff8..80dd5200fc 100644 --- a/app/javascript/mastodon/features/explore/components/story.jsx +++ b/app/javascript/mastodon/features/explore/components/story.jsx @@ -22,6 +22,7 @@ export default class Story extends PureComponent { author: PropTypes.string, sharedTimes: PropTypes.number, thumbnail: PropTypes.string, + thumbnailDescription: PropTypes.string, blurhash: PropTypes.string, expanded: PropTypes.bool, }; @@ -33,7 +34,7 @@ export default class Story extends PureComponent { handleImageLoad = () => this.setState({ thumbnailLoaded: true }); render () { - const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, blurhash } = this.props; + const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props; const { thumbnailLoaded } = this.state; @@ -49,7 +50,7 @@ export default class Story extends PureComponent { {thumbnail ? ( <>
- + {thumbnailDescription} ) : } diff --git a/app/javascript/mastodon/features/explore/links.jsx b/app/javascript/mastodon/features/explore/links.jsx index 489ab6dd61..663aa6d80f 100644 --- a/app/javascript/mastodon/features/explore/links.jsx +++ b/app/javascript/mastodon/features/explore/links.jsx @@ -67,6 +67,7 @@ class Links extends PureComponent { author={link.get('author_name')} sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1} thumbnail={link.get('image')} + thumbnailDescription={link.get('image_description')} blurhash={link.get('blurhash')} /> ))} diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index 6ac3c1d0f2..07fb1db9e2 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -167,7 +167,8 @@ export default class Card extends PureComponent { /> ); - let thumbnail = ; + const thumbnailDescription = card.get('image_description'); + const thumbnail = {thumbnailDescription}; let spoilerButton = ( + if(registrationsOpen) { + signupButton = ( + + + + ); + } else { + signupButton = ( + + ); + } + + signUpOrSignInButton = ( + <> + + + + {signupButton} + ); } @@ -353,6 +371,13 @@ class InteractionModal extends React.PureComponent {

{actionDescription}

+
+
+

+ {signUpOrSignInButton} +
+
+

diff --git a/app/javascript/mastodon/features/ui/components/header.jsx b/app/javascript/mastodon/features/ui/components/header.jsx index 3d249e8d4f..68484b59ab 100644 --- a/app/javascript/mastodon/features/ui/components/header.jsx +++ b/app/javascript/mastodon/features/ui/components/header.jsx @@ -12,7 +12,7 @@ import { fetchServer } from 'mastodon/actions/server'; import { Avatar } from 'mastodon/components/avatar'; import { Icon } from 'mastodon/components/icon'; import { WordmarkLogo, SymbolLogo } from 'mastodon/components/logo'; -import { registrationsOpen, me } from 'mastodon/initial_state'; +import { registrationsOpen, me, sso_redirect } from 'mastodon/initial_state'; const Account = connect(state => ({ account: state.getIn(['accounts', me]), @@ -73,28 +73,35 @@ class Header extends PureComponent { ); } else { - let signupButton; - if (registrationsOpen) { - signupButton = ( - - - - ); + if (sso_redirect) { + content = ( + + ) } else { - signupButton = ( - + let signupButton; + + if (registrationsOpen) { + signupButton = ( + + + + ); + } else { + signupButton = ( + + ); + } + + content = ( + <> + {signupButton} + + ); } - - content = ( - <> - {signupButton} - - - ); } 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 e44b797692..db85c6cbfb 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx @@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl'; import { openModal } from 'mastodon/actions/modal'; -import { registrationsOpen } from 'mastodon/initial_state'; +import { registrationsOpen, sso_redirect } from 'mastodon/initial_state'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; const SignInBanner = () => { @@ -17,7 +17,16 @@ const SignInBanner = () => { let signupButton; - const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + + if (sso_redirect) { + return ( +
+

+ +
+ ) + } if (registrationsOpen) { signupButton = ( diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 1ada5bfb93..85792a4ea4 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -80,6 +80,7 @@ * @property {boolean} use_blurhash * @property {boolean=} use_pending_items * @property {string} version + * @property {string} sso_redirect */ /** @@ -141,5 +142,6 @@ export const version = getMeta('version'); export const languages = initialState?.languages; // @ts-expect-error export const statusPageUrl = getMeta('status_page_url'); +export const sso_redirect = getMeta('sso_redirect'); export default initialState; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 1457db329b..2c901f3bd6 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -598,6 +598,7 @@ "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.sign_in": "Login", + "sign_in_banner.sso_redirect": "Login or Register", "sign_in_banner.text": "Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_domain": "Open moderation interface for {domain}", diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index bda06ef1f1..9660c941d0 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -32,6 +32,7 @@ class InitialStateSerializer < ActiveModel::Serializer single_user_mode: Rails.configuration.x.single_user_mode, trends_as_landing_page: Setting.trends_as_landing_page, status_page_url: Setting.status_page_url, + sso_redirect: sso_redirect, } if object.current_account @@ -108,4 +109,8 @@ class InitialStateSerializer < ActiveModel::Serializer def instance_presenter @instance_presenter ||= InstancePresenter.new end + + def sso_redirect + "/auth/auth/#{Devise.omniauth_providers[0]}" if ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1 + end end From cb95239c969efd5fd421bd31ec2993b1e2b62b0b Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 3 Aug 2023 20:28:14 +0200 Subject: [PATCH 017/163] Re-add StatsD support through the `nsa` gem (#26310) --- Gemfile | 1 + Gemfile.lock | 13 +++++++++++++ config/initializers/statsd.rb | 15 +++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 config/initializers/statsd.rb diff --git a/Gemfile b/Gemfile index 478d2cfe99..a1eba4efe0 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mime-types', '~> 3.4.1', require: 'mime/types/columnar' gem 'nokogiri', '~> 1.15' +gem 'nsa', github: 'jhawthorn/nsa', ref: 'e020fcc3a54d993ab45b7194d89ab720296c111b' gem 'oj', '~> 3.14' gem 'ox', '~> 2.14' gem 'parslet' diff --git a/Gemfile.lock b/Gemfile.lock index b379ec5000..a44538d16f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,6 +7,17 @@ GIT hkdf (~> 0.2) jwt (~> 2.0) +GIT + remote: https://github.com/jhawthorn/nsa.git + revision: e020fcc3a54d993ab45b7194d89ab720296c111b + ref: e020fcc3a54d993ab45b7194d89ab720296c111b + specs: + nsa (0.2.8) + activesupport (>= 4.2, < 7.2) + concurrent-ruby (~> 1.0, >= 1.0.2) + sidekiq (>= 3.5) + statsd-ruby (~> 1.4, >= 1.4.0) + GIT remote: https://github.com/mastodon/rails-settings-cached.git revision: 86328ef0bd04ce21cc0504ff5e334591e8c2ccab @@ -706,6 +717,7 @@ GEM net-scp (>= 1.1.2) net-ssh (>= 2.8.0) stackprof (0.2.25) + statsd-ruby (1.5.0) stoplight (3.0.1) redlock (~> 1.0) strong_migrations (0.8.0) @@ -857,6 +869,7 @@ DEPENDENCIES net-http (~> 0.3.2) net-ldap (~> 0.18) nokogiri (~> 1.15) + nsa! oj (~> 3.14) omniauth (~> 1.9) omniauth-cas (~> 2.0) diff --git a/config/initializers/statsd.rb b/config/initializers/statsd.rb new file mode 100644 index 0000000000..a655c10716 --- /dev/null +++ b/config/initializers/statsd.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +if ENV['STATSD_ADDR'].present? + host, port = ENV['STATSD_ADDR'].split(':') + + statsd = Statsd.new(host, port) + statsd.namespace = ENV.fetch('STATSD_NAMESPACE') { ['Mastodon', Rails.env].join('.') } + + NSA.inform_statsd(statsd) do |informant| + informant.collect(:action_controller, :web) + informant.collect(:active_record, :db) + informant.collect(:active_support_cache, :cache) + informant.collect(:sidekiq, :sidekiq) if ENV['STATSD_SIDEKIQ'] == 'true' + end +end From 1a2f3b8a9bc46985a8c6b8d6b5bfb1d8cc4519ff Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 20:39:33 +0200 Subject: [PATCH 018/163] Change reblogs to be excluded from "Posts and replies" tab in web UI (#26302) --- app/javascript/mastodon/actions/timelines.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index 96dc4a2a1e..08561c71f4 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -145,7 +145,7 @@ export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) { export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done); export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }, done); export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done); -export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, tagged, max_id: maxId }); +export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId }); export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged }); export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 }); export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done); From 6ff571563cf415c2f481bcd667a79a7b8f5ad044 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 20:39:45 +0200 Subject: [PATCH 019/163] Change design of hidden media overlay (again) in web UI (#26330) --- app/javascript/styles/mastodon/components.scss | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 76928ba1fa..f46ac68531 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4249,16 +4249,19 @@ a.status-card { display: flex; align-items: center; justify-content: center; - background: rgba($black, 0.5); + background: transparent; width: 100%; height: 100%; padding: 0; margin: 0; border: 0; - border-radius: 4px; color: $white; &__label { + background-color: rgba($black, 0.45); + backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + border-radius: 6px; + padding: 10px 15px; display: flex; align-items: center; justify-content: center; @@ -4272,6 +4275,13 @@ a.status-card { font-weight: 400; font-size: 13px; } + + &:hover, + &:focus { + .spoiler-button__overlay__label { + background-color: rgba($black, 0.9); + } + } } } From a62fed322035a80c11695108baae4a84488ff189 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 09:00:31 +0200 Subject: [PATCH 020/163] Fix incorrect model annotation for List#exclusive (#26313) --- app/models/list.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/list.rb b/app/models/list.rb index 7dc96f01b3..fcef49e6e9 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -10,7 +10,7 @@ # created_at :datetime not null # updated_at :datetime not null # replies_policy :integer default("list"), not null -# exclusive :boolean default(FALSE) +# exclusive :boolean default(FALSE), not null # class List < ApplicationRecord From 395dc4524fad4e3c65399f3da0a47872b4d25a36 Mon Sep 17 00:00:00 2001 From: Trevor Wolf Date: Fri, 4 Aug 2023 17:41:17 +1000 Subject: [PATCH 021/163] Fix light theme select option for hashtags (#26311) --- app/javascript/styles/mastodon-light/diff.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 601d515765..3777fccbfb 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -424,6 +424,10 @@ html { border-bottom: 0; } +.column-settings__hashtags .column-select__option { + color: $white; +} + .dashboard__quick-access, .focal-point__preview strong, .admin-wrapper .content__heading__tabs a.selected { From aac7e9fd9d96d799986d08813522a2c646037b82 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 15:48:29 +0200 Subject: [PATCH 022/163] Fix confirmation when closing media edition modal with unsaved changes (#26342) --- .../features/ui/components/focal_point_modal.jsx | 2 +- .../mastodon/features/ui/components/modal_root.jsx | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx index 7169b8a279..0c2e3901ea 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx @@ -434,4 +434,4 @@ class FocalPointModal extends ImmutablePureComponent { export default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, -})(injectIntl(FocalPointModal, { withRef: true })); +})(injectIntl(FocalPointModal, { forwardRef: true })); diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index d5edb45b36..fb6acfaeaa 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -97,14 +97,7 @@ export default class ModalRoot extends PureComponent { handleClose = (ignoreFocus = false) => { const { onClose } = this.props; - let message = null; - try { - message = this._modal?.getWrappedInstance?.().getCloseConfirmationMessage?.(); - } catch (_) { - // injectIntl defines `getWrappedInstance` but errors out if `withRef` - // isn't set. - // This would be much smoother with react-intl 3+ and `forwardRef`. - } + const message = this._modal?.getCloseConfirmationMessage?.(); onClose(message, ignoreFocus); }; From b92b2b1298c8f19303ebbc6babd739ea76c4ac8c Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Fri, 4 Aug 2023 16:11:30 +0200 Subject: [PATCH 023/163] Change streaming `/metrics` to include additional metrics (#26299) --- package.json | 1 + streaming/index.js | 230 ++++++++++++++++++++++++++++++++------------- yarn.lock | 19 ++++ 3 files changed, 187 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 72a378299f..76ece5f15e 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ "pg-connection-string": "^2.6.0", "postcss": "^8.4.24", "postcss-loader": "^4.3.0", + "prom-client": "^14.2.0", "prop-types": "^15.8.1", "punycode": "^2.3.0", "react": "^18.2.0", diff --git a/streaming/index.js b/streaming/index.js index 8a34c273bd..2112ca4336 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -10,6 +10,7 @@ const { JSDOM } = require('jsdom'); const log = require('npmlog'); const pg = require('pg'); const dbUrlToConfig = require('pg-connection-string').parse; +const metrics = require('prom-client'); const redis = require('redis'); const uuid = require('uuid'); const WebSocket = require('ws'); @@ -183,6 +184,73 @@ const startServer = async () => { const redisSubscribeClient = await redisUrlToClient(redisParams, redisUrl); const redisClient = await redisUrlToClient(redisParams, redisUrl); + // Collect metrics from Node.js + metrics.collectDefaultMetrics(); + + new metrics.Gauge({ + name: 'pg_pool_total_connections', + help: 'The total number of clients existing within the pool', + collect() { + this.set(pgPool.totalCount); + }, + }); + + new metrics.Gauge({ + name: 'pg_pool_idle_connections', + help: 'The number of clients which are not checked out but are currently idle in the pool', + collect() { + this.set(pgPool.idleCount); + }, + }); + + new metrics.Gauge({ + name: 'pg_pool_waiting_queries', + help: 'The number of queued requests waiting on a client when all clients are checked out', + collect() { + this.set(pgPool.waitingCount); + }, + }); + + const connectedClients = new metrics.Gauge({ + name: 'connected_clients', + help: 'The number of clients connected to the streaming server', + labelNames: ['type'], + }); + + connectedClients.set({ type: 'websocket' }, 0); + connectedClients.set({ type: 'eventsource' }, 0); + + const connectedChannels = new metrics.Gauge({ + name: 'connected_channels', + help: 'The number of channels the streaming server is streaming to', + labelNames: [ 'type', 'channel' ] + }); + + const redisSubscriptions = new metrics.Gauge({ + name: 'redis_subscriptions', + help: 'The number of Redis channels the streaming server is subscribed to', + }); + + // When checking metrics in the browser, the favicon is requested this + // prevents the request from falling through to the API Router, which would + // error for this endpoint: + app.get('/favicon.ico', (req, res) => res.status(404).end()); + + app.get('/api/v1/streaming/health', (req, res) => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('OK'); + }); + + app.get('/metrics', async (req, res) => { + try { + res.set('Content-Type', metrics.register.contentType); + res.end(await metrics.register.metrics()); + } catch (ex) { + log.error(ex); + res.status(500).end(); + } + }); + /** * @param {string[]} channels * @returns {function(): void} @@ -240,6 +308,7 @@ const startServer = async () => { if (subs[channel].length === 0) { log.verbose(`Subscribe ${channel}`); redisSubscribeClient.subscribe(channel, onRedisMessage); + redisSubscriptions.inc(); } subs[channel].push(callback); @@ -261,6 +330,7 @@ const startServer = async () => { if (subs[channel].length === 0) { log.verbose(`Unsubscribe ${channel}`); redisSubscribeClient.unsubscribe(channel); + redisSubscriptions.dec(); delete subs[channel]; } }; @@ -434,7 +504,7 @@ const startServer = async () => { /** * @param {any} req - * @param {string} channelName + * @param {string|undefined} channelName * @returns {Promise.} */ const checkScopes = (req, channelName) => new Promise((resolve, reject) => { @@ -537,10 +607,14 @@ const startServer = async () => { res.on('close', () => { unsubscribe(`${redisPrefix}${accessTokenChannelId}`, listener); unsubscribe(`${redisPrefix}${systemChannelId}`, listener); + + connectedChannels.labels({ type: 'eventsource', channel: 'system' }).dec(2); }); subscribe(`${redisPrefix}${accessTokenChannelId}`, listener); subscribe(`${redisPrefix}${systemChannelId}`, listener); + + connectedChannels.labels({ type: 'eventsource', channel: 'system' }).inc(2); }; /** @@ -554,7 +628,19 @@ const startServer = async () => { return; } - accountFromRequest(req).then(() => checkScopes(req, channelNameFromPath(req))).then(() => { + const channelName = channelNameFromPath(req); + + // If no channelName can be found for the request, then we should terminate + // the connection, as there's nothing to stream back + if (!channelName) { + const err = new Error('Unknown channel requested'); + err.status = 400; + + next(err); + return; + } + + accountFromRequest(req).then(() => checkScopes(req, channelName)).then(() => { subscribeHttpToSystemChannel(req, res); }).then(() => { next(); @@ -849,6 +935,15 @@ const startServer = async () => { const streamToHttp = (req, res) => { const accountId = req.accountId || req.remoteAddress; + const channelName = channelNameFromPath(req); + + connectedClients.labels({ type: 'eventsource' }).inc(); + + // In theory we'll always have a channel name, but channelNameFromPath can return undefined: + if (typeof channelName === 'string') { + connectedChannels.labels({ type: 'eventsource', channel: channelName }).inc(); + } + res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-store'); res.setHeader('Transfer-Encoding', 'chunked'); @@ -859,6 +954,14 @@ const startServer = async () => { req.on('close', () => { log.verbose(req.requestId, `Ending stream for ${accountId}`); + // We decrement these counters here instead of in streamHttpEnd as in that + // method we don't have knowledge of the channel names + connectedClients.labels({ type: 'eventsource' }).dec(); + // In theory we'll always have a channel name, but channelNameFromPath can return undefined: + if (typeof channelName === 'string') { + connectedChannels.labels({ type: 'eventsource', channel: channelName }).dec(); + } + clearInterval(heartbeat); }); @@ -913,40 +1016,18 @@ const startServer = async () => { res.end(JSON.stringify({ error: 'Not found' })); }; - app.use(setRequestId); - app.use(setRemoteAddress); - app.use(allowCrossDomain); + const api = express.Router(); - app.get('/api/v1/streaming/health', (req, res) => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); - res.end('OK'); - }); + app.use(api); - app.get('/metrics', (req, res) => server.getConnections((err, count) => { - res.writeHeader(200, { 'Content-Type': 'application/openmetrics-text; version=1.0.0; charset=utf-8' }); - res.write('# TYPE connected_clients gauge\n'); - res.write('# HELP connected_clients The number of clients connected to the streaming server\n'); - res.write(`connected_clients ${count}.0\n`); - res.write('# TYPE connected_channels gauge\n'); - res.write('# HELP connected_channels The number of Redis channels the streaming server is subscribed to\n'); - res.write(`connected_channels ${Object.keys(subs).length}.0\n`); - res.write('# TYPE pg_pool_total_connections gauge\n'); - res.write('# HELP pg_pool_total_connections The total number of clients existing within the pool\n'); - res.write(`pg_pool_total_connections ${pgPool.totalCount}.0\n`); - res.write('# TYPE pg_pool_idle_connections gauge\n'); - res.write('# HELP pg_pool_idle_connections The number of clients which are not checked out but are currently idle in the pool\n'); - res.write(`pg_pool_idle_connections ${pgPool.idleCount}.0\n`); - res.write('# TYPE pg_pool_waiting_queries gauge\n'); - res.write('# HELP pg_pool_waiting_queries The number of queued requests waiting on a client when all clients are checked out\n'); - res.write(`pg_pool_waiting_queries ${pgPool.waitingCount}.0\n`); - res.write('# EOF\n'); - res.end(); - })); + api.use(setRequestId); + api.use(setRemoteAddress); + api.use(allowCrossDomain); - app.use(authenticationMiddleware); - app.use(errorMiddleware); + api.use(authenticationMiddleware); + api.use(errorMiddleware); - app.get('/api/v1/streaming/*', (req, res) => { + api.get('/api/v1/streaming/*', (req, res) => { channelNameToIds(req, channelNameFromPath(req), req.query).then(({ channelIds, options }) => { const onSend = streamToHttp(req, res); const onEnd = streamHttpEnd(req, subscriptionHeartbeat(channelIds)); @@ -1141,15 +1222,16 @@ const startServer = async () => { * @typedef WebSocketSession * @property {any} socket * @property {any} request - * @property {Object.} subscriptions + * @property {Object.} subscriptions */ /** * @param {WebSocketSession} session * @param {string} channelName * @param {StreamParams} params + * @returns {void} */ - const subscribeWebsocketToChannel = ({ socket, request, subscriptions }, channelName, params) => + const subscribeWebsocketToChannel = ({ socket, request, subscriptions }, channelName, params) => { checkScopes(request, channelName).then(() => channelNameToIds(request, channelName, params)).then(({ channelIds, options, @@ -1162,7 +1244,10 @@ const startServer = async () => { const stopHeartbeat = subscriptionHeartbeat(channelIds); const listener = streamFrom(channelIds, request, onSend, undefined, options.needsFiltering); + connectedChannels.labels({ type: 'websocket', channel: channelName }).inc(); + subscriptions[channelIds.join(';')] = { + channelName, listener, stopHeartbeat, }; @@ -1170,35 +1255,47 @@ const startServer = async () => { log.verbose(request.requestId, 'Subscription error:', err.toString()); socket.send(JSON.stringify({ error: err.toString() })); }); + } + + + const removeSubscription = (subscriptions, channelIds, request) => { + log.verbose(request.requestId, `Ending stream from ${channelIds.join(', ')} for ${request.accountId}`); + + const subscription = subscriptions[channelIds.join(';')]; + + if (!subscription) { + return; + } + + channelIds.forEach(channelId => { + unsubscribe(`${redisPrefix}${channelId}`, subscription.listener); + }); + + connectedChannels.labels({ type: 'websocket', channel: subscription.channelName }).dec(); + subscription.stopHeartbeat(); + + delete subscriptions[channelIds.join(';')]; + } /** * @param {WebSocketSession} session * @param {string} channelName * @param {StreamParams} params + * @returns {void} */ - const unsubscribeWebsocketFromChannel = ({ socket, request, subscriptions }, channelName, params) => + const unsubscribeWebsocketFromChannel = ({ socket, request, subscriptions }, channelName, params) => { channelNameToIds(request, channelName, params).then(({ channelIds }) => { - log.verbose(request.requestId, `Ending stream from ${channelIds.join(', ')} for ${request.accountId}`); - - const subscription = subscriptions[channelIds.join(';')]; - - if (!subscription) { - return; - } - - const { listener, stopHeartbeat } = subscription; - - channelIds.forEach(channelId => { - unsubscribe(`${redisPrefix}${channelId}`, listener); - }); - - stopHeartbeat(); - - delete subscriptions[channelIds.join(';')]; + removeSubscription(subscriptions, channelIds, request); }).catch(err => { - log.verbose(request.requestId, 'Unsubscription error:', err); - socket.send(JSON.stringify({ error: err.toString() })); + log.verbose(request.requestId, 'Unsubscribe error:', err); + + // If we have a socket that is alive and open still, send the error back to the client: + // FIXME: In other parts of the code ws === socket + if (socket.isAlive && socket.readyState === socket.OPEN) { + socket.send(JSON.stringify({ error: "Error unsubscribing from channel" })); + } }); + } /** * @param {WebSocketSession} session @@ -1219,16 +1316,20 @@ const startServer = async () => { subscribe(`${redisPrefix}${systemChannelId}`, listener); subscriptions[accessTokenChannelId] = { + channelName: 'system', listener, stopHeartbeat: () => { }, }; subscriptions[systemChannelId] = { + channelName: 'system', listener, stopHeartbeat: () => { }, }; + + connectedChannels.labels({ type: 'websocket', channel: 'system' }).inc(2); }; /** @@ -1255,6 +1356,8 @@ const startServer = async () => { ws.isAlive = true; }); + connectedClients.labels({ type: 'websocket' }).inc(); + /** * @type {WebSocketSession} */ @@ -1265,17 +1368,18 @@ const startServer = async () => { }; const onEnd = () => { - const keys = Object.keys(session.subscriptions); + const subscriptions = Object.keys(session.subscriptions); - keys.forEach(channelIds => { - const { listener, stopHeartbeat } = session.subscriptions[channelIds]; - - channelIds.split(';').forEach(channelId => { - unsubscribe(`${redisPrefix}${channelId}`, listener); - }); - - stopHeartbeat(); + subscriptions.forEach(channelIds => { + removeSubscription(session.subscriptions, channelIds.split(';'), req) }); + + // ensure garbage collection: + session.socket = null; + session.request = null; + session.subscriptions = {}; + + connectedClients.labels({ type: 'websocket' }).dec(); }; ws.on('close', onEnd); diff --git a/yarn.lock b/yarn.lock index df45395e0c..e72012e065 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3529,6 +3529,11 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bintrees@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" + integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== + blueimp-load-image@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/blueimp-load-image/-/blueimp-load-image-3.0.0.tgz#d71c39440a7d2f1a83e3e86a625e329116a51705" @@ -9659,6 +9664,13 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +prom-client@^14.2.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11" + integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA== + dependencies: + tdigest "^0.1.1" + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -11562,6 +11574,13 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" +tdigest@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" + integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== + dependencies: + bintrees "1.0.2" + temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" From 38c3530cd72c11c0e909bb183cfe56b3f961776c Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 16:13:47 +0200 Subject: [PATCH 024/163] Fix missing cached preview cards attributes (#26343) --- app/models/status.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index ff85ff2388..5a277269c5 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -162,7 +162,7 @@ class Status < ApplicationRecord REAL_TIME_WINDOW = 6.hours def cache_key - "v2:#{super}" + "v3:#{super}" end def searchable_by(preloaded = nil) From 1037c413cf780be493ee114f84d858b818df4d6a Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 16:25:44 +0200 Subject: [PATCH 025/163] Fix report modal secondary buttons style (#26341) --- app/javascript/styles/mastodon/components.scss | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f46ac68531..cd9617c94c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5825,15 +5825,16 @@ a.status-card { } .button.button-secondary { - border-color: $ui-button-secondary-border-color; - color: $ui-button-secondary-color; + border-color: $inverted-text-color; + color: $inverted-text-color; flex: 0 0 auto; &:hover, &:focus, &:active { - border-color: $ui-button-secondary-focus-background-color; - color: $ui-button-secondary-focus-color; + background: transparent; + border-color: $ui-button-background-color; + color: $ui-button-background-color; } } From 2ddf268e73364dd41adc6f4a01f5a30a4f522f14 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Aug 2023 09:46:11 +0200 Subject: [PATCH 026/163] Change header of hashtag timelines in web UI (#26362) --- .../components/hashtag_header.jsx | 79 +++++++++++++++++++ .../features/hashtag_timeline/index.jsx | 34 ++------ app/javascript/mastodon/locales/en.json | 3 + .../styles/mastodon/components.scss | 30 +++++++ 4 files changed, 118 insertions(+), 28 deletions(-) create mode 100644 app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx diff --git a/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx b/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx new file mode 100644 index 0000000000..46050309ff --- /dev/null +++ b/app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx @@ -0,0 +1,79 @@ +import PropTypes from 'prop-types'; + +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; + +import ImmutablePropTypes from 'react-immutable-proptypes'; + +import Button from 'mastodon/components/button'; +import { ShortNumber } from 'mastodon/components/short_number'; + +const messages = defineMessages({ + followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, + unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, +}); + +const usesRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +const peopleRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +const usesTodayRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => { + if (!tag) { + return null; + } + + const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]); + const dividingCircle = {' · '}; + + return ( +
+
+

#{tag.get('name')}

+
+ +
+ + {dividingCircle} + + {dividingCircle} + +
+
+ ); +}); + +HashtagHeader.propTypes = { + tag: ImmutablePropTypes.map, + disabled: PropTypes.bool, + onClick: PropTypes.func, + intl: PropTypes.object, +}; \ No newline at end of file diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.jsx b/app/javascript/mastodon/features/hashtag_timeline/index.jsx index b6ed29d8de..d00890cb37 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/index.jsx @@ -1,9 +1,8 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; -import classNames from 'classnames'; import { Helmet } from 'react-helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; @@ -17,17 +16,12 @@ import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/t import { expandHashtagTimeline, clearTimeline } from 'mastodon/actions/timelines'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; -import { Icon } from 'mastodon/components/icon'; import StatusListContainer from '../ui/containers/status_list_container'; +import { HashtagHeader } from './components/hashtag_header'; import ColumnSettingsContainer from './containers/column_settings_container'; -const messages = defineMessages({ - followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, - unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, -}); - const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0, tag: state.getIn(['tags', props.params.id]), @@ -48,7 +42,6 @@ class HashtagTimeline extends PureComponent { hasUnread: PropTypes.bool, tag: ImmutablePropTypes.map, multiColumn: PropTypes.bool, - intl: PropTypes.object, }; handlePin = () => { @@ -188,27 +181,11 @@ class HashtagTimeline extends PureComponent { }; render () { - const { hasUnread, columnId, multiColumn, tag, intl } = this.props; + const { hasUnread, columnId, multiColumn, tag } = this.props; const { id, local } = this.props.params; const pinned = !!columnId; const { signedIn } = this.context.identity; - let followButton; - - if (tag) { - const following = tag.get('following'); - - const classes = classNames('column-header__button', { - active: following, - }); - - followButton = ( - - ); - } - return ( {columnId && } } + alwaysPrepend trackScroll={!pinned} scrollKey={`hashtag_timeline-${columnId}`} timelineId={`hashtag:${id}${local ? ':local' : ''}`} @@ -245,4 +223,4 @@ class HashtagTimeline extends PureComponent { } -export default connect(mapStateToProps)(injectIntl(HashtagTimeline)); +export default connect(mapStateToProps)(HashtagTimeline); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 2c901f3bd6..5b7b4f6b35 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} posts}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} posts}} today", "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", "home.actions.go_to_explore": "See what's trending", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index cd9617c94c..049c1a3220 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9231,3 +9231,33 @@ noscript { background: rgba($ui-base-color, 0.85); } } + +.hashtag-header { + border-bottom: 1px solid lighten($ui-base-color, 8%); + padding: 15px; + font-size: 17px; + line-height: 22px; + color: $darker-text-color; + + strong { + font-weight: 700; + } + + &__header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; + gap: 15px; + + h1 { + color: $primary-text-color; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 22px; + line-height: 33px; + font-weight: 700; + } + } +} From 93b225dfde18bd52579c5fad53d84c0170dd263c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 13:37:54 +0200 Subject: [PATCH 027/163] New Crowdin Translations (automated) (#26209) Co-authored-by: GitHub Actions Co-authored-by: Claire --- app/javascript/mastodon/locales/af.json | 1 - app/javascript/mastodon/locales/an.json | 2 - app/javascript/mastodon/locales/ar.json | 3 - app/javascript/mastodon/locales/ast.json | 3 +- app/javascript/mastodon/locales/be.json | 25 ++++- app/javascript/mastodon/locales/bg.json | 3 - app/javascript/mastodon/locales/br.json | 4 +- app/javascript/mastodon/locales/ca.json | 19 ++-- app/javascript/mastodon/locales/ckb.json | 2 - app/javascript/mastodon/locales/cs.json | 39 ++++++- app/javascript/mastodon/locales/cy.json | 32 +++--- app/javascript/mastodon/locales/da.json | 11 +- app/javascript/mastodon/locales/de.json | 29 ++--- app/javascript/mastodon/locales/el.json | 2 - app/javascript/mastodon/locales/en-GB.json | 67 +++++------ app/javascript/mastodon/locales/eo.json | 2 - app/javascript/mastodon/locales/es-AR.json | 13 ++- app/javascript/mastodon/locales/es-MX.json | 24 +++- app/javascript/mastodon/locales/es.json | 25 ++++- app/javascript/mastodon/locales/et.json | 13 ++- app/javascript/mastodon/locales/eu.json | 9 +- app/javascript/mastodon/locales/fa.json | 4 - app/javascript/mastodon/locales/fi.json | 81 +++++++------- app/javascript/mastodon/locales/fo.json | 11 +- app/javascript/mastodon/locales/fr-QC.json | 11 +- app/javascript/mastodon/locales/fr.json | 11 +- app/javascript/mastodon/locales/fy.json | 3 - app/javascript/mastodon/locales/ga.json | 1 - app/javascript/mastodon/locales/gd.json | 3 - app/javascript/mastodon/locales/gl.json | 11 +- app/javascript/mastodon/locales/he.json | 11 +- app/javascript/mastodon/locales/hi.json | 2 - app/javascript/mastodon/locales/hu.json | 11 +- app/javascript/mastodon/locales/hy.json | 1 - app/javascript/mastodon/locales/id.json | 2 - app/javascript/mastodon/locales/io.json | 2 - app/javascript/mastodon/locales/is.json | 9 +- app/javascript/mastodon/locales/it.json | 9 +- app/javascript/mastodon/locales/ja.json | 13 ++- app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/kk.json | 1 - app/javascript/mastodon/locales/ko.json | 27 +++-- app/javascript/mastodon/locales/ku.json | 2 - app/javascript/mastodon/locales/lv.json | 2 - app/javascript/mastodon/locales/ml.json | 1 - app/javascript/mastodon/locales/mr.json | 1 - app/javascript/mastodon/locales/ms.json | 2 - app/javascript/mastodon/locales/my.json | 23 ++-- app/javascript/mastodon/locales/nl.json | 11 +- app/javascript/mastodon/locales/nn.json | 72 +++++++----- app/javascript/mastodon/locales/no.json | 34 ++++-- app/javascript/mastodon/locales/oc.json | 1 - app/javascript/mastodon/locales/pa.json | 1 - app/javascript/mastodon/locales/pl.json | 11 +- app/javascript/mastodon/locales/pt-BR.json | 3 - app/javascript/mastodon/locales/pt-PT.json | 11 +- app/javascript/mastodon/locales/ro.json | 2 - app/javascript/mastodon/locales/ru.json | 10 +- app/javascript/mastodon/locales/sa.json | 2 - app/javascript/mastodon/locales/sco.json | 2 - app/javascript/mastodon/locales/si.json | 1 - app/javascript/mastodon/locales/sk.json | 23 +++- app/javascript/mastodon/locales/sl.json | 13 ++- app/javascript/mastodon/locales/sq.json | 3 - app/javascript/mastodon/locales/sr-Latn.json | 15 ++- app/javascript/mastodon/locales/sr.json | 15 ++- app/javascript/mastodon/locales/sv.json | 11 +- app/javascript/mastodon/locales/th.json | 11 +- app/javascript/mastodon/locales/tr.json | 111 ++++++++++--------- app/javascript/mastodon/locales/tt.json | 2 - app/javascript/mastodon/locales/uk.json | 11 +- app/javascript/mastodon/locales/ur.json | 28 ++++- app/javascript/mastodon/locales/uz.json | 2 - app/javascript/mastodon/locales/vi.json | 31 +++--- app/javascript/mastodon/locales/zh-CN.json | 17 +-- app/javascript/mastodon/locales/zh-HK.json | 2 - app/javascript/mastodon/locales/zh-TW.json | 11 +- config/locales/activerecord.cs.yml | 4 + config/locales/activerecord.nn.yml | 4 + config/locales/activerecord.no.yml | 10 +- config/locales/activerecord.ru.yml | 4 + config/locales/be.yml | 5 + config/locales/bn.yml | 16 +++ config/locales/br.yml | 4 + config/locales/ca.yml | 20 ++-- config/locales/cy.yml | 14 ++- config/locales/de.yml | 84 +++++++------- config/locales/devise.ca.yml | 2 +- config/locales/doorkeeper.be.yml | 3 + config/locales/doorkeeper.ca.yml | 10 +- config/locales/doorkeeper.cs.yml | 3 + config/locales/doorkeeper.es-MX.yml | 3 + config/locales/doorkeeper.es.yml | 3 + config/locales/doorkeeper.nn.yml | 3 + config/locales/doorkeeper.no.yml | 3 + config/locales/doorkeeper.sv.yml | 1 + config/locales/es-MX.yml | 4 + config/locales/es.yml | 4 + config/locales/fi.yml | 9 +- config/locales/ko.yml | 20 ++-- config/locales/lt.yml | 10 ++ config/locales/ml.yml | 8 ++ config/locales/nn.yml | 58 +++++++--- config/locales/no.yml | 83 ++++++++++++++ config/locales/pt-PT.yml | 4 + config/locales/ru.yml | 24 ++++ config/locales/simple_form.ca.yml | 6 +- config/locales/simple_form.cs.yml | 7 ++ config/locales/simple_form.de.yml | 6 +- config/locales/simple_form.et.yml | 2 + config/locales/simple_form.fi.yml | 2 + config/locales/simple_form.nn.yml | 7 ++ config/locales/simple_form.no.yml | 26 +++++ config/locales/simple_form.sl.yml | 2 + config/locales/sk.yml | 2 +- config/locales/sl.yml | 3 + config/locales/sr-Latn.yml | 8 +- config/locales/sr.yml | 10 +- config/locales/th.yml | 4 +- config/locales/tt.yml | 2 + config/locales/vi.yml | 6 +- config/locales/zh-TW.yml | 2 +- 122 files changed, 1040 insertions(+), 526 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 388f7cd0cc..aee0f775db 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -181,7 +181,6 @@ "home.column_settings.show_reblogs": "Wys aangestuurde plasings", "interaction_modal.description.reblog": "Met 'n rekening op Mastodon kan jy hierdie plasing aanstuur om dit met jou volgers te deel.", "interaction_modal.description.reply": "Met 'n rekening op Mastodon kan jy op hierdie plasing reageer.", - "interaction_modal.preamble": "Omdat Mastodon gedesentraliseer is, hoef jy nie ’n rekening op hierdie bediener te hê nie. Jy kan jy jou bestaande Mastodonrekening gebruik, al word dit op 'n ander Mastodonbediener of versoenbare platform waar ook al gehuisves.", "interaction_modal.title.reblog": "Stuur {name} se plasing aan", "interaction_modal.title.reply": "Reageer op {name} se plasing", "keyboard_shortcuts.back": "Navigeer terug", diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index d9e436a35e..369f280099 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -172,7 +172,6 @@ "conversation.open": "Veyer conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copiau", - "copypaste.copy": "Copiar", "directory.federated": "Dende lo fediverso conoixiu", "directory.local": "Nomás de {domain}", "directory.new_arrivals": "Recientment plegaus", @@ -276,7 +275,6 @@ "interaction_modal.description.reply": "Con una cuenta en Mastodon, puetz responder a esta publicación.", "interaction_modal.on_another_server": "En un servidor diferent", "interaction_modal.on_this_server": "En este servidor", - "interaction_modal.preamble": "Ya que Mastodon ye descentralizau, puetz usar la tuya cuenta existent alochada en unatro servidor Mastodon u plataforma compatible si no tiens una cuenta en este servidor.", "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Empentar la publicación de {name}", "interaction_modal.title.reply": "Responder a la publicación de {name}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 1ed6dc1bb3..efc932f4dc 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -190,7 +190,6 @@ "conversation.open": "اعرض المحادثة", "conversation.with": "مع {names}", "copypaste.copied": "تم نسخه", - "copypaste.copy": "انسخ", "copypaste.copy_to_clipboard": "نسخ إلى الحافظة", "directory.federated": "مِن الفديفرس المعروف", "directory.local": "مِن {domain} فقط", @@ -299,7 +298,6 @@ "home.column_settings.basic": "الأساسية", "home.column_settings.show_reblogs": "اعرض الترقيات", "home.column_settings.show_replies": "اعرض الردود", - "home.explore_prompt.body": "سوف تحتوي تغذية منزلك على مزيج من المشاركات من الوسوم التي اخترت متابعتها، والأشخاص الذين اخترت متابعتهم، والمشاركات التي قاموا بدعمها. الأمور تبدو هادئة جدا الآن، لذلك ماذا عن:", "home.explore_prompt.title": "هذا مقرك الرئيسي داخل ماستدون.", "home.hide_announcements": "إخفاء الإعلانات", "home.show_announcements": "إظهار الإعلانات", @@ -308,7 +306,6 @@ "interaction_modal.description.reply": "مع حساب في ماستدون، يمكنك الرد على هذا المنشور.", "interaction_modal.on_another_server": "على خادم مختلف", "interaction_modal.on_this_server": "على هذا الخادم", - "interaction_modal.preamble": "بما إن ماستدون لامركزي، يمكنك استخدام حسابك الحالي المستضاف بواسطة خادم ماستدون آخر أو منصة متوافقة إذا لم يكن لديك حساب هنا.", "interaction_modal.title.follow": "اتبع {name}", "interaction_modal.title.reblog": "مشاركة منشور {name}", "interaction_modal.title.reply": "الرد على منشور {name}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 3b458b9ac8..597d294a6f 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -133,7 +133,6 @@ "conversation.open": "Ver la conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copióse", - "copypaste.copy": "Copiar", "directory.federated": "Del fediversu conocíu", "directory.local": "De «{domain}» namás", "directory.new_arrivals": "Cuentes nueves", @@ -223,7 +222,6 @@ "interaction_modal.description.reply": "Con una cuenta de Mastodon, pues responder a esti artículu.", "interaction_modal.on_another_server": "N'otru sirvidor", "interaction_modal.on_this_server": "Nesti sirvidor", - "interaction_modal.preamble": "Darréu que Mastodon ye una rede social descentralizada, pues usar una cuenta agospiada n'otru sirvidor de Mastodon o n'otra plataforma compatible si nun tienes cuenta nesti sirvidor.", "interaction_modal.title.reply": "Rempuesta al artículu de: {name}", "intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", @@ -420,6 +418,7 @@ "server_banner.learn_more": "Saber más", "server_banner.server_stats": "Estadístiques del sirvidor:", "sign_in_banner.create_account": "Crear una cuenta", + "sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase", "status.admin_account": "Abrir la interfaz de moderación pa @{name}", "status.admin_domain": "Abrir la interfaz de moderación pa «{domain}»", "status.admin_status": "Abrir esti artículu na interfaz de moderación", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 564d210a24..178bd7a89e 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -113,6 +113,7 @@ "column.direct": "Асабістыя згадванні", "column.directory": "Праглядзець профілі", "column.domain_blocks": "Заблакіраваныя дамены", + "column.favourites": "Упадабанае", "column.firehose": "Стужкі", "column.follow_requests": "Запыты на падпіску", "column.home": "Галоўная", @@ -180,6 +181,7 @@ "confirmations.mute.explanation": "Гэта схавае допісы ад гэтага карыстальніка і пра яго, але ўсё яшчэ дазволіць яму чытаць вашыя допісы і быць падпісаным на вас.", "confirmations.mute.message": "Вы ўпэўненыя, што хочаце ігнараваць {name}?", "confirmations.redraft.confirm": "Выдаліць і перапісаць", + "confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.", "confirmations.reply.confirm": "Адказаць", "confirmations.reply.message": "Калі вы адкажаце зараз, гэта ператрэ паведамленне, якое вы пішаце. Вы ўпэўнены, што хочаце працягнуць?", "confirmations.unfollow.confirm": "Адпісацца", @@ -189,7 +191,6 @@ "conversation.open": "Прагледзець размову", "conversation.with": "З {names}", "copypaste.copied": "Скапіравана", - "copypaste.copy": "Скапіраваць", "copypaste.copy_to_clipboard": "Капіраваць у буфер абмену", "directory.federated": "З вядомага федэсвету", "directory.local": "Толькі з {domain}", @@ -200,6 +201,7 @@ "dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.", "dismissable_banner.dismiss": "Адхіліць", "dismissable_banner.explore_links": "Гэтыя навіны абмяркоўваюцца прама зараз на гэтым і іншых серверах дэцэнтралізаванай сеткі.", + "dismissable_banner.explore_statuses": "Допісы з гэтага і іншых сервераў дэцэнтралізаванай сеткі, якія набіраюць папулярнасць прама зараз.", "dismissable_banner.explore_tags": "Гэтыя хэштэгі зараз набіраюць папулярнасць сярод людзей на гэтым і іншых серверах дэцэнтралізаванай сеткі", "dismissable_banner.public_timeline": "Гэта апошнія публічныя допісы людзей з усей сеткі, за якімі сочаць карыстальнікі {domain}.", "embed.instructions": "Убудуйце гэты пост на свой сайт, скапіраваўшы прыведзены ніжэй код", @@ -228,6 +230,8 @@ "empty_column.direct": "Пакуль у вас няма асабістых згадак. Калі вы дашляце або атрымаеце штось, яно з'явіцца тут.", "empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.", "empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней", + "empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.", + "empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.", "empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіскуі. Калі вы атрымаеце запыт, ён з'явяцца тут.", "empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з'явяцца тут.", "empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.", @@ -302,12 +306,18 @@ "home.explore_prompt.title": "Гэта ваша апорная кропка ў Mastodon.", "home.hide_announcements": "Схаваць аб'явы", "home.show_announcements": "Паказаць аб'явы", + "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.", "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.", "interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.", "interaction_modal.description.reply": "Маючы акаўнт у Mastodon, вы можаце адказаць на гэты пост.", + "interaction_modal.login.action": "Вярніце мяне дадому", + "interaction_modal.login.prompt": "Дамен вашага хатняга сервера, напрыклад, mastodon.social", + "interaction_modal.no_account_yet": "Яшчэ не ў Mastodon?", "interaction_modal.on_another_server": "На іншым серверы", "interaction_modal.on_this_server": "На гэтым серверы", - "interaction_modal.preamble": "Паколькі Mastodon дэцэнтралізаваны, вы можаце выкарыстоўваць існуючы акаўнт, які быў створаны на іншым серверы Mastodon або на сумяшчальнай платформе, калі ў вас пакуль няма акаўнта тут.", + "interaction_modal.sign_in": "Вы не выканалі ўваход на гэтым серверы. Дзе размешчаны ваш уліковы запіс?", + "interaction_modal.sign_in_hint": "Падказка: гэта сайт, на якім вы зарэгістраваліся. Калі вы не памятаеце, знайдзіце ліст у паштовай скрыні. Вы таксама можаце ўвесці сваё поўнае імя карыстальніка! (напрыклад, @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Упадабаць допіс {name}", "interaction_modal.title.follow": "Падпісацца на {name}", "interaction_modal.title.reblog": "Пашырыць допіс ад {name}", "interaction_modal.title.reply": "Адказаць на допіс {name}", @@ -323,6 +333,8 @@ "keyboard_shortcuts.direct": "адкрыць стоўп асабістых згадак", "keyboard_shortcuts.down": "Перамясціцца ўніз па спісе", "keyboard_shortcuts.enter": "Адкрыць допіс", + "keyboard_shortcuts.favourite": "Упадабаць допіс", + "keyboard_shortcuts.favourites": "Адкрыць спіс упадабанага", "keyboard_shortcuts.federated": "Адкрыць інтэграваную стужку", "keyboard_shortcuts.heading": "Спалучэнні клавіш", "keyboard_shortcuts.home": "Адкрыць хатнюю храналагічную стужку", @@ -353,6 +365,7 @@ "lightbox.previous": "Назад", "limited_account_hint.action": "Усе роўна паказваць профіль", "limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі", + "link_preview.author": "Ад {name}", "lists.account.add": "Дадаць да спісу", "lists.account.remove": "Выдаліць са спісу", "lists.delete": "Выдаліць спіс", @@ -375,6 +388,7 @@ "mute_modal.hide_notifications": "Схаваць апавяшчэнні ад гэтага карыстальніка?", "mute_modal.indefinite": "Бестэрмінова", "navigation_bar.about": "Пра нас", + "navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе", "navigation_bar.blocks": "Заблакаваныя карыстальнікі", "navigation_bar.bookmarks": "Закладкі", "navigation_bar.community_timeline": "Лакальная стужка", @@ -384,6 +398,7 @@ "navigation_bar.domain_blocks": "Заблакіраваныя дамены", "navigation_bar.edit_profile": "Рэдагаваць профіль", "navigation_bar.explore": "Агляд", + "navigation_bar.favourites": "Упадабанае", "navigation_bar.filters": "Ігнараваныя словы", "navigation_bar.follow_requests": "Запыты на падпіску", "navigation_bar.followed_tags": "Падпіскі", @@ -400,6 +415,7 @@ "not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.", "notification.admin.report": "{name} паскардзіўся на {target}", "notification.admin.sign_up": "{name} зарэгістраваўся", + "notification.favourite": "Ваш допіс упадабаны {name}", "notification.follow": "{name} падпісаўся на вас", "notification.follow_request": "{name} адправіў запыт на падпіску", "notification.mention": "{name} згадаў вас", @@ -413,6 +429,7 @@ "notifications.column_settings.admin.report": "Новыя скаргі:", "notifications.column_settings.admin.sign_up": "Новыя ўваходы:", "notifications.column_settings.alert": "Апавяшчэнні на працоўным стале", + "notifications.column_settings.favourite": "Упадабанае:", "notifications.column_settings.filter_bar.advanced": "Паказваць усе катэгорыі", "notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі", "notifications.column_settings.filter_bar.show_bar": "Паказваць панэль фільтрацыі", @@ -430,6 +447,7 @@ "notifications.column_settings.update": "Праўкі:", "notifications.filter.all": "Усе", "notifications.filter.boosts": "Пашырэнні", + "notifications.filter.favourites": "Упадабанае", "notifications.filter.follows": "Падпісаны на", "notifications.filter.mentions": "Згадванні", "notifications.filter.polls": "Вынікі апытання", @@ -580,6 +598,8 @@ "server_banner.server_stats": "Статыстыка сервера:", "sign_in_banner.create_account": "Стварыць уліковы запіс", "sign_in_banner.sign_in": "Увайсці", + "sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя", + "sign_in_banner.text": "Увайдзіце, каб падпісацца на людзей і тэгі, каб адказваць на допісы, дзяліцца імі і падабаць іх, альбо кантактаваць з вашага ўліковага запісу на іншым серверы.", "status.admin_account": "Адкрыць інтэрфейс мадэратара для @{name}", "status.admin_domain": "Адкрыць інтэрфейс мадэратара для {domain}", "status.admin_status": "Адкрыць гэты допіс у інтэрфейсе мадэрацыі", @@ -596,6 +616,7 @@ "status.edited": "Адрэдагавана {date}", "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}", "status.embed": "Убудаваць", + "status.favourite": "Упадабанае", "status.filter": "Фільтраваць гэты допіс", "status.filtered": "Адфільтравана", "status.hide": "Схаваць допіс", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index b7f40cb6c2..d5f94f8436 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -189,7 +189,6 @@ "conversation.open": "Преглед на разговора", "conversation.with": "С {names}", "copypaste.copied": "Копирано", - "copypaste.copy": "Копиране", "copypaste.copy_to_clipboard": "Копиране в буферната памет", "directory.federated": "От позната федивселена", "directory.local": "Само от {domain}", @@ -298,7 +297,6 @@ "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Показване на подсилванията", "home.column_settings.show_replies": "Показване на отговорите", - "home.explore_prompt.body": "Вашият начален инфоканал ще е смес на публикации от хаштаговете, които сте избрали да следвате, избраните хора за следвате, а и публикациите, които са подсилили. Изглежда доста тихо в момента, така че какво ще кажете за:", "home.explore_prompt.title": "Това е началната ви база с Mastodon.", "home.hide_announcements": "Скриване на оповестяванията", "home.show_announcements": "Показване на оповестяванията", @@ -307,7 +305,6 @@ "interaction_modal.description.reply": "С акаунт в Mastodon може да добавите отговор към тази публикация.", "interaction_modal.on_another_server": "На различен сървър", "interaction_modal.on_this_server": "На този сървър", - "interaction_modal.preamble": "Откак Mastodon е децентрализиран, може да употребявате съществуващ акаунт, разположен на друг сървър на Mastodon или съвместима платформа, ако нямате акаунт на този сървър.", "interaction_modal.title.follow": "Последване на {name}", "interaction_modal.title.reblog": "Подсилване на публикацията на {name}", "interaction_modal.title.reply": "Отговаряне на публикацията на {name}", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 34f9ad21b5..c6f845b402 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -17,6 +17,7 @@ "account.badges.group": "Strollad", "account.block": "Stankañ @{name}", "account.block_domain": "Stankañ an domani {domain}", + "account.block_short": "Stankañ", "account.blocked": "Stanket", "account.browse_more_on_origin_server": "Furchal pelloc'h war ar profil orin", "account.cancel_follow_request": "Nullañ ar reked heuliañ", @@ -46,6 +47,8 @@ "account.mention": "Menegiñ @{name}", "account.moved_to": "Gant {name} eo bet merket e oa bremañ h·e gont nevez :", "account.mute": "Kuzhat @{name}", + "account.mute_notifications_short": "Kuzhat ar c'hemennoù", + "account.mute_short": "Kuzhat", "account.muted": "Kuzhet", "account.open_original_page": "Digeriñ ar bajenn orin", "account.posts": "Toudoù", @@ -171,7 +174,6 @@ "conversation.open": "Gwelout ar gaozeadenn", "conversation.with": "Gant {names}", "copypaste.copied": "Eilet", - "copypaste.copy": "Eilañ", "directory.federated": "Eus ar fedibed anavezet", "directory.local": "Eus {domain} hepken", "directory.new_arrivals": "Degouezhet a-nevez", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 29b2e3c2da..adf29f6fd0 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -80,7 +80,7 @@ "admin.impact_report.instance_followers": "Seguidors que els nostres usuaris perdrien", "admin.impact_report.instance_follows": "Seguidors que els seus usuaris perdrien", "admin.impact_report.title": "Resum del impacte", - "alert.rate_limited.message": "Si us plau prova-ho després de {retry_time, time, medium}.", + "alert.rate_limited.message": "Proveu-ho una altra vegada al cap de {retry_time, time, medium}.", "alert.rate_limited.title": "Límit de freqüència", "alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.title": "Vaja!", @@ -114,7 +114,7 @@ "column.directory": "Navega pels perfils", "column.domain_blocks": "Dominis blocats", "column.favourites": "Favorits", - "column.firehose": "Fluxos en directe", + "column.firehose": "Tuts en directe", "column.follow_requests": "Peticions de seguir-te", "column.home": "Inici", "column.lists": "Llistes", @@ -138,11 +138,11 @@ "compose.published.body": "Tut publicat.", "compose.published.open": "Obre", "compose_form.direct_message_warning_learn_more": "Més informació", - "compose_form.encryption_warning": "Els tuts a Mastodon no estant xifrats punt a punt. No comparteixis informació sensible mitjançant Mastodon.", + "compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació sensible mitjançant Mastodon.", "compose_form.hashtag_warning": "Aquest tut no apareixerà a les llistes d'etiquetes perquè no és públic. Només els tuts públics apareixen a les cerques per etiqueta.", "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure els tuts de només per a seguidors.", "compose_form.lock_disclaimer.lock": "blocat", - "compose_form.placeholder": "En què penses?", + "compose_form.placeholder": "Què tens al cap?", "compose_form.poll.add_option": "Afegeix una opció", "compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.option_placeholder": "Opció {number}", @@ -191,7 +191,6 @@ "conversation.open": "Mostra la conversa", "conversation.with": "Amb {names}", "copypaste.copied": "Copiat", - "copypaste.copy": "Copia", "copypaste.copy_to_clipboard": "Copia al porta-retalls", "directory.federated": "Del fedivers conegut", "directory.local": "Només de {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", - "home.explore_prompt.body": "La teva línia de temps Inici tindrà una barreja dels tuts de les etiquetes que has triat seguir, de les persones que has triat seguir i dels tuts que impulsen. Ara mateix es veu força tranquila, què et sembla si:", + "home.explore_prompt.body": "La teva línia de temps Inici tindrà una barreja dels tuts de les etiquetes que has triat seguir, de les persones que has triat seguir i dels tuts que s'impulsen. Ara mateix es veu força tranquil·la, què et sembla si:", "home.explore_prompt.title": "Aquest és la teva base a Mastodon.", "home.hide_announcements": "Amaga els anuncis", "home.show_announcements": "Mostra els anuncis", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.", "interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquest tut per a compartir-lo amb els teus seguidors.", "interaction_modal.description.reply": "Amb un compte a Mastodon, pots respondre aquest tut.", + "interaction_modal.login.action": "Torna a l'inici", + "interaction_modal.login.prompt": "Domini del teu servidor domèstic, p.ex. mastodon.social", + "interaction_modal.no_account_yet": "No a Mastodon?", "interaction_modal.on_another_server": "En un servidor diferent", "interaction_modal.on_this_server": "En aquest servidor", - "interaction_modal.other_server_instructions": "Copia i enganxa aquest URL en el camp de cerca de la teva aplicació Mastodon preferida o a la interfície web del teu servidor Mastodon.", - "interaction_modal.preamble": "Com que Mastodon és descentralitzat, pots fer servir el teu compte existent en un altre servidor Mastodon o plataforma compatible si no tens compte en aquest.", + "interaction_modal.sign_in": "No has iniciat sessió en aquest servidor. On tens el teu compte?", + "interaction_modal.sign_in_hint": "Ajuda: Aquesta és la web on vas registrar-te. Si no ho recordes, mira el correu electrònic de benvinguda en la teva safata d'entrada. També pots introduïr el teu nom d'usuari complet! (per ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Afavoreix el tut de {name}", "interaction_modal.title.follow": "Segueix {name}", "interaction_modal.title.reblog": "Impulsa el tut de {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Estadístiques del servidor:", "sign_in_banner.create_account": "Crea un compte", "sign_in_banner.sign_in": "Inici de sessió", + "sign_in_banner.sso_redirect": "Inici de sessió o Registre", "sign_in_banner.text": "Inicia la sessió per a seguir perfils o etiquetes, afavorir, compartir i respondre tuts. També pots interactuar des del teu compte a un servidor diferent.", "status.admin_account": "Obre la interfície de moderació per a @{name}", "status.admin_domain": "Obre la interfície de moderació per a @{domain}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 01b41abcf5..b14756b096 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -176,7 +176,6 @@ "conversation.open": "نیشاندان گفتوگۆ", "conversation.with": "لەگەڵ{names}", "copypaste.copied": "کۆپی کراوە", - "copypaste.copy": "ڕوونووس", "directory.federated": "لە ڕاژەکانی ناسراو", "directory.local": "تەنها لە {domain}", "directory.new_arrivals": "تازە گەیشتنەکان", @@ -284,7 +283,6 @@ "interaction_modal.description.reply": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت وەڵامی ئەم بڵاوکراوەیە بدەیتەوە.", "interaction_modal.on_another_server": "لەسەر ڕاژەیەکی جیا", "interaction_modal.on_this_server": "لەسەر ئەم ڕاژەیە", - "interaction_modal.preamble": "بەو پێیەی ماستۆدۆن لامەرکەزییە، دەتوانیت ئەکاونتی ئێستات بەکاربهێنیت کە لەلایەن سێرڤەرێکی تری ماستۆدۆن یان پلاتفۆرمی گونجاوەوە هۆست کراوە ئەگەر ئەکاونتێکت لەسەر ئەم ئەکاونتە نەبێت.", "interaction_modal.title.follow": "دوای {name} بکەوە", "interaction_modal.title.reblog": "پۆستی {name} زیاد بکە", "interaction_modal.title.reply": "وەڵامی پۆستەکەی {name} بدەرەوە", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 0eb7320bbd..70d8e47bdb 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -191,7 +191,6 @@ "conversation.open": "Zobrazit konverzaci", "conversation.with": "S {names}", "copypaste.copied": "Zkopírováno", - "copypaste.copy": "Zkopírovat", "copypaste.copy_to_clipboard": "Zkopírovat do schránky", "directory.federated": "Ze známého fedivesmíru", "directory.local": "Pouze z {domain}", @@ -202,7 +201,9 @@ "dismissable_banner.community_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí, jejichž účty hostuje {domain}.", "dismissable_banner.dismiss": "Zavřít", "dismissable_banner.explore_links": "O těchto zprávách hovoří lidé na tomto a dalších serverech decentralizované sítě právě teď.", + "dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.", "dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.", + "dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.", "embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.", "embed.preview": "Takhle to bude vypadat:", "emoji_button.activity": "Aktivita", @@ -229,6 +230,8 @@ "empty_column.direct": "Zatím nemáte žádné soukromé zmínky. Až nějakou pošlete nebo dostanete, zobrazí se zde.", "empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.", "empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!", + "empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.", + "empty_column.favourites": "Tento příspěvek si zatím nikdo neoblíbil. Až to někdo udělá, zobrazí se zde.", "empty_column.follow_requests": "Zatím nemáte žádné žádosti o sledování. Až nějakou obdržíte, zobrazí se zde.", "empty_column.followed_tags": "Zatím jste nesledovali žádné hashtagy. Až to uděláte, objeví se zde.", "empty_column.hashtag": "Pod tímto hashtagem zde zatím nic není.", @@ -294,17 +297,27 @@ "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci další štítky", "hashtag.follow": "Sledovat hashtag", "hashtag.unfollow": "Přestat sledovat hashtag", + "home.actions.go_to_explore": "Podívejte se, co frčí", + "home.actions.go_to_suggestions": "Najít lidi ke sledování", "home.column_settings.basic": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", + "home.explore_prompt.body": "Váš domovský kanál bude obsahovat směs příspěvků z hashtagů, které jste se rozhodli sledovat, lidí, které jste se rozhodli sledovat, a příspěvků, které boostují. Pokud vám to připadá příliš klidné, možná budete chtít:", + "home.explore_prompt.title": "Toto je vaše domovská základna uvnitř Mastodonu.", "home.hide_announcements": "Skrýt oznámení", "home.show_announcements": "Zobrazit oznámení", + "interaction_modal.description.favourite": "Pokud máte účet na Mastodonu, můžete tento příspěvek označit jako oblíbený a dát tak autorovi najevo, že si ho vážíte, a uložit si ho na později.", "interaction_modal.description.follow": "S účtem na Mastodonu můžete sledovat uživatele {name} a přijímat příspěvky ve vašem domovském kanálu.", "interaction_modal.description.reblog": "S účtem na Mastodonu můžete boostnout tento příspěvek a sdílet jej s vlastními sledujícími.", "interaction_modal.description.reply": "S účtem na Mastodonu můžete odpovědět na tento příspěvek.", + "interaction_modal.login.action": "Domů", + "interaction_modal.login.prompt": "Doména vašeho domovského serveru, např. mastodon.social", + "interaction_modal.no_account_yet": "Nejste na Mastodonu?", "interaction_modal.on_another_server": "Na jiném serveru", "interaction_modal.on_this_server": "Na tomto serveru", - "interaction_modal.preamble": "Protože Mastodon je decentralizovaný, pokud nemáte účet na tomto serveru, můžete použít svůj existující účet hostovaný jiným Mastodon serverem nebo kompatibilní platformou.", + "interaction_modal.sign_in": "Nejste přihlášeni k tomuto serveru. Kde je váš účet hostován?", + "interaction_modal.sign_in_hint": "Tip: To je stránka, na které jste se zaregistrovali. Pokud si ji nepamatujete, vyhledejte ve své e-mailové schránce uvítací e-mail. Můžete také zadat své celé uživatelské jméno! (např. @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Oblíbit si příspěvek od uživatele {name}", "interaction_modal.title.follow": "Sledovat {name}", "interaction_modal.title.reblog": "Boostnout příspěvek uživatele {name}", "interaction_modal.title.reply": "Odpovědět na příspěvek uživatele {name}", @@ -320,6 +333,8 @@ "keyboard_shortcuts.direct": "otevřít sloupec soukromých zmínek", "keyboard_shortcuts.down": "Posunout v seznamu dolů", "keyboard_shortcuts.enter": "Otevřít příspěvek", + "keyboard_shortcuts.favourite": "Oblíbit si příspěvek", + "keyboard_shortcuts.favourites": "Otevřít seznam oblíbených", "keyboard_shortcuts.federated": "Otevřít federovanou časovou osu", "keyboard_shortcuts.heading": "Klávesové zkratky", "keyboard_shortcuts.home": "Otevřít domovskou časovou osu", @@ -350,11 +365,13 @@ "lightbox.previous": "Předchozí", "limited_account_hint.action": "Přesto profil zobrazit", "limited_account_hint.title": "Tento profil byl skryt moderátory {domain}.", + "link_preview.author": "Podle {name}", "lists.account.add": "Přidat do seznamu", "lists.account.remove": "Odebrat ze seznamu", "lists.delete": "Smazat seznam", "lists.edit": "Upravit seznam", "lists.edit.submit": "Změnit název", + "lists.exclusive": "Skrýt tyto příspěvky z domovské stránky", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", "lists.replies_policy.followed": "Sledovaným uživatelům", @@ -371,6 +388,7 @@ "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?", "mute_modal.indefinite": "Neomezeně", "navigation_bar.about": "O aplikaci", + "navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", "navigation_bar.community_timeline": "Místní časová osa", @@ -380,6 +398,7 @@ "navigation_bar.domain_blocks": "Blokované domény", "navigation_bar.edit_profile": "Upravit profil", "navigation_bar.explore": "Prozkoumat", + "navigation_bar.favourites": "Oblíbené", "navigation_bar.filters": "Skrytá slova", "navigation_bar.follow_requests": "Žádosti o sledování", "navigation_bar.followed_tags": "Sledované hashtagy", @@ -396,6 +415,7 @@ "not_signed_in_indicator.not_signed_in": "Pro přístup k tomuto zdroji se musíte přihlásit.", "notification.admin.report": "Uživatel {name} nahlásil {target}", "notification.admin.sign_up": "Uživatel {name} se zaregistroval", + "notification.favourite": "Uživatel {name} si oblíbil váš příspěvek", "notification.follow": "Uživatel {name} vás začal sledovat", "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat", "notification.mention": "Uživatel {name} vás zmínil", @@ -409,6 +429,7 @@ "notifications.column_settings.admin.report": "Nová hlášení:", "notifications.column_settings.admin.sign_up": "Nové registrace:", "notifications.column_settings.alert": "Oznámení na počítači", + "notifications.column_settings.favourite": "Oblíbené:", "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie", "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", "notifications.column_settings.filter_bar.show_bar": "Zobrazit panel filtrů", @@ -426,6 +447,7 @@ "notifications.column_settings.update": "Úpravy:", "notifications.filter.all": "Vše", "notifications.filter.boosts": "Boosty", + "notifications.filter.favourites": "Oblíbené", "notifications.filter.follows": "Sledování", "notifications.filter.mentions": "Zmínky", "notifications.filter.polls": "Výsledky anket", @@ -448,10 +470,12 @@ "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": "Populární na Mastodonu", "onboarding.share.lead": "Dejte lidem vědět, jak vás mohou najít na Mastodonu!", + "onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}", "onboarding.share.next_steps": "Možné další kroky:", "onboarding.share.title": "Sdílejte svůj profil", "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": "Dokázali jste to!", "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": "Řekněte světu Ahoj.", @@ -460,11 +484,16 @@ "onboarding.steps.setup_profile.title": "Přizpůsobit svůj profil", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Sdílejte svůj profil", + "onboarding.tips.2fa": "Víte, že? Svůj účet můžete zabezpečit nastavením dvoufaktorového ověřování v nastavení účtu. Funguje s jakoukoli TOTP aplikací podle vašeho výběru, telefonní číslo není nutné!", + "onboarding.tips.accounts_from_other_servers": "Víte, že? Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!", + "onboarding.tips.migration": "Víte, že? Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!", + "onboarding.tips.verification": "Víte, že? Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!", "password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální délku hesla", "password_confirmation.mismatching": "Zadaná hesla se neshodují", "picture_in_picture.restore": "Vrátit zpět", "poll.closed": "Uzavřeno", "poll.refresh": "Obnovit", + "poll.reveal": "Zobrazit výsledky", "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasů} other {# hlasů}}", "poll.vote": "Hlasovat", @@ -517,6 +546,8 @@ "report.placeholder": "Další komentáře", "report.reasons.dislike": "Nelíbí se mi to", "report.reasons.dislike_description": "Není to něco, co chcete vidět", + "report.reasons.legal": "Je to nezákonné", + "report.reasons.legal_description": "Domníváte se, že to porušuje zákony vaší země nebo země serveru", "report.reasons.other": "Je to něco jiného", "report.reasons.other_description": "Problém neodpovídá ostatním kategoriím", "report.reasons.spam": "Je to spam", @@ -536,6 +567,7 @@ "report.unfollow": "Přestat sledovat @{name}", "report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.", "report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}", + "report_notification.categories.legal": "Zákonné", "report_notification.categories.other": "Ostatní", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Porušení pravidla", @@ -566,6 +598,8 @@ "server_banner.server_stats": "Statistiky serveru:", "sign_in_banner.create_account": "Vytvořit účet", "sign_in_banner.sign_in": "Přihlásit se", + "sign_in_banner.sso_redirect": "Přihlášení nebo Registrace", + "sign_in_banner.text": "Přihlaste se pro sledování profilů nebo hashtagů, oblíbení, sdílení a odpovídání na příspěvky. Svůj účet můžete také používat k interagování i na jiném serveru.", "status.admin_account": "Otevřít moderátorské rozhraní pro @{name}", "status.admin_domain": "Otevřít moderátorské rozhraní pro {domain}", "status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní", @@ -582,6 +616,7 @@ "status.edited": "Upraveno {date}", "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", "status.embed": "Vložit na web", + "status.favourite": "Oblíbit", "status.filter": "Filtrovat tento příspěvek", "status.filtered": "Filtrováno", "status.hide": "Skrýt příspěvek", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index aa98e070e3..a2952a9310 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -191,7 +191,6 @@ "conversation.open": "Gweld sgwrs", "conversation.with": "Gyda {names}", "copypaste.copied": "Wedi ei gopïo", - "copypaste.copy": "Copïo", "copypaste.copy_to_clipboard": "Copïo i'r clipfwrdd", "directory.federated": "O'r ffedysawd cyfan", "directory.local": "O {domain} yn unig", @@ -299,22 +298,25 @@ "hashtag.follow": "Dilyn hashnod", "hashtag.unfollow": "Dad-ddilyn hashnod", "home.actions.go_to_explore": "Gweld beth sy'n tueddu", - "home.actions.go_to_suggestions": "Ffeindio i bobl i'w dilyn", + "home.actions.go_to_suggestions": "Ffeindio pobl i'w dilyn", "home.column_settings.basic": "Syml", "home.column_settings.show_reblogs": "Dangos hybiau", "home.column_settings.show_replies": "Dangos atebion", - "home.explore_prompt.body": "Bydd eich llif cartref yn cynnwys cymysgedd o bostiadau o'r hashnodau rydych chi wedi dewis eu dilyn, y bobl rydych chi wedi dewis eu dilyn, a'r postiadau maen nhw'n rhoi hwb iddyn nhw. Mae'n edrych yn eithaf tawel ar hyn o bryd, felly beth am:", - "home.explore_prompt.title": "Dyma'ch cartref o feewnn Mastodon.", + "home.explore_prompt.body": "Bydd eich llif cartref yn cynnwys cymysgedd o bostiadau o'r hashnodau rydych chi wedi dewis eu dilyn, y bobl rydych chi wedi dewis eu dilyn, a'r postiadau maen nhw'n rhoi hwb iddyn nhw. Os yw hynny'n teimlo'n rhy dawel, efallai y byddwch am:", + "home.explore_prompt.title": "Dyma'ch cartref o fewn Mastodon.", "home.hide_announcements": "Cuddio cyhoeddiadau", "home.show_announcements": "Dangos cyhoeddiadau", "interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi hoffi'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.", "interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich llif cartref.", "interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.", "interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.", + "interaction_modal.login.action": "Ewch â fi adref", + "interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social", + "interaction_modal.no_account_yet": "Dim ar Mastodon?", "interaction_modal.on_another_server": "Ar weinydd gwahanol", "interaction_modal.on_this_server": "Ar y gweinydd hwn", - "interaction_modal.other_server_instructions": "Copïwch a gludwch yr URL hwn i faes chwilio eich hoff ap Mastodon neu ryngwyneb gwe eich gweinydd Mastodon.", - "interaction_modal.preamble": "Gan fod Mastodon wedi'i ddatganoli, gallwch ddefnyddio'ch cyfrif presennol a gynhelir gan weinydd Mastodon arall neu blatfform cydnaws os nad oes gennych gyfrif ar yr un hwn.", + "interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?", + "interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Hoffi postiad {name}", "interaction_modal.title.follow": "Dilyn {name}", "interaction_modal.title.reblog": "Hybu postiad {name}", @@ -363,6 +365,7 @@ "lightbox.previous": "Blaenorol", "limited_account_hint.action": "Dangos y proffil beth bynnag", "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.", + "link_preview.author": "Gan {name}", "lists.account.add": "Ychwanegu at restr", "lists.account.remove": "Tynnu o'r rhestr", "lists.delete": "Dileu rhestr", @@ -387,7 +390,7 @@ "navigation_bar.about": "Ynghylch", "navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio", - "navigation_bar.bookmarks": "Llyfrnodau", + "navigation_bar.bookmarks": "Nodau Tudalen", "navigation_bar.community_timeline": "Ffrwd leol", "navigation_bar.compose": "Cyfansoddi post newydd", "navigation_bar.direct": "Crybwylliadau preifat", @@ -456,8 +459,8 @@ "notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen", "notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.", "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", - "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddant wedi'u galluogi.", - "notifications_permission_banner.title": "Peidiwch colli dim", + "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.", + "notifications_permission_banner.title": "Peidiwch â cholli dim", "onboarding.action.back": "Ewch â fi yn ôl", "onboarding.actions.back": "Ewch â fi yn ôl", "onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd", @@ -501,7 +504,7 @@ "privacy.change": "Addasu preifatrwdd y post", "privacy.direct.long": "Dim ond yn weladwy i ddefnyddwyr a grybwyllwyd", "privacy.direct.short": "Dim ond pobl sy wedi'u crybwyll", - "privacy.private.long": "Dim ond pobl sy'n ddilynwyrl", + "privacy.private.long": "Dim ond pobl sy'n ddilynwyr", "privacy.private.short": "Dilynwyr yn unig", "privacy.public.long": "Gweladwy i bawb", "privacy.public.short": "Cyhoeddus", @@ -510,7 +513,7 @@ "privacy_policy.last_updated": "Diweddarwyd ddiwethaf ar {date}", "privacy_policy.title": "Polisi Preifatrwydd", "refresh": "Adnewyddu", - "regeneration_indicator.label": "Llwytho…", + "regeneration_indicator.label": "Yn llwytho…", "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl", @@ -590,11 +593,12 @@ "server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)", "server_banner.active_users": "defnyddwyr gweithredol", "server_banner.administered_by": "Gweinyddir gan:", - "server_banner.introduction": "Mae {domain} yn rhan o'r rhwydwaith cymdeithasol datganoledig a bwerir gan {mastodon}.", + "server_banner.introduction": "Mae {domain} yn rhan o'r rhwydwaith cymdeithasol datganoledig sy'n cael ei bweru gan {mastodon}.", "server_banner.learn_more": "Dysgu mwy", "server_banner.server_stats": "Ystadegau'r gweinydd:", "sign_in_banner.create_account": "Creu cyfrif", "sign_in_banner.sign_in": "Mewngofnodi", + "sign_in_banner.sso_redirect": "Mewngofnodi neu Gofrestru", "sign_in_banner.text": "Mewngofnodwch i ddilyn proffiliau neu hashnodau, ffefrynnau, rhannu ac ymateb i bostiadau. Gallwch hefyd ryngweithio o'ch cyfrif ar weinyddion gwahanol.", "status.admin_account": "Agor rhyngwyneb cymedroli ar gyfer @{name}", "status.admin_domain": "Agor rhyngwyneb cymedroli {domain}", @@ -635,7 +639,7 @@ "status.reblogged_by": "Hybodd {name}", "status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.", "status.redraft": "Dileu ac ailddrafftio", - "status.remove_bookmark": "Dileu llyfrnod", + "status.remove_bookmark": "Tynnu nod tudalen", "status.replied_to": "Wedi ateb {name}", "status.reply": "Ateb", "status.replyAll": "Ateb i edefyn", @@ -678,7 +682,7 @@ "units.short.thousand": "{count}mil", "upload_area.title": "Llusgwch a gollwng i lwytho", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", - "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", + "upload_error.limit": "Wedi pasio'r uchafswm llwytho.", "upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.", "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index db1b0be78f..3dbde03306 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -191,7 +191,6 @@ "conversation.open": "Vis samtale", "conversation.with": "Med {names}", "copypaste.copied": "Kopieret", - "copypaste.copy": "Kopiér", "copypaste.copy_to_clipboard": "Kopiér til udklipsholder", "directory.federated": "Fra kendt fedivers", "directory.local": "Kun fra {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis boosts", "home.column_settings.show_replies": "Vis svar", - "home.explore_prompt.body": "Dit hjemmefeed vil have en blanding af indlæg fra de hashtags, du har valgt at følge, de personer, du har valgt at følge, og de indlæg, de booster. Her virker temmelig stille lige nu, så hvad med at prøve:", + "home.explore_prompt.body": "Hjemmefeedet vil indeholde en blanding af indlæg fra de hashtags og personer, du følger samt de indlæg, de booster. Føles synes for stille, kan du prøve:", "home.explore_prompt.title": "Dette er din hjemmebase i Mastodon.", "home.hide_announcements": "Skjul bekendtgørelser", "home.show_announcements": "Vis bekendtgørelser", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Med en konto på Mastodon kan du følge {name} for at modtage vedkommendes indlæg i dit hjemmefeed.", "interaction_modal.description.reblog": "Med en konto på Mastodon kan dette indlæg fremhæves så det deles med egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon kan dette indlæg besvares.", + "interaction_modal.login.action": "Gå til hjemmeserver", + "interaction_modal.login.prompt": "Hjemmeserverdomænet, f.eks. mastodon.social", + "interaction_modal.no_account_yet": "Ikke på Mastodon?", "interaction_modal.on_another_server": "På en anden server", "interaction_modal.on_this_server": "På denne server", - "interaction_modal.other_server_instructions": "Kopiér og indsæt denne URL i søgefeltet på den foretrukne Mastodon-app eller Mastodon-serverens webgrænseflade.", - "interaction_modal.preamble": "Da Mastodon er decentraliseret, kan man bruge sin eksisterende konto hostet af en anden Mastodon-server eller kompatibel platform, såfremt man ikke har en konto på denne.", + "interaction_modal.sign_in": "Du er ikke logget ind på denne server. Hvor hostes din konto?", + "interaction_modal.sign_in_hint": "Tip: Det er webstedet, hvor du tilmeldte dig. Har du glemt det, så kig efter velkomstmailen i indbakken. Du kan også angive dit fulde brugernavn! (f.eks. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Gør {name}s indlæg til favorit", "interaction_modal.title.follow": "Følg {name}", "interaction_modal.title.reblog": "Boost {name}s indlæg", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Serverstatstik:", "sign_in_banner.create_account": "Opret konto", "sign_in_banner.sign_in": "Log ind", + "sign_in_banner.sso_redirect": "Log ind eller Tilmeld", "sign_in_banner.text": "Log ind for at følge profiler eller hashtags, markere som favorit, dele og besvare indlæg eller interagere fra din konto på en anden server.", "status.admin_account": "Åbn modereringsbrugerflade for @{name}", "status.admin_domain": "Åbn modereringsbrugerflade for {domain}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 8130c3f640..9b40964f22 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -150,7 +150,7 @@ "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben", "compose_form.poll.switch_to_single": "Nur Einzelauswahl erlauben", "compose_form.publish": "Veröffentlichen", - "compose_form.publish_form": "Veröffentlichen", + "compose_form.publish_form": "Neuer Beitrag", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Änderungen speichern", "compose_form.sensitive.hide": "{count, plural, one {Mit einer Inhaltswarnung versehen} other {Mit einer Inhaltswarnung versehen}}", @@ -191,7 +191,6 @@ "conversation.open": "Unterhaltung anzeigen", "conversation.with": "Mit {names}", "copypaste.copied": "Kopiert", - "copypaste.copy": "Kopieren", "copypaste.copy_to_clipboard": "In die Zwischenablage kopieren", "directory.federated": "Aus bekanntem Fediverse", "directory.local": "Nur von der Domain {domain}", @@ -202,7 +201,7 @@ "dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.", "dismissable_banner.dismiss": "Ablehnen", "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im sozialen Netzwerk geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen veröffentlicht wurden, werden höher eingestuft.", - "dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netz und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.", + "dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netzwerk und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.", "dismissable_banner.explore_tags": "Das sind Hashtags, die derzeit an Reichweite gewinnen. Hashtags, die von vielen verschiedenen Profilen verwendet werden, werden höher eingestuft.", "dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im sozialen Netzwerk, denen Leute auf {domain} folgen.", "embed.instructions": "Du kannst diesen Beitrag außerhalb des Fediverse (z. B. auf deiner Website) einbetten, indem du diesen iFrame-Code einfügst.", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Einfach", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", - "home.explore_prompt.body": "Deine Startseite wird eine Mischung aus Beiträgen mit gefolgten Hashtags und den Profilen, denen du folgst sowie den Beiträgen, die sie teilen, enthalten. Aktuell ist es noch etwas still. Wie wäre es mit:", + "home.explore_prompt.body": "Deine Startseite wird eine Mischung aus Beiträgen mit Hashtags und den Profilen, denen du folgst sowie den Beiträgen, die sie teilen, enthalten. Sollte es sich zu still anfühlen:", "home.explore_prompt.title": "Das ist dein Zuhause bei Mastodon.", "home.hide_announcements": "Ankündigungen ausblenden", "home.show_announcements": "Ankündigungen anzeigen", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.", "interaction_modal.description.reblog": "Mit einem Mastodon-Konto kannst du die Reichweite dieses Beitrags erhöhen, indem du ihn mit deinen Followern teilst.", "interaction_modal.description.reply": "Mit einem Mastodon-Konto kannst du auf diesen Beitrag antworten.", + "interaction_modal.login.action": "Zurück zur Startseite", + "interaction_modal.login.prompt": "Adresse deines Servers, z. B. mastodon.social", + "interaction_modal.no_account_yet": "Nicht auf Mastodon?", "interaction_modal.on_another_server": "Auf einem anderen Server", "interaction_modal.on_this_server": "Auf diesem Server", - "interaction_modal.other_server_instructions": "Kopiere diese URL und füge sie in das Suchfeld deiner bevorzugten Mastodon-App oder in das Webinterface deines Mastodon-Servers ein.", - "interaction_modal.preamble": "Da Mastodon dezentralisiert ist, kannst du dein bestehendes Konto auf einem anderen Mastodon-Server oder einer kompatiblen Plattform nutzen, wenn du kein Konto auf dieser Plattform hast.", + "interaction_modal.sign_in": "Du bist auf diesem Server nicht angemeldet. Auf welchem Server wird dein Konto verwaltet?", + "interaction_modal.sign_in_hint": "Hinweis: Hierbei handelt es sich um die Website, auf der du dich registriert hast. Wenn du dich nicht mehr daran erinnerst, dann kannst du sie in der Willkommens-E-Mail nachsehen. Du kannst auch deinen vollständigen Profilnamen eingeben! (z. B. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Beitrag von {name} favorisieren", "interaction_modal.title.follow": "Folge {name}", "interaction_modal.title.reblog": "Beitrag von {name} teilen", @@ -471,7 +473,7 @@ "onboarding.share.message": "Ich bin {username} auf #Mastodon! Folge mir auf {url}", "onboarding.share.next_steps": "Mögliche nächste Schritte:", "onboarding.share.title": "Teile dein Profil", - "onboarding.start.lead": "Du bist nun ein Teil von Mastodon – eine einzigartige, dezentralisierte Social Media-Plattform, bei der du und kein Algorithmus deine eigene Erfahrung gestaltest. Fangen wir an, diese neue soziale Dimension zu erkunden:", + "onboarding.start.lead": "Du bist nun ein Teil von Mastodon – eine einzigartige, dezentralisierte Social-Media-Plattform, bei der du und kein Algorithmus deine eigene Erfahrung gestaltest. Fangen wir an, diese neue soziale Dimension zu erkunden:", "onboarding.start.skip": "Du benötigst keine Hilfe für den Einstieg?", "onboarding.start.title": "Du hast es geschafft!", "onboarding.steps.follow_people.body": "Interessanten Profilen zu folgen ist das, was Mastodon ausmacht.", @@ -506,7 +508,7 @@ "privacy.private.short": "Nur Follower", "privacy.public.long": "Für alle sichtbar", "privacy.public.short": "Öffentlich", - "privacy.unlisted.long": "Sichtbar für alle, aber nicht über Suchfunktion", + "privacy.unlisted.long": "Für alle sichtbar, aber nicht über die Suche zu finden", "privacy.unlisted.short": "Nicht gelistet", "privacy_policy.last_updated": "Stand: {date}", "privacy_policy.title": "Datenschutzerklärung", @@ -526,7 +528,7 @@ "relative_time.today": "heute", "reply_indicator.cancel": "Abbrechen", "report.block": "Blockieren", - "report.block_explanation": "Dir wird es nicht länger möglich sein, die Beiträge dieses Konto zu sehen. Das blockierte Profil wird nicht mehr in der Lage sein, deine Beiträge zu sehen oder dir zu folgen. Die Person hinter dem Konto wird mitbekommen, dass du ihr Konto blockiert hast.", + "report.block_explanation": "Du wirst keine Beiträge mehr von diesem Konto sehen. Das blockierte Konto wird deine Beiträge nicht mehr sehen oder dir folgen können. Die Person könnte mitbekommen, dass du sie blockiert hast.", "report.categories.other": "Andere", "report.categories.spam": "Spam", "report.categories.violation": "Der Inhalt verletzt eine oder mehrere Serverregeln", @@ -539,7 +541,7 @@ "report.forward": "Meldung zusätzlich an {target} weiterleiten", "report.forward_hint": "Dieses Konto gehört zu einem anderen Server. Soll eine anonymisierte Kopie der Meldung auch dorthin gesendet werden?", "report.mute": "Stummschalten", - "report.mute_explanation": "Du wirst die Beiträge vom Konto nicht mehr sehen. Das Konto kann dir immer noch folgen, und die Person hinter dem Konto wird deine Beiträge sehen können und nicht wissen, dass du sie stummgeschaltet hast.", + "report.mute_explanation": "Du wirst keine Beiträge mehr von diesem Konto sehen. Das stummgeschaltete Konto wird dir weiterhin folgen und deine Beiträge sehen können. Die Person wird nicht mitbekommen, dass du sie stummgeschaltet hast.", "report.next": "Weiter", "report.placeholder": "Ergänzende Hinweise", "report.reasons.dislike": "Das gefällt mir nicht", @@ -555,8 +557,8 @@ "report.rules.subtitle": "Wähle alle zutreffenden Inhalte aus", "report.rules.title": "Welche Regeln werden verletzt?", "report.statuses.subtitle": "Wähle alle zutreffenden Inhalte aus", - "report.statuses.title": "Gibt es Beiträge, die diesen Bericht untermauern?", - "report.submit": "Absenden", + "report.statuses.title": "Gibt es Beiträge, die diese Meldung bekräftigen?", + "report.submit": "Senden", "report.target": "{target} melden", "report.thanks.take_action": "Das sind deine Möglichkeiten zu bestimmen, was du auf Mastodon sehen möchtest:", "report.thanks.take_action_actionable": "Während wir den Vorfall überprüfen, kannst du gegen @{name} weitere Maßnahmen ergreifen:", @@ -591,11 +593,12 @@ "server_banner.about_active_users": "Personen, die diesen Server in den vergangenen 30 Tagen verwendet haben (monatlich aktive Nutzer*innen)", "server_banner.active_users": "aktive Profile", "server_banner.administered_by": "Verwaltet von:", - "server_banner.introduction": "{domain} ist ein Teil des dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.", + "server_banner.introduction": "{domain} ist Teil eines dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.", "server_banner.learn_more": "Mehr erfahren", "server_banner.server_stats": "Serverstatistiken:", "sign_in_banner.create_account": "Konto erstellen", "sign_in_banner.sign_in": "Anmelden", + "sign_in_banner.sso_redirect": "Anmelden oder registrieren", "sign_in_banner.text": "Melde dich an, um Profilen oder Hashtags zu folgen, Beiträge zu favorisieren, zu teilen und auf sie zu antworten. Du kannst auch von deinem Konto aus auf einem anderen Server interagieren.", "status.admin_account": "@{name} moderieren", "status.admin_domain": "{domain} moderieren", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index e34df674fd..6a9d45cf87 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -177,7 +177,6 @@ "conversation.open": "Προβολή συνομιλίας", "conversation.with": "Με {names}", "copypaste.copied": "Αντιγράφηκε", - "copypaste.copy": "Αντιγραφή", "copypaste.copy_to_clipboard": "Αντιγραφή στο πρόχειρο", "directory.federated": "Από το γνωστό fediverse", "directory.local": "Μόνο από {domain}", @@ -287,7 +286,6 @@ "interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.", "interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή", "interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή", - "interaction_modal.preamble": "Δεδομένου ότι το Mastodon είναι αποκεντρωμένο, μπορείς να χρησιμοποιείς τον υπάρχοντα λογαριασμό σου που φιλοξενείται σε άλλον διακομιστή του Mastodon ή σε συμβατή πλατφόρμα, αν δεν έχετε λογαριασμό σε αυτόν.", "interaction_modal.title.follow": "Ακολούθησε {name}", "interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}", "interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index a0892fd1e3..1021a22812 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -13,14 +13,14 @@ "about.rules": "Server rules", "account.account_note_header": "Note", "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", + "account.badges.bot": "Automated", "account.badges.group": "Group", "account.block": "Block @{name}", - "account.block_domain": "Unblock domain {domain}", + "account.block_domain": "Block domain {domain}", "account.block_short": "Block", "account.blocked": "Blocked", "account.browse_more_on_origin_server": "Browse more on the original profile", - "account.cancel_follow_request": "Withdraw follow request", + "account.cancel_follow_request": "Cancel follow", "account.direct": "Privately mention @{name}", "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "Domain blocked", @@ -150,7 +150,7 @@ "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.publish": "Publish", - "compose_form.publish_form": "Publish", + "compose_form.publish_form": "New post", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Save changes", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", @@ -191,7 +191,6 @@ "conversation.open": "View conversation", "conversation.with": "With {names}", "copypaste.copied": "Copied", - "copypaste.copy": "Copy", "copypaste.copy_to_clipboard": "Copy to clipboard", "directory.federated": "From known fediverse", "directory.local": "From {domain} only", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", - "home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. It's looking pretty quiet right now, so how about:", + "home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:", "home.explore_prompt.title": "This is your home base within Mastodon.", "home.hide_announcements": "Hide announcements", "home.show_announcements": "Show announcements", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.", "interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.", "interaction_modal.description.reply": "With an account on Mastodon, you can respond to this post.", + "interaction_modal.login.action": "Take me home", + "interaction_modal.login.prompt": "Domain of your home server, e.g. mastodon.social", + "interaction_modal.no_account_yet": "Not on Mastodon?", "interaction_modal.on_another_server": "On a different server", "interaction_modal.on_this_server": "On this server", - "interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.", - "interaction_modal.preamble": "Since Mastodon is decentralised, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.", + "interaction_modal.sign_in": "You are not logged in to this server. Where is your account hosted?", + "interaction_modal.sign_in_hint": "Tip: That's the website where you signed up. If you don't remember, look for the welcome e-mail in your inbox. You can also enter your full username! (e.g. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favourite {name}'s post", "interaction_modal.title.follow": "Follow {name}", "interaction_modal.title.reblog": "Boost {name}'s post", @@ -335,14 +337,14 @@ "keyboard_shortcuts.favourites": "Open favourites list", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "Open home timeline", "keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.notifications": "Open notifications column", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned posts list", "keyboard_shortcuts.profile": "to open author's profile", @@ -352,10 +354,10 @@ "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "Show/hide media", "keyboard_shortcuts.toot": "to start a brand new post", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.up": "Move up in the list", "lightbox.close": "Close", "lightbox.compress": "Compress image view box", "lightbox.expand": "Expand image view box", @@ -393,7 +395,7 @@ "navigation_bar.compose": "Compose new post", "navigation_bar.direct": "Private mentions", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.explore": "Explore", "navigation_bar.favourites": "Favourites", @@ -462,26 +464,26 @@ "onboarding.action.back": "Take me back", "onboarding.actions.back": "Take me back", "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_home": "Take me to my home feed", "onboarding.compose.template": "Hello #Mastodon!", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", "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.follows.title": "Personalize your home feed", "onboarding.share.lead": "Let people know how they can find you on Mastodon!", "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}", "onboarding.share.next_steps": "Possible next steps:", "onboarding.share.title": "Share your profile", - "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.lead": "You're now part of Mastodon, a unique, decentralized social media platform where you—not an algorithm—curate your own experience. Let's get you started on this new social frontier:", + "onboarding.start.skip": "Don't need help getting started?", "onboarding.start.title": "You've made it!", "onboarding.steps.follow_people.body": "Following interesting people is what Mastodon is all about.", - "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.follow_people.title": "Personalize your home feed", + "onboarding.steps.publish_status.body": "Say hello to the world with text, photos, videos, or polls {emoji}", "onboarding.steps.publish_status.title": "Make your first post", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customise your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.steps.share_profile.title": "Share your Mastodon profile", "onboarding.tips.2fa": "Did you know? You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!", "onboarding.tips.accounts_from_other_servers": "Did you know? Since Mastodon is decentralised, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!", "onboarding.tips.migration": "Did you know? If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!", @@ -498,10 +500,10 @@ "poll.voted": "You voted for this answer", "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Add a poll", - "privacy.change": "Adjust status privacy", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Change post privacy", "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Mentioned people only", "privacy.private.long": "Visible for followers only", "privacy.private.short": "Followers-only", "privacy.public.long": "Visible for all", @@ -541,7 +543,7 @@ "report.mute": "Mute", "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.", "report.next": "Next", - "report.placeholder": "Type or paste additional comments", + "report.placeholder": "Additional comments", "report.reasons.dislike": "I don't like it", "report.reasons.dislike_description": "It is not something you want to see", "report.reasons.legal": "It's illegal", @@ -556,8 +558,8 @@ "report.rules.title": "Which rules are being violated?", "report.statuses.subtitle": "Select all that apply", "report.statuses.title": "Are there any posts that back up this report?", - "report.submit": "Submit report", - "report.target": "Report {target}", + "report.submit": "Submit", + "report.target": "Reporting {target}", "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", "report.thanks.title": "Don't want to see this?", @@ -596,10 +598,11 @@ "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.sso_redirect": "Login or Register", "sign_in_banner.text": "Login to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_domain": "Open moderation interface for {domain}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_status": "Open this post in the moderation interface", "status.block": "Block @{name}", "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", @@ -627,7 +630,7 @@ "status.more": "More", "status.mute": "Mute @{name}", "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", + "status.open": "Expand this post", "status.pin": "Pin on profile", "status.pinned": "Pinned post", "status.read_more": "Read more", @@ -681,13 +684,13 @@ "upload_button.label": "Add images, a video or an audio file", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "upload_form.audio_description": "Describe for people who are deaf or hard of hearing", + "upload_form.description": "Describe for people who are blind or have low vision", "upload_form.description_missing": "No description added", "upload_form.edit": "Edit", "upload_form.thumbnail": "Change thumbnail", "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision", "upload_modal.analyzing_picture": "Analysing picture…", "upload_modal.apply": "Apply", "upload_modal.applying": "Applying…", @@ -700,7 +703,7 @@ "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading…", "upload_progress.processing": "Processing…", - "username.taken": "Username is taken - try another. Carlito77", + "username.taken": "That username is taken. Try another", "video.close": "Close video", "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 68fb0a8012..2735f05d0b 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -189,7 +189,6 @@ "conversation.open": "Vidi konversacion", "conversation.with": "Kun {names}", "copypaste.copied": "Kopiita", - "copypaste.copy": "Kopii", "copypaste.copy_to_clipboard": "Kopii al dosierujo", "directory.federated": "El konata fediverso", "directory.local": "Nur de {domain}", @@ -303,7 +302,6 @@ "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.", "interaction_modal.on_another_server": "En alia servilo", "interaction_modal.on_this_server": "En ĉi tiu servilo", - "interaction_modal.preamble": "Ĉar Mastodon estas malcentrigita, vi povas uzi jam ekzistantan konton gastigatan de alia Mastodona servilo aŭ kongrua substrato, se vi ne havas konton ĉe tiu ĉi.", "interaction_modal.title.follow": "Sekvi {name}", "interaction_modal.title.reblog": "Akceli la afiŝon de {name}", "interaction_modal.title.reply": "Respondi al la afiŝo de {name}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 511dcc453e..8f2a9c0cdb 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -191,7 +191,6 @@ "conversation.open": "Ver conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar al portapapeles", "directory.federated": "Desde fediverso conocido", "directory.local": "Sólo de {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", - "home.explore_prompt.body": "Tu línea temporal principal tendrá una mezcla de mensajes de etiquetas que hayás decidido seguir, cuentas que hayás seguido y mensajes a los que éstas adhieran. Ahora está muy tranquilo por acá, así que, qué te parece:", + "home.explore_prompt.body": "Tu línea temporal principal tendrá una mezcla de mensajes de etiquetas que hayás decidido seguir, cuentas que hayás seguido y mensajes a los que éstas adhieran. Si está muy tranquilo por acá, quizás quieras:", "home.explore_prompt.title": "Este es tu inicio en Mastodon.", "home.hide_announcements": "Ocultar anuncios", "home.show_announcements": "Mostrar anuncios", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.", + "interaction_modal.login.action": "Llevame al comienzo", + "interaction_modal.login.prompt": "Dominio de su servidor de inicio, p. ej., mastodon.social", + "interaction_modal.no_account_yet": "¿No tenés cuenta en Mastodon?", "interaction_modal.on_another_server": "En un servidor diferente", "interaction_modal.on_this_server": "En este servidor", - "interaction_modal.other_server_instructions": "Copiá y pegá esta dirección web en la barra de búsqueda de tu aplicación favorita de Mastodon, o en la interface web de tu servidor de Mastodon.", - "interaction_modal.preamble": "Ya que Mastodon es descentralizado, podés usar tu cuenta existente alojada por otro servidor Mastodon (u otra plataforma compatible, si no tenés una cuenta en ésta).", + "interaction_modal.sign_in": "No iniciaste sesión en este servidor. ¿Dónde se encuentra alojada tu cuenta?", + "interaction_modal.sign_in_hint": "Ayuda: es el sitio web en donde te registraste. Si no te acordás, buscá el correo electrónico de bienvenida en tu cuenta de email. También podés usar tu nombre de usuario entero, p. ej., @tunombredeusuario@mastodon.social.", "interaction_modal.title.favourite": "Marcar como favorito el mensaje de {name}", "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Adherir al mensaje de {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Estadísticas del servidor:", "sign_in_banner.create_account": "Crear cuenta", "sign_in_banner.sign_in": "Iniciar sesión", + "sign_in_banner.sso_redirect": "Iniciá sesión o registrate", "sign_in_banner.text": "Iniciá sesión para seguir cuentas o etiquetas, marcar mensajes como favoritos, compartirlos y responderlos. También podés interactuar desde tu cuenta en un servidor diferente.", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_domain": "Abrir interface de moderación para {domain}", @@ -671,7 +674,7 @@ "timeline_hint.resources.followers": "Tus seguidores", "timeline_hint.resources.follows": "Las cuentas que seguís", "timeline_hint.resources.statuses": "Mensajes más antiguos", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en el/los pasado/s {days, plural, one {día} other {{days} días}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en {days, plural, one {el pasado día} other {los pasados {days} días}}", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.", "units.short.billion": "{count}MM", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 6e4ad100eb..f59862245f 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -191,7 +191,6 @@ "conversation.open": "Ver conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar al portapapeles", "directory.federated": "Desde el fediverso conocido", "directory.local": "Sólo de {domain}", @@ -202,6 +201,7 @@ "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de las personas cuyas cuentas están alojadas en {domain}.", "dismissable_banner.dismiss": "Descartar", "dismissable_banner.explore_links": "Estas noticias están siendo discutidas por personas en este y otros servidores de la red descentralizada en este momento.", + "dismissable_banner.explore_statuses": "Estas son las publicaciones que están ganando popularidad en la web social hoy. Las publicaciones recientes con más impulsos y favoritos obtienen más exposición.", "dismissable_banner.explore_tags": "Se trata de hashtags que están ganando adeptos en las redes sociales hoy en día. Los hashtags que son utilizados por más personas diferentes se clasifican mejor.", "dismissable_banner.public_timeline": "Estos son los toots públicos más recientes de personas en la web social a las que sigue la gente en {domain}.", "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", @@ -230,6 +230,8 @@ "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", "empty_column.explore_statuses": "Nada es tendencia en este momento. ¡Revisa más tarde!", + "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.", + "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.followed_tags": "No estás siguiendo ningún hashtag todavía. Cuando lo hagas, aparecerá aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", @@ -300,16 +302,22 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", - "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de etiquetas que hayas decidido seguir, personas que hayas seguido y publicaciones que estas impulsen. Ahora está muy vacía, por qué no:", + "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de las etiquetas que has escogido seguir, la gente que has decidido seguir y las publicaciones que impulsen. Si crees que está demasiado tranquila, quizás quieras:", "home.explore_prompt.title": "Este es tu punto de partida en Mastodon.", "home.hide_announcements": "Ocultar anuncios", "home.show_announcements": "Mostrar anuncios", + "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.", "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu fuente de inicio.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.", + "interaction_modal.login.action": "Ir a Inicio", + "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo mastodon.social", + "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?", "interaction_modal.on_another_server": "En un servidor diferente", "interaction_modal.on_this_server": "En este servidor", - "interaction_modal.preamble": "Ya que Mastodon es descentralizado, puedes usar tu cuenta existente alojada en otro servidor Mastodon o plataforma compatible si no tienes una cuenta en este servidor.", + "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?", + "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}", "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Impulsar la publicación de {name}", "interaction_modal.title.reply": "Responder la publicación de {name}", @@ -325,6 +333,8 @@ "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", "keyboard_shortcuts.down": "mover hacia abajo en la lista", "keyboard_shortcuts.enter": "abrir estado", + "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", + "keyboard_shortcuts.favourites": "Abrir lista de favoritos", "keyboard_shortcuts.federated": "abrir el timeline federado", "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "abrir el timeline propio", @@ -355,6 +365,7 @@ "lightbox.previous": "Anterior", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", + "link_preview.author": "Por {name}", "lists.account.add": "Añadir a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Borrar lista", @@ -387,6 +398,7 @@ "navigation_bar.domain_blocks": "Dominios ocultos", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.explore": "Explorar", + "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes para seguirte", "navigation_bar.followed_tags": "Hashtags seguidos", @@ -403,6 +415,7 @@ "not_signed_in_indicator.not_signed_in": "Necesitas iniciar sesión para acceder a este recurso.", "notification.admin.report": "{name} denunció a {target}", "notification.admin.sign_up": "{name} se unio", + "notification.favourite": "{name} marcó como favorita tu publicación", "notification.follow": "{name} te empezó a seguir", "notification.follow_request": "{name} ha solicitado seguirte", "notification.mention": "{name} te ha mencionado", @@ -416,6 +429,7 @@ "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Registros nuevos:", "notifications.column_settings.alert": "Notificaciones de escritorio", + "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", @@ -433,6 +447,7 @@ "notifications.column_settings.update": "Ediciones:", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Retoots", + "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", @@ -583,6 +598,8 @@ "server_banner.server_stats": "Estadísticas del servidor:", "sign_in_banner.create_account": "Crear cuenta", "sign_in_banner.sign_in": "Iniciar sesión", + "sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse", + "sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_domain": "Abrir interfaz de moderación para {domain}", "status.admin_status": "Abrir este estado en la interfaz de moderación", @@ -599,6 +616,7 @@ "status.edited": "Editado {date}", "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}", "status.embed": "Incrustado", + "status.favourite": "Favorito", "status.filter": "Filtrar esta publicación", "status.filtered": "Filtrado", "status.hide": "Ocultar toot", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index db78eb7dac..3e4e06474f 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -191,7 +191,6 @@ "conversation.open": "Ver conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar al portapapeles", "directory.federated": "Desde el fediverso conocido", "directory.local": "Sólo de {domain}", @@ -202,6 +201,7 @@ "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de personas cuyas cuentas están alojadas en {domain}.", "dismissable_banner.dismiss": "Descartar", "dismissable_banner.explore_links": "Estas son las noticias que están siendo más compartidas hoy en la red. Nuevas noticias publicadas por diferentes personas se puntúan más alto.", + "dismissable_banner.explore_statuses": "Estas son las publicaciones que están ganando popularidad en la web social hoy. Las publicaciones recientes con más impulsos y favoritos obtienen más exposición.", "dismissable_banner.explore_tags": "Estas son las etiquetas que están ganando popularidad hoy en la red. Etiquetas que se usan por personas diferentes se puntúan más alto.", "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de personas en el Fediverso que siguen las personas de {domain}.", "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.", @@ -230,6 +230,8 @@ "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", "empty_column.explore_statuses": "Nada está en tendencia en este momento. ¡Revisa más tarde!", + "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.", + "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", @@ -300,16 +302,22 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respuestas", - "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de etiquetas que hayas decidido seguir, personas que hayas seguido y publicaciones que estas impulsen. Ahora está muy vacía, por qué no:", + "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de las etiquetas que has escogido seguir, la gente que has decidido seguir y las publicaciones que impulsen. Si crees que está demasiado tranquila, quizás quieras:", "home.explore_prompt.title": "Este es tu punto de partida en Mastodon.", "home.hide_announcements": "Ocultar anuncios", "home.show_announcements": "Mostrar anuncios", + "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.", "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu línea temporal de inicio.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.", + "interaction_modal.login.action": "Ir a Inicio", + "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo mastodon.social", + "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?", "interaction_modal.on_another_server": "En un servidor diferente", "interaction_modal.on_this_server": "En este servidor", - "interaction_modal.preamble": "Ya que Mastodon es descentralizado, puedes usar tu cuenta existente alojada en otro servidor Mastodon o plataforma compatible si no tienes una cuenta en este servidor.", + "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?", + "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}", "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Impulsar la publicación de {name}", "interaction_modal.title.reply": "Responder a la publicación de {name}", @@ -325,6 +333,8 @@ "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", "keyboard_shortcuts.down": "mover hacia abajo en la lista", "keyboard_shortcuts.enter": "Abrir publicación", + "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", + "keyboard_shortcuts.favourites": "Abrir lista de favoritos", "keyboard_shortcuts.federated": "Abrir la cronología federada", "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "Abrir cronología principal", @@ -355,6 +365,7 @@ "lightbox.previous": "Anterior", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", + "link_preview.author": "Por {name}", "lists.account.add": "Añadir a lista", "lists.account.remove": "Quitar de lista", "lists.delete": "Borrar lista", @@ -377,6 +388,7 @@ "mute_modal.hide_notifications": "¿Ocultar notificaciones de este usuario?", "mute_modal.indefinite": "Indefinida", "navigation_bar.about": "Acerca de", + "navigation_bar.advanced_interface": "Abrir en la interfaz web avanzada", "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Cronología local", @@ -386,6 +398,7 @@ "navigation_bar.domain_blocks": "Dominios ocultos", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.explore": "Explorar", + "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes para seguirte", "navigation_bar.followed_tags": "Etiquetas seguidas", @@ -402,6 +415,7 @@ "not_signed_in_indicator.not_signed_in": "Necesitas iniciar sesión para acceder a este recurso.", "notification.admin.report": "{name} informó {target}", "notification.admin.sign_up": "{name} se registró", + "notification.favourite": "{name} marcó como favorita tu publicación", "notification.follow": "{name} te empezó a seguir", "notification.follow_request": "{name} ha solicitado seguirte", "notification.mention": "{name} te ha mencionado", @@ -415,6 +429,7 @@ "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", + "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", @@ -432,6 +447,7 @@ "notifications.column_settings.update": "Ediciones:", "notifications.filter.all": "Todos", "notifications.filter.boosts": "Impulsos", + "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", "notifications.filter.polls": "Resultados de la votación", @@ -582,6 +598,8 @@ "server_banner.server_stats": "Estadísticas del servidor:", "sign_in_banner.create_account": "Crear cuenta", "sign_in_banner.sign_in": "Iniciar sesión", + "sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse", + "sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_domain": "Abrir interfaz de moderación para {domain}", "status.admin_status": "Abrir esta publicación en la interfaz de moderación", @@ -598,6 +616,7 @@ "status.edited": "Editado {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Incrustado", + "status.favourite": "Favorito", "status.filter": "Filtrar esta publicación", "status.filtered": "Filtrado", "status.hide": "Ocultar publicación", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 44d3c91220..86ef7f103b 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -191,7 +191,6 @@ "conversation.open": "Vaata vestlust", "conversation.with": "Koos {names}", "copypaste.copied": "Kopeeritud", - "copypaste.copy": "Kopeeri", "copypaste.copy_to_clipboard": "Kopeeri vahemällu", "directory.federated": "Tuntud födiversumist", "directory.local": "Ainult domeenilt {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Peamine", "home.column_settings.show_reblogs": "Näita jagamisi", "home.column_settings.show_replies": "Näita vastuseid", - "home.explore_prompt.body": "Sinu koduvoos on koos jälgimiseks valitud siltidega postitused, sinu jälgitavate inimeste postitused ja postitused, mida nad jagavad. Praegu paistab siin üsna vaikne olema, et kuidas oleks kui:", + "home.explore_prompt.body": "Sinu koduvoos on koos jälgimiseks valitud siltidega postitused, sinu jälgitavate inimeste postitused ja postitused, mida nad jagavad. Kui see tundub liiga vaikne, võid sa soovida:", "home.explore_prompt.title": "See on sinu kodubaas Mastodonis.", "home.hide_announcements": "Peida teadaanded", "home.show_announcements": "Kuva teadaandeid", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Mastodoni kontoga saad jälgida kasutajat {name}, et tema postitusi oma koduvoos näha.", "interaction_modal.description.reblog": "Mastodoni kontoga saad seda postitust levitada, jagades seda oma jälgijatele.", "interaction_modal.description.reply": "Mastodoni kontoga saad sellele postitusele vastata.", + "interaction_modal.login.action": "Vii mind avalehele", + "interaction_modal.login.prompt": "Sinu koduserveri domeen, näiteks mastodon.social", + "interaction_modal.no_account_yet": "Pole Mastodonis?", "interaction_modal.on_another_server": "Teises serveris", "interaction_modal.on_this_server": "Selles serveris", - "interaction_modal.other_server_instructions": "Kopeeri ja kleebi see URL oma Mastodoni lemmikäpi või Mastodoni serveri veebiliidese otsinguväljale.", - "interaction_modal.preamble": "Kuna Mastodon on detsentraliseeritud, saab kasutada teises Mastodoni serveris olevat kontot või ka ühilduval platvormil, kui siin serveril kontot ei ole.", + "interaction_modal.sign_in": "Sa pole sellesse serverisse sisse logitud. Kus sinu konto asub?", + "interaction_modal.sign_in_hint": "Vihje: See on veebileht, millel sa registreerusid. Kui see ei meenu, otsi sisendkaustast tervitus-e-kirja. Võid sisestada ka oma täispika kasutajanime! (Näit. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Lisa konto {name} postitus lemmikuks", "interaction_modal.title.follow": "Jälgi kontot {name}", "interaction_modal.title.reblog": "Jaga {name} postitust", @@ -386,6 +388,7 @@ "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?", "mute_modal.indefinite": "Lõpmatu", "navigation_bar.about": "Teave", + "navigation_bar.advanced_interface": "Ava kohandatud veebiliides", "navigation_bar.blocks": "Blokeeritud kasutajad", "navigation_bar.bookmarks": "Järjehoidjad", "navigation_bar.community_timeline": "Kohalik ajajoon", @@ -444,6 +447,7 @@ "notifications.column_settings.update": "Muudatused:", "notifications.filter.all": "Kõik", "notifications.filter.boosts": "Jagamised", + "notifications.filter.favourites": "Lemmikud", "notifications.filter.follows": "Jälgib", "notifications.filter.mentions": "Mainimised", "notifications.filter.polls": "Küsitluse tulemused", @@ -594,6 +598,7 @@ "server_banner.server_stats": "Serveri statistika:", "sign_in_banner.create_account": "Loo konto", "sign_in_banner.sign_in": "Logi sisse", + "sign_in_banner.sso_redirect": "Sisene või registreeru", "sign_in_banner.text": "Logi sisse, et jälgida profiile või silte, märkida lemmikuks, jagada ja vastata postitustele. Võid suhelda ka mõne teise serveri konto kaudu.", "status.admin_account": "Ava @{name} moderaatorivaates", "status.admin_domain": "Ava {domain} modeereerimisliides", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5a7a97f9a9..140913f3d6 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -191,7 +191,6 @@ "conversation.open": "Ikusi elkarrizketa", "conversation.with": "Hauekin: {names}", "copypaste.copied": "Kopiatuta", - "copypaste.copy": "Kopiatu", "copypaste.copy_to_clipboard": "Kopiatu arbelera", "directory.federated": "Fedibertso ezagunekoak", "directory.local": "{domain} domeinukoak soilik", @@ -300,16 +299,19 @@ "home.column_settings.basic": "Oinarrizkoa", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", - "home.explore_prompt.body": "Zure hasierako jarioak jarraitzeko aukeratu dituzun traolen, jarraitzeko aukeratu duzun jendearen eta beraiek bultzatutako argitalpenen nahasketa bat edukiko du. Nahiko isila dirudi oraintxe, beraz, zergatik ez:", "home.explore_prompt.title": "Hau zure hasiera da Mastodonen.", "home.hide_announcements": "Ezkutatu iragarpenak", "home.show_announcements": "Erakutsi iragarpenak", "interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.", "interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.", "interaction_modal.description.reply": "Mastodon kontu batekin bidalketa honi erantzun diezaiokezu.", + "interaction_modal.login.action": "Itzuli hasierara", + "interaction_modal.login.prompt": "Zure zerbitzariko domeinua, adib. mastodon.eus", + "interaction_modal.no_account_yet": "Oraindik ez duzu izena eman Mastodonen?", "interaction_modal.on_another_server": "Beste zerbitzari batean", "interaction_modal.on_this_server": "Zerbitzari honetan", - "interaction_modal.preamble": "Mastodon deszentralizatua denez, zerbitzari honetan konturik ez badaukazu, beste Mastodon zerbitzari batean edo bateragarria den plataforma batean ostatatutako kontua erabil dezakezu.", + "interaction_modal.sign_in": "Ez duzu saioa hasita zerbitzari honetan. Non dago zure kontua ostatatua?", + "interaction_modal.sign_in_hint": "Aholkua: Izena eman duzun zerbitzaria da. Ez baduzu gogoratzen, begiratu ongietorri-mezua zure sarrera-ontzian. Baita ere, zure erabiltzaile-izen osoa sar dezakezu! (adib. @Mastodon@mastodon.social)", "interaction_modal.title.follow": "Jarraitu {name}", "interaction_modal.title.reblog": "Bultzatu {name}(r)en bidalketa", "interaction_modal.title.reply": "Erantzun {name}(r)en bidalketari", @@ -584,6 +586,7 @@ "server_banner.server_stats": "Zerbitzariaren estatistikak:", "sign_in_banner.create_account": "Sortu kontua", "sign_in_banner.sign_in": "Hasi saioa", + "sign_in_banner.sso_redirect": "Hasi saioa edo izena eman", "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/fa.json b/app/javascript/mastodon/locales/fa.json index 01ddb7565b..56f23009a3 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -190,7 +190,6 @@ "conversation.open": "دیدن گفتگو", "conversation.with": "با {names}", "copypaste.copied": "رونوشت شد", - "copypaste.copy": "رونوشت", "copypaste.copy_to_clipboard": "رونوشت به تخته‌گیره", "directory.federated": "از کارسازهای شناخته‌شده", "directory.local": "تنها از {domain}", @@ -302,7 +301,6 @@ "home.column_settings.basic": "پایه‌ای", "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", - "home.explore_prompt.body": "خوراک خانگیتان ترکیبی از فرسته‌ها از برچسب‌هایی که برای پی‌گیری گزیده‌اید، افرادی که پی می‌گیرید و فرسته‌هایی که تقویت می‌کنند را خواهد داشت. در حال حاضر بسیار ساکت است؛ پس چه طور است:", "home.explore_prompt.title": "این پایگاه خانگیتان در ماستودون است.", "home.hide_announcements": "نهفتن اعلامیه‌ها", "home.show_announcements": "نمایش اعلامیه‌ها", @@ -312,8 +310,6 @@ "interaction_modal.description.reply": "با حسابی روی ماستودون می‌توانید به این فرسته پاسخ دهید.", "interaction_modal.on_another_server": "روی کارسازی دیگر", "interaction_modal.on_this_server": "روی این کارساز", - "interaction_modal.other_server_instructions": "این نشانی را رونویسی و در زمینهٔ جست‌وجوی کارهٔ دلخواه یا رابط وب کارساز ماستودونتان جایگذاری کنید.", - "interaction_modal.preamble": "از آن‌جا که ماستودون نامتمرکز است، می‌توانید در صورت نداشتن حساب روی این کارساز، از حساب موجود خودتان که روی کارساز ماستودون یا بن‌سازهٔ سازگار دیگری میزبانی می‌شود استفاده کنید.", "interaction_modal.title.favourite": "فرسته‌های برگزیدهٔ {name}", "interaction_modal.title.follow": "پیگیری {name}", "interaction_modal.title.reblog": "تقویت فرستهٔ {name}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 814652e8be..6678a41e8b 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -52,7 +52,7 @@ "account.mute_notifications_short": "Mykistä ilmoitukset", "account.mute_short": "Mykistä", "account.muted": "Mykistetty", - "account.no_bio": "Ei kuvausta.", + "account.no_bio": "Kuvausta ei ole annettu.", "account.open_original_page": "Avaa alkuperäinen sivu", "account.posts": "viesti(t)", "account.posts_with_replies": "Viestit ja vastaukset", @@ -68,7 +68,7 @@ "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", - "account.unmute_notifications_short": "Poista ilmoitusten mykistys", + "account.unmute_notifications_short": "Kumoa 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ä", @@ -135,7 +135,7 @@ "community.column_settings.remote_only": "Vain etätilit", "compose.language.change": "Vaihda kieli", "compose.language.search": "Hae kieliä...", - "compose.published.body": "Julkaisu lähetetty.", + "compose.published.body": "Julkaisusi julkaistiin.", "compose.published.open": "Avaa", "compose_form.direct_message_warning_learn_more": "Lisätietoja", "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", @@ -150,7 +150,7 @@ "compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta äänestys sallimaan vain yksi valinta", "compose_form.publish": "Julkaise", - "compose_form.publish_form": "Julkaise", + "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}}", @@ -181,7 +181,7 @@ "confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta – mukaan lukien ne, joissa heidät mainitaan – sallien heidän yhä nähdä julkaisusi ja seurata sinua.", "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", - "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä uuden luonnoksen? Suosikit ja tehostukset menetään, ja alkuperäisen viestisi vastaukset jäävät orvoiksi.", + "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.", "confirmations.reply.confirm": "Vastaa", "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", "confirmations.unfollow.confirm": "Lopeta seuraaminen", @@ -191,7 +191,6 @@ "conversation.open": "Näytä keskustelu", "conversation.with": "{names} kanssa", "copypaste.copied": "Kopioitu", - "copypaste.copy": "Kopioi", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", "directory.federated": "Koko tunnettu fediverse", "directory.local": "Vain palvelusta {domain}", @@ -201,10 +200,10 @@ "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", "dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.", "dismissable_banner.dismiss": "Hylkää", - "dismissable_banner.explore_links": "Näistä uutisista puhuvat ihmiset juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat sosiaalisen verkon viestejä, jotka keräävät huomiota tänään. Uudemmat ja enemmän tehostetut viestit, ja suosikit rankataan korkeammalle.", + "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", + "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.", "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", - "dismissable_banner.public_timeline": "Nämä ovat viimeisimmät julkiset viestit sosiaalisen verkon ihmisiltä, joita {domain} käyttäjät seuraa.", + "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", @@ -232,11 +231,11 @@ "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!", "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.", - "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä viestiä suosikkeihinsa. Kun joku on lisännyt, näkyy hän tässä.", + "empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.", "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.", "empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.", "empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.", - "empty_column.home": "Kotisi aikajana on tyhjä! Seuraa lisää ihmisiä täyttääksesi sen. {suggestions}", + "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.", "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", @@ -298,24 +297,27 @@ "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen", "hashtag.follow": "Seuraa aihetunnistetta", "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", - "home.actions.go_to_explore": "Näe mitä tapahtuu", + "home.actions.go_to_explore": "Katso, mikä on suosittua", "home.actions.go_to_suggestions": "Löydä seurattavia käyttäjiä", "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä tehostukset", "home.column_settings.show_replies": "Näytä vastaukset", - "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Se näyttää tällä hetkellä varsin hiljaiselta, joten mitäpä jos:", - "home.explore_prompt.title": "Tämä on kotitukikohtasi Mastodonissa.", + "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:", + "home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.", "home.hide_announcements": "Piilota ilmoitukset", "home.show_announcements": "Näytä ilmoitukset", - "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä viestin suosikkeihisi näyttääksesi sen kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaisuutta varten.", + "interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.", "interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.", "interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.", "interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.", + "interaction_modal.login.action": "Palaa aloitussivulle", + "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", + "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", - "interaction_modal.other_server_instructions": "Kopioi ja liitä tämä URL-osoite käyttämäsi Mastodon-sovelluksen tai Mastodon-palvelimen verkkosivuston hakukenttään.", - "interaction_modal.preamble": "Koska Mastodon on hajautettu, voit käyttää toisen Mastodon-palvelimen tai yhteensopivan alustan ylläpitämää tiliäsi, jos sinulla ei ole tiliä tällä palvelimella.", - "interaction_modal.title.favourite": "Lisää käyttäjän {name} viesti suosikkeihin", + "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä", "interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin", @@ -331,7 +333,7 @@ "keyboard_shortcuts.direct": "avataksesi yksityisten mainintojen sarakkeen", "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", - "keyboard_shortcuts.favourite": "Lisää viesti suosikkeihin", + "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin", "keyboard_shortcuts.favourites": "Avaa suosikkilista", "keyboard_shortcuts.federated": "Avaa yleinen aikajana", "keyboard_shortcuts.heading": "Pikanäppäimet", @@ -369,7 +371,7 @@ "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", "lists.edit.submit": "Vaihda otsikko", - "lists.exclusive": "Piilota nämä viestit kotoasi", + "lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", "lists.replies_policy.followed": "Jokainen seurattu käyttäjä", @@ -386,7 +388,7 @@ "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", "mute_modal.indefinite": "Ikuisesti", "navigation_bar.about": "Tietoja", - "navigation_bar.advanced_interface": "Avaa edistyneessä käyttöliittymässä", + "navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", @@ -413,7 +415,7 @@ "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}", "notification.admin.sign_up": "{name} rekisteröityi", - "notification.favourite": "{name} lisäsi viestisi suosikkeihinsa", + "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.follow": "{name} seurasi sinua", "notification.follow_request": "{name} haluaa seurata sinua", "notification.mention": "{name} mainitsi sinut", @@ -461,8 +463,8 @@ "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": "Katso, mikä on trendikästä", - "onboarding.actions.go_to_home": "Siirry kotisyötteeseesi", + "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen", + "onboarding.actions.go_to_home": "Siirry kotisyötteeseen", "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.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!", @@ -471,17 +473,17 @@ "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 valmiina käyttöön. Näin hyödyt siitä eniten:", - "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin?", + "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:", + "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin ilman alkuunpääsyohjeistuksia?", "onboarding.start.title": "Olet tehnyt sen!", - "onboarding.steps.follow_people.body": "Kokoat oman syötteesi itse. Täytetään se kiinnostavilla henkilöillä.", - "onboarding.steps.follow_people.title": "Seurattu {count, plural, one {henkilö} other {# henkilöä}}", - "onboarding.steps.publish_status.body": "Sano tervehdys maailmalle.", + "onboarding.steps.follow_people.body": "Mastodon perustuu sinua kiinnostavien henkilöjen julkaisujen seuraamiseen.", + "onboarding.steps.follow_people.title": "Mukauta kotisyötteesi", + "onboarding.steps.publish_status.body": "Tervehdi maailmaa sanoin, kuvin tai äänestyksin {emoji}", "onboarding.steps.publish_status.title": "Laadi ensimmäinen julkaisusi", - "onboarding.steps.setup_profile.body": "Kun profiilisi on täytetty, muut ovat helpommin yhteyksissä sinun kanssasi.", - "onboarding.steps.setup_profile.title": "Muokkaa profiiliasi", - "onboarding.steps.share_profile.body": "Kerro ystävillesi, kuinka sinut löytää Mastodonista!", - "onboarding.steps.share_profile.title": "Jaa profiilisi", + "onboarding.steps.setup_profile.body": "Täydentämällä profiilisi tietoja tehostat vuorovaikutteisuutta.", + "onboarding.steps.setup_profile.title": "Mukauta profiiliasi", + "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", + "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", @@ -544,8 +546,8 @@ "report.placeholder": "Lisäkommentit", "report.reasons.dislike": "En pidä siitä", "report.reasons.dislike_description": "Et halua nähdä sitä", - "report.reasons.legal": "Se on laiton", - "report.reasons.legal_description": "Uskot sen rikkovan oman maasi tai palvelimen maan lakeja", + "report.reasons.legal": "Se on laitonta", + "report.reasons.legal_description": "Katsot sisällön rikkovan maasi tai palvelimen kotimaan lakeja", "report.reasons.other": "Jotain muuta", "report.reasons.other_description": "Ongelma ei sovi muihin kategorioihin", "report.reasons.spam": "Se on roskapostia", @@ -596,7 +598,8 @@ "server_banner.server_stats": "Palvelimen tilastot:", "sign_in_banner.create_account": "Luo tili", "sign_in_banner.sign_in": "Kirjaudu", - "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, lisätäksesi suosikkeja, jakaaksesi viestejä ja vastataksesi niihin. Voit myös vuorovaikuttaa myös eri palvelimilla olevilta tileiltäsi.", + "sign_in_banner.sso_redirect": "Kirjaudu sisään tai rekisteröidy", + "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot", "status.admin_status": "Avaa viesti moderointinäkymässä", @@ -613,15 +616,15 @@ "status.edited": "Muokattu {date}", "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}", "status.embed": "Upota", - "status.favourite": "Suosikki", + "status.favourite": "Merkitse suosikiksi", "status.filter": "Suodata tämä viesti", "status.filtered": "Suodatettu", "status.hide": "Piilota julkaisu", "status.history.created": "{name} luotu {date}", "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", - "status.media.open": "Avaa napsauttamalla", - "status.media.show": "Näytä napsauttamalla", + "status.media.open": "Napsauta avataksesi", + "status.media.show": "Napsauta näyttääksesi", "status.media_hidden": "Media piilotettu", "status.mention": "Mainitse @{name}", "status.more": "Lisää", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 87a47b3756..7a861d8c02 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -191,7 +191,6 @@ "conversation.open": "Vís samrøðu", "conversation.with": "Við {names}", "copypaste.copied": "Avritað", - "copypaste.copy": "Avrita", "copypaste.copy_to_clipboard": "Avrita til setiborðið", "directory.federated": "Frá tí kenda fediversinum", "directory.local": "Einans frá {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Grundleggjandi", "home.column_settings.show_reblogs": "Vís lyft", "home.column_settings.show_replies": "Vís svar", - "home.explore_prompt.body": "Heimarásin fer at hava eitt bland av postum frá frámerkjunum, sum tú hevur valt at fylgja, brúkarunum, tú hevur valt at fylgja, og postunum, sum tey stimbra. Tað sær rættiliga kvirt út í løtuni, so hvat við at:", + "home.explore_prompt.body": "Heimarásin fer at hava eitt bland av postum frá frámerkjunum, sum tú hevur valt at fylgja, brúkarunum, tú hevur valt at fylgja, og postunum, sum tey stimbra. Um tað kennist ov friðarligt, so kanst tú:", "home.explore_prompt.title": "Hetta er tín heimastøð í Mastodon.", "home.hide_announcements": "Fjal kunngerðir", "home.show_announcements": "Vís kunngerðir", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Við eini kontu á Mastodon kanst tú fylgja {name} fyri at síggja teirra postar á tíni heimarás.", "interaction_modal.description.reblog": "Við eini kontu á Mastodon kanst tú stimbra hendan postin og soleiðis deila hann við tínar fylgjarar.", "interaction_modal.description.reply": "Við eini kontu á Mastodon, so kanst tú svara hesum posti.", + "interaction_modal.login.action": "Tak meg heim", + "interaction_modal.login.prompt": "Navnaøki hjá tínum heimaambætara, t.d. mastodon.social", + "interaction_modal.no_account_yet": "Ikki á Mastodon?", "interaction_modal.on_another_server": "Á øðrum ambætara", "interaction_modal.on_this_server": "Á hesum ambætaranum", - "interaction_modal.other_server_instructions": "Kopiera og set hendan URLin inn í leititeigin í tíni yndis-Mastodon-app ella í vev-markamótið á tínum Mastodon-ambætara.", - "interaction_modal.preamble": "Av tí at Mastodon er desentraliserað, kanst tú brúka tína kontu frá einum øðrum Mastodon ambætara ella sambærligum palli, um tú ikki hevur eina kontu á hesum ambætaranum.", + "interaction_modal.sign_in": "Tú er ikki ritað/ur inn á hesum ambætaranum. Hvar er kontan hjá tær hýst?", + "interaction_modal.sign_in_hint": "Góð ráð: tað er heimasíðan, har tú lat teg skráseta. Minnist tú ikki, so kanst tú leita eftir vælkomin-teldubrævinum í innbakkanum hjá tær. Tú kanst eisini innlesa fulla brúkaranavnið hjá tær! (t.d. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Dáma postin hjá {name}", "interaction_modal.title.follow": "Fylg {name}", "interaction_modal.title.reblog": "Stimbra postin hjá {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Ambætarahagtøl:", "sign_in_banner.create_account": "Stovna kontu", "sign_in_banner.sign_in": "Rita inn", + "sign_in_banner.sso_redirect": "Rita inn ella Skráset teg", "sign_in_banner.text": "Innrita fyri at fylgja vangum og frámerkjum, dáma, deila og svara postum. Tú kanst eisini brúka kontuna til at samvirka á einum øðrum ambætara.", "status.admin_account": "Lat kjakleiðaramarkamót upp fyri @{name}", "status.admin_domain": "Lat umsjónarmarkamót upp fyri {domain}", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index 547d9a773f..a3627b5361 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -191,7 +191,6 @@ "conversation.open": "Afficher cette conversation", "conversation.with": "Avec {names}", "copypaste.copied": "Copié", - "copypaste.copy": "Copier", "copypaste.copy_to_clipboard": "Copier dans le presse-papiers", "directory.federated": "D'un fediverse connu", "directory.local": "De {domain} seulement", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_replies": "Afficher réponses", - "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de publications depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les publications qu'elles boostent. C'est plutôt calme en ce moment, alors que dites-vous de:", + "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :", "home.explore_prompt.title": "C'est chez vous dans Mastadon.", "home.hide_announcements": "Masquer les annonces", "home.show_announcements": "Afficher annonces", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs publications dans votre fil d'accueil.", "interaction_modal.description.reblog": "Avec un compte Mastodon, vous pouvez booster cette publication pour la partager avec vos propres abonné·e·s.", "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à cette publication.", + "interaction_modal.login.action": "Aller à mon serveur", + "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social", + "interaction_modal.no_account_yet": "Pas sur Mastodon ?", "interaction_modal.on_another_server": "Sur un autre serveur", "interaction_modal.on_this_server": "Sur ce serveur", - "interaction_modal.other_server_instructions": "Copiez et collez cet URL dans le champ de recherche de votre application Mastodon préférée ou de l'interface web de votre serveur Mastodon.", - "interaction_modal.preamble": "Puisque Mastodon est décentralisé, vous pouvez utiliser votre compte existant hébergé par un autre serveur Mastodon ou une plateforme compatible si vous n'avez pas de compte sur celui-ci.", + "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?", + "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Ajouter la publication de {name} aux favoris", "interaction_modal.title.follow": "Suivre {name}", "interaction_modal.title.reblog": "Booster la publication de {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Statistiques du serveur:", "sign_in_banner.create_account": "Créer un compte", "sign_in_banner.sign_in": "Se connecter", + "sign_in_banner.sso_redirect": "Se connecter ou s’inscrire", "sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des publications. Vous pouvez également interagir depuis votre compte sur un autre serveur.", "status.admin_account": "Ouvrir l’interface de modération pour @{name}", "status.admin_domain": "Ouvrir l’interface de modération pour {domain}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 00025b20a5..4757621d26 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -191,7 +191,6 @@ "conversation.open": "Afficher la conversation", "conversation.with": "Avec {names}", "copypaste.copied": "Copié", - "copypaste.copy": "Copier", "copypaste.copy_to_clipboard": "Copier dans le presse-papiers", "directory.federated": "Du fédiverse connu", "directory.local": "De {domain} seulement", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", - "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Cela a l'air assez calme en ce moment, alors comment :", + "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :", "home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.", "home.hide_announcements": "Masquer les annonces", "home.show_announcements": "Afficher les annonces", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs posts dans votre fil d'actualité.", "interaction_modal.description.reblog": "Avec un compte sur Mastodon, vous pouvez partager ce message pour le faire découvrir à vos propres abonné⋅e⋅s.", "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à ce message.", + "interaction_modal.login.action": "Aller à mon serveur", + "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social", + "interaction_modal.no_account_yet": "Pas sur Mastodon ?", "interaction_modal.on_another_server": "Sur un autre serveur", "interaction_modal.on_this_server": "Sur ce serveur", - "interaction_modal.other_server_instructions": "Copiez et collez cette URL dans le champ de recherche de votre application Mastodon préférée ou de l'interface web de votre serveur Mastodon.", - "interaction_modal.preamble": "Mastodon étant décentralisé, vous pouvez utiliser votre compte existant sur un autre serveur Mastodon, ou sur une autre plateforme compatible, si vous n'avez pas de compte ici.", + "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?", + "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Ajouter le message de {name} aux favoris", "interaction_modal.title.follow": "Suivre {name}", "interaction_modal.title.reblog": "Partager le message de {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Statistiques du serveur :", "sign_in_banner.create_account": "Créer un compte", "sign_in_banner.sign_in": "Se connecter", + "sign_in_banner.sso_redirect": "Se connecter ou s’inscrire", "sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des messages. Vous pouvez également interagir depuis votre compte sur un autre serveur.", "status.admin_account": "Ouvrir l’interface de modération pour @{name}", "status.admin_domain": "Ouvrir l’interface de modération pour {domain}", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index d6bfba9eec..299c155c4f 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -189,7 +189,6 @@ "conversation.open": "Petear toane", "conversation.with": "Mei {names}", "copypaste.copied": "Kopiearre", - "copypaste.copy": "Kopiearje", "copypaste.copy_to_clipboard": "Nei klamboerd kopiearje", "directory.federated": "Fediverse (wat bekend is)", "directory.local": "Allinnich fan {domain}", @@ -298,7 +297,6 @@ "home.column_settings.basic": "Algemien", "home.column_settings.show_reblogs": "Boosts toane", "home.column_settings.show_replies": "Reaksjes toane", - "home.explore_prompt.body": "Jo starttiidline befettet in miks fan berjochten mei hashtags dy’t jo keazen hawwe om te folgjen, fan minsken dy’t jo keazen hawwe om te folgjen en berjochten dy’t se booste. It sjocht der no frij rêstich út, dus wat tinke jo derfan om:", "home.explore_prompt.title": "Dit is jo thúsbasis op Mastodon.", "home.hide_announcements": "Meidielingen ferstopje", "home.show_announcements": "Meidielingen toane", @@ -307,7 +305,6 @@ "interaction_modal.description.reply": "Jo kinne mei in Mastodon-account op dit berjocht reagearje.", "interaction_modal.on_another_server": "Op een oare server", "interaction_modal.on_this_server": "Op dizze server", - "interaction_modal.preamble": "Mastodon is desintralisearre. Dêrom hawwe jo gjin account op dizze Mastodon-server nedich, wannear’t jo al in account op in oare Mastodon-server of kompatibel platfoarm hawwe.", "interaction_modal.title.follow": "{name} folgje", "interaction_modal.title.reblog": "Berjocht fan {name} booste", "interaction_modal.title.reply": "Op it berjocht fan {name} reagearje", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index d2a60ba0e0..37034b2465 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -170,7 +170,6 @@ "conversation.open": "Féach ar comhrá", "conversation.with": "Le {names}", "copypaste.copied": "Cóipeáilte", - "copypaste.copy": "Cóipeáil", "directory.federated": "Ó chomhchruinne aitheanta", "directory.local": "Ó {domain} amháin", "directory.new_arrivals": "Daoine atá tar éis teacht", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index a1bc89d217..f580caa966 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -187,7 +187,6 @@ "conversation.open": "Seall an còmhradh", "conversation.with": "Còmhla ri {names}", "copypaste.copied": "Chaidh lethbhreac dheth a dhèanamh", - "copypaste.copy": "Dèan lethbhreac", "copypaste.copy_to_clipboard": "Cuir lethbhreac dheth air an stòr-bhòrd", "directory.federated": "On cho-shaoghal aithnichte", "directory.local": "O {domain} a-mhàin", @@ -296,7 +295,6 @@ "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", - "home.explore_prompt.body": "Bidh measgachadh de phostaichean o na tagaichean hais a leanas tu, na daoine a leanas tu is na postaichean a bhrosnaicheas iad air do dhachaigh. Tha cùisean caran sàmhach an-dràsta, mar sin dheth seo moladh no dhà dhut:", "home.explore_prompt.title": "Seo do dhachaigh am broinn Mastodon.", "home.hide_announcements": "Falaich na brathan-fios", "home.show_announcements": "Seall na brathan-fios", @@ -305,7 +303,6 @@ "interaction_modal.description.reply": "Le cunntas air Mastodon, ’s urrainn dhut freagairt a chur dhan phost seo.", "interaction_modal.on_another_server": "Air frithealaiche eile", "interaction_modal.on_this_server": "Air an frithealaiche seo", - "interaction_modal.preamble": "Air sgàth ’s gu bheil Mastodon sgaoilte, ’s urrainn dhut cunntas a chleachdadh a tha ’ga òstadh le frithealaiche Mastodon no le ùrlar co-chòrdail eile mur eil cunntas agad air an fhear seo.", "interaction_modal.title.follow": "Lean {name}", "interaction_modal.title.reblog": "Brosnaich am post aig {name}", "interaction_modal.title.reply": "Freagair dhan phost aig {name}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3ecb3b8cbe..92ad9a3384 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -191,7 +191,6 @@ "conversation.open": "Ver conversa", "conversation.with": "Con {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar ao portapapeis", "directory.federated": "Do fediverso coñecido", "directory.local": "Só de {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", - "home.explore_prompt.body": "A túa cronoloxía de inicio vai ter unha mistura de publicacións procedentes dos cancelos que segues, das persoas que elexiches seguir e das publicacións que elas promoven. Hai poucas cousas polo de agora, que che parece se:", + "home.explore_prompt.body": "A túa cronoloxía de inicio vai ter unha mistura de publicacións procedentes dos cancelos que segues, das persoas que elexiches seguir e das publicacións que elas promoven. Se non tes moito que ler, podes probar a:", "home.explore_prompt.title": "Iste é o teu fogar en Mastodon.", "home.hide_announcements": "Agochar anuncios", "home.show_announcements": "Amosar anuncios", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Cunha conta en Mastodon, poderás seguir a {name} e recibir as súas publicacións na túa cronoloxía de inicio.", "interaction_modal.description.reblog": "Cunha conta en Mastodon, poderás promover esta publicación para compartila con quen te siga.", "interaction_modal.description.reply": "Cunha conta en Mastodon, poderás responder a esta publicación.", + "interaction_modal.login.action": "Lévame ao inicio", + "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social", + "interaction_modal.no_account_yet": "Aínda non tes unha conta?", "interaction_modal.on_another_server": "Nun servidor diferente", "interaction_modal.on_this_server": "Neste servidor", - "interaction_modal.other_server_instructions": "Copia e pega este URL na barra de busca da túa app Mastodon favorita ou na interface web do servidor Mastodon.", - "interaction_modal.preamble": "Como Mastodon é descentralizado, é posible usar unha conta existente noutro servidor Mastodon, ou nunha plataforma compatible, se non dispós dunha conta neste servidor.", + "interaction_modal.sign_in": "Non iniciaches sesión neste servidor. Onde creaches a túa conta?", + "interaction_modal.sign_in_hint": "Axuda: trátase da web na que te rexistraches. Se non a lembras, busca na caixa de correo a mensaxe de benvida. Tamén podes escribir o teu identificador completo! (ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Marcar coma favorita a publicación de {name}", "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Promover a publicación de {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Estatísticas do servidor:", "sign_in_banner.create_account": "Crear conta", "sign_in_banner.sign_in": "Iniciar sesión", + "sign_in_banner.sso_redirect": "Acceder ou Crear conta", "sign_in_banner.text": "Inicia sesión para seguir perfís ou cancelos, marcar como favorita e responder a publicacións. Tamén podes interactuar coa túa conta noutro servidor.", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_domain": "Abrir interface de moderación para {domain}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a86f2a124e..18324463ff 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -191,7 +191,6 @@ "conversation.open": "צפו בשיחה", "conversation.with": "עם {names}", "copypaste.copied": "הועתק", - "copypaste.copy": "העתקה", "copypaste.copy_to_clipboard": "העתקה ללוח הגזירים", "directory.federated": "מהפדרציה הידועה", "directory.local": "מ- {domain} בלבד", @@ -303,7 +302,7 @@ "home.column_settings.basic": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", - "home.explore_prompt.body": "פיד הנעקבים שלך יכיל תערובת של הודעות מהתגיות והאנשים שבחרת לעקיבה, וההודעות שהנעקבים בוחרים להדהד. נראה שדי שקט כאן כרגע אז מה לגבי:", + "home.explore_prompt.body": "זרם הבית שלך יכיל תערובת של הודעות מהתגיות והאנשים שבחרת לעקיבה, וההודעות שהנעקבים בוחרים להדהד. אם זה נראה שקט מדי כרגע אז מה לגבי:", "home.explore_prompt.title": "זהו בסיס הבית שלך בתוך מסטודון.", "home.hide_announcements": "הסתר הכרזות", "home.show_announcements": "הצג הכרזות", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "עם חשבון מסטודון, ניתן לעקוב אחרי {name} כדי לקבל את הםוסטים שלו/ה בפיד הבית.", "interaction_modal.description.reblog": "עם חשבון מסטודון, ניתן להדהד את החצרוץ ולשתף עם עוקבים.", "interaction_modal.description.reply": "עם חשבון מסטודון, ניתן לענות לחצרוץ.", + "interaction_modal.login.action": "קח אותי לדף הבית", + "interaction_modal.login.prompt": "שם השרת שלך, למשל mastodon.social", + "interaction_modal.no_account_yet": "עדיין לא במסטודון?", "interaction_modal.on_another_server": "על שרת אחר", "interaction_modal.on_this_server": "על שרת זה", - "interaction_modal.other_server_instructions": "ניתן להעתיק ולהדביק קישור זה לתוך שדה החיפוש באפליקציית מסטודון שבשימוש אצלך או בממשק הדפדפן של שרת המסטודון.", - "interaction_modal.preamble": "כיוון שמסטודון מבוזרת, תוכל/י להשתמש בחשבון שלך משרתי מסטודון או רשתות תואמות אחרות אם אין לך חשבון על שרת זה.", + "interaction_modal.sign_in": "אינך מחובר.ת לשרת זה. היכן מתאכסן החשבון שלך?", + "interaction_modal.sign_in_hint": "רמז: זהו האתר שבו נרשמת. אם שכחת, יש לך הודעת \"ברוכים הבאים\" בתיבת הדוא\"ל. ניתן גם לכתוב את שם המשתמש המלא (למשל @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "חיבוב החצרוץ של {name}", "interaction_modal.title.follow": "לעקוב אחרי {name}", "interaction_modal.title.reblog": "להדהד את החצרוץ של {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "סטטיסטיקות שרת:", "sign_in_banner.create_account": "יצירת חשבון", "sign_in_banner.sign_in": "התחברות", + "sign_in_banner.sso_redirect": "התחברות/הרשמה", "sign_in_banner.text": "יש להתחבר כדי לעקוב אחרי משתמשים או תגיות, לחבב, לשתף ולענות להודעות. ניתן גם לתקשר מהחשבון שלך עם שרת אחר.", "status.admin_account": "פתח/י ממשק ניהול עבור @{name}", "status.admin_domain": "פתיחת ממשק ניהול עבור {domain}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 9be65015b2..aea8e5e231 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -176,7 +176,6 @@ "conversation.open": "वार्तालाप देखें", "conversation.with": "{names} के साथ", "copypaste.copied": "कॉपी किआ जा चूका है", - "copypaste.copy": "कॉपी", "directory.federated": "ज्ञात फेडीवर्स से", "directory.local": "केवल {domain} से", "directory.new_arrivals": "नए आगंतुक", @@ -285,7 +284,6 @@ "interaction_modal.description.reply": "मास्टोडन पर एक अकाउंट के साथ, आप इस पोस्ट का जवाब दे सकते हैं।", "interaction_modal.on_another_server": "एक अलग सर्वर पर", "interaction_modal.on_this_server": "इस सर्वर पे", - "interaction_modal.preamble": "चूंकि मास्टोडन डेसेंट्रलीसेड है, यदि आपके पास इस पर कोई अकाउंट नहीं है, तो आप किसी अन्य मास्टोडन सर्वर या संगत प्लेटफ़ॉर्म द्वारा होस्ट किए गए अपने मौजूदा अकाउंट का उपयोग कर सकते हैं।", "interaction_modal.title.follow": "फॉलो {name}", "interaction_modal.title.reblog": "बूस्ट {name} की पोस्ट", "interaction_modal.title.reply": "{name} की पोस्ट पे रिप्लाई करें", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index c4a2cadef2..758f1b1e9a 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -191,7 +191,6 @@ "conversation.open": "Beszélgetés megtekintése", "conversation.with": "Velük: {names}", "copypaste.copied": "Másolva", - "copypaste.copy": "Másolás", "copypaste.copy_to_clipboard": "Másolás vágólapra", "directory.federated": "Az ismert fediverzumból", "directory.local": "Csak {domain} tartományból", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Általános", "home.column_settings.show_reblogs": "Megtolások megjelenítése", "home.column_settings.show_replies": "Válaszok megjelenítése", - "home.explore_prompt.body": "A saját hírfolyam a követésre kiválasztott hashtagek, a követésre kiválasztott személyek és az általuk népszerűsített bejegyzések keverékét tartalmazza. Ez most elég csendesnek tűnik, szóval mit szólnál ehhez:", + "home.explore_prompt.body": "A saját hírfolyam a követésre kiválasztott hashtagek, a követésre kiválasztott személyek és az általuk népszerűsített bejegyzések keverékét tartalmazza. Ha csendesnek tűnik, akkor megpróbálhatod ezeket:", "home.explore_prompt.title": "Ez a kezdőpontod a Mastodonon belül.", "home.hide_announcements": "Közlemények elrejtése", "home.show_announcements": "Közlemények megjelenítése", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Egy Mastodon fiókkal bekövetheted {name} fiókot, hogy lásd a bejegyzéseit a saját hírfolyamodban.", "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.", "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.", + "interaction_modal.login.action": "Vigyen haza", + "interaction_modal.login.prompt": "A saját kiszolgálód tartományneve, pl.: mastodon.social", + "interaction_modal.no_account_yet": "Nem vagy Mastodonon?", "interaction_modal.on_another_server": "Másik kiszolgálón", "interaction_modal.on_this_server": "Ezen a kiszolgálón", - "interaction_modal.other_server_instructions": "Másold és illeszd be ezt a webcímet a kedvenc Mastodon alkalmazásod vagy a Mastodon-kiszolgálód webes felületének keresőmezőjébe.", - "interaction_modal.preamble": "Mivel a Mastodon decentralizált, használhatod egy másik Mastodon kiszolgálón, vagy kompatibilis szolgáltatáson lévő fiókodat, ha ezen a kiszolgálón nincs fiókod.", + "interaction_modal.sign_in": "Nem vagy bejelentkezve ezen a kiszolgálón. Hol van a fiókod hosztolva?", + "interaction_modal.sign_in_hint": "Tip: Ez az a weboldal, ahol regisztráltál. Ha nem emlékszel, keresd meg az üdvözlőlevelet a bejövő leveleid között. Beírhatod a teljes felhasználónevedet is! (pl.: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "{name} bejegyzésének megjelölése kedvencként", "interaction_modal.title.follow": "{name} követése", "interaction_modal.title.reblog": "{name} bejegyzésének megtolása", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Kiszolgálóstatisztika:", "sign_in_banner.create_account": "Fiók létrehozása", "sign_in_banner.sign_in": "Bejelentkezés", + "sign_in_banner.sso_redirect": "Bejelentkezés vagy regisztráció", "sign_in_banner.text": "Jelentkezz be profilok vagy hashtagek követéséhez, kedvencnek jelöléséhez, bejegyzések megosztásához, megválaszolásához. A fiókodból más kiszolgálókon is kommunikálhatsz.", "status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz", "status.admin_domain": "Moderációs felület megnyitása {domain} esetében", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 5e4f16c150..03350bb723 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -157,7 +157,6 @@ "conversation.open": "Դիտել խօսակցութիւնը", "conversation.with": "{names}-ի հետ", "copypaste.copied": "Պատճէնուած է", - "copypaste.copy": "Պատճէնել", "directory.federated": "Յայտնի դաշնեզերքից", "directory.local": "{domain} տիրոյթից միայն", "directory.new_arrivals": "Նորեկներ", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index e898d8efd6..42fc9f98e1 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -181,7 +181,6 @@ "conversation.open": "Lihat percakapan", "conversation.with": "Dengan {names}", "copypaste.copied": "Disalin", - "copypaste.copy": "Salin", "copypaste.copy_to_clipboard": "Salin ke clipboard", "directory.federated": "Dari fediverse yang dikenal", "directory.local": "Dari {domain} saja", @@ -295,7 +294,6 @@ "interaction_modal.description.reply": "Dengan sebuah akun di Mastodon, Anda bisa menanggapi kiriman ini.", "interaction_modal.on_another_server": "Di server lain", "interaction_modal.on_this_server": "Di server ini", - "interaction_modal.preamble": "Karena Mastodon itu terdesentralisasi, Anda dapat menggunakan akun Anda yang sudah ada yang berada di server Mastodon lain atau platform yang kompatibel jika Anda tidak memiliki sebuah akun di sini.", "interaction_modal.title.follow": "Ikuti {name}", "interaction_modal.title.reblog": "Boost kiriman {name}", "interaction_modal.title.reply": "Balas ke kiriman {name}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 443c73e4ce..cfefd43992 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -160,7 +160,6 @@ "conversation.open": "Videz konverso", "conversation.with": "Kun {names}", "copypaste.copied": "Kopiesis", - "copypaste.copy": "Kopiez", "directory.federated": "De savita fediverso", "directory.local": "De {domain} nur", "directory.new_arrivals": "Nova venanti", @@ -252,7 +251,6 @@ "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.", "interaction_modal.on_another_server": "Che diferanta servilo", "interaction_modal.on_this_server": "Che ca servilo", - "interaction_modal.preamble": "Pro ke Mastodon esas necentraligita, on povas uzar vua havata konto quo hostigesas altra servilo di Mastodon o konciliebla metodo se on ne havas konto hike.", "interaction_modal.title.follow": "Sequez {name}", "interaction_modal.title.reblog": "Bustizez posto di {name}", "interaction_modal.title.reply": "Respondez posto di {name}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 38edc2b5e3..edd4ac30c2 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -191,7 +191,6 @@ "conversation.open": "Skoða samtal", "conversation.with": "Við {names}", "copypaste.copied": "Afritað", - "copypaste.copy": "Afrita", "copypaste.copy_to_clipboard": "Afrita á klippispjald", "directory.federated": "Frá samtengdum vefþjónum", "directory.local": "Einungis frá {domain}", @@ -303,7 +302,6 @@ "home.column_settings.basic": "Einfalt", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", - "home.explore_prompt.body": "Heimastreymið inniheldur blöndu af færslum frá þeim myllumerkjum sem þú hefur valið að fylgjast með, fólki sem þú hefur valið að fylgja, og færslunum sem þau endurbirta. Það lítur út fyrir að vera lítið að ske í augnablikinu, svo hvað með að:", "home.explore_prompt.title": "Þetta er bækistöð þín innan Loðfílsins.", "home.hide_announcements": "Fela auglýsingar", "home.show_announcements": "Birta auglýsingar", @@ -311,10 +309,12 @@ "interaction_modal.description.follow": "Með notandaaðgangi á Mastodon geturðu fylgst með {name} og fengið færslur frá viðkomandi í heimastreymið þitt.", "interaction_modal.description.reblog": "Með notandaaðgangi á Mastodon geturðu endurbirt þessa færslu til að deila henni með þeim sem fylgjast með þér.", "interaction_modal.description.reply": "Með notandaaðgangi á Mastodon geturðu svarað þessari færslu.", + "interaction_modal.login.action": "Fara á heimastreymið mitt", + "interaction_modal.login.prompt": "Lén heimanetþjónsins þíns, t.d. mastodon.social", + "interaction_modal.no_account_yet": "Ekki á Mastodon?", "interaction_modal.on_another_server": "Á öðrum netþjóni", "interaction_modal.on_this_server": "Á þessum netþjóni", - "interaction_modal.other_server_instructions": "Afritaðu og límdu þessa slóð inn í leitarreit Mastodon-forrits þess sem þú vilt nota eða í vefviðmóti Mastodon-netþjónsins þíns.", - "interaction_modal.preamble": "Þar sem Mastodon er dreifhýst kerfi, þá geturðu notað aðgang sem er hýstur á öðrum Mastodon-þjóni eða öðru samhæfðu kerfi, ef þú ert ekki með notandaaðgang á þessum hér.", + "interaction_modal.sign_in": "Þú ert ekki skráð/ur inn á þennan netþjón. Hvar er aðgangurinn þinn hýstur?", "interaction_modal.title.favourite": "Setja færsluna frá {name} í eftirlæti", "interaction_modal.title.follow": "Fylgjast með {name}", "interaction_modal.title.reblog": "Endurbirta færsluna frá {name}", @@ -596,6 +596,7 @@ "server_banner.server_stats": "Tölfræði þjóns:", "sign_in_banner.create_account": "Búa til notandaaðgang", "sign_in_banner.sign_in": "Skrá inn", + "sign_in_banner.sso_redirect": "Skrá inn eða nýskrá", "sign_in_banner.text": "Skráðu þig inn til að fylgjast með notendum eða myllumerkjum, svara færslum, deila þeim eða setja í eftirlæti. Þú getur einnig átt í samskiptum á aðgangnum þínum á öðrum netþjónum.", "status.admin_account": "Opna umsjónarviðmót fyrir @{name}", "status.admin_domain": "Opna umsjónarviðmót fyrir @{domain}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d78514073c..aedeb71785 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -191,7 +191,6 @@ "conversation.open": "Visualizza conversazione", "conversation.with": "Con {names}", "copypaste.copied": "Copiato", - "copypaste.copy": "Copia", "copypaste.copy_to_clipboard": "Copia negli Appunti", "directory.federated": "Da un fediverse noto", "directory.local": "Solo da {domain}", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Con un profilo di Mastodon, puoi seguire {name} per ricevere i suoi post nel feed della tua home.", "interaction_modal.description.reblog": "Con un profilo di Mastodon, puoi rebloggare questo post per condividerlo con i tuoi seguaci.", "interaction_modal.description.reply": "Con un profilo di Mastodon, puoi rispondere a questo post.", + "interaction_modal.login.action": "Torna all’inizio", + "interaction_modal.login.prompt": "Dominio del tuo server principale, ad esempio mastodon.social", + "interaction_modal.no_account_yet": "Non su Mastodon?", "interaction_modal.on_another_server": "Su un altro server", "interaction_modal.on_this_server": "Su questo server", - "interaction_modal.other_server_instructions": "Copia e incolla questo URL nel campo di ricerca della tua app Mastodon preferita o nell'interfaccia web del tuo server Mastodon.", - "interaction_modal.preamble": "Poiché Mastodon è decentralizzato, puoi utilizzare il tuo profilo esistente ospitato da un altro server di Mastodon on piattaforma compatibile, se non hai un profilo su questo.", + "interaction_modal.sign_in": "Non sei connesso a questo server. Dove è ospitato il tuo account?", + "interaction_modal.sign_in_hint": "Suggerimento: questo è il sito in cui ti sei registrato. Se non ti ricordi, cerca l'e-mail di benvenuto nella tua casella di posta. Puoi anche inserire il tuo nome utente completo! (es. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Contrassegna il post di {name} come preferito", "interaction_modal.title.follow": "Segui {name}", "interaction_modal.title.reblog": "Reblogga il post di {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Statistiche del server:", "sign_in_banner.create_account": "Crea un profilo", "sign_in_banner.sign_in": "Accedi", + "sign_in_banner.sso_redirect": "Accedi o Registrati", "sign_in_banner.text": "Accedi per seguire profili o hashtag, condividere, rispondere e aggiungere post ai preferiti. Puoi anche interagire dal tuo account su un server diverso.", "status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_domain": "Apri l'interfaccia di moderazione per {domain}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 91b7255ebd..4a2473c430 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -191,7 +191,6 @@ "conversation.open": "会話を表示", "conversation.with": "{names}", "copypaste.copied": "コピーしました", - "copypaste.copy": "コピー", "copypaste.copy_to_clipboard": "クリップボードにコピー", "directory.federated": "既知の連合より", "directory.local": "{domain} のみ", @@ -303,7 +302,7 @@ "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", - "home.explore_prompt.body": "ユーザーやハッシュタグをフォローすると、この「ホーム」タイムラインに投稿やブーストが流れるようになります。タイムラインをもう少し、にぎやかにしてみませんか?", + "home.explore_prompt.body": "ユーザーやハッシュタグをフォローすると、この「ホーム」タイムラインに投稿やブーストが流れるようになります。タイムラインをもう少しにぎやかにしてみませんか?", "home.explore_prompt.title": "Mastodonのタイムラインへようこそ。", "home.hide_announcements": "お知らせを隠す", "home.show_announcements": "お知らせを表示", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Mastodonのアカウントで{name}さんをフォローしてホームフィードで投稿を受け取れます。", "interaction_modal.description.reblog": "Mastodonのアカウントでこの投稿をブーストして自分のフォロワーに共有できます。", "interaction_modal.description.reply": "Mastodonのアカウントでこの投稿に反応できます。", + "interaction_modal.login.action": "サーバーに移動", + "interaction_modal.login.prompt": "登録したサーバーのドメイン (例: mastodon.social)", + "interaction_modal.no_account_yet": "Mastodonにアカウントがない場合は", "interaction_modal.on_another_server": "別のサーバー", "interaction_modal.on_this_server": "このサーバー", - "interaction_modal.other_server_instructions": "以下のURLをコピーして、Mastodon対応アプリや自分のサーバーの検索欄に貼り付けます。", - "interaction_modal.preamble": "Mastodonは分散化されているためアカウントを持っていなくても別のMastodonサーバーまたは互換性のあるプラットフォームでホストされているアカウントを使用できます。", + "interaction_modal.sign_in": "このサーバーにアカウントがなくても、ほかのサーバーや互換性のあるプラットフォームのアカウントを使用できます。", + "interaction_modal.sign_in_hint": "ワンポイント: ここでは自分のアカウントのドメインを入力します。うまくいかない場合はドメインまで含めた完全なユーザー名を入力してみてください (例: @Mastodon@mastodon.social)。ドメインやユーザー名は登録完了時のメールに記載されています。", "interaction_modal.title.favourite": "{name}さんの投稿をお気に入り登録", "interaction_modal.title.follow": "{name}さんをフォロー", "interaction_modal.title.reblog": "{name}さんの投稿をブースト", @@ -363,7 +365,7 @@ "lightbox.previous": "前", "limited_account_hint.action": "構わず表示する", "limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。", - "link_preview.author": "{name} が作成", + "link_preview.author": "{name}", "lists.account.add": "リストに追加", "lists.account.remove": "リストから外す", "lists.delete": "リストを削除", @@ -596,6 +598,7 @@ "server_banner.server_stats": "サーバーの情報", "sign_in_banner.create_account": "アカウント作成", "sign_in_banner.sign_in": "ログイン", + "sign_in_banner.sso_redirect": "ログインまたは登録", "sign_in_banner.text": "アカウントがあればユーザーやハッシュタグをフォローしたり、投稿のお気に入り登録やブースト、投稿への返信ができます。別のサーバーのユーザーとの交流も可能です。", "status.admin_account": "@{name}さんのモデレーション画面を開く", "status.admin_domain": "{domain}のモデレーション画面を開く", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index d13a80fa03..487fede3fe 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -135,7 +135,6 @@ "conversation.open": "Ssken adiwenni", "conversation.with": "Akked {names}", "copypaste.copied": "Yettwanɣel", - "copypaste.copy": "Nγel", "directory.federated": "Deg fedivers yettwasnen", "directory.local": "Seg {domain} kan", "directory.new_arrivals": "Imaynuten id yewḍen", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 9e4855efde..6416d695ee 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -136,7 +136,6 @@ "conversation.mark_as_read": "Оқылды деп белгіле", "conversation.open": "Пікірталасты қарау", "conversation.with": "{names} атты", - "copypaste.copy": "Көшіру", "directory.federated": "Танымал желіден", "directory.local": "Тек {domain} доменінен", "directory.new_arrivals": "Жаңадан келгендер", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index ea887b32dc..b32cf7c5fe 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -191,7 +191,6 @@ "conversation.open": "대화 보기", "conversation.with": "{names} 님과", "copypaste.copied": "복사됨", - "copypaste.copy": "복사", "copypaste.copy_to_clipboard": "클립보드에 복사", "directory.federated": "알려진 연합우주로부터", "directory.local": "{domain}에서만", @@ -202,7 +201,7 @@ "dismissable_banner.community_timeline": "여기 있는 것들은 계정이 {domain}에 있는 사람들의 최근 공개 게시물들입니다.", "dismissable_banner.dismiss": "지우기", "dismissable_banner.explore_links": "이 소식들은 오늘 소셜 웹에서 가장 많이 공유된 내용들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.", - "dismissable_banner.explore_statuses": "이 게시물들은 오늘 소셜 웹에서 호응을 얻고 있는 것들입니다. 부스트와 관심을 받는 새로운 글들이 높은 순위가 됩니다", + "dismissable_banner.explore_statuses": "오늘 소셜 웹에서 호응을 얻고 있는게시물입니다. 부스트와 좋아요를 받는 새로운 게시물이 높은 순위가 됩니다", "dismissable_banner.explore_tags": "이 해시태그들은 이 서버와 분산화된 네트워크의 다른 서버에서 사람들의 인기를 끌고 있는 것들입니다.", "dismissable_banner.public_timeline": "이것들은 {domain}에 있는 사람들이 팔로우한 사람들의 최신 게시물들입니다.", "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.", @@ -231,8 +230,8 @@ "empty_column.direct": "개인적인 멘션이 없습니다. 보내거나 받으면 여기에 표시됩니다.", "empty_column.domain_blocks": "아직 차단한 도메인이 없습니다.", "empty_column.explore_statuses": "아직 유행하는 것이 없습니다. 나중에 다시 확인하세요!", - "empty_column.favourited_statuses": "아직 마음에 들어한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.", - "empty_column.favourites": "아직 아무도 이 게시물을 마음에 들어하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.", + "empty_column.favourited_statuses": "아직 좋아요한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.", + "empty_column.favourites": "아직 아무도 이 게시물을 좋아요를 하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.", "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.", "empty_column.followed_tags": "아직 아무 해시태그도 팔로우하고 있지 않습니다. 해시태그를 팔로우하면, 여기에 표시됩니다.", "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.", @@ -303,19 +302,22 @@ "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", - "home.explore_prompt.body": "내 홈 피드는 내가 팔로우한 해시태그를 가진 게시물, 내가 팔로우한 사람들의 게시물, 그들이 부스트한 게시물들이 다같이 나타납니다. 아직은 조용하네요, 이렇게 해보는 게 어떠신가요:", + "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:", "home.explore_prompt.title": "이것은 마스토돈에 있는 내 본거지입니다.", "home.hide_announcements": "공지사항 숨기기", "home.show_announcements": "공지사항 보기", - "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 마음에 들어 하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", + "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", "interaction_modal.description.reblog": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.", "interaction_modal.description.reply": "마스토돈 계정을 통해, 이 게시물에 응답할 수 있습니다.", + "interaction_modal.login.action": "홈 서버로 가기", + "interaction_modal.login.prompt": "내 홈 서버의 도메인. 예시: mastodon.social", + "interaction_modal.no_account_yet": "Mastodon 계정이 없나요?", "interaction_modal.on_another_server": "다른 서버에", "interaction_modal.on_this_server": "이 서버에서", - "interaction_modal.other_server_instructions": "주로 이용하는 마스토돈 앱이나 마스토돈 서버의 웹 인터페이스 내 검색 영역에 이 URL을 복사 및 붙여넣기 하세요.", - "interaction_modal.preamble": "마스토돈은 분산화 되어 있기 때문에, 이곳에 계정이 없더라도 다른 곳에서 운영되는 마스토돈 서버나 호환 되는 플랫폼에 있는 계정을 사용할 수 있습니다.", - "interaction_modal.title.favourite": "{name} 님의 게시물을 마음에 들어하기", + "interaction_modal.sign_in": "이 서버에 로그인되어 있지 않습니다. 계정이 어디에 속해 있나요?", + "interaction_modal.sign_in_hint": "팁: 여러분이 가입한 사이트입니다. 만약 기억이 나지 않는다면 가입환영 이메일을 찾아보는 것도 좋습니다. 전체 사용자이름(예: @mastodon@mastodon.social)을 넣어도 됩니다!", + "interaction_modal.title.favourite": "{name} 님의 게시물을 좋아요하기", "interaction_modal.title.follow": "{name} 님을 팔로우", "interaction_modal.title.reblog": "{name} 님의 게시물을 부스트", "interaction_modal.title.reply": "{name} 님의 게시물에 답글", @@ -413,7 +415,7 @@ "not_signed_in_indicator.not_signed_in": "이 정보에 접근하려면 로그인을 해야 합니다.", "notification.admin.report": "{name} 님이 {target}를 신고했습니다", "notification.admin.sign_up": "{name} 님이 가입했습니다", - "notification.favourite": "{name} 님이 내 게시물을 마음에 들어했습니다", + "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.mention": "{name} 님의 멘션", @@ -512,7 +514,7 @@ "privacy_policy.title": "개인정보처리방침", "refresh": "새로고침", "regeneration_indicator.label": "불러오는 중…", - "regeneration_indicator.sublabel": "당신의 홈 피드가 준비되는 중입니다!", + "regeneration_indicator.sublabel": "홈 피드를 준비하고 있습니다!", "relative_time.days": "{number}일 전", "relative_time.full.days": "{number} 일 전", "relative_time.full.hours": "{number} 시간 전", @@ -596,6 +598,7 @@ "server_banner.server_stats": "서버 통계:", "sign_in_banner.create_account": "계정 생성", "sign_in_banner.sign_in": "로그인", + "sign_in_banner.sso_redirect": "로그인 또는 가입하기", "sign_in_banner.text": "로그인을 통해 프로필이나 해시태그를 팔로우하거나 마음에 들어하거나 공유하고 답글을 달 수 있습니다. 다른 서버에 있는 본인의 계정을 통해 참여할 수도 있습니다.", "status.admin_account": "@{name}에 대한 중재 화면 열기", "status.admin_domain": "{domain}에 대한 중재 화면 열기", @@ -612,7 +615,7 @@ "status.edit": "수정", "status.edited": "{date}에 수정함", "status.edited_x_times": "{count}번 수정됨", - "status.embed": "공유하기", + "status.embed": "임베드", "status.favourite": "좋아요", "status.filter": "이 게시물을 필터", "status.filtered": "필터로 걸러짐", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index bacd599102..24f01c6b1a 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -176,7 +176,6 @@ "conversation.open": "Axaftinê nîşan bide", "conversation.with": "Bi {names} re", "copypaste.copied": "Hate jêgirtin", - "copypaste.copy": "Jê bigire", "directory.federated": "Ji fediversên naskirî", "directory.local": "Tenê ji {domain}", "directory.new_arrivals": "Kesên ku nû hatine", @@ -281,7 +280,6 @@ "interaction_modal.description.reply": "Bi ajimêrekê li ser Mastodon, tu dikarî bersiva vê şandiyê bidî.", "interaction_modal.on_another_server": "Li ser rajekareke cuda", "interaction_modal.on_this_server": "Li ser ev rajekar", - "interaction_modal.preamble": "Ji ber ku Mastodon nenavendî ye, tu dikarî ajimêrê xwe ya heyî ku ji aliyê rajekarek din a Mastodon an platformek lihevhatî ve hatî pêşkêşkirin bi kar bînî ku ajimêrê te li ser vê yekê tune be.", "interaction_modal.title.follow": "{name} bişopîne", "interaction_modal.title.reblog": "Şandiyê {name} bilind bike", "interaction_modal.title.reply": "Bersivê bide şandiyê {name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3e96087281..cff2aa4adf 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -177,7 +177,6 @@ "conversation.open": "Skatīt sarunu", "conversation.with": "Ar {names}", "copypaste.copied": "Nokopēts", - "copypaste.copy": "Kopēt", "copypaste.copy_to_clipboard": "Kopēt uz starpliktuvi", "directory.federated": "No pazīstamas federācijas", "directory.local": "Tikai no {domain}", @@ -287,7 +286,6 @@ "interaction_modal.description.reply": "Ar Mastodon kontu tu vari atbildēt uz šo ziņu.", "interaction_modal.on_another_server": "Citā serverī", "interaction_modal.on_this_server": "Šajā serverī", - "interaction_modal.preamble": "Tā kā Mastodon ir decentralizēts, tu vari izmantot savu esošo kontu, ko mitina cits Mastodon serveris vai saderīga platforma, ja tev nav konta šajā serverī.", "interaction_modal.title.follow": "Sekot {name}", "interaction_modal.title.reblog": "Pastiprināt {name} ierakstu", "interaction_modal.title.reply": "Atbildēt uz {name} ziņu", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 630d5c430e..dfc9f98cfe 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -136,7 +136,6 @@ "conversation.open": "സംഭാഷണം കാണുക", "conversation.with": "{names} കൂടെ", "copypaste.copied": "പകർത്തി", - "copypaste.copy": "പകര്‍ത്തുക", "directory.federated": "അറിയപ്പെടുന്ന ഫെഡിവേഴ്‌സ്ൽ നിന്ന്", "directory.local": "{domain} ൽ നിന്ന് മാത്രം", "directory.new_arrivals": "പുതിയ വരവുകൾ", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 126df3a7e8..abb2f474d6 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -137,7 +137,6 @@ "interaction_modal.description.reply": "मॅस्टोडॉनवरील खात्यासह, तुम्ही या पोस्टला प्रतिसाद देऊ शकता.", "interaction_modal.on_another_server": "वेगळ्या सर्व्हरवर", "interaction_modal.on_this_server": "या सर्व्हरवर", - "interaction_modal.preamble": "मास्टोडॉन विकेंद्रित असल्याने, तुमचे खाते नसेल तर तुम्ही दुसरे मॅस्टोडॉन सर्व्हर किंवा सुसंगत प्लॅटफॉर्मद्वारे होस्ट केलेले तुमचे विद्यमान खाते वापरू शकता.", "interaction_modal.title.follow": "{name} चे अनुसरण करा", "interaction_modal.title.reblog": "{name} ची पोस्ट बूस्ट करा", "interaction_modal.title.reply": "{name} च्या पोस्टला उत्तर द्या", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index a1f1d61f3d..653396cf5c 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -173,7 +173,6 @@ "conversation.open": "Lihat perbualan", "conversation.with": "Dengan {names}", "copypaste.copied": "Disalin", - "copypaste.copy": "Salin", "directory.federated": "Dari fediverse yang diketahui", "directory.local": "Dari {domain} sahaja", "directory.new_arrivals": "Ketibaan baharu", @@ -280,7 +279,6 @@ "interaction_modal.description.reply": "Dengan akaun pada Mastodon, anda boleh membalas kepada hantaran ini.", "interaction_modal.on_another_server": "Di pelayan lain", "interaction_modal.on_this_server": "Pada pelayan ini", - "interaction_modal.preamble": "Oleh sebab Mastodon terpencar, anda boleh menggunakan akaun sedia ada anda yang dihos oleh pelayan Mastodon lain atau platform yang serasi jika anda tidak mempunyai akaun pada platform ini.", "interaction_modal.title.follow": "Ikuti {name}", "interaction_modal.title.reblog": "Galak hantaran {name}", "interaction_modal.title.reply": "Balas siaran {name}", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index fadc89a7bd..cd3858ae72 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -1,9 +1,9 @@ { - "about.blocks": "ထိန်းချုပ်ထားသော ဆာဗာများ", + "about.blocks": "ထိန်းချုပ်မှုရှိသော ဆာဗာများ", "about.contact": "ဆက်သွယ်ရန်:", - "about.disclaimer": "Mastodon သည် အခမဲ့ဖြစ်ပြီး open-source software နှင့် Mastodon gGmbH ၏ ကုန်အမှတ်တံဆိပ်တစ်ခုဖြစ်သည်။", + "about.disclaimer": "Mastodon သည် အခမဲ့ဖြစ်ပြီး open-source software နှင့် Mastodon gGmbH ၏ ကုန်အမှတ်တံဆိပ်တစ်ခုဖြစ်သည်။.", "about.domain_blocks.no_reason_available": "အကြောင်းပြချက်မရှိပါ", - "about.domain_blocks.preamble": "Mastodon သည် ယေဘူယျအားဖြင့် သင့်အား အစုအဝေးရှိ အခြားဆာဗာများမှ အသုံးပြုသူများထံမှ အကြောင်းအရာများကို ကြည့်ရှုပြီး အပြန်အလှန် တုံ့ပြန်နိုင်စေပါသည်။ ဤအရာများသည် ဤအထူးဆာဗာတွင် ပြုလုပ်ထားသော ခြွင်းချက်ဖြစ်သည်။", + "about.domain_blocks.preamble": "Mastodon သည် ယေဘုယျအားဖြင့် fediverse ရှိ အခြား​ဆာဗာ အသုံးပြုသူများထံမှ အကြောင်းအရာများကို ကြည့်ရှုနိုင်သည့်အပြင် အပြန်အလှန်တုံ့ပြန်နိုင်စေပါသည်။ ဤသည်တို့မှာ သီးခြားဆာဗာများအတွက် ပြုလုပ်ထားသောအရာများဖြစ်သည်။", "about.domain_blocks.silenced.explanation": "ရှင်းရှင်းလင်းလင်း ရှာကြည့်ခြင်း သို့မဟုတ် လိုက်ကြည့်ခြင်းဖြင့် ၎င်းကို ရွေးချယ်ခြင်းမှလွဲ၍ ဤဆာဗာမှ ပရိုဖိုင်များနှင့် အကြောင်းအရာများကို ယေဘုယျအားဖြင့် သင်သည် မမြင်ရပါ။", "about.domain_blocks.silenced.title": "ကန့်သတ်ထားသော", "about.domain_blocks.suspended.explanation": "ဤဆာဗာမှ ဒေတာများကို စီမံဆောင်ရွက်ခြင်း၊ သိမ်းဆည်းခြင်း သို့မဟုတ် ဖလှယ်ခြင်း မပြုဘဲ၊ ဤဆာဗာမှ အသုံးပြုသူများနှင့် အပြန်အလှန် ဆက်သွယ်မှု သို့မဟုတ် ဆက်သွယ်မှုတို့ကို မဖြစ်နိုင်အောင် ပြုလုပ်ပေးမည်မဟုတ်ပါ။", @@ -31,7 +31,7 @@ "account.featured_tags.last_status_never": "ပို့စ်တင်ထားခြင်းမရှိပါ", "account.featured_tags.title": "ဖော်ပြထားသောဟက်ရှ်တက်ခ်များ", "account.follow": "စောင့်ကြည့်", - "account.followers": "စောင့်ကြည့်သူ", + "account.followers": "စောင့်ကြည့်သူများ", "account.followers.empty": "ဤသူကို စောင့်ကြည့်သူ မရှိသေးပါ။", "account.followers_counter": "{count, plural, one {စောင့်ကြည့်သူ {counter}} other {စောင့်ကြည့်သူများ {counter}}}", "account.following": "စောင့်ကြည့်နေသည်", @@ -181,6 +181,7 @@ "confirmations.mute.explanation": "၎င်းသည် ၎င်းတို့ထံမှ ပို့စ်များနှင့် ၎င်းတို့ကို ဖော်ပြထားသော ပို့စ်များကို ဖျောက်ထားမည်ဖြစ်ပြီး၊ သို့သော် ၎င်းတို့သည် သင့်ပို့စ်များကို မြင်နိုင်ပြီး သင့်အား လိုက်ကြည့်နိုင်စေမည်ဖြစ်သည်။", "confirmations.mute.message": "{name} ကို မမြင်လိုသည်မှာ သေချာပါသလား။ ", "confirmations.redraft.confirm": "ဖျက်ပြီး ပြန်လည်ရေးမည်။", + "confirmations.redraft.message": "သင် ဒီပိုစ့်ကိုဖျက်ပြီး ပြန်တည်းဖြတ်မှာ သေချာပြီလား။ ကြယ်ပွင့်​တွေ နဲ့ ပြန်မျှ​ဝေမှု​တွေကိုဆုံးရှုံးမည်။မူရင်းပို့စ်ဆီကို ပြန်စာ​တွေမှာလည်း​ \nပိုစ့်ကို​တွေ့ရမည်မဟုတ်​တော့ပါ။.", "confirmations.reply.confirm": "စာပြန်မည်", "confirmations.reply.message": "စာပြန်လျှင်ယခင်စာများကိုအလိုအလျောက်ပျက်သွားစေမည်။ ဆက်လက်လုပ်ဆောင်မည်လား?", "confirmations.unfollow.confirm": "စောင့်ကြည့်ခြင်းအား ပယ်ဖျက်မည်", @@ -190,7 +191,6 @@ "conversation.open": "Conversation ကိုကြည့်မည်", "conversation.with": "{အမည်များ} ဖြင့်", "copypaste.copied": "ကူယူပြီးပါပြီ", - "copypaste.copy": "ကူးယူပါ", "copypaste.copy_to_clipboard": "ကလစ်ဘုတ်သို့ ကူးပါ", "directory.federated": "သင် သိသော ဖက်ဒီမှ", "directory.local": "{domain} မှသာလျှင်\n", @@ -201,6 +201,7 @@ "dismissable_banner.community_timeline": "အကောင့်များမှ လတ်တလောတင်ထားသည့်အများမြင်ပို့စ်များမှာ {domain} တွင် တင်ထားသောပို့စ်များဖြစ်သည်။", "dismissable_banner.dismiss": "ပယ်ရန်", "dismissable_banner.explore_links": "ဤသတင်းများကို ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများမှ လူများက ပြောဆိုနေကြပါသည်။", + "dismissable_banner.explore_statuses": "ဒီ​နေ့အတွက် လူမှုကွန်ရက်​ပေါ်မှာ စိတ်ဝင်စားမှူများ​နေတဲ့ ပို့စ်​တွေရှိပါတယ်။ပြန်မျှ​ဝေမှုနဲ့ကြယ်ပွင့်များ တဲ့ပိုစ့်အသစ်​တွေကို ပိုမြင်ရမှာပါ။.", "dismissable_banner.explore_tags": "ဤ hashtag များသည် ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများပေါ်ရှိ လူများကြားတွင် ဆွဲဆောင်မှုရှိလာပါသည်", "dismissable_banner.public_timeline": "ဤအရာများသည် {domain} ရှိလူများ လိုက်နာသော လူမှုဝဘ်ပေါ်ရှိ လူများထံမှ လတ်တလော အများမြင်ပို့စ်များဖြစ်သည်။", "embed.instructions": "Embed this status on your website by copying the code below.", @@ -301,7 +302,7 @@ "home.column_settings.basic": "အခြေခံ", "home.column_settings.show_reblogs": "Boost များကို ပြပါ", "home.column_settings.show_replies": "ပြန်စာများကို ပြပါ", - "home.explore_prompt.body": "သင့်ပင်မစာမျက်နှာတွင် သင်စောင့်ကြည့်ရန်ရွေးချယ်ထားသော hashtag များမှ ပို့စ်များ၊ စောင့်ကြည့်ထားသူများနှင့် ၎င်းတို့ boost လုပ်ထားသော ပို့စ်များ ပြထားပါလိမ့်မည်။ ယခု ပင်မစာမျက်နှာမှာ ငြိမ်သက်နေပါသည်။", + "home.explore_prompt.body": "သင့်ရဲ့သတင်းစဥ် မှာ သင် စောင့်ကြည့်​နေတယ့် ခေါင်းစဥ်​တွေ၊သင်​စောင့်ကြည့်​နေတယ့်အ​ကောင့်​တွေ နဲ့ အဆိုပါ အ​ကောင့်​တွေပြန်မျှ​ဝေထားတယ့် ပိုစ့်​တွေကို မြင်ရမှာပါ။:", "home.explore_prompt.title": "ဤသည်မှာ Mastodon ရှိ သင့်ပင်မစာမျက်နှာဖြစ်သည်။", "home.hide_announcements": "ကြေညာချက်များကို ဖျောက်ပါ", "home.show_announcements": "ကြေညာချက်များကို ပြပါ", @@ -309,10 +310,13 @@ "interaction_modal.description.follow": "Mastodon အကောင့်ဖြင့် သင်၏ ပင်မစာမျက်နှာတွင် ၎င်းတို့၏ ပို့စ်များကို ရရှိရန်အတွက် {name} ကို စောင့်ကြည့်နိုင်ပါသည်။", "interaction_modal.description.reblog": "Mastodon အကောင့်တစ်ခုဖြင့် သင်၏စောင့်ကြည့်သူများကို မျှဝေရန်အတွက် ဤပို့စ်ကို Boost လုပ်ပါ။", "interaction_modal.description.reply": "Mastodon အကောင့်တစ်ခုဖြင့် သင် ဤပို့စ်ကို တုံ့ပြန်နိုင်ပါသည်။", + "interaction_modal.login.action": "ပင်မစာမျက်နှာသို့", + "interaction_modal.login.prompt": "သင့်ပင်မဆာဗာ၏ ဒိုမိန်း၊ ဥပမာ၊ mastodon.social", + "interaction_modal.no_account_yet": "Mastodon မှာ မဟုတ်ဘူးလား။", "interaction_modal.on_another_server": "တခြားဆာဗာပေါ်တွင်", "interaction_modal.on_this_server": "ဤဆာဗာတွင်", - "interaction_modal.other_server_instructions": "သင်အကြိုက်ဆုံး Mastodon အက်ပ် သို့မဟုတ် သင့် Mastodon ဆာဗာ၏ ဝဘ်ရှိ ရှာဖွေမှုနေရာတွင် ဤ URL ကို ကူးယူပြီး ထည့်ပါ။", - "interaction_modal.preamble": "Mastodon မှာ ဗဟိုချုပ်ကိုင်မှု မရှိခြင်းကြောင့် ဤတစ်ခုအတွက် သင့်တွင်အကောင့်မရှိပါက အခြား Mastodon ဆာဗာ သို့မဟုတ် အဆင်ပြေသောပလက်ဖောင်းတွင် ရှိသော သင့်လက်ရှိအကောင့်ဖြင့် အသုံးပြုနိုင်ပါသည်။", + "interaction_modal.sign_in": "သင်သည် ဤဆာဗာတွင် လော့ဂ်အင်မဝင်ပါ။ သင့်အကောင့်ကို မည်သည့်ဆာဗာတွင် ဖွင့်ထားပါသလဲ။", + "interaction_modal.sign_in_hint": "အကြံပြုချက် - ၎င်းသည် သင် အကောင့်ဖွင့်ထားသည့် ဝဘ်ဆိုက်ဖြစ်သည်။ မမှတ်မိပါက သင့် ဝင်စာပုံးရှိ welcome e-mail ကို ရှာပါ။ သင့်အသုံးပြုသူအမည်အပြည့်အစုံကိုလည်း ထည့်သွင်းနိုင်သည်။ (ဥပမာ @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favorite {name} ၏ ပို့စ်", "interaction_modal.title.follow": "{name} ကို စောင့်ကြည့်မယ်", "interaction_modal.title.reblog": "{name} ၏ ပို့စ်ကို Boost လုပ်ပါ", @@ -361,6 +365,7 @@ "lightbox.previous": "ရှေ့သို့", "limited_account_hint.action": "ဘာပဲဖြစ်ဖြစ် ပရိုဖိုင်ကို ပြပါ", "limited_account_hint.title": "ဤပရိုဖိုင်ကို {domain} ၏ စိစစ်သူများမှ ဖျောက်ထားသည်။", + "link_preview.author": "{name} ဖြင့်", "lists.account.add": "စာရင်းထဲသို့ထည့်ပါ", "lists.account.remove": "စာရင်းမှ ဖယ်ရှားလိုက်ပါ။", "lists.delete": "စာရင်းကိုဖျက်ပါ", @@ -593,6 +598,8 @@ "server_banner.server_stats": "ဆာဗာအား လက်ရှိအသုံးပြုသူများ -", "sign_in_banner.create_account": "အကောင့်ဖန်တီးမည်", "sign_in_banner.sign_in": "အကောင့်ဝင်မည်", + "sign_in_banner.sso_redirect": "အကောင့်ဝင်ပါ သို့မဟုတ် မှတ်ပုံတင်ပါ", + "sign_in_banner.text": "ပရိုဖိုင်များ သို့မဟုတ် hashtag များ၊ favorite၊ ပို့စ်မျှဝေမှုများနှင့် ပြန်ကြားစာများအသုံးပြုရန်အတွက် အကောင့်ဝင်ပါ။ အခြားဆာဗာပေါ်ရှိ သင့်အကောင့်မှလည်း အပြန်အလှန်ဖလှယ်နိုင်ပါသည်။", "status.admin_account": "@{name} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ", "status.admin_domain": "{domain} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ", "status.admin_status": "Open this status in the moderation interface", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index d09d472766..655afd5ed0 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -191,7 +191,6 @@ "conversation.open": "Gesprek tonen", "conversation.with": "Met {names}", "copypaste.copied": "Gekopieerd", - "copypaste.copy": "Kopiëren", "copypaste.copy_to_clipboard": "Naar klembord kopiëren", "directory.federated": "Fediverse (wat bekend is)", "directory.local": "Alleen {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", - "home.explore_prompt.body": "Jouw starttijdlijn bevat een mix van berichten met hashtags die je hebt gekozen om te volgen, van mensen die je hebt gekozen om te volgen en berichten die ze boosten. Het ziet er nu vrij stil uit, dus wat dacht je ervan om:", + "home.explore_prompt.body": "Jouw starttijdlijn bevat een mix van berichten met hashtags die je volgt, van accounts die je volgt en van berichten die deze accounts boosten. Wanneer je dit te stil vind, kun je:", "home.explore_prompt.title": "Dit is jouw thuisbasis op Mastodon.", "home.hide_announcements": "Mededelingen verbergen", "home.show_announcements": "Mededelingen tonen", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Je kunt met een Mastodon-account {name} volgen, om zo diens berichten op jouw starttijdlijn te ontvangen.", "interaction_modal.description.reblog": "Je kunt met een Mastodon-account dit bericht boosten, om het zo met jouw volgers te delen.", "interaction_modal.description.reply": "Je kunt met een Mastodon-account op dit bericht reageren.", + "interaction_modal.login.action": "Ga naar start", + "interaction_modal.login.prompt": "Domein van jouw server, bv. mastodon.social", + "interaction_modal.no_account_yet": "Niet op Mastodon?", "interaction_modal.on_another_server": "Op een andere server", "interaction_modal.on_this_server": "Op deze server", - "interaction_modal.other_server_instructions": "Kopieer en plak eenvoudig deze URL in het zoekveld van de door jou gebruikte Mastodon-app of op de website van de Mastodon-server waarop je bent ingelogd.", - "interaction_modal.preamble": "Mastodon is gedecentraliseerd. Daarom heb je geen account op deze Mastodon-server nodig, wanneer je al een account op een andere Mastodon-server of compatibel platform hebt.", + "interaction_modal.sign_in": "Je bent niet op deze server ingelogd. Op welke server bevindt zich jouw account?", + "interaction_modal.sign_in_hint": "Tip: Dat is de website waarop je je hebt geregistreerd. Wanneer je dit bent vergeten kun je naar de welkomstmail zoeken in je inbox. Je kunt ook je volledige gebruikersnaam invullen! (bv. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Bericht van {name} als favoriet markeren", "interaction_modal.title.follow": "{name} volgen", "interaction_modal.title.reblog": "Bericht van {name} boosten", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Serverstats:", "sign_in_banner.create_account": "Registreren", "sign_in_banner.sign_in": "Inloggen", + "sign_in_banner.sso_redirect": "Inloggen of Registreren", "sign_in_banner.text": "Wanneer je een account op deze server hebt, kun je inloggen om mensen of hashtags te volgen, op berichten te reageren of om deze te delen. Wanneer je een account op een andere server hebt, kun je daar inloggen en daar ook interactie met mensen op deze server hebben.", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_domain": "Moderatie-omgeving van {domain} openen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index fad76036fd..96384b1610 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -17,7 +17,7 @@ "account.badges.group": "Gruppe", "account.block": "Blokker @{name}", "account.block_domain": "Skjul alt frå {domain}", - "account.block_short": "Blokkér", + "account.block_short": "Blokker", "account.blocked": "Blokkert", "account.browse_more_on_origin_server": "Sjå gjennom meir på den opphavlege profilen", "account.cancel_follow_request": "Trekk attende fylgeførespurnad", @@ -49,10 +49,10 @@ "account.mention": "Nemn @{name}", "account.moved_to": "{name} seier at deira nye konto no er:", "account.mute": "Målbind @{name}", - "account.mute_notifications_short": "Demp varsler", + "account.mute_notifications_short": "Demp varslingar", "account.mute_short": "Demp", "account.muted": "Målbunden", - "account.no_bio": "Ingen beskrivelse oppgitt.", + "account.no_bio": "Inga skildring er gjeven.", "account.open_original_page": "Opne originalsida", "account.posts": "Tut", "account.posts_with_replies": "Tut og svar", @@ -68,7 +68,7 @@ "account.unendorse": "Ikkje vis på profil", "account.unfollow": "Slutt å fylgja", "account.unmute": "Opphev målbinding av @{name}", - "account.unmute_notifications_short": "Opphev demping av varsler", + "account.unmute_notifications_short": "Opphev demping av varslingar", "account.unmute_short": "Opphev målbinding", "account_note.placeholder": "Klikk for å leggja til merknad", "admin.dashboard.daily_retention": "Mengda brukarar aktive ved dagar etter registrering", @@ -76,10 +76,10 @@ "admin.dashboard.retention.average": "Gjennomsnitt", "admin.dashboard.retention.cohort": "Registrert månad", "admin.dashboard.retention.cohort_size": "Nye brukarar", - "admin.impact_report.instance_accounts": "Kontoprofiler dette ville slettet", - "admin.impact_report.instance_followers": "Følgere våre brukere ville mistet", - "admin.impact_report.instance_follows": "Følgere deres brukere ville mistet", - "admin.impact_report.title": "Sammendrag av konsekvensene", + "admin.impact_report.instance_accounts": "Kontoprofilar dette vil sletta", + "admin.impact_report.instance_followers": "Følgjarar våre brukarar vil mista", + "admin.impact_report.instance_follows": "Følgjarar deira brukarar vil mista", + "admin.impact_report.title": "Samandrag av konsekvensane", "alert.rate_limited.message": "Ver venleg å prøv på nytt etter {retry_time, time, medium}.", "alert.rate_limited.title": "Redusert kapasitet", "alert.unexpected.message": "Det oppstod eit uventa problem.", @@ -113,6 +113,7 @@ "column.direct": "Private omtaler", "column.directory": "Sjå gjennom profilar", "column.domain_blocks": "Skjulte domene", + "column.favourites": "Favorittar", "column.firehose": "Tidslinjer", "column.follow_requests": "Fylgjeførespurnadar", "column.home": "Heim", @@ -180,6 +181,7 @@ "confirmations.mute.explanation": "Dette vil skjula innlegg som kjem frå og som nemner dei, men vil framleis la dei sjå innlegga dine og fylgje deg.", "confirmations.mute.message": "Er du sikker på at du vil målbinda {name}?", "confirmations.redraft.confirm": "Slett & skriv på nytt", + "confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.", "confirmations.reply.confirm": "Svar", "confirmations.reply.message": "Å svara no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?", "confirmations.unfollow.confirm": "Slutt å fylgja", @@ -189,7 +191,6 @@ "conversation.open": "Sjå samtale", "conversation.with": "Med {names}", "copypaste.copied": "Kopiert", - "copypaste.copy": "Kopier", "copypaste.copy_to_clipboard": "Kopier til utklyppstavla", "directory.federated": "Frå den kjende allheimen", "directory.local": "Berre frå {domain}", @@ -200,8 +201,9 @@ "dismissable_banner.community_timeline": "Dette er dei nylegaste offentlege innlegga frå personar med kontoar frå {domain}.", "dismissable_banner.dismiss": "Avvis", "dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.", + "dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.", "dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.", - "dismissable_banner.public_timeline": "Dette er de siste offentlige innleggene fra mennesker på det sosiale nettet som folk på {domain} følger.", + "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} følgjer.", "embed.instructions": "Bygg inn denne statusen på nettsida di ved å kopiera koden nedanfor.", "embed.preview": "Slik kjem det til å sjå ut:", "emoji_button.activity": "Aktivitet", @@ -228,6 +230,8 @@ "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.", "empty_column.domain_blocks": "Det er ingen skjulte domene til no.", "empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!", + "empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.", + "empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.", "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.", "empty_column.followed_tags": "Du fylgjer ingen emneknaggar enno. Når du gjer det, vil dei syna her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen enno.", @@ -265,9 +269,9 @@ "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny", "filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.title.status": "Filtrer eit innlegg", - "firehose.all": "Alt", - "firehose.local": "Denne serveren", - "firehose.remote": "Andre servere", + "firehose.all": "Alle", + "firehose.local": "Denne tenaren", + "firehose.remote": "Andre tenarar", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte dei som driv {domain} at du kanskje ville gå gjennom førespurnadar frå desse kontoane manuelt.", @@ -293,21 +297,27 @@ "hashtag.column_settings.tag_toggle": "Inkluder fleire emneord for denne kolonna", "hashtag.follow": "Fylg emneknagg", "hashtag.unfollow": "Slutt å fylgje emneknaggen", - "home.actions.go_to_explore": "Se hva som er populært", - "home.actions.go_to_suggestions": "Finn folk å følge", + "home.actions.go_to_explore": "Sjå kva som er populært", + "home.actions.go_to_suggestions": "Finn folk å følgje", "home.column_settings.basic": "Grunnleggjande", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", - "home.explore_prompt.body": "Tidslinjen din vil ha en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Det ser ganske stille ut akkurat nå, så hva med:", - "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", + "home.explore_prompt.body": "Tidslinja di vil ha ei blanding av innlegg frå emneknaggar du har vald å følgje, personane du har vald å følgje, og innlegga dei framhevar. Om det ser ganske stille ut akkurat no, så kan du:", + "home.explore_prompt.title": "Dette er heimen din i Mastodon.", "home.hide_announcements": "Skjul kunngjeringar", "home.show_announcements": "Vis kunngjeringar", + "interaction_modal.description.favourite": "Med ein konto på Mastodon kan du favorittmerkja dette innlegget for å visa forfattaren at du set pris på det, og for å lagra det til seinare.", "interaction_modal.description.follow": "Med ein konto på Mastodon kan du fylgja {name} for å sjå innlegga deira i din heimestraum.", "interaction_modal.description.reblog": "Med ein konto på Mastodon kan du framheva dette innlegget for å dela det med dine eigne fylgjarar.", "interaction_modal.description.reply": "Med ein konto på Mastodon kan du svara på dette innlegget.", + "interaction_modal.login.action": "Ta meg heim", + "interaction_modal.login.prompt": "Domenenamnet til din heime-tenar. t.d. mastodon.social", + "interaction_modal.no_account_yet": "Ikkje på Mastodon?", "interaction_modal.on_another_server": "På ein annan tenar", "interaction_modal.on_this_server": "På denne tenaren", - "interaction_modal.preamble": "Sidan Mastodon er desentralisert, kan du bruke ein konto frå ein annan Mastodontenar eller frå ei anna kompatibel plattform dersom du ikkje har konto på denne tenaren.", + "interaction_modal.sign_in": "Du er ikkje logga inn på denne tenaren. På kva for ein tenar høyrer kontoen din heime?", + "interaction_modal.sign_in_hint": "Tips: Det er nettstaden der du registrerte deg. Om du har gløymt kvar det var, sjå om du finn velkomst-eposten i innboksen din. Du kan òg skriva inn ditt fulle brukarnamn! (t.d. @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "Marker innlegget til {name} som favoritt", "interaction_modal.title.follow": "Fylg {name}", "interaction_modal.title.reblog": "Framhev {name} sitt innlegg", "interaction_modal.title.reply": "Svar på innlegge til {name}", @@ -323,6 +333,8 @@ "keyboard_shortcuts.direct": "åpne kolonnen ned private omtaler", "keyboard_shortcuts.down": "Flytt nedover i lista", "keyboard_shortcuts.enter": "Opne innlegg", + "keyboard_shortcuts.favourite": "Marker innlegget som favoritt", + "keyboard_shortcuts.favourites": "Opne favorittlista", "keyboard_shortcuts.federated": "Opne den samla tidslina", "keyboard_shortcuts.heading": "Snøggtastar", "keyboard_shortcuts.home": "Opne heimetidslina", @@ -353,12 +365,13 @@ "lightbox.previous": "Førre", "limited_account_hint.action": "Vis profilen likevel", "limited_account_hint.title": "Denne profilen er skjult av moderatorane på {domain}.", + "link_preview.author": "Av {name}", "lists.account.add": "Legg til i liste", "lists.account.remove": "Fjern frå liste", "lists.delete": "Slett liste", "lists.edit": "Rediger liste", "lists.edit.submit": "Endre tittel", - "lists.exclusive": "Skjul disse innleggene i tidslinjen", + "lists.exclusive": "Skjul desse innlegga frå heimestraumen din", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", "lists.replies_policy.followed": "Alle fylgde brukarar", @@ -375,7 +388,7 @@ "mute_modal.hide_notifications": "Skjul varsel frå denne brukaren?", "mute_modal.indefinite": "På ubestemt tid", "navigation_bar.about": "Om", - "navigation_bar.advanced_interface": "Åpne i det avanserte nettgrensesnittet", + "navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt", "navigation_bar.blocks": "Blokkerte brukarar", "navigation_bar.bookmarks": "Bokmerke", "navigation_bar.community_timeline": "Lokal tidsline", @@ -385,6 +398,7 @@ "navigation_bar.domain_blocks": "Skjulte domene", "navigation_bar.edit_profile": "Rediger profil", "navigation_bar.explore": "Utforsk", + "navigation_bar.favourites": "Favorittar", "navigation_bar.filters": "Målbundne ord", "navigation_bar.follow_requests": "Fylgjeførespurnader", "navigation_bar.followed_tags": "Fylgde emneknaggar", @@ -401,6 +415,7 @@ "not_signed_in_indicator.not_signed_in": "Du må logga inn for å få tilgang til denne ressursen.", "notification.admin.report": "{name} rapporterte {target}", "notification.admin.sign_up": "{name} er registrert", + "notification.favourite": "{name} markerte innlegget ditt som favoritt", "notification.follow": "{name} fylgde deg", "notification.follow_request": "{name} har bedt om å fylgja deg", "notification.mention": "{name} nemnde deg", @@ -414,6 +429,7 @@ "notifications.column_settings.admin.report": "Nye rapportar:", "notifications.column_settings.admin.sign_up": "Nyleg registrerte:", "notifications.column_settings.alert": "Skrivebordsvarsel", + "notifications.column_settings.favourite": "Favorittar:", "notifications.column_settings.filter_bar.advanced": "Vis alle kategoriar", "notifications.column_settings.filter_bar.category": "Snarfilterlinje", "notifications.column_settings.filter_bar.show_bar": "Vis filterlinja", @@ -431,6 +447,7 @@ "notifications.column_settings.update": "Redigeringar:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", + "notifications.filter.favourites": "Favorittar", "notifications.filter.follows": "Fylgjer", "notifications.filter.mentions": "Omtalar", "notifications.filter.polls": "Røysteresultat", @@ -476,7 +493,7 @@ "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukka", "poll.refresh": "Oppdater", - "poll.reveal": "Vis resultater", + "poll.reveal": "Vis resultat", "poll.total_people": "{count, plural, one {# person} other {# folk}}", "poll.total_votes": "{count, plural, one {# røyst} other {# røyster}}", "poll.vote": "Røyst", @@ -529,8 +546,8 @@ "report.placeholder": "Tilleggskommentarar", "report.reasons.dislike": "Eg likar det ikkje", "report.reasons.dislike_description": "Det er ikkje noko du ønsker å sjå", - "report.reasons.legal": "Det er ulovlig", - "report.reasons.legal_description": "Du mener det bryter loven i ditt eller serverens land", + "report.reasons.legal": "Det er ulovleg", + "report.reasons.legal_description": "Du meinar det bryt lova i landet der du eller tenaren held til", "report.reasons.other": "Det er noko anna", "report.reasons.other_description": "Problemet passar ikkje inn i dei andre kategoriane", "report.reasons.spam": "Det er søppelpost", @@ -550,7 +567,7 @@ "report.unfollow": "Slutt å fylgje @{name}", "report.unfollow_explanation": "Du fylgjer denne kontoen. Slutt å fylgje dei for ikkje lenger å sjå innlegga deira i heimestraumen din.", "report_notification.attached_statuses": "{count, plural, one {{count} innlegg} other {{count} innlegg}} lagt ved", - "report_notification.categories.legal": "Juridiske", + "report_notification.categories.legal": "Juridisk", "report_notification.categories.other": "Anna", "report_notification.categories.spam": "Søppelpost", "report_notification.categories.violation": "Regelbrot", @@ -581,6 +598,8 @@ "server_banner.server_stats": "Tenarstatistikk:", "sign_in_banner.create_account": "Opprett konto", "sign_in_banner.sign_in": "Logg inn", + "sign_in_banner.sso_redirect": "Logg inn eller registrer deg", + "sign_in_banner.text": "Logg inn for å fylgja profilar eller emneknaggar, og for å lika, dela og svara på innlegg. Du kan òg samhandla med aktivitet på denne tenaren frå kontoar på andre tenarar.", "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}", "status.admin_domain": "Opna moderatorgrensesnittet for {domain}", "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet", @@ -597,13 +616,14 @@ "status.edited": "Redigert {date}", "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}", "status.embed": "Bygg inn", + "status.favourite": "Favoritt", "status.filter": "Filtrer dette innlegget", "status.filtered": "Filtrert", "status.hide": "Skjul innlegget", "status.history.created": "{name} oppretta {date}", "status.history.edited": "{name} redigerte {date}", "status.load_more": "Last inn meir", - "status.media.open": "Klikk for å åpne", + "status.media.open": "Klikk for å opne", "status.media.show": "Klikk for å vise", "status.media_hidden": "Medium gøymd", "status.mention": "Nemn @{name}", @@ -635,7 +655,7 @@ "status.title.with_attachments": "{user} postet {attachmentCount, plural, one {et vedlegg} other {{attachmentCount} vedlegg}}", "status.translate": "Omset", "status.translated_from_with": "Omsett frå {lang} ved bruk av {provider}", - "status.uncached_media_warning": "Forhåndsvisning er ikke tilgjengelig", + "status.uncached_media_warning": "Førehandsvisning er ikkje tilgjengeleg", "status.unmute_conversation": "Opphev målbinding av samtalen", "status.unpin": "Løys frå profil", "subscribed_languages.lead": "Kun innlegg på valde språk vil bli dukke opp i heimestraumen din og i listene dine etter denne endringa. For å motta innlegg på alle språk, la vere å velje nokon.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 77172517c4..71a7beaf27 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -1,5 +1,5 @@ { - "about.blocks": "Modererte tjenere", + "about.blocks": "Modererte servere", "about.contact": "Kontakt:", "about.disclaimer": "Mastodon er gratis, åpen kildekode-programvare og et varemerke fra Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Årsak ikke tilgjengelig", @@ -10,17 +10,17 @@ "about.domain_blocks.suspended.title": "Suspendert", "about.not_available": "Denne informasjonen er ikke gjort tilgjengelig på denne tjeneren.", "about.powered_by": "Desentraliserte sosiale medier drevet av {mastodon}", - "about.rules": "Regler for tjeneren", + "about.rules": "Regler for serveren", "account.account_note_header": "Notat", "account.add_or_remove_from_list": "Legg til eller fjern fra lister", - "account.badges.bot": "Bot", + "account.badges.bot": "Robot", "account.badges.group": "Gruppe", "account.block": "Blokker @{name}", "account.block_domain": "Blokker domenet {domain}", - "account.block_short": "Blokkér", + "account.block_short": "Blokker", "account.blocked": "Blokkert", "account.browse_more_on_origin_server": "Bla mer på den opprinnelige profilen", - "account.cancel_follow_request": "Trekk tilbake følge-forespørselen", + "account.cancel_follow_request": "Avbryt følge forespørselen", "account.direct": "Nevn @{name} privat", "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg", "account.domain_blocked": "Domene blokkert", @@ -83,7 +83,7 @@ "alert.rate_limited.message": "Vennligst prøv igjen etter kl. {retry_time, time, medium}.", "alert.rate_limited.title": "Hastighetsbegrenset", "alert.unexpected.message": "En uventet feil oppstod.", - "alert.unexpected.title": "Oi!", + "alert.unexpected.title": "Ups!", "announcement.announcement": "Kunngjøring", "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", @@ -113,6 +113,7 @@ "column.direct": "Private omtaler", "column.directory": "Bla gjennom profiler", "column.domain_blocks": "Skjulte domener", + "column.favourites": "Favoritter", "column.firehose": "Tidslinjer", "column.follow_requests": "Følgeforespørsler", "column.home": "Hjem", @@ -165,7 +166,7 @@ "confirmations.cancel_follow_request.confirm": "Trekk tilbake forespørsel", "confirmations.cancel_follow_request.message": "Er du sikker på at du vil trekke tilbake forespørselen din for å følge {name}?", "confirmations.delete.confirm": "Slett", - "confirmations.delete.message": "Er du sikker på at du vil slette denne statusen?", + "confirmations.delete.message": "Er du sikker på at du vil slette dette innlegget?", "confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.message": "Er du sikker på at du vil slette denne listen permanent?", "confirmations.discard_edit_media.confirm": "Forkast", @@ -180,6 +181,7 @@ "confirmations.mute.explanation": "Dette vil skjule innlegg fra dem og innlegg som nevner dem, men det vil fortsatt la dem se dine innlegg og å følge deg.", "confirmations.mute.message": "Er du sikker på at du vil dempe {name}?", "confirmations.redraft.confirm": "Slett og skriv på nytt", + "confirmations.redraft.message": "Er du sikker på at du vil slette dette innlegget og lagre det på nytt? Favoritter og fremhevinger vil gå tapt, og svar til det originale innlegget vil bli foreldreløse.", "confirmations.reply.confirm": "Svar", "confirmations.reply.message": "Å svare nå vil overskrive meldingen du skriver for øyeblikket. Er du sikker på at du vil fortsette?", "confirmations.unfollow.confirm": "Slutt å følge", @@ -189,7 +191,6 @@ "conversation.open": "Vis samtale", "conversation.with": "Med {names}", "copypaste.copied": "Kopiert", - "copypaste.copy": "Kopier", "copypaste.copy_to_clipboard": "Kopier til utklippstavle", "directory.federated": "Fra det kjente strømiverset", "directory.local": "Kun fra {domain}", @@ -200,6 +201,7 @@ "dismissable_banner.community_timeline": "Dette er de nyeste offentlige innleggene fra personer med kontoer på {domain}.", "dismissable_banner.dismiss": "Avvis", "dismissable_banner.explore_links": "Disse nyhetene snakker folk om akkurat nå på denne og andre servere i det desentraliserte nettverket.", + "dismissable_banner.explore_statuses": "Disse innleggene fra denne og andre servere i det desentraliserte nettverket får økt oppmerksomhet på denne serveren akkurat nå. Nyere innlegg med flere fremhevinger og favoritter er rangert høyere.", "dismissable_banner.explore_tags": "Disse emneknaggene snakker folk om akkurat nå, på denne og andre servere i det desentraliserte nettverket.", "dismissable_banner.public_timeline": "Dette er de siste offentlige innleggene fra mennesker på det sosiale nettet som folk på {domain} følger.", "embed.instructions": "Kopier koden under for å bygge inn denne statusen på hjemmesiden din.", @@ -228,6 +230,8 @@ "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.", "empty_column.domain_blocks": "Det er ingen skjulte domener enda.", "empty_column.explore_statuses": "Ingenting er populært akkurat nå. Prøv igjen senere!", + "empty_column.favourited_statuses": "Du har ikke noen favorittinnlegg enda. Når du favorittmarkerer et inlegg, vil det dukke opp her.", + "empty_column.favourites": "Ingen har favorittmarkert dette innlegget ennå. Når noen gjør det, vil de dukke opp her.", "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.", "empty_column.followed_tags": "Du har ikke fulgt noen emneknagger ennå. Når du gjør det, vil de vises her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", @@ -298,16 +302,16 @@ "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", - "home.explore_prompt.body": "Tidslinjen din vil ha en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Det ser ganske stille ut akkurat nå, så hva med:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", "home.show_announcements": "Vis kunngjøring", + "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.", "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.", "interaction_modal.on_another_server": "På en annen server", "interaction_modal.on_this_server": "På denne serveren", - "interaction_modal.preamble": "Siden Mastodon er desentralisert, kan du bruke din eksisterende konto på en annen Mastodon-tjener eller en kompatibel plattform hvis du ikke har en konto her.", + "interaction_modal.title.favourite": "Favorittmarker innlegget til {name}", "interaction_modal.title.follow": "Følg {name}", "interaction_modal.title.reblog": "Fremhev {name} sitt innlegg", "interaction_modal.title.reply": "Svar på {name} sitt innlegg", @@ -323,6 +327,8 @@ "keyboard_shortcuts.direct": "åpne kolonnen ned private omtaler", "keyboard_shortcuts.down": "Flytt nedover i listen", "keyboard_shortcuts.enter": "Åpne innlegg", + "keyboard_shortcuts.favourite": "Favorittmarker innlegg", + "keyboard_shortcuts.favourites": "Åpne listen over favoritter", "keyboard_shortcuts.federated": "Åpne fellestidslinjen", "keyboard_shortcuts.heading": "Hurtigtaster", "keyboard_shortcuts.home": "Åpne hjemmetidslinjen", @@ -353,6 +359,7 @@ "lightbox.previous": "Forrige", "limited_account_hint.action": "Vis profil likevel", "limited_account_hint.title": "Denne profilen har blitt skjult av moderatorene til {domain}.", + "link_preview.author": "Av {name}", "lists.account.add": "Legg til i listen", "lists.account.remove": "Fjern fra listen", "lists.delete": "Slett listen", @@ -385,6 +392,7 @@ "navigation_bar.domain_blocks": "Skjulte domener", "navigation_bar.edit_profile": "Rediger profil", "navigation_bar.explore": "Utforsk", + "navigation_bar.favourites": "Favoritter", "navigation_bar.filters": "Stilnede ord", "navigation_bar.follow_requests": "Følgeforespørsler", "navigation_bar.followed_tags": "Fulgte emneknagger", @@ -401,6 +409,7 @@ "not_signed_in_indicator.not_signed_in": "Du må logge inn for å få tilgang til denne ressursen.", "notification.admin.report": "{name} rapporterte {target}", "notification.admin.sign_up": "{name} registrerte seg", + "notification.favourite": "{name} favorittmarkerte innlegget ditt", "notification.follow": "{name} fulgte deg", "notification.follow_request": "{name} har bedt om å få følge deg", "notification.mention": "{name} nevnte deg", @@ -414,6 +423,7 @@ "notifications.column_settings.admin.report": "Nye rapporter:", "notifications.column_settings.admin.sign_up": "Nye registreringer:", "notifications.column_settings.alert": "Skrivebordsvarslinger", + "notifications.column_settings.favourite": "Favoritter:", "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", "notifications.column_settings.filter_bar.category": "Hurtigfiltreringslinje", "notifications.column_settings.filter_bar.show_bar": "Vis filterlinjen", @@ -431,6 +441,7 @@ "notifications.column_settings.update": "Redigeringer:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", + "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følginger", "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", @@ -581,6 +592,8 @@ "server_banner.server_stats": "Serverstatistikk:", "sign_in_banner.create_account": "Opprett konto", "sign_in_banner.sign_in": "Logg inn", + "sign_in_banner.sso_redirect": "Logg inn eller registrer deg", + "sign_in_banner.text": "Logg inn for å følge profiler eller emneknagger, favorittmarkere, dele og svare på innlegg. Du kan også samhandle fra din konto på en annen server.", "status.admin_account": "Åpne moderatorgrensesnittet for @{name}", "status.admin_domain": "Åpne moderatorgrensesnittet for {domain}", "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet", @@ -597,6 +610,7 @@ "status.edited": "Redigert {date}", "status.edited_x_times": "Redigert {count, plural,one {{count} gang} other {{count} ganger}}", "status.embed": "Bygge inn", + "status.favourite": "Favoritt", "status.filter": "Filtrer dette innlegget", "status.filtered": "Filtrert", "status.hide": "Skjul innlegg", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index f3b9f04042..674b573592 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -160,7 +160,6 @@ "conversation.open": "Veire la conversacion", "conversation.with": "Amb {names}", "copypaste.copied": "Copiat", - "copypaste.copy": "Copiar", "directory.federated": "Del fediverse conegut", "directory.local": "Solament de {domain}", "directory.new_arrivals": "Nòus-venguts", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index ea30790115..d486fc13c0 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -57,7 +57,6 @@ "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ", "confirmations.unfollow.confirm": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ", "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ", - "copypaste.copy": "ਕਾਪੀ ਕਰੋ", "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ", "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ", "dismissable_banner.dismiss": "ਰੱਦ ਕਰੋ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 2fce76fc5d..88a3460aff 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -191,7 +191,6 @@ "conversation.open": "Zobacz konwersację", "conversation.with": "Z {names}", "copypaste.copied": "Skopiowano", - "copypaste.copy": "Kopiuj", "copypaste.copy_to_clipboard": "Skopiuj do schowka", "directory.federated": "Ze znanego fediwersum", "directory.local": "Tylko z {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", - "home.explore_prompt.body": "Twój kanał główny będzie zawierał kombinację postów z tagów, które wybrano do obserwacji, osoby, które wybrano obserwować i wpisy, które one podbijają. Obecnie jest tu całkiem cicho, więc co myślisz o:", + "home.explore_prompt.body": "Twój kanał główny będzie zawierał kombinację postów z tagów i osób które obserwujesz oraz wpisów przezeń podbitych. Jeżeli wydaje się to za spokojnym, spróbuj czegoś poniżej.", "home.explore_prompt.title": "To twój punkt podparcia w Mastodonie.", "home.hide_announcements": "Ukryj ogłoszenia", "home.show_announcements": "Pokaż ogłoszenia", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Mając konto na Mastodonie, możesz śledzić {name} by widzieć jego wpisy na swojej głównej osi czasu.", "interaction_modal.description.reblog": "Mając konto na Mastodonie, możesz podbić ten wpis i udostępnić go Twoim obserwującym.", "interaction_modal.description.reply": "Mając konto na Mastodonie, możesz odpowiedzieć na ten wpis.", + "interaction_modal.login.action": "Wróć na stronę główną", + "interaction_modal.login.prompt": "Domena twojego serwera domowego, np. \"mastodon.social\"", + "interaction_modal.no_account_yet": "Nie masz konta na Mastodonie?", "interaction_modal.on_another_server": "Na innym serwerze", "interaction_modal.on_this_server": "Na tym serwerze", - "interaction_modal.other_server_instructions": "Skopiuj i wklej ten adres URL do pola wyszukiwania w swojej ulubionej aplikacji Mastodon lub interfejsu internetowego swojego serwera Mastodon.", - "interaction_modal.preamble": "Ponieważ Mastodon jest zdecentralizowany, możesz użyć swojego istniejącego konta z innego serwera Mastodona lub innej kompatybilnej usługi, jeśli nie masz konta na tym serwerze.", + "interaction_modal.sign_in": "Nie jesteś zalogowany(-a) na tym serwerze. Gdzie masz konto?", + "interaction_modal.sign_in_hint": "To strona na której się rejestrowałeś(-aś). Jeżeli nie pamiętasz, poszukaj mejla z przywitaniem. Możesz też wprowadzić pełną nazwę użytkownika, à la @Mastodon@mastodon.social!", "interaction_modal.title.favourite": "Polub wpis użytkownika {name}", "interaction_modal.title.follow": "Śledź {name}", "interaction_modal.title.reblog": "Podbij wpis {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Statystyki serwera:", "sign_in_banner.create_account": "Załóż konto", "sign_in_banner.sign_in": "Zaloguj się", + "sign_in_banner.sso_redirect": "Zaloguj/zarejestruj się", "sign_in_banner.text": "Zaloguj się, aby obserwować profile lub hashtagi, polubić, udostępnić oraz odpowiedzieć na posty. Możesz również wejść w interakcję z konta na innym serwerze.", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_domain": "Otwórz interfejs moderacyjny dla {domain}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index e3889263d5..503cfed45c 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -189,7 +189,6 @@ "conversation.open": "Ver conversa", "conversation.with": "Com {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar para a área de transferência", "directory.federated": "Do fediverso conhecido", "directory.local": "Somente de {domain}", @@ -298,7 +297,6 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", - "home.explore_prompt.body": "Seu feed inicial terá uma mistura de publicações das hashtags que você escolheu seguir, das pessoas que você escolheu seguir e das publicações que elas impulsionam. Está parecendo bem tranquilo no momento, então que tal:", "home.explore_prompt.title": "Esta é a sua base principal dentro do Mastodon.", "home.hide_announcements": "Ocultar comunicados", "home.show_announcements": "Mostrar comunicados", @@ -307,7 +305,6 @@ "interaction_modal.description.reply": "Com uma conta no Mastodon, você pode responder a esta publicação.", "interaction_modal.on_another_server": "Em um servidor diferente", "interaction_modal.on_this_server": "Neste servidor", - "interaction_modal.preamble": "Como o Mastodon é descentralizado, você pode usar sua conta existente em outro servidor Mastodon ou plataforma compatível se você não tiver uma conta neste servidor.", "interaction_modal.title.follow": "Seguir {name}", "interaction_modal.title.reblog": "Impulsionar publicação de {name}", "interaction_modal.title.reply": "Responder à publicação de {name}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 570fd4644c..72278ec781 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -191,7 +191,6 @@ "conversation.open": "Ver conversa", "conversation.with": "Com {names}", "copypaste.copied": "Copiado", - "copypaste.copy": "Copiar", "copypaste.copy_to_clipboard": "Copiar para a área de transferência", "directory.federated": "Do fediverso conhecido", "directory.local": "Apenas de {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respostas", - "home.explore_prompt.body": "A sua página inicial terá uma mistura de publicações com as hashtags que escolheu seguir, das pessoas que escolheu seguir e as publicações que elas partilham. Parece bastante quieto por agora, então que tal:", + "home.explore_prompt.body": "A sua página inicial terá uma mistura de publicações com as hashtags que escolheu seguir, das pessoas que escolheu seguir e as publicações que elas partilham. Parece bastante sossegado por agora, talvez queira:", "home.explore_prompt.title": "Esta é a sua base principal dentro do Mastodon.", "home.hide_announcements": "Ocultar comunicações", "home.show_announcements": "Exibir comunicações", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.", "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.", "interaction_modal.description.reply": "Com uma conta no Mastodon, pode responder a esta publicação.", + "interaction_modal.login.action": "Leve-me a casa", + "interaction_modal.login.prompt": "Domínio do seu servidor, por exemplo, mastodon.social", + "interaction_modal.no_account_yet": "Não está no Mastodon?", "interaction_modal.on_another_server": "Num servidor diferente", "interaction_modal.on_this_server": "Neste servidor", - "interaction_modal.other_server_instructions": "Copie e cole este URL no campo de pesquisa da sua aplicação Mastodon preferida, ou da interface web do seu servidor Mastodon.", - "interaction_modal.preamble": "Uma vez que o Mastodon é descentralizado, caso não tenha uma conta neste servidor, pode utilizar a sua conta existente noutro servidor Mastodon ou plataforma compatível.", + "interaction_modal.sign_in": "Não tem sessão iniciada neste servidor. Em que servidor tem a sua conta?", + "interaction_modal.sign_in_hint": "Dica: O domínio do seu servidor é o site onde se inscreveu. Se não se lembrar, procure o e-mail de boas-vindas na sua caixa de entrada. Também pode introduzir o seu nome de utilizador completo! (por exemplo, @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Assinalar a publicação de {name} como favorita", "interaction_modal.title.follow": "Seguir {name}", "interaction_modal.title.reblog": "Impulsionar a publicação de {name}", @@ -363,6 +365,7 @@ "lightbox.previous": "Anterior", "limited_account_hint.action": "Exibir perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores de {domain}.", + "link_preview.author": "Por {name}", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Eliminar lista", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 9dc98306fa..3c37d50c60 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -172,7 +172,6 @@ "conversation.open": "Vizualizează conversația", "conversation.with": "Cu {names}", "copypaste.copied": "Copiat", - "copypaste.copy": "Copiere", "directory.federated": "Din fediversul cunoscut", "directory.local": "Doar din {domain}", "directory.new_arrivals": "Înscriși recent", @@ -279,7 +278,6 @@ "interaction_modal.description.reply": "Cu un cont pe Mastodon, poți răspunde acestei postări.", "interaction_modal.on_another_server": "Pe un alt server", "interaction_modal.on_this_server": "Pe acest server", - "interaction_modal.preamble": "De vreme ce Mastodon este descentralizat, poți folosi contul tău existent, găzduit de un alt server Mastodon, sau o platformă compatibilă dacă nu ai un cont pe acesta.", "interaction_modal.title.follow": "Urmărește pe {name}", "interaction_modal.title.reblog": "Distribuie postarea lui {name}", "interaction_modal.title.reply": "Răspunde postării lui {name}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index a7bbdc9b41..7e72c93aa8 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -191,7 +191,6 @@ "conversation.open": "Просмотр беседы", "conversation.with": "С {names}", "copypaste.copied": "Скопировано", - "copypaste.copy": "Скопировать", "copypaste.copy_to_clipboard": "Копировать в буфер обмена", "directory.federated": "Со всей федерации", "directory.local": "Только с {domain}", @@ -202,6 +201,7 @@ "dismissable_banner.community_timeline": "Это самые последние публичные сообщения от людей, чьи учетные записи размещены в {domain}.", "dismissable_banner.dismiss": "Закрыть", "dismissable_banner.explore_links": "Об этих новостях прямо сейчас говорят люди на этом и других серверах децентрализованной сети.", + "dismissable_banner.explore_statuses": "Эти сообщения со связанных серверов сети сейчас набирают популярность.", "dismissable_banner.explore_tags": "Эти хэштеги привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.", "dismissable_banner.public_timeline": "Это самые последние публичные сообщения от людей в социальной сети, за которыми подписались пользователи {domain}.", "embed.instructions": "Встройте этот пост на свой сайт, скопировав следующий код:", @@ -310,10 +310,13 @@ "interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.", "interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.", "interaction_modal.description.reply": "Вы можете ответить на этот пост с учётной записью Mastodon.", + "interaction_modal.login.action": "Перейти на домашнюю страницу", + "interaction_modal.login.prompt": "Домен вашего домашнего сервера, например, mastodon.social", + "interaction_modal.no_account_yet": "Еще не на Mastodon?", "interaction_modal.on_another_server": "На другом сервере", "interaction_modal.on_this_server": "На этом сервере", - "interaction_modal.other_server_instructions": "Скопируйте и вставьте этот URL в поле поиска вашего любимого приложения Mastodon или веб-интерфейс вашего сервера Mastodon.", - "interaction_modal.preamble": "Поскольку Mastodon децентрализован, вы можете использовать существующую учётную запись, размещенную на другом сервере Mastodon или совместимой платформе, если у вас нет учётной записи на этом сервере.", + "interaction_modal.sign_in": "Вы не вошли в систему на этом сервере. Где размещена ваша учетная запись?", + "interaction_modal.sign_in_hint": "Совет: Это сайт, на котором вы зарегистрировались. Если вы не помните, найдите приветственное письмо в своем почтовом ящике. Вы также можете ввести свое полное имя пользователя! (например, @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Добавить пост {name} в избранное", "interaction_modal.title.follow": "Подписаться на {name}", "interaction_modal.title.reblog": "Продвинуть публикацию {name}", @@ -595,6 +598,7 @@ "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Создать учётную запись", "sign_in_banner.sign_in": "Войти", + "sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь", "sign_in_banner.text": "Войдите, чтобы отслеживать профили, хэштеги или избранное, делиться сообщениями и отвечать на них. Вы также можете взаимодействовать с вашей учётной записью на другом сервере.", "status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_domain": "Открыть интерфейс модерации {domain}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index ee60315863..071061058d 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -177,7 +177,6 @@ "conversation.open": "वार्तालापो दृश्यताम्", "conversation.with": "{names} जनैः साकम्", "copypaste.copied": "प्रतिलिपिंकृतम्", - "copypaste.copy": "प्रतिलिपिः", "copypaste.copy_to_clipboard": "क्लिप्बोर्दमनुलिपिं कुरु", "directory.federated": "सुपरिचितं Fediverse इति स्थानात्", "directory.local": "{domain} प्रदेशात्केवलम्", @@ -287,7 +286,6 @@ "interaction_modal.description.reply": "मास्टोडोनि एकौण्टा पत्रमिदं प्रतिवादयितुं शक्नोषि।", "interaction_modal.on_another_server": "अन्यस्मिन्सर्वरि", "interaction_modal.on_this_server": "अस्मिन्सर्वरि", - "interaction_modal.preamble": "यतो मास्टोडोन्विकेन्द्रीयकृतोऽस्ति, अन्येन मास्टोडोन्सर्वरा उत सुसङ्गतेन आश्रयेण ते वर्तमानौकौण्टं प्रयोक्तुं शक्नोषि यदि अस्मिन्कोऽपि ते एकौण्ट् नास्ति।", "interaction_modal.title.follow": "{name} अनुसर", "interaction_modal.title.reblog": "{name} नाम्ना उपभोक्तुः पत्रं बुस्त्कुरु", "interaction_modal.title.reply": "{name} नाम्ना उपभोक्तुःपत्रं प्रतिवादय", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index ad5c9e28d3..8fe9944676 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -171,7 +171,6 @@ "conversation.open": "Luik at conversation", "conversation.with": "Wi {names}", "copypaste.copied": "Copied", - "copypaste.copy": "Copy", "directory.federated": "Fae a kent fediverse", "directory.local": "Fae {domain} ainly", "directory.new_arrivals": "New arrivals", @@ -272,7 +271,6 @@ "interaction_modal.description.reply": "Wi a accoont on Mastodon, ye kin sen a repone tae this post.", "interaction_modal.on_another_server": "On a different server", "interaction_modal.on_this_server": "On this server", - "interaction_modal.preamble": "Seein Mastodon is decentralized, ye kin uise the accoont thit ye awriddy hae hostit on anither Mastodon server or compatable platforn gien thit dinnae hae a accoont in this yin.", "interaction_modal.title.follow": "Follae {name}", "interaction_modal.title.reblog": "Heeze {name}'s post", "interaction_modal.title.reply": "Reply tae {name}'s post", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index c83c97e932..e045387fcf 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -136,7 +136,6 @@ "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "copypaste.copied": "පිටපත් විය", - "copypaste.copy": "පිටපතක්", "directory.federated": "දන්නා fediverse වලින්", "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 71a4228395..75153b4694 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -76,6 +76,10 @@ "admin.dashboard.retention.average": "Priemer", "admin.dashboard.retention.cohort": "Mesiac zaregistrovania sa", "admin.dashboard.retention.cohort_size": "Noví užívatelia", + "admin.impact_report.instance_accounts": "Profily účtov, ktoré by boli odstránené", + "admin.impact_report.instance_followers": "Sledovatelia, o ktorých by naši používatelia prišli", + "admin.impact_report.instance_follows": "Sledovatelia, o ktorých by ich používatelia prišli", + "admin.impact_report.title": "Zhrnutie dopadu", "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", @@ -110,6 +114,7 @@ "column.directory": "Prehľadávaj profily", "column.domain_blocks": "Skryté domény", "column.favourites": "Obľúbené", + "column.firehose": "Živé kanály", "column.follow_requests": "Žiadosti o sledovanie", "column.home": "Domov", "column.lists": "Zoznamy", @@ -176,6 +181,7 @@ "confirmations.mute.explanation": "Toto nastavenie skryje ich príspevky, alebo príspevky od iných v ktorých sú spomenutí, ale umožní im vidieť tvoje príspevky, aj ťa nasledovať.", "confirmations.mute.message": "Naozaj si chceš nevšímať {name}?", "confirmations.redraft.confirm": "Vyčisti a prepíš", + "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", "confirmations.reply.confirm": "Odpovedz", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", "confirmations.unfollow.confirm": "Nesleduj", @@ -185,7 +191,6 @@ "conversation.open": "Ukáž konverzáciu", "conversation.with": "S {names}", "copypaste.copied": "Skopírované", - "copypaste.copy": "Kopíruj", "copypaste.copy_to_clipboard": "Skopíruj do schránky", "directory.federated": "Zo známého fedivesmíru", "directory.local": "Iba z {domain}", @@ -196,7 +201,9 @@ "dismissable_banner.community_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorých účty sú hostované na {domain}.", "dismissable_banner.dismiss": "Zrušiť", "dismissable_banner.explore_links": "O týchto správach práve teraz hovoria ľudia na tomto a ďalších serveroch decentralizovanej siete.", + "dismissable_banner.explore_statuses": "Tieto príspevky naberajú na ťahu naprieč celej sociálnej sieti. Novšie príspevky s viacerými vyzdvihnutiami sú radené vyššie.", "dismissable_banner.explore_tags": "Tieto hashtagy práve teraz získavajú popularitu medzi ľuďmi na tomto a ďalších serveroch decentralizovanej siete.", + "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorí sledujú {domain}, cez celú sociálnu sieť.", "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", "embed.preview": "Tu je ako to bude vyzerať:", "emoji_button.activity": "Aktivita", @@ -223,6 +230,8 @@ "empty_column.direct": "Ešte nemáš žiadne priame zmienky. Keď nejakú pošleš alebo dostaneš, ukáže sa tu.", "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", "empty_column.explore_statuses": "Momentálne nie je nič trendové. Pozrite sa neskôr!", + "empty_column.favourited_statuses": "Zatiaľ nemáš žiadne obľúbené príspevky. Akonáhle označíš nejaký ako obľúbený, zobrazí sa tu.", + "empty_column.favourites": "Nikto si zatiaľ tento príspevok neobľúbil. Akonáhle tak niekto urobí, zobrazí sa tu.", "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.", "empty_column.followed_tags": "Ešte nenasleduješ žiadne haštagy. Keď tak urobíš, zobrazia sa tu.", "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.", @@ -288,6 +297,7 @@ "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", "hashtag.follow": "Nasleduj haštag", "hashtag.unfollow": "Nesleduj haštag", + "home.actions.go_to_explore": "Pozrieť, čo je trendy", "home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", @@ -297,9 +307,10 @@ "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.", "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.", "interaction_modal.description.reply": "Ak máte účet na Mastodone, môžete reagovať na tento príspevok.", + "interaction_modal.login.action": "Prejsť domov", "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", - "interaction_modal.preamble": "Keďže Mastodon je decentralizovaný, ak nemáte účet na tomto serveri, môžete použiť svoj existujúci účet hostovaný na inom serveri Mastodon alebo kompatibilnej platforme.", + "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok", "interaction_modal.title.follow": "Nasleduj {name}", "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok", "interaction_modal.title.reply": "Odpovedz na {name}ov/in príspevok", @@ -315,6 +326,8 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "posunúť sa dole v zozname", "keyboard_shortcuts.enter": "Otvor príspevok", + "keyboard_shortcuts.favourite": "Obľúb si príspevok", + "keyboard_shortcuts.favourites": "Otvor zoznam obľúbených", "keyboard_shortcuts.federated": "otvor federovanú časovú os", "keyboard_shortcuts.heading": "Klávesové skratky", "keyboard_shortcuts.home": "otvor domácu časovú os", @@ -375,6 +388,7 @@ "navigation_bar.domain_blocks": "Skryté domény", "navigation_bar.edit_profile": "Uprav profil", "navigation_bar.explore": "Objavuj", + "navigation_bar.favourites": "Obľúbené", "navigation_bar.filters": "Filtrované slová", "navigation_bar.follow_requests": "Žiadosti o sledovanie", "navigation_bar.followed_tags": "Nasledované haštagy", @@ -391,6 +405,7 @@ "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, musíte sa prihlásiť.", "notification.admin.report": "{name} nahlásil/a {target}", "notification.admin.sign_up": "{name} sa zaregistroval/a", + "notification.favourite": "{name} si obľúbil/a tvoj príspevok", "notification.follow": "{name} ťa začal/a nasledovať", "notification.follow_request": "{name} ťa žiada nasledovať", "notification.mention": "{name} ťa spomenul/a", @@ -443,6 +458,7 @@ "onboarding.compose.template": "Nazdar #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.next_steps": "Ďalšie možné kroky:", "onboarding.share.title": "Zdieľaj svoj profil", "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?", @@ -531,6 +547,7 @@ "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Právne ujednania", "report_notification.categories.other": "Ostatné", + "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Porušenie pravidla", "report_notification.open": "Otvor hlásenie", "search.no_recent_searches": "Žiadne nedávne vyhľadávania", @@ -571,6 +588,7 @@ "status.edited": "Upravené {date}", "status.edited_x_times": "Upravený {count, plural, one {{count} krát} other {{count} krát}}", "status.embed": "Vložiť", + "status.favourite": "Páči sa mi", "status.filter": "Filtrovanie tohto príspevku", "status.filtered": "Filtrované", "status.hide": "Skry príspevok", @@ -609,6 +627,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.translate": "Preložiť", "status.translated_from_with": "Preložené z {lang} pomocou {provider}", + "status.uncached_media_warning": "Náhľad nie je k dispozícii", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", "subscribed_languages.save": "Ulož zmeny", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index e513f6a436..5449fe903f 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -68,6 +68,7 @@ "account.unendorse": "Ne vključi v profil", "account.unfollow": "Prenehaj slediti", "account.unmute": "Odtišaj @{name}", + "account.unmute_notifications_short": "Izklopi utišanje obvestil", "account.unmute_short": "Odtišaj", "account_note.placeholder": "Kliknite za dodajanje opombe", "admin.dashboard.daily_retention": "Mera ohranjanja uporabnikov po dnevih od registracije", @@ -190,7 +191,6 @@ "conversation.open": "Pokaži pogovor", "conversation.with": "Z {names}", "copypaste.copied": "Kopirano", - "copypaste.copy": "Kopiraj", "copypaste.copy_to_clipboard": "Kopiraj na odložišče", "directory.federated": "Iz znanega fediverzuma", "directory.local": "Samo iz {domain}", @@ -203,6 +203,7 @@ "dismissable_banner.explore_links": "O teh novicah ravno zdaj veliko govorijo osebe na tem in drugih strežnikih decentraliziranega omrežja.", "dismissable_banner.explore_statuses": "Te objave s tega in drugih strežnikov v decentraliziranem omrežju pridobivajo ravno zdaj veliko pozornosti na tem strežniku.", "dismissable_banner.explore_tags": "Ravno zdaj dobivajo ti ključniki veliko pozoronosti med osebami na tem in drugih strežnikih decentraliziranega omrežja.", + "dismissable_banner.public_timeline": "To so najnovejše javne objave oseb z družabnega omrežja, ki jim sledijo osebe na {domain}.", "embed.instructions": "Vstavite to objavo na svojo spletno stran tako, da kopirate spodnjo kodo.", "embed.preview": "Tako bo izgledalo:", "emoji_button.activity": "Dejavnost", @@ -301,6 +302,7 @@ "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži izpostavitve", "home.column_settings.show_replies": "Pokaži odgovore", + "home.explore_prompt.body": "Vaš domači vir bo vseboval mešanico objav ključnikov, ki ste jih izbrali za sledenje, oseb, ki ste jih izbrali za sledenje, in objav, ki jih ti izpostavljajo. Če se vam to zdi preveč tiho, morda želite:", "home.explore_prompt.title": "To je vaš dom v okviru Mastodona.", "home.hide_announcements": "Skrij obvestila", "home.show_announcements": "Pokaži obvestila", @@ -308,10 +310,13 @@ "interaction_modal.description.follow": "Z računom na Mastodonu lahko sledite {name}, da prejemate njihove objave v svoj domači vir.", "interaction_modal.description.reblog": "Z računom na Mastodonu lahko izpostavite to objavo, tako da jo delite s svojimi sledilci.", "interaction_modal.description.reply": "Z računom na Mastodonu lahko odgovorite na to objavo.", + "interaction_modal.login.action": "Vrni me domov", + "interaction_modal.login.prompt": "Domena vašega domačega strežnika, npr. mastodon.social", + "interaction_modal.no_account_yet": "Niste na Mastodonu?", "interaction_modal.on_another_server": "Na drugem strežniku", "interaction_modal.on_this_server": "Na tem strežniku", - "interaction_modal.other_server_instructions": "Kopirajte in prilepite ta URL v polje iskanja vašega priljubljenega programa Mastodon ali spletnega vmesnika vašega strežnika Mastodon.", - "interaction_modal.preamble": "Ker je Mastodon decentraliziran, lahko uporabite svoj obstoječi račun, ki gostuje na drugem strežniku Mastodon ali združljivi platformi, če nimate računa na tej.", + "interaction_modal.sign_in": "Niste prijavljeni v ta strežnik. Kje gostuje vaš račun?", + "interaction_modal.sign_in_hint": "Nasvet: To je spletno mesto, na katerem ste se prijavili. Če se ne spomnite, poiščite pozdravno e-poštno sporočilo v svojem e-poštnem predalu. Vpišete lahko tudi svoje celotno uporabniško ime (npr. @Mastodon@mastodon.social)!", "interaction_modal.title.favourite": "Daj objavo {name} med priljubljene", "interaction_modal.title.follow": "Sledi {name}", "interaction_modal.title.reblog": "Izpostavi objavo {name}", @@ -360,6 +365,7 @@ "lightbox.previous": "Prejšnji", "limited_account_hint.action": "Vseeno pokaži profil", "limited_account_hint.title": "Profil so moderatorji strežnika {domain} skrili.", + "link_preview.author": "Avtor_ica {name}", "lists.account.add": "Dodaj na seznam", "lists.account.remove": "Odstrani s seznama", "lists.delete": "Izbriši seznam", @@ -592,6 +598,7 @@ "server_banner.server_stats": "Statistika strežnika:", "sign_in_banner.create_account": "Ustvari račun", "sign_in_banner.sign_in": "Prijava", + "sign_in_banner.sso_redirect": "Prijavite ali registrirajte se", "sign_in_banner.text": "Prijavite se, da sledite profilom ali ključnikom, dodajate med priljubljene, delite z drugimi ter odgovarjate na objave. V interakciji ste lahko tudi iz svojega računa na drugem strežniku.", "status.admin_account": "Odpri vmesnik za moderiranje za @{name}", "status.admin_domain": "Odpri vmesnik za moderiranje za {domain}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 915d374312..4add2f063a 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -189,7 +189,6 @@ "conversation.open": "Shfaq bisedën", "conversation.with": "Me {names}", "copypaste.copied": "U kopjua", - "copypaste.copy": "Kopjoje", "copypaste.copy_to_clipboard": "Kopjoje në të papastër", "directory.federated": "Nga fedivers i njohur", "directory.local": "Vetëm nga {domain}", @@ -298,7 +297,6 @@ "home.column_settings.basic": "Bazë", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", - "home.explore_prompt.body": "Prurja juaj bazë do të përmbajë një përzierje prej postimesh me hashtag-ët që keni zgjedhur të ndiqen, personat që keni zgjedhur të ndiqen dhe postimet që ata përforcojnë. Duket goxha bukur që tani, ndaj po sikur:", "home.explore_prompt.title": "Kjo është baza juaj brenda Mastodon-it.", "home.hide_announcements": "Fshihi lajmërimet", "home.show_announcements": "Shfaqi lajmërimet", @@ -307,7 +305,6 @@ "interaction_modal.description.reply": "Me një llogari në Mastodon, mund t’i përgjigjeni këtij postimi.", "interaction_modal.on_another_server": "Në një tjetër shërbyes", "interaction_modal.on_this_server": "Në këtë shërbyes", - "interaction_modal.preamble": "Ngaqë Mastodon-i është i decentralizuar, mund të përdorni llogarinë tuaj ekzistuese të strehuar nga një tjetër shërbyes Mastodon, ose platformë e përputhshme, nëse s’keni një llogari në këtë shërbyes.", "interaction_modal.title.follow": "Ndiq {name}", "interaction_modal.title.reblog": "Përforconi postimin e {name}", "interaction_modal.title.reply": "Përgjigjuni postimit të {name}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 4ea3f74dcf..9c155e8f62 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -191,7 +191,6 @@ "conversation.open": "Prikaži razgovor", "conversation.with": "Sa {names}", "copypaste.copied": "Kopirano", - "copypaste.copy": "Kopiraj", "copypaste.copy_to_clipboard": "Kopiraj", "directory.federated": "Sa znanog fediverzuma", "directory.local": "Samo sa {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Osnovna", "home.column_settings.show_reblogs": "Prikaži podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", - "home.explore_prompt.body": "Vaša početna stranica će imati mešavinu ovjava od heštegova koje ste izabrali da pratite, ljudi koje ste izabrali da pratite i objava koje su podržali. Trenutno izgleda prilično tiho, pa šta kažete na:", + "home.explore_prompt.body": "Vaša početna stranica će imati mešavinu objava od heš oznaka koje ste izabrali da pratite, ljudi koje ste izabrali da pratite i objava koje su podržali. Ako izgleda previše tiho, možda ćete želeti da:", "home.explore_prompt.title": "Ovo je vaša matična baza u Mastodon-u.", "home.hide_announcements": "Sakrij najave", "home.show_announcements": "Prijaži najave", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Sa nalogom na Mastodon-u, možete pratiti korisnika {name} kako biste primali njegove objave na početnoj stranici.", "interaction_modal.description.reblog": "Sa nalogom na Mastodon-u, možete podržati ovu objavu kako bite je podelili sa svojim pratiocima.", "interaction_modal.description.reply": "Sa nalogom na Mastodon-u, možete odgovoriti na ovu objavu.", + "interaction_modal.login.action": "Vodi me na početnu stranicu", + "interaction_modal.login.prompt": "Domen vašeg matičnog servera, npr. mastodon.social", + "interaction_modal.no_account_yet": "Niste na Mastodon-u?", "interaction_modal.on_another_server": "Na drugom serveru", "interaction_modal.on_this_server": "Na ovom serveru", - "interaction_modal.other_server_instructions": "Kopirajte i nalepite ovu URL adresu u polje pretrage svoje omiljene Mastodon aplikacije ili veb okruženje svog Mastodon servera.", - "interaction_modal.preamble": "Pošto je Mastodon decentralizovan, možete koristiti svoj postojeći nalog koji hostuje drugi Mastodon server ili kompatibilna platforma ako nemate nalog na ovom.", + "interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?", + "interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu", "interaction_modal.title.follow": "Zaprati {name}", "interaction_modal.title.reblog": "Podrži objavu korisnika {name}", @@ -466,7 +468,7 @@ "onboarding.compose.template": "Zdravo #Mastodon!", "onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.", "onboarding.follows.lead": "Vi sami birate svoju početnu stranicu. Što više ljudi pratite, to će biti aktivnije i zanimljivije. Ovi profili mogu biti dobra polazna tačka—uvek možete da ih prestanete pratiti kasnije!", - "onboarding.follows.title": "Popularno na Mastodon-u", + "onboarding.follows.title": "Personalizujte svoju početnu stranicu", "onboarding.share.lead": "Neka ljudi znaju kako mogu da vas pronađu na Mastodon-u!", "onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}", "onboarding.share.next_steps": "Mogući sledeći koraci:", @@ -475,7 +477,7 @@ "onboarding.start.skip": "Želite da preskočite?", "onboarding.start.title": "Uspeli ste!", "onboarding.steps.follow_people.body": "Vi sami birate svoju početnu stranicu. Hajde da ga ispunimo zanimljivim ljudima.", - "onboarding.steps.follow_people.title": "Pratite {count, plural, one {# osobu} few {# osobe} other {# osoba}}", + "onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu", "onboarding.steps.publish_status.body": "Reci zdravo svetu.", "onboarding.steps.publish_status.title": "Napišite svoju prvu objavu", "onboarding.steps.setup_profile.body": "Veća je verovatnoća da će drugi komunicirati sa vama sa popunjenim profilom.", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Statistike servera:", "sign_in_banner.create_account": "Napravite nalog", "sign_in_banner.sign_in": "Prijavite se", + "sign_in_banner.sso_redirect": "Prijavite se ili se registrujte", "sign_in_banner.text": "Prijavite se da biste pratili profile ili heš oznake, označili objave kao omiljene, delili i odgovarali na njih. Takođe možete komunicirati sa svog naloga na drugom serveru.", "status.admin_account": "Otvori moderatorsko okruženje za @{name}", "status.admin_domain": "Otvori moderatorsko okruženje za {domain}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index e1a5315e94..2f6545f584 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -191,7 +191,6 @@ "conversation.open": "Прикажи разговор", "conversation.with": "Са {names}", "copypaste.copied": "Копирано", - "copypaste.copy": "Копирај", "copypaste.copy_to_clipboard": "Копирај", "directory.federated": "Са знаног федиверзума", "directory.local": "Само са {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Основна", "home.column_settings.show_reblogs": "Прикажи подржавања", "home.column_settings.show_replies": "Прикажи одговоре", - "home.explore_prompt.body": "Ваша почетна страница ће имати мешавину овјава од хештегова које сте изабрали да пратите, људи које сте изабрали да пратите и објава које су подржали. Тренутно изгледа прилично тихо, па шта кажете на:", + "home.explore_prompt.body": "Ваша почетна страница ће имати мешавину објава од хеш ознака које сте изабрали да пратите, људи које сте изабрали да пратите и објава које су подржали. Ако изгледа превише тихо, можда ћете желети да:", "home.explore_prompt.title": "Ово је ваша матична база у Mastodon-у.", "home.hide_announcements": "Сакриј најаве", "home.show_announcements": "Пријажи најаве", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Са налогом на Mastodon-у, можете пратити корисника {name} како бисте примали његове објаве на почетној страници.", "interaction_modal.description.reblog": "Са налогом на Mastodon-у, можете подржати ову објаву како бите је поделили са својим пратиоцима.", "interaction_modal.description.reply": "Са налогом на Mastodon-у, можете одговорити на ову објаву.", + "interaction_modal.login.action": "Води ме на почетну страницу", + "interaction_modal.login.prompt": "Домен вашег матичног сервера, нпр. mastodon.social", + "interaction_modal.no_account_yet": "Нисте на Mastodon-у?", "interaction_modal.on_another_server": "На другом серверу", "interaction_modal.on_this_server": "На овом серверу", - "interaction_modal.other_server_instructions": "Копирајте и налепите ову URL адресу у поље претраге своје омиљене Mastodon апликације или веб окружење свог Mastodon сервера.", - "interaction_modal.preamble": "Пошто је Mastodon децентрализован, можете користити свој постојећи налог који хостује други Mastodon сервер или компатибилна платформа ако немате налог на овом.", + "interaction_modal.sign_in": "Нисте пријављени на овај сервер. Где је хостован ваш налог?", + "interaction_modal.sign_in_hint": "Савет: То је веб сајт на коме сте се регистровали. Ако се не сећате, потражите е-поруку добродошлице у свом пријемном сандучету. Такође можете унети своје пуно корисничко име! (нпр. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Означи објаву корисника {name} као омиљену", "interaction_modal.title.follow": "Запрати {name}", "interaction_modal.title.reblog": "Подржи објаву корисника {name}", @@ -466,7 +468,7 @@ "onboarding.compose.template": "Здраво #Mastodon!", "onboarding.follows.empty": "Нажалост, тренутно се не могу приказати резултати. Можете покушати са коришћењем претраге или прегледањем странице за истраживање да бисте пронашли људе које ћете пратити или покушајте поново касније.", "onboarding.follows.lead": "Ви сами бирате своју почетну страницу. Што више људи пратите, то ће бити активније и занимљивије. Ови профили могу бити добра полазна тачка—увек можете да их престанете пратити касније!", - "onboarding.follows.title": "Популарно на Mastodon-у", + "onboarding.follows.title": "Персонализујте своју почетну страницу", "onboarding.share.lead": "Нека људи знају како могу да вас пронађу на Mastodon-у!", "onboarding.share.message": "Ја сам {username} на #Mastodon-у! Пратите ме на {url}", "onboarding.share.next_steps": "Могући следећи кораци:", @@ -475,7 +477,7 @@ "onboarding.start.skip": "Желите да прескочите?", "onboarding.start.title": "Успели сте!", "onboarding.steps.follow_people.body": "Ви сами бирате своју почетну страницу. Хајде да га испунимо занимљивим људима.", - "onboarding.steps.follow_people.title": "Пратите {count, plural, one {# особу} few {# особе} other {# особа}}", + "onboarding.steps.follow_people.title": "Персонализујте своју почетну страницу", "onboarding.steps.publish_status.body": "Реци здраво свету.", "onboarding.steps.publish_status.title": "Напишите своју прву објаву", "onboarding.steps.setup_profile.body": "Већа је вероватноћа да ће други комуницирати са вама са попуњеним профилом.", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Статистике сервера:", "sign_in_banner.create_account": "Направите налог", "sign_in_banner.sign_in": "Пријавите се", + "sign_in_banner.sso_redirect": "Пријавите се или се региструјте", "sign_in_banner.text": "Пријавите се да бисте пратили профиле или хеш ознаке, означили објаве као омиљене, делили и одговарали на њих. Такође можете комуницирати са свог налога на другом серверу.", "status.admin_account": "Отвори модераторско окружење за @{name}", "status.admin_domain": "Отвори модераторско окружење за {domain}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index ea0d2205d0..54c462c4b5 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -76,6 +76,10 @@ "admin.dashboard.retention.average": "Genomsnittlig", "admin.dashboard.retention.cohort": "Registreringsmånad", "admin.dashboard.retention.cohort_size": "Nya användare", + "admin.impact_report.instance_accounts": "Kontoprofiler som det här skulle ta bort", + "admin.impact_report.instance_followers": "Följare som våra användare skulle förlora", + "admin.impact_report.instance_follows": "Följare som deras användare skulle förlora", + "admin.impact_report.title": "Sammanfattning av påverkan", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", @@ -186,7 +190,6 @@ "conversation.open": "Visa konversation", "conversation.with": "Med {names}", "copypaste.copied": "Kopierad", - "copypaste.copy": "Kopiera", "copypaste.copy_to_clipboard": "Kopiera till urklipp", "directory.federated": "Från känt fediversum", "directory.local": "Endast från {domain}", @@ -198,6 +201,7 @@ "dismissable_banner.dismiss": "Avfärda", "dismissable_banner.explore_links": "Dessa nyheter pratas det om just nu, på denna och på andra servrar i det decentraliserade nätverket.", "dismissable_banner.explore_tags": "Dessa hashtaggar pratas det om just nu bland folk på denna och andra servrar i det decentraliserade nätverket.", + "dismissable_banner.public_timeline": "De här är de aktuella publika inlägg från personer på det sociala nätet som personer i {domain} följer.", "embed.instructions": "Bädda in detta inlägg på din webbplats genom att kopiera koden nedan.", "embed.preview": "Så här kommer det att se ut:", "emoji_button.activity": "Aktivitet", @@ -224,6 +228,7 @@ "empty_column.direct": "Du har inga privata nämningar. När du skickar eller tar emot ett direktmeddelande kommer det att visas här.", "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.", "empty_column.explore_statuses": "Ingenting är trendigt just nu. Kom tillbaka senare!", + "empty_column.favourited_statuses": "Du har inga favoritmarkerade inlägg ännu. När du favoritmärker ett så kommer det att dyka upp här.", "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.followed_tags": "Du följer inga hashtaggar ännu. När du gör det kommer de att dyka upp här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", @@ -298,9 +303,9 @@ "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.", "interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.", "interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.", + "interaction_modal.no_account_yet": "Inte på Mastodon?", "interaction_modal.on_another_server": "På en annan server", "interaction_modal.on_this_server": "På denna server", - "interaction_modal.preamble": "Eftersom Mastodon är decentraliserat kan du använda ditt befintliga konto från en annan Mastodonserver, eller annan kompatibel plattform, om du inte har ett konto på denna.", "interaction_modal.title.follow": "Följ {name}", "interaction_modal.title.reblog": "Boosta {name}s inlägg", "interaction_modal.title.reply": "Svara på {name}s inlägg", @@ -407,6 +412,7 @@ "notifications.column_settings.admin.report": "Nya rapporter:", "notifications.column_settings.admin.sign_up": "Nya registreringar:", "notifications.column_settings.alert": "Skrivbordsaviseringar", + "notifications.column_settings.favourite": "Favoriter:", "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier", "notifications.column_settings.filter_bar.category": "Snabbfilter", "notifications.column_settings.filter_bar.show_bar": "Visa filterfält", @@ -563,6 +569,7 @@ "server_banner.server_stats": "Serverstatistik:", "sign_in_banner.create_account": "Skapa konto", "sign_in_banner.sign_in": "Logga in", + "sign_in_banner.sso_redirect": "Logga in eller registrera dig", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", "status.admin_domain": "Öppet modereringsgränssnitt för @{domain}", "status.admin_status": "Öppna detta inlägg i modereringsgränssnittet", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 8f0cc74564..3d0f64bce7 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -191,7 +191,6 @@ "conversation.open": "ดูการสนทนา", "conversation.with": "กับ {names}", "copypaste.copied": "คัดลอกแล้ว", - "copypaste.copy": "คัดลอก", "copypaste.copy_to_clipboard": "คัดลอกไปยังคลิปบอร์ด", "directory.federated": "จากจักรวาลสหพันธ์ที่รู้จัก", "directory.local": "จาก {domain} เท่านั้น", @@ -303,7 +302,7 @@ "home.column_settings.basic": "พื้นฐาน", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", - "home.explore_prompt.body": "ฟีดหน้าแรกของคุณจะมีการผสมผสานของโพสต์จากแฮชแท็กที่คุณได้เลือกติดตาม, ผู้คนที่คุณได้เลือกติดตาม และโพสต์ที่เขาดัน ฟีดดูค่อนข้างเงียบในตอนนี้ ดังนั้นแล้วถ้าเป็น:", + "home.explore_prompt.body": "ฟีดหน้าแรกของคุณจะมีการผสมผสานของโพสต์จากแฮชแท็กที่คุณได้เลือกติดตาม, ผู้คนที่คุณได้เลือกติดตาม และโพสต์ที่เขาดัน หากนั่นรู้สึกเงียบเกินไป คุณอาจต้องการ:", "home.explore_prompt.title": "นี่คือฐานหน้าแรกของคุณภายใน Mastodon", "home.hide_announcements": "ซ่อนประกาศ", "home.show_announcements": "แสดงประกาศ", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "ด้วยบัญชีใน Mastodon คุณสามารถติดตาม {name} เพื่อรับโพสต์ของเขาในฟีดหน้าแรกของคุณ", "interaction_modal.description.reblog": "ด้วยบัญชีใน Mastodon คุณสามารถดันโพสต์นี้เพื่อแบ่งปันโพสต์กับผู้ติดตามของคุณเอง", "interaction_modal.description.reply": "ด้วยบัญชีใน Mastodon คุณสามารถตอบกลับโพสต์นี้", + "interaction_modal.login.action": "นำฉันกลับบ้าน", + "interaction_modal.login.prompt": "โดเมนของเซิร์ฟเวอร์บ้านของคุณ เช่น mastodon.social", + "interaction_modal.no_account_yet": "ไม่ได้อยู่ใน Mastodon?", "interaction_modal.on_another_server": "ในเซิร์ฟเวอร์อื่น", "interaction_modal.on_this_server": "ในเซิร์ฟเวอร์นี้", - "interaction_modal.other_server_instructions": "คัดลอกแล้ววาง URL นี้ลงในช่องค้นหาของแอป Mastodon โปรดของคุณหรือส่วนติดต่อเว็บของเซิร์ฟเวอร์ Mastodon ของคุณ", - "interaction_modal.preamble": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถใช้บัญชีที่มีอยู่ของคุณที่ได้รับการโฮสต์โดยเซิร์ฟเวอร์ Mastodon อื่นหรือแพลตฟอร์มที่เข้ากันได้หากคุณไม่มีบัญชีในเซิร์ฟเวอร์นี้", + "interaction_modal.sign_in": "คุณไม่ได้เข้าสู่ระบบเซิร์ฟเวอร์นี้ บัญชีของคุณโฮสต์อยู่ที่ไหน?", + "interaction_modal.sign_in_hint": "เคล็ดลับ: นั่นคือเว็บไซต์ที่คุณได้ลงทะเบียน หากคุณจำไม่ได้ มองหาอีเมลต้อนรับในกล่องขาเข้าของคุณ คุณยังสามารถป้อนชื่อผู้ใช้เต็มของคุณ! (เช่น @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "ชื่นชอบโพสต์ของ {name}", "interaction_modal.title.follow": "ติดตาม {name}", "interaction_modal.title.reblog": "ดันโพสต์ของ {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "สถิติเซิร์ฟเวอร์:", "sign_in_banner.create_account": "สร้างบัญชี", "sign_in_banner.sign_in": "เข้าสู่ระบบ", + "sign_in_banner.sso_redirect": "เข้าสู่ระบบหรือลงทะเบียน", "sign_in_banner.text": "เข้าสู่ระบบเพื่อติดตามโปรไฟล์หรือแฮชแท็ก ชื่นชอบ แบ่งปัน และตอบกลับโพสต์ คุณยังสามารถโต้ตอบจากบัญชีของคุณในเซิร์ฟเวอร์อื่น", "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", "status.admin_domain": "เปิดส่วนติดต่อการควบคุมสำหรับ {domain}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index c0f917ddd9..bc8855a75e 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -60,7 +60,7 @@ "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın", "account.requested_follow": "{name} size takip isteği gönderdi", "account.share": "@{name} adlı kişinin profilini paylaş", - "account.show_reblogs": "@{name} kişisinin boostlarını göster", + "account.show_reblogs": "@{name} kişisinin yeniden paylaşımlarını göster", "account.statuses_counter": "{count, plural, one {{counter} Gönderi} other {{counter} Gönderi}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", "account.unblock_domain": "{domain} alan adının engelini kaldır", @@ -109,11 +109,11 @@ "column.about": "Hakkında", "column.blocks": "Engellenen kullanıcılar", "column.bookmarks": "Yer İşaretleri", - "column.community": "Yerel zaman tüneli", + "column.community": "Yerel ağ akışı", "column.direct": "Özel değinmeler", "column.directory": "Profillere göz at", "column.domain_blocks": "Engellenen alan adları", - "column.favourites": "Gözdeler", + "column.favourites": "Favorilerin", "column.firehose": "Anlık Akışlar", "column.follow_requests": "Takip istekleri", "column.home": "Anasayfa", @@ -121,7 +121,7 @@ "column.mutes": "Sessize alınmış kullanıcılar", "column.notifications": "Bildirimler", "column.pins": "Sabitlenmiş gönderiler", - "column.public": "Federe zaman tüneli", + "column.public": "Federe ağ akışı", "column_back_button.label": "Geri", "column_header.hide_settings": "Ayarları gizle", "column_header.moveLeft_settings": "Sütunu sola taşı", @@ -138,7 +138,7 @@ "compose.published.body": "Gönderi yayınlandı.", "compose.published.open": "Aç", "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin", - "compose_form.encryption_warning": "Mastodon gönderileri uçtan uca şifrelemeli değildir. Hassas olabilecek herhangi bir bilgiyi Mastodon'da paylaşmayın.", + "compose_form.encryption_warning": "Mastodon gönderileri uçtan uca şifreli değildir. Hassas olabilecek herhangi bir bilgiyi Mastodon'da paylaşmayınız.", "compose_form.hashtag_warning": "Bu gönderi herkese açık olmadığı için hiç bir etikette yer almayacak. Sadece herkese açık gönderiler etiketlerde bulunabilir.", "compose_form.lock_disclaimer": "Hesabın {locked} değil. Yalnızca takipçilere özel gönderilerini görüntülemek için herkes seni takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", @@ -149,8 +149,8 @@ "compose_form.poll.remove_option": "Bu seçeneği kaldır", "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir", "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir", - "compose_form.publish": "Tootla", - "compose_form.publish_form": "Tootla", + "compose_form.publish": "Gönder", + "compose_form.publish_form": "Gönder", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Değişiklikleri kaydet", "compose_form.sensitive.hide": "{count, plural, one {Medyayı hassas olarak işaretle} other {Medyayı hassas olarak işaretle}}", @@ -181,7 +181,7 @@ "confirmations.mute.explanation": "Bu, onlardan gelen ve bahseden gönderileri gizler. Ancak yine de gönderilerini görmelerine ve seni takip etmelerine izin verilir.", "confirmations.mute.message": "{name} kullanıcısını sessize almak istediğinden emin misin?", "confirmations.redraft.confirm": "Sil Düzenle ve yeniden paylaş", - "confirmations.redraft.message": "Bu gönderiyi silmek ve yeniden paylaşmak istediğinizden emin misiniz? Favoriler ve güncelemeler kaybolacak ve özgün gönderiye verilen yanıtlar silinecek.", + "confirmations.redraft.message": "Bu gönderiyi silip taslak haline getirmek istediğinize emin misiniz? Mevcut favoriler ve boostlar silinecek ve gönderiye verilen yanıtlar başıboş kalacak.", "confirmations.reply.confirm": "Yanıtla", "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğun mesajın üzerine yazılır. Devam etmek istediğine emin misin?", "confirmations.unfollow.confirm": "Takibi bırak", @@ -191,7 +191,6 @@ "conversation.open": "Sohbeti görüntüle", "conversation.with": "{names} ile", "copypaste.copied": "Kopyalandı", - "copypaste.copy": "Kopyala", "copypaste.copy_to_clipboard": "Panoya kopyala", "directory.federated": "Bilinen fediverse'lerden", "directory.local": "Yalnızca {domain} adresinden", @@ -204,7 +203,7 @@ "dismissable_banner.explore_links": "Bu haberler, merkeziyetsiz ağın bu ve diğer sunucularındaki insanlar tarafından şimdilerde konuşuluyor.", "dismissable_banner.explore_statuses": "Merkeziyetsiz ağın bu ve diğer sunucularındaki bu gönderiler, mevcut sunucuda şimdilerde ilgi çekiyorlar.", "dismissable_banner.explore_tags": "Bu etiketler, merkeziyetsiz ağda bulunan bu ve diğer sunuculardaki insanların şimdilerde ilgisini çekiyor.", - "dismissable_banner.public_timeline": "Bunlar, {domain} üzeirndeki insanların, sosyal medyada takip ettiği insanlarca gönderilen en son herkese açık gönderilerdir.", + "dismissable_banner.public_timeline": "Bunlar, {domain} üzerindeki insanların, sosyal ağ da takip ettiği insanlarca gönderilen en son ve herkese açık gönderilerdir.", "embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.", "embed.preview": "İşte nasıl görüneceği:", "emoji_button.activity": "Aktivite", @@ -231,7 +230,7 @@ "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecekler.", "empty_column.domain_blocks": "Henüz engellenmiş bir alan adı yok.", "empty_column.explore_statuses": "Şu an öne çıkan birşey yok. Daha sonra tekrar bakın!", - "empty_column.favourited_statuses": "Henüz gözde gönderileriniz yok. En sevdiğin zaman, burada görünecek.", + "empty_column.favourited_statuses": "Henüz bir gönderiyi favorilerinize eklememişsiniz. Bir gönderiyi favorilerinize eklediğinizde burada görünecek.", "empty_column.favourites": "Bu yazıyı henüz hiç kimse beğenmedi. Biri geldiğinde, buraya gelecekler.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.followed_tags": "Henüz hiç bir etiket takip etmiyorsunuz. Takip ettiğiniz etiketler burada görüntülenecek.", @@ -258,7 +257,7 @@ "filter_modal.added.context_mismatch_title": "Bağlam uyumsuzluğu!", "filter_modal.added.expired_explanation": "Bu süzgeç kategorisinin süresi dolmuş, süzgeci uygulamak için bitiş tarihini değiştirmeniz gerekiyor.", "filter_modal.added.expired_title": "Süresi dolmuş süzgeç!", - "filter_modal.added.review_and_configure": "Bu süzgeç kategorisini gözden geçirmek ve daha ayrıntılı bir şekilde yapılandırmak için {settings_link} adresine gidin.", + "filter_modal.added.review_and_configure": "Bu filtre kategorisini gözden geçirmek ve daha ayrıntılı bir şekilde yapılandırmak için {settings_link} adresine gidin.", "filter_modal.added.review_and_configure_title": "Süzgeç ayarları", "filter_modal.added.settings_link": "ayarlar sayfası", "filter_modal.added.short_explanation": "Bu gönderi şu süzgeç kategorisine eklendi: {title}.", @@ -275,7 +274,7 @@ "firehose.remote": "Diğer sunucular", "follow_request.authorize": "İzin Ver", "follow_request.reject": "Reddet", - "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa bile, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", + "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa da, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", "followed_tags": "Takip edilen etiketler", "footer.about": "Hakkında", "footer.directory": "Profil dizini", @@ -301,38 +300,41 @@ "home.actions.go_to_explore": "Öne çıkanları gör", "home.actions.go_to_suggestions": "Takip edecek kişileri bulun", "home.column_settings.basic": "Temel", - "home.column_settings.show_reblogs": "Boostları göster", + "home.column_settings.show_reblogs": "Yeniden paylaşımları göster", "home.column_settings.show_replies": "Yanıtları göster", - "home.explore_prompt.body": "Ana sayfa akışınızda, takip etmeyi seçtiğiniz hashtag'lerden, takip etmeyi seçtiğiniz kişilerden ve öne çıkardıkları gönderilerden oluşan bir karışım bulunur. Şu anda oldukça sessiz görünüyor, peki ya:", + "home.explore_prompt.body": "Ana sayfa akışınızda, takip etmeyi seçtiğiniz ETİKETlerden, takip etmeyi seçtiğiniz kişilerden ve öne çıkardıkları gönderilerden oluşan bir karışım bulunur. Şu anda oldukça sessiz görünüyor, gör ve takip et :", "home.explore_prompt.title": "Burası Mastodon'daki Anasayfanız.", "home.hide_announcements": "Duyuruları gizle", "home.show_announcements": "Duyuruları göster", - "interaction_modal.description.favourite": "Mastodon'da bir hesapla, yazarı takdir ettiğinizi bildirmek ve daha sonraya saklamak için bu gönderiyi gözdelerinize ekleyebilirsiniz.", + "interaction_modal.description.favourite": "Bir Mastodon hesabıyla bu gönderiyi favorilerinize ekleyerek yazara gönderiyi beğendiğinizi bildirebilir ve daha sonrası için kaydedebilirsiniz.", "interaction_modal.description.follow": "Mastodon'daki bir hesapla, {name} kişisini, ana akışınızdaki gönderilerini görmek üzere takip edebilirsiniz.", "interaction_modal.description.reblog": "Mastodon'daki bir hesapla, bu gönderiyi takipçilerinizle paylaşmak için tuşlayabilirsiniz.", "interaction_modal.description.reply": "Mastodon'daki bir hesapla, bu gönderiye yanıt verebilirsiniz.", + "interaction_modal.login.action": "Anasayfaya geri dön", + "interaction_modal.login.prompt": "Ev sunucunuzun etki alanı, örneğin mastodon.social", + "interaction_modal.no_account_yet": "Mastodon açık değil?", "interaction_modal.on_another_server": "Farklı bir sunucuda", "interaction_modal.on_this_server": "Bu sunucuda", - "interaction_modal.other_server_instructions": "Bu bağlamtıyı kopyalayıp gözde Mastodon uygulamanızın arama alanına veya Mastodon sunucunuzun web arayüzüne yapıştırın.", - "interaction_modal.preamble": "Mastodon merkeziyetsiz olduğu için, bu sunucuda bir hesabınız yoksa bile başka bir Mastodon sunucusunda veya uyumlu bir platformda barındırılan mevcut hesabınızı kullanabilirsiniz.", - "interaction_modal.title.favourite": "Gözde {name}'s gönderisi", + "interaction_modal.sign_in": "Bu sunucuya giriş yapmadınız. Hesabınız nerede barındırılıyor?", + "interaction_modal.sign_in_hint": "İpucu: Kaydolduğunuz web sitesi budur. Hatırlamıyorsanız, gelen kutunuzdaki hoş geldiniz e-postasını arayın. Tam kullanıcı adınızı da girebilirsiniz! (örneğin @Mastodon@mastodon.social)", + "interaction_modal.title.favourite": "{name} kişisinin gönderisini favorilerine ekle", "interaction_modal.title.follow": "{name} kişisini takip et", - "interaction_modal.title.reblog": "{name} kişisinin gönderisini boostla", + "interaction_modal.title.reblog": "{name} kişisinin gönderisini yeniden paylaş", "interaction_modal.title.reply": "{name} kişisinin gönderisine yanıt ver", "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}", "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}", "keyboard_shortcuts.back": "Geriye git", "keyboard_shortcuts.blocked": "Engellenen kullanıcılar listesini aç", - "keyboard_shortcuts.boost": "Gönderiyi boostla", + "keyboard_shortcuts.boost": "Gönderiyi yeniden paylaş", "keyboard_shortcuts.column": "Sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "Yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", "keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için", "keyboard_shortcuts.down": "Listede aşağıya inmek için", "keyboard_shortcuts.enter": "gönderiyi aç", - "keyboard_shortcuts.favourite": "Gözde gönderi", - "keyboard_shortcuts.favourites": "Gözdendeki listeni aç", + "keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle", + "keyboard_shortcuts.favourites": "Favoriler listeni aç", "keyboard_shortcuts.federated": "Federe akışı aç", "keyboard_shortcuts.heading": "Klavye kısayolları", "keyboard_shortcuts.home": "Ana akışı aç", @@ -389,14 +391,14 @@ "navigation_bar.advanced_interface": "Gelişmiş web arayüzünde aç", "navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.bookmarks": "Yer İşaretleri", - "navigation_bar.community_timeline": "Yerel Zaman Tüneli", + "navigation_bar.community_timeline": "Yerel ağ akışı", "navigation_bar.compose": "Yeni gönderi yaz", "navigation_bar.direct": "Özel değinmeler", "navigation_bar.discover": "Keşfet", "navigation_bar.domain_blocks": "Engellenen alan adları", "navigation_bar.edit_profile": "Profili düzenle", "navigation_bar.explore": "Keşfet", - "navigation_bar.favourites": "Gözdelerin", + "navigation_bar.favourites": "Favorilerin", "navigation_bar.filters": "Sessize alınmış kelimeler", "navigation_bar.follow_requests": "Takip istekleri", "navigation_bar.followed_tags": "Takip edilen etiketler", @@ -407,19 +409,19 @@ "navigation_bar.personal": "Kişisel", "navigation_bar.pins": "Sabitlenmiş gönderiler", "navigation_bar.preferences": "Tercihler", - "navigation_bar.public_timeline": "Federe zaman tüneli", + "navigation_bar.public_timeline": "Federe ağ akışı", "navigation_bar.search": "Arama", "navigation_bar.security": "Güvenlik", "not_signed_in_indicator.not_signed_in": "Bu kaynağa erişmek için oturum açmanız gerekir.", "notification.admin.report": "{name}, {target} kişisini bildirdi", "notification.admin.sign_up": "{name} kaydoldu", - "notification.favourite": "{name} gönderinizi beğendi", + "notification.favourite": "{name} gönderinizden hoşlandı", "notification.follow": "{name} seni takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", "notification.mention": "{name} senden bahsetti", "notification.own_poll": "Anketiniz sona erdi", "notification.poll": "Oy verdiğiniz bir anket sona erdi", - "notification.reblog": "{name} gönderini boostladı", + "notification.reblog": "{name} gönderini yeniden paylaştı", "notification.status": "{name} az önce gönderdi", "notification.update": "{name} bir gönderiyi düzenledi", "notifications.clear": "Bildirimleri temizle", @@ -427,16 +429,16 @@ "notifications.column_settings.admin.report": "Yeni bildirimler:", "notifications.column_settings.admin.sign_up": "Yeni kayıtlar:", "notifications.column_settings.alert": "Masaüstü bildirimleri", - "notifications.column_settings.favourite": "Gözdelerin:", + "notifications.column_settings.favourite": "Favorilerin:", "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle", - "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", - "notifications.column_settings.filter_bar.show_bar": "Süzme çubuğunu göster", + "notifications.column_settings.filter_bar.category": "Hızlı süzgeç çubuğu", + "notifications.column_settings.filter_bar.show_bar": "Süzgeç çubuğunu göster", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", "notifications.column_settings.mention": "Değinmeler:", "notifications.column_settings.poll": "Anket sonuçları:", "notifications.column_settings.push": "Anlık bildirimler", - "notifications.column_settings.reblog": "Boostlar:", + "notifications.column_settings.reblog": "Yeniden paylaşanlar:", "notifications.column_settings.show": "Sütunda göster", "notifications.column_settings.sound": "Ses çal", "notifications.column_settings.status": "Yeni gönderiler:", @@ -444,8 +446,8 @@ "notifications.column_settings.unread_notifications.highlight": "Okunmamış bildirimleri öne çıkar", "notifications.column_settings.update": "Düzenlemeler:", "notifications.filter.all": "Tümü", - "notifications.filter.boosts": "Boostlar", - "notifications.filter.favourites": "Gözdelerin", + "notifications.filter.boosts": "Yeniden paylaşımlar", + "notifications.filter.favourites": "Favorilerin", "notifications.filter.follows": "Takip edilenler", "notifications.filter.mentions": "Değinmeler", "notifications.filter.polls": "Anket sonuçları", @@ -467,14 +469,14 @@ "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.", "onboarding.follows.lead": "Kendi ana akışınızı siz düzenliyorsunuz. Siz daha fazla insanı takip ettikçe, daha etkin ve ilgi çekici olacaktır. Bu profiller iyi bir başlangıç olabilir, isterseniz izlemeyi daha sonra bırakabilirsiniz:", "onboarding.follows.title": "Mastodon'da Popüler", - "onboarding.share.lead": "Kullanıcılara Mastodon'da size nasıl ulaşabileceklerini söyleyin!", + "onboarding.share.lead": "Kullanıcılara Mastodon'da size nasıl ulaşabileceklerini ifade edin!", "onboarding.share.message": "#Mastodon'da kullanıcı adım {username}! Beni takip etmek için {url} bağlantısını kullanın", "onboarding.share.next_steps": "Olası sonraki adımlar:", "onboarding.share.title": "Profilinizi paylaşın", "onboarding.start.lead": "Yeni Mastodon hesabınız kullanıma hazır. Ondan nasıl yararlanabilirsiniz:", "onboarding.start.skip": "Şimdilik bunların hepsini atlamak mı istiyorsunuz?", "onboarding.start.title": "Başardınız!", - "onboarding.steps.follow_people.body": "Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç insanlarla dolduralım.", + "onboarding.steps.follow_people.body": "Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç kullacılarla dolduralım.", "onboarding.steps.follow_people.title": "{count, plural, one {Bir kişiyi} other {# kişiyi}} takip edin", "onboarding.steps.publish_status.body": "Dünyaya merhaba deyin.", "onboarding.steps.publish_status.title": "İlk gönderinizi oluşturun", @@ -482,7 +484,7 @@ "onboarding.steps.setup_profile.title": "Profilinizi özelleştirin", "onboarding.steps.share_profile.body": "Arkadaşlarınıza Mastodon'da size nasıl ulaşabileceklerini söyleyin!", "onboarding.steps.share_profile.title": "Profilinizi paylaşın", - "onboarding.tips.2fa": "Biliyor muydunuz? Hesabınızı, hesap ayarlarında iki aşamalı doğrılamayı ayarlayarak güvenli kılabilirsiniz. Sizin seçiminiz olan herhangi bir TOTP uygulamasıyla çalışır, telefon numarası da gerekmiyor!", + "onboarding.tips.2fa": "Biliyor muydunuz? Hesabınızı, hesap ayarlarında iki aşamalı doğrılamayı ayarlayarak güvenli kılabilirsiniz. Sizin seçiminiz olan herhangi bir İki Faktörlü TOTP uygulamasıyla çalışır, telefon numarası da gerekmiyor!", "onboarding.tips.accounts_from_other_servers": "Biliyor muydunuz? Mastodon ademi merkeziyetçi olduğu için, karşılaştığınız bazı profiller sizinkinden farklı bir sunucuda barındırılacaktır. Buna rağmen onlarla sorunsuz bir şekilde etkileşebilirsiniz! Sunucuları, kullanıcı adlarının ikinci yarısıdır!", "onboarding.tips.migration": "Biliyor muydunuz? Eğer gelecekte {domain} sunucusunu çok iyi bulmazsanız, takipçilerinizi kaybetmeden başka bir Mastodon sunucusuna taşınabilirsiniz. Kendi sunucunuzu bile oluşturabilirsiniz!", "onboarding.tips.verification": "Biliyor muydunuz? Hesabınızı, kendi web sitenize Mastodon profilinize bir bağlantı koyarak, sonra da web sitenizin bağlantısını profilinize ekleyerek doğrulayabilirsiniz. Ne ücret ne de bir belge gerekiyor!", @@ -513,15 +515,15 @@ "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", "regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!", - "relative_time.days": "{number}g", + "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# gün} other {# gün}} önce", "relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} önce", "relative_time.full.just_now": "şimdi", "relative_time.full.minutes": "{number, plural, one {# dakika} other {# dakika}} önce", "relative_time.full.seconds": "{number, plural, one {# saniye} other {# saniye}} önce", - "relative_time.hours": "{number}s", + "relative_time.hours": "{number}h", "relative_time.just_now": "şimdi", - "relative_time.minutes": "{number}dk", + "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}sn", "relative_time.today": "bugün", "reply_indicator.cancel": "İptal", @@ -542,7 +544,7 @@ "report.mute_explanation": "Gönderilerini göremeyeceksiniz. Sizi takip etmeyi sürdürebilir ve gönderilerinizi görebilirler ama sessize alındıklarını anlamayacaklar.", "report.next": "Sonraki", "report.placeholder": "Ek yorumlar", - "report.reasons.dislike": "Beğenmedim", + "report.reasons.dislike": "Hoşlanmadım", "report.reasons.dislike_description": "Görmek isteyeceğiniz bir şey değil", "report.reasons.legal": "Bu yasalara aykırı", "report.reasons.legal_description": "Kendi veya sunucunuzun ülkesinin yasalarını ihlal ettiğini düşünüyorsunuz", @@ -575,9 +577,9 @@ "search.quick_action.account_search": "Eşleşen profiller {x}", "search.quick_action.go_to_account": "Profile git {x}", "search.quick_action.go_to_hashtag": "Etikete git {x}", - "search.quick_action.open_url": "URL'yi Mastodon'da Aç", + "search.quick_action.open_url": "Bağlantıyı Mastodon'da Aç", "search.quick_action.status_search": "Eşleşen gönderiler {x}", - "search.search_or_paste": "Ara veya URL gir", + "search.search_or_paste": "Ara veya Bağlantıyı yapıştır", "search_popout.quick_actions": "Hızlı eylemler", "search_popout.recent": "Son aramalar", "search_results.accounts": "Profiller", @@ -596,14 +598,15 @@ "server_banner.server_stats": "Sunucu istatistikleri:", "sign_in_banner.create_account": "Hesap oluştur", "sign_in_banner.sign_in": "Giriş yap", - "sign_in_banner.text": "Profilleri veya etiketleri takip etmek, gözdelerin, paylaşımlar ve gönderileri yanıtlamak için giriş yapın. Hesabınızdan farklı bir sunucuda da etkileşim içinde bulunabilirsiniz.", + "sign_in_banner.sso_redirect": "Giriş yap veya kaydol", + "sign_in_banner.text": "Profilleri ve hashtagleri takip etmek, gönderileri favorilerine eklemek, paylaşmak ve yanıtlamak için giriş yap. Farklı bir sunucudaki hesabınla da etkileşimde bulunabilirsin.", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_domain": "{domain} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu gönderiyi açın", "status.block": "@{name} adlı kişiyi engelle", "status.bookmark": "Yer işareti ekle", - "status.cancel_reblog_private": "Boostu geri al", - "status.cannot_reblog": "Bu gönderi boost edilemez", + "status.cancel_reblog_private": "Yeniden paylaşımı geri al", + "status.cannot_reblog": "Bu gönderi yeniden paylaşılamaz", "status.copy": "Bağlantı durumunu kopyala", "status.delete": "Sil", "status.detailed_status": "Ayrıntılı sohbet görünümü", @@ -613,9 +616,9 @@ "status.edited": "{date} tarihinde düzenlenmiş", "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi", "status.embed": "Gömülü", - "status.favourite": "Gözdem", - "status.filter": "Bu gönderiyi filtrele", - "status.filtered": "Filtrelenmiş", + "status.favourite": "Favori", + "status.filter": "Bu gönderiyi süzgeçle", + "status.filtered": "Süzgeçlenmiş", "status.hide": "Gönderiyi gizle", "status.history.created": "{name} oluşturdu {date}", "status.history.edited": "{name} düzenledi {date}", @@ -631,11 +634,11 @@ "status.pin": "Profile sabitle", "status.pinned": "Sabitlenmiş gönderi", "status.read_more": "Devamını okuyun", - "status.reblog": "Boostla", - "status.reblog_private": "Orijinal görünürlük ile boostla", - "status.reblogged_by": "{name} boostladı", - "status.reblogs.empty": "Henüz hiç kimse bu Toot'u Boost'lamadı. Biri yaptığında burada görünecek.", - "status.redraft": "Sil ve yeniden taslak yap", + "status.reblog": "Yeniden paylaş", + "status.reblog_private": "Özgün görünürlük ile yeniden paylaş", + "status.reblogged_by": "{name} yeniden paylaştı", + "status.reblogs.empty": "Henüz hiç kimse bu Gönderiyi Yeniden Paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.", + "status.redraft": "Sil,Düzenle ve Yeniden paylaş", "status.remove_bookmark": "Yer işaretini kaldır", "status.replied_to": "{name} kullanıcısına yanıt verildi", "status.reply": "Yanıtla", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 2b9262e695..536e0a5333 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -175,7 +175,6 @@ "conversation.open": "Сөйләшүне карау", "conversation.with": "{names} белән", "copypaste.copied": "Күчереп алынган", - "copypaste.copy": "Күчереп алу", "copypaste.copy_to_clipboard": "Алмашу буферына күчереп алу", "directory.federated": "Билгеле галәмнән", "directory.local": "Кемнән {domain} гына", @@ -259,7 +258,6 @@ "interaction_modal.description.reply": "Mastodon аккаунты белән сез бу язмага җавап бирә аласыз.", "interaction_modal.on_another_server": "Башка серверда", "interaction_modal.on_this_server": "Бу серверда", - "interaction_modal.preamble": "Mastodon үзәкләштерелмәгәнгә, Сез үзегезнең Mastodon серверына урнаштырылган счетыгызны яки бу серверда счетыгыз булмаса, платформага туры килгән платформаны куллана аласыз.", "interaction_modal.title.follow": "Иярү {name}", "interaction_modal.title.reblog": "Арттыру {name} сак", "interaction_modal.title.reply": "Җавап {name} сак", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 8c811423a0..c011187577 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -191,7 +191,6 @@ "conversation.open": "Переглянути бесіду", "conversation.with": "З {names}", "copypaste.copied": "Скопійовано", - "copypaste.copy": "Копіювати", "copypaste.copy_to_clipboard": "Копіювати до буфера обміну", "directory.federated": "З відомого федесвіту", "directory.local": "Лише з домену {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "Основні", "home.column_settings.show_reblogs": "Показувати поширення", "home.column_settings.show_replies": "Показувати відповіді", - "home.explore_prompt.body": "Ваша домашня стрічка буде сумішшю дописів з обраних для стеження хештегів, людей і поширених ними дописів. Зараз тут досить порожньо, тож:", + "home.explore_prompt.body": "Ваша домашня стрічка буде сумішшю дописів з обраних для стеження хештегів, людей і поширених ними дописів. Якщо цього замало, ви також можете:", "home.explore_prompt.title": "Це ваша домашня база у Mastodon.", "home.hide_announcements": "Приховати оголошення", "home.show_announcements": "Показати оголошення", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Маючи обліковий запис на Mastodon, ви можете підписатися на {name}, щоб отримувати дописи цього користувача у свою стрічку.", "interaction_modal.description.reblog": "Маючи обліковий запис на Mastodon, ви можете поширити цей допис, щоб поділитися ним зі своїми підписниками.", "interaction_modal.description.reply": "Маючи обліковий запис на Mastodon, ви можете відповісти на цей допис.", + "interaction_modal.login.action": "На домашню сторінку", + "interaction_modal.login.prompt": "Домен вашого домашнього сервера, наприклад, mastodon.social", + "interaction_modal.no_account_yet": "Не зареєстровані в Mastodon?", "interaction_modal.on_another_server": "На іншому сервері", "interaction_modal.on_this_server": "На цьому сервері", - "interaction_modal.other_server_instructions": "Скопіюйте та вставте цю URL-адресу в поле пошуку вашого улюбленого застосунку Mastodon або вебінтерфейсу вашого сервера Mastodon.", - "interaction_modal.preamble": "Оскільки Mastodon децентралізований, ви можете використовувати свій наявний обліковий запис, розміщений на іншому сервері Mastodon або сумісній платформі, якщо у вас немає облікового запису на цьому сервері.", + "interaction_modal.sign_in": "Ви не ввійшли на цей сервер. Де розміщений ваш обліковий запис?", + "interaction_modal.sign_in_hint": "Підказка: це сайт, на якому ви зареєструвалися. Якщо ви не пам'ятаєте, знайдіть привітальний електронний лист у теці \"Вхідні\". Ви також можете ввести повне ім'я користувача! (наприклад, @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Уподобати допис {name}", "interaction_modal.title.follow": "Підписатися на {name}", "interaction_modal.title.reblog": "Поширити допис {name}", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Створити обліковий запис", "sign_in_banner.sign_in": "Увійти", + "sign_in_banner.sso_redirect": "Увійдіть або зареєструйтесь", "sign_in_banner.text": "Увійдіть, щоб слідкувати за профілями або хештегами, вподобаними, ділитися і відповідати на дописи. Ви також можете взаємодіяти з вашого облікового запису на іншому сервері.", "status.admin_account": "Відкрити інтерфейс модерації для @{name}", "status.admin_domain": "Відкрити інтерфейс модерації для {domain}", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 0004e38486..52d9454d57 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -1,52 +1,73 @@ { "about.blocks": "معتدل سرورز", "about.contact": "رابطہ:", + "about.disclaimer": "میسٹادان مفت، اوپن سورس سافٹ ویئر ہے، اور میسٹادان غیر منافع بخش کا ٹریڈ مارک ہے۔", "about.domain_blocks.no_reason_available": "وجوہات نہیں دستیاب", "about.domain_blocks.silenced.title": "محدود", "about.domain_blocks.suspended.title": "معطل شدہ", + "about.rules": "سرور کے اصول", "account.account_note_header": "نوٹ", "account.add_or_remove_from_list": "فہرست میں شامل یا برطرف کریں", "account.badges.bot": "روبوٹ", "account.badges.group": "گروپ", "account.block": "مسدود @{name}", "account.block_domain": "{domain} سے سب چھپائیں", + "account.block_short": "بلاک", "account.blocked": "مسدود کردہ", "account.browse_more_on_origin_server": "اصل پروفائل پر مزید براؤز کریں", "account.cancel_follow_request": "Withdraw follow request", + "account.direct": "نجی طور پر @{name} کا ذکر کریں", "account.disable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع نہ کریں", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", "account.enable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع کریں", "account.endorse": "مشکص پر نمایاں کریں", + "account.featured_tags.last_status_at": "آخری پوسٹ {date} کو", "account.featured_tags.last_status_never": "کوئی مراسلہ نہیں", + "account.featured_tags.title": "{name} کے نمایاں ہیش ٹیگز", "account.follow": "پیروی کریں", "account.followers": "پیروکار", "account.followers.empty": "\"ہنوز اس صارف کی کوئی پیروی نہیں کرتا\".", "account.followers_counter": "{count, plural,one {{counter} پیروکار} other {{counter} پیروکار}}", + "account.following": "فالو کر رہے ہیں", "account.following_counter": "{count, plural, one {{counter} پیروی کر رہے ہیں} other {{counter} پیروی کر رہے ہیں}}", "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".", "account.follows_you": "آپ کا پیروکار ہے", + "account.go_to_profile": "پروفائل پر جائیں", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", + "account.in_memoriam": "یادگار میں۔", "account.joined_short": "شمولیت", + "account.languages": "سبسکرائب شدہ زبانیں بدلیں", "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی", "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.", "account.media": "وسائل", "account.mention": "ذکر @{name}", + "account.moved_to": "{name} نے اشارہ کیا ہے کہ ان کا نیا اکاؤنٹ اب ہے:", "account.mute": "خاموش @{name}", + "account.mute_notifications_short": "نوٹیفیکیشنز کو خاموش کریں", + "account.mute_short": "خاموش", "account.muted": "خاموش کردہ", + "account.no_bio": "کوئی تفصیل نہیں دی گئی۔", + "account.open_original_page": "اصل صفحہ کھولیں", "account.posts": "ٹوٹ", "account.posts_with_replies": "ٹوٹ اور جوابات", "account.report": "@{name} اطلاع کریں", "account.requested": "منظوری کا منتظر۔ درخواستِ پیروی منسوخ کرنے کیلئے کلک کریں", + "account.requested_follow": "{name} آپ کو فالو کرنا چھاتا ہے۔", "account.share": "@{name} کے مشخص کو بانٹیں", "account.show_reblogs": "@{name} کی افزائشات کو دکھائیں", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "@{name} کو بحال کریں", "account.unblock_domain": "{domain} کو نہ چھپائیں", + "account.unblock_short": "بلاک ختم کریں", "account.unendorse": "مشخص پر نمایاں نہ کریں", "account.unfollow": "پیروی ترک کریں", "account.unmute": "@{name} کو با آواز کریں", + "account.unmute_notifications_short": "نوٹیفیکیشنز کو خاموش نہ کریں", + "account.unmute_short": "کو خاموش نہ کریں", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention.average": "اوسط", + "admin.dashboard.retention.cohort_size": "نئے یسرز", "alert.rate_limited.message": "\"{retry_time, time, medium} کے بعد کوشش کریں\".", "alert.rate_limited.title": "محدود شرح", "alert.unexpected.message": "ایک غیر متوقع سہو ہوا ہے.", @@ -54,7 +75,11 @@ "announcement.announcement": "اعلان", "autosuggest_hashtag.per_week": "{count} فی ہفتہ", "boost_modal.combo": "آئیندہ یہ نہ دیکھنے کیلئے آپ {combo} دبا سکتے ہیں", + "bundle_column_error.error.title": "اوف، نہیں!", + "bundle_column_error.network.title": "نیٹ ورک کی خرابی", "bundle_column_error.retry": "دوبارہ کوشش کریں", + "bundle_column_error.return": "واپس گھر جاؤ", + "bundle_column_error.routing.title": "۴۰۴", "bundle_modal_error.close": "بند کریں", "bundle_modal_error.message": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.", "bundle_modal_error.retry": "دوبارہ کوشش کریں", @@ -64,6 +89,7 @@ "column.community": "مقامی زمانی جدول", "column.directory": "مشخصات کا مطالعہ کریں", "column.domain_blocks": "پوشیدہ ڈومین", + "column.favourites": "پسندیدہ", "column.follow_requests": "پیروی درخواست", "column.home": "خانہ", "column.lists": "فہرستیں", @@ -130,7 +156,6 @@ "conversation.mark_as_read": "بطور پڑھا ہوا دکھائیں", "conversation.open": "گفتگو دیکھیں", "conversation.with": "{names} کے ساتھ", - "copypaste.copy": "کاپی کریں", "directory.federated": "معروف فیڈی ورس سے", "directory.local": "صرف {domain} سے", "directory.new_arrivals": "نئے آنے والے", @@ -165,6 +190,7 @@ "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں", "follow_request.authorize": "اجازت دیں", "follow_request.reject": "انکار کریں", + "footer.about": "متعلق", "getting_started.heading": "آغاز کریں", "hashtag.column_header.tag_mode.all": "اور {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index b6b10b8d1d..9edbcab353 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -172,7 +172,6 @@ "conversation.open": "Suhbatni ko'rish", "conversation.with": "{names} bilan", "copypaste.copied": "Ko‘chirildi", - "copypaste.copy": "Nusxa olish", "directory.federated": "Faqat bilingan fediversdan", "directory.local": "Faqat {domain}dan", "directory.new_arrivals": "Yangi kelganlar", @@ -278,7 +277,6 @@ "interaction_modal.description.reply": "Mastodondagi akkaunt bilan siz ushbu xabarga javob berishingiz mumkin.", "interaction_modal.on_another_server": "Boshqa serverda", "interaction_modal.on_this_server": "Shu serverda", - "interaction_modal.preamble": "Mastodon markazlashtirilmaganligi sababli, boshqa Mastodon serverida joylashgan mavjud hisob qaydnomangizdan yoki bu serverda akkauntingiz bo'lmasa, unga mos platformadan foydalanishingiz mumkin.", "interaction_modal.title.follow": "{name} ga ergashing", "interaction_modal.title.reblog": "{name}ning postini boost qilish", "interaction_modal.title.reply": "{name} postiga javob bering", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 7ed79545fe..a74152e3a7 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -59,7 +59,7 @@ "account.report": "Báo cáo @{name}", "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi", "account.requested_follow": "{name} yêu cầu theo dõi bạn", - "account.share": "Chia sẻ trang @{name}", + "account.share": "Chia sẻ @{name}", "account.show_reblogs": "Hiện tút do @{name} đăng lại", "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", @@ -191,7 +191,6 @@ "conversation.open": "Xem toàn bộ tin nhắn", "conversation.with": "Với {names}", "copypaste.copied": "Đã sao chép", - "copypaste.copy": "Sao chép", "copypaste.copy_to_clipboard": "Sao chép vào bộ nhớ tạm", "directory.federated": "Từ mạng liên hợp", "directory.local": "Từ {domain}", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để nhận những tút của họ trên bảng tin của mình.", "interaction_modal.description.reblog": "Với tài khoản Mastodon, bạn có thể đăng lại tút này để chia sẻ nó với những người đang theo dõi bạn.", "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể bình luận tút này.", + "interaction_modal.login.action": "Đăng nhập ngay", + "interaction_modal.login.prompt": "Địa chỉ máy chủ của bạn, vd: mastodon.social", + "interaction_modal.no_account_yet": "Chưa có tài khoản Mastodon?", "interaction_modal.on_another_server": "Trên một máy chủ khác", "interaction_modal.on_this_server": "Trên máy chủ này", - "interaction_modal.other_server_instructions": "Sao chép và dán URL này vào thanh tìm kiếm của ứng dụng Mastodon hoặc giao diện web máy chủ Mastodon mà bạn hiện dùng.", - "interaction_modal.preamble": "Do Mastodon phi tập trung, bạn có thể sử dụng tài khoản hiện có trên một máy chủ Mastodon khác hoặc một nền tảng tương thích nếu bạn chưa có tài khoản trên máy chủ này.", + "interaction_modal.sign_in": "Bạn chưa đăng nhập. Bạn đã có tài khoản ở máy chủ khác?", + "interaction_modal.sign_in_hint": "Mẹo: Đó là trang web nơi bạn đã đăng ký. Nếu không nhớ, lục lại trong email của bạn. Bạn cũng có thể nhập địa chỉ Mastodon đầy đủ! (vd: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Thích tút của {name}", "interaction_modal.title.follow": "Theo dõi {name}", "interaction_modal.title.reblog": "Đăng lại tút của {name}", @@ -526,22 +528,22 @@ "relative_time.today": "hôm nay", "reply_indicator.cancel": "Hủy bỏ", "report.block": "Chặn", - "report.block_explanation": "Bạn sẽ không thấy tút của họ nữa. Họ cũng không thể theo dõi hoặc thấy tút của bạn. Họ sẽ biết là họ đã bị chặn.", + "report.block_explanation": "Bạn sẽ không còn thấy tút của người này. Họ sẽ không thể thấy tút của bạn hoặc theo dõi bạn. Họ biết là bạn đã chặn họ.", "report.categories.other": "Khác", "report.categories.spam": "Spam", "report.categories.violation": "Vi phạm nội quy máy chủ", - "report.category.subtitle": "Chọn mục gần khớp nhất", - "report.category.title": "Có vấn đề gì với {type}", + "report.category.subtitle": "Chọn lý do phù hợp nhất:", + "report.category.title": "{type} này có vấn đề gì?", "report.category.title_account": "người này", "report.category.title_status": "tút", "report.close": "Xong", - "report.comment.title": "Bạn nghĩ chúng tôi nên biết thêm điều gì?", + "report.comment.title": "Có điều gì mà chúng tôi cần biết không?", "report.forward": "Chuyển đến {target}", "report.forward_hint": "Người này thuộc máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?", "report.mute": "Ẩn", - "report.mute_explanation": "Bạn sẽ không thấy tút của họ nữa. Họ cũng không thể theo dõi hoặc thấy tút của bạn. Họ sẽ không biết là họ đã bị bạn ẩn.", + "report.mute_explanation": "Bạn sẽ không còn thấy tút của người này. Họ vẫn có thể thấy tút của bạn hoặc theo dõi bạn. Họ không biết là bạn đã chặn họ.", "report.next": "Tiếp theo", - "report.placeholder": "Bổ sung thêm", + "report.placeholder": "Thêm lưu ý", "report.reasons.dislike": "Tôi không thích nó", "report.reasons.dislike_description": "Đó không phải là thứ gì mà bạn muốn thấy", "report.reasons.legal": "Vi phạm pháp luật", @@ -558,7 +560,7 @@ "report.statuses.title": "Bạn muốn báo cáo tút nào?", "report.submit": "Gửi đi", "report.target": "Báo cáo {target}", - "report.thanks.take_action": "Đây là một số cách để kiểm soát thứ bạn nhìn thấy trên Mastodon:", + "report.thanks.take_action": "Đây là cách kiểm soát những thứ mà bạn thấy:", "report.thanks.take_action_actionable": "Trong lúc chờ chúng tôi xem xét, bạn có thể áp dụng hành động với @{name}:", "report.thanks.title": "Không muốn xem thứ này?", "report.thanks.title_actionable": "Cảm ơn đã báo cáo, chúng tôi sẽ xem xét kỹ.", @@ -596,6 +598,7 @@ "server_banner.server_stats": "Thống kê:", "sign_in_banner.create_account": "Đăng ký", "sign_in_banner.sign_in": "Đăng nhập", + "sign_in_banner.sso_redirect": "Đăng nhập", "sign_in_banner.text": "Đăng nhập để theo dõi người hoặc hashtag, thích, chia sẻ và trả lời tút. Bạn cũng có thể tương tác từ tài khoản của mình trên một máy chủ khác.", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_domain": "Mở giao diện quản trị @{domain}", @@ -627,7 +630,7 @@ "status.more": "Thêm", "status.mute": "Ẩn @{name}", "status.mute_conversation": "Không quan tâm nữa", - "status.open": "Xem nguyên văn", + "status.open": "Đọc tút", "status.pin": "Ghim lên hồ sơ", "status.pinned": "Tút đã ghim", "status.read_more": "Đọc tiếp", @@ -637,9 +640,9 @@ "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", - "status.replied_to": "{name} viết tiếp", + "status.replied_to": "Trả lời {name}", "status.reply": "Trả lời", - "status.replyAll": "Trả lời người đăng tút", + "status.replyAll": "Trả lời", "status.report": "Báo cáo @{name}", "status.sensitive_warning": "Nhạy cảm", "status.share": "Chia sẻ", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 075643c9eb..f7c7d5f785 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -1,5 +1,5 @@ { - "about.blocks": "被限制的服务器", + "about.blocks": "服务器被限制", "about.contact": "联系方式:", "about.disclaimer": "Mastodon 是自由的开源软件,商标由 Mastodon gGmbH 持有。", "about.domain_blocks.no_reason_available": "原因不可用", @@ -172,7 +172,7 @@ "confirmations.discard_edit_media.confirm": "丢弃", "confirmations.discard_edit_media.message": "您还有未保存的媒体描述或预览修改,仍要丢弃吗?", "confirmations.domain_block.confirm": "屏蔽整个域名", - "confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。", + "confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,对几个特定的用户进行屏蔽或禁用对他们的消息提醒就足够了。屏蔽后,来自该域名的内容将不再出现在你任何的公共时间轴或通知列表里,你来自该域名下的关注者也将被移除。", "confirmations.edit.confirm": "编辑", "confirmations.edit.message": "编辑此消息将会覆盖当前正在撰写的信息。仍要继续吗?", "confirmations.logout.confirm": "退出登录", @@ -191,7 +191,6 @@ "conversation.open": "查看对话", "conversation.with": "与 {names}", "copypaste.copied": "已复制", - "copypaste.copy": "复制", "copypaste.copy_to_clipboard": "复制到剪贴板", "directory.federated": "来自已知联邦宇宙", "directory.local": "仅来自 {domain}", @@ -303,7 +302,7 @@ "home.column_settings.basic": "基本设置", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", - "home.explore_prompt.body": "你的主页动态会推送一系列关注的话题标签和用户,以及转发的嘟文。目前看起来比较清静,不妨试一下:", + "home.explore_prompt.body": "你的主页动态会推送一系列关注的话题标签和用户,以及转发的嘟文。如果你觉得过于清净,不妨试一下:", "home.explore_prompt.title": "这是你在 Mastodon 的主页。", "home.hide_announcements": "隐藏公告", "home.show_announcements": "显示公告", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你可以关注 {name} 并在自己的主页上接收对方的新嘟文。", "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你可以向自己的关注者们转发此嘟文。", "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你可以回复此嘟文。", + "interaction_modal.login.action": "转到主页", + "interaction_modal.login.prompt": "您所入驻的服务器域名,如:mastodon.social", + "interaction_modal.no_account_yet": "不在 Mastodon 上?", "interaction_modal.on_another_server": "在另一服务器", "interaction_modal.on_this_server": "在此服务器", - "interaction_modal.other_server_instructions": "将此URL复制并粘贴到您喜欢的Mastodon应用程序的搜索栏中,或者粘贴到你的Mastodon实例的Web界面中。", - "interaction_modal.preamble": "基于 Mastodon 去中心化的特性,如果你在本站没有账号,也可以使用在另一 Mastodon 服务器或其他兼容平台上的已有账号。", + "interaction_modal.sign_in": "您尚未登录此服务器,您的账号托管在哪?", + "interaction_modal.sign_in_hint": "提示:这是您注册的网站,如果您不记得了,请在邮箱的收件箱中查找欢迎邮件。您还可以输入完整的用户名!(例如 @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "喜欢 {name} 的嘟文", "interaction_modal.title.follow": "关注 {name}", "interaction_modal.title.reblog": "转发 {name} 的嘟文", @@ -596,6 +598,7 @@ "server_banner.server_stats": "服务器统计数据:", "sign_in_banner.create_account": "创建账户", "sign_in_banner.sign_in": "登录", + "sign_in_banner.sso_redirect": "登录或注册", "sign_in_banner.text": "登录关注用户和话题标签,喜欢、分享和回复嘟文。您还可以与其他服务器上的用户进行互动。", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_domain": "打开 {domain} 的管理界面", @@ -667,7 +670,7 @@ "time_remaining.minutes": "剩余 {number, plural, one {# 分钟} other {# 分钟}}", "time_remaining.moments": "即将结束", "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}", - "timeline_hint.remote_resource_not_displayed": "不会显示来自其它服务器的 {resource}", + "timeline_hint.remote_resource_not_displayed": "不会显示来自其它服务器的{resource}", "timeline_hint.resources.followers": "关注者", "timeline_hint.resources.follows": "关注", "timeline_hint.resources.statuses": "更早的嘟文", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 7a7c39d5c7..b2f73f6a06 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -188,7 +188,6 @@ "conversation.open": "檢視對話", "conversation.with": "與 {names}", "copypaste.copied": "已複製", - "copypaste.copy": "複製", "copypaste.copy_to_clipboard": "複製到剪貼簿", "directory.federated": "來自已知的聯盟網絡", "directory.local": "僅來自 {domain}", @@ -301,7 +300,6 @@ "interaction_modal.description.reply": "在 Mastodon 上擁有帳號的話,您可以回覆此帖文。", "interaction_modal.on_another_server": "於不同伺服器", "interaction_modal.on_this_server": "於此伺服器", - "interaction_modal.preamble": "由於 Mastodon 是去中心化的,即使您於此伺服器上沒有帳號,仍可以利用託管於其他 Mastodon 伺服器或相容平台上的既存帳號。", "interaction_modal.title.follow": "追蹤 {name}", "interaction_modal.title.reblog": "轉發 {name} 的帖文", "interaction_modal.title.reply": "回覆 {name} 的帖文", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a13504e23e..df30565263 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -191,7 +191,6 @@ "conversation.open": "檢視對話", "conversation.with": "與 {names}", "copypaste.copied": "已複製", - "copypaste.copy": "複製", "copypaste.copy_to_clipboard": "複製到剪貼簿", "directory.federated": "來自已知聯邦宇宙", "directory.local": "僅來自 {domain} 網域", @@ -303,7 +302,7 @@ "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", - "home.explore_prompt.body": "您的首頁時間軸將由您所跟隨之主題標籤、帳號以及其轉嘟所組成。目前似乎有點空,是否要考慮這些:", + "home.explore_prompt.body": "您的首頁時間軸將由您所跟隨之主題標籤、帳號以及其轉嘟所組成。若目前流速有點慢,您可以考慮以下幾點:", "home.explore_prompt.title": "這是您於 Mastodon 的基地", "home.hide_announcements": "隱藏公告", "home.show_announcements": "顯示公告", @@ -311,10 +310,13 @@ "interaction_modal.description.follow": "在 Mastodon 上有個帳號的話,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。", "interaction_modal.description.reblog": "在 Mastodon 上有個帳號的話,您可以轉嘟此嘟文以分享給您的跟隨者們。", "interaction_modal.description.reply": "在 Mastodon 上有個帳號的話,您可以回覆此嘟文。", + "interaction_modal.login.action": "返回首頁", + "interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social", + "interaction_modal.no_account_yet": "還沒有 Mastodon 帳號嗎?", "interaction_modal.on_another_server": "於不同伺服器", "interaction_modal.on_this_server": "於此伺服器", - "interaction_modal.other_server_instructions": "複製貼上此 URL 至您愛用的 Mastodon 應用程式或您 Mastodon 伺服器網頁介面之搜尋欄。", - "interaction_modal.preamble": "由於 Mastodon 是去中心化的,即便您於此沒有帳號,仍可以利用託管於其他 Mastodon 伺服器或相容平台上的既存帳號。", + "interaction_modal.sign_in": "您未登入於此伺服器。您的帳號是於何方託管呢?", + "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子信箱收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)", "interaction_modal.title.favourite": "將 {name} 之嘟文加入最愛", "interaction_modal.title.follow": "跟隨 {name}", "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文", @@ -596,6 +598,7 @@ "server_banner.server_stats": "伺服器統計:", "sign_in_banner.create_account": "新增帳號", "sign_in_banner.sign_in": "登入", + "sign_in_banner.sso_redirect": "登入或註冊", "sign_in_banner.text": "登入以跟隨個人檔案和主題標籤,或收藏、分享和回覆嘟文。您也可以使用您的帳號在其他伺服器上進行互動。", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_domain": "開啟 {domain} 的管理介面", diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index 505828112f..6f4fe86e3f 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -53,3 +53,7 @@ cs: position: elevated: nemůže být vyšší než vaše aktuální role own_role: nelze změnit s vaší aktuální rolí + webhook: + attributes: + events: + invalid_permissions: nelze zahrnout události, k nimž nemáte práva diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml index 30afb8b079..a303af6247 100644 --- a/config/locales/activerecord.nn.yml +++ b/config/locales/activerecord.nn.yml @@ -53,3 +53,7 @@ nn: position: elevated: kan ikkje vere høgare enn di noverande rolle own_role: kan ikkje endrast med di noverande rolle + webhook: + attributes: + events: + invalid_permissions: kan ikkje inkludere hendingar du ikkje har rettar til diff --git a/config/locales/activerecord.no.yml b/config/locales/activerecord.no.yml index eb1793ca76..5abe3fdc38 100644 --- a/config/locales/activerecord.no.yml +++ b/config/locales/activerecord.no.yml @@ -8,7 +8,7 @@ user: agreement: Tjenesteavtale email: E-postadresse - locale: Landstandard + locale: Språk password: Passord user/account: username: Brukernavn @@ -24,11 +24,11 @@ admin/webhook: attributes: url: - invalid: er ikke en gyldig nettadresse + invalid: er ikke en gyldig lenke doorkeeper/application: attributes: website: - invalid: er ikke en gyldig nettadresse + invalid: er ikke en gyldig lenke import: attributes: data: @@ -53,3 +53,7 @@ position: elevated: kan ikke være høyere enn din nåværende rolle own_role: kan ikke endres med din nåværende rolle + webhook: + attributes: + events: + invalid_permissions: kan ikke inkludere hendelser du ikke har rettigheter til diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 17b13fc7b4..14f9f61f6c 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -53,3 +53,7 @@ ru: position: elevated: не может быть выше, чем ваша текущая роль own_role: невозможно изменить с вашей текущей ролью + webhook: + attributes: + events: + invalid_permissions: нельзя включать события, к которым у вас нет прав diff --git a/config/locales/be.yml b/config/locales/be.yml index bb08532bab..a48fa97e32 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -798,6 +798,7 @@ be: approved: Для рэгістрацыі патрабуецца пацвярджэнне none: Нікому не магчыма зарэгістравацца open: Любому магчыма зарэгістравацца + title: Налады сервера site_uploads: delete: Выдаліць запампаваны файл destroyed_msg: Загрузка сайту паспяхова выдалена! @@ -1314,12 +1315,14 @@ be: bookmarks_html: Вы збіраецеся замяніць свае закладкі на %{total_items} допісаў з файла %{filename}. domain_blocking_html: Вы збіраецеся замяніць свой спіс блакіроўкі даменаў на %{total_items} даменаў з файла %{filename}. following_html: Вы збіраецеся падпісацца на %{total_items} уліковых запісаў з файла %{filename} і адпісацца ад усіх іншых карыстальнікаў. + lists_html: Вы збіраецеся замяніць свае спісы змесцівам з %{filename}. Да %{total_items} уліковых запісаў будуць дададзены ў новыя спісы. muting_html: Вы збіраецеся замяніць свой спіс ігнараваных уліковых запісаў на %{total_items} уліковых запісаў з файла %{filename}. preambles: blocking_html: Вы збіраецеся заблакіраваць да %{total_items} уліковых запісаў з файла%{filename}. bookmarks_html: Вы збіраецеся дадаць да %{total_items} паведамленняў з файла %{filename} у вашы закладкі. domain_blocking_html: Вы збіраецеся заблакіраваць да %{total_items} даменаў з файла %{filename}. following_html: Вы збіраецеся падпісацца на%{total_items} уліковых запісаў з файла %{filename}. + lists_html: Вы збіраецеся дадаць да %{total_items} уліковых запісаў з %{filename} у вашы спісы. Новыя спісы будуць створаны, калі іх няма. muting_html: Вы збіраецеся ігнараваць да %{total_items} уліковых запісаў з файла %{filename}. preface: Вы можаце імпартаваць даныя, экспартаваныя вамі з іншага сервера, напрыклад, спіс людзей, на якіх вы падпісаны або якіх блакуеце. recent_imports: Нядаўнія імпарты @@ -1336,6 +1339,7 @@ be: bookmarks: Імпарт закладак domain_blocking: Імпарт заблакіраваных даменаў following: Імпарт падпісаных уліковых запісаў + lists: Імпартаванне спісаў muting: Імпарт ігнараваных уліковых запісаў type: Тып імпарту type_groups: @@ -1346,6 +1350,7 @@ be: bookmarks: Закладкі domain_blocking: Спіс заблакіраваных даменаў following: Падпіскі + lists: Спісы muting: Спіс ігнаравання upload: Запампаваць invites: diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 84eb59a08e..9637169090 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -5,12 +5,14 @@ bn: contact_missing: নেই contact_unavailable: প্রযোজ্য নয় hosted_on: এই মাস্টাডনটি আছে %{domain} এ + title: পরিচিতি accounts: follow: যুক্ত followers: one: যুক্ত আছে other: যারা যুক্ত হয়েছে following: যুক্ত করা + instance_actor_flash: এই অ্যাকাউন্টটি একটি ভার্চুয়াল সত্তা যা সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও স্বতন্ত্র ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহার করা হয় এবং স্থগিত করা উচিত নয়. last_active: শেষ সক্রিয় ছিল link_verified_on: এই লিংকের মালিকানা শেষ চেক করা হয় %{date} তারিখে nothing_here: এখানে কিছুই নেই! @@ -31,21 +33,32 @@ bn: accounts: add_email_domain_block: নিষিদ্ধ করা ই-মেইল ডোমেইন approve: অনুমোদন দিন + approved_msg: "%{username}-এর অ্যাকাউন্ট সৃষ্টি আবেদন সফলভাবে অনুমোদিত হয়েছে" are_you_sure: আপনি কি নিশ্চিত ? avatar: অবতার by_domain: ওয়েবসাইট/কার্যক্ষেত্র change_email: + changed_msg: ইমেল সফলভাবে পরিবর্তিত হয়েছে! current_email: এখনকার ইমেইল label: ইমেইল পরিবর্তন new_email: নতুন ইমেইল submit: ইমেইল পরিবর্তন title: "%{username} এর ইমেইল পরিবর্তন" + change_role: + changed_msg: ভূমিকা সফলভাবে পরিবর্তিত! + label: ভূমিকা পরিবর্তন করুন + no_role: কোন ভূমিকা বরাদ্দ করা হয়নি + title: "%{username}-এর ভূমিকা পরিবর্তন করুন" confirm: নিশ্চিত করুন confirmed: নিশ্চিত হয়েছে confirming: নিশ্চিত করা হচ্ছে + custom: বিশেষ + delete: ডেটা মুছুন deleted: মুছে ফেলা হয়েছে demote: নিচের পদে দিন + destroyed_msg: "%{username}-এর ডেটা এখন সারিবদ্ধভাবে মুছে ফেলা হবে" disable: বন্ধ করুন + disable_sign_in_token_auth: ই-মেইল টোকেন প্রমাণীকরণ অক্ষম করুন disable_two_factor_authentication: দুই পদ্ধতির প্রমাণীকরণ(2FA) বন্ধ করুন disabled: বন্ধ করা হয়েছে display_name: দেখানোর জন্য নাম @@ -54,11 +67,14 @@ bn: email: ইমেইল email_status: ইমেইলের অবস্থা enable: চালু করুন + enable_sign_in_token_auth: ই-মেইল টোকেন প্রমাণীকরণ সক্ষম করুন enabled: চালু করুন + enabled_msg: "%{username}-এর অ্যাকাউন্ট সফলভাবে আনফ্রোজ করা হয়েছে" followers: অনুসরকারীরা follows: অনুসরণ করে header: শিরোলেখা inbox_url: চিঠি পাওয়ার বক্স লিংক + invite_request_text: যোগদানের কারণ invited_by: আমন্ত্রণ করেছে ip: আইপি(IP) joined: যোগ দিয়েছে diff --git a/config/locales/br.yml b/config/locales/br.yml index d2c24cb383..24d934fdeb 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -289,8 +289,10 @@ br: view_status: Gwelet ar c'hannad auth: delete_account: Dilemel ar gont + delete_account_html: Ma fell deoc'h dilemel ho kont e c'hellit klikañ amañ. Goulennet e vo ganeoc'h kadarnaat an obererezh. login: Mont tre logout: Digennaskañ + migrate_account_html: Ma fell deoc'h adkas ar gont-mañ war-zu unan all e c'hellit arventenniñ an dra-se amañ. providers: cas: CAS saml: SAML @@ -390,6 +392,8 @@ br: table: uses: Implijoù title: Pediñ tud + migrations: + incoming_migrations_html: Evit dilojañ ur gont all da homañ e rankit sevel un alias da gentañ. moderation: title: Habaskadur notification_mailer: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 519670864b..a8d67e8e4d 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -448,7 +448,7 @@ ca: no_file: No s'ha seleccionat cap fitxer export_domain_blocks: import: - description_html: Estàs a punt d'importar una llista de dominis blocats. Si us plau, revisa aquesta llista amb molta cura, especialment si no l'has creada tu mateix. + description_html: Esteu a punt d'importar una llista de dominis blocats. Reviseu aquesta llista amb molta cura, especialment si no l'heu creada vós mateix. existing_relationships_warning: Relacions de seguiment existents private_comment_description_html: 'Per a ajudar-te a fer un seguiment d''on provenen els bloquejos importats, es crearan amb el següent comentari privat: %{comment}' private_comment_template: Importar des de %{source} el %{date} @@ -458,7 +458,7 @@ ca: title: Importa dominis bloquejats no_file: No s'ha seleccionat cap fitxer follow_recommendations: - description_html: "Seguir les recomanacions ajuda als nous usuaris a trobar ràpidament contingut interessant. Quan un usuari no ha interactuat prou amb d'altres com per a formar a qui seguir personalment, aquests comptes li seran recomanats. Es recalculen a diari a partir d'una barreja de comptes amb els compromisos recents més alts i el nombre més alt de seguidors locals per a un idioma determinat." + description_html: "Seguir les recomanacions ajuda als nous usuaris a trobar ràpidament contingut interessant. Quan un usuari no ha interactuat prou amb altres per a formar a qui seguir personalment, aquests comptes li seran recomanats. Es recalculen diàriament a partir d'una barreja de comptes amb els compromisos recents més alts i el nombre més alt de seguidors locals per a un idioma determinat." language: Per idioma status: Estat suppress: Suprimeix les recomanacions de seguiment @@ -813,9 +813,9 @@ ca: appeal_rejected: Apel·lació rebutjada system_checks: database_schema_check: - message_html: Hi ha pendents migracions de la base de dades. Si us plau executa-les per a assegurar que l'aplicació es comporta com s'espera + message_html: Hi ha pendents migracions de la base de dades. Executeu-les per a assegurar que l'aplicació es comporta com s'espera elasticsearch_running_check: - message_html: No s'ha pogut connectar a Elasticsearch. Si us plau verifica que estigui funcionant o desactiva la cerca de text complet + message_html: No s'ha pogut connectar a Elasticsearch. Verifiqueu que funciona o desactiveu la cerca de text complet elasticsearch_version_check: message_html: 'Versió incompatible de Elasticsearch: %{value}' version_comparison: Elasticsearch %{running_version} està funcionant mentre %{required_version} és requerida @@ -823,7 +823,7 @@ ca: action: Gestiona les normes del servidor message_html: No has definit cap norma del servidor. sidekiq_process_check: - message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Si us plau revisa la teva configuració de Sidekiq + message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Reviseu la configuració de Sidekiq upload_check_privacy_error: action: Consulta aquí per a més informació message_html: "El teu servidor no està ben configurat. La privacitat dels teus usuaris està en risc." @@ -1094,7 +1094,7 @@ ca: proceed: Elimina el compte success_msg: El compte s'ha eliminat correctament warning: - before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:' + before: 'Abans de procedir, llegiu amb cura aquestes notes:' caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir data_removal: Els teus tuts i altres dades seran permanentment eliminades email_change_html: Pots canviar la teva adreça de correu electrònic sense eliminar el teu compte @@ -1244,7 +1244,7 @@ ca: today: avui validation_errors: one: Alguna cosa no va bé! Si us plau, revisa l'error - other: Alguna cosa no va bé! Si us plau, revisa %{count} errors més a baix + other: Alguna cosa no va bé! Reviseu els %{count} errors següents imports: errors: empty: Fitxer CSV buit @@ -1366,7 +1366,7 @@ ca: cancelled_msg: Redirecció cancel·lada amb èxit. errors: already_moved: és el mateix compte al que ja t'has mogut - missing_also_known_as: no fa referencia a aquest compte + missing_also_known_as: no fa referència a aquest compte move_to_self: no pot ser el compte actual not_found: podria no ser trobat on_cooldown: Estàs en temps de refredament @@ -1383,7 +1383,7 @@ ca: set_redirect: Ajusta la redirecció warning: backreference_required: El compte nou primer ha de ser configurat per a referenciar aquest - before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:' + before: 'Abans de procedir, llegiu amb cura aquestes notes:' cooldown: Després de moure't hi ha un període de recuperació durant el qual no seràs capaç de moure't un altre cop disabled_account: El teu compte actual no serà plenament utilitzable després. Tanmateix, tindràs accés a exportació de dades així com reactivació. followers: Aquesta acció mourà tots els seguidors des de l'actual al compte nou @@ -1791,5 +1791,5 @@ ca: nickname_hint: Introdueix el sobrenom de la teva clau de seguretat nova not_enabled: Encara no has activat WebAuthn not_supported: Aquest navegador no suporta claus de seguretat - otp_required: Per emprar claus de seguretat si us plau activa primer l'autenticació de dos factors. + otp_required: Per a usar claus de seguretat, activeu primer l'autenticació de dos factors. registered_on: Registrat en %{date} diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 7cb2ba2225..12873fafc1 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -845,7 +845,7 @@ cy: language: Iaith media: title: Cyfryngau - metadata: Metaddata + metadata: Metadata no_status_selected: Heb newid postiad gan na ddewiswyd dim un open: Agor postiad original_status: Postiad gwreiddiol @@ -1049,7 +1049,7 @@ cy: notification_preferences: Newid gosodiadau e-bost salutation: "%{name}," settings: 'Newid gosodiadau e-bost: %{link}' - unsubscribe: Datdanysgrifio + unsubscribe: Dad-danysgrifio view: 'Gweld:' view_profile: Gweld proffil view_status: Gweld postiad @@ -1321,7 +1321,7 @@ cy: 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. - cancel: Diddymu + cancel: Canslo changes_saved_msg: Llwyddwyd i gadw'r newidiadau! confirm: Cadarnhau copy: Copïo @@ -1365,12 +1365,14 @@ cy: bookmarks_html: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{total_items} o bostiadau gan %{filename} . domain_blocking_html: Rydych ar fin amnewid eich rhestr rhwystro parth gyda hyd at %{total_items} parth o %{filename} . following_html: Rydych ar fin dilyn hyd at %{total_items} o gyfrifon o %{filename} a pheidio a ddilyn unrhyw un arall . + lists_html: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename} . Bydd hyd at %{total_items} o gyfrifon yn cael eu hychwanegu at restrau newydd. muting_html: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{total_items} o gyfrifon o %{filename} . preambles: blocking_html: Rydych ar fin rhwystro hyd at %{total_items} o gyfrifon o %{filename} . bookmarks_html: Rydych ar fin ychwanegu hyd at %{total_items} o bostiadau o %{filename} at eich nodau tudalen . domain_blocking_html: Rydych ar fin rhwystro hyd at %{total_items} parth o %{filename} . following_html: Rydych ar fin dilyn hyd at %{total_items} cyfrif gan %{filename} . + lists_html: Rydych ar fin ychwanegu hyd at %{total_items} o gyfrifon o %{filename} at eich rhestrau . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. muting_html: Rydych ar fin tewi hyd at %{total_items} cyfrif o %{filename} . preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio. recent_imports: Mewnforion diweddar @@ -1387,6 +1389,7 @@ cy: bookmarks: Mewnforio nodau tudalen domain_blocking: Mewnforio parthau sydd wedi'u rhwystro following: Mewnforio cyfrifon yn cael eu dilyn + lists: Mewnforio rhestrau muting: Mewnforio cyfrifon wedi'u tewi type: Math o fewnforion type_groups: @@ -1397,6 +1400,7 @@ cy: bookmarks: Llyfrnodau domain_blocking: Rhestr rhwystro parth following: Rhestr ddilynion + lists: Rhestrau muting: Rhestr tewi upload: Llwytho invites: @@ -1453,7 +1457,7 @@ cy: reblog: e-bost hysbysu hybu resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio o'ch gosodiadau hysbysiadau e-bost . success_html: Os nad ydych bellach yn derbyn %{type} Mastodon %{domain} i'ch e-bost %{email}. - title: Datdanysgrifio + title: Dad-danysgrifio media_attachments: validations: images_and_video: Methu atodi fideo i bostiad sydd eisoes yn cynnwys delweddau @@ -1679,7 +1683,7 @@ cy: migrate: Mudo cyfrif notifications: Hysbysiadau preferences: Dewisiadau - profile: Proffil + profile: Proffil cyhoeddus relationships: Yn dilyn a dilynwyr statuses_cleanup: Dileu postiadau'n awtomatig strikes: Rhybuddion cymedroli diff --git a/config/locales/de.yml b/config/locales/de.yml index 9b9d9eea65..219231a514 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -200,10 +200,10 @@ de: destroy_user_role: Rolle entfernen disable_2fa_user: 2FA deaktivieren disable_custom_emoji: Eigenes Emoji deaktivieren - disable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für diesen Account deaktivieren + disable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für dieses Konto deaktivieren disable_user: Benutzer*in deaktivieren enable_custom_emoji: Eigenes Emoji aktivieren - enable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für diesen Account aktivieren + enable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für dieses Konto aktivieren enable_user: Benutzer*in aktivieren memorialize_account: Gedenkkonto promote_user: Benutzer*in hochstufen @@ -348,7 +348,7 @@ de: interactions: Interaktionen media_storage: Medien new_users: neue Profile - opened_reports: ungelöste Meldungen + opened_reports: eingereichte Meldungen pending_appeals_html: one: "%{count} ausstehender Einspruch" other: "%{count} ausstehende Einsprüche" @@ -361,7 +361,7 @@ de: pending_users_html: one: "%{count} unerledigte*r Benutzer*in" other: "%{count} unerledigte Benutzer*innen" - resolved_reports: erledigte Meldungen + resolved_reports: geklärte Meldungen software: Programme sources: Registrierungsort space: Speicherplatz @@ -501,7 +501,7 @@ de: instance_follows_measure: deren Follower hier instance_languages_dimension: Häufigste Sprachen instance_media_attachments_measure: deren Medien hier im Cache - instance_reports_measure: Meldungen zu deren Accounts + instance_reports_measure: Meldungen zu deren Konten instance_statuses_measure: deren Beiträge hier im Cache delivery: all: Alle @@ -591,8 +591,8 @@ de: resolve_description_html: Es wird keine Maßnahme gegen das gemeldete Konto ergriffen und der Vorgang wird nicht aufgezeichnet – die Meldung wird hiermit geschlossen. silence_description_html: Das Konto wird nur für diejenigen sichtbar sein, die dem Konto bereits folgen oder es manuell suchen, was die Reichweite stark einschränkt. Kann jederzeit rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen. suspend_description_html: Das Konto und alle Inhalte werden unzugänglich und ggf. gelöscht. Eine Interaktion mit dem Konto wird unmöglich. Dies kann innerhalb von 30 Tagen rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen. - actions_description_html: Entscheide, welche Maßnahmen zur Lösung dieses Berichts zu ergreifen sind. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an diese gesendet, außer wenn die Spam-Kategorie ausgewählt ist. - actions_description_remote_html: Entscheide, welche Maßnahmen du zur Lösung dieser Meldungen ergreifen möchtest. Dies wirkt sich lediglich darauf aus, wie dein Server mit diesem externen Konto kommuniziert und dessen Inhalt handhabt. + actions_description_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an dieses gesendet, außer wenn die Spam-Kategorie ausgewählt ist. + actions_description_remote_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Dies wirkt sich lediglich darauf aus, wie dein Server mit diesem externen Konto kommuniziert und dessen Inhalt handhabt. add_to_report: Meldung ergänzen are_you_sure: Bist du dir sicher? assign_to_self: Mir zuweisen @@ -610,31 +610,31 @@ de: delete_and_resolve: Beiträge löschen forwarded: Weitergeleitet forwarded_to: Weitergeleitet an %{domain} - mark_as_resolved: Als gelöst markieren + mark_as_resolved: Als geklärt markieren mark_as_sensitive: Mit einer Inhaltswarnung versehen - mark_as_unresolved: Als ungelöst markieren + mark_as_unresolved: Als ungeklärt markieren no_one_assigned: Niemand notes: create: Notiz hinzufügen - create_and_resolve: Mit Notiz wieder lösen + create_and_resolve: Mit Notiz als geklärt markieren create_and_unresolve: Mit Notiz wieder öffnen delete: Löschen placeholder: Bitte beschreibe, welche Maßnahmen bzw. Sanktionen ergriffen worden sind, und führe alles auf, was es Erwähnenswertes zu diesem Profil zu berichten gibt … title: Notizen notes_description_html: Notiz an dich und andere Moderator*innen hinterlassen - processed_msg: 'Meldung #%{id} erfolgreich bearbeitet' - quick_actions_description_html: 'Eine schnelle Aktion ausführen oder nach unten rolle, um gemeldete Inhalte zu sehen:' + processed_msg: Meldung Nr. %{id} erfolgreich bearbeitet + 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" reported_account: Gemeldetes Konto reported_by: Gemeldet von - resolved: Gelöst + resolved: Geklärt resolved_msg: Meldung erfolgreich geklärt! skip_to_actions: Zur Maßnahme springen status: Status statuses: Gemeldeter Inhalt - statuses_description_html: Störende Inhalte werden in der Kommunikation mit dem gemeldeten Konto zitiert + statuses_description_html: Beanstandete Inhalte werden in der Kommunikation mit dem gemeldeten Konto erwähnt summary: action_preambles: delete_html: 'Du bist dabei, einige Beiträge von @%{acct} zu entfernen. Dies wird:' @@ -642,22 +642,22 @@ de: silence_html: 'Du bist dabei, das Konto von @%{acct} einzuschränken. Dies wird:' suspend_html: 'Du bist dabei, das Konto von @%{acct} zu sperren. Dies wird:' actions: - delete_html: Die anstößigen Beiträge entfernen - mark_as_sensitive_html: Medien der anstößigen Beiträge mit einer Inhaltswarnung versehen + delete_html: Die beanstandeten Beiträge entfernen + mark_as_sensitive_html: Medien der beanstandeten Beiträge mit einer Inhaltswarnung versehen silence_html: Schränkt die Reichweite von @%{acct} stark ein, indem das Profil und dessen Inhalte nur für Personen sichtbar sind, die dem Profil bereits folgen oder es manuell aufrufen suspend_html: "@%{acct} sperren, sodass das Profil und dessen Inhalte nicht mehr zugänglich sind und keine Interaktion mehr möglich ist" - close_report: Meldung Nr. %{id} als erledigt markieren - close_reports_html: "Alle Meldungen gegen @%{acct} als erledigt markieren" - delete_data_html: Das Profil und die Inhalte von @%{acct} werden in 30 Tagen gelöscht, es sei denn, sie werden in der Zwischenzeit entsperrt + close_report: Meldung Nr. %{id} als geklärt markieren + close_reports_html: "Alle Meldungen gegen @%{acct} als geklärt markieren" + delete_data_html: Das Profil und die Inhalte von @%{acct} in 30 Tagen löschen, es sei denn, das Konto wird in der Zwischenzeit entsperrt preview_preamble_html: "@%{acct} wird eine Warnung mit folgenden Inhalten erhalten:" - record_strike_html: Einen Verstoß gegen @%{acct} eintragen, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können - send_email_html: "@%{acct} eine Verwarnung per E-Mail senden" - warning_placeholder: Optional zusätzliche Begründung für die Moderationsmaßnahme. + record_strike_html: Einen Verstoß gegen @%{acct} vermerken, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können + send_email_html: "@%{acct} eine Warnung per E-Mail senden" + warning_placeholder: "(Optional) Zusätzliche Begründung für die Moderationsaktion." target_origin: Domain des gemeldeten Kontos title: Meldungen unassign: Zuweisung aufheben unknown_action_msg: 'Unbekannte Aktion: %{action}' - unresolved: Ungelöst + unresolved: Ungeklärt updated_at: Aktualisiert view_profile: Profil anzeigen roles: @@ -754,7 +754,7 @@ de: preamble: Das Auffinden interessanter Inhalte ist wichtig, um neue Nutzer einzubinden, die Mastodon noch nicht kennen. Bestimme, wie verschiedene Suchfunktionen auf deinem Server funktionieren. profile_directory: Profilverzeichnis public_timelines: Öffentliche Timeline - publish_discovered_servers: Publish discovered servers + publish_discovered_servers: Entdeckte Server offenlegen publish_statistics: Statistiken veröffentlichen title: Entdecken trends: Trends @@ -943,7 +943,7 @@ de: new_report: body: "%{reporter} hat %{target} gemeldet" body_remote: Jemand von %{domain} hat %{target} gemeldet - subject: Neue Meldung auf %{instance} (#%{id}) + subject: Neue Meldung auf %{instance} (Nr. %{id}) new_trends: body: 'Die folgenden Einträge müssen überprüft werden, bevor sie öffentlich angezeigt werden können:' new_trending_links: @@ -959,9 +959,9 @@ de: add_new: Alias erstellen created_msg: Neuer Alias erfolgreich erstellt. Du kannst nun den Umzug vom alten zum neuen Konto starten. deleted_msg: Der Alias wurde erfolgreich entfernt. Aus jenem Konto zu diesem zu verschieben, ist nicht mehr möglich. - empty: Du hast keine Aliase. - hint_html: Wenn du von einem anderen Konto auf dieses umziehen möchtest, dann kannst du hier einen Alias erstellen, der erforderlich ist, um deine Follower vom alten Konto auf dieses zu migrieren. Diese Aktion ist harmlos und wi­der­ruf­lich. Die Kontenmigration wird vom alten Konto aus eingeleitet. - remove: Alle Aliase aufheben + empty: Du hast keine Aliasse. + hint_html: Wenn du von einem anderen Konto auf dieses umziehen möchtest, dann kannst du hier einen Alias erstellen, der erforderlich ist, um deine Follower vom alten Konto auf dieses zu migrieren. Diese Aktion ist harmlos und wi­der­ruf­lich. Der Kontoumzug wird vom alten Konto aus eingeleitet. + remove: Alle Aliasse aufheben appearance: advanced_web_interface: Erweitertes Webinterface advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, kannst du mit dem erweiterten Webinterface weitere Spalten hinzufügen und dadurch mehr Informationen auf einmal sehen, z. B. deine Startseite, die Mitteilungen, die föderierte Timeline sowie beliebig viele deiner Listen und Hashtags. @@ -1018,7 +1018,7 @@ de: privacy_policy_agreement_html: Ich habe die Datenschutzerklärung gelesen und stimme ihr zu progress: confirm: E-Mail-Adresse bestätigen - details: Deine Details + details: Deine Daten review: Unsere Überprüfung rules: Regeln akzeptieren providers: @@ -1050,7 +1050,7 @@ de: sign_up: manual_review: Registrierungen für den Server %{domain} werden manuell durch unsere Moderator*innen überprüft. Um uns dabei zu unterstützen, schreibe etwas über dich und sage uns, weshalb du ein Konto auf %{domain} anlegen möchtest. preamble: Mit einem Konto auf diesem Mastodon-Server kannst du jeder anderen Person im Netzwerk folgen, unabhängig davon, wo ihr Konto registriert ist. - title: Okay, lass uns mit %{domain} anfangen. + title: Okay, lass uns dein Konto auf %{domain} einrichten. status: account_status: Kontostatus confirming: Auf die Bestätigung deiner E-Mail-Adresse wird gewartet. @@ -1094,7 +1094,7 @@ de: proceed: Konto löschen success_msg: Dein Konto wurde erfolgreich gelöscht warning: - before: 'Bevor du fortfährst, lies bitte diese Punkte sorgfältig durch:' + before: 'Bevor du fortfährst, lies bitte diese Hinweise sorgfältig durch:' caches: Inhalte, die von anderen Servern zwischengespeichert wurden, können fortbestehen data_removal: Deine Beiträge und alle anderen Daten werden für immer entfernt email_change_html: Du kannst deine E-Mail-Adresse ändern, ohne dein Konto zu löschen @@ -1127,7 +1127,7 @@ de: delete_statuses: Beitragsentfernung disable: Konto einfrieren mark_statuses_as_sensitive: Beiträge mit einer Inhaltswarnung versehen - none: Verwarnung + none: Warnung sensitive: Profil mit einer Inhaltswarnung versehen silence: Kontobeschränkung suspend: Kontosperre @@ -1335,10 +1335,10 @@ de: sign_in_token: E-Mail-Sicherheitscode webauthn: Sicherheitsschlüssel description_html: Wenn du verdächtige Aktivitäten bemerkst, die du nicht verstehst oder zuordnen kannst, solltest du dringend dein Passwort ändern und ungeachtet dessen die Zwei-Faktor-Authentisierung (2FA) aktivieren. - empty: Kein Authentisierungsverlauf verfügbar - failed_sign_in_html: Fehler beim Anmeldeversuch mit %{method} von %{ip} (%{browser}) - successful_sign_in_html: Erfolgreiche Anmeldung mit %{method} von %{ip} (%{browser}) - title: Authentisierungsverlauf + empty: Kein Anmeldeverlauf verfügbar + failed_sign_in_html: Fehlgeschlagener Anmeldeversuch mit %{method} von %{ip} (%{browser}) + successful_sign_in_html: Erfolgreiches Anmelden mit %{method} von %{ip} (%{browser}) + title: Anmeldeverlauf mail_subscriptions: unsubscribe: action: Ja, abbestellen @@ -1366,7 +1366,7 @@ de: cancelled_msg: Die Weiterleitung wurde erfolgreich beendet. errors: already_moved: ist das gleiche Konto, zu dem du bereits umgezogen bist - missing_also_known_as: referenziert nicht zurück auf dieses Konto + missing_also_known_as: ist kein Alias für dieses Konto move_to_self: darf nicht das aktuelles Konto sein not_found: konnte nicht gefunden werden on_cooldown: Die Abklingzeit läuft gerade @@ -1565,7 +1565,7 @@ de: settings: account: Konto account_settings: Kontoeinstellungen - aliases: Kontoaliase + aliases: Konto-Aliasse appearance: Design authorized_apps: Autorisierte Anwendungen back: Zurück zu Mastodon @@ -1728,11 +1728,11 @@ de: spam: Spam violation: Inhalt verstößt gegen die folgenden Serverregeln explanation: - delete_statuses: Einige deiner Beiträge wurden als Verstoß gegen eine oder mehrere Serverregeln erkannt und von den Moderator*innen von %{instance} entfernt. + delete_statuses: Einige deiner Beiträge haben gegen eine oder mehrere Serverregeln verstoßen und wurden daher von den Moderator*innen von %{instance} entfernt. disable: Du kannst dein Konto nicht mehr verwenden, aber dein Profil und deine anderen Daten bleiben erhalten. Du kannst eine Sicherung deiner Daten anfordern, die Kontoeinstellungen ändern oder dein Konto löschen. - mark_statuses_as_sensitive: Ein oder mehrere deiner Beiträge wurden von den Moderator*innen von %{instance} mit einer Inhaltswarnung versehen. Das bedeutet, dass Besucher*innen diese Medien in den Beiträgen zunächst antippen müssen, um die Vorschau anzuzeigen. Beim Verfassen der nächsten Beiträge kannst du auch selbst eine Inhaltswarnung für hochgeladene Medien festlegen. + mark_statuses_as_sensitive: Ein oder mehrere deiner Beiträge wurden von den Moderator*innen von %{instance} mit einer Inhaltswarnung versehen. Das bedeutet, dass die Medien in den Beiträgen erst angeklickt werden müssen, bevor sie angezeigt werden. Beim Verfassen der nächsten Beiträge kannst du auch selbst eine Inhaltswarnung für hochgeladene Medien festlegen. sensitive: Von nun an werden alle deine hochgeladenen Medieninhalte mit einer Inhaltswarnung versehen und hinter einer Warnung versteckt. - silence: Du kannst dein Konto weiterhin verwenden, aber nur Personen, die dir bereits folgen, sehen deine Beiträge auf diesem Server. Ebenso kannst du von verschiedenen Entdeckungsfunktionen ausgeschlossen werden. Andere können dir jedoch weiterhin manuell folgen. + silence: Du kannst dein Konto weiterhin verwenden, aber nur Personen, die dir bereits folgen, sehen deine Beiträge auf diesem Server. Ebenso kannst du aus verschiedenen Suchfunktionen ausgeschlossen werden. Andere können dir jedoch weiterhin manuell folgen. suspend: Du kannst dein Konto nicht mehr verwenden und dein Profil und andere Daten sind nicht mehr verfügbar. Du kannst dich immer noch anmelden, um eine Sicherung deiner Daten anzufordern, bis die Daten innerhalb von 30 Tagen vollständig gelöscht wurden. Allerdings werden wir einige Daten speichern, um zu verhindern, dass du die Sperrung umgehst. reason: 'Begründung:' statuses: 'Betroffene Beiträge:' @@ -1770,7 +1770,7 @@ de: seamless_external_login: Du bist über einen externen Dienst angemeldet, daher sind Passwort- und E-Mail-Einstellungen nicht verfügbar. signed_in_as: 'Angemeldet als:' verification: - extra_instructions_html: Tipp: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. + extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. here_is_how: So funktioniert's hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt und zeigen einen visuellen Hinweis an." instructions_html: Kopiere und füge den untenstehenden Code in das HTML deiner Website ein. Füge anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil hinzu und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index a724dae193..6ebdafb9ec 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -24,7 +24,7 @@ ca: action_with_app: Confirma i torna a %{app} explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic d'activar-lo. Si no ho has fet tu, ignora aquest correu electrònic. explanation_when_pending: Has sol·licitat una invitació a %{host} amb aquesta adreça-e. Revisarem la sol·licitud quan la confirmis. Pots iniciar la sessió per canviar els detalls o eliminar el compte, però no pots accedir a la majoria de les funcions fins que s'hagi aprovat. Si es rebutja la sol·licitud, les teves dades s’eliminaran, de manera que no se t’exigirà cap acció més. Si tu no has fet aquesta sol·licitud, ignora aquest correu-e. - extra_html: Si us plau, consulta també a les regles del servidor i a les nostres condicions de servei. + extra_html: Consulteu també a les regles del servidor i a les nostres condicions de servei. subject: 'Mastodon: Instruccions de confirmació de %{instance}' title: Verifica l'adreça-e email_changed: diff --git a/config/locales/doorkeeper.be.yml b/config/locales/doorkeeper.be.yml index 3166f7b20c..4524dd707e 100644 --- a/config/locales/doorkeeper.be.yml +++ b/config/locales/doorkeeper.be.yml @@ -127,6 +127,7 @@ be: bookmarks: Закладкі conversations: Размовы crypto: Скразное шыфраванне + favourites: Упадабанае filters: Фільтры follow: Падпіскі, ігнараванне і блакіроўка follows: Падпіскі @@ -169,6 +170,7 @@ be: read:accounts: бачыць інфармацыю аб уліковых запісах read:blocks: бачыць свае блакіроўкі read:bookmarks: бачыць свае закладкі + read:favourites: бачыць сваё упадабанае read:filters: бачыць свае фільтры read:follows: бачыць свае падпіскі read:lists: бачыць свае спісы @@ -182,6 +184,7 @@ be: write:blocks: блакіраваць уліковыя запісы і дамены write:bookmarks: закладкі допісаў write:conversations: ігнараваць і выдаляць размовы + write:favourites: упадабаныя допісы write:filters: ствараць фільтры write:follows: Сачыць за людзьмі write:lists: ствараць спiсы diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml index d4c694d587..9706f3db70 100644 --- a/config/locales/doorkeeper.ca.yml +++ b/config/locales/doorkeeper.ca.yml @@ -150,11 +150,11 @@ ca: admin:read: llegeix totes les dades en el servidor admin:read:accounts: llegir informació confidencial de tots els comptes admin:read:canonical_email_blocks: llegeix informació sensible de tots els blocs canònics de correu-e - admin:read:domain_allows: llegeix informació sensible de tots els dominis permesos - admin:read:domain_blocks: llegeix informació sensible de tots els blocs de domini - admin:read:email_domain_blocks: llegeix informació sensible de tots els blocs de domini de correu-e - admin:read:ip_blocks: llegeix informació sensible de tots els blocs d'IP - admin:read:reports: llegir informació confidencial de tots els informes i comptes reportats + admin:read:domain_allows: llegeix informació confidencial de tots els dominis permesos + admin:read:domain_blocks: llegeix informació confidencial de tots els blocs de domini + admin:read:email_domain_blocks: llegeix informació confidencial de tots els blocs de domini de correu-e + admin:read:ip_blocks: llegeix informació confidencial de tots els blocs d'IP + admin:read:reports: llegeix informació confidencial de tots els informes i comptes reportats admin:write: modificar totes les dades en el servidor admin:write:accounts: fer l'acció de moderació en els comptes admin:write:canonical_email_blocks: executa accions de moderació en blocs canònics de correu-e diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index 49d7acad66..ba2100edfd 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -127,6 +127,7 @@ cs: bookmarks: Záložky conversations: Konverzace crypto: End-to-end šifrování + favourites: Oblíbené filters: Filtry follow: Sledování, ztlumení a blokování follows: Sledovaní @@ -169,6 +170,7 @@ cs: read:accounts: vidět informace o účtech read:blocks: vidět vaše blokace read:bookmarks: vidět vaše záložky + read:favourites: zobrazit vaše oblíbené read:filters: vidět vaše filtry read:follows: vidět vaše sledování read:lists: vidět vaše seznamy @@ -182,6 +184,7 @@ cs: write:blocks: blokovat účty a domény write:bookmarks: přidávat příspěvky do záložek write:conversations: skrývat a mazat konverzace + write:favourites: oblíbené příspěvky write:filters: vytvářet filtry write:follows: sledovat lidi write:lists: vytvářet seznamy diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index 76f5eace7c..4d91b74af4 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -127,6 +127,7 @@ es-MX: bookmarks: Marcadores conversations: Conversaciones crypto: Cifrado de extremo a extremo + favourites: Favoritos filters: Filtros follow: Seguimientos, silenciados y bloqueos follows: Seguidos @@ -169,6 +170,7 @@ es-MX: read:accounts: ver información de cuentas read:blocks: ver a quién has bloqueado read:bookmarks: ver tus marcadores + read:favourites: ver tus favoritos read:filters: ver tus filtros read:follows: ver a quién sigues read:lists: ver tus listas @@ -182,6 +184,7 @@ es-MX: write:blocks: bloquear cuentas y dominios write:bookmarks: guardar estados como marcadores write:conversations: silenciar y eliminar conversaciones + write:favourites: marcar publicaciones como favoritas write:filters: crear filtros write:follows: seguir usuarios write:lists: crear listas diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 0a7382a245..002f813b32 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -127,6 +127,7 @@ es: bookmarks: Marcadores conversations: Conversaciones crypto: Cifrado de extremo a extremo + favourites: Favoritos filters: Filtros follow: Seguimientos, silenciados y bloqueos follows: Seguidos @@ -169,6 +170,7 @@ es: read:accounts: ver información de cuentas read:blocks: ver a quién has bloqueado read:bookmarks: ver tus marcadores + read:favourites: ver tus favoritos read:filters: ver tus filtros read:follows: ver a quién sigues read:lists: ver tus listas @@ -182,6 +184,7 @@ es: write:blocks: bloquear cuentas y dominios write:bookmarks: guardar publicaciones como marcadores write:conversations: silenciar y eliminar conversaciones + write:favourites: marcar publicaciones como favoritas write:filters: crear filtros write:follows: seguir usuarios write:lists: crear listas diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index 594b6e27b0..66dd0f9093 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -127,6 +127,7 @@ nn: bookmarks: Bokmerke conversations: Samtalar crypto: Ende-til-ende-kryptering + favourites: Favorittar filters: Filter follow: Dei du fylgjer, målbind og blokkerer follows: Fylgjer @@ -169,6 +170,7 @@ nn: read:accounts: sjå informasjon om kontoar read:blocks: sjå dine blokkeringar read:bookmarks: sjå bokmerka dine + read:favourites: sjå favorittane dine read:filters: sjå filtera dine read:follows: sjå fylgjarane dine read:lists: sjå listene dine @@ -182,6 +184,7 @@ nn: write:blocks: blokker kontoar og domene write:bookmarks: bokmerk innlegg write:conversations: målbind og slett samtalar + write:favourites: favorittmarker innlegg write:filters: lag filter write:follows: fylg folk write:lists: lag lister diff --git a/config/locales/doorkeeper.no.yml b/config/locales/doorkeeper.no.yml index ed0c6da108..c432f6645c 100644 --- a/config/locales/doorkeeper.no.yml +++ b/config/locales/doorkeeper.no.yml @@ -127,6 +127,7 @@ bookmarks: Bokmerker conversations: Samtaler crypto: Ende-til-ende-kryptering + favourites: Favoritter filters: Filtre follow: Hvem du følger, demper og blokkerer follows: Følger @@ -169,6 +170,7 @@ read:accounts: se informasjon om kontoer read:blocks: se blokkeringene dine read:bookmarks: se bokmerkene dine + read:favourites: se favorittene dine read:filters: se filtrene dine read:follows: se hvem du følger read:lists: se listene dine @@ -182,6 +184,7 @@ write:blocks: blokkere kontoer og domener write:bookmarks: bokmerke innlegg write:conversations: dempe og slette samtaler + write:favourites: favorittmarker innlegg write:filters: opprette filtre write:follows: følge personer write:lists: opprette lister diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 4014397dc3..acf0ddd676 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -127,6 +127,7 @@ sv: bookmarks: Bokmärken conversations: Konversationer crypto: Ände-till-ände-kryptering + favourites: Favoriter filters: Filter follow: Följare, mjutade och blockerade follows: Följer diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index c05d4d242a..127937141b 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1265,12 +1265,14 @@ es-MX: bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}. domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}. following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. Se añadirán %{total_items} cuentas a nuevas listas. muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}. preambles: blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}. bookmarks_html: Estás a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores. domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}. following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}. + lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas. muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}. preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia. recent_imports: Importaciones recientes @@ -1287,6 +1289,7 @@ es-MX: bookmarks: Importando marcadores domain_blocking: Importando dominios bloqueados following: Importando cuentas seguidas + lists: Importando listas muting: Importando cuentas silenciadas type: Importar tipo type_groups: @@ -1297,6 +1300,7 @@ es-MX: bookmarks: Marcadores domain_blocking: Lista de dominios bloqueados following: Lista de seguidos + lists: Listas muting: Lista de silenciados upload: Cargar invites: diff --git a/config/locales/es.yml b/config/locales/es.yml index 8bb99c42ed..622bf17617 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1265,12 +1265,14 @@ es: bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}. domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}. following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. Se añadirán %{total_items} cuentas a nuevas listas. muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}. preambles: blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}. bookmarks_html: Está a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores. domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}. following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}. + lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas. muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}. preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia. recent_imports: Importaciones recientes @@ -1287,6 +1289,7 @@ es: bookmarks: Importando marcadores domain_blocking: Importando dominios bloqueados following: Importando cuentas seguidas + lists: Importando listas muting: Importando cuentas silenciadas type: Importar tipo type_groups: @@ -1297,6 +1300,7 @@ es: bookmarks: Marcadores domain_blocking: Lista de dominios bloqueados following: Lista de seguidos + lists: Listas muting: Lista de silenciados upload: Cargar invites: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 9fa0d51d7d..a1f27c6ab3 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -387,7 +387,7 @@ fi: confirm: Jäädytä permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita. preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} ja sen aliverkkotunnukset. - remove_all_data: Tämä poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän verkkotunnuksen tileiltä. + remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä. stop_communication: Palvelimesi lopettaa näiden palvelinten viestinnän. title: Vahvista verkkotunnuksen %{domain} esto undo_relationships: Tämä kumoaa näiden palvelimien ja sinun tilien välisen seurannan. @@ -1343,6 +1343,7 @@ fi: unsubscribe: action: Kyllä, peru tilaus complete: Tilaus lopetettiin + confirmation_html: Olethan varma, että haluat lopettaa %{type} -aiheisten Mastodonin sähköposti-ilmoitusten vastaanoton palvelimelta %{domain} osoitteeseesi %{email}? Voit toki milloin tahansa ottaa jälleen käyttöön muun muassa nämä viestit sähköposti-ilmoitusasetusten kautta. emails: notification_emails: favourite: sähköpostit ilmoituksille @@ -1350,6 +1351,8 @@ fi: follow_request: seuraa pyyntöjä sähköpostiin mention: mainitse sähköpostin ilmoitukset reblog: tehosta sähköpostien ilmoituksia + resubscribe_html: Jos olet perunut ilmoitusviestien vastaanottamisen suotta, pääset jälleentilaamaan ilmoitusviestejä sähköposti-ilmoitusasetusten kautta. + success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: validations: @@ -1767,6 +1770,10 @@ fi: seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä. signed_in_as: 'Kirjautunut tilillä:' verification: + extra_instructions_html: Vinkki: Tämä linkitys verkkosivustollasi voidaan toteuttaa myös näkymättömänä. Tärkeä osuus on rel="me" -määre, jolla ehkäistään valeprofiilikäyttötarkoituksia sivustoilla, joiden sisältö perustuu käyttäjiensä julkaisuihin. Voit siis käyttää linkkiviittauselementtiä link HTML-lähdekoodin otsakeosassa (head) sen sijaan, että käyttäisit näkyvää hyperlinkkielementtiä a. HTML-lähdekoodin tulee tuolta osin kuitenkin olla JavaScriptistä riippumatonta. + here_is_how: Näin voit tehdä sen + hint_html: "Mastodonissa henkilöllisyyden vahventaminen on jokaisen käyttäjän ulottuvilla. Tämä perustuu avoimiin standardeihin, maksuttomasti nyt ja aina. Kaikki mitä tarvitset on henkilökohtainen verkkosivusto, jonka avulla sinut voidaan tunnistaa. Kun Mastodon-profiilistasi on linkki kyseiselle verkkosivustollesi, ja sieltä löytyy vastaviittaus tai -linkitys profiiliisi, näkyy profiilissasi vahvistustunniste." + instructions_html: Kopioi ja liitä alla oleva koodi verkkosivusi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin ylimääräisistä kentistä profiiliasetuksissa, "Muokkaa profiilia" -välilehdestä, ja tallenna muutokset. verification: Vahvistus verified_links: Vahvistetut linkkisi webauthn_credentials: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index fe195ee09f..6cce9b9937 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -269,7 +269,7 @@ ko: reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다" resend_user_html: "%{name} 님이 %{target} 님에 대한 확인 메일을 다시 보냈습니다" reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다" - resolve_report_html: "%{name} 님이 신고 %{target}를 처리됨으로 변경하였습니다" + resolve_report_html: "%{name} 중재자가 %{target}번 신고를 해결로 변경하였습니다" sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다" silence_account_html: "%{name} 님이 %{target}의 계정을 제한시켰습니다" suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다" @@ -354,7 +354,7 @@ ko: other: "%{count}개의 대기 중인 해시태그" pending_users_html: other: "%{count}명의 대기 중인 사용자" - resolved_reports: 신고 해결됨 + resolved_reports: 해결된 신고 software: 소프트웨어 sources: 가입 출처 space: 디스크 사용량 @@ -600,7 +600,7 @@ ko: delete_and_resolve: 게시물 삭제 forwarded: 전달됨 forwarded_to: "%{domain}에게 전달됨" - mark_as_resolved: 해결 완료 처리 + mark_as_resolved: 해결로 표시 mark_as_sensitive: 민감함으로 설정 mark_as_unresolved: 미해결로 표시 no_one_assigned: 아무도 없음 @@ -619,7 +619,7 @@ ko: report: '신고 #%{id}' reported_account: 신고 대상 계정 reported_by: 신고자 - resolved: 해결됨 + resolved: 해결 resolved_msg: 신고를 잘 해결했습니다! skip_to_actions: 작업으로 건너뛰기 status: 상태 @@ -712,7 +712,7 @@ ko: rules: add_new: 규칙 추가 delete: 삭제 - description_html: 대부분의 경우 사람들이 이용약관을 반드시 읽고 동의하도록 하지만, 보통의 사람들은 문제가 일어나기 전까지는 읽지 않습니다. 여러분의 서버 규칙을 목록으로 정리해서 한 번에 읽기 쉽게 만드세요. 규칙 각각을 짧고 단순하게 만들고, 하나를 여러 개로 쪼개지도 마세요. + description_html: 대부분의 사람들은 서비스 약관을 읽고 동의한다고 밝힙니다만, 대개 문제가 발생하기 전까지는 약관을 자세히 읽어보지 않습니다. 서버의 운영원칙을 단일한 글머리 기호 목록으로 제공하여 한 눈에 쉽게 확인할 수 있도록 하세요. 각 규칙을 짧고 간결하게 유지하되, 많은 항목으로 나누지 않도록 하세요. edit: 규칙 수정 empty: 아직 정의된 서버 규칙이 없습니다. title: 서버 규칙 @@ -851,7 +851,7 @@ ko: statuses: allow: 게시물 허용 allow_account: 작성자 허용 - description_html: 당신의 서버가 알기로 현재 많은 수의 공유와 좋아요가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다. + description_html: 여러분의 서버가 알기로 현재 많은 수의 공유와 좋아요가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다. disallow: 게시물 비허용 disallow_account: 작성자 비허용 no_status_selected: 아무 것도 선택 되지 않아 어떤 유행중인 게시물도 바뀌지 않았습니다 @@ -1229,7 +1229,7 @@ ko: invalid_csv_file: '올바르지 않은 CSV 파일입니다. 오류: %{error}' over_rows_processing_limit: "%{count}개 이상의 열을 포함합니다" too_large: 파일이 너무 큼 - failures: 실패함 + failures: 실패 imported: 가져옴 mismatched_types_warning: 가져오기할 때 잘못된 유형을 선택했을 수 있으니, 꼭 두 번 체크해주세요. modes: @@ -1276,9 +1276,9 @@ ko: blocking: 차단한 계정 목록 bookmarks: 북마크 domain_blocking: 도메인 차단 목록 - following: 팔로우 중인 계정 목록 + following: 팔로잉 목록 lists: 리스트 - muting: 뮤트 중인 계정 목록 + muting: 뮤트한 계정 목록 upload: 업로드 invites: delete: 비활성화 @@ -1363,7 +1363,7 @@ ko: cooldown: 이주 뒤에는 새로운 이주를 하지 못하는 휴식기간이 존재합니다 disabled_account: 이 계정은 완전한 사용이 불가능하게 됩니다. 하지만, 데이터 내보내기나 재활성화를 위해 접근할 수 있습니다. followers: 이 행동은 현재 계정의 모든 팔로워를 새 계정으로 이동시킵니다 - only_redirect_html: 대신, 프로필에 리디렉션만 표시할 수 있습니다. + only_redirect_html: 대신, 프로필에 리디렉션만 표시할 수도 있습니다. other_data: 다른 어떤 데이터도 자동적으로 옮겨지지 않을 것입니다 redirect: 현재 계정 프로필은 리다이렉트 알림과 함께 업데이트 되며 검색에서 제외 됩니다 moderation: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 74b5f51eeb..d03b1e5dbe 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -3,9 +3,16 @@ 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. contact_missing: Nenustatyta + contact_unavailable: Nėra duomenų hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu + title: Apie accounts: follow: Sekti + followers: + few: Sekėjai + many: Sekėjai + one: Sekėjas + other: Sekėjai following: Sekami last_active: paskutinį kartą aktyvus link_verified_on: Nuorodos nuosavybė paskutinį kartą tikrinta %{date} @@ -22,6 +29,7 @@ lt: created_msg: Moderavimo žinutė sėkimngai sukurta! destroyed_msg: Moderacijos žinutė sėkmingai ištrinta! accounts: + approve: Patvirtinti are_you_sure: Ar esate įsitikinęs? avatar: Profilio nuotrauka by_domain: Domenas @@ -51,6 +59,7 @@ lt: header: Antraštė inbox_url: Gautųjų URL invited_by: Pakvietė + ip: IP joined: Prisijungė location: all: Visi @@ -84,6 +93,7 @@ lt: reset_password: Atkurti slaptažodį resubscribe: Per prenumeruoti search: Ieškoti + sensitized: Pažymėti kaip jautrią informaciją shared_inbox_url: Bendroji gautųjų URL show: created_reports: Parašyti raportai diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 5f8de52987..ae2a93a33a 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -76,6 +76,14 @@ ml: invites: filter: all: എല്ലാം + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '429': Too many requests + '503': The page could not be served due to a temporary server failure. filters: contexts: notifications: അറിയിപ്പുകൾ diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 90616bf863..29065db53f 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -385,7 +385,12 @@ nn: confirm_suspension: cancel: Avbryt confirm: Suspender - permanent_action: Å oppheve suspensjonen vil ikke gjenopprette noe data eller koblinger. + permanent_action: Å oppheve suspensjonen vil ikkje gjenopprette data eller koplingar. + preamble_html: Du er i ferd med å suspendera %{domain} inkludert underdomener. + remove_all_data: Dette vil fjerna alt innhald, media og profildata for kontoar som tilhøyrer dette domenet frå din tenar. + stop_communication: Tenaren din vil slutta å kommunisera med desse tenarane. + title: Stadfest domeneblokkering for %{domain} + undo_relationships: Dette vil oppheve alle følgar-relasjonar mellom kontoane dine og kontoar på desse tenerane. created_msg: Domeneblokkering blir nå behandlet destroyed_msg: Domeneblokkering har nå blitt angret domain: Domene @@ -735,6 +740,9 @@ nn: branding: preamble: Profileringa av tenaren din skil den frå andre tenarar i nettverket. Informasjonen kan bli vist ulike stadar, til dømes i Mastodon sitt web-grensesnitt, i eigne applikasjonar, i førehandsvisningar på andre nettsider, i meldingsappar og så bortetter. På grunn av dette er det best å halde informasjonen enkel, kort og treffande. title: Profilering + captcha_enabled: + desc_html: Dette er avhengig av eksterne skript fra hCaptcha, som kan være et sikkerhets- og personvernproblem. I tillegg kan dette gjøre registreringsprosessen betydelig mindre tilgjengelig for noen (spesielt funksjonshemmede) personer. Av disse grunnene bør du vurdere alternative tiltak som godkjenningsbasert eller invitasjonsbasert registrering. + title: Krev at nye brukarar løyser ein CAPTCHA for å bekrefte kontoen sin content_retention: preamble: Styr korleis brukargenerert innhald blir lagra i Mastodon. title: Bevaring av innhald @@ -762,6 +770,7 @@ nn: approved: Godkjenning kreves for påmelding none: Ingen kan melda seg inn open: Kven som helst kan melda seg inn + title: Tenarinstillingar site_uploads: delete: Slett opplasta fil destroyed_msg: Vellukka sletting av sideopplasting! @@ -968,7 +977,7 @@ nn: notification_preferences: Endr e-post-innstillingane salutation: Hei %{name}, settings: 'Endr e-post-innstillingar: %{link}' - unsubscribe: Avslutt abonnement + unsubscribe: Meld av view: 'Sjå:' view_profile: Sjå profil view_status: Sjå status @@ -983,7 +992,9 @@ nn: auth: apply_for_account: Søk om ein konto captcha_confirmation: - title: Sikkerhetskontroll + help_html: Om du har problem med å løyse CAPTCHA, kan kontakte oss på %{email} og vi kan hjelpe deg. + hint_html: Berre ein ting til! Vi må bekrefte at du er et menneske (så vi kan halde spam ute!). Løys CAPTCHA-en nedanfor og klikk "Fortsett". + title: Sikkerheitssjekk confirmations: wrong_email_hint: Viss epostadressa er feil, kan du endra ho i kontoinnstillingane. delete_account: Slett konto @@ -1020,9 +1031,9 @@ nn: rules: accept: Godkjenn back: Attende - invited_by: 'Du kan bli med %{domain} takket være invitasjonen du fikk fra:' + invited_by: 'Du kan bli med i %{domain} takka vere invitasjonen du har fått frå:' preamble: Disse angis og håndheves av %{domain}-moderatorene. - preamble_invited: Før du fortsetter, vennligst gå gjennom reglene som er satt av moderatorene av %{domain}. + preamble_invited: Før du held fram, ver snill og sjå gjennom reglane bestemt av moderatorane av %{domain}. title: Noen grunnregler. title_invited: Du har blitt invitert. security: Tryggleik @@ -1126,10 +1137,10 @@ nn: domain_validator: invalid_domain: er ikkje eit gangbart domenenamn edit_profile: - basic_information: Grunnleggende informasjon + basic_information: Grunnleggande informasjon hint_html: "Tilpass hva folk ser på din offentlige profil og ved siden av dine innlegg. Det er mer sannsynlig at andre mennesker følger deg tilbake og samhandler med deg når du har fylt ut en profil og et profilbilde." - other: Annet - safety_and_privacy: Sikkerhet og personvern + other: Anna + safety_and_privacy: Sikkerheit og personvern errors: '400': Søknaden du sende var ugyldig eller sett opp feil. '403': Du har ikkje løyve til å sjå denne sida. @@ -1193,6 +1204,12 @@ nn: keywords: one: "%{count} stikkord" other: "%{count} stikkord" + statuses: + one: "%{count} innlegg" + other: "%{count} innlegg" + statuses_long: + one: "%{count} individuelt innlegg er gøymd" + other: "%{count} individuelle innlegg er gøymde" title: Filter new: save: Lagre nytt filter @@ -1206,6 +1223,12 @@ nn: title: Filtrerte innlegg generic: all: Alle + all_items_on_page_selected_html: + one: Du har valt %{count} element på denne sida. + other: Du har valt %{count} element på denne sida. + all_matching_items_selected_html: + one: "%{count} element som passar til søket ditt er vald." + other: Du har valt %{count} element som passar til søket ditt. cancel: Avbryt changes_saved_msg: Alle endringane vart lagra! confirm: Stadfest @@ -1215,6 +1238,9 @@ nn: none: Ingen order_by: Sorter etter save_changes: Lagr endringar + select_all_matching_items: + one: Vel %{count} element som passar til søket ditt. + other: Vel %{count} element som passar til søket ditt. today: i dag validation_errors: one: Noe er ikke helt riktig ennå. Vennligst se etter en gang til @@ -1239,12 +1265,14 @@ nn: bookmarks_html: Du skal til å byta ut bokmerka dine med opp til %{total_items} innlegg frå %{filename}. domain_blocking_html: Du skal til å byta ut domeneblokkeringslista di med opp til %{total_items} domene frå %{filename}. following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename} og slutta å fylgja alle andre. + lists_html: Du er i ferd med å erstatte dine lister med innholdet i %{filename}. Inntil %{total_items} kontoer legges til i nye lister. muting_html: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{total_items} brukarkontoar frå %{filename}. preambles: blocking_html: Du skal til å blokkera opp til %{total_items} brukarkontoar frå %{filename}. bookmarks_html: Du skal til å leggja til opp til %{total_items} innlegg frå %{filename} til bokmerka dine. domain_blocking_html: Du skal til å blokkera opp til %{total_items} domene frå %{filename}. following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename}. + lists_html: Du er i ferd med å legge inntil %{total_items} kontoer fra %{filename} til dine lister. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til. muting_html: Du skal til å dempa opp til %{total_items} brukarkontoar frå %{filename}. preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer. recent_imports: Siste importar @@ -1261,6 +1289,7 @@ nn: bookmarks: Importerer bokmerke domain_blocking: Importerer blokkerte domene following: Importerer fylgde brukarkontoar + lists: Importerer lister muting: Importerer dempa brukarkontoar type: Type import type_groups: @@ -1271,6 +1300,7 @@ nn: bookmarks: Bokmerker domain_blocking: Liste over blokkerte domene following: Fylgjeliste + lists: Lister muting: Dempeliste upload: Last opp invites: @@ -1311,8 +1341,8 @@ nn: title: Autentiseringshistorikk mail_subscriptions: unsubscribe: - action: Ja, avslutt abonnement - complete: Abonnement avsluttet + action: Ja, meld av + complete: Meldt av confirmation_html: Er du sikker på at du vil slutte å motta %{type} fra Mastodon %{domain} i e-posten din på %{email}? Du kan når som helst gjenoppta i innstillinger for e-postvarsling. emails: notification_emails: @@ -1323,7 +1353,7 @@ nn: reblog: e-poster om fremhevinger resubscribe_html: Hvis du har avsluttet abonnementet ved en feiltakelse, kan du abonnere på nytt i innstillinger for e-postvarsling. success_html: Du vil ikke lenger motta %{type} fra Mastodon på %{domain} i e-posten din på %{email}. - title: Avslutt abonnement + title: Meld av media_attachments: validations: images_and_video: Kan ikkje leggja ved video til status som allereie inneheld bilete @@ -1439,7 +1469,7 @@ nn: expired: Denne rundspørjinga er allereie ferdig invalid_choice: Det valgte stemmealternativet eksisterer ikke over_character_limit: kan ikkje vera lengre enn %{max} teikn kvar - self_vote: Du kan ikke stemme i dine egne avstemninger + self_vote: Du kan ikkje stemme i di eiga avstemming too_few_options: må ha meir enn eitt element too_many_options: kan ikkje ha meir enn %{max} element preferences: @@ -1741,11 +1771,11 @@ nn: signed_in_as: 'Logga inn som:' verification: extra_instructions_html: Tips: Lenken på din nettside kan være usynlig. Den viktige delen er rel="me" som sikrer at nettsteder med brukergenerert innhold ikke kan utgi seg for å være deg. Du kan til og med bruke en link lenke i sidens topptekst i stedet for a, men HTML-koden må være tilgjengelig uten å kjøre JavaScript. - here_is_how: Slik gjør du + here_is_how: Slik gjer du hint_html: "Verifisering av identiteten din på Mastodon er for alle. Basert på åpne nettstandarder, gratis nå og for alltid. Alt du trenger er en personlig nettside som gjør at folk kjenner deg igjen. Når du lenker til dette nettstedet fra din profil, vil vi sjekke at nettstedet lenker tilbake til profilen din og viser dette på profilen din." instructions_html: Kopier og lim inn koden nedenfor i HTML til ditt nettsted. Deretter legger du til adressen til nettstedet ditt i et av ekstrafeltene på profilen din fra fanen "Rediger profil" og lagre endringer. verification: Stadfesting - verified_links: Dine bekreftede lenker + verified_links: Dine verifiserte lenker webauthn_credentials: add: Legg til ny sikkerhetsnøkkel create: diff --git a/config/locales/no.yml b/config/locales/no.yml index 336c19e3dd..6a0bdca071 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -386,6 +386,11 @@ cancel: Avbryt confirm: Suspender permanent_action: Å oppheve suspensjonen vil ikke gjenopprette noe data eller koblinger. + preamble_html: Du er i ferd med å suspendere %{domain} og dens underdomener. + remove_all_data: Dette vil fjerne alt innhold, medier og profildata for domenets kontoer på serveren din. + stop_communication: Serveren din vil slutte å kommunisere med disse serverne. + title: Bekreft domene blokkering for %{domain} + undo_relationships: Dette vil angre ethvert følgeforhold mellom kontoene til disse serverne og dine. created_msg: Domeneblokkering blir nå behandlet destroyed_msg: Domeneblokkering har nå blitt angret domain: Domene @@ -636,9 +641,22 @@ mark_as_sensitive_html: 'Du er i ferd med å markere noen av @%{acct} sine innlegg som sensitivt. Dette vil:' silence_html: 'Du er i ferd med å avgrense @%{acct} sin konto. Dette vil:' suspend_html: 'Du er i ferd med å stoppe @%{acct} sin konto. Dette vil:' + actions: + delete_html: Fjerne fornærmede innlegg + mark_as_sensitive_html: Merk fornærmede innlegg medier som sensitivt + silence_html: Sterkt begrense @%{acct}ved å gjøre deres profil og innhold kun synlig for personer som allerede følger dem, eller manuelt ser etter den + suspend_html: Suspender @%{acct}, og gjøre profilen og innholdet utilgjengelig og umulig å samhandle med + close_report: 'Marker rapport #%{id} som løst' + close_reports_html: Merk alle rapporter mot @%{acct} som løst + delete_data_html: Slett @%{acct} sin profil og innhold 30 dager fra nå med mindre de blir suspendert i mellomtiden + preview_preamble_html: "@%{acct} vil motta en advarsel med følgende innhold:" + record_strike_html: Ta opp en streik mot @%{acct} for å hjelpe deg med å eskalere fremtidige brudd fra denne kontoen + send_email_html: Send @%{acct} en advarsels e-post + warning_placeholder: Valgfritt ytterligere resonnement for moderasjonstiltaket. target_origin: Opprinnelse for innrapportert konto title: Rapporter unassign: Fjern tilegning + unknown_action_msg: 'Ukjent handling: %{action}' unresolved: Uløst updated_at: Oppdatert view_profile: Vis profil @@ -670,7 +688,10 @@ invite_users_description: Lar brukere invitere nye personer til serveren manage_announcements: Behandle Kunngjøringer manage_announcements_description: Lar brukere endre kunngjøringer på serveren + manage_appeals: Behandle klager + manage_appeals_description: Lar brukere gjennomgå klager mot modereringsaktiviteter manage_blocks: Behandle Blokker + manage_blocks_description: Lar brukere blokkere e-postleverandører og IP-adresser manage_custom_emojis: Administrer egendefinerte Emojier manage_custom_emojis_description: Lar brukere endre egendefinert emojis på serveren manage_federation: Administrer Føderasjon @@ -680,15 +701,21 @@ manage_reports: Administrer Rapporter manage_reports_description: Lar brukere se på rapporter og utføre moderasjonshandlinger mot dem manage_roles: Behandle Roller + manage_roles_description: Lar brukere administrere og tildele roller under sine rettigheter manage_rules: Administrer Regler manage_rules_description: La brukere endre serverregler manage_settings: Administrer Innstillinger manage_settings_description: La brukere endre sideinnstillinger + manage_taxonomies: Administrer taksonomier + manage_taxonomies_description: Lar brukere gjennomgå populære innhold og oppdatere emneknagg innstillinger manage_user_access: Administrer Brukertilgang manage_user_access_description: Lar brukere deaktivere andre brukeres 2-trinnsinnlogging, endre sin e-postadresse, og tilbakestille passordet deres manage_users: Behandle Brukere manage_users_description: Lar brukere se detaljer om andre brukere og utføre moderasjonshandlinger mot dem manage_webhooks: Administrer Webhooks + manage_webhooks_description: Lar brukere sette opp webhooks for administrative hendelser + view_audit_log: Vis overvåkingslogg + view_audit_log_description: La brukere se en logg over administrative handlinger på serveren view_dashboard: Vis dashbord view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker view_devops: DevOps @@ -711,15 +738,24 @@ preamble: Tilpass Mastodons webgrensesnitt. title: Utseende branding: + preamble: Serverens merkevarebygging skiller den fra andre servere i nettverket. Denne informasjonen kan vises på tvers av en rekke miljøer, for eksempel Mastodons webgrensesnitt, native applikasjoner, i forhåndsvisning av lenker på andre nettsteder og i meldingsapper, osv. Av denne grunn er det best å holde denne informasjonen klar, kort og kortfattet. title: Merkevare + captcha_enabled: + desc_html: Dette er avhengig av eksterne skript fra hCaptcha, som kan være et sikkerhets- og personvernproblem. I tillegg kan dette gjøre registreringsprosessen betydelig mindre tilgjengelig for noen (spesielt funksjonshemmede) personer. Av disse grunnene bør du vurdere alternative tiltak som godkjenningsbasert eller invitasjonsbasert registrering. + title: Krev at nye brukere løser en CAPTCHA for å bekrefte kontoen sin content_retention: preamble: Kontroller hvordan brukergenerert innhold lagres i Mastodon. + title: Oppbevaring av innhold default_noindex: desc_html: Påvirker alle brukerne som ikke selv har justert denne innstillingen title: Ikke la brukere indekseres av søkemotorer som standard discovery: follow_recommendations: Følg anbefalinger + preamble: Overflater interessant innhold er medvirkende til ombordstigning av nye brukere som kanskje ikke kjenner noen Mastodon. Kontroller hvordan ulike oppdagelsesfunksjoner fungerer på serveren. + profile_directory: Profilkatalog public_timelines: Offentlige tidslinjer + publish_discovered_servers: Publiser liste over oppdagede servere + publish_statistics: Publiser statistikk title: Oppdagelse trends: Trender domain_blocks: @@ -734,6 +770,7 @@ approved: Godkjenning kreves for påmelding none: Ingen kan melde seg inn open: Hvem som helst kan melde seg inn + title: Serverinnstillinger site_uploads: delete: Slett den opplastede filen destroyed_msg: Vellykket sletting av sideopplasting! @@ -820,6 +857,7 @@ pending_review: Avventer gjennomgang preview_card_providers: allowed: Lenker fra denne utgiveren kan "trende" + description_html: Dette er domener som lenker ofte deles fra på serveren din. Lenker vil ikke bli populært offentlig med mindre domenet til lenken er godkjent. Din godkjenning (eller avvisning) strekker seg til underdomener. rejected: Lenker fra denne utgiveren vil ikke "trende" title: Utgivere rejected: Avvist @@ -829,6 +867,11 @@ description_html: Dette er innlegg som serveren din vet om at de blir delt og favorisert for øyeblikket. Dette kan hjelpe dine nye og returnerede brukere med å finne flere å følge. Ingen innlegg vises offentlig før du godkjenner forfatteren, og forfatteren tillater at kontoen deres foreslås til andre. Du kan også tillate eller avvise individuelle innlegg. disallow: Ikke tillat innlegg disallow_account: Forby forfatter + no_status_selected: Ingen populære innlegg ble endret da ingen ble valgt + not_discoverable: Forfatter har valgt å ikke være synlig + shared_by: + one: Delt eller lagt til som favoritt én gang + other: Delt og favorittmarkert %{friendly_count} ganger title: Populære innlegg tags: current_score: Gjeldende poengsum %{score} @@ -840,10 +883,16 @@ tag_uses_measure: samlet bruk description_html: Dette er emneknagger som for øyeblikket vises i mange innlegg som serveren din ser. Det kan hjelpe dine brukere med å finne ut hva folk snakker mest om i øyeblikket. Ingen emneknagger vises offentlig før du godkjenner dem. listable: Kan bli foreslått + no_tag_selected: Ingen emneknagger ble endret da ingen ble valgt not_listable: Vil ikke bli foreslått not_trendable: Kunne ikke vises under trender not_usable: Kan ikke brukes + peaked_on_and_decaying: Høyeste på %{date}, nå faller + title: Populære emneknagger + trendable: Kan vises under populært + trending_rank: 'Populært #%{rank}' usable: Kan brukes + usage_comparison: Brukt %{today} ganger i dag, sammenlignet med %{yesterday} i går used_by_over_week: one: Brukt av en person i løpet av siste uke other: Brukes av %{count} personer i løpet av den siste uken @@ -869,7 +918,12 @@ one: 1 aktivert hendelse other: "%{count} aktiverte hendelser" events: Hendelser + new: Ny webhook + rotate_secret: Roter hemmelighet + secret: Signer hemmelighet status: Status + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -880,6 +934,9 @@ sensitive: å merke kontoen sin som følsom silence: for å begrense deres konto suspend: for å avslutte kontoen + body: "%{target} klager på en moderasjonsbeslutning av %{action_taken_by} fra %{date}, noe som var %{type}. De skrev:" + next_steps: Du kan godkjenne anken for å angre på moderasjonsvedtaket eller ignorere det. + subject: "%{username} klager på en moderasjonsbeslutning for %{instance}" new_pending_account: body: Detaljer om den nye kontoen er nedenfor. Du kan godkjenne eller avvise denne søknaden. subject: Ny konto opp til vurdering på %{instance} (%{username}) @@ -888,11 +945,14 @@ body_remote: Noen fra %{domain} har rapportert %{target} subject: Ny rapport for %{instance} (#%{id}) new_trends: + body: 'Følgende elementer trenger en gjennomgang før de kan vises offentlig:' new_trending_links: title: Populære lenker new_trending_statuses: title: Populære innlegg new_trending_tags: + no_approved_tags: Det er for øyeblikket ingen godkjente populære emneknagger. + requirements: 'Enhver av disse kandidatene kan overgå #%{rank} godkjent populære emneknagger, som for øyeblikket er #%{lowest_tag_name} med en poengsum på %{lowest_tag_score}.' title: Populære emneknagger subject: Ny trender for gjennomsyn av %{instance} aliases: @@ -932,7 +992,11 @@ auth: apply_for_account: Be om en konto captcha_confirmation: + help_html: Hvis du har problemer med å løse CAPTCHA, kan du komme i kontakt med oss via %{email} og vi kan hjelpe deg. + hint_html: Bare en ting til! Vi må bekrefte at du er et menneske (dette er slik at vi kan holde spam ute!). Løs CAPTCHA nedenfor og klikk "Fortsett". title: Sikkerhetskontroll + confirmations: + wrong_email_hint: Hvis e-postadressen ikke er riktig, kan du endre den i kontoinnstillingene. delete_account: Slett konto delete_account_html: Hvis du ønsker å slette kontoen din, kan du gå hit. Du vil bli spurt om bekreftelse. description: @@ -962,6 +1026,7 @@ saml: SAML register: Meld deg på registration_closed: "%{instance} tar ikke imot nye medlemmer" + resend_confirmation: Send bekreftelse lenke på nytt reset_password: Tilbakestill passord rules: accept: Godta @@ -973,10 +1038,17 @@ title_invited: Du har blitt invitert. security: Sikkerhet set_new_password: Angi nytt passord + setup: + email_below_hint_html: Sjekk søppelpostmappen din, eller be om en ny. Du kan korrigere e-postadressen din hvis den er feil. + email_settings_hint_html: Klikk på lenken vi sendte deg for å bekrefte %{email}. Vi venter her. + link_not_received: Fikk du ikke lenken? + new_confirmation_instructions_sent: Du vil motta en ny e-post med bekreftelse lenke om noen minutter! + title: Sjekk innboksen din sign_in: preamble_html: Logg inn med ditt %{domain} brukeropplysninger. Hvis kontoen din er plassert på en annen server, vil du ikke kunne logge inn her. title: Logg inn på %{domain} sign_up: + manual_review: Registreringer på %{domain} går gjennom manuell gjennomgang av moderatorene våre. For å hjelpe oss med å behandle registreringen din, skriv litt om deg selv og hvorfor du vil ha en konto på %{domain}. preamble: Med en konto på denne Mastodon-tjeneren vil du kunne følge andre personer på nettverket, uansett hvor kontoen deres holder til. title: La oss få deg satt i gang på %{domain}. status: @@ -1118,7 +1190,11 @@ add_keyword: Legg til stikkord keywords: Nøkkelord statuses: Individuelle innlegg + statuses_hint_html: Dette filteret gjelder for utvalgte enkeltinnlegg, uavhengig av om de samsvarer med søkeordene nedenfor.Se gjennom eller fjern innlegg fra filteret.. title: Rediger filter + errors: + deprecated_api_multiple_keywords: Disse parameterne kan ikke endres fra dette programmet fordi de gjelder for mer enn ett filter nøkkelord. Bruk et nyere program eller webgrensesnittet. + invalid_context: Ingen eller ugyldig kontekst angitt index: contexts: Filtre i %{contexts} delete: Slett @@ -1189,12 +1265,14 @@ bookmarks_html: Du er i ferd med å erstatte dine bokmerker med inntil %{total_items} innlegg fra %{filename}. domain_blocking_html: Du er i ferd med å erstatte din domene-blokkeringsliste med inntil %{total_items} domener fra %{filename}. following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename} og slutte å følge alle andre. + lists_html: Du er i ferd med å erstatte dine lister med innholdet i %{filename}. Inntil %{total_items} kontoer legges til i nye lister. muting_html: Du er i ferd med å erstatte listen over dempede kontoer med inntil %{total_items} kontoer fra %{filename}. preambles: blocking_html: Du er i ferd med å blokkere inntil %{total_items} kontoer fra %{filename}. bookmarks_html: Du er i ferd med å legge til inntil %{total_items} innlegg fra %{filename} til dine bokmerker. domain_blocking_html: Du er i ferd med å blokkere inntil %{total_items} domener fra %{filename}. following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename}. + lists_html: Du er i ferd med å legge inntil %{total_items} kontoer fra %{filename} til dine lister. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til. muting_html: Du er i ferd med å dempe inntil %{total_items} kontoer fra %{filename}. preface: Du kan importere data om brukere du følger eller blokkerer til kontoen din på denne instansen med eksportfiler fra andre instanser. recent_imports: Siste importer @@ -1211,6 +1289,7 @@ bookmarks: Importerer bokmerker domain_blocking: Importerer blokkerte domener following: Importerer fulgte kontoer + lists: Importerer lister muting: Importerer dempede kontoer type: Type import type_groups: @@ -1221,6 +1300,7 @@ bookmarks: Bokmerker domain_blocking: Domeneblokkeringsliste following: Følgeliste + lists: Lister muting: Dempeliste upload: Opplastning invites: @@ -1404,6 +1484,9 @@ unrecognized_emoji: er ikke en gjenkjent emoji relationships: activity: Kontoaktivitet + confirm_follow_selected_followers: Er du sikker på at du vil følge utvalgte følgere? + confirm_remove_selected_followers: Er du sikker på at du vil fjerne valgte følgere? + confirm_remove_selected_follows: Er du sikker på at du vil fjerne valgte følger? dormant: Dormende follow_failure: Kunne ikke følge noen av de valgte kontoene. follow_selected_followers: Følg valgte tilhengere diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 4c4aaa415e..4357d30e62 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1265,12 +1265,14 @@ pt-PT: bookmarks_html: Está prestes a substituir os seus marcadores com até %{total_items} publicações de %{filename}. domain_blocking_html: Está prestes a substituir a sua lista de bloqueios de domínio com até %{total_items} domínios de %{filename}. following_html: Está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir quaisquer outras contas. + lists_html: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas. muting_html: Está prestes a substituir a sua lista de contas silenciadas com até %{total_items} contas de %{filename}. preambles: blocking_html: Está prestes a bloquear até %{total_items} contas de %{filename}. bookmarks_html: Está prestes a adicionar até %{total_items} publicações de %{filename} aos seus marcadores. domain_blocking_html: Está prestes a bloquear até %{total_items} domínios de %{filename}. following_html: Está prestes a seguir até %{total_items} contas de %{filename}. + lists_html: Está prestes a adicionar até %{total_items} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar. muting_html: Está prestes a silenciar até %{total_items} contas de %{filename}. preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas. recent_imports: Importações recentes @@ -1287,6 +1289,7 @@ pt-PT: bookmarks: Importando marcadores domain_blocking: Importando domínios bloqueados following: Importando contas seguidas + lists: A importar listas muting: Importando contas silenciadas type: Tipo de importação type_groups: @@ -1297,6 +1300,7 @@ pt-PT: bookmarks: Itens salvos domain_blocking: Lista de domínios bloqueados following: Lista de pessoas que estás a seguir + lists: Listas muting: Lista de utilizadores silenciados upload: Carregar invites: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index c6fdff9aa8..9a97f9a3dc 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1069,7 +1069,9 @@ ru: back: Назад invited_by: 'Вы можете присоединиться к %{domain} благодаря приглашению полученному от:' preamble: Они устанавливаются и применяются модераторами %{domain}. + preamble_invited: Прежде чем продолжить, ознакомьтесь с основными правилами, установленными модераторами сервера %{domain}. title: Несколько основных правил. + title_invited: Вы были приглашены. security: Безопасность set_new_password: Задать новый пароль setup: @@ -1170,6 +1172,11 @@ ru: your_appeal_rejected: Ваша апелляция отклонена domain_validator: invalid_domain: не является корректным доменным именем + edit_profile: + basic_information: Основная информация + hint_html: "Настройте то, что люди видят в вашем публичном профиле и рядом с вашими сообщениями. Другие люди с большей вероятностью подпишутся на Вас и будут взаимодействовать с вами, если у Вас заполнен профиль и добавлено изображение." + other: Прочее + safety_and_privacy: Безопасность и приватность errors: '400': Ваш запрос был недействительным или неправильным. '403': У Вас нет доступа к просмотру этой страницы. @@ -1384,6 +1391,20 @@ ru: failed_sign_in_html: Неудачная попытка входа используя %{method} через %{browser} (%{ip}) successful_sign_in_html: Успешный вход используя %{method} через %{browser} (%{ip}) title: История входов + mail_subscriptions: + unsubscribe: + action: Да, отписаться + complete: Подписка отменена + confirmation_html: Вы уверены, что хотите отписаться от получения на ваш адрес электронной почты %{email} %{type} от Сообщества Mastodon %{domain}? Вы всегда можете заново подписаться на уведомления по электронной почте в разделе настройки . + emails: + notification_emails: + favourite: Избранные уведомления по электронной почте + follow: подписаться на уведомления по электронной почте + follow_request: Уведомлять по электронной почте о новых запросах + mention: получать уведомления с упоминаниями + reblog: подписаться на уведомления по электронной почте + resubscribe_html: Если вы отказались от подписки по ошибке, вы всегда можете заново подписаться на уведомления по электронной почте по этой ссылке . + title: Отписаться media_attachments: validations: images_and_video: Нельзя добавить видео к посту с изображениями @@ -1499,6 +1520,7 @@ ru: expired: Опрос уже завершился invalid_choice: Выбранного варианта голосования не существует over_character_limit: каждый не вариант не может быть длиннее %{max} символов + self_vote: Вы не можете голосовать в своих опросах too_few_options: должно быть больше 1 варианта too_many_options: может содержать не больше %{max} вариантов preferences: @@ -1811,7 +1833,9 @@ ru: seamless_external_login: Вы залогинены через сторонний сервис, поэтому настройки e-mail и пароля недоступны. signed_in_as: 'Выполнен вход под именем:' verification: + instructions_html: Скопируйте и вставьте код ниже в HTML вашего сайта. Затем, добавьте адрес вашего веб сайта в одно из дополнительных полей на вкладке "Редактировать профиль" и сохраните изменения. verification: Верификация ссылок + verified_links: Ваши ссылки подтверждения webauthn_credentials: add: Добавить новый ключ безопасности create: diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 3c6635c0f0..279ad9cb81 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -38,8 +38,8 @@ ca: avatar: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px bot: Notifica que aquest compte realitza principalment accions automatitzades i que pot estar no monitorat context: Un o diversos contextos en què s'ha d'aplicar el filtre - current_password: Per motius de seguretat, introdueix la contrasenya del compte actual - current_username: Per a confirmar, si us plau entra el nom d'usuari del compte actual + current_password: Per motius de seguretat, introduïu la contrasenya del compte actual + current_username: Per a confirmar, entreu el nom d'usuari del compte actual digest: Només s'envia després d'un llarg període d'inactivitat i només si has rebut algun missatge personal durant la teva absència discoverable: Permet que el teu compte sigui descobert per desconeguts a través de recomanacions, etiquetes i altres característiques email: Se t'enviarà un correu electrònic de confirmació @@ -85,7 +85,7 @@ ca: custom_css: Pots aplicar estils personalitzats en la versió web de Mastodon. mascot: Anul·la la il·lustració en la interfície web avançada. media_cache_retention_period: Els fitxers multimèdia descarregats s'esborraran després del nombre de dies especificat quan el valor configurat és positiu, i tornats a descarregats sota demanda. - peers_api_enabled: Una llista de noms de domini que aquest servidor ha trobat al fedivers. No inclou cap dada sobre si estàs federat amb un servidor determinat, només si el teu en sap res. La fan servir, en un sentit general, serveis que recoŀlecten estadístiques sobre la federació. + peers_api_enabled: Una llista de noms de domini que aquest servidor ha trobat al fedivers. No inclou cap dada sobre si estàs federat amb un servidor determinat, només si el teu en sap res. La fan servir, en un sentit general, serveis que recol·lecten estadístiques sobre la federació. profile_directory: El directori de perfils llista tots els usuaris que tenen activat ser descoberts. require_invite_text: Quan el registre requereixi aprovació manual, fes que sigui obligatori en lloc d'opcional d'escriure el text de la sol·licitud d'invitació "Per què vols unir-te?" site_contact_email: Com pot la gent comunicar amb tu per a consultes legals o de recolzament. diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 05dd9c54b1..8323ac15cb 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -2,6 +2,10 @@ cs: simple_form: hints: + account: + display_name: Vaše celé jméno nebo přezdívka. + fields: Vaše domovská stránka, zájmena, věk, cokoliv chcete. + note: 'Můžete @zmínit jiné osoby nebo #hashtagy.' account_alias: acct: Zadejte svůj účet, ze kterého se chcete přesunout jinam, ve formátu přezdívka@doména account_migration: @@ -130,6 +134,7 @@ cs: position: Vyšší role rozhoduje o řešení konfliktů v určitých situacích. Některé akce lze provádět pouze na rolích s nižší prioritou webhook: events: Zvolte odesílané události + template: Sestavte si vlastní JSON payload pomocí interpolace proměnných. Pro výchozí JSON ponechte prázdné. url: Kam budou události odesílány labels: account: @@ -294,6 +299,7 @@ cs: usable: Povolit používat tento hashtag v příspěvcích user: role: Role + time_zone: Časové pásmo user_role: color: Barva odznaku highlighted: Zobrazit roli jako odznak na profilech uživatelů @@ -302,6 +308,7 @@ cs: position: Priorita webhook: events: Zapnuté události + template: Šablona payloadu url: URL koncového bodu 'no': Ne not_recommended: Nedoporučuje se diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 012989244d..15174b2acd 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -20,7 +20,7 @@ de: type_html: Wähle aus, wie mit %{acct} vorgegangen werden soll types: disable: Benutzer*in daran hindern, das Konto verwenden zu können, aber die Inhalte nicht löschen oder ausblenden. - none: Dem Konto eine Verwarnung zusenden, ohne dabei eine andere Aktion vorzunehmen. + none: Dem Konto eine Warnung zusenden, ohne dabei eine andere Aktion vorzunehmen. sensitive: Erzwingen, dass alle Medieninhalte dieses Profils mit einer Inhaltswarnung versehen werden. silence: Verhindert, dass dieses Profil öffentlich sichtbare Beiträge verfassen kann, und verbirgt alle Beiträge und Benachrichtigungen vor Personen, die diesem Profil nicht folgen. Alle Meldungen zu diesem Konto werden geschlossen. suspend: Verhindert jegliche Interaktion von oder zu diesem Konto und löscht dessen Inhalt. Dies kann innerhalb von 30 Tagen rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen. @@ -51,7 +51,7 @@ de: password: Verwende mindestens 8 Zeichen phrase: Wird unabhängig von der Groß- und Kleinschreibung im Text oder der Inhaltswarnung eines Beitrags abgeglichen scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen. - setting_aggregate_reblogs: Keine geteilten Beiträge anzeigen, die bereits kürzlich geteilt wurden (wirkt sich nur auf zukünftige geteilte Beiträge aus) + setting_aggregate_reblogs: Beiträge, die erst kürzlich geteilt wurden, werden nicht noch einmal angezeigt (wirkt sich nur auf zukünftige geteilte Beiträge aus) setting_always_send_emails: Normalerweise werden Benachrichtigungen nicht per E-Mail versendet, wenn du gerade auf Mastodon aktiv bist setting_default_sensitive: Medien, die mit einer Inhaltswarnung versehen worden sind, werden – je nach Einstellung – erst nach einem zusätzlichen Klick angezeigt setting_display_media_default: Medien mit Inhaltswarnung ausblenden @@ -151,7 +151,7 @@ de: admin_account_action: include_statuses: Gemeldete Beiträge der E-Mail beifügen send_email_notification: Benachrichtigung per E-Mail - text: Individuelle Verwarnung + text: Individuelle Warnung type: Aktion types: disable: Einfrieren diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 142ed483f6..ef375261fc 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -134,6 +134,7 @@ et: position: Kõrgem roll otsustab teatud olukordades konfliktide lahendamise. Teatud toiminguid saab teha ainult madalama prioriteediga rollidega webhook: events: Saadetavate sündmuste valik + template: Koosta oma JSON manus kasutades muutujateasendust. Jäta tühaks tavalise JSONi jaoks. url: Kuhu sündmused saadetakse labels: account: @@ -307,6 +308,7 @@ et: position: Positsioon webhook: events: Lubatud sündmused + template: Manuse mall url: Lõpp-punkti URL 'no': Ei not_recommended: Pole soovitatav diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index a3a45ebea7..23db63dee1 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -134,6 +134,7 @@ fi: position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: events: Valitse lähetettävät tapahtumat + template: Luo oma JSON-hyötykuorma käyttäen muuttujainterpolointia. Jättäessäsi kentän tyhjäksi, käytetään vakio-JSON-kuormaa. url: Mihin tapahtumat lähetetään labels: account: @@ -307,6 +308,7 @@ fi: position: Prioriteetti webhook: events: Tapahtumat käytössä + template: Hyötykuormapohja url: Päätepisteen URL 'no': Ei not_recommended: Ei suositella diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index a8e9f474bc..b07db9a9a4 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -2,6 +2,10 @@ nn: simple_form: hints: + account: + display_name: Ditt fulle namn eller ditt tøysenamn. + fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. + note: 'Du kan @nemne folk eller #emneknaggar.' account_alias: acct: Angi brukarnamn@domene til brukaren du ynskjer å flytta frå account_migration: @@ -130,6 +134,7 @@ nn: position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet webhook: events: Vel hendingar å senda + template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON. url: Kvar hendingar skal sendast labels: account: @@ -294,6 +299,7 @@ nn: usable: Gje tut lov til å nytta denne emneknaggen user: role: Rolle + time_zone: Tidssone user_role: color: Emblemfarge highlighted: Vis rolle som emblem på brukarprofil @@ -302,6 +308,7 @@ nn: position: Prioritet webhook: events: Aktiverte hendingar + template: Nyttelastmal url: Endepunkts-URL 'no': Nei not_recommended: Ikkje anbefalt diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 6889638fa5..b566dd3712 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -2,6 +2,10 @@ 'no': simple_form: hints: + account: + display_name: Ditt fulle navn eller ditt morsomme navn. + fields: Din hjemmeside, uttalelse, alder, eller alt annet du vil. + note: 'Du kan @nevne andre eller #emneknagger.' account_alias: acct: Spesifiser brukernavn@domene til brukeren du vil flytte fra account_migration: @@ -18,6 +22,8 @@ disable: Forhindre brukeren fra å bruke kontoen sin, men ikke slett eller skjul innholdet deres. none: Bruk dette for å sende en advarsel til brukeren uten å utløse noen andre handlinger. sensitive: Tving alle denne brukerens medievedlegg til å bli merket som følsomme. + silence: Forhindre at brukeren kan legge ut innlegg med offentlig synlighet, skjule innleggene og varslene sine fra folk som ikke følger dem. Lukker alle rapporter mot denne kontoen. + suspend: Forhindre interaksjon fra eller til denne kontoen og slett innholdet. Tilbakestiller innholdet innen 30 dager. Lukk alle rapporter mot denne kontoen. warning_preset_id: Valgfritt. Du kan fortsatt legge til tilpasset tekst til slutten av forhåndsinnstillingen announcement: all_day: Hvis noen av dem er valgt, vil kun datoene av tidsrammen bli vist @@ -56,6 +62,7 @@ setting_show_application: Appen du bruker til å publisere innlegg vil bli vist i den detaljerte visningen til innleggene dine setting_use_blurhash: Gradientene er basert på fargene til de skjulte visualitetene, men gjør alle detaljer uklare setting_use_pending_items: Skjul tidslinjeoppdateringer bak et klikk, i stedet for å automatisk la strømmen skrolle + username: Du kan bruke bokstaver, tall og understrekingstegn whole_word: Når søkeordet eller setningen bare er alfanumerisk, aktiveres det bare hvis det samsvarer med hele ordet domain_allow: domain: Dette domenet vil være i stand til å hente data fra denne serveren og dets innkommende data vil bli prosessert og lagret @@ -70,6 +77,7 @@ hide: Skjul filtrert innhold fullstendig, som om det ikke eksisterte warn: Skjul det filtrerte innholdet bak et varsel som omtaler filterets tittel form_admin_settings: + activity_api_enabled: Teller med lokale publiserte innlegg, aktive brukere og nye registreringer i ukentlige bøtter backups_retention_period: Behold genererte brukerarkiv i det angitte antall dager. bootstrap_timeline_accounts: Disse kontoene vil bli festet til toppen av nye brukeres følge-anbefalinger. closed_registrations_message: Vises når det er stengt for registrering @@ -77,6 +85,7 @@ custom_css: Du kan bruke egendefinerte stiler på nettversjonen av Mastodon. mascot: Overstyrer illustrasjonen i det avanserte webgrensesnittet. media_cache_retention_period: Mediafiler som lastes ned vil bli slettet etter det angitte antall dager når det settes til en positiv verdi, og blir lastet ned på nytt ved behov. + peers_api_enabled: En liste over domenenavn denne serveren har oppstått i fødiverset. Det finnes ikke data om du føderer med en gitt server, for akkurat det serveren din vet om. Dette brukes av tjenester som i all hovedsak innhenter føderasjonsstatistikk. profile_directory: Profilkatalogen viser alle brukere som har valgt å kunne bli oppdaget. require_invite_text: Når registreringer krever manuell godkjenning, må du gjøre «Hvorfor vil du bli med?»-tekstinput obligatorisk i stedet for valgfritt site_contact_email: Hvordan mennesker får tak i deg for rettslige spørsmål eller brukerstøtte. @@ -87,6 +96,11 @@ site_title: Hva man kan kalle tjeneren din utover domenenavnet. status_page_url: URL-adressen til en side hvor folk kan se tilstanden til denne tjeneren under et avbrudd theme: Tema som vises for nye brukere og besøkende som ikke er logget inn. + thumbnail: Et omtrent 2:1 bilde vist sammen med serverinformasjonen din. + timeline_preview: Logget ut besøkende vil kunne bla gjennom de siste offentlige innlegg tilgjengelig på serveren. + trendable_by_default: Hopp over manuell gjennomgang av populære innhold. Individuelle elementer kan fjernes fra populært etter faktaen. + trends: Trender viser hvilke innlegg, emneknagger og nyheter som får trekkraft på serveren din. + trends_as_landing_page: Vis populære innhold til innloggede brukere og besøkende i stedet for en beskrivelse av tjeneren. Krever populært for å bli aktivert. form_challenge: current_password: Du går inn i et sikkert område imports: @@ -106,10 +120,12 @@ text: Beskriv en regel eller krav til brukere på denne serveren. Prøv å holde den kort og enkelt sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. + webauthn: Hvis det er en USB-nøkkel må du sette den inn og om nødvendig trykke på den. tag: name: Du kan bare forandre bruken av store/små bokstaver, f.eks. for å gjøre det mer lesbart user: chosen_languages: Hvis noen av dem er valgt, vil kun innlegg i de valgte språkene bli vist i de offentlige tidslinjene + role: Rollekontroller som bestemmer rettigheter brukeren har user_role: color: Farge som skal brukes for rollen gjennom hele UI, som RGB i hex-format highlighted: Dette gjør rollen offentlig synlig @@ -118,6 +134,7 @@ position: Høyere rolle bestemmer konfliktløsning i visse situasjoner. Enkelte tiltak kan bare utføres på roller med lavere prioritet webhook: events: Velg hendelser som skal sendes + template: Skriv din egen JSON nyttelast ved å bruke variabel interpolering. La stå tom for standard JSON. url: Hvor hendelser vil bli sendt til labels: account: @@ -219,12 +236,15 @@ hide: Skjul fullstendig warn: Skjul med en advarsel form_admin_settings: + activity_api_enabled: Publiser samlet statistikk om brukeraktivitet i API backups_retention_period: Brukers oppbevaringsperiode for arkiv bootstrap_timeline_accounts: Anbefaler alltid disse kontoene til nye brukere closed_registrations_message: Egendefinert melding når registrering ikke er tilgjengelig content_cache_retention_period: Oppbevaringsperiode for innholdsbuffer custom_css: Egendefinert CSS + mascot: Egendefinert maskot (legacy) media_cache_retention_period: Oppbevaringsperiode for mediebuffer + peers_api_enabled: Publiser liste over oppdagede instanser i API profile_directory: Aktiver profilkatalog registrations_mode: Hvem kan opprette konto require_invite_text: Krev en grunn for å bli med @@ -236,10 +256,13 @@ site_short_description: Beskrivelse av server site_terms: Retningslinjer for personvern site_title: Servernavn + status_page_url: Status side lenke theme: Standard tema thumbnail: Miniatyrbilde til server + timeline_preview: Tillat uautentisert tilgang til offentlige tidslinjer trendable_by_default: Tillat trender uten foregående vurdering trends: Aktiver trender + trends_as_landing_page: Bruk trender som landingsside interactions: must_be_follower: Blokker varslinger fra ikke-følgere must_be_following: Blokker varslinger fra personer du ikke følger @@ -276,6 +299,7 @@ usable: Tillat innlegg å bruke denne emneknaggen user: role: Rolle + time_zone: Tidssone user_role: color: Merkefarge highlighted: Vis rolle som merke på brukerprofiler @@ -284,6 +308,8 @@ position: Prioritet webhook: events: Aktiverte hendelser + template: Nyttelast mal + url: Endepunkt lenke 'no': Nei not_recommended: Ikke anbefalt recommended: Anbefalt diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index d765e2ed06..88687cb78e 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -134,6 +134,7 @@ sl: position: Višja vloga se odloča o razrešitvi sporov v določenih situacijah. Določena dejanja lahko izvede le na vlogah z nižjo prioriteto webhook: events: Izberite dogodke za pošiljanje + template: Sestavite svojo obremenitev JSON z uporabo interpolacije spremenljivk. Za privzeti JSON pustite prazno. url: Kam bodo poslani dogodki labels: account: @@ -307,6 +308,7 @@ sl: position: Prioriteta webhook: events: Omogočeni dogodki + template: Predloga obremenitev url: URL končne točke 'no': Ne not_recommended: Ni priporočeno diff --git a/config/locales/sk.yml b/config/locales/sk.yml index adc4e8b59d..7e055acf79 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -945,7 +945,7 @@ sk: carry_mutes_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a stíšený. notification_mailer: favourite: - body: 'Tvoj príspevok bol uložený medzi obľúbené užívateľa %{name}:' + body: 'Tvoj príspevok bol obľúbený užívateľom %{name}:' subject: "%{name} si obľúbil/a tvoj príspevok" title: Novo obľúbené follow: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index b963c64673..a3060f294b 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -399,6 +399,7 @@ sl: confirm_suspension: cancel: Prekliči confirm: Suspendiraj + permanent_action: Z razveljavitvijo suzpenza ne boste obnovili nobenih podatkov ali razmerij. stop_communication: Vaš strežnik bo prenehal komunicirati s temi strežniki. title: Potrdi domenski blok za %{domain} created_msg: Domenski blok se sedaj obdeluje @@ -791,6 +792,7 @@ sl: approved: Potrebna je odobritev za prijavo none: Nihče se ne more prijaviti open: Vsakdo se lahko prijavi + title: Nastavitve strežnika site_uploads: delete: Izbriši naloženo datoteko destroyed_msg: Prenos na strežnik uspešno izbrisan! @@ -1798,6 +1800,7 @@ sl: signed_in_as: 'Vpisani kot:' verification: here_is_how: Kako to poteka + instructions_html: Spodnjo kodo kopirajte in prilepite v HTML svojega spletnega mesta. Nato dodajte naslov svoje spletne strani v eno od dodatnih polj v svojem profilu v zavihku »Uredi profil« in shranite spremembe. verification: Potrditev verified_links: Vaše preverjene povezave webauthn_credentials: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index cbd60dc5b0..b09488aa12 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -466,7 +466,7 @@ sr-Latn: title: Uvezi blokirane domene no_file: Nijedan fajl nije odabran follow_recommendations: - description_html: "Predlozi za praćenje pomažu novim korisnicima da brzo pronađu zanimljiv sadržaj. Kada korisnik nije dovoljno interagovao sa ostalima da bi se za njega formirali personalizovani predlozi za praćenje, ovi nalozi će biti preporučeni umesto toga. Oni se generišu na dnevnoj bazi iz skupa naloga sa najviše nedavnih angažovanja i najviše lokalnih pratilaca za jedan jezik." + description_html: "Predlozi za praćenje pomažu novim korisnicima da brzo pronađu zanimljiv sadržaj. Kada korisnik nije dovoljno komunicirao sa drugima da bi se za njega formirali personalizovani predlozi za praćenje, ovi nalozi će biti preporučeni umesto toga. Oni se generišu na dnevnoj bazi iz skupa naloga sa najviše nedavnih angažovanja i najviše lokalnih pratilaca za jedan jezik." language: Za jezik status: Status suppress: Potisni preporuke za praćenje @@ -1200,7 +1200,7 @@ sr-Latn: filters: contexts: account: Profili - home: Vremenska linija početne + home: Početna stranica i liste notifications: Obaveštenja public: Javne vremenske linije thread: Razgovori @@ -1631,8 +1631,8 @@ sr-Latn: default_language: Isto kao jezik okruženja disallowed_hashtags: few: 'sadrži zabranjene heštegove: %{tags}' - one: 'sadrži zabranjeni hešteg: %{tags}' - other: 'sadrži zabranjene heštegove: %{tags}' + one: 'sadrži zabranjenu heš oznaku: %{tags}' + other: 'sadrži zabranjene heš oznake: %{tags}' edited_at_html: Izmenjeno %{date} errors: in_reply_not_found: Objava na koju pokušavate da odgovorite naizgled ne postoji. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 8b4954d16a..6398d0b79c 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -466,7 +466,7 @@ sr: title: Увези блокиране домене no_file: Ниједан фајл није одабран follow_recommendations: - description_html: "Предлози за праћење помажу новим корисницима да брзо пронађу занимљив садржај. Када корисник није довољно интераговао са осталима да би се за њега формирали персонализовани предлози за праћење, ови налози ће бити препоручени уместо тога. Они се генеришу на дневној бази из скупа налога са највише недавних ангажовања и највише локалних пратилаца за један језик." + description_html: "Предлози за праћење помажу новим корисницима да брзо пронађу занимљив садржај. Када корисник није довољно комуницирао са другима да би се за њега формирали персонализовани предлози за праћење, ови налози ће бити препоручени уместо тога. Они се генеришу на дневној бази из скупа налога са највише недавних ангажовања и највише локалних пратилаца за један језик." language: За језик status: Статус suppress: Потисни препоруке за праћење @@ -1200,7 +1200,7 @@ sr: filters: contexts: account: Профили - home: Временска линија почетне + home: Почетна страница и листе notifications: Обавештења public: Јавне временске линије thread: Разговори @@ -1630,9 +1630,9 @@ sr: content_warning: 'Упозорење на садржај: %{warning}' default_language: Исто као језик окружења disallowed_hashtags: - few: 'садржи забрањене хештегове: %{tags}' - one: 'садржи забрањени хештег: %{tags}' - other: 'садржи забрањене хештегове: %{tags}' + few: 'садржи забрањене хеш ознаке: %{tags}' + one: 'садржи забрањену хеш ознаку: %{tags}' + other: 'садржи забрањене хеш ознаке: %{tags}' edited_at_html: Измењено %{date} errors: in_reply_not_found: Објава на коју покушавате да одговорите наизглед не постоји. diff --git a/config/locales/th.yml b/config/locales/th.yml index 264beffaf4..f7309bbb96 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1650,9 +1650,9 @@ th: mastodon-light: Mastodon (สว่าง) time: formats: - default: "%d %b %Y, %H:%M" + default: "%d %b %Y %H:%M น." month: "%b %Y" - time: "%H:%M" + time: "%H:%M น." two_factor_authentication: add: เพิ่ม disable: ปิดใช้งาน 2FA diff --git a/config/locales/tt.yml b/config/locales/tt.yml index 4006aac625..3ee9b27d7c 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -337,6 +337,8 @@ tt: accept: Кабул итү back: Кире security: Хәвефсезлек + status: + account_status: Хисап халәте challenge: confirm: Дәвам итү date: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 08e0eeb17c..e8f3c26b9c 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -31,7 +31,7 @@ vi: accounts: add_email_domain_block: Chặn tên miền email approve: Phê duyệt - approved_msg: Đã phê duyệt %{username} đăng ký thành công + approved_msg: Đã phê duyệt đăng ký %{username} are_you_sure: Bạn có chắc không? avatar: Ảnh đại diện by_domain: Máy chủ @@ -964,7 +964,7 @@ vi: view_profile: Xem trang hồ sơ view_status: Xem tút applications: - created: Đơn đăng ký được tạo thành công + created: Đã gửi yêu cầu đăng ký destroyed: Đã xóa đơn đăng ký logout: Đăng xuất regenerate_token: Tạo lại mã truy cập @@ -1592,7 +1592,7 @@ vi: show_more: Đọc thêm show_newer: Mới hơn show_older: Cũ hơn - show_thread: Trích nguyên văn + show_thread: Nội dung gốc title: '%{name}: "%{quote}"' visibilities: direct: Nhắn riêng diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 7ec003135d..7f614f725e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -810,7 +810,7 @@ zh-TW: message_html: 不相容的 Elasticsearch 版本:%{value} version_comparison: Elasticsearch %{running_version} 版正在執行,需要 %{required_version} 版。 rules_check: - action: 管理服务器规则 + action: 管理伺服器規則 message_html: 您尚未定義任何伺服器規則。 sidekiq_process_check: message_html: 沒有佇列 %{value} 的 Sidekiq 行程,請檢查您的 Sidekiq 設定組態 From a7ce529b7070b0605746abffdedc7d14643cb32d Mon Sep 17 00:00:00 2001 From: Eashwar Ranganathan Date: Mon, 7 Aug 2023 06:41:34 -0700 Subject: [PATCH 028/163] Make mastodon-streaming systemd unit templated (#24751) Co-authored-by: Emelia Smith --- dist/mastodon-streaming.service | 47 +++------------------------ dist/mastodon-streaming@.service | 54 ++++++++++++++++++++++++++++++++ dist/nginx.conf | 8 +++++ 3 files changed, 66 insertions(+), 43 deletions(-) create mode 100644 dist/mastodon-streaming@.service diff --git a/dist/mastodon-streaming.service b/dist/mastodon-streaming.service index 533feb5341..66cc3474ef 100644 --- a/dist/mastodon-streaming.service +++ b/dist/mastodon-streaming.service @@ -1,51 +1,12 @@ [Unit] Description=mastodon-streaming After=network.target +Wants=mastodon-streaming@4000.service [Service] -Type=simple -User=mastodon -WorkingDirectory=/home/mastodon/live -Environment="NODE_ENV=production" -Environment="PORT=4000" -ExecStart=/usr/bin/node ./streaming -TimeoutSec=15 -Restart=always -LimitNOFILE=65536 -# Proc filesystem -ProcSubset=pid -ProtectProc=invisible -# Capabilities -CapabilityBoundingSet= -# Security -NoNewPrivileges=true -# Sandboxing -ProtectSystem=strict -PrivateTmp=true -PrivateDevices=true -PrivateUsers=true -ProtectHostname=true -ProtectKernelLogs=true -ProtectKernelModules=true -ProtectKernelTunables=true -ProtectControlGroups=true -RestrictAddressFamilies=AF_INET -RestrictAddressFamilies=AF_INET6 -RestrictAddressFamilies=AF_NETLINK -RestrictAddressFamilies=AF_UNIX -RestrictNamespaces=true -LockPersonality=true -RestrictRealtime=true -RestrictSUIDSGID=true -RemoveIPC=true -PrivateMounts=true -ProtectClock=true -# System Call Filtering -SystemCallArchitectures=native -SystemCallFilter=~@cpu-emulation @debug @keyring @ipc @memlock @mount @obsolete @privileged @resources @setuid -SystemCallFilter=pipe -SystemCallFilter=pipe2 -ReadWritePaths=/home/mastodon/live +Type=oneshot +ExecStart=/bin/echo "mastodon-streaming exists only to collectively start and stop mastodon-streaming@ instances, shimming over the migration to templated mastodon-streaming systemd unit" +RemainAfterExit=yes [Install] WantedBy=multi-user.target diff --git a/dist/mastodon-streaming@.service b/dist/mastodon-streaming@.service new file mode 100644 index 0000000000..f43c4ea4a6 --- /dev/null +++ b/dist/mastodon-streaming@.service @@ -0,0 +1,54 @@ +[Unit] +Description=mastodon-streaming on port %I +After=network.target +# handles using `systemctl restart mastodon-streaming` +PartOf=mastodon-streaming.service +ReloadPropagatedFrom=mastodon-streaming.service + +[Service] +Type=simple +User=mastodon +WorkingDirectory=/home/mastodon/live +Environment="NODE_ENV=production" +Environment="PORT=%i" +ExecStart=/usr/bin/node ./streaming +TimeoutSec=15 +Restart=always +LimitNOFILE=65536 +# Proc filesystem +ProcSubset=pid +ProtectProc=invisible +# Capabilities +CapabilityBoundingSet= +# Security +NoNewPrivileges=true +# Sandboxing +ProtectSystem=strict +PrivateTmp=true +PrivateDevices=true +PrivateUsers=true +ProtectHostname=true +ProtectKernelLogs=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectControlGroups=true +RestrictAddressFamilies=AF_INET +RestrictAddressFamilies=AF_INET6 +RestrictAddressFamilies=AF_NETLINK +RestrictAddressFamilies=AF_UNIX +RestrictNamespaces=true +LockPersonality=true +RestrictRealtime=true +RestrictSUIDSGID=true +RemoveIPC=true +PrivateMounts=true +ProtectClock=true +# System Call Filtering +SystemCallArchitectures=native +SystemCallFilter=~@cpu-emulation @debug @keyring @ipc @memlock @mount @obsolete @privileged @resources @setuid +SystemCallFilter=pipe +SystemCallFilter=pipe2 +ReadWritePaths=/home/mastodon/live + +[Install] +WantedBy=multi-user.target mastodon-streaming.service diff --git a/dist/nginx.conf b/dist/nginx.conf index fc68e9a6d1..39fa58e50d 100644 --- a/dist/nginx.conf +++ b/dist/nginx.conf @@ -8,7 +8,15 @@ upstream backend { } upstream streaming { + # Instruct nginx to send connections to the server with the least number of connections + # to ensure load is distributed evenly. + least_conn; + server 127.0.0.1:4000 fail_timeout=0; + # Uncomment these lines for load-balancing multiple instances of streaming for scaling, + # this assumes your running the streaming server on ports 4000, 4001, and 4002: + # server 127.0.0.1:4001 fail_timeout=0; + # server 127.0.0.1:4002 fail_timeout=0; } proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g; From f444c2a206fe047e97b2dff8f16da6f50658d3fb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 7 Aug 2023 11:58:12 -0400 Subject: [PATCH 029/163] Spec media attachment speedups (#25416) --- spec/fixtures/files/attachment.gif | Bin 108560 -> 30184 bytes spec/fixtures/files/attachment.webm | Bin 653991 -> 43777 bytes spec/models/media_attachment_spec.rb | 96 ++++++++++----------------- 3 files changed, 35 insertions(+), 61 deletions(-) diff --git a/spec/fixtures/files/attachment.gif b/spec/fixtures/files/attachment.gif index 2937f5abefbf66a6b90302110e6962fad59ac3f7..89dd73ad3e9fb61eaf4467b9d44c1c9cc9dff16a 100644 GIT binary patch delta 29668 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 literal 108560 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
GU3Qr}qmSyWGcMoiu=7N_?*iry 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 UnyBs1s9BMhaoM^(BOm|(J5Md5I{*Lx diff --git a/spec/fixtures/files/attachment.webm b/spec/fixtures/files/attachment.webm index 3babe5cf594f1877f9c235fac68941e53bca47b8..edde44396046dffb96248b3e3e7ba062ba89057c 100644 GIT binary patch delta 353 zcmZ4fRlV^V(**fQCa2a$CW+vNbVddcSang*cXr7x-`(B8t6M}pSEdE8XU0j1)+EMH+F5aAcpgS31L;8tDu8TWdLW3MbJpKJ#+NT&8Sb-79(GbAEAn&}b jRAHsfW<^n(m0}>TPu$(VxshRe*Y`%ok4=mf9~zkf`NW2h delta 610549 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 BDQh2d@yNSvrs7NUn@l@pm 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

{-N}YAAYH*xULTC)}c}1_+LQ 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 z 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

xdu1XcyE)2#Pq8?#%B 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

ep9tR?~7$NJ89%V_!0J2;U;Hq;g z#+1OKRUH{_f5dmT@F0BE|2hxz>ka*7d8R&Bsqi*aXjLjHc43_0ASzXyx4fN`I{WL8 z;FaZwoY0|p;xS&BeP*t&Wga=**J5}M3SagbMA5C2!9C=Zg(<-8b;glGr@GqsibkNG zU;$EWSWCDFdQ7e}U;kJ9b4ZtcEeemJ@HSq=gM^>ff0ZjW$`^=noc5#zNVWErmlKX#+3Sm>BgtG37>Jmb>)rClKF~X= zcD}GO=|xJ#YJ&Nm>8FXd)f@`PDjb8lJ3Ic&(2yMN034T$c^sQ!_Gf+_5n4AqDD+iX zcF|Kfe{s>^-(bTxvsA!vR4xT{hy+BY?HX(&Vzem2e=$gdIo86!VN8mw=~T%tp@I+( zY7#RiE7z1S?TSy)8>s_~R6Y1yUwY+*%_H9y^o#Si(d?=Xcl<7A62kJFmV3ahA`u)w zY^@;Sc+2~)5e#``Ys2U}zJtA!7PHF|Cs>_wfAqq&^e`TGXzBsR#^4k?fRXc@NCD=Y zCKo$W-rpny-Fd4gA0;dM=^6s8%L5p0NNyg}5C(G2{tGDM6!W3e-S|#Zq=iS@?9`n( z)2};4Q`CXcnsJQ^X`8g?+qWTnduFXC7*PWUSSVq3De5KL7+JRf0FY7@-_{XW?=?i{jstPZ?flE)sB+28|lU8^8z#0>ovZIN75- z&bQl(MhQNJKPpE1t1@E#apGut0NbGgf8i59H8h5tV+HVnAQG_O(yq6!kPXbYr5>Yz zC-Jv4KoC-l0WkL_FX$A$uqAx308bLZ194A^01`*Hv;Y#3jX+sM{q_i^{MRT1(>j1{ zUkTZTmE#G0lP~SGCgl2Ncj}=-`HZ#m9Xi&qRw{OsB`<8kkK5!h5WP{AK$(RU~`fk z3B}d{Zq#~0aOPa(=M-sM?E=&a1|7a2ZvGl^(S0wFrYcVQM+va~xEwBOXkzX~#G z_H&K{^nz&_d1hk4qGvt*hkq~ z^&~^+sm9^Jws6hw;UvzAc)xfDPMN6{8j2rPjx<%*mw*3;HHI!D;{`3z^D~9~1%ukn z6fQOK+pHrssg*#?Ei7VMNj^>&v};@H@oyBy0NXou>mT08*lE9_e{{dysg^IS9gxKX zaZ2NC(Ih7=_#)VIzPwk^7eJzK=~mYW1!5c=oLbw6?D-NfCR;ooZal3n`~&|%1((&= zS|Dl_aPWoR$K}^0>lR|klmoJSfBj0c2wZJgfOX(BO-TeCgnaS;otQ*>bvvR-Gq%S7 zS@UmgH|f8EO5AM?e|uJs_p%T({DmLF`kf;mzlJ5RIPT->uWle>>?K4(ck0R9KIH=8 z7)_qMtaS%duN(b@yG)f*lLUGRhjyZTA+-$pE~>Cr;J)RfpWYu!6nLZoc`q=M8eQ#W zW|qT+@M(4^szwR$PGmYE)-B?Y^^J0mbWmv4huK*yIz9(oe-5LqAeC)fV*>*iWBL%S zFh|*|2+!fVgeEE_XD_^C6N&(RP`Mr!;%mHf$AJu?)1N@&+a7~th^ZC1O79L_-_Vx!V(L*O>XbnC^+r^1FYEqbM`J<&!6%7jg7 znDrZZ5U6h%HR{tw=tY08qC}ra-$B`-2Wz?(>u3U#2o!)6#q=ODkKb-&Dom6yt0H7W zFBG-Kf88CJ357>%$-}#W3ow){o5%1dGHMA_^D|^{%%rh6*MaW9r&U(lB6ZLyQ&ZIln^3yjGaA%HNj%_Ud_$2L+q3vtZ{*u}CavWU`5D{5K? zHDG`z5u2W&hHw^&5JeG}fDxZjETE{901$g&TnDauM;)XDSV?q%+qkWUs{jPhm)T#W zf5gs;G$c*ooEy#?fXy=~w`ycmU50g#X;Y0S$4Z`8AZgMS@uxPLG%F z?s^49@C5N9Jhpg>?-btsmSbi-Gah5GWZXMCg3X+H%JWK$88)C$DP$|8NiFQ!DbR&_ zY+wtTO0O73068RS=@VA5k;F}%)aTAD^M_#NR_~0;YGqwwml0C{=7~v$0HWnKe`^A{ zHIym$vC|GjQzs@anV{|I2dh(zI zgXluh?=Gr%!N3t*!dD=Y+z2HgNh4Z0P-RDCG0&S?h&-xF`YBWtkJcITC47n@TCc+8bYR(i{OCo|=(9@l!e++Jh?J>OC zEpU$HL#XS*KZ%^&HF!;;@0=j75b1o31stxVGJVJwvAC`_t=J(PY6>`qzy3ZSi_1Q< zCsOLAMUmq^{jJ1i#=YDpdPSYAyA_)Jao~Y4mqPK3;4yGNQoy~?sZe;lVVr?+On7kBwnFL!rB%1)|()~W#GZ5TzVqMkL7dsOl` zfwQrZEmI59#ThDp9yx*q^7#w#RRVZQz!OS#SFw|o*KWWPA;Wcb>*?h7ec*r%Fcy@3 zh6CLL%kT|ucAwZ71XR^V@)V_*BE>;=0Yq+!@IVw#6*_SQx|?3daJ9E=Fs~wgsSkj--Nqm>FyqlcztC~{Sp!R2;S|r4 zS*|N`3n6f*X=ZkXyFi<{PPvO(u96<@K!lCp`zN#NlioMif7lk}C);!aM%)u-hd8lF z<1R4c4do7;cgw$p=_VD`WC>twchTYzF`X2L%lv$Q=31D%fguIoPv>Pwa+k1-th06L z?~Xos=vN|mf6y0*z=~oM!B0BP#MA0Q8O0A4Fi}HQ=JhmGeoP#+`2Q_2>x{%hU4%r+_2@r(8S8P3_~P(4j>2#| zQ@omuKRK-Mjm6Pg>2W6x_5Z)tD?^z0(irK`V+Live-h_gh=Btplv*vHZDc)y*SY*+im0tS=;D*!Yb5{QSBU`p zB>Ypl(@FKlPSL^XNMl#2N{P+^bb`Qr97=rfe=}NKWUG3PjtxgN?~lB588U!sC!|YB zB6uLA{-$k#U744`wNuF6DEPFc6KkUwuh*i2vTUiaPIT}i3oxc(S?;$A?+WgimQCb& zfD8JirK^7u9qEQ_3InN-GqqP`*wzILZ_Z5i#7c-nTZ&?b|FM)eXpfx=OtZt8F|eKl ze*(MrKU=dVpq%cAatip2>_#N+;6vjabc=a=9V0VB&knR%)t18L1=j~kHG?CGB9eRc zzlILMQ>YJ#K(GHAtgw8rbQ6NH5HL5?6`D}~ICv*D*L^sk;;e7iB90q>NL2y}RD zyZ}}5Bbx+}r}Z=k)Xp`nwdF z%CYITukBJ1qS6SM`ps{<#HOGXX=I#L>3!vE&c2T?IFA4fQM4? z3+9$+2ZJ`#wTEh$iT&$f<3|1XGD0xBP%7F_%9n@g09_6QLKXt>Q=Pl{FFYwDhk|nw zAr(`)xF4G&!&Gu9AcA@YtYeP>e<#X8-j+g4mXG}n9#&QepWgECM`30=;aZx=>ZG+m zFFO;=0?lyVo;$~F!)P{&)|t+r3ThcnONhY)F1y^aXjqnY;<`d~Pll0cnx7=yL_(*{ z4~p;4YKbh?ln7iS4AFEtiHEa&OY6ZKXGFQmdoZkxAI7Vm*h%G>c*a1uOlXE zG{SZOSUUigynE>Pe8wJ$@iA|tlaQU1-pux5ph?CJTAoa|pqo<#ZV?^&LUVz%{QTT? zH|M1qoh*Pv^VY1k{EK&j(`XWHmDH7Nz^tZpqO~iAo>cR_S8>sES%h)5kSL8;2ALCN z5cdAoD!6hVkzkxV6oar$e?n)`gm_zm-6{P+oN;U~nFoWgf0<}GMip^#`gCl~D7C`! z42NB1VBp_i-M8!(n;cvS6}63oII*FRUryd4x=p(&;>A?j&&}o2o%wta4(gl0XQM7W z8qHZiO*izK5vyi^kwSn+YHdssfKB_cxWZ?4{mUqYgDHBv6*ydFe@%~aU^g|gyow3;!Bg88D!o25fJ*d&n(xW4nn%tp4me77*sTtjJX`0Me~MI+i$1!7K&NQEwsbqK zmNo-0k5DuLBo|+2@s0t6ygtaO2*cV9EV@5fAsgwDjtHL^PpB?>Tn4=cQ=p*K*5w5W zDH$Fr#!~&MONF`cRLB>|A`$mi(zaJc)LHK}Rnce2YsFYuT6qZuk#q&KIl)SlP{nP* z1KD>ruMe(9f5cWCZ6gf9*0YDwfTym8fGDghQLvWg5Z*r>R$v>v(&@03Z9i^B+jMgU zg$el5ytF~WO31J(ZfJgn^VpCikB9n7J0&gP=jby@@J|sPKz#_b2Nc{_xVr$3!$c9` zu>*hyO{4tXzNDjbim0Ap9vQ?2xuJEdKjL{yInJIgsWp zxbW`^e#Tt7kL-YGB9Z&?p3tS;nSA8JPdFP~qFey7HW$^S@9DHt|B>DgoG7;sm)}ln zQk5B!6bHE&q-tRrCRMh3C?=+QQa4Z$4iJEg7KvGs8;~#gk{N?DuI6hrO#_e>B_7+c zC?dkufBBZXs&dW{A7=)o64*!vtfGtQP&u}rs*2DdG~t!|5R%V|>EJYUbCtvnqm|MX z*znTgNrcoJi@oY2cj6DXr<~p?>d=4Z5}G)~%D53E_uGcRn$N1it<8U=`NKZ(>o zCOtEZRUiTrE|Eb)`hVTTq&7A4V7kYunP=S4e+sIcKcY%v$!3vQ0&))Bv-+ey0Di_2 zVsil$z#0%^)6QOY50R{2026V6&8RRjP%KG#dlHjC0?J;d&=)nnRt+!lZ4pn_GMnOG zO=N`Ge{OY15O^-fe3laAnG&K9NceI9n11L$G`B#5WTx;W(}&YXY_dbS1@rxzF_7LQ zf8RVu0aoiBF_mU$A&q1_eiK=k121~c&_UtM#svF_=fx~*Py>PEbFCT8(I6kk8mdeC zE&>^reAG?@mk&15YElaEUVWeMvu65 zL@Yj>FiEta!ocWZ%{oUJ;C)rLh7`YVExXwyRIYF&1Wmw-(O`q9IAgF)hx`*O&Cais zJf<)>Y!!7h%BoB@;fYT76n)@9024m6?xlFvm#D7 z(Dy~bOOf#peQhY*eb!H}Fx7K|2s;dxpWD%r<}!1B7&djOv7|sx!jy&1e^9-Pa%yk@ zqe-KI27~~Sr2q^N>;M=59#}7M9s53Ov~O6swgy~ko66ARY~AUqs(;K`#Xiq_mVS)& zzFx$#@e)IRlSN_mokM_-FX#N78O}|kFX}C=!M1fNmOAS@m7IE_gZ)c# zehwv!tKwORhB@hX8;nj_=IR0yf_$O9;r}1%;B+BPNZ_gu2`^Ubhg_+CaI2kXyF_01uMws9oW?b- zg?(?;4+Wa)(>~-k`#NIs*^G^hohL9MlQ;ztsyeRVoG#mO%b>qx?dee^7r+xud)&a0F-W|H!<|1o!9fAp!ifDxMY9T~VF7m)YdL!h0^l z-8-TL(a!)BAWmX{z;o3-1r2xu@Hu7$4^Uopr`v3r}*7y2a)g4-k zal`xw#HI^yT=&?C>OVcdl*HRz0z-BLO}yLRemnRl%{`jc*Y&fA@}6(}kewy6=Lgj_e!kTbef&P6YzpQqt&4h~|rCnj+j=ygvZgp7`+2 z?@vaiB45fO^`DI+D+$Jq8TrI-Z#=+N zw#kR+@<5X875R>XoKaO;Ke;;SlWvh&v2}x0#@fUA)t<-cI{~I@OiV=!u)?DqZA+Dj zatR>|Y*A;}MX{01#lwPwn};QtW0CeCwU58#3%E(YW{^tGf*8;uh$R^TzTm$gVD)1i z;@DUZe{3;LqO0o2q{0gv=^G4UyzzrfLRFz6-5kV7gIA{KtB zUtk-94IIXncgS6yiFtkNa#g88W7+KIXzFsylH3mY*&Qdd3HDw9;S#o#ni}oCu>wwt zp_|&W`efgdOI}oZ)h0;s9X42vgsS$iJYc$pe|$*|?z|Pf@NQ9)!VCB>nIwD`%bt=o zs#giK)xErtvs5Gsp2#4&cP;L|3+sKF=z_&Vh7lmmc#iad3tog=%5cb3>w6sbMB^ND zBvqbjV_I3#C3Ken7=ALjQP!kf|>P5PY_txyn$E zYS>gf_SVKCqNT)Z;k@COlQsaxa7BTq!r8&KLA{67{LXYGg%l6P9+FNJN9!qu$P76G za1z9oWCgT{3{5}>@FsFuPfipTEC6Wre}$+~Ibs%&bm<$D`lT!O{)XN68W@dtNKmC) zziN$B2zOkyK&>+74W89$`7|Y8GKo$VPv1EB5MqZ+;A@^Kdw7b_&RIqP9=4-g^U7Y+ zxC6+*$1rqCDpk;df{N~ed3@q{{+7eGt8jP<*{S_EERCy}x;~%6FiBXkb{QVDe@V;e zR0$Ea1Q;5z?35r0j&MCDh(`|8oDWHm)ohDTzhjo%O5o&8c8>t*U8$UYgue9dx&7*@ zWOds}&lk%&YVt{s^=yX2F9|k)G`9j}5EKrTTMj%ho3X-zl8r}6tCu7PG!t8F`Z@j^ zmSoc1D1AwZ{>T?kgEFGP%exUaf8_l#|8FAT6;x&t;DZ*O_elTE%B()-mSu>5MP`mN z_XTkQcGK~}V1ylXY+)sSmrc{bCcEgi-9uFUOBDt%uO#pW_!Hk23xIpIu~+n4WNz#_ zSeI@|L1>sNIrHf^Y^P0l+Y6^DZ*=Wm9@7<6FE~}wtN*R;4)N2?tt)ji+*HH zrAR_(u#?zeru(n6@|k-x(0XaBY{8OLiA@VOxkwE9>t~agwudn*f0Mc{EwOtDLG(m! zO;n+V*NSvr3Eb|8QS?0hN96;&>q@+X8S=FCkx-Llm>m=iCD3C26MPdel^)+!#2>d@ zV$F5N=%`;$tLg3-rsRrpi>5eNZ?2u(6%0fDy+SwFwr+wNAYS9oePIVlA@8GOdMA}7pJ30HgF6om1|%Cp?$`m?PgWf$lOZxP{(e_Nlrd{R@bT`o}hLZc&D zb$tC|<*I>2m)0Y_$aC{hVUg#x)kK@+jbG~Jyl0?E(7xCH=`9t)nM_`prVH8KqYJxv zI?UUS~f2Ndk=h2nGBvkrk1+GEa&2ACrnPX40cx{kp7{KQza2#()?`7zNC2TB0I z1|cnDPFV?5R`YiJFRP`k>RnqnRjs={=rocRR*Q(;gO`(n?%K6YX^$ywgPPrKz#=Q0HaEqfd-}k zF~a~15bOXL0C@h|(}+T05X{2 zUHh{;f33MBXN5}8zwA-1O19gb!2Yo-hZFkX7u*L?-+)uMHnQc>j4RO;+7Rm4u>nDV z5uO3*L$hy~A@4F*m7v2U;C;W&F6stmbRq9vZP@V{d&77`{5fcoH>x(X z^Q#S3@YQ?^5)c2);U50825k{23`I%#X>drJ$`Bb`dhRgqrydz=`|bGtrq@J5iF*xR z3ZrYFrqvlWt$*6k9`dsUORFZZbZl1}lsvpi^3OuF9W>zB(QuB>XOD0BtNbC@{7f@D ze}%$Qod)$e=c+kssCf8dX;TE;m*#A@0N#dqX^zLLfGuhceA2dVS1|hyDMX$o7ZRqt zXYl?Nw&i9>BBR7>TzTXgEn4jP==CEB2M9G5y((VCvrI{9HI$55-@W$#nXkH?CDx&T zLU6R=mck}x6>g-!Uf2wxbcZbNYm|(Wf5i9%j0|kOh%9l>0B{BHwhD8aw30%T?=2+) zSvKx${T!_6m2`KM+s_QUyvWB7FYiHxCcVlr9w7*HgUh8>J_}oR{hZ^1Ak#53VTwpp zg;auWXkY49t3}2$?pkpMZqd{pd^YBg7u=~O9en8-4nL3r3!wV#vn_tlL$$md)Iq0yRPp1 zgwp#MGGVrrDOEl87S_s(haFz2hxyrQ0mzQ7e@Xceju}TnH40REgL0w;6=eAsFWkU$JvYNJ%R@bB zR2x)w`9;9in&tmJJOh2~9g67OvPKD9N+hhwnscAYjoDoXkDPpYA z=(c0FXbQXqPPV<>tVSs08B@+A@zdvc6CZ8?+Fs*q$u}g_dT2cF`dm}klGdmkCFRhb zK~TEE6j%sc`zqZX^p3=Ue|V=yN??t0`Giy*n?GsMvWv$f!~E-CBYjaneNoU0+NvlS zom{!x${*&DblHq;cvcJ+>8>u& zA2qF?e+o%T6g82tebyT3)gds_f7=qF@{Ai0REz~58Dl7dl-Y{ZQAYuK>t?VUf8(k36RbY;8pT>JPtdzI ze2stoP3$by#-Zdi!ORZPpE(FLg&(oC>w3oTq!99JhJrc*e#hDSK zUue6k`|JswkQG7}2F5NsX?uWkyrkG@2DQcs4N_lxt?`hAQGxH0sB}tfph}GQAHbDn zy)?`cNb3%Nf01!^@_=#}1+1ecMF@-2#WWYGLwTqn6S?m+w|wkfZXEsK*QOsFWVJ{P z48XcAf?UUR;VG<>%@JT6e5w~<;FG05D&PO%b=0ZpeP|wa>>F0!0eBM8k=2~JOjpK9 zqO30JHa1RWr6qtyNaXW?;h#P#il~52TMf&52qG^xe@V752v$2yJLbF2i3u%_B~diO zY;JbZYTGR*4vRk-)ifUa-%*wbxB~ z8kW~osbdu;twvP@#BPei2Jk$-r;xyti*V}Pljja*?2XtKXC_|VepUhbnq$(D?i0e( z!b5`DE448%!RVyUddmX|BK~ zCfAn*00L%X$yER7@&lnB1HzP&JP>9#e`i(cMW;-P2u2ERcj}1+PahX0avGcka$JZ8 zNXcj_wi4xuZSdKKTUzmLZbuO6Bo_ExyB2HtCut_sgjF&Mr=TCGQOB7O|k zwU{cy8$W6bMLHspy)}qEvPLa7nI-1I?Jg`y(NbI}x`U&FRgbXq(APr##f1K%K z#!VSqFfZI0Wj&B}kTWQ?Z6!eeMqzcFC_4+0ogqc@C12PPI`AA8IB3sbu&vlUmYS`7 z-I|fAO$k4UNtRYD-C1{0xN(>zc+-Hn2pp=jYAdD?7Czy&7yXpTC~iKMui*3;??7D_ z=N#Y>i!G!K&frLfN;w>rBM4$Uf2%0OxY=WYd~2Hp0RNLOnOqH&k&__L<`G#IJ-PrJ z-+lJ(;s%Vm!(7cVl+ZI#Sco#bDuAw;0_uPKZew0TwJHpNv4twxd4OeKC!b(3k7Odm z8iq)M=5w?1#f+^sdXmZO%vwNT?SYexiaskhrW@A?Ne5hZ@$nRbfdxXZQ5K z_192>oE>*23#4W7Cap8Uf6=dH;yAa~sVEz@0ZY?Z3M9{L7n8NHw;B3PIkB9Po%?yylFz#mbl$NrR! zu)#qf@FFMKfj6Qf<)OMz^?pDaJ;*tAQNXYOqe;Pm2FC!Ar~nKQf9wDrw;*)MsJ_4V zmYIY9S37v$`D*>?EUF8YZPajDZnb2OQiK;Erx|$(`4gSpv>VnunF#XGOQf0 z`zN=eN^AFOr6%)*4#&qq1ngJc&(hd8!4b3g$KO3ic?Dm3I%Ht3k`|XB z)R0S&9d8=TslNzlsp4_(G7L!YrBT-9+O#V>aLD6Kr$BJ#e=7*|9irRdaFI;PS4(ji zWGN-&@k7l`i4{#~&nZcox}he%yN=g5gD7H_C0jNGJu+14WEd?6p5jbD{WoyW3>$`f z1;Fy#A$E&Ny;u9&rD_4f7tZ7IB#zSFlHN%iTvZ{j8w@v8u%%SbQkE;ctEpCcAkL*V z3!JUan74mHe-yAYTDIIpbaO_C++#L~(2lzA>X9k`>Pxo;zaCyv^yTW=mgsuHiu=uB zsqoqm@3V!zv1DKH=U z`Y9Ib#fe)SB=)0c`yQ|#f>S9SLduYt%H$PJFUd zVuYI9(jL62fjpCIQXH2~EG}%@`fg_^gq7OaltVdbN(mOj4N;)YshDIIZ0TOGFZzC9 zZ7tu|f7kaUr0DeU9LB2@6deo4?qI&i<|tM`B5C!;-vaY{Z;_S9#z7-N4PYpfrlITu zcnuc09ud(!ZGo)so7g&KVl?q&Ox&W~$92pZvCGt}^%1V~k1&(!zBrdif9d{Lrv$>R zUctzEltCgk1#Vv$M1Cw|wSg@`l<+m95x6$De@$t0Rj?%DB0*T=8q5Fb$W$DP1@QLh zsNlJtcuAcl=*xU@JI8?@N7rPSWyevOP$Igo4QRS4gt{y3BmN*d>qBO&>lf6BzmOd+ z_g;->@^S(eupu&PDLKwYV86gmjxmFIN2`M7ac)wpW&LbH5J-}rJ(5{S$M46KDV zfA_>Qn+UaK&Ffl)jbIDGzAFD^XDj5O`&bQp_u4Q~WCctQcGEM!i6oZM=V>)V5BZyU6O{}{VP7o4%t7W+<}er zpJ^sbfaFC>9~C;@?Zei>UStK?q=2bvf2#)8qBx&?VAuREJ$ZCEHI&hE&?OuixKQC` zx?R{5Li&njYWJ$J;(3e8u0`79%I8(Av>e;j95mA=bnM`p<`a2aP!zGXwr0UBcSs(-&kObo6@vRoX`q!SR$e>(`6ey z6J0pdpFEF1EJYD|f4_)XlK*~bH_|D>*!P|K4F=pPVz$2m2)b#{1;bssjO%H?+ZNrc z|I8@s(RfB?t5q}1mKFXrJ%Z#se`t51+>o|TMJG#iGp@11#dusIx-$AW4SA72vINBS&W`3C9n!)GCO5$cy_1_J=<1*s;I8Fg#r^T z&4BWlAP%7@Kx}?&pa8Bte@|XPc$$?#UO9Rlu9ar6FL~v;e;`0!M_Ud>L5V?$wFe*) z8d0F$rXxgcsB5vsbcNO- zK6x89;_P}I&m94E|dOZ43o0d@Tf7wJ8v3%T!{rzdB zLBZhRc)CX6e2GmIqZ)xv?r8vJdDu4?<4%(DPjoLl54sHOKmitD=L3(Dpc%dh_8fM} z;DkB?7DZ5RnqF8*f3#4M#pD9#fGNBzlK!d)2K!UUPuP^N0QCFyib-CzSTHWCnkA;~ za(h7vC6Rx~T8?vd^cb?vhz8{6oVqV-rC&XWaXja!3s)8puRf(2VgIrAYA06z8G6fB14NFI~reR6PO46ejfL zkRcEG*yWD~`fA9FAs7MVIZ+$R{}@k@6RU|;!f0i3nV+db(*biSdllt3W<;Ot)+#|` zF@jp=BPaYR*f%HP8V;M7?*|yU06#-N4#6S3dD?n<@Xdp_fK*IUYvvSyQll^_mIyap z(*kVmW^w{?f6-6LghA-<4o`;i&Kn$|itY_Y@XUK8^RjHyVw`GHDN`Idu7yUVC6d%j z@Cw}1u3@75l15CqqohB&qaRC!P?}b5_=3790+0$n<2nl91l&jCPzGkg^j~8*3nl5L z36i(@)U}bTVPBS{g-Db#?e#>@u%FHH_K>9WJ*7J1e__b_w&3|_&QbvC_v0E#T{~j) zU=y~R@1U9_VGjfatrT&@fQ=7DNQ;&-99-aJ0r}MK71kfVga&=2$xEdHnG0a3yK;iw z&M8)iu<(cXI-dXO#GeTxIKC9EDQlAfhX6Ih6g`jJZ|cSj9-&z8 zw8I55Umtn-z^;}Bt*5u2NcW4b+_;k-0d!FdbV52zqZH~IAsQUsEKT^Q>lKWG)(loz z4T=5dCcA7R158u*iW;oz2H6;B1%ZXJs&AzXcfjTvzh=GDu*qP!N*h%X8a3(nwSU@F!pZ zqe@eO2Iv6sy8sLj>;M=59uO{0o%F6hxxA8_m!!T#@xGp1-yX82Ntn;p6xna$!AMWPEF?Y?8B+=9pw6C zfqhTPi~t#?|l0#|QAk z;~N;N-Euhrqom7Z8X%kk0IOOvW;E>P%fRILger`${_xtU@z8r_5I0EAa4QbMc_TcZ#Zd) z=>3YO)KO-o6o6k&bx6{z?7Znpp)yFforjlA3{ahKbNf1&mGbut0k zZdS~exAm0O><-1l;+O{WE_+`-?pfi5?$lAT#3kr-vUBUK{%Pw%pLTI92R0gR0^i#M zpO{Bs1#G^mQ+U&4#?woaz&sSu?z#jbHc-<~(u2aIY zBf|$CxC!PY&+@)a>fZraf6$e?D*b$Ft+nDZr@i++)1Y^RRQ!f6`eWT5n90_VN3uQ5dn`!gnNrEvd}bvm5BENzyg-oTNJWX~DiOOl{*u&{J(3i= zoE(Wqq_k;j`MrA!NR{rm@D63hgNEN5?FmTA4l2BYW9Q`-FDqD?U+6lVEapP%wysmu zxesfJ`6>c2J6z28e?Oimx|bgvQ9wS+)TX+ViPr?9IpC z8FV0~^W8CnxH#(MV>+I}etcfWN8>bRprFCvg8t3rFjL-KvfthVOn;Tsjy~b|d~jz( zL!9S4^cFKU-^&=n)-TfrN5E4M#k3e#Pw!!$3S@UAE?YLzcfVPbLE@%h!_QZ=N)+ut z4;31+1uj4|Stl->+4QKChF9s7J|SL`?Rnd0@INzorwnIH5vzrzzts|UEH|+u%cgsp z+wXf7O_`H~L+oYH-hXUmjqa`ubokx&hda{ASVxr>+<{B%islso7b0{^$KDQ85x7i3 zwM3j-__evi0xu#1w&Y(pp*P=D59G16uR8$%%Rj$`>>^42qRtI}|`Tz7YU4IXcrs|u0L$cnM0Qq}> znD5onj2^FRPFBf~V}#p2FuZqMXpeu3cjKdo|4@}Xw=4`Xh8r$OmT*=lizyxTq4}CI zNZCw!a>v^XQk;#o9XiT8;$2W##yqBkQ(8UfkAHDK%mpbwWm&@MBH|Pl#jx>hIt4If zN1`}qkKk5iaet2j9UC6axfuF9O-%n(i5d+>L-B{fo_Lz`X- zniY2WlZl-Nt^733vsY85NfFT^i~wygJ({-_tt#olHF>ldGgNQNf=cQTpmug#*Lasr zKYp7S~>KrY@Vg5+on zT7}73|3>5C+9BDh*O$|cL_P!`QcnjYm+?I&Yv|-4JmOc>UE@4Ao@^qaEaK3 zdw=&8%u{E4inZhc4A>LO@TU6~9eAABOp@MYi+{Gq*6=2%0IO{oMr(yQ^ICynPUQDJ z_=#WaBe9JKW_yVCH9g$%S&-~K`8We?^}r#+_c=Qzf`F;qzII^~EAGTR_ks1D$tuxD z0(1W-pS0U?>awB40-!T+(XKII%}#U?K&Sqq1w@HP1wskcs@`hg3*QlOp>4qczLPW) zB7cbQxHpV*8O^DX) zkNbZ>dx#ez`&gqjjGfa&>IPp+PMi!YaiFCDnM);W<9sBN(&yGkrlD}S*5dn=gwcNb zRdLvhXN-GJ)W-wA`Qus)LtjR<%MVb!n12nM&Syd8$Cel=zU@Wjo_?lJ-Z)S|>D?YR zjzmJ}&%u)kAaHmeuK+n{^0K@P#0{fZm;?B<|7Im|6iZb=tAcNuPLmKvfUg{R;w779 z63!?03mT-oj7A%|ryZ3b0zL=m1~Z9uTGEK|AHiXSRA;-J=dl_JqqjaGC5?AUC4U-& zyXdkFG_a!pgQRD}076R%avQUdY)ObLosylD-oz(aLJob=FHIdDW5g@?P=5H(IL;ET z;(@o=^;GCdu#t3cx>a~Le(3f86aB%{5E4|Z!F6c_1i><$+mrWS31LvoXa_Ra@r>bh zbXlEx_)<2Q(*Ecd714V0a<`r%#(&(G$L$3b4AJ`|2zNf{wV{eIw0aa%6cvcb?E~u0z+!f&sn2MALW5w(bW5@TuAwKufiP9&@qY!%eyF@x z3sje#nB6#=3G+?(5{gwa^*>${BVDbi7#dFT+0G1vqNWgBm>S(^8-;@4b|lc zfRb-Yu7Z^>fLP?MRFSw9F51*2HnI$wm{nvjv4NFXYr*njV|($Y2OH_`;)N2=pS~T+ z=!-z?_0n(viv$Hnh^DU90)Lbf34{^u1&bu~8*f`E$Rvo@=Ci_J!ObA2zIBGxDTEw^ zwk&(NKum=I^LF%x6K%T*XFm@Bqe%II2MPdjm;ee8>;M|7TqJSpf!VK-W?Yv;`T;P&(a-M`(fHu{C=eo^l&_UsuI_DQg3Ui5dOrl+%725fL4U?Y8ak)I zK;+6jqe_Z^*{O<9yUG773e%65DaTw`pPpfSJrfGmBVlqro#3Yh(e- zm%B}PYV|jwJI`Q$wSVZ(5ZBjtB4&sA}!~$>I4`m3R*x z$}k;==mmbf2c0?@1v%N*S-G93sQFL-61Cz@(*$!2Y5uDay=wZM5I)$$eja~`oTc%od z&y&KCY$7Q=H-Fc7E@}DVoH%QpHDMkBI>E6>=S7;+>;U{P*l!ke`@K88t?Taa$^&dT zk$3RTnIl=K1B|o1wHDp@+KDVS+=JbZ3Eyn`qZL|Hjg`dnu^>-AmzThQWSc_A_7G=6 zk@@u@Jh);XQO{*d6Ac@&0bVg|;lcI+4S6C;kp{7NZhvZqD@UZBt8e{drNzC3TB(9u zoAg9Zkter;i8DBAUA0vCEfD;SSpOd}w8N`eguZLjNSIK_%2v02M#4i=vXPWjZ~?H^ zGQ<&aMt{fWhT|4Am?-K_bK4bBy+eO$%D(6wQ%R9jEh-Yud$A2(gRyfZ{c}AaK2GZ6 zqB}AmuX}MyYCZ7k42n7Pep-9rabMY4O$f+X3mF;8rUtR6E5K96);ae;gJLJ*E5al1Lw}vazWb=21OD|038YAhHk!mGWCr+a zF0#tZMZBf{UnJmko$UxTH0ZA!Pld`Nuya#46fG(L- zsJrlVOEyLypVxt<&XjA}P!U1d9svdVBv5koOi1W_*Gusa44YMfKGAA1K6sS{%(M1L zihs|&bJF{$smL#Z2x@_;a*kJGoMn;hY|h>0n_&(eC;Kp`MGk51aVp3&i)0lmqPO#l z!EI~xftiVB!GzUZ#(|sFI0?bN8Ht}|pH}KX0(b!G#hHXF#`dJ`ELQ0aNw}9B;k`&4 zn~Am?kjeHlTLhG)?G=EszlqKHxk#-^lz-C>m&Pq+(u=EXBKj~Hom!F?_Lx^1H}oNl z_>zQ<_d|ZC5;`5sCP^QD)ZoiarP6Q=QE)QShVozuDzTnRptnVeuK1G922|Gc3A*3C~ujk8Y^LX>02Xfp@i^4K zJm70=PK&%|b7w{7nmwQ$Stg0aL7=CV8_?7ya*q~m4Cg7ajN#V`z32-$y>9{?1`xVd zAj3x8{@4IbE7+4w-8n62iVN!#n13h$)Rq4M6&HqZj{&S^?1lxl?IABPz>OHxQu{y> z70h+JuZD%J~YK2vv2ROm-V-Jg8Zzqpe0DnLO7YL?O zI$=JiqbeN$2NduW<1enJ#}d4Df^@`2FnRB|W@b05>s7R-RG#4~`yXZVbrp`>+lXlu1r=S2JUchM{im|^M9i#uq9)bl!Oj^J6$)dlH^!s* z9#CV) z215`7;P=}*3i3ig{Y?%w6ca-HN@E+b74|6v<@jPL*@wV45UHwcqkjhFL6t+wU=)KT zmGYL6X*R2@j0G94Whr{$0O1ht8Sgr?+&}LgD$j@_57)<1H3?&r;)xW!U3KoCfWmWI zGtU9cMcbN%EDK0<_SOUQiMZ+@rX_~31ban406BCBsjJXQ#+BCf|C4T@-<#jFB{z|Z zNQx`*yr7u2;Hq4z@_&i%F*wzPAmGUyr-PFn?&X4uDtO-st+C38E@1*tJjTU757^KL z?C$16^ovlHstiNb_@+3q4l2T$oE-RBPY6?202&W*bB3N<7>3D}pYvnEfPLyS@ou(*&IS~~1j+`V0c)M6Lu@OXCNcfK0ssI+boQxc)TCi3NvV*j)7%52? zoeHv{6i_+ZJ~+;!H-9Vb>1)p<(6uLx4mEXOU5seysznMWm0*FH7grCi^q#(vo*1W{ zNwyl+fqZ)4IDh|**wIlO@*|8087+rn4C!oJES`ZeW;;qB6zqoOY6Kk}@r;-PV4(7= z(q{(1104~1i4;|fySLm1O&E*kTTp-~H<2NfW)@= z`ncxx1Ap4La;r>rXUiOtuR$t8IO#oI$+9w4>hUMXg6aTMS~<*UJ(($BMK*P43e@CI za{`ky01x6gtVU^7&7ugi89&&pSo&npJA%U>T!_mW3q0xBR_GFc!zI@|0F(v*+7rrq zFDzYPfe}t!WaWV zHS2(=;-L8tIxKUokf9C$LE<6!+||^g`+H~#IQt?}u~m_Q$NzRVuLq7%kL<4&6%xtP zqtu-Y37^KS5eI>W|MnGxu2%o_pC{Nsw-!Wp4;-K+ij)K40|FmAp z-+y$`yP3i-y4IZy0t0hKqcWx^p$gcUax+7=Zvc~vA?d~6l4O0Rt_VGck8K-3?GMR; z%bf=D4d3|iY$tPa#&a)O-UBiJ&%lQNSI-UF7|{S}zgB`6M8nc=!)epU2&^1J&f;bQ z&jjJ>skF0$kM{|qWTE?i7u350;)`{gP=BrDoS263G*mHDk!Dv#A&D_plsylZw6Jx~ zQKtdrwo9@0sWZb)oR#uz2zzb4E_Tj;8{dDMwSTJz#b)a8x~5Z~_`W z^~i4>Ee%lEpe`t>h##0e_N# z0FaaDJf7CtSEpB97d1@gm{veoUY^D06?Bl3G2Rpm|3{SfDo}O?vZodRDCo)BpP^zd{_Ah zVxk6FFg_XTH6>w5f22E6o6)HpP#1O3bV`+{XITv03F1o~JwXKQ&7igAU8pnClM;5f z2&w|ZnJ|;v|0jNV4%cRy|9@&S&xa@+Ko;a%9c?zqKgZbdGp9~skBniO^@*!28g*Og zGn4F0g;GSK31ow@tqCOkTvMhA-8Sb5w(=vifcDZBQ;PQczrQ3R(;691-tp`o&8J|% zxoCZGIc9$D#Yuk-ghR?^L{*I;lI()RieQo?4*D|wBPJc8MlO;OI)BGAm7~VB56P{D zNk@dpDiD#BwKis1jPQpUO6sOKAy^&uu8eRHGu)-Y4!rISw@c2+q^@c$rofCG7rFEJ z8DIKi3*t>78DDp)&hYfu5E~Fx!Td%+VzNr$yteC06yB6ct_b+Z8fBm7ivram9i#FR zk}I-)ov!2LYdSR0nt!|_Lgv-e7RL_0VxZsym=p6`$++w{0gKJUbRZXQ51w5kFYs6E zN$*AoU`Dw|N;{Xal>T<4bw&42eNw6** zO*p*Fj@~$L>pVnuB^ax5l+WW&MXM|~O%L@L28FWYlm!Ta0J9@j)j}w?$yW|X$aLd% zgq?=0*a3A!F96@5H5X7RK~ATS@Qji19Th0@?BYdq(P<6u8$0Q0hn$9}05V=MasJ>3 z;ee=jPN;Nl)_;Tq34s|P0w&?Z)oD&x2&+WT?^a3{X$%)f0@}Mm7G|L>gsDJW0Hdy@ za)1MKn5Y4O@}33>Y5)TOC<{%r)IVU-lDvoL_Y!dRiQSConIq!RuZ>Z%ZH$(0^}h;%B z(hO#0Y(^C$b)ZL@_=`-ftq`F$h2ebX}g)s@v@z{Ew1;eV>Kuu68tgUwSya0;{M{{7Zu#aF5 z^`>~frO-rTn24_KDa~lXs8eJLBd0Jgb2LeML)m3;^5DFQHGNXR5&$jph;$T4BR)aB zQk=;nAc(i;;-YLyR0ypEs2H`Zxh_D<#E6ScqC24v9AF zE=C9*1-b_3(JlKTIVCpUqJ^%WAF@LKxhjy@fS{3Z9=pWx3s%X?7oMlN;yYpsibk{N z56=tcl@K49RZh7en|mTfGRlChPMp&CLMnh5?)-3*0Q^7yz&`m3zs57HJ5_7TW-6_ENP1QmJ> z+3YMnOu2fnvNN{&#G(0p74_oTRkn+SR}zfF0f3Xn%J>MC2n5Yeqa=$D71ISu2izGT z8xkIO%^w^z4hwRenLJ6eKdKs>t_tBT)jmkdyi$p}EZ&C4VX6R~|L2 zW=%7;WEz65i_9^Lx(q8_GC7v`TrG^O6qd`nFQU2qe_5*2TTAl zyZ{Uk>=a-HsUoyWmrPvsb0B@eSU{$X=e~v8W8^bIEZK2u%es1*bAL5&$0I2;@p6~H z&OVpUc@aeJ&A{IE!5dkz*XhRYMYJ=~bj{)1TE&ke0zgq8J+X*l+q5PiyH3c<=b`1_ zrgQ%`K#|9wOqygn=Y&#idnEHPM#9z`LAqEC)>KUj)~LQXU>MFvtPXZ&u$@$yL9qFB z^IooSlk8czQa(u|^ndBxTB|PYZ*?HF#!mPpV2r9Mp)*f?$^rXS4#W#P7HuW8W;733 zTH4e$UBr3@E#qUBG0SLxQ>SaSf%DK3qr#2jzFkVA%Nl%z|0LMoi9`3R(bMMO-wRyH z0~)%tR4Eg^Uwv+|$rv>>zC;skImC(XF>Ko`-za##&TfLeo_~f=ijEpcg-lN$Hy}tX zK&|ZubWMftK?D;Br@@i*?doKEt+w4AJ^AquNipPGlsvCjgt`5bLRFz0>`F`Ekm`3e zes7KuP=>R&_kW&h9;`ZO;jyOG&bpTBX zFNc7OCfFxcRn+G7zC{r?2On~i6^fh>q_Ww-fcsUcIj(D9LDG#+5T2_nCTqR2kI9r8 zS&ZNR4NgIPtKr#}T)EfJ)>k4-D{k{IqQ!zonWhO~?L`HmHfGS--cuNKK{o+D93C(l zKGGZfWQ7{KUcnE6Fw1tSa9D{J@di^ooU99Yctv`?LIA?0c{6*M#Pf?8Ik0b?rT z?SGZ(rvUKWDaXwEZC&|W!aFR6Hb&*bfSVjRG)V}rE9ceg0nJ%v6)`n4?S6W}7)dkU zjV@sh@|66dUJ-*AVa$Cdk!*D)Z;#xNP$K&dq6tsa`h~0!5lfn5AY@63MBo4{iE zk;YWwm&_@Jz?}BKtivHB-hm1kRqq>hTYpHYk3C}MZRSX4dmxHrW)J@}jn!c2{#jn6 z>sV+}TTj?#wu1VaYUyCLB7@bqgEm#&*`ly#bv!2n&ZF}5ADp^(mcs4iYsP2_HrrIh zNAu$_rV-DZ2A^j5q|X6!>iWRC7yl<<&aBJRS%JHKWzzUY-PH1PQuUWGd@=YNU$ zJmg7r!&)4bV`3@=LR&=J{@P$boh^L3Xo!pA>{CseFP@hqr*?ktD=FRl_?p|^>58m( z+XASwS{g*E5{{3`D>o@DXh-BnG3@O5_cQm!O-mg`O%EC8Ev^Fgob=iWcA%#_!2`M; zcF1@`Z7PZ=xbP*nCP;nhf-DHqJAZUF!XwKzUYwkOj*_n}KH8J{eGO8j*59nld#i3y zqL#8G76DKL4e}S4WJ$BmUjbhalkVA_?#xC3w*zM>&Bjau;wBH^cV6UmIRlCNF+=Bb z3Hm76N&pRzB2`F!-zsFryV!4iBeCwLYnE^V{z_{_xcSsrXTyt+k3sO;7=LHU3@WrL zM_acP^_u2~G{dUIl%DFo|6ho#b{=HSy`zrBrHJHUbt_=X_aX8_2rV0sw0vs6p?hg6 zeFQdT1)sPkXS&1#&%8Wv9$4-r@~dZSDhDb3jZ$EFvo8|%e17-`Ad!mWp_sw}W&s}U zd>j-=!IHp_J1VUBfmS#mtbc5$(FM;0;Kx2yQttyag(1ZZ0XY%m;+QcA$b$Ev77RaE zPzDkcddfP$KaM07BFY@L&NtS$QyJT%U>H1LN(&`LK(JXG{ZJy+v=KWeR2n zzByK&!6N__988L02(at2jXpM@m804R5OBgHr^8uOT(=svn|=Bfs-j|U3w zAJEg|bEs(DAp@Ge-AXf)vO5F0>K%ls6}hs@b%<3%;2YeQsvZqmF2TpaEDeEJ&M5;k zik1FeQCfX|s^3J?uzzeL5z6kj##5fz7n>Lm0sETS*TPnugJlf)2mT+V3F&BS^Dr|} z1lc-G62Lji2u6;H;eLP_qsxi}Oj{S3sL^SFQ&U9qJQOn5C~to( z>AYqE$Ih6%K+}FaW8W49G^QSFfVcn%`jH1^rmG_NreQS12j~rzn}6t1+wwY~`$FCT zB_G+5t!M&y%U=(GMQBz040kisAAozMb;byXw5)E36Rlu3Z;4CQ3JOX9&Gjs&1HRxJ z&g#7gf2e#(K7R~oqFj0cc1%lPZ4VH!xrF&U1y@HP^9w@ukU)ES5Dv<`Lh5E&vyY!@ zakjpeXH^JEKtaSEsYb2r$4hS9t6;5vn8|&6(%0u{>gvb{{vec>btVpA?+hyWRsczT za>L}yj;a##=yWOA;SlIUp~4=;HH@$bu<6gO;2ExLOMl=djN$~O4rJ{I=m6r%tpfSb z|H}FxLxrdb8%*Qp24TS8KvJDpOurR4Fk?BsZr$55uvEdLa<#au4icwjhXKnPk}*dY z$QuZtb@p@UCtL}-1S|?dB7?J@26cGA`9fpDwrmL`9JmiVZ=uOYeSaGGWfEk+QhHb0po~HY!DDd6gS8wC z@p6EmR#r1NfakM~lk_DSYB!B#(F;r^7d@a(UN!;EMN~cOY*NOEHsM@qs2>NP*b7dj zEXPJOAZ!h_YFdn)fqohO;z6l?x=gC`+JFRYmZ17VjvD|#dETiCxxgc9qUwHImy0Lh z_J18^9v63MJ+?4;^JoDQIA6dp!f(3P36pv_pVbR3e!_co8R+azTE`Ld5CWUfm@3R> zE@((BI4k-=o@rVB4c@T~ORa5nfv!mbC#}0CL1_pA;M=59mp>z9HyVz34bz~z^qqD!wt|De&r8Ha=0-)E&w!hb&2w} ztnj@zP-E4>2@77%)bdEp=aYZ07Wp?Q)%bX{7b>ebwTn*gjc;QZ5M~4837f42q(_pq zI>1m}=-hV97 zFHO!fp4zh?{R4&o|ID4P|H)x{NCBLWcWoBg1guUd_h=MvRCE3^-VHTcF*cdv-8;%D ziXkW%{8R{E5sAhNZ2*xDep?@C4kDC{uGa(Bz)zmyaBHoaSwl$j-3H?h?cR_^JE-yu zu(6wv=+}b2fJ;=fhDRm%2(qH>;eV^gG+Uhj?Bf`8!2A+VcqRS0Sm`dP-Y_y~QZoK=D#HhmOG{!YQb@d#to;aYF{FhaW4zJJAEskSs& zU(PSJ>|sLJ!rJp(FVW}N0K~yVk{`#A>Wy=I`mr?c6Y6`PZlowNX+g0RZ^3Pryglt} z2;*@L8VE3xf`|MG^S50CLbnyDt^ra`t5jtIgGcI&1(i-aB1;1iAW8vu8^()p7YSYi z=JDP8LZw|`DDnyJjS1(z@PAo+oxYaH@-287%)gE@Awk+-;bP%bl|6zqu+c(QMBQPs1daIY=8gBb`9pSVD>1> z%488&5Jc^nDJ`D&b9iFJpZ)zuMcYD#QZ6%w$xcH~ynGtFCP`fE*m7k{Dhr+*v;eUkVUTwPNg z45IeQjjVCijNL26beX7}+|w6tYQM|8I?duP!#`=5jSrrl?-MyB4XT#sWD8!es&4gJ&uu|3 z_K5^pgUs3Wbbr;Yl{43p7>{o{I*S1;5xC)>5k=4z7@MAY+$2*F%XjqE?r9pB%-Hfj zfD&+EZ4zoElcm>xH`if8`n83A3IbOW z>M)Q_?-)6cu&OHZRkXFpaTW7mUYR?JXeS5kZ%t#YBTxyL5;{C0;vO{>_Sl>Nos|ou zaruONM1zF0m*HWj4R*i6$Dl%eFaFbf$6banb1;lI8j1*!1}v z|I}1?CaB;{WI6x@Z@&S`uU6R&2Ak^3Znc5P24&|y2V$UobYYCIKDD55ba*?LV2*_Q zDu4oWC)5M6J%O1uRga-o6fJ!8MAMxJJde!D!hi6guVzCOO{ofJkSQ z9DlTZN>^qy)UrILRv$(w+`Q*iE~u;Yf{t9$FEt{?q?;xG23i3l9QhYAq~JoyoTUTE z0}HRu*!ASsq_bMqJTqmTBngz|Lr-_9BakrQ$tmj+h#&Q!VIiRdG36#5J+TLZ4S@aFx(=9-PDNTHLGzj zn1%H2VU0y%nkN|G*V&=gZjNvs4`Tp0(g3>z`)V2WP8FwYHmC#_4}e`x0pTTmfq#%f zVjqTdSEs1DfIYdzocU$IqXX%b@dV38_SvZ9wxW-t<0u7gq#f~@4bpZN^Ayu|q%xDT zFv-cysNaLBDAih6ePcbiG2!b|TOp4o23h;R1<-Ce3km7(*Gg=X1?s;Dw;SY&`uW2* z0XjQ1Nbem5@FQ`g0u~;3M`?ikFn`!mw>K&b;6P%ZiQPox|I-8r@+XbMfukTlDcE0c ziD<&05p%wGLPGucTX|2;LBg-75->ywO^=hd%!qXu!Y zJ*r3noF&6CD{{gpeE+pl3Z z;<(y*3Y$l-AN4+0#B8wuhKK;WeS`<9}YzIgr5OH2~hZL%|RoWM? zu9uU5^ZWu7Dq|2LSe9o9qTmxO!v(9>RP_U{)KiS{X3Rz2T?laT$bV#Nh*8;Wtf<@z ztmHE7dOTius0HaHWfd`KOG1>qN5bOXL0chm`fpWbN&hnYLU0gq+BKHt# zMSMcz2OB8!Fo_*z70tlIVqa|YLLxc>RjAC-rHY{^wtF?Y{C{GsJk4nl+wPia5EIQ6 zmo=>pgEtgR@sRQRg07**Z&nw>+@SF<;+F+Z&>EC82FDsf-@9n#5T_dc$Lbt*6(JO9p%Ale{A3vQCbUq$a^C#z0mBsJ`J4FJpX3v-4 z2^XKRn#{jewSP@~Zcn-vf~<5vfj2JyjZu#J>3+9prrBBw^Iw$nE-GLM(u?!u_|uRsv0Rjl~L@M=2HIZ5a0u0k;YUrBvs^Y z)1)ThKkrEHe7Auoz!7-bRuZ*?$b(_W$b(7?|;d5G%5rLVCO!bfahB+`?{KC8%oysQoN^2 z$(b~KEU(p9%E#nGUI!*vQSkdTrcavqXBS#>hXvEN@X zd{F%+!HiJD@FCeXqZMxkVM6iKQJ?SSF^krh?>F?-w-Z_nN+q6THtW`D9R?3?vVU%$ zCC+jrn7P-IWS44qPb)5Me%>A3iqjJ#O6g-;F${3OaHDN8H?164^NS1ndW%ccB=t3S zvmKaJwM><8cCx8nRJ`Ph%?N-{0an@EbRrwUN)t!^ok+@&Z_zZ1l6mj}=_-5KGyJ#( z8rosLa_$A&7cn3vAFu%3vzuyMMSmD*0;SEb)$#|^@Jo6SrD2hF>l$=x#l_0`_XlHL zfrcSpJV0r%@E)=0{#Q9zdzu^h#Z1}I8R5rhO8A}|E;*RQ{YJ)wQzvObJ%Q3Hw@R_m z7%9FXKF!|V0~=p7vt^oQLkc7S9*EyEDX-kzCPwUUDEWM6&-!7WPcf)HTYvGd5w<&) zFcS6Rk|`3?$z+We2KszsM9N#Le8IEbB!|q}V5GO)QZ+`}i$MLnR$qWe*lYfl-F%7A z|8=44s2!O|wIcqpt1O-s+}kJpArJ5#;>@bMcF#8lzj0q;Lz=5cINeJ;t7p@5Rs^a5 zRbhBMunR?93s6?v{}Ue2H-Am)w;XK{8w^}xZubE9UGNp=9u$-e($dkpgG3t!L+WKQ z%-#f9P<1h0bA=l!SKy(+`@_^S)TF=84T`Cz_ZR@gY()HptU~`|(qJR%+^)J8q8N7V zUJ7}}tt_guscj-mVb(@H*Z)j!2fvJ zn$;fmq}fmEbaw8E{o8C%!N`|`1>aBQ%Qwu#Y%9?(@JikDa3~xh6a4uW{3S$;OWfeA79nobWoOL3fQ%Idx$qEwjZa!C~>vTeeg2I@ZcX8poACa>VRNvsLICw#MF^lTf%5l4oIzV#!zUuj#swwD{IUfA`TEr z8dY|j?wUt5f*|c6kM&k*wz`F4nlyZ@c2ou^?a56wH|j{_v|evdl&hRzs*ZVv zH-S+W17qo9l`zcu=Tw+50H6_rMIu=|;Sjv*%i&c~Hh)kC|8BV(a>J|5o5)%(qDnw2 z+5;N*E%>S3lg8he0JBDt1i}|Q(wrn9BW5!|4A6!bcQQDXWkIF~4?#$=TZMY)_1IeU zR?gxTq9SyTko|{Ax&@ogE~Py8@Bsp#v;%9WE?_|$ulh-l<@SLgSUS}0U)UcetG7N)iF zgpmMuy2VBjCJ*Sot+))4EJ=9ryo6E&f1An`U6O-#3BF|4&Vk~`;*LEr&Zs10^rGOl zrr~@P&aem+V8>Ozv&ip}X8e--i%iN7FDM%c+kdSaJ~8_cXvrceeg`du=WPK@U}x_t z_V0P1V|k2_3I=tH4089b@^>7)YJUDq1v90Q`EKcVFrq7p2K+^lH#2=d?$EXY7}SQ zl7Gx=(OK&$tzuDzY)DL^^7^Jp4?ql2X#<~=;Ywf*=MBsZ&MKTFIe^zM5^4RMojG2xIM&WpkfJltWZ z*HP#MJ~xKiTJ?dNQDpUMvRHB=07W;4Qhz>6y9EB*EuabO!~|-i15Gv$oAcVnsl&q7 zYf&1kO+D2tw$g+fwGMgxp)8&nJs8O)-XJw$?HVpS3e@hC|Wf&-6 zK32#;Bt;#}ZIty5%PcS8**`Q%hJPHpxX+4O!e&#D=Ph2H8DDq^Gjag2ASj7GIK6Bn z3=>>A!n}e9$t1EQ`Q(5&`G<-RQ?Z^nh1^A}2L%QbV+f%)d+@&%PM$) zW&bDnpIZfyOOr%e3!P2DuYYoe*0R{AF{wp~K-0Vk!wyvKSg=kUC~pF)fn2OsHp3?^ z8V&(sEvx#?2+-XQ7$y-uT+G3YF;Vo;KV~&<>L%M3uL;}4v8@8!x?>aR`cCET)9c-x8DEUx86c@X~QVlm|MMuoPfVsee#|uh627PW-PB z$KmG=@bPq{jIW$2x#sxc_~Sg5haLH9a1E4;L{=X$_SETb01>mGdu3i?MvUrUzGxfO zt?)s9BPf|y*;&T|2;38L45)6!7a_=E2fOanmzmXw%20yc zG*w{42*J4{9f z&iY;TAo#lLF>>iTh;myCr(6aEQ|!$f@8HUmp>1 zD*2*AeW9+Kk?>C1c^nFGWOOdcP-Z>1{}hVKm7UAYp6emy$bX4VU<}D+)v3?yzaxbJ zu#9oPYhMGoQR?l`Dk@@iz|}gH?S;Gdap~0IluQ@Qo-jHMtu?+DP++eMviI&iuZhJR z=Z4;w^S|daI{kLes+Pc~$C|Jo>v?qnvbc*AxHmM8EH&Cb!q$4QDJqu}YFQ z>glk@OiBmLq<>ej`QZV+A<6FuOzR~_aR?gLnGG%UQbXb|2!MGb7RRAw5uJ{gZXEN5 zIO2rQ8-QI<#3YV#X8auxg#3<9wh#_hpQLo^(RmDOqFqlJ)%7I{sw#n1l>Ga|qJX1T zh_|PE>wUYOSmWnQ-0_8Y!h}GwE^AO%Q2d{m?AUY7SARs&%^H(VJjG-gn$5<4a@DKs zh?Z)nu-aMVO>aQV2GWbO>XagcQ9qg3ryK4|@8#ivfUZR7hl$SU;L04sN%S}I!X!+W zyzFRqorx_`w1c?O;ouT=4;)J-g`qqStWPD*din81m9@)Rcz4W5o@?}kI@|<_h-UJ_ zoR?Ok9e*mxKcR-Zl^32HvczfW(@UMg5VT5Nj1qWWmtZ-tjso=_g-kV^I>0NnedPvSPtgGB3Cp#|HlooXT(27k}1)=EuwCCHYHaRwU~uh`nlMJ1!@ zcb&0rBE3}k6lI4PI(A40Qmi@BVprLg7H&=k0a=2KU_BGqgS+KlW-Y3_px3A1K- zoO`=^BAe0ff^W7~s{CG*F$zewkf6XE6OG&~iO@phU4ZC7|9jDM^MI$`@|%ucU&3iN00Us71$wnXW85S9(Y z4h_Yr-29y_`OU2`+Y0Hw@4HP+@FN~~1{PKfh4RS7@KTq@vH=B0axWCFJ?rtx;8IU6 zYbbe{pwh%j)p#nhyCsDufKg)lSzLxX>4(HUllT4Ws6UqyGCJu6KY!rB zG|r?jjPPc!WIQ6h*nXR0<(HgVq`JyO2!HO@`pWF(kwaq1nl+IV5yOKrI|C*7_=raK znpgMluzfhP&o~})OYm)mbfx-E3_=)Xu6>SNL~zCR?F#*agi5Y;;syF?R{dRMa}v#C z`N-y8e={z<(16;>?HE+bjZCXQ-uDsrfyHwI;7iFtz1~R5`lM zP$NsXQH>zJ$mkaF7}cHUQJpGibAyRc{5KzKU(??GK4XAkkDP9#)hhrcfAm@#Dp`Gt zxhSS%P_fXrNl#x|HT7>FmhOmWc+{2x+2sIVK%l>yWx(BYmZz9)EBngH2{Oy zMiQEexVZR^1HP%AkXP!sBxuX^b7KYPTcCN9-j9tcTnsOU1ZOofCzrtC%s`C?5qb(x zV*uWcWERY6Dmp*S^@G+=2v4iSYW zM{r4xe29viKx117$mAMDmcApeF2c}=Fe>H~BiAhVKS$qadfSlA0E!7V6S;pN^oScv zOT=%h=1e?Z+DM}w9;E!Ntym45A4Jz%fLl0f;j4VvlM%=j{{k%8%WKUy=&l^vQdOBu!fxFYIFYSh7&g}!A<#(o7m21lgYrO*f-SUqu${o@)Hhj36aUPexiJ-H+eolH1Bo69U^jEkMU|+zU zdWnR%W5ss3eb2m3mTAJ-44B33BjJv&;KCb{` z&OX$o<8vW5))If6q-5%ArYC461}oLTv|Iz>Em}ZACGovq;);2KoMmh@U|IRsK!+qQ zekPz_ah1<|F1Db7tOVyylPVl=G4$mB6s{(#pfehf+GXr+E z)SWw^O&=z1fTP4GyiiJ!?kh5jK4XNlAVA^I)3e007xaIN5$?Ydny~uOw4!Arvg_lZ z-zL&vWPHupIEYyXr12f8r+UBS3`Mlt3wD>bc;pa$`r@VdkHrHpzPF)`x~Jr zI*WM|wQ;o$F19DRLCAghwt6(2JAmYQPQpfH0p^Z@!k>Hmerg#tKY=oVXm*7)XaJ$s z0p}IKvxtA8`(uKEHd~(SXJ`^&szZArQ{s*hCK)5ZE#`Zbz(~nDsf8ZJAp4lz9=Dla zHqsco{17uVgTI7cFNqN6RH@ecFnC@bG#0&@J~jSIUK=C>-ueo#X`cgVj za1M;=8{RA`VyFT@dCjq>06-4em&ntoW8G?dMwNe$OSUahG8$M1cc-du0g;iPi>#$! z2fBhy0r`$30wOvC@f>(Gzyl1E>0L@NZUBk4!vv9=i$UGAa9{w;(*ed4xkY@9A_4(L z_jm(o0|$V-5bMGCmxdkeRAWMkk}En0$O9!j@YRt5)TcIzzA zqHsVIKCV4GvTsbQq!yHelI*&KOu@pwB7y#FE-+^@YdhO_;E_^bl`!xr4L`%K2Yx6k z;$fAo@_Fm6FN!||e78uJf}Mrl=mD1eA9a78 zj%)22@QBYuH)9K2E_6%T&&(i$76|}StSkzrHLHC@5Z_C1tYIYc-1}2jZYhOV@?I{?dQUN92z&mNLLAIZ$sbDB2}t0+lTKe}P1`9^GSk zd8&;`+t-=3uU29r`vxbA$JQy!f z$}h}uOQo>Bf;8p2q&JHi<^J&mw{%usBmpQ^;;f;~LcelTfM)X4B3}-%FVTO+MwRRO z2{VS05dea-O-lj*rava2+{Kc;HL?tXlJc}}cvoi$cx%D35#81-IYizl4e?FV4B$|1 z@6!NH`r0E3)OLK>hJ&FPu!lsDa5vp}#NB*qXm+(+yp-Z$dz50d88-4->D!e0X^=X) z0!@+lkJF=cF`&s%aaa(eZQg&6&g~x+bi_`XTs>S*E>vK8k`M&BZPrKyV~|rH(7@sS zJjf;q8>Q6iTe zjwpR}7LvY;-yGLl3j50HIKj`o%{5eZH#v-r|PDF5;R^xx&b*HR@{NKQe z(gNV!Yk27Le&4QDG;6Mlm;#cptV?BJZ5xx^$DMciW-TJy^vbp6;pdhw(pCz-!J`tT z+2$CN6vEqD0Vjc9G;BExgRv{%$}=KPJLh`XV38Mc5CfbloA;m>Xg3Z{g<~xoyf*9W zDuye7Hs!DnzlZaGx=nwGf*kTSOx2`Z_elySLnr9)|a`Ek?p66c}J$BB(Z$ zs6tEpyGT*4=)p`aNjt##v5!8eJU=EQ)=)T;lDxMCKmFObU>z5BGrUCg4}7H_ zuoTxhOf!( zD@;;_ZiQs$0nH#9xwq#uz}QJX z2J;kyG5cr$#@>ID9(bJE3521g-7*aR@I(^|v?@fcw1rc1lYu>|M`=^cTcTfD_cGbd zTG+hZ3YR2s^_IimN@CKYCq^MXOzt7KYEZK^;4UbDdvCBe)PPf#S8@7-hq2`69YB9 zFqI`i+#Yq^20Rg|Q2C0rZh`DlW}%+Snm#w|h+yFU+&GRiP29(~u90!Y6u;e8!QS6N zm3Nma0>A|hvV&0c>xy%weVo4fw+-m5rjk?6?CYRmQj4hQO+?gBA(@qXGv^CVj`^-v*_(eZs5>b8P|B$YD zzJnC^A&ex1JRheo?1(|0J%4a}3$vOMMS_{~ATLvq>M!G@J}h}rw4@nf{~XZ4he!A) zdeROM&HFV|9lA9iR(8oNwlL$d0}G0)Z7tU3so#IOMRa(6B-3ZC2^Ap{{I_4SpnL47s+KD*pWLh^ep+}ZZDv64U z4gP;ab5>dzCXPiMRQPYP8)d#FxagDBXRCgrMg{$fbK*}mf8t%#b4aPHZZx}|g&jLB!`!N8Q8pv@1TH$GMV)*oNq${6_ zK-$;DQ08q25AGCox(d99%yebP}ZDP7K}mD#+Dz(aF2=Q(*gEMO9o|E*Eb$ zr4NO0Z=` z`8!A_5h@9Qx_iNhAYYepjFVfG8MlZa9S7^_zjH1e2C08^HGR(wVyhsg&5r z(<1)2k>#pRLVP_l$}XZ|buCZ`Qx#mSpr|qFYV`xOphvyp(5AlkpsC@TieP@i036fX zw!u|^CC;IgX&ZZ5An>reWcMB0kAZ?R!bm(K-w~thQ8ZlC9XP21c`+D@z@=Lk7|(`F z8ny-B?BW3ATVX@GXMN~hwOD^$)`a1VkfcP=cD5G~;>SvC=UQrXvHJd0n5~!?aQr&n zRzXYwIMK9LAx^fioF@Y8h@L;EQ0G=~R9dx(ZjeI5v0PlRN8sHef?>~*O(;`r7Ge=v z8;oKkI$Cq!QD(0scZ#CugIu|SY-x_QOeJ}K1XkEH+_uP~e?h_uSQdXFrZL1GUuZzw z0o$MiBF8Gw*=ea-dMt;}6An$9W(dbZ^LPRuRjX8ST!vB)wyk)I1iU?P>(K_%6 z6|X>|;HZsM(CH9h6&#JhC0MSrE`kl6nZR(b%nKK_`%o0Vz~G&lUAI-+vQ=Nx&P?W! z`~4|A)OhKnfH%H+y_A1M4t?AN04{q-z1Pz&P5S>y5vav;YPNQejkgntdG4HZyK^G| zf>Q&bFU(+;6yfzWf+xMn3Ot}QrI3I)utGfNAQ4ke(Nb^$46;}OZi}AuoS-g1CS-#| z!gl?{1H_$UWG5?AIwxf|k@hIbp^QUY36pU1xr9Dq-5e$Naj$>b(h`0VrR=zm!;XxQ z!1gBz%|;KxBI?ND*3eWH8?GPu(`$F+vbm)=3%lFVfo3 zG;NbJg=`V95R=l_qeo`sL`oR(??`j0qyE4U*byq*MLkJeOm7){24k4hRX|HtmP1OU z9nd7CE~j!Qjck9&Ydzo_S@;{2W?85`mMqP)0xoYLjK-$6@4v*_*_s z9q<1fr~iRMZ5a8vi4K?WK}$e(9{%x?=tVF^4Rc~I*Wys6SO7THM9`~tP0!^DIc~|@ zo4^W>z4AP~nPk53KzJG`3$(1MTb;TvbOH=b09VGLobVPzhMfRqs`%e2)EKRr-(0$9L|H9IlV z_d_L2M_PZ-AH5*h8`1f!y2lD`N zsQ?TR>;M=59zZVh%nIji$b&P**J!DWM7ovEWUYVCY15ltUUojb(Knc8(zWO5nUzxy zUy8cRI0R5@tf3d0H6T%DywF7p-`nB501Rb{YAI|qG??ui`#aJU)YVSDoA153Evwg9 z2~^Q{S(w7AscXbJH8r(-cAV%8QNTi9!}8jYTtf5HQbw!^hxo#IV6)KyKG1Lwqt1y@ zao>N0#h8#2{Z5w|=R;H!Z8ddwaYRF}oCZ7%n{0ICMw@8$5(0K8qsNRUjG@lbgu^dI zUZ;Vmjz$s(%+9|~eHTQ2GF-K>|4&$=oFn2NSXm!oNB_?fVt2 zV~w$Nnpj=^_z6VTrhc+#0AuQmv6zKnvWwjBm=j=Z4gvnmVH`k2a9Hr;NM>e@OE-UF z$yF+w4D~n`WPvr^$BlqR#Vs>TaC>_bDaW^L0z?!usDeJ_Uyu=paX2KFi<_i^5Jjmu zA1MYB;|aF7HkJ&1Oq+jm;y;gMqL@grAXZ7L=j)zxmUWY*+ju}{EJy@G!F{nllQ2>UHR^B35*@+~(@RG6i-SY#ydKLs3pZjuryi9*ZdrI1O zYcH9SD;&<%3Imv8sTcaL*VLawPeyExwiu7lBYLBy27nQo;$nJM*#gfEc+%hkYNvrV zMzTno;d%8SE}g?LCrPO*jV0ERKcC$;qMHciR}GcN-F4Jc4u!k{keaAr}v0~p3B=b z5?8^!9=0=NDk(Ap>IBw!G^j?wNg#!fA5e|6j|X}?4UBJognLKkRwW%DKD4dagH^i- zamdd%T%wdRJl9dr zEkXE=!`(HI*py9#s5En`%}e7 z_3;NC_R0y_YRrXT{J{CcN<*Eu5Q&e=UNm3Gow9lllTJiNNUDE3VvuzdoCX*pjBcQR z$1imki_P}oQ%g4#TCJ1B`S6M2CuQi!>Ut!cd`W39Ww3nIcM_NF(CskJC-f^t&3M2 z#QWxw+7Xj*xkZ0c8f@F?<@@RAi{AT7ebzpxetU(9Yqht9fcAF%#EAAXW^wnETZz@L z`9NYllclJN#q>N}TU;FoWNbgjQe3)KlPWqtIhx5pY>hVtQKDoAB0x!VyuAPfjFpN9 zX*~b~igqa3e)NPN)O3`n2tcX+J1jJT~yG2hcla8Yk6PFWdc^o z-IG22Y3%{9NWg)I->}#AK$7Q;>+y%BoPs#}{_ss*YDK9PgBTcy6ma3svAbHvL2v=Z z4AMeT5em)=#g5wo15=p9M(7jMn$mV9T|pTxb{Llm>*>FagG=g5hwAt<+V@@nw(G1_ zZ%b)dQBr@Egy28z z*M?VZ699LTD*^T5oTUV%N7R{Y1ld$Hv}vc3v0SAcY63bR9vsERN3sE`B&b9L!W!|K zD`1)COM0Bs%8*T#JQsED;G#9wE!}Vq4-!GS7I1%faq$-`pd|({?k%}Frg%Ip;{X6D zM{lcRTfi1%5|w?U4ub>fl8Le}v2etZHT{T(L3fj=QRg-tgHVHVVsz0TLp*kw`pO(3 z{n)7jn6)lu1nv^&ROhIOpxd}?s|v26Vhcioq+SVa9}%A+aVnD;t&`DG>+eX14)O3( ziI{&`v&mqfGM)sKP&~N#lWp+^gdCnFmt*4TfC9Q`g-HS&?+Fh|f(-P3dM9k7ttILeuK!nA5A_N-lq4 zi6jUb+8X%xo3<{wt$=ZUKzMma42X?`rr;WyBJt7`1w*kVFc-3@iLU%Qkzcdj#H%d- z1rTTq84v+lI2&$ntLeL3qajZZ>0{E$tYe|A1I;fOLP|0wjiGB6`z=G@P5YZ8Km#I=*OqG^OW^%;JNr zyTaz_Cd}9GO!mucW51T%JW#Zt;b2YJFLVfJDm_dMumXm=6ld5jh1M27K){ypNR8s) z0T6C9X*G~ymMQM%mdnfpjBf2N(ISd)J`&a1poTyq96_RDAK)hSLs6h@cC6p#l8^ z2;I3Tp_rl#l8_c82D=T3FRFiF&y!&%?URLt{-mH<?~c2gTf^D z(SSV}B~sWuypBR^Db1{E!l|9v-iWvL$9 zu{PsImsgKswSI%g`-d%WXnByUS8l`a0*!9G9PhU(;F#i2$H7%xBZseAr7l78kCjIT zQz32JXmi+Dpp~%<2NbX3vR=80cRE}&5}xp7GXYXlyyBGD{8fKTN0xLs>A*pyEnmn; z7Yz<+hKt>Qw)K=JslQTQS~GQ_GOP3)qwC*XFa)j1i>NeOwz1+7?&yygmbF2lq`X3J zgoHhGPr-~9#!*C-4dC?1Mrt;pu1>6PgWqJTvh$jqxF;>;%0+BAvGUX5yw6` zO@bF$TVEHHLtl!JA0MYbm2Z9O6OjWt0lSiKiz7$H*7B?yy>2P2{KOLIZ?2iOvxzAh zMm(o;mzg8SZ1t>SDnRr@qycs#yaGO~(HfbFqKi>J#=n2U>Lk{+yU{!yRN~-N2UMB$ z4?T1M{3*x^sBU^>t)cX7>RG)Mf2eMv&ER2V!tAgum;QV%S&s?FXZOPAr3%g&6c7)# z51)GNfsYa0IJd^ko0xY6!!07gq3N}I1xe`QfsuXFk+up!IAR*A!Dg@ejw~_(YKf*U zO?sCDVO)QB@L8LA(GS2aFjoP`)exTFPN&}73Tco$bfaXRgzxQ?EdARM85RemAUgs8 zE{l!mY&OmI1r~2F*2oQ`@bEW_6s>RPw`gLs%3)D`W(^XDA6>jZv~nYE?1u4ZE&pk` zdaYL8fOf!_`7Un4MU}G)B`_2G2=$U*RD0a8#~Xh}O|_k{N{L{HUfW>shiT#VF|XAW zD5Nf-Du(T{?$R*>*UtxFF5C56&@glGpWrsgG*eP^W<8FYL5F#!fp`f~_#?e_0p z=ptrHVNzAcG;7Wh-yY6d*og=$D5)l$0d>@c2JhvEa^zBo1QrcBSkQCndaq znj}iVpr@3Yt!N*+=1K;sGLd(~rsxC~mi_#tx)%Ja!+@6xN{qOx*-^{n52#~sA)cnT zs0+kb%|+VqWqlmB`$a1ho2LFbv;F|fXup3pB~-T%xlMJBDrF1dSiPy+YEv*c;{Poe z?r1;Fny5S>Wo+fyO(4C$UJwt(+Yl7p{|8`!J|ZQFfQ|%iJ)t-Sh?SRn3woQQZdMx( z)jWohxJfbtnIrSTfrgha@U>3bUDd)19LYYKdCHs^kzBJea*luzI9Y~=Lz9az@bQ0t z?QUo+TdvX>Wto{TFbhR{KM;qpP)N zeKoy&pbnscz=mi<7V(IZbMiiDn2|P^XXYmtR1bM(p`3DX5#A;mBx1OedP2>Wm5m}@ z-i*t+Yt2W-AOJRRh|L^Sp$L!kweT`3>}_L=c-qXh(RGKJBEogilo~2$ZFPUC>^CPf zmAYNZXlqbkUdJUp4g^*9L%eX*gw^1;cirp-!JccWFcutd`;Son$Al!of2+KU;zMC- zmk!)LNCJB^dy3;yOg%QnSA5!4aR^#TOB!ro&ZQSG=<0ybexfewGlzvC$v^+=_{wPu zZS0GGo=Y(3dGDJ&Qav3fX#RgZF54O@2AE2oAcML6QLx-_G39Yg`Z0ca<|8Nx*JB`Q z{XjvRO8^xkgbgs3DFw_440Js{qu0P5Xf0;sx`dUBcJ57RV*)~p#XY61+>CAkaBNF} z0{{Uo6a*9ABMB6N6{1`8sC0)yySH?@VMqd|93l?^MkXoKY^?x7kEwr*e|0!n252_c z5CL3k?$SHzr|wZ$ym@V45g6Wd$KT1yiLRT>_&IAfsNKL<1Z%EAyx6$=Sbed8Hy1k` zJcU+x8=6Y$Pfp>*g!z&VOm2QSCb$-K0Dk=-u%HH{$As`_?XpQ5S&TAZ!h$@6tqp@q zu)v7X@3w?_*eg`3=Mq&oL2JyfRG``}~ z3>6VCXMCVAKVdUXp3{`uvB(9%sq^ENGz)C;5Ci8>F&aUEU{`^Pyo{u9`g66#bODyR z05aJv1}fH*^^EC^8Vphx3OVZvZf|abQuv_3P4zp)h-#@gc9MUeW};=H@Wrmj{^+C# z3tP_z5ZyGOZ>Be_2FV9slSZ{HHJ_ydanL#&cn!92;F(eYiWd^uF>sRoO-H9ii=mX* z|K-eS3gfwcd|i|nA)1k0#kX4R&DYB1w%49nq%*$CmKS%3=c5dKagna{T$C~)s1pDi zK#0#S-&6wo zM>oY+?66ZgtiE>iex+RZC#8yE&Ge|FpKP;t6f%3Y9KxHybSuaNXKgv)+pS_m15o}< zQ}9O|@Yfm_k_{t8m4CGuz?!E2so}@>2ffbLXsn@U*dc$-_cpKs^n}S{1elLq8$>H1 z{EQv2McFz%3HPF}{6*a?Ztcxwvi<-ENlE5bA|cMX)?(t8?ALwl7)i92j`b^};;7q= zED)8t*W6?E)oIo;o@Oc~Atw%|YxNvdKBHVRg```@O-AX?GGFJQ7LGuC@{VfSFqhaB zaIZ4G!wsR*>c<4fNTzXHcyWLsGMdcdHYr5>{lDl9FAM zkL=ZO5J@~87!@REmogg6;w@*LM0kbBDb#r#v&e3Cgrc$a_@!~Xld?mmH$gE3wSj96 zT9LLD>?ayn{YWVRC>Wv&0-zrI(3ZG(aa3!7VAX#R2d~;0Du@7eO=nH^RL4tu!tHE@ zyZb;KV@j&PVr|UY$ zQ%Lz0rINFyno92Ek2M2mk| znn&{fqT?)Wi!i92(! zHkJ(qR>K;E%nk%@nkW)gqt4U;g1?_s00Y^XGho&U9$}!ibQJc{k2C#opchP-kQ`Yc zqe`HG2sQu_z5omm>=a-Ht8Cm|ur79JP3#C$GXvV^3}3n~PYmH%AhHH^m=bI!A40uOtw3nGwWe zhoV~V7GoOxZRdNA_a8;B^eBH`{&McNq^3kBhpe@ow#%Gik?GKNMSsN5JEN?75-Z_@ zB*oFk6oCg60W6>zi~+k6mIZ+E=jMetHh`f28!rwJv3SL|59wji%<<85eAfbI3rhB3 ziD2J^u{taKeOP&}jG*7%l!aBxu080ZNrJdVNMnI?s5rad)Vo?yJ-vU;O@4tcpgZUH zfI}CK8A#K=zGKoMCOvydM8T^nO3laN+5N2cFb)l0bmJ;t{7uV|KpeH@_8t3v^Gy0c zl*_%hW0?=IR~*Lz6%PAhh!~Wy?9K;34+S@}5Yd zo6A27yUe!?%A)=ALSXHY`txZCAXib{7$BN_r}FklI07s+0Zq4^UJ;&ce++ zgxQzN2I@Yv_I$kqa%y+sFi;6l3ydPZLt@Z?%AU!X6Gv}_9>aej!a9SoOLPsG-eztD zU~3I$WyHCgfJuKyG`&s#&|#sMZu3Rz9$9uAV4YR{*{vNFY#^tUL}vfy7wI-a9mnLi zlq8qmLN}7LBH_yOhUn=CyBGdthET`Nli_F@JeW9su(C%b8`h$fkfEL}X{&E|U7MuT zzWJj>jbDYCi2pr`5UE6Pm?n}ZZ(|Cc3wyMQp5O|-UZ#Iuk|>7{;#1Uxw#*Vvc27;j zBYbE+5@7~nKSHFqpJ>5A9Fp5tUvbyA8+*csowDP6b)-M*`oJ@knO<;&t-|x%AWrGE zbaPfarXy~A$}3}mA;9lm-N40kvC^+=GEnX@>r}Yd*JoyTe-5Td0N1GB)6nps_t-Ma zo4#DNaOdT6NqYX);5?!eZO3pqg(6FJ?YK};sq#u< zOQP`U1iciz^*-*=i0ReMcMcUQS-X$MfRy7qo7R8a&M}we-!@dIePsb+CWh7HWo!9V z#YnsVJnnh3lY+BBC*Om<0$|0;R|+2kL7N*Ffa4;A6{h(;oV8P%wTn~}*;Hc(yhed4 z79{^Bs(^e8&lYs|)9sW#0B-*@co{BvUBRmpxU_76-Xa~qZIq>?d-kl7;%GmfA~v<{ ziF1E5SJXuH{}o}KTv^mu(f+aYrIyK13*n};k|li4qUv=LXA>%l2SO`nlY{>Xj$NTo zioYUtV~_0gJxa!w|5%=&h3W2ZdC-lsUf!#UHna`Dfr5z13@gB&zpT<~hbN z>~}>Ey9Hmi7446;B5})HhyaC~mDqp55+5ulpm+xRfVHB^-i{oHfC(s8?$s}bNl_G{ z8*u}d$nruL8&9xRPm3%paEi^D&haiCT{I_9{#ih7D@(=;CszuCZ3WohIh3W@@ipQ{ zjY)#1bkLIs41P9)E1eHKvQA||xnGeYe-kDHx`9nX-eI(of6qxJ1(S9-DN%o_pQ<5{ zwUy_#s${3EwiW+%@azbE9Q}qTx;Jd0U1CQEJWzh{+*^D zz=Tm3q;UnM=iGuh*=u>Q5J|k9VpU|4UnJ>=$k9|wL}1Q}cyMs(@C*P|Sa@0O=)C0w+9ML3DKe1ka zIR&991$DYfLNwvR7mG8`pU^0a+?pT4&0xvl9C3A`5?EYu4=(1Z(AT zH&n8Vy-a-@594XU%_S=lYN^ocK zmPK}tK35#@4`EG*HoF{B+QAHKdaeIjbIl2KzKh4G5Uo@yV=P?rtMg^W^HMwpo^OcFtJ^pL8;c#xA%K0EpD@b3U{<;Z* zJrgsS4L+ct-lubGE|v8_?Xqz{8O;NXEt~z@mD*y_#k<+Qnk}ho1_RPpQ7#X(Ef05t0o$mh za<~JAlUg)(hRs#lQ${E;(v!VoRBT=o7cmiM-&p8lUY^$M$d@A3noM-ZlJ%C9$WxeR zm{36$r>zMMJqX+=z!;3Z99G%XxsY&z)f&fCF^M~b>4AR+!QZ(GaEb#@SR7rxHKCEY zXg%3TR#T-6$J4y#<5xV`qTg6mAn|@J)MUgd6+W7vt}x3g z3q~R2+vMT~ayjvj?tKRXk+_GXs;n-AZ_XeBS>jQ=q#-CfOT<7$d#vriBJW|o<5zasSlFbQ*%Cq+KK3DU^4j_ z2;?D}p8*Be5TY-9H-RisD2nZ8>05$2ev`%_)aWN_1;-Uju$3D*hUm*Ek0UCi%iU3_0F7-0Koc>j#mWW%0HaCqfe2Rs5u*SM z5bOXL03F~jxE=f)=cvj!8Q}B^`Jhxc(_TzlDq*>OP;q%pF@i%yAEGYDRP8m?Dh+eL zg@z0rZ_91eS#!nS;&v;^@0WH&U!Lb@<$Gk0rE<;uW!R(pE>8%UvJSpvgQm8ZJC2DA z2^D|NfO7Tvq0g3ww>#^?yI{aHFOpe7)n zVklwE@hlvSkvG9r8=PGTHPAWPu+78l_uYY!&9f2tSLw&YZ)NMtq|7Tg-NUX^vfErg$JVQBR zmwk|JR!mcyZ)i{*nEcDO#GXX98Uc-ExXEA_DEj38y?xbJ!9yO3aPK1ZeJKrO1nqwZ z$)`k=&))gz?YG}FO`Ew)Ess2}<72r?1fEIuey`L5qzQ#frP_?jIwXTlEASLpNvz$O z%T+e2pf_{Ju^?ixwx>B=9y}UTH;OIjP_nVDuekGEQ0Z^jZ~NCC0J8t?#S4ZEBL-bR zA}A%{RCl26yN3sqnLc<%s|7jY`H6q|bXfkOtxxuHL;jE_b|qY#*+y7T`E6j(b@cFX z=>stQNd4BoV>|_d1aNa+^l3~hyoo8AUW3|KZBC9lR}e6uiV{IF^|Um^h5Y4x=b;?q z5?fXzd}UbvM4gRu-`{*7<;ZlufU?SiLp`M;(8~JU5to zMCQhOUi^MZs~@?}k>%XTMyNV&mSPOu?clme??R@c_=JONqg05Engnv_(zgB@c#nKV zm&|l79{rpwvNEm8q|7!|DgZnev8l4bGeX9~l`}J8D2>j|P$^l}fel5&fAm8J%e`UG ze;ZN?uZp(V+V6)g`3Bzva&CXyq@H-pll~wv9_R8PPZJG5SZ$GSGPSKyg`~{a0AnM> z0uO?`Cz-M8@aEvF?>A@=V0YE!IZKs>(p7)O%q3KBaZrL1g~C*aAZnk89WL-?wVb*k z!rf%bc27A8C;$zhhBsim!a9YvK#eV9_qGp5_en)+E8Q#`Mk8BTAJQk+YNHtL?aaIP30PAN9Et@ z@4e!c_)0&$dxQdV{%e0w81v=03(noCp{wt33}c{pVwg`71z%`JJZNc&xB?8lTsg-Z z6cp_n2Eyr<_+1EHHmD7Rg@BBniRrjp&76jLRYmHCVuSq2KTW9UGod9Cf0*u`xhmx! z=GIm^^ppzeW{tO6W~DD<{y0Q?ZkJB!?NgzbY)HP~&wshVHiv&3@&*4F`9%2`n+P6< z@jbhOFn3o%b79jECtGKc2=2xN6Sm2OMA#WxY!`Z>3`|d^(K-!C--G_+xdr-xmEw zcO1ttvQSMzJDcACS|37tPiP{&GlH#n8sa7SJb5xW5zw!}0psr_v-j z=bBU_e|P$)At_oyQ2^lbjr>hKfoc0hNy?+6TTwK+=#MUN}Od zG8yT;n$l`f$VbompnEeOtI6VjZ6t(loSI0pC6b21>jFkz_=CD~-G&gjxr{8XSTeg` z|2b=bd(rW)%pM7|u73)K3I^5o89^WjnN~Gjm}?z`D-wS{3WJvqDuM_7>?iYK&1bbc zs}G64h!DcyoP~UxgX4gk%4bytm+F)r#@E=hMOv?ngz7Kv|EfCkH!X1%BMd=$V)$#=wEY$DSgP4_~WDLXUw# z2nkc9%QAmff!glGVVD$@5xP-_Uuv32p^_PP%jJ8=^IY|f25@^FIYKH+cKk^s774tw z-t%jKZo+-C;Ge1o_!{G;rir{K1ZUyMkvcMApdt-RiK;}ePNY$j5NKsu%TR@4|BAjr zt-0L!<6?w!R&53R1VwxUnuW(BE?>Z6z#DtB9Wj61d(*sHPQQJ&8nx<6NXsl7>D0)1 zX3jr$#<{e^c~FOV)iY*t$e&F-sp-`fv#eQqk}6m|a(ny%fsnghM)~h?-^`M+|81dI z0dPieOq)ZED4h5yu&~@u0BA)2pfe;g#89F8TDF@~xRBo>n#M@U4bMTY38Xi93K|0U zQ zFQx@Z@r#`PTJSx9id3PwDSwEcIdJv+6v2Ok^~+hN<-dbEnH~}Q-~=*X-PE>}uq|@P z*N|#ZLV(|l#l+`rxr||795njq=mo`=sR=QD;ur?T#f!N|q92?B(qt9(7{xQ>f*unk zK|ClT;Dce2liz5gV$6JgAIZu^zYD{g>bo2f_0H@8$Pz>-zYrTvBDAkC4!tHJZuNh- zSAg^v4Gh5hYp&o$O4{#I9oTjiD2+p^#>?ZZ3+e)tH6MY}DG_hzk>H}9KRs2IxD_lY zI3N-x9_4VOt=27!^g(!y4K2^U-t5k}qrEiYmts-j*DiyWvn?^NBtc?k?$B`@q0f#( zZiBXPl=}fv+tp^7Izf1c%54_5A`gFG1(8s#VUg)0Ln5RTLuGbewu&KP(B*hSUBIw) z6}Iff_HyQfj$xlNS-m|A4?>-#)Fq&y`CwO^JMEowjVIB-9Q$!s<97r+#%8lJE%D)E zLC!o41{zYH?CMXD-Pn+a9F3TO0vsR}#i#&Gaa?p?3Q|O7h=%E+dERt?0-=AbV2cr0 zxGO;~>5xSuP|}a0Nf8XF@`NmGzNOMgheal1he*H6^i2SYNB6d;ivxY+%ZZF`E^{$< zzUIVZ@^}+VLpWBB{K1r8u2dE4wR4`yf_N@8eKDZbvDSbs8NsPDgg;7YrVxS=!t%pZ z?T-US>(;1`K&AScc>K60$zgxZd1-tkpOQa`_9`X{FnDbVFV3w#q?mlBH@r>?ILB{2 zt1ma^ke^78LI2vSNbu4321)ayDxFxWnN$H$^;J^8ut1#A1Lv zb{8(kZhBV5R^dtf!7#@Cwp#8YU&(K%BpZf0LN3xw`@p^KMF9mLBU3N zzo;Tu4dWgx`4W#GPPc78^j1@`kS&Acqw}S8On2Y>^H=%=73{2oH zbilZu(Hrr3ob?-4n&w_(V0&H9RPhv}kQ+dR_Jv3r1%J!XMwx#Rn?`4C-ZV@t7aw{z zmQb4Ub6%F_YCs6N6aq9217DrC_KGs;s4MY1hRgMR(NHG`*k`Xlq8s>+Kn@-0pTFYt zq|nUc$f_F-L8#A2#vd0M<6Ccr+d{&NO-oHlT$eD!v^I|BH7~10y@2`07%8-;I4?_A zXGQp&Q2P4x&%=K?C|oQC1x_{hvV4a0L4c}z#csYSAc(cXFbFB0Mf+bDwS+q5I1uZD z#RB0eiw+j8sQZ=$YpK_G^EFVe${aEZR}mh+EGSQ~nGp zY=oLuaZXF=y_!W4{zF3Z&wk?-Ans>}lk>OVYggT3x!YxwT4<7O7Y_z)5YN4@1&~QZ zoun;M5@5R!DFYZboGNgOYk`1G^GV~ogY&lm#}G-R`{I zq7Xv!CE0&-=H}rUU`iog#PNO!w-@Z53I^8VJ>B7i_A%4r(peFhDN2@dLLhU$##8Kt zGC{Ojft8KELsq!0*3-gEl}h1cs&jZD?N$~qBrCM*p=1rKqb_gM89iGs89!?D3ndSC zkpDf*Uy4w^McHd0#!Rnz!Gifvf7x{y)s!eQ-jHh~>8hn<3o&gL)L zS8;z^90a?NWk+_}(>}p=wMf7tKSZj57Pd^T%)j(C!8VYs!i8fL!pk*Y8rnfiW=O0a7kmm370k_qf_CV&`LhwEk>?F2arImBXW;!mb&McZdfEejb~ z;8j+$bQ#W$S%L7dScg;+YXew7nxR^gKY*Iv5U=Q3hDD}jdmSvZJ2!{QNuj^G zjK4&&jPJ`*SqEimwMvWt{-HZPfJn0uM}RHzHJ5^K!at3eAs}Wuz*wQsJY?r|Uy~Sr zTW~y3Ef1z%INWZTHIgSJ`)9t-mTk)VIGtJjFzmBOtr-AfrNcM>qH>Ob3%YgZkJC}B z500Ao=L0AU{D?u|I?4a)D+pdJv^VHkkm)7*jDnLMrN+Iuq z6gQ!Os1w2{%;-&U835i|)?8YivHsVIT%?jo3QpxdDCkJ4b)qP-wW~^oFqg!+CJdR zs$A983J(UtrAC`1sJ$aKx8Q7(Xjo&DhzP^jE;zun0P0fIz#1qFBWgMNFg!eP(?Se{ z0(0q=0i?y@^?M#bs}T>*2B;c;Rn5`+0!)F5dDPRO_F22OFNdFa#dj;@latRmFd)b@ z@!Y_^K2!{zLX$1lyISuasCR)w8~1C*+yZxE1+#V^{>x5Xv4(a;NBtyjxK~v)JVYk1 zdPc1wq=@a)gL{XyMwcw|nTBTL&l+yM0`bX5m`O8>Gg}vy2k(BbiNz& z1d|>LYrtDRm|}hb$Mt?Z0&NdM>+S(6E5Rxa`WFf(jgHy6R9YTe3XnGjjfe1 zff-P`2;Ce~RhG0mv(&?T6P6S18H7j2Da=cx#=8M#D6Ej%;Qq^mwO7cgkMZ0D-efSC zRcI9_f=MIo6A@4{GpPpx?Jt8JkHriKgO*WXs%bz{eBTi!q5!vlOIp7yV-20U%9I^f zisL%7I7IV)4ka&o0?r^0NBaj9TxCTML)he|DGu?|@?g2;Oc0xoaBHDXFKb;ELDLCl zGjuc77X(_;|GKf&j{#a-4yej7RTUtRIVTsFT|2pGSbaW6AQ~yt(xT8tCfe4xak)r?$5bOXL z0Z7vq_S95)7ii!9{cZpJ-XvTH+JnfJSp6Uy4fR6x-+?Wdq6;;tCdN(JjVdO}->wy_ zxjS+qFU&|`JOm~dV92U~A%@EWIUN=m^GW=z4NBiH=)>86?w<}cxx3>~+fpNmg0C9c zM%+}V-~SlO=0V0icO!Pcse=W8ceY+Z43tgDYGoGqV059bz}E?BFIX*G*D^EM!tqs# zhL`~QXjTTxL^{x051#uc;Af3zaNIJH4-Cb2R8X(l37E4xDHmfWLfzUMMQKaSN(`<9jKFlLb(co82O(_iJ2lfT#pX#7?i^Im2@<$ z;kBiEnV4JSy;U3dk2OmXX$8IiUvh% zJrpy98zD)UJqQz^=ls6W%IS_67-iI~B;uR!J5;EDantIS<2$F6ZMsd9MvUk&ghcPcX-U;3(6uOVk;tAgt^+ESDhSr?Bsv_SzXyA zsC@E&oh3thi|fs%1Cj%#X<*smGBF9J4eh-uOQfMRAL_hSm2EPZ2ulhAGQ&5?g6&qD zPdMq@RAAtwWt~cDsuz*kM0kE&o&G-@+wPV;J0z=vI%(+xDCeJN!bMdnWB;@`y$<}* zzBX1bUFtS9)4fA~WXr}$G;bY?Am@aNSsLSiS^9Y93D7f*4kQX%g8gnc(ZoB;B5W zt8KGWZm#w#Ak`mh+|-B*rjp^nU^Ly_8LbC$kBi7N_QVfBndTlFwSV8N04BW~{x$;_ z>J?iy&|h=*wApkD!C*D6Y)N4uAE-16UmRaRt6^s6BBo|>)ua3Qc$+YP1x(=_E?`j(`s)S_bsj)u?o{&=a!dQ-3vZ?pU za56!k#aHu#`XgdMrZBL3QS$YSw#|h9hVbwTr_L&9`V;DwY}+=Bm%(RMV^0&Ppm$IY zMjTqCN(d{cC}#; z_SVQLMnn{gcE#GZtLU;f9EVeB)X5zA7p&`Rz83gS!sZl8B5L=vB%)P`X0D?+U1N@g zHC>;@lZ9}4A}&CKu;O-Bm}^+nU7p+P_22@;9pk~yI>zVx-cz>mf-kKQ%|MK7arh6C zs?hR`R7YBl{AqYnZCPqg?=k^h9d=w%u9=?VJXAQo0F$$LPm{|9?50!sNr> zgdlT&2%7?z3M9gP#{6F=?TQfFF+e>;>FT*83Jz#ziesU+yqdO zT!Gc39yx$zZ3AZ>)k9C#D24J^uZv;mD2pSP)it1XXKGFn0%<5UpF?}|`-F)>UHMSg zJ}DU8_>$m4)>!&~UOE}_PxavuNcQ?<1$V#}Y;v`5g9!%tj=0V|1~QZU!yh!fR9AE$*0?A%FY&(kU9L#3%m3G7`t3IL?*jI}Wh+fwfsD1Xqeq^D4-W}Jj2!oo5T z$=GZJ=Su^z$i4hEqHf2uIXkbp8w6TH1qe0m4a|^wceFLs`0_r`j}2Z6b=7XJ0lur2 zLv)iJ{gn29o@Z=JI&!)<#vK`o^pHG~7+pRdaxw-m^nxGF3op)?8hL2Hq}t2-Ih98W zMJcQ%dX|wZ9mke>0s%iM!=u^ z8dZ;F%ei!#JaX~&@d1bnENBl2a_!`XBEvm!+OM)1xo*=5lTlSy*qJG=WYN@MnOjN^ zCoi4_CQ86XvVpP@;y6Y5ap9)?P6_(oP$c7%uslvsrLVDenQVfw<0zbNv*41h7^9p6 z<-iGlc}T;$tVhH);d!Li6I{mZl9RqidW~#>M}wokR8353rHTN8QdV(&KSN3g9Z#0Z zIEktu*b=ED)Qm4(UNYdl^|0v@_s<+py_Za@tCwjiE`5pZGFyn+1IfYk6Zji>dZ3t-!sx#1OEU3q?mIV+UYxcV}C~O~N}3jXvF!ED8w-)0+s z00(L%$w#JoFzq=W(`d76X8)+Z;bN?7iKk}t5D6FzB={-1u#*@Il3?lC16%SCYcCP- z!7^7OExhESqlEW(1gW3| z*1)4lWq}C10I{b43=r%97y)TG{dJgt*6)viC>Nw{vH*3Jxq)1Z&Hl${^oPQ=n<4$mG z4$5=uy^nNX`DHf?ax*MBj2&~7s6!o1`FM#x$G#V5!vTB-@P(}QZ!{DEB9EzmJ*D$V z#JWd$OdS}fRS&a5tI$y{z1IOdr+^@ETpMN{!)2!LOoyb}JQaDkl9&h)8%@w3g*uXx zS>ve0%lV}eb&zo`N~@n^-u#ZoJekc5IrBhbO8ya6GOa&N(vEJLQw!R$q~gE3)i@O< zx~E;TwysV^NU^y|`PzQp!wQgDG;~ z{VpMDjfl{le@JC1=VuW zi$@g;RiB`d;mG%JB+z?!|7bW!P)(WjXCNp9anlni5`N&A^4K zsI@WzK$1%UR9_E&@IH>(r}<(TFTa3g0}!i}ls?~XF?LC4a0_uqQy*uZ)J5HEC;g)o zZB6~6$U8w?#9Ein_Prq+fV2eKw0w=iz2>@L#>eVcBRiFaP46g%$SxJxYNH$<8vWfbC^p34)NHvfP@Jr0#7A!=E zTtV;Fee-xQ<=Ob<)0us_#chJX>l)Z&VD?0u9kh30O9zkR<$;RmIv6jR&)eAC6o>IL z8nG`|VgTLX>_h>?cqV>N6hmlx9e873_ipGNlapV)_hjm^iMxueqx?dv%K?Wt$Qaed z1%D$HNPba&H=P9?GHGyiam)&t#_H@J8#L)^%O0>{@Rh*Ewr?HEtLXU4wkL}Qui;bX zmMT?JP9S434wK@;?mf0V;bDXrXmap|_Vtb)SmLvG-43E8CuyW8a)dZ0fdgM zppSunFagN@`-3Xl8g^ZywhBF}vDM<(rx#Z*M%2+-cM5(Gb4ELbmQ0DHB)ZW1?Xm*> z7nh#U^P@729@ZfsMNbF4Tf5p;8Ez5&FWlc+7UvdF%~mj^+yJfKR8=NqsqOk0z-;zP zJxUi01)c)7@e#L2zPA$pyG$TMJLv2M4nHk_^lP5VtK(sqYlH%3J77qo!-RaH!q1KO za&o9IQyyGihe+LV--fOuq1;m9iB9Nb8a7ZG5 zG4q9uiGx#Q55O0B?RUyGa(S4{fYRfh^T&)0H@H zWPrNjIo+wVLYJDBK*)$3U@Crd#p3B^j|)DtL{@|UpNx0h1WXo6SUG}YWRl8ZPY+km zh0F1F$|iJ31y?6+OaV1iM^~@c6e#A!&((u>?RE`Kn-d#8Fsm?1jD8A^7@8%OLxxDCY1%!dT*JrM#x?QT7V6u zlwdXizoY^6OIHoT2HL3tW3y3W1PP0Ht4)jYn1iJJC~_siAei}QgR+tnGfal~io(bp zL3bz-z$;~fz7Y8Xy}ct1lk6COsB7H1g({#Y?jXcJ?eu}(&t)S_>R*&!`|og77SEe(r6s zLCC~i7HaU`%cI3A+UyYYx{VD*`Mzrp9E`Q>mWE{7kv9H_A&)4la(UZ-M?OXlc`6j+ z&ME2O%lUbnUjDZ6c5C0;(n-RcgFbRxY$$xVgfvNlxfFyTGjnD>a23MINCxUk$3HD< zxc;XsN?jrWlZmy#CaZ)9=B%kAQBx>a1_ofUn?=srpbr#8&tqz%W`W@r9J*_0qS+*W z9T@kfHxxFL{O|X~1g!yoii0?xK?NsMe;C!41e7Hrxn^3_GL{+hlr_ZjVbCNb~lu3$~%>hd4j!EEGS?mzNZvaPFPEn8) zW&HLFFeE2TVq=l9ASNFT>R$cHU$#RWHdkE<(X9KGSs>`VbgdVEttZ+&jgPCQ^s$uU zh>4p3IH>3uQ?NPeBKadi^Z;8C+5_zMPJ9I!eS9bB0lgJmLj@=%?*aYB2G<}2(&Roh zUh4fn->`MK=j`BUoe3!P&E=Q*(ZvT59twrxbir2>OB0Ha9xfe76IahL!L5bOXL zZY%(W>e9iQ`#->cBBIER9!TkQP-r1&lk4Ol3!Q>3n@<-4Nc0`kvzA$X;PE&Bqgh(5 zZ4dYrzV{LWo`J^3d10>&9X1VwxqPv!(f-N*U|*vw#h)_rMF~cN{(pxFizq-&ps9Aq z%}9_3VqF+PS<~W=m1*+`efK`G10)a>-|7@WdMS(PPDgxyfx>zzQqhA-4kaFX{zH)8 z9XradYX?mF;Ho|zeITRSg?=Xa$cS`H>Zj(4={Ft4&bgOE>ZIL4G2jHZwF z@&b`DIrs1*zjhGPa&o>>imra!D8;gR$({kO+VeLA>E4+4;gGu^-8%5+J3vZA2PihAQf%qmmdMnTPSwx9bd{&J&|807NrJ1>?_w5VKEFSuS^#$PRfh zNQ@jg#G@{YFF6Hy8Kberq3rK-D(O!y^{j8^s}U(k?a$~8*bI;&rmQZ27}BU9VcMou ztXl?uX$#lF*LI~|0sQji^kGgoWBY^p*fva@xl7RI_Y2O~%-p1y-6@jS5rB;+vm{fN zc8;jdFw@S8==m55kjSW8DfS9|c*7w*m-o=cU@C`!Mz`nSC0N&3kXv^k@t8s2#l6a_ zBlSY-WX^)fadKw1VWtd^6dpyv6;3Uvj+HWh&%0Q%O~0R{mwZPH0130qijqh;b0K=8 z2ugM$GOY8RC{1 zCe7?=)6^#i29hyvnTyjz?ni{0=8|G{ZuOIHDIJn!(JEP7{?h?sNbw?$&3mPSom2XM zBJqAAMlbm`UAxp5XOh#sHpJ-u*)ed~FEO(Dx3YqYadbTpp1><}4XdZZ zmR*VG9$RN?5;Y(ZEtV4K6qkB2-<|<~s={2;@QtgBMMJNN>fr;&s6J+J+-&~Kjp3t+ z3mz-~-RjATU5r+j`hc-{#}5jalDl<=?I`40LpTWvXETj9leX_AEHM_S1gmfyLbzJB z3w}bnm-BrOnEn+nLS;Qm#R&hGQ<5g?ANJjB?NIHF@pM4b=GErY7ir$8&9^;&Y^irBS>+fT)iBSJdP z2G=SQHzfCI)W~)F5@V0+F=i5vs9b~;eULUt!9m5P?%-@wD4O9y)(vhD;-c60@~{q) zXK#UUY_MPan7UevJ-AZwLO^?e6!A0dFbF7J{jdFL@ZrJ4g4}2s8!DBE| z;3S0<^^I$Q+r=6ULYiGL*0GrH)f6bK&0x~MNj?{>*b_uk!I0Vrxbh@;H~9>`%A_dj zIf)o8tTA+&H$A!VaiG9|1uObdcMZdYNLL@~eBQ}Pq`}%bRde*`01~ik1;V#@(P73t zFt9culz+i>DoFZIXF+&R7g4uDXMus5RSfC}abGeNAXp#*(0~$i2%R;B5)jB0p9k29 znCSqZEH`fk1Zg%5<0m_$lAA5*+q}QqTr!#tan%%XZ-8A6Di1AxVxAD>U3z?W7|@L! zcjyc%G74En)XLa0mfau#GpjJX>og7#mG&!q4c;!Y)fjtZLP~~(m#ZLx%mShV%@kO3 zJ&1%ynXL3-xZ>=bqMA&MKn+U40}X{$Z9I2U9hOceDo_G|7bv>rH+Dbb`}L1S5kZxJ%ZRZ>YR zV9pNm=YJ9dk7w*NXD6h64fCA&X%hZt%T02>oSoL^gb~oOt!nYlT$9l+oQpEg+K6_K zUuU)kENhs5%ue+!{@_|3G5k?aDZRkLN)B-9%swo@(9XO?F|jTmh}xXcli-d@Ci-cG z*@&bsCEK};F)a zR|=Zb6O2rp6@_}~i_Tr<)MwF&cc+A4a!A0NYfk};2PG7}jsp#JQKIXb1jU1ik>r2) zalAO;cBMa%#RtSug<-YbdCxx;eZIgD4WL093n+~5MDmgOXxz?(I_ilpk@ov>>BUlr zb>ZfJBs14-nD?pT8KrL%E<@Oq`b^4k#=?TJ1{84X9jW~Rl}2qx9S0;M=q|A6Kpjhm`}ABkU}W!AL*11DFi zJjr&eXOf-lTF)R#vk{NOf0GTZ?pul=K0&3a?F*IB79oWqH~`W6(GM3RR*3KV#W)Y% z=@vTCuERRj7{`WJS*$rk)9zgwhgwEPKOXgm;HvD1Cc;o>*;trj-Z zN)hw{Uv#>tXmVxp6!pLE5p2AF-qf>CL#yP)hK_BU{!i=|J9Tac-$MwrlAN^W%{om+ zv1+msWG?gvqu^UmP%n*dpZf~B=Ur0a6GIFa?2jjAj}XrpXqrP^J+ofs4qK@4LE$7O zM8%RX&|e6UiK%t1T;$4@54W8e3Xg!t0mxhL|7LdKIg9?$zZ@ zuQ#p+H)~Mp;FIJUL<+Oqroi8wH!LMWatglv9+l-itO_r}g@Um|283!(Id89&d(K9^ zK@~T+4k5948ZZNkubQqeYD@XxVR|~{2qgqi4AFBCvVo3df*@wq_-Z+iK8eq|?B(J$ zG84PW6)d-kh>?#p5Rw~zEcm8o%~#j_2X6FB{X%{- zR&<7=aLHn}+IQ?L9Yf^OV$lD)I`~2WXU*Qg2(k!sl@r9`#-dR@GsH3*|FW=2{eff! zM1u6HwX&FG7JwDUQY!(p36U4XVNr>Yj;hy8(18q`0AA2JswRSebQTH}q~5Ujir`El zL$HT^@d#?mqAmhv8ndib2~?(4&k60>odZY!Du5rJjIiK> zFj!BNH~|!T$_ktlA$MT`;kCEI$2~tR{AyCe|HCr&%(Je5z7*k#jSBEZ^DV11X16JPQ#7)^vFYi zRMmx8a!DwLwNb&~6$%KR9NeN7Gn4oMSWirx!ppqG-H3NNG)DzL6Js~#zEf)t(owr) z;^Fa6rt9v1iG>eJx*HAWYMHXZxFTDm06Jp7k;;I4Phu%_ZUmFYbv4fEO$82f({$~+ z+#~8jfDtUXOMFKbPNqEnsEbH~{CKixRklE_=Afe?Z*m+x4;Zq<;xNpf3>f5!5 zs;Ihlf1OfP5E&2bzBrv`dg*YBK~Q1=l%(id7Z}}(ybL#r<6;O5!40YEI>w+t?#3H( z48WsGZGj0O0Fk!<2@vcQdm@0^1H6A9Xdx;UkU(I|8z~tk%Tp`doS{5 z4?2H;OIeAsdgdoFOt}u>1BwK3wzklw;4RTljKbDw2z!5G3!G z-^mUiCPkAWtCza6BU;w&3AOhEZvX5w-Znyi{4X1Y>jDp6QaI4>ml;rgSh889V&O-p zCcEF~#;J0T(V?W}WV0F#it`!1 z!6k9K(<)}0&)R(-7JScOP=c3cZUE;zN3Hp8$ZqrP@3r_q&;RBz56Lm%K2}BxjA{>m zl}~YmP^zxfMaurZ%W_7u6P@3esGFIMdz8`FKtYs)cEz`Kn&-&FrD~aL^W;>VMfA3- zQb{c}+(4jAx(;mH+Rz;{^QXn)6r@tLeP1q5hsd_v4mW>`3s5o;Zrw2yp|{4tYGX5Z zw*%c-hap-)V)mjnD@~Bnr>+2V+;uE}UOF!R7+F(CUQ)*{vbNwPV^E~{U`i_Wf&RA9 z;NB_(9d-6|z=V*M8?tZ1LKTDtklGGw1FgSV6; zzwIm2I5lW$Apv?+NF%sRLJkMzYM_IpqUJ*w`cy{y0zz;tMvxT#cp=Co-OKynfC$Yv z{Z`Q#b2v2!>EE?mLhc5+h~b=nyb$mOzHID$X9S-HFwd0voL9G6-9em5`9+`q^8s}O zO`+TwIG4w9eW1%`;rmk%KnF~h-P+q1a9K{c>#y59VSi13MjYCN&8uH#o~SVSweO>Y zu7a??Fi`50m9hF_!}6u4-@>?kOir}Sqw?EOx<~ARxzjg8fIqVwtoq1*NCR|JcZ(@w z==l_}KGg6Iau*kSwg*0H35mM;l`eOzHBRqsJW6W`DU(6k&5aL75J#3}$cLM9=;+c4rDymLAe`c#V}+FM2>ZVyk$1hQ6I;ApOmwH1Zv7gRl5J zndX;=uE2mxix1pj?Lw@75SnZM07m9dThOaz_6cSc=yD4OCKip`d+Ic7@zZgFPZXgz zoR?r;*?6G`iMumFUIwI~cjso36w>*@@-P`y=!y&;Zwi-L;ThJE_X}Bhp^FQSLf!I{ z0}4$QiLd1TuGU{oh(#mWrj}=bIJxlVy%6c$Z4u7oDqm6w?VQGcl3M*_wuW5EY%{3u zYzh#UhD&6@+20{yn^{}k$Ct?p4_&YI2@cqkCDssNb$Oe*)R+e4_ZkE271MqjfTX-I zSV`dH&n>ahT8Z&-nmzA!M_YxrF+rl#deu1hanQ`N;j~6B=%!&iKF_v4fxHfEAFEWx zZ#&|4!#~9ILO@l2kcBjJE`vSGvp$))axh^ypv$cQs1ERCT`K_?Bgr3;KerirKyu(+ z0|%fRZMHy>_$i<-ynjMzcJ!sh(qE*7GWo3osDurt`>!{3x+Me?1DX#3&oS$uro~0C zFsZ=LZELTQ!50tgg%7i?|L=K|a${Dd7Dcp9dO|2U581_k&m_c;0BUlM_J@5k@qBT& z1~j?+{4{A8K-0r_^7%sOJoZGYn1{O(C(R)pU)>j?`Pxc-NYQ3Li08oZ!>YIpQURxY z%UB6cZRP6PG3AcmENUo%n2mlk6yShHKatC^!wvqZZVIKrNlnecsvB`a%%h#!#V|wz zGDAsb{acoQjosryFzZ=iib%-t?6{(pC`92}XWA`>93D^ryFQPCL#ACw&YVLo2f2it z06f6>hJPBWcYJ#i0+kQ3`R42ws&RbyR4+gqF7KM3TY#&90>Y1c*n~aNnwIHV-T?yu z8I_n^d_ow=3_^ZU#0=9MkO0qX9LQrC30Ou38#Qr%bQ|zpfy3u&G>`=f9a1O*q`R2s zk{Uk(9$W*O7tXSA!Lal}91mYT1q6$81sw1gfGd(9uvcI^Tiw{ZkPbjz2jAjMn;000 z@$4w8D8or7*4`WRZ*8an{z_|_v(OzE^$(WU^Mhm8|zM6+jxkU#(PU_5{L>bZj359K)`Pcs@z-g6}s^ zq@^6(O{;w>JpT-ZV&QpBxnL;P08n(zzd9`&`2)F9)HX0NLx}-$yMP>)BNc!NIL8}* zVEKl+a}oCOMcLsqTMFB-g`o?3>nRT~f@qqVpH!Ft3(B35J?=n*oz*P(x}gBXE$g}H zOUuF16TzXTR#*TSX;5dcohX%Q4%Jr$7ws0>gx&fH&0QG-m51I&4eY z;M$%F5HyA>0*djPK;j|J3j(Fc!&G*7z@9${odOUAB&Ne5VagM_3^PF4y4(D2sF8Ix z+c6`%5(=~?+qW0dyMWJM;yfjE6L=0d^-AH_vNr@Q^`XqEKlT8U7-8=A{lH0o@W}%x zIi1j3wrgKhblSsb?E>SB{B%Hwl;~`*7%p|8(n1!b>R>9pOVoQJ51%R_Fl|X3##P<| z<9?K=o2+00vRo_1U`W)xMar_DgBy$qD1=YWJLG7FOT>ZJ2Et=wD-n`;i+G~NieNJ< zYk_`HwASDv3lUr^U+7xeOltyvoCuEleWah{Gg_m9-8BRw!05RU4Gy^=b%MZK1!aQ5 zT;C$^p)vQEKl$PSKNkp=ePWUr@9RC<6$YcH!YcAo*GSqBgKYW{McIRkcgFSeB-lxJ ze=Y|gUUW*uTx86gW}4|HuN-YE5W|Z`R)SD)^G}el%Z;Ek#qs>pdY}n^T?2Gyp)Fgd znMZWC)d;)5w>*LR1;JfFZUQmGwEj*|6cP~D@roUkFbR-~qxOHm@x*tlZ%}lq+$;74 z0EPyTzR*&nj}L`ain<2WPFx~ur(_glNL8m<@CONI$ZZ)`6=Pkdm3ctMJl-;<3)&!I z5|{&-*q6JO@&aU;=p1N&%H$|!$$~awY;*H10AxI^TS65!wlElCLfu z9!5b3IoExGy8-PS*a^xAHH}x%ukuEpYXAV^r|1f$&=5z2KD}+kWWWHUM_GXhK>(41 z01Oc903M-!#{xD(wxRCqnb9CxS7XHO^3@le4##l={gwYv3>d|KT7#+FJw_WHEguIx z?}~AXU%XtN2P$3182hA!w%%JdM3U}0W4{WucChn8E z#cmh3M-9z`m?1$9;}9tq$U5gen;1`RqWS(f2Y#3ZyHo{(ZbLs9kTC6q$W#9rXllmM z!yV@P6du~j{&dk)`B0%j!(+ITtH5Rg6aI81&_Xuo-(u>2ku)$YauQj0h~Rl|A`8O< z_}IOvM?QnK3TI1pNzbgQR#Gp@-hGz zm6%eql_o#)d#3qbuJZP&y@9Pvoq+i5?MD4}BRF?c^c0(j40cbxojUxKWMy3QIP@K0 zMm_%Ul5??t(nres(p<5E2WbLe8qh}KT=J$%_GpvFs83ZSDIqVQ^FYW2Z86vU`g?y+I>}xC*i4o7KnC`Pa)Q;8{0cGx!oq|PG zf4Fbj$e{Tr?UUooC`{=tmzMBD2KTJY;X`bH2i2h4bnw2wo~Y@Qu|ia&OC|@&NU$XY zezyj##%jpS4GnaZs3%DyI}|ZEKd}HfI#s{i}

h&ehq8#63aU(dLf-7GN4|6 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 DDMncU diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index d142875aa9..d57d43eda7 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -6,7 +6,7 @@ RSpec.describe MediaAttachment, paperclip_processing: true do describe 'local?' do subject { media_attachment.local? } - let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url) } + let(:media_attachment) { described_class.new(remote_url: remote_url) } context 'when remote_url is blank' do let(:remote_url) { '' } @@ -28,7 +28,7 @@ RSpec.describe MediaAttachment, paperclip_processing: true do describe 'needs_redownload?' do subject { media_attachment.needs_redownload? } - let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url, file: file) } + let(:media_attachment) { described_class.new(remote_url: remote_url, file: file) } context 'when file is blank' do let(:file) { nil } @@ -64,11 +64,11 @@ RSpec.describe MediaAttachment, paperclip_processing: true do end describe '#to_param' do - let(:media_attachment) { Fabricate(:media_attachment, shortcode: shortcode) } - let(:shortcode) { nil } + let(:media_attachment) { Fabricate.build(:media_attachment, shortcode: shortcode, id: id) } context 'when media attachment has a shortcode' do let(:shortcode) { 'foo' } + let(:id) { 123 } it 'returns shortcode' do expect(media_attachment.to_param).to eq shortcode @@ -77,9 +77,10 @@ RSpec.describe MediaAttachment, paperclip_processing: true do context 'when media attachment does not have a shortcode' do let(:shortcode) { nil } + let(:id) { 123 } it 'returns string representation of id' do - expect(media_attachment.to_param).to eq media_attachment.id.to_s + expect(media_attachment.to_param).to eq id.to_s end end end @@ -89,38 +90,33 @@ RSpec.describe MediaAttachment, paperclip_processing: true do media.destroy end - it 'saves media attachment' do + it 'saves media attachment with correct file metadata' do expect(media.persisted?).to be true expect(media.file).to_not be_nil - end - it 'completes processing' do + # completes processing expect(media.processing_complete?).to be true - end - it 'sets type' do + # sets type expect(media.type).to eq 'image' - end - it 'sets content type' do + # sets content type expect(media.file_content_type).to eq content_type - end - it 'sets file extension' do + # sets file extension expect(media.file_file_name).to end_with extension end - it 'strips original file name' do + it 'saves media attachment with correct size metadata' do + # strips original file name expect(media.file_file_name).to_not start_with '600x400' - end - it 'sets meta for original' do + # sets meta for original expect(media.file.meta['original']['width']).to eq 600 expect(media.file.meta['original']['height']).to eq 400 expect(media.file.meta['original']['aspect']).to eq 1.5 - end - it 'sets meta for thumbnail' do + # sets meta for thumbnail expect(media.file.meta['small']['width']).to eq 588 expect(media.file.meta['small']['height']).to eq 392 expect(media.file.meta['small']['aspect']).to eq 1.5 @@ -128,54 +124,48 @@ RSpec.describe MediaAttachment, paperclip_processing: true do end describe 'jpeg' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.jpeg')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.jpeg')) } it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg' end describe 'png' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.png')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.png')) } it_behaves_like 'static 600x400 image', 'image/png', '.png' end describe 'webp' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.webp')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.webp')) } it_behaves_like 'static 600x400 image', 'image/webp', '.webp' end describe 'avif' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.avif')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.avif')) } it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg' end describe 'heic' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.heic')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.heic')) } it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg' end describe 'base64-encoded image' do let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" } - let(:media) { described_class.create(account: Fabricate(:account), file: base64_attachment) } + let(:media) { Fabricate(:media_attachment, file: base64_attachment) } it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg' end describe 'animated gif' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('avatar.gif')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) } - it 'sets type to gifv' do + it 'sets correct file metadata' do expect(media.type).to eq 'gifv' - end - - it 'converts original file to mp4' do expect(media.file_content_type).to eq 'video/mp4' - end - - it 'sets meta' do expect(media.file.meta['original']['width']).to eq 128 expect(media.file.meta['original']['height']).to eq 128 end @@ -189,17 +179,11 @@ RSpec.describe MediaAttachment, paperclip_processing: true do fixtures.each do |fixture| context fixture[:filename] do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture(fixture[:filename])) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture(fixture[:filename])) } - it 'sets type to image' do + it 'sets correct file metadata' do expect(media.type).to eq 'image' - end - - it 'leaves original file as-is' do expect(media.file_content_type).to eq 'image/gif' - end - - it 'sets meta' do expect(media.file.meta['original']['width']).to eq fixture[:width] expect(media.file.meta['original']['height']).to eq fixture[:height] expect(media.file.meta['original']['aspect']).to eq fixture[:aspect] @@ -209,31 +193,19 @@ RSpec.describe MediaAttachment, paperclip_processing: true do end describe 'ogg with cover art' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('boop.ogg')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('boop.ogg')) } - it 'detects it as an audio file' do + it 'sets correct file metadata' do expect(media.type).to eq 'audio' - end - - it 'sets meta for the duration' do expect(media.file.meta['original']['duration']).to be_within(0.05).of(0.235102) - end - - it 'extracts thumbnail' do expect(media.thumbnail.present?).to be true - end - - it 'extracts colors from thumbnail' do expect(media.file.meta['colors']['background']).to eq '#3088d4' - end - - it 'gives the file a random name' do expect(media.file_file_name).to_not eq 'boop.ogg' end end describe 'mp3 with large cover art' do - let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('boop.mp3')) } + let(:media) { Fabricate(:media_attachment, file: attachment_fixture('boop.mp3')) } it 'detects it as an audio file' do expect(media.type).to eq 'audio' @@ -253,34 +225,36 @@ RSpec.describe MediaAttachment, paperclip_processing: true do end it 'is invalid without file' do - media = described_class.new(account: Fabricate(:account)) + media = described_class.new + expect(media.valid?).to be false + expect(media).to model_have_error_on_field(:file) end describe 'size limit validation' do it 'rejects video files that are too large' do stub_const 'MediaAttachment::IMAGE_LIMIT', 100.megabytes stub_const 'MediaAttachment::VIDEO_LIMIT', 1.kilobyte - expect { described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm')) }.to raise_error(ActiveRecord::RecordInvalid) + expect { Fabricate(:media_attachment, file: attachment_fixture('attachment.webm')) }.to raise_error(ActiveRecord::RecordInvalid) end it 'accepts video files that are small enough' do stub_const 'MediaAttachment::IMAGE_LIMIT', 1.kilobyte stub_const 'MediaAttachment::VIDEO_LIMIT', 100.megabytes - media = described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm')) + media = Fabricate(:media_attachment, file: attachment_fixture('attachment.webm')) expect(media.valid?).to be true end it 'rejects image files that are too large' do stub_const 'MediaAttachment::IMAGE_LIMIT', 1.kilobyte stub_const 'MediaAttachment::VIDEO_LIMIT', 100.megabytes - expect { described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) }.to raise_error(ActiveRecord::RecordInvalid) + expect { Fabricate(:media_attachment, file: attachment_fixture('attachment.jpg')) }.to raise_error(ActiveRecord::RecordInvalid) end it 'accepts image files that are small enough' do stub_const 'MediaAttachment::IMAGE_LIMIT', 100.megabytes stub_const 'MediaAttachment::VIDEO_LIMIT', 1.kilobyte - media = described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) + media = Fabricate(:media_attachment, file: attachment_fixture('attachment.jpg')) expect(media.valid?).to be true end end From cae84de47b2d775226d39389a27332730bd0a70a Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 7 Aug 2023 17:58:29 +0200 Subject: [PATCH 030/163] Fix interaction modal layout (#26368) --- .../features/interaction_modal/index.jsx | 47 ++++++------------- .../features/ui/components/sign_in_banner.jsx | 4 +- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index a8b86b7212..220719a94a 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -331,36 +331,24 @@ class InteractionModal extends React.PureComponent { } let signupButton; - let signUpOrSignInButton; if (sso_redirect) { - signUpOrSignInButton = ( - - + signupButton = ( + + - ) + ); + } else if (registrationsOpen) { + signupButton = ( + + + + ); } else { - if(registrationsOpen) { - signupButton = ( - - - - ); - } else { - signupButton = ( - - ); - } - - signUpOrSignInButton = ( - <> - - - - {signupButton} - + signupButton = ( + ); } @@ -371,13 +359,6 @@ class InteractionModal extends React.PureComponent {

{actionDescription}

-
-
-

- {signUpOrSignInButton} -
-
-

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 db85c6cbfb..d5f0c00dca 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx @@ -17,9 +17,9 @@ const SignInBanner = () => { let signupButton; - const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); - if (sso_redirect) { + if (sso_redirect) { return (

From 327fe2deaf33a15a42433ff192a5de33aaa810a6 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 7 Aug 2023 17:59:20 +0200 Subject: [PATCH 031/163] Fix list import concurrently creating lists of the same name (#26372) --- app/services/bulk_import_service.rb | 7 +++++-- spec/services/bulk_import_row_service_spec.rb | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/services/bulk_import_service.rb b/app/services/bulk_import_service.rb index 5c14adc499..591b112127 100644 --- a/app/services/bulk_import_service.rb +++ b/app/services/bulk_import_service.rb @@ -162,10 +162,9 @@ class BulkImportService < BaseService def import_lists! rows = @import.rows.to_a + included_lists = rows.map { |row| row.data['list_name'] }.uniq if @import.overwrite? - included_lists = rows.map { |row| row.data['list_name'] }.uniq - @account.owned_lists.where.not(title: included_lists).destroy_all # As list membership changes do not retroactively change timeline @@ -175,6 +174,10 @@ class BulkImportService < BaseService end end + included_lists.each do |title| + @account.owned_lists.find_or_create_by!(title: title) + end + Import::RowWorker.push_bulk(rows) do |row| [row.id] end diff --git a/spec/services/bulk_import_row_service_spec.rb b/spec/services/bulk_import_row_service_spec.rb index 5e09845b53..a77acc0732 100644 --- a/spec/services/bulk_import_row_service_spec.rb +++ b/spec/services/bulk_import_row_service_spec.rb @@ -161,6 +161,12 @@ RSpec.describe BulkImportRowService do end include_examples 'common behavior' + + it 'does not create a new list' do + account.follow!(target_account) + + expect { subject.call(import_row) }.to_not(change { List.where(title: 'my list').count }) + end end end end From 3cdfbd4e605f2c3a435e8e3a6736e0e88ed9fbc4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Aug 2023 02:57:18 -0400 Subject: [PATCH 032/163] Omniauth 2.0 version bump (#24209) --- .bundler-audit.yml | 3 --- Gemfile | 11 +++++++---- Gemfile.lock | 39 ++++++++++++++++++++++++--------------- 3 files changed, 31 insertions(+), 22 deletions(-) delete mode 100644 .bundler-audit.yml diff --git a/.bundler-audit.yml b/.bundler-audit.yml deleted file mode 100644 index f84ec80872..0000000000 --- a/.bundler-audit.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -ignore: - - CVE-2015-9284 # Mitigation following https://github.com/omniauth/omniauth/wiki/Resolving-CVE-2015-9284#mitigating-in-rails-applications diff --git a/Gemfile b/Gemfile index a1eba4efe0..27adec7a09 100644 --- a/Gemfile +++ b/Gemfile @@ -35,11 +35,14 @@ group :pam_authentication, optional: true do end gem 'net-ldap', '~> 0.18' -gem 'omniauth-cas', '~> 2.0' -gem 'omniauth-saml', '~> 1.10' + +# TODO: Point back at released omniauth-cas gem when PR merged +# https://github.com/dlindahl/omniauth-cas/pull/68 +gem 'omniauth-cas', github: 'stanhu/omniauth-cas', ref: '4211e6d05941b4a981f9a36b49ec166cecd0e271' +gem 'omniauth-saml', '~> 2.0' gem 'omniauth_openid_connect', '~> 0.6.1' -gem 'omniauth', '~> 1.9' -gem 'omniauth-rails_csrf_protection', '~> 0.1' +gem 'omniauth', '~> 2.0' +gem 'omniauth-rails_csrf_protection', '~> 1.0' gem 'color_diff', '~> 0.1' gem 'discard', '~> 1.2' diff --git a/Gemfile.lock b/Gemfile.lock index a44538d16f..46a10e5acc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,6 +26,16 @@ GIT rails-settings-cached (0.6.6) rails (>= 4.2.0) +GIT + remote: https://github.com/stanhu/omniauth-cas.git + revision: 4211e6d05941b4a981f9a36b49ec166cecd0e271 + ref: 4211e6d05941b4a981f9a36b49ec166cecd0e271 + specs: + omniauth-cas (2.0.0) + addressable (~> 2.3) + nokogiri (~> 1.5) + omniauth (>= 1.2, < 3) + GEM remote: https://rubygems.org/ specs: @@ -472,19 +482,16 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.15.0) - omniauth (1.9.2) + omniauth (2.1.1) hashie (>= 3.4.6) - rack (>= 1.6.2, < 3) - omniauth-cas (2.0.0) - addressable (~> 2.3) - nokogiri (~> 1.5) - omniauth (~> 1.2) - omniauth-rails_csrf_protection (0.1.2) + rack (>= 2.2.3) + rack-protection + omniauth-rails_csrf_protection (1.0.1) actionpack (>= 4.2) - omniauth (>= 1.3.1) - omniauth-saml (1.10.3) - omniauth (~> 1.3, >= 1.3.2) - ruby-saml (~> 1.9) + omniauth (~> 2.0) + omniauth-saml (2.1.0) + omniauth (~> 2.0) + ruby-saml (~> 1.12) omniauth_openid_connect (0.6.1) omniauth (>= 1.9, < 3) openid_connect (~> 1.1) @@ -542,6 +549,8 @@ GEM httpclient json-jwt (>= 1.11.0) rack (>= 2.1.0) + rack-protection (3.0.5) + rack rack-proxy (0.7.6) rack rack-test (2.1.0) @@ -871,10 +880,10 @@ DEPENDENCIES nokogiri (~> 1.15) nsa! oj (~> 3.14) - omniauth (~> 1.9) - omniauth-cas (~> 2.0) - omniauth-rails_csrf_protection (~> 0.1) - omniauth-saml (~> 1.10) + omniauth (~> 2.0) + omniauth-cas! + omniauth-rails_csrf_protection (~> 1.0) + omniauth-saml (~> 2.0) omniauth_openid_connect (~> 0.6.1) ox (~> 2.14) parslet From dbef3050e05919a3a63ea177234fb3f6dc6c6ae9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 8 Aug 2023 09:09:14 +0200 Subject: [PATCH 033/163] Change account search tokenizer and queries (#26378) --- app/chewy/accounts_index.rb | 2 +- app/services/account_search_service.rb | 231 +++++++++++++++---------- 2 files changed, 144 insertions(+), 89 deletions(-) diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb index abde8e92f1..61f5277d2b 100644 --- a/app/chewy/accounts_index.rb +++ b/app/chewy/accounts_index.rb @@ -33,7 +33,7 @@ class AccountsIndex < Chewy::Index }, verbatim: { - tokenizer: 'whitespace', + tokenizer: 'standard', filter: %w(lowercase asciifolding cjk_width), }, diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index b732fbcec3..a15b691211 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -8,6 +8,143 @@ class AccountSearchService < BaseService # Min. number of characters to look for non-exact matches MIN_QUERY_LENGTH = 5 + class QueryBuilder + def initialize(query, account, options = {}) + @query = query + @account = account + @options = options + end + + def build + AccountsIndex.query( + bool: { + must: { + function_score: { + query: { + bool: { + must: must_clauses, + }, + }, + + functions: [ + reputation_score_function, + followers_score_function, + time_distance_function, + ], + }, + }, + + should: should_clauses, + } + ) + end + + private + + def must_clauses + if @account && @options[:following] + [core_query, only_following_query] + else + [core_query] + end + end + + def should_clauses + if @account && !@options[:following] + [boost_following_query] + else + [] + end + end + + # This function limits results to only the accounts the user is following + def only_following_query + { + terms: { + id: following_ids, + }, + } + end + + # This function promotes accounts the user is following + def boost_following_query + { + terms: { + id: following_ids, + boost: 100, + }, + } + end + + # This function deranks accounts that follow more people than follow them + def reputation_score_function + { + script_score: { + script: { + source: "(Math.max(doc['followers_count'].value, 0) + 0.0) / (Math.max(doc['followers_count'].value, 0) + Math.max(doc['following_count'].value, 0) + 1)", + }, + }, + } + end + + # This function promotes accounts that have more followers + def followers_score_function + { + script_score: { + script: { + source: "(Math.max(doc['followers_count'].value, 0) / (Math.max(doc['followers_count'].value, 0) + 1))", + }, + }, + } + end + + # This function deranks accounts that haven't posted in a long time + def time_distance_function + { + gauss: { + last_status_at: { + scale: '30d', + offset: '30d', + decay: 0.3, + }, + }, + } + end + + def following_ids + @following_ids ||= @account.active_relationships.pluck(:target_account_id) + [@account.id] + end + end + + class AutocompleteQueryBuilder < QueryBuilder + private + + def core_query + { + multi_match: { + query: @query, + type: 'bool_prefix', + fields: %w(username username.* display_name display_name.*), + }, + } + end + end + + class FullQueryBuilder < QueryBuilder + private + + def core_query + { + multi_match: { + query: @query, + type: 'most_fields', + fields: %w(username^2 display_name^2 text text.*), + operator: 'and', + }, + } + end + end + def call(query, account = nil, options = {}) @query = query&.strip&.gsub(/\A@/, '') @limit = options[:limit].to_i @@ -71,27 +208,15 @@ class AccountSearchService < BaseService end def from_elasticsearch - must_clauses = must_clause - should_clauses = should_clause - - if account - return [] if options[:following] && following_ids.empty? - - if options[:following] - must_clauses << { terms: { id: following_ids } } - elsif following_ids.any? - should_clauses << { terms: { id: following_ids, boost: 100 } } + query_builder = begin + if options[:use_searchable_text] + FullQueryBuilder.new(terms_for_query, account, options.slice(:following)) + else + AutocompleteQueryBuilder.new(terms_for_query, account, options.slice(:following)) end end - query = { bool: { must: must_clauses, should: should_clauses } } - functions = [reputation_score_function, followers_score_function, time_distance_function] - - records = AccountsIndex.query(function_score: { query: query, functions: functions }) - .limit(limit_for_non_exact_results) - .offset(offset) - .objects - .compact + records = query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat) @@ -100,76 +225,6 @@ class AccountSearchService < BaseService nil end - def reputation_score_function - { - script_score: { - script: { - source: "(Math.max(doc['followers_count'].value, 0) + 0.0) / (Math.max(doc['followers_count'].value, 0) + Math.max(doc['following_count'].value, 0) + 1)", - }, - }, - } - end - - def followers_score_function - { - script_score: { - script: { - source: "Math.log10(Math.max(doc['followers_count'].value, 0) + 2)", - }, - }, - } - end - - def time_distance_function - { - gauss: { - last_status_at: { - scale: '30d', - offset: '30d', - decay: 0.3, - }, - }, - } - end - - def must_clause - if options[:start_with_hashtag] - fields = %w(text text.*) - else - fields = %w(username username.* display_name display_name.*) - fields << 'text' << 'text.*' if options[:use_searchable_text] - end - - [ - { - multi_match: { - query: terms_for_query, - fields: fields, - type: 'best_fields', - operator: 'or', - }, - }, - ] - end - - def should_clause - [ - { - multi_match: { - query: terms_for_query, - fields: %w(username username.* display_name display_name.*), - type: 'best_fields', - operator: 'and', - boost: 10, - }, - }, - ] - end - - def following_ids - @following_ids ||= account.active_relationships.pluck(:target_account_id) + [account.id] - end - def limit_for_non_exact_results return 0 if @account.nil? && query.size < MIN_QUERY_LENGTH From 5b7c9255732cc99ec5bed1aecfedd67079014081 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 8 Aug 2023 09:09:58 +0200 Subject: [PATCH 034/163] Fix adding column with default value taking longer on Postgres >= 11 (#26375) --- lib/mastodon/migration_helpers.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb index 5a252b3512..4a43f67c27 100644 --- a/lib/mastodon/migration_helpers.rb +++ b/lib/mastodon/migration_helpers.rb @@ -195,7 +195,14 @@ module Mastodon def supports_drop_index_concurrently? version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i - version >= 90200 + version >= 90_200 + end + + # Only available on Postgresql >= 11 + def supports_add_column_with_default? + version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i + + version >= 11_000 end # Adds a foreign key with only minimal locking on the tables involved. @@ -414,6 +421,11 @@ module Mastodon # This method can also take a block which is passed directly to the # `update_column_in_batches` method. def add_column_with_default(table, column, type, default:, limit: nil, allow_null: false, &block) + if supports_add_column_with_default? + add_column(table, column, type, default: default, limit: limit, null: allow_null) + return + end + if transaction_open? raise 'add_column_with_default can not be run inside a transaction, ' \ 'you can disable transactions by calling disable_ddl_transaction! ' \ From 64e9f2e65a955db7371698f697b25902b1b00b4f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Aug 2023 11:41:53 +0200 Subject: [PATCH 035/163] Fix `preview_cards_statuses_pkey` not being reindexed concurrently (#26384) --- ...20230803082451_add_unique_index_on_preview_cards_statuses.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb index 936d7840eb..c35ad80028 100644 --- a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb +++ b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb @@ -18,7 +18,7 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1] def deduplicate_and_reindex! deduplicate_preview_cards! - safety_assured { execute 'REINDEX INDEX preview_cards_statuses_pkey' } + safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } rescue ActiveRecord::RecordNotUnique retry end From dd4eab653657eb524289628591d12d020220813b Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Aug 2023 13:59:40 +0200 Subject: [PATCH 036/163] Change `DB_REPLICA_*` environment variables to `REPLICA_DB_*` (#26386) --- app/models/application_record.rb | 2 +- config/database.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/models/application_record.rb b/app/models/application_record.rb index c2de8fb2af..567542f91d 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -5,7 +5,7 @@ class ApplicationRecord < ActiveRecord::Base include Remotable - connects_to database: { writing: :primary, reading: ENV['DB_REPLICA_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary } + connects_to database: { writing: :primary, reading: ENV['REPLICA_DB_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary } class << self def update_index(_type_name, *_args, &_block) diff --git a/config/database.yml b/config/database.yml index 0907193feb..b995f23178 100644 --- a/config/database.yml +++ b/config/database.yml @@ -55,10 +55,10 @@ production: prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'true' %> replica: <<: *default - database: <%= ENV['DB_REPLICA_NAME'] ||ENV['DB_NAME'] || 'mastodon_production' %> - username: <%= ENV['DB_REPLICA_USER'] ||ENV['DB_USER'] || 'mastodon' %> - password: <%= (ENV['DB_REPLICA_PASS'] || ENV['DB_PASS'] || '').to_json %> - host: <%= ENV['DB_REPLICA_HOST'] ||ENV['DB_HOST'] || 'localhost' %> - port: <%= ENV['DB_REPLICA_PORT'] ||ENV['DB_PORT'] || 5432 %> + database: <%= ENV['REPLICA_DB_NAME'] ||ENV['DB_NAME'] || 'mastodon_production' %> + username: <%= ENV['REPLICA_DB_USER'] ||ENV['DB_USER'] || 'mastodon' %> + password: <%= (ENV['REPLICA_DB_PASS'] || ENV['DB_PASS'] || '').to_json %> + host: <%= ENV['REPLICA_DB_HOST'] ||ENV['DB_HOST'] || 'localhost' %> + port: <%= ENV['REPLICA_DB_PORT'] ||ENV['DB_PORT'] || 5432 %> prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'true' %> replica: true From 97bbe8f24e5710b11f64ad9fcc45009685f61d63 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Aug 2023 15:41:38 +0200 Subject: [PATCH 037/163] Fix Content Security Policy sometimes unnecessarily allowing hCaptcha scripts (#26388) --- app/controllers/concerns/captcha_concern.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/captcha_concern.rb b/app/controllers/concerns/captcha_concern.rb index 576304d1ca..170c8f5e03 100644 --- a/app/controllers/concerns/captcha_concern.rb +++ b/app/controllers/concerns/captcha_concern.rb @@ -42,7 +42,7 @@ module CaptchaConcern end def extend_csp_for_captcha! - policy = request.content_security_policy + policy = request.content_security_policy&.clone return unless captcha_required? && policy.present? @@ -54,6 +54,8 @@ module CaptchaConcern policy.send(directive, *values) end + + request.content_security_policy = policy end def render_captcha From a504ee43c590bc2b721df4432b7836bf2b8e899b Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Aug 2023 16:12:12 +0200 Subject: [PATCH 038/163] Prepare v4.2.0-beta1 (#26339) --- CHANGELOG.md | 234 ++++++++++++++++++++++++++++++++++++++++ lib/mastodon/version.rb | 6 +- 2 files changed, 237 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe1ac3803..cfcc188362 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,240 @@ All notable changes to this project will be documented in this file. +## [4.2.0] - UNRELEASED + +The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki). + +### Added + +- **Add role badges to the web interface** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25649), [Gargron](https://github.com/mastodon/mastodon/pull/26281)) +- **Add ability to pick domains to forward reports to using the `forward_to_domains` parameter in `POST /api/v1/reports`** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25866)) + The `forward_to_domains` REST API parameter is a list of strings. If it is empty or omitted, the previous behavior is maintained. + The `forward` parameter still needs to be set for `forward_to_domains` to be taken into account. + The forwarded-to domains can only include that of the original author and people being replied to. +- **Add forwarding of reported replies to servers being replied to** ([Gargron](https://github.com/mastodon/mastodon/pull/25341), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26189)) +- Add direct link to the Single-Sign On provider if there is only one sign up method available ([CSDUMMI](https://github.com/mastodon/mastodon/pull/26083), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26368)) +- **Add webhook templating** ([Gargron](https://github.com/mastodon/mastodon/pull/23289)) +- **Add webhooks for local `status.created`, `status.updated`, `account.updated` and `report.updated`** ([VyrCossont](https://github.com/mastodon/mastodon/pull/24133), [VyrCossont](https://github.com/mastodon/mastodon/pull/24243), [VyrCossont](https://github.com/mastodon/mastodon/pull/24211)) +- **Add exclusive lists** ([dariusk](https://github.com/mastodon/mastodon/pull/22048), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25324)) +- **Add a confirmation screen when suspending a domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25144), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25603)) +- **Add support for importing lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25203), [mgmn](https://github.com/mastodon/mastodon/pull/26120), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26372)) +- **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388)) +- **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807)) +- **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561)) +- Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443)) +- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384)) +- Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300)) +- Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155)) +- Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149)) +- Add stricter protocol fields validation for accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25937)) +- Add support for Azure blob storage ([mistydemeo](https://github.com/mastodon/mastodon/pull/23607), [mistydemeo](https://github.com/mastodon/mastodon/pull/26080)) +- Add toast with option to open post after publishing in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25564), [Signez](https://github.com/mastodon/mastodon/pull/25919)) +- Add canonical link tags in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25715)) +- Add button to see results for polls in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25726)) +- Add at-symbol prepended to mention span title ([forsamori](https://github.com/mastodon/mastodon/pull/25684)) +- Add users index on `unconfirmed_email` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25672), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25702)) +- Add superapp index on `oauth_applications` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25670)) +- Add index to backups on `user_id` column ([mjankowski](https://github.com/mastodon/mastodon/pull/25647)) +- Add onboarding prompt when home feed too slow in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25267), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25556), [Gargron](https://github.com/mastodon/mastodon/pull/25579), [renchap](https://github.com/mastodon/mastodon/pull/25580), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25581), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25617), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25917)) +- Add `POST /api/v1/conversations/:id/unread` API endpoint to mark a conversation as unread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25509)) +- Add `translate="no"` to outgoing mentions and links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25524)) +- Add unsubscribe link and headers to e-mails ([Gargron](https://github.com/mastodon/mastodon/pull/25378), [c960657](https://github.com/mastodon/mastodon/pull/26085)) +- Add logging of websocket send errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25280)) +- Add time zone preference ([Gargron](https://github.com/mastodon/mastodon/pull/25342), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26025)) +- Add `legal` as report category ([Gargron](https://github.com/mastodon/mastodon/pull/23941), [renchap](https://github.com/mastodon/mastodon/pull/25400)) +- Add `data-nosnippet` so Google doesn't use trending posts in snippets for `/` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25279)) +- Add card with who invited you to join when displaying rules on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23475)) +- Add missing primary keys to `accounts_tags` and `statuses_tags` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25210)) +- Add support for custom sign-up URLs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25014), [renchap](https://github.com/mastodon/mastodon/pull/25108), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25190), [mgmn](https://github.com/mastodon/mastodon/pull/25531)) + This is set using `SSO_ACCOUNT_SIGN_UP` and reflected in the REST API by adding `registrations.sign_up_url` to the `/api/v2/instance` endpoint. +- Add polling and automatic redirection to `/start` on email confirmation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25013)) +- Add ability to block sign-ups from IP using the CLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24870)) +- Add ALT badges to media that has alternative text in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24782), [c960657](https://github.com/mastodon/mastodon/pull/26166) +- Add ability to include accounts with pending follow requests in lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19727), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24810)) +- Add trend management to admin API ([rrgeorge](https://github.com/mastodon/mastodon/pull/24257)) + - `POST /api/v1/admin/trends/statuses/:id/approve` + - `POST /api/v1/admin/trends/statuses/:id/reject` + - `POST /api/v1/admin/trends/links/:id/approve` + - `POST /api/v1/admin/trends/links/:id/reject` + - `POST /api/v1/admin/trends/tags/:id/approve` + - `POST /api/v1/admin/trends/tags/:id/reject` + - `GET /api/v1/admin/trends/links/publishers` + - `POST /api/v1/admin/trends/links/publishers/:id/approve` + - `POST /api/v1/admin/trends/links/publishers/:id/reject` +- Add user handle to notification mail recipient address ([HeitorMC](https://github.com/mastodon/mastodon/pull/24240)) +- Add progress indicator to sign-up flow ([Gargron](https://github.com/mastodon/mastodon/pull/24545)) +- Add client-side validation for taken username in sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24546)) +- Add `--approve` option to `tootctl accounts create` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24533)) +- Add “In Memoriam” banner back to profiles ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23591), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23614)) + This adds the `memorial` attribute to the `Account` REST API entity. +- Add colour to follow button when hashtag is being followed ([c960657](https://github.com/mastodon/mastodon/pull/24361)) +- Add further explanations to the profile link verification instructions ([drzax](https://github.com/mastodon/mastodon/pull/19723)) +- Add a link to Identity provider's account settings from the account settings ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24628)) +- Add support for streaming server to connect to postgres with self-signed certs through the `sslmode` URL parameter ([ramuuns](https://github.com/mastodon/mastodon/pull/21431)) +- Add support for specifying S3 storage classes through the `S3_STORAGE_CLASS` environment variable ([hyl](https://github.com/mastodon/mastodon/pull/22480)) +- Add support for incoming rich text ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23913)) +- Add support for Ruby 3.2 ([tenderlove](https://github.com/mastodon/mastodon/pull/22928), [casperisfine](https://github.com/mastodon/mastodon/pull/24142), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24202)) +- Add API parameter to safeguard unexpected mentions in new posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18350)) + +### Changed + +- **Change reblogs to be excluded from "Posts and replies" tab in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26302)) +- **Change interaction modal in web interface** ([Gargron, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26075), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26268), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26267)) +- **Change design of link previews in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26136), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26151), [Gargron](https://github.com/mastodon/mastodon/pull/26153), [Gargron](https://github.com/mastodon/mastodon/pull/26250), [Gargron](https://github.com/mastodon/mastodon/pull/26287), [Gargron](https://github.com/mastodon/mastodon/pull/26286), [c960657](https://github.com/mastodon/mastodon/pull/26184)) +- **Change "direct message" nomenclature to "private mention" in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24248)) +- **Change translation feature to cover Content Warnings, poll options and media descriptions** ([c960657](https://github.com/mastodon/mastodon/pull/24175), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25251), [c960657](https://github.com/mastodon/mastodon/pull/26168)) +- **Change account search to match by text when opted-in** ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25599), [Gargron](https://github.com/mastodon/mastodon/pull/26378)) +- **Change import feature to be clearer, less error-prone and more reliable** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21054), [mgmn](https://github.com/mastodon/mastodon/pull/24874)) +- **Change local and federated timelines to be in a single “Live feeds” column** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25641), [Gargron](https://github.com/mastodon/mastodon/pull/25683), [mgmn](https://github.com/mastodon/mastodon/pull/25694), [Plastikmensch](https://github.com/mastodon/mastodon/pull/26247)) +- **Change user archive export to be faster and more reliable, and export `.zip` archives instead of `.tar.gz` ones** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23360), [TheEssem](https://github.com/mastodon/mastodon/pull/25034)) +- **Change `mastodon-streaming` systemd unit files to be templated** ([e-nomem](https://github.com/mastodon/mastodon/pull/24751)) +- **Change `statsd` integration to disable sidekiq metrics by default** ([mjankowski](https://github.com/mastodon/mastodon/pull/25265), [mjankowski](https://github.com/mastodon/mastodon/pull/25336), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26310)) + This deprecates `statsd` support and disables the sidekiq integration unless `STATSD_SIDEKIQ` is set to `true`. + This is because the `nsa` gem is unmaintained, and its sidekiq integration is known to add very significant overhead. + Later versions of Mastodon will have other ways to get the same metrics. +- **Change replica support to native Rails adapter** ([krainboltgreene](https://github.com/mastodon/mastodon/pull/25693), [Gargron](https://github.com/mastodon/mastodon/pull/25849), [Gargron](https://github.com/mastodon/mastodon/pull/25874), [Gargron](https://github.com/mastodon/mastodon/pull/25851), [Gargron](https://github.com/mastodon/mastodon/pull/25977), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26074), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26326), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26386)) + This is a breaking change, dropping `makara` support, and requiring you to update your database configuration if you are using replicas. + To tell Mastodon to use a read replica, you can either set the `REPLICA_DB_NAME` environment variable (along with `REPLICA_DB_USER`, `REPLICA_DB_PASS`, `REPLICA_DB_HOST`, and `REPLICA_DB_PORT`, if they differ from the primary database), or the `REPLICA_DATABASE_URL` environment variable if your configuration is based on `DATABASE_URL`. +- Change header of hashtag timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26362)) +- Change streaming `/metrics` to include additional metrics ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26299)) +- Change indexing frequency from 5 minutes to 1 minute, add locks to schedulers ([Gargron](https://github.com/mastodon/mastodon/pull/26304)) +- Change column link to add a better keyboard focus indicator ([teeerevor](https://github.com/mastodon/mastodon/pull/26278)) +- Change poll form element colors to fit with the rest of the ui ([teeerevor](https://github.com/mastodon/mastodon/pull/26139), [teeerevor](https://github.com/mastodon/mastodon/pull/26162), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26164)) +- Change 'favourite' to 'favorite' for American English ([marekr](https://github.com/mastodon/mastodon/pull/24667), [gunchleoc](https://github.com/mastodon/mastodon/pull/26009), [nabijaczleweli](https://github.com/mastodon/mastodon/pull/26109)) +- Change ActivityStreams representation of suspended accounts to not use a blank `name` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25276)) +- Change focus UI for keyboard only input ([teeerevor](https://github.com/mastodon/mastodon/pull/25935), [Gargron](https://github.com/mastodon/mastodon/pull/26125)) +- Change thread view to scroll to the selected post rather than the post being replied to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24685)) +- Change links in multi-column mode so tabs are open in single-column mode ([Signez](https://github.com/mastodon/mastodon/pull/25893), [Signez](https://github.com/mastodon/mastodon/pull/26070), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25973)) +- Change searching with `#` to include account index ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25638)) +- Change label and design of sensitive and unavailable media in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25712), [Gargron](https://github.com/mastodon/mastodon/pull/26135), [Gargron](https://github.com/mastodon/mastodon/pull/26330)) +- Change button colors to increase hover/focus contrast and consistency ([teeerevor](https://github.com/mastodon/mastodon/pull/25677), [Gargron](https://github.com/mastodon/mastodon/pull/25679)) +- Change dropdown icon above compose form from ellipsis to bars in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25661)) +- Change header backgrounds to use fewer different colors in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25577)) +- Change files to be deleted in batches instead of one-by-one ([Gargron](https://github.com/mastodon/mastodon/pull/23302), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25586), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25587)) +- Change emoji picker icon ([iparr](https://github.com/mastodon/mastodon/pull/25479)) +- Change edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/25413)) +- Change "bot" label to "automated" ([Gargron](https://github.com/mastodon/mastodon/pull/25356)) +- Change design of dropdowns in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25107)) +- Change wording of “Content cache retention period” setting to highlight destructive implications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23261)) +- Change autolinking to allow carets in URL search params ([renchap](https://github.com/mastodon/mastodon/pull/25216)) +- Change share action from being in action bar to being in dropdown in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25105)) +- Change remote report processing to accept reports with long comments, but truncate them ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25028)) +- Change sessions to be ordered from most-recent to least-recently updated ([frankieroberto](https://github.com/mastodon/mastodon/pull/25005)) +- Change vacuum scheduler to also delete expired tokens and unused application records ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24868), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24871)) +- Change "Sign in" to "Login" ([Gargron](https://github.com/mastodon/mastodon/pull/24942)) +- Change domain suspensions to also be checked before trying to fetch unknown remote resources ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24535)) +- Change media components to use aspect-ratio rather than compute height themselves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24686), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24943)) +- Change logo version in header based on screen size in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24707)) +- Change label from "For you" to "People" on explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24706)) +- Change logged-out WebUI HTML pages to be cached for a few seconds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24708)) +- Change unauthenticated responses to be cached in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/24348), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24665)) +- Change HTTP caching logic ([Gargron](https://github.com/mastodon/mastodon/pull/24347), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24604)) +- Change hashtags and mentions in bios to open in-app in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24643)) +- Change styling of the recommended accounts to allow bio to be more visible ([chike00](https://github.com/mastodon/mastodon/pull/24480)) +- Change account search in moderation interface to allow searching by username including the leading `@` ([HeitorMC](https://github.com/mastodon/mastodon/pull/24242)) +- Change all components to use the same error page in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24512)) +- Change search pop-out in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24305)) +- Change user settings to be stored in a more optimal way ([Gargron](https://github.com/mastodon/mastodon/pull/23630), [c960657](https://github.com/mastodon/mastodon/pull/24321), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24558), [Gargron](https://github.com/mastodon/mastodon/pull/24761), [Gargron](https://github.com/mastodon/mastodon/pull/24783), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25508), [jsgoldstein](https://github.com/mastodon/mastodon/pull/25340)) +- Change media upload limits and remove client-side resizing ([Gargron](https://github.com/mastodon/mastodon/pull/23726)) +- Change design of account rows in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24247), [Gargron](https://github.com/mastodon/mastodon/pull/24343), [Gargron](https://github.com/mastodon/mastodon/pull/24956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25131)) +- Change log-out to use Single Logout when using external log-in through OIDC ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24020)) +- Change sidekiq-bulk's batch size from 10,000 to 1,000 jobs in one Redis call ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24034)) +- Change translation to only be offered for supported languages ([c960657](https://github.com/mastodon/mastodon/pull/23879), [c960657](https://github.com/mastodon/mastodon/pull/24037)) + This adds the `/api/v1/instance/translation_languages` REST API endpoint that returns an object with the supported translation language pairs in the form: + ```json + { + "fr": ["en", "de"] + } + ``` + (where `fr` is a supported source language and `en` and `de` or supported output language when translating a `fr` string) +- Change compose form checkbox to native input with `appearance: none` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22949)) +- Change posts' clickable area to be larger ([c960657](https://github.com/mastodon/mastodon/pull/23621)) +- Change `followed_by` link to `location=all` if account is local on /admin/accounts/:id page ([tribela](https://github.com/mastodon/mastodon/pull/23467)) + +### Removed + +- **Remove support for Node.js 14** ([renchap](https://github.com/mastodon/mastodon/pull/25198)) +- **Remove support for Ruby 2.7** ([nschonni](https://github.com/mastodon/mastodon/pull/24237)) +- **Remove clustering from streaming API** ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24655)) +- **Remove anonymous access to the streaming API** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23989)) +- Remove 16:9 cropping from web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26132)) +- Remove back button from bookmarks, favourites and lists screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26126)) +- Remove display name input from sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24704)) +- Remove `tai` locale ([c960657](https://github.com/mastodon/mastodon/pull/23880)) +- Remove empty Kushubian (csb) local files ([nschonni](https://github.com/mastodon/mastodon/pull/24151)) +- Remove `Permissions-Policy` header from all responses ([Gargron](https://github.com/mastodon/mastodon/pull/24124)) + +### Fixed + +- **Fix filters not being applying in the explore page** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25887)) +- **Fix being unable to load past a full page of filtered posts in Home timeline** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24930)) +- **Fix log-in flow when involving both OAuth and external authentication** ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24073)) +- **Fix broken links in account gallery** ([c960657](https://github.com/mastodon/mastodon/pull/24218)) +- Fix adding column with default value taking longer on Postgres >= 11 ([Gargron](https://github.com/mastodon/mastodon/pull/26375)) +- Fix light theme select option for hashtags ([teeerevor](https://github.com/mastodon/mastodon/pull/26311)) +- Fix AVIF attachments ([c960657](https://github.com/mastodon/mastodon/pull/26264)) +- Fix incorrect URL normalization when fetching remote resources ([c960657](https://github.com/mastodon/mastodon/pull/26219), [c960657](https://github.com/mastodon/mastodon/pull/26285)) +- Fix being unable to filter posts for individual Chinese languages ([gunchleoc](https://github.com/mastodon/mastodon/pull/26066)) +- Fix preview card sometimes linking to 4xx error pages ([c960657](https://github.com/mastodon/mastodon/pull/26200)) +- Fix emoji picker button scrolling with textarea content in single-column view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25304)) +- Fix missing border on error screen in light theme in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26152)) +- Fix UI overlap with the loupe icon in the Explore Tab ([gol-cha](https://github.com/mastodon/mastodon/pull/26113)) +- Fix unexpected redirection to `/explore` after sign-in ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26143)) +- Fix `/api/v1/statuses/:id/unfavourite` and `/api/v1/statuses/:id/unreblog` returning non-updated counts ([c960657](https://github.com/mastodon/mastodon/pull/24365)) +- Fix clicking the “Back” button sometimes leading out of Mastodon ([c960657](https://github.com/mastodon/mastodon/pull/23953), [CSFlorin](https://github.com/mastodon/mastodon/pull/24835), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/24867), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25281)) +- Fix processing of `null` ActivityPub activities ([tribela](https://github.com/mastodon/mastodon/pull/26021)) +- Fix hashtag posts not being removed from home feed on hashtag unfollow ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26028)) +- Fix for "follows you" indicator in light web UI not readable ([vmstan](https://github.com/mastodon/mastodon/pull/25993)) +- Fix incorrect line break between icon and number of reposts & favourites ([edent](https://github.com/mastodon/mastodon/pull/26004)) +- Fix sounds not being loaded from assets host ([Signez](https://github.com/mastodon/mastodon/pull/25931)) +- Fix buttons showing inconsistent styles ([teeerevor](https://github.com/mastodon/mastodon/pull/25903), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26341)) +- Fix trend calculation working on too many items at a time ([Gargron](https://github.com/mastodon/mastodon/pull/25835)) +- Fix dropdowns being disabled for logged out users in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25964)) +- Fix explore page being inaccessible when opted-out of trends in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25716)) +- Fix re-activated accounts possibly getting deleted by `AccountDeletionWorker` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25711)) +- Fix `/api/v2/search` not working with following query param ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25681)) +- Fix inefficient query when requesting a new confirmation email from a logged-in account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25669)) +- Fix unnecessary concurrent calls to `/api/*/instance` in web UI ([mgmn](https://github.com/mastodon/mastodon/pull/25663)) +- Fix resolving local URL for remote content ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25637)) +- Fix search not being easily findable on smaller screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25576), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25631)) +- Fix j/k keyboard shortcuts on some status lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25554)) +- Fix missing validation on `default_privacy` setting ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25513)) +- Fix incorrect pagination headers in `/api/v2/admin/accounts` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25477)) +- Fix non-interactive upload container being given a `button` role and tabIndex ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25462)) +- Fix always redirecting to onboarding in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25396)) +- Fix inconsistent use of middle dot (·) instead of bullet (•) to separate items ([j-f1](https://github.com/mastodon/mastodon/pull/25248)) +- Fix spacing of middle dots in the detailed status meta section ([j-f1](https://github.com/mastodon/mastodon/pull/25247)) +- Fix prev/next buttons color in media viewer ([renchap](https://github.com/mastodon/mastodon/pull/25231)) +- Fix email addresses not being properly updated in `tootctl maintenance fix-duplicates` ([mjankowski](https://github.com/mastodon/mastodon/pull/25118)) +- Fix unicode surrogate pairs sometimes being broken in page title ([eai04191](https://github.com/mastodon/mastodon/pull/25148)) +- Fix various inefficient queries against account domains ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25126)) +- Fix video player offering to expand in a lightbox when it's in an `iframe` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25067)) +- Fix post embed previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25071)) +- Fix inadequate error handling in several API controllers when given invalid parameters ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24947), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24958), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25063), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25072), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25386), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25595)) +- Fix uncaught `ActiveRecord::StatementInvalid` in Mastodon::IpBlocksCLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24861)) +- Fix various edge cases with local moves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24812)) +- Fix `tootctl accounts cull` crashing when encountering a domain resolving to a private address ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23378)) +- Fix `tootctl accounts approve --number N` not aproving the N earliest registrations ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24605)) +- Fix being unable to clear media description when editing posts ([c960657](https://github.com/mastodon/mastodon/pull/24720)) +- Fix unavailable translations not falling back to English ([mgmn](https://github.com/mastodon/mastodon/pull/24727)) +- Fix anonymous visitors getting a session cookie on first visit ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24584), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24650), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24664)) +- Fix cutting off first letter of hashtag links sometimes in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24623)) +- Fix crash in `tootctl accounts create --reattach --force` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24557), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24680)) +- Fix characters being emojified even when using Variation Selector 15 (text) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20949), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24615)) +- Fix uncaught ActiveRecord::StatementInvalid exception in `Mastodon::AccountsCLI#approve` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24590)) +- Fix email confirmation skip option in `tootctl accounts modify USERNAME --email EMAIL --confirm` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24578)) +- Fix tooltip for dates without time ([c960657](https://github.com/mastodon/mastodon/pull/24244)) +- Fix missing loading spinner and loading more on scroll in Private Mentions column ([c960657](https://github.com/mastodon/mastodon/pull/24446)) +- Fix account header image missing from `/settings/profile` on narrow screens ([c960657](https://github.com/mastodon/mastodon/pull/24433)) +- Fix height of announcements not being updated when using reduced animations ([c960657](https://github.com/mastodon/mastodon/pull/24354)) +- Fix inconsistent radius in advanced interface drawer ([thislight](https://github.com/mastodon/mastodon/pull/24407)) +- Fix loading more trending posts on scroll in the advanced interface ([OmmyZhang](https://github.com/mastodon/mastodon/pull/24314)) +- Fix poll ending notification for edited polls ([c960657](https://github.com/mastodon/mastodon/pull/24311)) +- Fix max width of media in `/about` and `/privacy-policy` ([mgmn](https://github.com/mastodon/mastodon/pull/24180)) +- Fix streaming API not being usable without `DATABASE_URL` ([Gargron](https://github.com/mastodon/mastodon/pull/23960)) +- Fix external authentication not running onboarding code for new users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23458)) + ## [4.1.6] - 2023-07-31 ### Fixed diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 03e8eb1435..2b2a5d1180 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,15 +9,15 @@ module Mastodon end def minor - 1 + 2 end def patch - 6 + 0 end def flags - ENV.fetch('MASTODON_VERSION_FLAGS', '') + ENV.fetch('MASTODON_VERSION_FLAGS', '-beta1') end def suffix From ba9ea873c8e9f53221daea6f0c8d05340c9f6ef9 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Aug 2023 09:39:36 +0200 Subject: [PATCH 039/163] Fix blocking subdomains of an already-blocked domain (#26392) --- .../admin/domain_blocks_controller.rb | 2 +- spec/features/admin/domain_blocks_spec.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index b9691c5a3a..96c31a38fd 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -40,7 +40,7 @@ module Admin end # Allow transparently upgrading a domain block - if existing_domain_block.present? + if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain.strip) @domain_block = existing_domain_block @domain_block.assign_attributes(resource_params) end diff --git a/spec/features/admin/domain_blocks_spec.rb b/spec/features/admin/domain_blocks_spec.rb index c77d604ebd..4672c1e1a9 100644 --- a/spec/features/admin/domain_blocks_spec.rb +++ b/spec/features/admin/domain_blocks_spec.rb @@ -57,6 +57,30 @@ describe 'blocking domains through the moderation interface' do end end + context 'when suspending a subdomain of an already-silenced domain' do + it 'presents a confirmation screen before suspending the domain' do + domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence') + + visit new_admin_domain_block_path + + 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') + + # 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') + + expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist + + # And leaves the previous block alone + expect(domain_block.reload.severity).to eq 'silence' + expect(domain_block.reload.domain).to eq 'example.com' + end + end + context 'when editing a domain block' do it 'presents a confirmation screen before suspending the domain' do domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence') From 5ebcd23979a89ce4d7ec1b5a84cea2c34ead1549 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 9 Aug 2023 05:26:42 -0400 Subject: [PATCH 040/163] Use migration classes in migrations where current definition conflicts with older (#26390) --- ...4407_add_shortcode_to_media_attachments.rb | 9 +++- ...304202101_add_type_to_media_attachments.rb | 17 +++++- ...024224956_migrate_account_conversations.rb | 52 +++++++++++++------ .../20181116173541_copy_account_stats.rb | 8 ++- ...17234926_fill_account_suspension_origin.rb | 9 +++- 5 files changed, 74 insertions(+), 21 deletions(-) diff --git a/db/migrate/20170105224407_add_shortcode_to_media_attachments.rb b/db/migrate/20170105224407_add_shortcode_to_media_attachments.rb index 5f1dd62af0..fe877d1e16 100644 --- a/db/migrate/20170105224407_add_shortcode_to_media_attachments.rb +++ b/db/migrate/20170105224407_add_shortcode_to_media_attachments.rb @@ -1,12 +1,19 @@ # frozen_string_literal: true class AddShortcodeToMediaAttachments < ActiveRecord::Migration[5.0] + class MigrationMediaAttachment < ApplicationRecord + self.table_name = :media_attachments + scope :local, -> { where(remote_url: '') } + end + def up add_column :media_attachments, :shortcode, :string, null: true, default: nil add_index :media_attachments, :shortcode, unique: true + MigrationMediaAttachment.reset_column_information + # Migrate old links - MediaAttachment.local.update_all('shortcode = id') + MigrationMediaAttachment.local.update_all('shortcode = id') end def down diff --git a/db/migrate/20170304202101_add_type_to_media_attachments.rb b/db/migrate/20170304202101_add_type_to_media_attachments.rb index bbf14f515a..e49d87fc74 100644 --- a/db/migrate/20170304202101_add_type_to_media_attachments.rb +++ b/db/migrate/20170304202101_add_type_to_media_attachments.rb @@ -1,11 +1,24 @@ # frozen_string_literal: true class AddTypeToMediaAttachments < ActiveRecord::Migration[5.0] + class MigrationMediaAttachment < ApplicationRecord + self.table_name = :media_attachments + enum type: [:image, :gifv, :video] + IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze + VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze + end + def up add_column :media_attachments, :type, :integer, default: 0, null: false - MediaAttachment.where(file_content_type: MediaAttachment::IMAGE_MIME_TYPES).update_all(type: MediaAttachment.types[:image]) - MediaAttachment.where(file_content_type: MediaAttachment::VIDEO_MIME_TYPES).update_all(type: MediaAttachment.types[:video]) + MigrationMediaAttachment.reset_column_information + + MigrationMediaAttachment + .where(file_content_type: MigrationMediaAttachment::IMAGE_MIME_TYPES) + .update_all(type: MigrationMediaAttachment.types[:image]) + MigrationMediaAttachment + .where(file_content_type: MigrationMediaAttachment::VIDEO_MIME_TYPES) + .update_all(type: MigrationMediaAttachment.types[:video]) end def down diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb index 18f9aca97c..93ef5da615 100644 --- a/db/migrate/20181024224956_migrate_account_conversations.rb +++ b/db/migrate/20181024224956_migrate_account_conversations.rb @@ -7,9 +7,29 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] disable_ddl_transaction! - class Mention < ApplicationRecord - belongs_to :account, inverse_of: :mentions - belongs_to :status, -> { unscope(where: :deleted_at) } + class MigrationAccount < ApplicationRecord + self.table_name = :accounts + has_many :mentions, inverse_of: :account, dependent: :destroy, class_name: 'MigrationMention', foreign_key: :account_id + end + + class MigrationConversation < ApplicationRecord + self.table_name = :conversations + end + + class MigrationStatus < ApplicationRecord + self.table_name = :statuses + belongs_to :account, class_name: 'MigrationAccount' + has_many :mentions, dependent: :destroy, inverse_of: :status, class_name: 'MigrationMention', foreign_key: :status_id + scope :local, -> { where(local: true).or(where(uri: nil)) } + enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility + has_many :active_mentions, -> { active }, class_name: 'MigrationMention', inverse_of: :status, foreign_key: :status_id + end + + class MigrationMention < ApplicationRecord + self.table_name = :mentions + belongs_to :account, inverse_of: :mentions, class_name: 'MigrationAccount' + belongs_to :status, -> { unscope(where: :deleted_at) }, class_name: 'MigrationStatus' + scope :active, -> { where(silent: false) } delegate( :username, @@ -19,22 +39,24 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] ) end - class Notification < ApplicationRecord - belongs_to :account, optional: true + class MigrationNotification < ApplicationRecord + self.table_name = :notifications + belongs_to :account, optional: true, class_name: 'MigrationAccount' belongs_to :activity, polymorphic: true, optional: true - belongs_to :status, foreign_key: 'activity_id', optional: true - belongs_to :mention, foreign_key: 'activity_id', optional: true + belongs_to :status, foreign_key: 'activity_id', optional: true, class_name: 'MigrationStatus' + belongs_to :mention, foreign_key: 'activity_id', optional: true, class_name: 'MigrationMention' def target_status mention&.status end end - class AccountConversation < ApplicationRecord - belongs_to :account - belongs_to :conversation - belongs_to :last_status, -> { unscope(where: :deleted_at) }, class_name: 'Status' + class MigrationAccountConversation < ApplicationRecord + self.table_name = :account_conversations + belongs_to :account, class_name: 'MigrationAccount' + belongs_to :conversation, class_name: 'MigrationConversation' + belongs_to :last_status, -> { unscope(where: :deleted_at) }, class_name: 'MigrationStatus' before_validation :set_last_status @@ -74,7 +96,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] last_time = Time.zone.now local_direct_statuses.includes(:account, mentions: :account).find_each do |status| - AccountConversation.add_status(status.account, status) + MigrationAccountConversation.add_status(status.account, status) migrated += 1 if Time.zone.now - last_time > 1 @@ -84,7 +106,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] end notifications_about_direct_statuses.includes(:account, mention: { status: [:account, mentions: :account] }).find_each do |notification| - AccountConversation.add_status(notification.account, notification.target_status) + MigrationAccountConversation.add_status(notification.account, notification.target_status) migrated += 1 if Time.zone.now - last_time > 1 @@ -103,10 +125,10 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] end def local_direct_statuses - Status.unscoped.local.where(visibility: :direct) + MigrationStatus.unscoped.local.where(visibility: :direct) end def notifications_about_direct_statuses - Notification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct }) + MigrationNotification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct }) end end diff --git a/db/migrate/20181116173541_copy_account_stats.rb b/db/migrate/20181116173541_copy_account_stats.rb index 30d07764ef..9070200fee 100644 --- a/db/migrate/20181116173541_copy_account_stats.rb +++ b/db/migrate/20181116173541_copy_account_stats.rb @@ -3,6 +3,10 @@ class CopyAccountStats < ActiveRecord::Migration[5.2] disable_ddl_transaction! + class MigrationAccount < ApplicationRecord + self.table_name = :accounts + end + def up safety_assured do if supports_upsert? @@ -27,7 +31,7 @@ class CopyAccountStats < ActiveRecord::Migration[5.2] def up_fast say 'Upsert is available, importing counters using the fast method' - Account.unscoped.select('id').find_in_batches(batch_size: 5_000) do |accounts| + MigrationAccount.unscoped.select('id').find_in_batches(batch_size: 5_000) do |accounts| execute <<-SQL.squish INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at) SELECT id, statuses_count, following_count, followers_count, created_at, updated_at @@ -44,7 +48,7 @@ class CopyAccountStats < ActiveRecord::Migration[5.2] # We cannot use bulk INSERT or overarching transactions here because of possible # uniqueness violations that we need to skip over - Account.unscoped.select('id, statuses_count, following_count, followers_count, created_at, updated_at').find_each do |account| + MigrationAccount.unscoped.select('id, statuses_count, following_count, followers_count, created_at, updated_at').find_each do |account| params = [account.id, account[:statuses_count], account[:following_count], account[:followers_count], account.created_at, account.updated_at] exec_insert('INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6)', nil, params) rescue ActiveRecord::RecordNotUnique diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb index ab7407d79e..b00f9df533 100644 --- a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb +++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb @@ -3,8 +3,15 @@ class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2] disable_ddl_transaction! + class MigrationAccount < ApplicationRecord + self.table_name = :accounts + scope :suspended, -> { where.not(suspended_at: nil) } + enum suspension_origin: { local: 0, remote: 1 }, _prefix: true + end + def up - Account.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local) + MigrationAccount.reset_column_information + MigrationAccount.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local) end def down; end From 347fc78392bb4ac58406b9e7b561f4292f2ae5f1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 9 Aug 2023 05:26:56 -0400 Subject: [PATCH 041/163] Restore console behavior in `test` env (#26401) --- spec/{fabricators => fabrication}/fabricators_spec.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec/{fabricators => fabrication}/fabricators_spec.rb (100%) diff --git a/spec/fabricators/fabricators_spec.rb b/spec/fabrication/fabricators_spec.rb similarity index 100% rename from spec/fabricators/fabricators_spec.rb rename to spec/fabrication/fabricators_spec.rb From 2bef6e60e830b194bb8c451821fc463488c1bdd3 Mon Sep 17 00:00:00 2001 From: Foritus Date: Wed, 9 Aug 2023 10:58:46 +0100 Subject: [PATCH 042/163] Change: Block GPTBot (#26396) --- public/robots.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/robots.txt b/public/robots.txt index 771bf2160b..6672eeba1f 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,5 +1,8 @@ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +User-agent: GPTBot +Disallow: / + User-agent: * Disallow: /media_proxy/ Disallow: /interact/ From 37a9c484295f2fb8eb4367fede85b233f7223dd9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 9 Aug 2023 07:15:04 -0400 Subject: [PATCH 043/163] Avoid connecting to a running ES instance in ES search check spec (#26413) --- .../admin/system_check/elasticsearch_check_spec.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb index 1ffac89ee4..4982159269 100644 --- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -49,11 +49,7 @@ describe Admin::SystemCheck::ElasticsearchCheck do end context 'when running version is missing' do - before do - client = instance_double(Elasticsearch::Transport::Client) - allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error) - allow(Chewy).to receive(:client).and_return(client) - end + before { stub_elasticsearch_error } it 'returns false' do expect(check.pass?).to be false @@ -86,6 +82,8 @@ describe Admin::SystemCheck::ElasticsearchCheck do end context 'when running version is missing' do + before { stub_elasticsearch_error } + it 'sends class name symbol to message instance' do allow(Admin::SystemCheck::Message).to receive(:new) .with(:elasticsearch_running_check) @@ -97,4 +95,10 @@ describe Admin::SystemCheck::ElasticsearchCheck do end end end + + def stub_elasticsearch_error + client = instance_double(Elasticsearch::Transport::Client) + allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error) + allow(Chewy).to receive(:client).and_return(client) + end end From f08d97c0c2d90d2283301b460582a010ffa1e2bd Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Aug 2023 16:32:40 +0200 Subject: [PATCH 044/163] Change the hashtag column to not display the hashtag header on pinned columns (#26416) --- app/javascript/mastodon/features/hashtag_timeline/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.jsx b/app/javascript/mastodon/features/hashtag_timeline/index.jsx index d00890cb37..7079f55e92 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/index.jsx @@ -203,7 +203,7 @@ class HashtagTimeline extends PureComponent { } + prepend={pinned ? null : } alwaysPrepend trackScroll={!pinned} scrollKey={`hashtag_timeline-${columnId}`} From 2a6e6dc53cc140be27312990835d82e12645cd65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 22:19:12 +0200 Subject: [PATCH 045/163] Update dependency sass to v1.64.2 (#26315) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index e72012e065..c5f03062fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6660,7 +6660,12 @@ immutable@^3.8.2: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== -immutable@^4.0.0, immutable@^4.0.0-rc.1, immutable@^4.3.0: +immutable@^4.0.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" + integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== + +immutable@^4.0.0-rc.1, immutable@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc" integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A== @@ -10564,9 +10569,9 @@ sass-loader@^10.2.0: semver "^7.3.2" sass@^1.62.1: - version "1.64.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.64.1.tgz#6a46f6d68e0fa5ad90aa59ce025673ddaa8441cf" - integrity sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ== + version "1.64.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.64.2.tgz#0d9805ad6acf31c59c3acc725fcfb91b7fcc6909" + integrity sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 84dcc0d054867305d3d9574af6eb1c5b07a9c5d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 22:21:41 +0200 Subject: [PATCH 046/163] Update eslint (non-major) (#26323) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +- yarn.lock | 363 ++++++++++++++++++++++++++++----------------------- 2 files changed, 205 insertions(+), 162 deletions(-) diff --git a/package.json b/package.json index 76ece5f15e..147460a100 100644 --- a/package.json +++ b/package.json @@ -192,12 +192,12 @@ "eslint-config-prettier": "^8.8.0", "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-formatjs": "^4.10.1", - "eslint-plugin-import": "~2.27.5", + "eslint-plugin-import": "~2.28.0", "eslint-plugin-jsdoc": "^46.1.0", "eslint-plugin-jsx-a11y": "~6.7.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-promise": "~6.1.1", - "eslint-plugin-react": "~7.32.2", + "eslint-plugin-react": "~7.33.0", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "jest": "^29.5.0", diff --git a/yarn.lock b/yarn.lock index c5f03062fe..629eee40c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@adobe/css-tools@^4.0.1": version "4.2.0" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855" @@ -1245,35 +1250,35 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@es-joy/jsdoccomment@~0.39.4": - version "0.39.4" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz#6b8a62e9b3077027837728818d3c4389a898b392" - integrity sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg== +"@es-joy/jsdoccomment@~0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz#13acd77fb372ed1c83b7355edd865a3b370c9ec4" + integrity sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg== dependencies: - comment-parser "1.3.1" + comment-parser "1.4.0" esquery "^1.5.0" jsdoc-type-pratt-parser "~4.0.0" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.3.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1281,10 +1286,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.42.0": - version "8.42.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" - integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== +"@eslint/js@^8.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== "@floating-ui/core@^1.3.1": version "1.3.1" @@ -2232,7 +2237,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== @@ -2482,7 +2487,7 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== -"@types/semver@^7.3.12": +"@types/semver@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== @@ -2591,50 +2596,49 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz#19ff4f1cab8d6f8c2c1825150f7a840bc5d9bdc4" - integrity sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A== + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz#e751e148aab7ccaf8a7bfd370f7ce9e6bdd1f3f4" + integrity sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A== dependencies: - "@eslint-community/regexpp" "^4.5.0" - "@typescript-eslint/scope-manager" "6.0.0" - "@typescript-eslint/type-utils" "6.0.0" - "@typescript-eslint/utils" "6.0.0" - "@typescript-eslint/visitor-keys" "6.0.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.3.0" + "@typescript-eslint/type-utils" "6.3.0" + "@typescript-eslint/utils" "6.3.0" + "@typescript-eslint/visitor-keys" "6.3.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" graphemer "^1.4.0" ignore "^5.2.4" natural-compare "^1.4.0" natural-compare-lite "^1.4.0" - semver "^7.5.0" + semver "^7.5.4" ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.0.0.tgz#46b2600fd1f67e62fc00a28093a75f41bf7effc4" - integrity sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg== + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.3.0.tgz#359684c443f4f848db3c4f14674f544f169c8f46" + integrity sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg== dependencies: - "@typescript-eslint/scope-manager" "6.0.0" - "@typescript-eslint/types" "6.0.0" - "@typescript-eslint/typescript-estree" "6.0.0" - "@typescript-eslint/visitor-keys" "6.0.0" + "@typescript-eslint/scope-manager" "6.3.0" + "@typescript-eslint/types" "6.3.0" + "@typescript-eslint/typescript-estree" "6.3.0" + "@typescript-eslint/visitor-keys" "6.3.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz#8ede47a37cb2b7ed82d329000437abd1113b5e11" - integrity sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg== +"@typescript-eslint/scope-manager@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz#6b74e338c4b88d5e1dfc1a28c570dd5cf8c86b09" + integrity sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ== dependencies: - "@typescript-eslint/types" "6.0.0" - "@typescript-eslint/visitor-keys" "6.0.0" + "@typescript-eslint/types" "6.3.0" + "@typescript-eslint/visitor-keys" "6.3.0" -"@typescript-eslint/type-utils@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz#0478d8a94f05e51da2877cc0500f1b3c27ac7e18" - integrity sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ== +"@typescript-eslint/type-utils@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz#3bf89ccd36621ddec1b7f8246afe467c67adc247" + integrity sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ== dependencies: - "@typescript-eslint/typescript-estree" "6.0.0" - "@typescript-eslint/utils" "6.0.0" + "@typescript-eslint/typescript-estree" "6.3.0" + "@typescript-eslint/utils" "6.3.0" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2643,10 +2647,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== -"@typescript-eslint/types@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.0.0.tgz#19795f515f8decbec749c448b0b5fc76d82445a1" - integrity sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg== +"@typescript-eslint/types@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.3.0.tgz#84517f1427923e714b8418981e493b6635ab4c9d" + integrity sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg== "@typescript-eslint/typescript-estree@5.59.0": version "5.59.0" @@ -2661,32 +2665,31 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz#1e09aab7320e404fb9f83027ea568ac24e372f81" - integrity sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ== +"@typescript-eslint/typescript-estree@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz#20e1e10e2f51cdb9e19a2751215cac92c003643c" + integrity sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg== dependencies: - "@typescript-eslint/types" "6.0.0" - "@typescript-eslint/visitor-keys" "6.0.0" + "@typescript-eslint/types" "6.3.0" + "@typescript-eslint/visitor-keys" "6.3.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.5.0" + semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.0.0.tgz#27a16d0d8f2719274a39417b9782f7daa3802db0" - integrity sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ== +"@typescript-eslint/utils@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.3.0.tgz#0898c5e374372c2092ca1b979ea7ee9cc020ce84" + integrity sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q== dependencies: - "@eslint-community/eslint-utils" "^4.3.0" - "@types/json-schema" "^7.0.11" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "6.0.0" - "@typescript-eslint/types" "6.0.0" - "@typescript-eslint/typescript-estree" "6.0.0" - eslint-scope "^5.1.1" - semver "^7.5.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.3.0" + "@typescript-eslint/types" "6.3.0" + "@typescript-eslint/typescript-estree" "6.3.0" + semver "^7.5.4" "@typescript-eslint/visitor-keys@5.59.0": version "5.59.0" @@ -2696,12 +2699,12 @@ "@typescript-eslint/types" "5.59.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz#0b49026049fbd096d2c00c5e784866bc69532a31" - integrity sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA== +"@typescript-eslint/visitor-keys@6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz#8d09aa3e389ae0971426124c155ac289afbe450a" + integrity sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw== dependencies: - "@typescript-eslint/types" "6.0.0" + "@typescript-eslint/types" "6.3.0" eslint-visitor-keys "^3.4.1" "@webassemblyjs/ast@1.9.0": @@ -2907,11 +2910,16 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2937,7 +2945,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3144,6 +3152,17 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -4175,10 +4194,10 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -comment-parser@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== +comment-parser@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.0.tgz#0f8c560f59698193854f12884c20c0e39a26d32c" + integrity sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw== common-tags@^1.8.0: version "1.8.2" @@ -5323,9 +5342,9 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-config-prettier@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-import-resolver-node@^0.3.7: version "0.3.7" @@ -5350,7 +5369,7 @@ eslint-import-resolver-typescript@^3.5.5: is-glob "^4.0.3" synckit "^0.8.5" -eslint-module-utils@^2.7.4: +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -5374,40 +5393,43 @@ eslint-plugin-formatjs@^4.10.1: typescript "^4.7 || 5" unicode-emoji-utils "^1.1.1" -eslint-plugin-import@~2.27.5: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== +eslint-plugin-import@~2.28.0: + version "2.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" + integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.12.1" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + resolve "^1.22.3" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-jsdoc@^46.1.0: - version "46.2.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.6.tgz#f25590d371859f20691d65b5dcd4cbe370d65564" - integrity sha512-zIaK3zbSrKuH12bP+SPybPgcHSM6MFzh3HFeaODzmsF1N8C1l8dzJ22cW1aq4g0+nayU1VMjmNf7hg0dpShLrA== + version "46.4.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.6.tgz#5226461eda61b5920297cbe02c3b17bc9423cf0b" + integrity sha512-z4SWYnJfOqftZI+b3RM9AtWL1vF/sLWE/LlO9yOKDof9yN2+n3zOdOJTGX/pRE/xnPsooOLG2Rq6e4d+XW3lNw== dependencies: - "@es-joy/jsdoccomment" "~0.39.4" + "@es-joy/jsdoccomment" "~0.40.1" are-docs-informative "^0.0.2" - comment-parser "1.3.1" + comment-parser "1.4.0" debug "^4.3.4" escape-string-regexp "^4.0.0" esquery "^1.5.0" is-builtin-module "^3.2.1" - semver "^7.5.1" + semver "^7.5.4" spdx-expression-parse "^3.0.1" eslint-plugin-jsx-a11y@~6.7.1: @@ -5450,10 +5472,10 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@~7.32.2: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== +eslint-plugin-react@~7.33.0: + version "7.33.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz#bc27cccf860ae45413a4a4150bf0977345c1ceab" + integrity sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" @@ -5468,7 +5490,7 @@ eslint-plugin-react@~7.32.2: object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.4" - semver "^6.3.0" + semver "^6.3.1" string.prototype.matchall "^4.0.8" eslint-scope@^4.0.3: @@ -5479,48 +5501,40 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== eslint@^8.41.0: - version "8.42.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" - integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.42.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.2" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -5530,7 +5544,6 @@ eslint@^8.41.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -5540,17 +5553,16 @@ eslint@^8.41.0: lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" @@ -5781,7 +5793,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.12: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -5792,6 +5804,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" @@ -6314,11 +6337,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -6670,7 +6688,7 @@ immutable@^4.0.0-rc.1, immutable@^4.3.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc" integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -6905,6 +6923,13 @@ is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-core-module@^2.12.1, is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -8794,6 +8819,16 @@ object.getownpropertydescriptors@^2.1.0: es-abstract "^1.21.2" safe-array-concat "^1.0.0" +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" @@ -8895,17 +8930,17 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" os-browserify@^0.3.0: version "0.3.0" @@ -10407,6 +10442,15 @@ resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -10658,14 +10702,14 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== dependencies: lru-cache "^6.0.0" -semver@^7.5.0: +semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -11266,7 +11310,6 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -11338,7 +11381,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -11804,7 +11847,7 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -12580,7 +12623,7 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== From ef78647bb051c0bdd56bc5957f0f8af52aee2a8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:47:42 +0200 Subject: [PATCH 047/163] New Crowdin Translations (automated) (#26373) Co-authored-by: GitHub Actions Co-authored-by: Claire --- app/javascript/mastodon/locales/ar.json | 23 ++- app/javascript/mastodon/locales/be.json | 3 + app/javascript/mastodon/locales/ca.json | 3 + app/javascript/mastodon/locales/da.json | 3 + app/javascript/mastodon/locales/de.json | 5 +- app/javascript/mastodon/locales/en-GB.json | 3 +- app/javascript/mastodon/locales/es-AR.json | 3 + app/javascript/mastodon/locales/es-MX.json | 3 + app/javascript/mastodon/locales/es.json | 3 + app/javascript/mastodon/locales/et.json | 3 + app/javascript/mastodon/locales/eu.json | 3 + app/javascript/mastodon/locales/fi.json | 9 +- app/javascript/mastodon/locales/fo.json | 3 + app/javascript/mastodon/locales/fr-QC.json | 3 + app/javascript/mastodon/locales/fr.json | 3 + app/javascript/mastodon/locales/gd.json | 34 ++++- app/javascript/mastodon/locales/gl.json | 3 + app/javascript/mastodon/locales/he.json | 3 + app/javascript/mastodon/locales/hu.json | 3 + app/javascript/mastodon/locales/is.json | 5 + app/javascript/mastodon/locales/it.json | 3 + app/javascript/mastodon/locales/ja.json | 3 + app/javascript/mastodon/locales/ko.json | 11 +- app/javascript/mastodon/locales/ms.json | 24 ++++ app/javascript/mastodon/locales/nl.json | 3 + app/javascript/mastodon/locales/nn.json | 3 + app/javascript/mastodon/locales/no.json | 9 ++ app/javascript/mastodon/locales/pl.json | 3 + app/javascript/mastodon/locales/pt-PT.json | 4 + app/javascript/mastodon/locales/sr-Latn.json | 3 + app/javascript/mastodon/locales/sr.json | 3 + app/javascript/mastodon/locales/sv.json | 17 ++- app/javascript/mastodon/locales/th.json | 3 + app/javascript/mastodon/locales/tr.json | 3 + app/javascript/mastodon/locales/uk.json | 3 + app/javascript/mastodon/locales/vi.json | 29 ++-- app/javascript/mastodon/locales/zh-TW.json | 7 +- config/locales/activerecord.ms.yml | 4 + config/locales/ar.yml | 13 ++ config/locales/de.yml | 76 +++++----- config/locales/devise.de.yml | 8 +- config/locales/devise.ms.yml | 22 +++ config/locales/doorkeeper.ar.yml | 1 + config/locales/doorkeeper.gd.yml | 89 ++++++------ config/locales/doorkeeper.ms.yml | 144 +++++++++++++++++++ config/locales/gd.yml | 5 + config/locales/ms.yml | 79 ++++++++++ config/locales/nn.yml | 16 +-- config/locales/simple_form.de.yml | 14 +- config/locales/simple_form.ms.yml | 4 + config/locales/simple_form.vi.yml | 2 +- config/locales/vi.yml | 10 +- 52 files changed, 600 insertions(+), 139 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index efc932f4dc..035ba3f68f 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -13,7 +13,7 @@ "about.rules": "قواعد الخادم", "account.account_note_header": "مُلاحظة", "account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة", - "account.badges.bot": "بوت", + "account.badges.bot": "آلي", "account.badges.group": "فريق", "account.block": "احجب @{name}", "account.block_domain": "حظر اسم النِّطاق {domain}", @@ -181,6 +181,7 @@ "confirmations.mute.explanation": "هذا سيخفي المنشورات عنهم وتلك المشار فيها إليهم، لكنه سيسمح لهم برؤية منشوراتك ومتابعتك.", "confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟", "confirmations.redraft.confirm": "إزالة وإعادة الصياغة", + "confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.", "confirmations.reply.confirm": "رد", "confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟", "confirmations.unfollow.confirm": "إلغاء المتابعة", @@ -228,6 +229,8 @@ "empty_column.direct": "لم يتم الإشارة إليك بشكل خاص بعد. عندما تتلقى أو ترسل إشارة، سيتم عرضها هنا.", "empty_column.domain_blocks": "ليس هناك نطاقات تم حجبها بعد.", "empty_column.explore_statuses": "ليس هناك ما هو متداوَل الآن. عد في وقت لاحق!", + "empty_column.favourited_statuses": "ليس لديك أية منشورات مفضلة بعد. عندما ستقوم بالإعجاب بواحدة، ستظهر هنا.", + "empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", "empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.", "empty_column.followed_tags": "لم تُتابع أي وسم بعدُ. ستظهر الوسوم هنا حينما تفعل ذلك.", "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.", @@ -298,14 +301,21 @@ "home.column_settings.basic": "الأساسية", "home.column_settings.show_reblogs": "اعرض الترقيات", "home.column_settings.show_replies": "اعرض الردود", + "home.explore_prompt.body": "سوف يحتوي خيط أخبارك الرئيسي على مزيج من المشاركات من الوسوم التي اخترت متابعتها، والأشخاص الذين اخترت متابعتهم، والمنشورات التي قاموا بدعمها. ومع ذلك، إن كانت تبدو الأمور هادئة جدا، ماذا لو:", "home.explore_prompt.title": "هذا مقرك الرئيسي داخل ماستدون.", "home.hide_announcements": "إخفاء الإعلانات", "home.show_announcements": "إظهار الإعلانات", + "interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.", "interaction_modal.description.follow": "مع حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته على خيطك الرئيس.", "interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.", "interaction_modal.description.reply": "مع حساب في ماستدون، يمكنك الرد على هذا المنشور.", + "interaction_modal.login.action": "خذني إلى خادمي", + "interaction_modal.login.prompt": "نطاق الخادم الخاص بك، على سبيل المثال mastodon.social", + "interaction_modal.no_account_yet": "ليست على ماستدون بعد؟", "interaction_modal.on_another_server": "على خادم مختلف", "interaction_modal.on_this_server": "على هذا الخادم", + "interaction_modal.sign_in": "لم تقم بتسجيل الدخول إلى هذا الخادم. أين هو مستضاف حسابك؟", + "interaction_modal.title.favourite": "إضافة منشور {name} إلى المفضلة", "interaction_modal.title.follow": "اتبع {name}", "interaction_modal.title.reblog": "مشاركة منشور {name}", "interaction_modal.title.reply": "الرد على منشور {name}", @@ -321,6 +331,8 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "للانتقال إلى أسفل القائمة", "keyboard_shortcuts.enter": "لفتح المنشور", + "keyboard_shortcuts.favourite": "لإضافة المنشور إلى المفضلة", + "keyboard_shortcuts.favourites": "لفتح قائمة المفضلات", "keyboard_shortcuts.federated": "لفتح الخيط الزمني الفديرالي", "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "لفتح الخيط الرئيسي", @@ -351,6 +363,7 @@ "lightbox.previous": "العودة", "limited_account_hint.action": "إظهار الملف التعريفي على أي حال", "limited_account_hint.title": "تم إخفاء هذا الملف الشخصي من قبل مشرفي {domain}.", + "link_preview.author": "مِن {name}", "lists.account.add": "أضف إلى القائمة", "lists.account.remove": "احذف من القائمة", "lists.delete": "احذف القائمة", @@ -373,6 +386,7 @@ "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", "mute_modal.indefinite": "إلى أجل غير مسمى", "navigation_bar.about": "عن", + "navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة", "navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.bookmarks": "الفواصل المرجعية", "navigation_bar.community_timeline": "الخيط المحلي", @@ -382,6 +396,7 @@ "navigation_bar.domain_blocks": "النطاقات المحظورة", "navigation_bar.edit_profile": "عدّل الملف التعريفي", "navigation_bar.explore": "استكشف", + "navigation_bar.favourites": "المفضلة", "navigation_bar.filters": "الكلمات المكتومة", "navigation_bar.follow_requests": "طلبات المتابعة", "navigation_bar.followed_tags": "الوسوم المتابَعة", @@ -398,6 +413,7 @@ "not_signed_in_indicator.not_signed_in": "تحتاج إلى تسجيل الدخول للوصول إلى هذا المصدر.", "notification.admin.report": "{name} أبلغ عن {target}", "notification.admin.sign_up": "أنشأ {name} حسابًا", + "notification.favourite": "أضاف {name} منشورك إلى مفضلته", "notification.follow": "{name} يتابعك", "notification.follow_request": "لقد طلب {name} متابعتك", "notification.mention": "{name} ذكرك", @@ -411,6 +427,7 @@ "notifications.column_settings.admin.report": "التقارير الجديدة:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", + "notifications.column_settings.favourite": "المفضلة:", "notifications.column_settings.filter_bar.advanced": "اعرض كافة الفئات", "notifications.column_settings.filter_bar.category": "شريط الفلترة السريعة", "notifications.column_settings.filter_bar.show_bar": "إظهار شريط التصفية", @@ -428,6 +445,7 @@ "notifications.column_settings.update": "التعديلات:", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", + "notifications.filter.favourites": "المفضلة", "notifications.filter.follows": "يتابِع", "notifications.filter.mentions": "الإشارات", "notifications.filter.polls": "نتائج استطلاع الرأي", @@ -578,6 +596,8 @@ "server_banner.server_stats": "إحصائيات الخادم:", "sign_in_banner.create_account": "أنشئ حسابًا", "sign_in_banner.sign_in": "تسجيل الدخول", + "sign_in_banner.sso_redirect": "تسجيل الدخول أو إنشاء حساب", + "sign_in_banner.text": "قم بالولوج بحسابك لمتابعة الصفحات الشخصية أو الوسوم، أو لإضافة المنشورات إلى المفضلة ومشاركتها والرد عليها أو التفاعل بواسطة حسابك المتواجد على خادم مختلف.", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_domain": "فتح واجهة الإشراف لـ {domain}", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", @@ -594,6 +614,7 @@ "status.edited": "عُدّل في {date}", "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}", "status.embed": "إدماج", + "status.favourite": "فضّل", "status.filter": "تصفية هذه الرسالة", "status.filtered": "مُصفّى", "status.hide": "إخفاء المنشور", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 178bd7a89e..c94ebe0d15 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Любы", "hashtag.column_settings.tag_mode.none": "Нічога з пералічанага", "hashtag.column_settings.tag_toggle": "Уключыць дадатковыя тэгі для гэтай калонкі", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} удзельнік} few {{counter} удзельніка} many {{counter} удзельнікаў} other {{counter} удзельніка}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}} за сёння", "hashtag.follow": "Падпісацца на хэштэг", "hashtag.unfollow": "Адпісацца ад хэштэга", "home.actions.go_to_explore": "Паглядзіце, што ў трэндзе", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index adf29f6fd0..5f42d42f98 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", + "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}} avui", "hashtag.follow": "Segueix l'etiqueta", "hashtag.unfollow": "Deixa de seguir l'etiqueta", "home.actions.go_to_explore": "Mira què és tendència", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 3dbde03306..20c8bd6fdf 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag", "hashtag.follow": "Følg hashtag", "hashtag.unfollow": "Stop med at følge hashtag", "home.actions.go_to_explore": "Se, hvad som trender", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 9b40964f22..93183bdd7e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Eines von diesen", "hashtag.column_settings.tag_mode.none": "Keines von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags dieser Spalte hinzufügen", + "hashtag.counter_by_accounts": "{count, plural, one{{counter} Beteiligte*r} other{{counter} Beteiligte}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}} heute", "hashtag.follow": "Hashtag folgen", "hashtag.unfollow": "Hashtag entfolgen", "home.actions.go_to_explore": "Trends ansehen", @@ -547,7 +550,7 @@ "report.reasons.dislike": "Das gefällt mir nicht", "report.reasons.dislike_description": "Das ist etwas, das du nicht sehen möchtest", "report.reasons.legal": "Das ist illegal", - "report.reasons.legal_description": "Du bist davon überzeugt, dass es gegen die Gesetze deines Landes oder des Landes des Servers verstößt", + "report.reasons.legal_description": "Du glaubst, dass es gegen die Gesetze deines Landes oder des Landes des Servers verstößt", "report.reasons.other": "Es ist etwas anderes", "report.reasons.other_description": "Der Vorfall passt zu keiner dieser Kategorien", "report.reasons.spam": "Das ist Spam", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 1021a22812..0566e164d7 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -235,7 +235,7 @@ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home": "Your home timeline is empty! Follow more people to fill it up.", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", @@ -295,6 +295,7 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} Following} other {{counter} Following}}", "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", "home.actions.go_to_explore": "See what's trending", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 8f2a9c0cdb..d894bfe0c6 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}} hoy", "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "home.actions.go_to_explore": "Mirá qué está en tendencia", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index f59862245f..015cf5a058 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Incluye etiquetas adicionales para esta columna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy", "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "home.actions.go_to_explore": "Ver tendencias", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 3e4e06474f..cb1bcb9896 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales en esta columna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy", "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "home.actions.go_to_explore": "Ver tendencias", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 86ef7f103b..b94787ea18 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Mõni neist", "hashtag.column_settings.tag_mode.none": "Mitte ükski neist", "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} osalejaga} other {{counter} osalejaga}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} postitusega} other {{counter} postitusega}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postitust} other {{counter} postitust}} täna", "hashtag.follow": "Jälgi silti", "hashtag.unfollow": "Lõpeta sildi jälgimine", "home.actions.go_to_explore": "Vaata, mis on populaarne", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 140913f3d6..d5a7343bae 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -292,6 +292,9 @@ "hashtag.column_settings.tag_mode.any": "Hautako edozein", "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur", "hashtag.follow": "Jarraitu traola", "hashtag.unfollow": "Utzi traola jarraitzeari", "home.actions.go_to_explore": "Ikusi zer dagoen pil-pilean", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 6678a41e8b..2a09c2344d 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -81,7 +81,7 @@ "admin.impact_report.instance_follows": "Seuraajat, jotka heidän käyttäjänsä menettäisivät", "admin.impact_report.title": "Vaikutusten yhteenveto", "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.", - "alert.rate_limited.title": "Määrää rajoitettu", + "alert.rate_limited.title": "Pyyntömäärää rajoitettu", "alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.title": "Hups!", "announcement.announcement": "Ilmoitus", @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Mikä tahansa näistä", "hashtag.column_settings.tag_mode.none": "Ei mitään näistä", "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} osallistuja} other {{counter} osallistujaa}}", + "hashtag.counter_by_uses": "{count, plural, one{{counter} julkaisu} other {{counter} julkaisua}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}} tänään", "hashtag.follow": "Seuraa aihetunnistetta", "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", "home.actions.go_to_explore": "Katso, mikä on suosittua", @@ -420,7 +423,7 @@ "notification.follow_request": "{name} haluaa seurata sinua", "notification.mention": "{name} mainitsi sinut", "notification.own_poll": "Äänestyksesi on päättynyt", - "notification.poll": "Kysely, johon osallistuit, on päättynyt", + "notification.poll": "Äänestys, johon osallistuit, on päättynyt", "notification.reblog": "{name} tehosti viestiäsi", "notification.status": "{name} julkaisi juuri viestin", "notification.update": "{name} muokkasi viestiä", @@ -598,7 +601,7 @@ "server_banner.server_stats": "Palvelimen tilastot:", "sign_in_banner.create_account": "Luo tili", "sign_in_banner.sign_in": "Kirjaudu", - "sign_in_banner.sso_redirect": "Kirjaudu sisään tai rekisteröidy", + "sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy", "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 7a861d8c02..6e4ff2d9e0 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Okkurt av hesum", "hashtag.column_settings.tag_mode.none": "Einki av hesum", "hashtag.column_settings.tag_toggle": "Legg frámerki afturat hesum teigi", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} luttakari} other {{counter} luttakarar}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} postur} other {{counter} postar}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postur} other {{counter} postar}} í dag", "hashtag.follow": "Fylg frámerki", "hashtag.unfollow": "Gevst at fylgja frámerki", "home.actions.go_to_explore": "Sí rákið", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index a3627b5361..2278818b12 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ceux-ci", "hashtag.column_settings.tag_mode.none": "Aucun de ceux-ci", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui", "hashtag.follow": "Suivre ce hashtag", "hashtag.unfollow": "Ne plus suivre ce hashtag", "home.actions.go_to_explore": "Voir les tendances", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 4757621d26..157d984191 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui", "hashtag.follow": "Suivre le hashtag", "hashtag.unfollow": "Ne plus suivre le hashtag", "home.actions.go_to_explore": "Voir les tendances", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index f580caa966..3f088b2ea7 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -113,6 +113,7 @@ "column.direct": "Iomraidhean prìobhaideach", "column.directory": "Rùraich sna pròifilean", "column.domain_blocks": "Àrainnean bacte", + "column.favourites": "Annsachdan", "column.firehose": "Inbhirean beòtha", "column.follow_requests": "Iarrtasan leantainn", "column.home": "Dachaigh", @@ -134,6 +135,8 @@ "community.column_settings.remote_only": "Feadhainn chèin a-mhàin", "compose.language.change": "Atharraich an cànan", "compose.language.search": "Lorg cànan…", + "compose.published.body": "Chaidh am post fhoillseachadh.", + "compose.published.open": "Fosgail", "compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh", "compose_form.encryption_warning": "Chan eil crioptachadh ceann gu ceann air postaichean Mhastodon. Na co-roinn fiosrachadh dìomhair idir le Mastodon.", "compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais o nach eil e poblach. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.", @@ -178,6 +181,7 @@ "confirmations.mute.explanation": "Cuiridh seo na postaichean uapa ’s na postaichean a bheir iomradh orra am falach ach chì iad-san na postaichean agad fhathast is faodaidh iad ’gad leantainn.", "confirmations.mute.message": "A bheil thu cinnteach gu bheil thu airson {name} a mhùchadh?", "confirmations.redraft.confirm": "Sguab às ⁊ dèan dreachd ùr", + "confirmations.redraft.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às agus dreachd ùr a thòiseachadh? Caillidh tu gach annsachd is brosnachadh air agus thèid freagairtean dhan phost thùsail ’nan dìlleachdanan.", "confirmations.reply.confirm": "Freagair", "confirmations.reply.message": "Ma bheir thu freagairt an-dràsta, thèid seo a sgrìobhadh thairis air an teachdaireachd a tha thu a’ sgrìobhadh an-dràsta. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?", "confirmations.unfollow.confirm": "Na lean tuilleadh", @@ -197,7 +201,8 @@ "dismissable_banner.community_timeline": "Seo na postaichean poblach as ùire o dhaoine aig a bheil cunntas air {domain}.", "dismissable_banner.dismiss": "Leig seachad", "dismissable_banner.explore_links": "Seo na naidheachdan air a bhithear a’ bruidhinn an-dràsta fhèin air an fhrithealaiche seo is frithealaichean eile dhen lìonra sgaoilte.", - "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs an-dràsta fhèin air an fhrithealaich seo is frithealaichean eile dhen lìonra sgaoilte.", + "dismissable_banner.explore_statuses": "Tha fèill air na postaichean seo a’ fàs an-diugh thar an lìona shòisealta. Gheibh postaichean nas ùire le barrachd brosnaichean is annsachdan rangachadh nas àirde.", + "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs an-diugh air an fhrithealaich seo is frithealaichean eile dhen lìonra sgaoilte. Gheibh tagaichean hais a tha gan cleachdadh le daoine eadar-dhealaichte rangachadh nas àirde.", "dismissable_banner.public_timeline": "Seo na postaichean poblach as ùire o dhaoine air an lìonra sòisealta tha ’gan leantainn le daoine air {domain}.", "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.", "embed.preview": "Seo an coltas a bhios air:", @@ -225,6 +230,8 @@ "empty_column.direct": "Chan eil iomradh prìobhaideach agad fhathast. Nuair a chuireas no a gheibh thu tè, nochdaidh i an-seo.", "empty_column.domain_blocks": "Cha deach àrainn sam bith a bhacadh fhathast.", "empty_column.explore_statuses": "Chan eil dad a’ treandadh an-dràsta fhèin. Thoir sùil a-rithist an ceann greis!", + "empty_column.favourited_statuses": "Chan eil annsachd air post agad fhathast. Nuair a nì thu annsachd de dh’fhear, nochdaidh e an-seo.", + "empty_column.favourites": "Chan deach am post seo a bhrosnachadh le duine sam bith fhathast. Nuair a bhrosnaicheas cuideigin e, nochdaidh iad an-seo.", "empty_column.follow_requests": "Chan eil iarrtas leantainn agad fhathast. Nuair a gheibh thu fear, nochdaidh e an-seo.", "empty_column.followed_tags": "Cha do lean thu taga hais sam bith fhathast. Nuair a leanas tu, nochdaidh iad an-seo.", "empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.", @@ -288,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Gin sam bith dhiubh", "hashtag.column_settings.tag_mode.none": "Às aonais gin sam bith dhiubh", "hashtag.column_settings.tag_toggle": "Gabh a-steach barrachd tagaichean sa cholbh seo", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} chom-pàirtiche} two {{counter} chom-pàirtiche} few {{counter} com-pàirtiche} other {{counter} com-pàirtiche}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} phost} two {{counter} phost} few { postaichean} other { post}} an-diugh", "hashtag.follow": "Lean an taga hais", "hashtag.unfollow": "Na lean an taga hais tuilleadh", "home.actions.go_to_explore": "Faic na tha a’ treandadh", @@ -295,14 +305,22 @@ "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", + "home.explore_prompt.body": "Bidh measgachadh de phostaichean o na tagaichean hais a leanas tu, na daoine a leanas tu is na postaichean a bhrosnaicheas iad air do dhachaigh. Ma tha cùisean ro shàmhach dhut, seo nas urrainn dhut a dhèanamh:", "home.explore_prompt.title": "Seo do dhachaigh am broinn Mastodon.", "home.hide_announcements": "Falaich na brathan-fios", "home.show_announcements": "Seall na brathan-fios", + "interaction_modal.description.favourite": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a chur ris na h-annsachdan airson innse dhan ùghdar gu bheil e a’ còrdadh dhut ’s a shàbhaladh do uaireigin eile.", "interaction_modal.description.follow": "Le cunntas air Mastodon, ’s urrainn dhut {name} a leantainn ach am faigh thu na postaichean aca nad dhachaigh.", "interaction_modal.description.reblog": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a bhrosnachadh gus a cho-roinneadh leis an luchd-leantainn agad fhèin.", "interaction_modal.description.reply": "Le cunntas air Mastodon, ’s urrainn dhut freagairt a chur dhan phost seo.", + "interaction_modal.login.action": "Thoir dhachaigh mi", + "interaction_modal.login.prompt": "Àrainn-lìn an fhrithealaiche dachaigh agad, can ailbhean.co-shaoghal.net", + "interaction_modal.no_account_yet": "Nach eil thu air Mastodon?", "interaction_modal.on_another_server": "Air frithealaiche eile", "interaction_modal.on_this_server": "Air an frithealaiche seo", + "interaction_modal.sign_in": "Cha deach do chlàradh a-steach air an fhrithealaiche seo. Càit a bheil an cunntas agad ’ga òstadh?", + "interaction_modal.sign_in_hint": "Gliocas: Seo an làrach-lìn far an do chlàraich thu. Mur eil cuimhne agad dè bh’ ann, thoir sùil air a’ phost-d fàilteachaidh sa bhogsa a-steach agad. ’S urrainn dhut an t-ainm-cleachdaiche slàn agad a chur a-steach cuideachd! (can @mise@ ailbhean.co-shaoghal.net)", + "interaction_modal.title.favourite": "Cuir am post aig {name} ris na h-annsachdan", "interaction_modal.title.follow": "Lean {name}", "interaction_modal.title.reblog": "Brosnaich am post aig {name}", "interaction_modal.title.reply": "Freagair dhan phost aig {name}", @@ -318,6 +336,8 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "Gluais sìos air an liosta", "keyboard_shortcuts.enter": "Fosgail post", + "keyboard_shortcuts.favourite": "Cuir am post ris na h-annsachdan", + "keyboard_shortcuts.favourites": "Fosgail liosta nan annsachdan", "keyboard_shortcuts.federated": "Fosgail an loidhne-ama cho-naisgte", "keyboard_shortcuts.heading": "Ath-ghoiridean a’ mheur-chlàir", "keyboard_shortcuts.home": "Fosgail loidhne-ama na dachaigh", @@ -348,6 +368,7 @@ "lightbox.previous": "Air ais", "limited_account_hint.action": "Seall a’ phròifil co-dhiù", "limited_account_hint.title": "Chaidh a’ phròifil seo fhalach le maoir {domain}.", + "link_preview.author": "Le {name}", "lists.account.add": "Cuir ris an liosta", "lists.account.remove": "Thoir air falbh on liosta", "lists.delete": "Sguab às an liosta", @@ -370,6 +391,7 @@ "mute_modal.hide_notifications": "A bheil thu airson na brathan fhalach on chleachdaiche seo?", "mute_modal.indefinite": "Gun chrìoch", "navigation_bar.about": "Mu dhèidhinn", + "navigation_bar.advanced_interface": "Fosgail san eadar-aghaidh-lìn adhartach", "navigation_bar.blocks": "Cleachdaichean bacte", "navigation_bar.bookmarks": "Comharran-lìn", "navigation_bar.community_timeline": "Loidhne-ama ionadail", @@ -379,6 +401,7 @@ "navigation_bar.domain_blocks": "Àrainnean bacte", "navigation_bar.edit_profile": "Deasaich a’ phròifil", "navigation_bar.explore": "Rùraich", + "navigation_bar.favourites": "Annsachdan", "navigation_bar.filters": "Faclan mùchte", "navigation_bar.follow_requests": "Iarrtasan leantainn", "navigation_bar.followed_tags": "Tagaichean hais ’gan leantainn", @@ -395,6 +418,7 @@ "not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.", "notification.admin.report": "Rinn {name} gearan mu {target}", "notification.admin.sign_up": "Chlàraich {name}", + "notification.favourite": "Chuir {name} am post agad ris na h-annsachdan", "notification.follow": "Tha {name} ’gad leantainn a-nis", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", "notification.mention": "Thug {name} iomradh ort", @@ -408,6 +432,7 @@ "notifications.column_settings.admin.report": "Gearanan ùra:", "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:", "notifications.column_settings.alert": "Brathan deasga", + "notifications.column_settings.favourite": "Annsachdan:", "notifications.column_settings.filter_bar.advanced": "Seall a h-uile roinn-seòrsa", "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", "notifications.column_settings.filter_bar.show_bar": "Seall am bàr-criathraidh", @@ -425,6 +450,7 @@ "notifications.column_settings.update": "Deasachaidhean:", "notifications.filter.all": "Na h-uile", "notifications.filter.boosts": "Brosnachaidhean", + "notifications.filter.favourites": "Annsachdan", "notifications.filter.follows": "A’ leantainn", "notifications.filter.mentions": "Iomraidhean", "notifications.filter.polls": "Toraidhean cunntais-bheachd", @@ -575,6 +601,8 @@ "server_banner.server_stats": "Stadastaireachd an fhrithealaiche:", "sign_in_banner.create_account": "Cruthaich cunntas", "sign_in_banner.sign_in": "Clàraich a-steach", + "sign_in_banner.sso_redirect": "Clàraich a-steach no clàraich leinn", + "sign_in_banner.text": "Clàraich a-steach a leantainn phròifilean no thagaichean hais, a’ cur postaichean ris na h-annsachdan ’s ’gan co-roinneadh is freagairt dhaibh. ’S urrainn dhut gnìomh a ghabhail le cunntas o fhrithealaiche eile cuideachd.", "status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}", "status.admin_domain": "Fosgail eadar-aghaidh na maorsainneachd dha {domain}", "status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd", @@ -591,12 +619,15 @@ "status.edited": "Air a dheasachadh {date}", "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{counter} turas} two {{counter} thuras} few {{counter} tursan} other {{counter} turas}}", "status.embed": "Leabaich", + "status.favourite": "Cuir ris na h-annsachdan", "status.filter": "Criathraich am post seo", "status.filtered": "Criathraichte", "status.hide": "Falaich am post", "status.history.created": "Chruthaich {name} {date} e", "status.history.edited": "Dheasaich {name} {date} e", "status.load_more": "Luchdaich barrachd dheth", + "status.media.open": "Dèan briogadh gus fhosgladh", + "status.media.show": "Dèan briogadh gus a shealltainn", "status.media_hidden": "Meadhan falaichte", "status.mention": "Thoir iomradh air @{name}", "status.more": "Barrachd", @@ -627,6 +658,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.translate": "Eadar-theangaich", "status.translated_from_with": "Air eadar-theangachadh o {lang} le {provider}", + "status.uncached_media_warning": "Chan eil ro-shealladh ri fhaighinn", "status.unmute_conversation": "Dì-mhùch an còmhradh", "status.unpin": "Dì-phrìnich on phròifil", "subscribed_languages.lead": "Cha nochd ach na postaichean sna cànanan a thagh thu air loidhnichean-ama na dachaigh ’s nan liostaichean às dèidh an atharrachaidh seo. Na tagh gin ma tha thu airson na postaichean uile fhaighinn ge b’ e dè an cànan.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 92ad9a3384..37f22be16a 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Calquera destes", "hashtag.column_settings.tag_mode.none": "Ningún destes", "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicacións}} hoxe", "hashtag.follow": "Seguir cancelo", "hashtag.unfollow": "Deixar de seguir cancelo", "home.actions.go_to_explore": "Mira do que se está a falar", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 18324463ff..6c310c60a0 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה", "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", + "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}", + "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", + "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום", "hashtag.follow": "מעקב אחר תגית", "hashtag.unfollow": "ביטול מעקב אחר תגית", "home.actions.go_to_explore": "הצגת מגמות", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 758f1b1e9a..4b32af595b 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", "hashtag.column_settings.tag_toggle": "További címkék felvétele ehhez az oszlophoz", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} résztvevő} other {{counter} résztvevő}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}} ma", "hashtag.follow": "Hashtag követése", "hashtag.unfollow": "Hashtag követésének megszüntetése", "home.actions.go_to_explore": "Felkapottak megtekintése", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index edd4ac30c2..c522ff4fb4 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu", "hashtag.column_settings.tag_mode.none": "Ekkert af þessu", "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} þátttakandi} other {{counter} þátttakendur}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} færsla} other {{counter} færslur}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} færsla} other {{counter} færslur}} í dag", "hashtag.follow": "Fylgjast með myllumerki", "hashtag.unfollow": "Hætta að fylgjast með myllumerki", "home.actions.go_to_explore": "Sjáðu hvað er í umræðunni", @@ -302,6 +305,7 @@ "home.column_settings.basic": "Einfalt", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", + "home.explore_prompt.body": "Heimastreymið þitt verður með blöndu af færslum úr myllumerkjunum sem þú hefur valið að fylgja, færslum frá fólki sem þú hefur valið að fylgja og færslum sem þau endurbirta. Ef þér finnst þetta allt of kyrrlátt, gætirðu viljað:", "home.explore_prompt.title": "Þetta er bækistöð þín innan Loðfílsins.", "home.hide_announcements": "Fela auglýsingar", "home.show_announcements": "Birta auglýsingar", @@ -315,6 +319,7 @@ "interaction_modal.on_another_server": "Á öðrum netþjóni", "interaction_modal.on_this_server": "Á þessum netþjóni", "interaction_modal.sign_in": "Þú ert ekki skráð/ur inn á þennan netþjón. Hvar er aðgangurinn þinn hýstur?", + "interaction_modal.sign_in_hint": "Ábending: Það er vefsvæðið þar sem þú skráðir þig. Ef þú manst ekki hvar, geturðu leitað að kynningarpóstinum í pósthólfinu þínu. Þú getur líka sett inn fullt notandanafn þitt (t.d. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Setja færsluna frá {name} í eftirlæti", "interaction_modal.title.follow": "Fylgjast með {name}", "interaction_modal.title.reblog": "Endurbirta færsluna frá {name}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index aedeb71785..30932946f1 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Uno o più di questi", "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Includi i tag aggiuntivi per questa colonna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} partecipante} other {{counter} partecipanti}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} post}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} post}} oggi", "hashtag.follow": "Segui l'hashtag", "hashtag.unfollow": "Smetti di seguire l'hashtag", "home.actions.go_to_explore": "Scopri cosa sia di tendenza", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 4a2473c430..1db0d5ff4a 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "いずれかを含む", "hashtag.column_settings.tag_mode.none": "これらを除く", "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める", + "hashtag.counter_by_accounts": "{count, plural, other {{counter}人投稿}}", + "hashtag.counter_by_uses": "{count, plural, other {{counter}件}}", + "hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}", "hashtag.follow": "ハッシュタグをフォローする", "hashtag.unfollow": "ハッシュタグのフォローを解除", "home.actions.go_to_explore": "話題をさがす", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index b32cf7c5fe..b0b2e68a16 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -37,7 +37,7 @@ "account.following": "팔로잉", "account.following_counter": "{counter} 팔로잉", "account.follows.empty": "이 사용자는 아직 아무도 팔로우하고 있지 않습니다.", - "account.follows_you": "날 팔로우합니다", + "account.follows_you": "나를 팔로우합니다", "account.go_to_profile": "프로필로 이동", "account.hide_reblogs": "@{name}의 부스트를 숨기기", "account.in_memoriam": "고인의 계정입니다.", @@ -201,7 +201,7 @@ "dismissable_banner.community_timeline": "여기 있는 것들은 계정이 {domain}에 있는 사람들의 최근 공개 게시물들입니다.", "dismissable_banner.dismiss": "지우기", "dismissable_banner.explore_links": "이 소식들은 오늘 소셜 웹에서 가장 많이 공유된 내용들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.", - "dismissable_banner.explore_statuses": "오늘 소셜 웹에서 호응을 얻고 있는게시물입니다. 부스트와 좋아요를 받는 새로운 게시물이 높은 순위가 됩니다", + "dismissable_banner.explore_statuses": "오늘 소셜 웹에서 호응을 얻고 있는 게시물이에요. 부스트와 좋아요를 받는 새로운 게시물이 높은 순위가 돼요.", "dismissable_banner.explore_tags": "이 해시태그들은 이 서버와 분산화된 네트워크의 다른 서버에서 사람들의 인기를 끌고 있는 것들입니다.", "dismissable_banner.public_timeline": "이것들은 {domain}에 있는 사람들이 팔로우한 사람들의 최신 게시물들입니다.", "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.", @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "어느것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", + "hashtag.counter_by_accounts": "{count, plural, other {{counter} 명의 참여자}}", + "hashtag.counter_by_uses": "{count, plural, other {{counter} 개의 게시물}}", + "hashtag.counter_by_uses_today": "오늘 {count, plural, other {{counter} 개의 게시물}}", "hashtag.follow": "해시태그 팔로우", "hashtag.unfollow": "해시태그 팔로우 해제", "home.actions.go_to_explore": "무엇이 유행인지 보기", @@ -303,7 +306,7 @@ "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:", - "home.explore_prompt.title": "이것은 마스토돈에 있는 내 본거지입니다.", + "home.explore_prompt.title": "여기가 Mastodon 이용의 본거지예요.", "home.hide_announcements": "공지사항 숨기기", "home.show_announcements": "공지사항 보기", "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", @@ -317,7 +320,7 @@ "interaction_modal.on_this_server": "이 서버에서", "interaction_modal.sign_in": "이 서버에 로그인되어 있지 않습니다. 계정이 어디에 속해 있나요?", "interaction_modal.sign_in_hint": "팁: 여러분이 가입한 사이트입니다. 만약 기억이 나지 않는다면 가입환영 이메일을 찾아보는 것도 좋습니다. 전체 사용자이름(예: @mastodon@mastodon.social)을 넣어도 됩니다!", - "interaction_modal.title.favourite": "{name} 님의 게시물을 좋아요하기", + "interaction_modal.title.favourite": "{name} 님의 게시물을 좋아하기", "interaction_modal.title.follow": "{name} 님을 팔로우", "interaction_modal.title.reblog": "{name} 님의 게시물을 부스트", "interaction_modal.title.reply": "{name} 님의 게시물에 답글", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 653396cf5c..2e02e6af0d 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -47,7 +47,10 @@ "account.mention": "Sebut @{name}", "account.moved_to": "{name} telah menandakan bahawa akaun baru mereka sekarang ialah:", "account.mute": "Bisukan @{name}", + "account.mute_notifications_short": "Redam pemberitahuan", + "account.mute_short": "Redam", "account.muted": "Dibisukan", + "account.no_bio": "Tiada penerangan diberikan.", "account.open_original_page": "Buka halaman asal", "account.posts": "Hantaran", "account.posts_with_replies": "Hantaran dan balasan", @@ -70,6 +73,7 @@ "admin.dashboard.retention.average": "Purata", "admin.dashboard.retention.cohort": "Bulan pendaftaran", "admin.dashboard.retention.cohort_size": "Pengguna baru", + "admin.impact_report.instance_accounts": "Profil akaun ini akan dipadamkan", "alert.rate_limited.message": "Sila cuba semula selepas {retry_time, time, medium}.", "alert.rate_limited.title": "Kadar terhad", "alert.unexpected.message": "Berlaku ralat di luar jangkaan.", @@ -102,6 +106,7 @@ "column.community": "Garis masa tempatan", "column.directory": "Layari profil", "column.domain_blocks": "Domain disekat", + "column.favourites": "Kegemaran", "column.follow_requests": "Permintaan ikutan", "column.home": "Laman Utama", "column.lists": "Senarai", @@ -122,6 +127,7 @@ "community.column_settings.remote_only": "Jauh sahaja", "compose.language.change": "Tukar bahasa", "compose.language.search": "Cari bahasa...", + "compose.published.open": "Buka", "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut", "compose_form.encryption_warning": "Hantaran pada Mastodon tidak disulitkan hujung ke hujung. Jangan berkongsi sebarang maklumat sensitif melalui Mastodon.", "compose_form.hashtag_warning": "Hantaran ini tidak akan disenaraikan di bawah mana-mana tanda pagar kerana ia tidak tersenarai. Hanya hantaran awam sahaja boleh dicari menggunakan tanda pagar.", @@ -158,6 +164,7 @@ "confirmations.discard_edit_media.message": "Anda belum menyimpan perubahan pada penerangan atau pratonton media. Anda ingin membuangnya?", "confirmations.domain_block.confirm": "Sekat keseluruhan domain", "confirmations.domain_block.message": "Adakah anda betul-betul, sungguh-sungguh pasti anda ingin menyekat keseluruhan {domain}? Selalunya, beberapa sekatan atau pembisuan tersasar sudah memadai dan lebih diutamakan. Anda tidak akan nampak kandungan daripada domain tersebut di mana-mana garis masa awam mahupun pemberitahuan anda. Pengikut anda daripada domain tersebut juga akan dibuang.", + "confirmations.edit.confirm": "Sunting", "confirmations.logout.confirm": "Log keluar", "confirmations.logout.message": "Adakah anda pasti anda ingin log keluar?", "confirmations.mute.confirm": "Bisukan", @@ -244,6 +251,9 @@ "filter_modal.select_filter.subtitle": "Gunakan kumpulan yang sedia ada atau mencipta kumpulan baru", "filter_modal.select_filter.title": "Tapiskan hantaran ini", "filter_modal.title.status": "Tapiskan sesuatu hantaran", + "firehose.all": "Semua", + "firehose.local": "Server ini", + "firehose.remote": "Server lain", "follow_request.authorize": "Benarkan", "follow_request.reject": "Tolak", "follow_requests.unlocked_explanation": "Walaupun akaun anda tidak dikunci, kakitangan {domain} merasakan anda mungkin ingin menyemak permintaan ikutan daripada akaun ini secara manual.", @@ -269,6 +279,7 @@ "hashtag.column_settings.tag_toggle": "Sertakan tag tambahan untuk lajur ini", "hashtag.follow": "Ikuti hashtag", "hashtag.unfollow": "Nyahikut tanda pagar", + "home.actions.go_to_suggestions": "Cari orang untuk diikuti", "home.column_settings.basic": "Asas", "home.column_settings.show_reblogs": "Tunjukkan galakan", "home.column_settings.show_replies": "Tunjukkan balasan", @@ -277,6 +288,8 @@ "interaction_modal.description.follow": "Dengan akaun pada Mastodon, anda boleh mengikut {name} untuk menerima hantaran mereka di suapan rumah anda.", "interaction_modal.description.reblog": "Dengan akaun pada Mastodon, anda boleh menggalakkan hantaran ini untuk dikongsi dengan pengikut anda.", "interaction_modal.description.reply": "Dengan akaun pada Mastodon, anda boleh membalas kepada hantaran ini.", + "interaction_modal.login.action": "Bawa saya pulang rumah", + "interaction_modal.no_account_yet": "Tak di Mastadon?", "interaction_modal.on_another_server": "Di pelayan lain", "interaction_modal.on_this_server": "Pada pelayan ini", "interaction_modal.title.follow": "Ikuti {name}", @@ -294,6 +307,7 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "Buka hantaran", + "keyboard_shortcuts.favourites": "Buka senarai kegemaran", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "Pintasan papan kekunci", "keyboard_shortcuts.home": "to open home timeline", @@ -412,12 +426,16 @@ "notifications_permission_banner.enable": "Dayakan pemberitahuan atas meja", "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan atas meja. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan atas meja melalui butang {icon} di atas setelah ia didayakan.", "notifications_permission_banner.title": "Jangan terlepas apa-apa", + "onboarding.action.back": "Bawa saya kembali", + "onboarding.actions.back": "Bawa saya kembali", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Hello #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.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": "Anda telah berjaya!", "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.", @@ -480,6 +498,7 @@ "report.placeholder": "Ulasan tambahan", "report.reasons.dislike": "Saya tidak suka", "report.reasons.dislike_description": "Inilah sesuatu yang anda tidak ingin lihat", + "report.reasons.legal": "Ia haram", "report.reasons.other": "Inilah sesuatu yang lain", "report.reasons.other_description": "Isu ini tidak sesuai untuk kategori lain", "report.reasons.spam": "Inilah spam", @@ -499,12 +518,14 @@ "report.unfollow": "Nyahikut @{name}", "report.unfollow_explanation": "Anda sedang mengikuti akaun ini. Untuk memadam siaran mereka daripada suapan berita anda, nyahikutkan mereka.", "report_notification.attached_statuses": "{count, plural, other {{count} hantaran}} dilampirkan", + "report_notification.categories.legal": "Sah", "report_notification.categories.other": "Lain-lain", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Langgaran peraturan", "report_notification.open": "Buka laporan", "search.placeholder": "Cari", "search.search_or_paste": "Cari atau tampal URL", + "search_results.accounts": "Profil", "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", @@ -520,6 +541,7 @@ "server_banner.server_stats": "Statistik pelayan:", "sign_in_banner.create_account": "Cipta akaun", "sign_in_banner.sign_in": "Daftar masuk", + "sign_in_banner.sso_redirect": "Log masuk atau mendaftar", "status.admin_account": "Buka antara muka penyederhanaan untuk @{name}", "status.admin_domain": "antara muka penyederhanaan", "status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan", @@ -539,6 +561,8 @@ "status.history.created": "{name} mencipta pada {date}", "status.history.edited": "{name} menyunting pada {date}", "status.load_more": "Muatkan lagi", + "status.media.open": "Klik untuk membuka", + "status.media.show": "Klik untuk menunjukkan", "status.media_hidden": "Media disembunyikan", "status.mention": "Sebut @{name}", "status.more": "Lagi", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 655afd5ed0..1a5dedd9ec 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} deelnemer} other {{counter} deelnemers}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bericht} other {{counter} berichten}} vandaag", "hashtag.follow": "Hashtag volgen", "hashtag.unfollow": "Hashtag ontvolgen", "home.actions.go_to_explore": "De huidige trends bekijken", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 96384b1610..62c7c5d531 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ingen av desse", "hashtag.column_settings.tag_toggle": "Inkluder fleire emneord for denne kolonna", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltaker} other {{counter} deltakere}}", + "hashtag.counter_by_uses": "{count, plural, one {ett innlegg} other {{counter} innlegg}}", + "hashtag.counter_by_uses_today": "{count, plural, one {ett innlegg} other {{counter} innlegg}} i dag", "hashtag.follow": "Fylg emneknagg", "hashtag.unfollow": "Slutt å fylgje emneknaggen", "home.actions.go_to_explore": "Sjå kva som er populært", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 71a7beaf27..85460b916e 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Enhver av disse", "hashtag.column_settings.tag_mode.none": "Ingen av disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltaker} other {{counter} deltakere}}", + "hashtag.counter_by_uses": "{count, plural, one {ett innlegg} other {{counter} innlegg}}", + "hashtag.counter_by_uses_today": "{count, plural, one {ett innlegg} other {{counter} innlegg}} i dag", "hashtag.follow": "Følg emneknagg", "hashtag.unfollow": "Slutt å følge emneknagg", "home.actions.go_to_explore": "Se hva som er populært", @@ -302,6 +305,7 @@ "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", + "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", "home.show_announcements": "Vis kunngjøring", @@ -309,8 +313,13 @@ "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.", + "interaction_modal.login.action": "Ta meg hjem", + "interaction_modal.login.prompt": "Domenet til serveren din, eks. mastodon.social", + "interaction_modal.no_account_yet": "Ennå ikke på Mastodon?", "interaction_modal.on_another_server": "På en annen server", "interaction_modal.on_this_server": "På denne serveren", + "interaction_modal.sign_in": "Du er ikke logget inn på denne serveren. Hvor har du kontoen din?", + "interaction_modal.sign_in_hint": "Tips: Det er på nettstedet der du registrerte deg. Hvis du ikke husker det, kan du se etter velkomst e-posten i innboksen. Du kan også skrive inn hele brukernavnet ditt! (eks. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favorittmarker innlegget til {name}", "interaction_modal.title.follow": "Følg {name}", "interaction_modal.title.reblog": "Fremhev {name} sitt innlegg", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 88a3460aff..7ad4829184 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} uczestnik} few {{counter} uczestnicy} many {{counter} uczestników} other {{counter} uczestników}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} z dzisiaj", "hashtag.follow": "Obserwuj hasztag", "hashtag.unfollow": "Przestań obserwować hashtag", "home.actions.go_to_explore": "Zobacz, co jest teraz popularne", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 72278ec781..2e22fbfbf0 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Qualquer destes", "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", + "hashtag.counter_by_accounts": "{count, plural,one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicação} other {{counter} publicações}} hoje", "hashtag.follow": "Seguir #etiqueta", "hashtag.unfollow": "Deixar de seguir #etiqueta", "home.actions.go_to_explore": "Veja as tendências atuais", @@ -598,6 +601,7 @@ "server_banner.server_stats": "Estatísticas do servidor:", "sign_in_banner.create_account": "Criar conta", "sign_in_banner.sign_in": "Iniciar sessão", + "sign_in_banner.sso_redirect": "Iniciar sessão ou inscrever-se", "sign_in_banner.text": "Inicie sessão para seguir perfis ou hashtags, assinalar como favorito, partilhar ou responder a publicações. Pode ainda interagir através da sua conta noutro servidor.", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_domain": "Abrir interface de moderação para {domain}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 9c155e8f62..ae893141f5 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Bilo koje od ovih", "hashtag.column_settings.tag_mode.none": "Nijedan od ovih", "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovu kolonu", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} učesnik} few {{counter} učesnika} other {{counter} učesnika}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} objava} few {{counter} objave} other {{counter} objava}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} objava} few {{counter} objave} other {{counter} objava}} danas", "hashtag.follow": "Zaprati heš oznaku", "hashtag.unfollow": "Otprati heš oznaku", "home.actions.go_to_explore": "Pogledaj šta je u trendu", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 2f6545f584..66e63c8a13 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Било које од ових", "hashtag.column_settings.tag_mode.none": "Ниједан од ових", "hashtag.column_settings.tag_toggle": "Укључи додатне ознаке за ову колону", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} учесник} few {{counter} учесника} other {{counter} учесника}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}} данас", "hashtag.follow": "Запрати хеш ознаку", "hashtag.unfollow": "Отпрати хеш ознаку", "home.actions.go_to_explore": "Погледај шта је у тренду", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 54c462c4b5..44db96cc71 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -292,6 +292,9 @@ "hashtag.column_settings.tag_mode.any": "Någon av dessa", "hashtag.column_settings.tag_mode.none": "Ingen av dessa", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltagare} other {{counter} deltagare}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}} i dag", "hashtag.follow": "Följ hashtagg", "hashtag.unfollow": "Avfölj hashtagg", "home.actions.go_to_suggestions": "Hitta personer att följa", @@ -365,7 +368,7 @@ "lists.replies_policy.title": "Visa svar till:", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", - "load_pending": "{count, plural, other {# objekt}}", + "load_pending": "{count, plural, one {# nytt objekt} other {# nya objekt}}", "loading_indicator.label": "Laddar...", "media_gallery.toggle_visible": "Växla synlighet", "moved_to_account_banner.text": "Ditt konto {disabledAccount} är för närvarande inaktiverat eftersom du flyttat till {movedToAccount}.", @@ -468,8 +471,8 @@ "poll.closed": "Stängd", "poll.refresh": "Ladda om", "poll.reveal": "Visa resultat", - "poll.total_people": "{persons, plural, one {# person} other {# personer}}", - "poll.total_votes": "{count, plural, one {1 röst} other {# röster}}", + "poll.total_people": "{count, plural, one {# person} other {# personer}}", + "poll.total_votes": "{count, plural, one {# röst} other {# röster}}", "poll.vote": "Rösta", "poll.voted": "Du röstade för detta svar", "poll.votes": "{votes, plural, one {# röst} other {# röster}}", @@ -560,7 +563,7 @@ "search_results.statuses": "Inlägg", "search_results.statuses_fts_disabled": "Att söka efter inlägg baserat på innehåll är inte aktiverat på denna Mastodon-server.", "search_results.title": "Sök efter {q}", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "search_results.total": "{count, number} {count, plural, one {resultat} other {resultat}}", "server_banner.about_active_users": "Personer som använt denna server de senaste 30 dagarna (månatligt aktiva användare)", "server_banner.active_users": "aktiva användare", "server_banner.administered_by": "Administrerad av:", @@ -632,10 +635,10 @@ "tabs_bar.home": "Hem", "tabs_bar.notifications": "Aviseringar", "time_remaining.days": "{number, plural, one {# dag} other {# dagar}} kvar", - "time_remaining.hours": "{hours, plural, one {# timme} other {# timmar}} kvar", - "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar", + "time_remaining.hours": "{number, plural, one {# timme} other {# timmar}} kvar", + "time_remaining.minutes": "{number, plural, one {# minut} other {# minuter}} kvar", "time_remaining.moments": "Återstående tillfällen", - "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar", + "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} kvar", "timeline_hint.remote_resource_not_displayed": "{resource} från andra servrar visas inte.", "timeline_hint.resources.followers": "Följare", "timeline_hint.resources.follows": "Följer", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 3d0f64bce7..d4c33ce9d4 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", + "hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}", + "hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}", + "hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้", "hashtag.follow": "ติดตามแฮชแท็ก", "hashtag.unfollow": "เลิกติดตามแฮชแท็ก", "home.actions.go_to_explore": "ดูสิ่งที่กำลังนิยม", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index bc8855a75e..f1c3d6c374 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Herhangi biri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} katılımcı} other {{counter} katılımcı}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}", + "hashtag.counter_by_uses_today": "bugün {count, plural, one {{counter} gönderi} other {{counter} gönderi}}", "hashtag.follow": "Etiketi takip et", "hashtag.unfollow": "Etiketi takibi bırak", "home.actions.go_to_explore": "Öne çıkanları gör", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index c011187577..9217219b77 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Який-небудь зі списку", "hashtag.column_settings.tag_mode.none": "Жоден зі списку", "hashtag.column_settings.tag_toggle": "Додати додаткові теґи до цього стовпчика", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} учасник} few {{counter} учасники} many {{counter} учасників} other {{counter} учасник}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}} сьогодні", "hashtag.follow": "Стежити за хештегом", "hashtag.unfollow": "Не стежити за хештегом", "home.actions.go_to_explore": "Переглянути тенденції", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index a74152e3a7..6b5533bfb0 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -104,8 +104,8 @@ "closed_registrations.other_server_instructions": "Vì Mastodon liên hợp nên bạn có thể tạo tài khoản trên máy chủ khác và vẫn tương tác với máy chủ này.", "closed_registrations_modal.description": "{domain} hiện tắt đăng ký, nhưng hãy lưu ý rằng bạn không cần một tài khoản riêng trên {domain} để sử dụng Mastodon.", "closed_registrations_modal.find_another_server": "Tìm máy chủ khác", - "closed_registrations_modal.preamble": "Mastodon liên hợp, vì vậy bất kể bạn tạo tài khoản ở đâu, bạn sẽ có thể theo dõi và tương tác với bất kỳ ai trên máy chủ này. Bạn thậm chí có thể tự mở máy chủ!", - "closed_registrations_modal.title": "Đăng ký trên Mastodon", + "closed_registrations_modal.preamble": "Mastodon liên hợp nên bất kể bạn tạo tài khoản ở đâu, bạn cũng sẽ có thể theo dõi và tương tác với mọi người trên máy chủ này. Bạn thậm chí có thể tự mở máy chủ!", + "closed_registrations_modal.title": "Đăng ký Mastodon", "column.about": "Giới thiệu", "column.blocks": "Người đã chặn", "column.bookmarks": "Đã lưu", @@ -114,7 +114,7 @@ "column.directory": "Tìm người cùng sở thích", "column.domain_blocks": "Máy chủ đã chặn", "column.favourites": "Lượt thích", - "column.firehose": "Bản tin trực tiếp", + "column.firehose": "Bảng tin", "column.follow_requests": "Yêu cầu theo dõi", "column.home": "Bảng tin", "column.lists": "Danh sách", @@ -198,12 +198,12 @@ "directory.recently_active": "Hoạt động gần đây", "disabled_account_banner.account_settings": "Cài đặt tài khoản", "disabled_account_banner.text": "Tài khoản {disabledAccount} của bạn hiện không khả dụng.", - "dismissable_banner.community_timeline": "Những tút gần đây của những người có tài khoản thuộc máy chủ {domain}.", + "dismissable_banner.community_timeline": "Đây là những tút gần đây từ những người thuộc máy chủ {domain}.", "dismissable_banner.dismiss": "Bỏ qua", "dismissable_banner.explore_links": "Những sự kiện đang được thảo luận nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.", "dismissable_banner.explore_statuses": "Những tút đang phổ biến trên máy chủ này và mạng liên hợp của nó.", "dismissable_banner.explore_tags": "Những hashtag đang được sử dụng nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.", - "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây nhất của những người trong mạng liên hợp của {domain}.", + "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây từ những người trong mạng liên hợp của {domain}.", "embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.", "embed.preview": "Nó sẽ hiển thị như vầy:", "emoji_button.activity": "Hoạt động", @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Một phần", "hashtag.column_settings.tag_mode.none": "Không chọn", "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này", + "hashtag.counter_by_accounts": "{count, plural, other {{counter} người dùng}}", + "hashtag.counter_by_uses": "{count, plural, other {{counter} tút}}", + "hashtag.counter_by_uses_today": "{count, plural, other {{counter} tút}} hôm nay", "hashtag.follow": "Theo dõi hashtag", "hashtag.unfollow": "Ngưng theo dõi hashtag", "home.actions.go_to_explore": "Khám phá xu hướng", @@ -307,13 +310,13 @@ "home.hide_announcements": "Ẩn thông báo máy chủ", "home.show_announcements": "Hiện thông báo máy chủ", "interaction_modal.description.favourite": "Với tài khoản Mastodon, bạn có thể cho người đăng biết bạn thích tút này và lưu lại tút.", - "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để nhận những tút của họ trên bảng tin của mình.", + "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để tút của họ hiện trên bảng tin của mình.", "interaction_modal.description.reblog": "Với tài khoản Mastodon, bạn có thể đăng lại tút này để chia sẻ nó với những người đang theo dõi bạn.", - "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể bình luận tút này.", + "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể trả lời tút này.", "interaction_modal.login.action": "Đăng nhập ngay", "interaction_modal.login.prompt": "Địa chỉ máy chủ của bạn, vd: mastodon.social", "interaction_modal.no_account_yet": "Chưa có tài khoản Mastodon?", - "interaction_modal.on_another_server": "Trên một máy chủ khác", + "interaction_modal.on_another_server": "Trên máy chủ khác", "interaction_modal.on_this_server": "Trên máy chủ này", "interaction_modal.sign_in": "Bạn chưa đăng nhập. Bạn đã có tài khoản ở máy chủ khác?", "interaction_modal.sign_in_hint": "Mẹo: Đó là trang web nơi bạn đã đăng ký. Nếu không nhớ, lục lại trong email của bạn. Bạn cũng có thể nhập địa chỉ Mastodon đầy đủ! (vd: @Mastodon@mastodon.social)", @@ -336,7 +339,7 @@ "keyboard_shortcuts.favourite": "Thích tút", "keyboard_shortcuts.favourites": "Mở lượt thích", "keyboard_shortcuts.federated": "mở mạng liên hợp", - "keyboard_shortcuts.heading": "Các phím tắt", + "keyboard_shortcuts.heading": "Danh sách phím tắt", "keyboard_shortcuts.home": "mở bảng tin", "keyboard_shortcuts.hotkey": "Phím tắt", "keyboard_shortcuts.legend": "hiện bảng hướng dẫn này", @@ -574,18 +577,18 @@ "report_notification.open": "Mở báo cáo", "search.no_recent_searches": "Không có tìm kiếm gần đây", "search.placeholder": "Tìm kiếm", - "search.quick_action.account_search": "Người trùng khớp {x}", + "search.quick_action.account_search": "Người có tên {x}", "search.quick_action.go_to_account": "Xem trang {x}", "search.quick_action.go_to_hashtag": "Xem hashtag {x}", "search.quick_action.open_url": "Mở liên kết trong Mastodon", - "search.quick_action.status_search": "Tút trùng khớp {x}", + "search.quick_action.status_search": "Tút nhắc đến {x}", "search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search_popout.quick_actions": "Thao tác nhanh", "search_popout.recent": "Tìm kiếm gần đây", "search_results.accounts": "Mọi người", "search_results.all": "Toàn bộ", - "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Không tìm thấy kết quả trùng khớp", + "search_results.hashtags": "Hashtag", + "search_results.nothing_found": "Không tìm thấy gì", "search_results.statuses": "Tút", "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật tính năng tìm kiếm tút.", "search_results.title": "Tìm kiếm {q}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index df30565263..052cef8b4b 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -33,9 +33,9 @@ "account.follow": "跟隨", "account.followers": "跟隨者", "account.followers.empty": "尚未有人跟隨這位使用者。", - "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}} 跟隨", + "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}跟隨", "account.following": "跟隨中", - "account.following_counter": "正在跟隨 {count, plural,one {{counter}}other {{counter} 人}}", + "account.following_counter": "正在跟隨 {count, plural, one {{counter} 人} other {{counter} 人}}", "account.follows.empty": "這位使用者尚未跟隨任何人。", "account.follows_you": "跟隨了您", "account.go_to_profile": "前往個人檔案", @@ -295,6 +295,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} 名} other {{counter} 名}}參與者", + "hashtag.counter_by_uses": "{count, plural, one {{counter} 則} other {{counter} 則}}嘟文", + "hashtag.counter_by_uses_today": "本日有 {count, plural, one {{counter} 則} other {{counter} 則}}嘟文", "hashtag.follow": "追蹤主題標籤", "hashtag.unfollow": "取消追蹤主題標籤", "home.actions.go_to_explore": "看看發生什麼新鮮事", diff --git a/config/locales/activerecord.ms.yml b/config/locales/activerecord.ms.yml index 6b84248dec..5f282702f1 100644 --- a/config/locales/activerecord.ms.yml +++ b/config/locales/activerecord.ms.yml @@ -53,3 +53,7 @@ ms: position: elevated: tidak boleh lebih tinggi daripada peranan semasa anda own_role: tidak boleh diubah dengan peranan semasa anda + webhook: + attributes: + events: + invalid_permissions: tidak boleh memasukkan acara yang anda tidak mempunyai hak untuk melakukannya diff --git a/config/locales/ar.yml b/config/locales/ar.yml index e69f3d708e..348521ae82 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -779,6 +779,7 @@ ar: approved: طلب الموافقة لازم عند إنشاء حساب none: لا أحد يمكنه إنشاء حساب open: يمكن للجميع إنشاء حساب + title: إعدادات الخادم site_uploads: delete: احذف الملف الذي تم تحميله destroyed_msg: تم حذف التحميل مِن الموقع بنجاح! @@ -1039,6 +1040,7 @@ ar: back: العودة invited_by: 'يمكنك الانضمام إلى %{domain} بفضل الدعوة التي تلقيتها من:' preamble: يتم تعيين هذه القوانين وفرضها من قبل مشرفي %{domain}. + preamble_invited: قبل المتابعة، يرجى قراءة القواعد الأساسية التي وضعها مشرفو %{domain}. title: بعض القواعد الأساسية. title_invited: لقد تلقيت دعوة. security: الأمان @@ -1142,6 +1144,7 @@ ar: domain_validator: invalid_domain: ليس بإسم نطاق صالح edit_profile: + basic_information: معلومات أساسية other: أخرى safety_and_privacy: الأمان والخصوصية errors: @@ -1264,12 +1267,17 @@ ar: overwrite: إعادة الكتابة overwrite_long: استبدال التسجيلات الحالية بالجديدة preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم. + states: + finished: تم + in_progress: قيد الإنجاز success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب + type: نوع الاستيراد types: blocking: قائمة المحظورين bookmarks: الفواصل المرجعية domain_blocking: قائمة النطاقات المحظورة following: قائمة المستخدمين المتبوعين + lists: القوائم muting: قائمة الكتم upload: تحميل invites: @@ -1315,6 +1323,7 @@ ar: mail_subscriptions: unsubscribe: complete: إلغاء الاشتراك + title: إلغاء الاشتراك media_attachments: validations: images_and_video: ليس بالإمكان إرفاق فيديو في منشور يحتوي مسبقا على صور @@ -1430,6 +1439,7 @@ ar: expired: لقد انتهى استطلاع الرأي invalid_choice: خيار التصويت الذي قُمتَ يتحديده غير موجود over_character_limit: لا يمكن أن يكون أطول من %{max} حرف لكل واحد + self_vote: لا يمكنك التصويت في استطلاعاتك الخاصة too_few_options: يجب أن يحتوي على أكثر من عنصر واحد too_many_options: لا يمكنه أن يحتوي أكثر مِن %{max} عناصر preferences: @@ -1748,12 +1758,15 @@ ar: 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: 'تم تسجيل دخولك بصفة:' verification: + here_is_how: إليك كيف ذلك verification: التحقق + verified_links: روابطك التي تم التحقق منها webauthn_credentials: add: إضافة مفتاح أمان جديد create: diff --git a/config/locales/de.yml b/config/locales/de.yml index 219231a514..e1501e1d1d 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -58,7 +58,7 @@ de: demote: Zurückstufen destroyed_msg: Daten von %{username} wurden zum Löschen in die Warteschlange eingereiht disable: Einfrieren - disable_sign_in_token_auth: Zwei-Faktor-Authentisierung (2FA) per E-Mail deaktivieren + disable_sign_in_token_auth: E-Mail-Token-Authentisierung deaktivieren disable_two_factor_authentication: Zwei-Faktor-Authentisierung (2FA) deaktivieren disabled: Eingefroren display_name: Anzeigename @@ -67,7 +67,7 @@ de: email: E-Mail-Adresse email_status: Status der E-Mail-Adresse enable: Freischalten - enable_sign_in_token_auth: Zwei-Faktor-Authentisierung (2FA) per E-Mail aktivieren + enable_sign_in_token_auth: E-Mail-Token-Authentisierung aktivieren enabled: Freigegeben enabled_msg: Konto von %{username} erfolgreich freigegeben followers: Follower @@ -200,10 +200,10 @@ de: destroy_user_role: Rolle entfernen disable_2fa_user: 2FA deaktivieren disable_custom_emoji: Eigenes Emoji deaktivieren - disable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für dieses Konto deaktivieren + disable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto deaktivieren disable_user: Benutzer*in deaktivieren enable_custom_emoji: Eigenes Emoji aktivieren - enable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für dieses Konto aktivieren + enable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto aktivieren enable_user: Benutzer*in aktivieren memorialize_account: Gedenkkonto promote_user: Benutzer*in hochstufen @@ -229,10 +229,10 @@ de: update_status: Beitrag aktualisieren update_user_role: Rolle bearbeiten actions: - approve_appeal_html: "%{name} genehmigte die Moderationsbeschlüsse von %{target}" + approve_appeal_html: "%{name} hat den Einspruch gegen eine Moderationsentscheidung von %{target} genehmigt" approve_user_html: "%{name} genehmigte die Registrierung von %{target}" assigned_to_self_report_html: "%{name} wies sich die Meldung %{target} selbst zu" - change_email_user_html: "%{name} hat die E-Mail-Adresse von %{target} geändert" + change_email_user_html: "%{name} änderte die E-Mail-Adresse von %{target}" change_role_user_html: "%{name} hat die Rolle von %{target} geändert" confirm_user_html: "%{name} bestätigte die E-Mail-Adresse von %{target}" create_account_warning_html: "%{name} sendete eine Warnung an %{target}" @@ -259,14 +259,14 @@ de: destroy_user_role_html: "%{name} löschte die Rolle %{target}" disable_2fa_user_html: "%{name} deaktivierte die Zwei-Faktor-Authentisierung für %{target}" disable_custom_emoji_html: "%{name} deaktivierte das Emoji %{target}" - disable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentisierung für %{target} deaktiviert" + disable_sign_in_token_auth_user_html: "%{name} deaktivierte die E-Mail-Token-Authentisierung für %{target}" disable_user_html: "%{name} deaktivierte den Zugang für %{target}" enable_custom_emoji_html: "%{name} aktivierte das Emoji %{target}" - enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentifizierung für %{target} aktiviert" + enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentisierung für %{target} aktiviert" enable_user_html: "%{name} aktivierte den Zugang für %{target}" memorialize_account_html: "%{name} wandelte das Konto von %{target} in eine Gedenkseite um" promote_user_html: "%{name} beförderte %{target}" - reject_appeal_html: "%{name} hat den Moderations-Beschlussantrag von %{target} abgelehnt" + reject_appeal_html: "%{name} hat den Einspruch gegen eine Moderationsentscheidung von %{target} abgelehnt" reject_user_html: "%{name} hat die Registrierung von %{target} abgelehnt" remove_avatar_user_html: "%{name} entfernte das Profilbild von %{target}" reopen_report_html: "%{name} öffnete die Meldung %{target} wieder" @@ -353,11 +353,11 @@ de: one: "%{count} ausstehender Einspruch" other: "%{count} ausstehende Einsprüche" pending_reports_html: - one: "%{count} ausstehende Meldung" - other: "%{count} ausstehende Meldungen" + one: "%{count} offene Meldung" + other: "%{count} offene Meldungen" pending_tags_html: - one: "%{count} ausstehender Hashtag" - other: "%{count} ausstehende Hashtags" + one: "%{count} ungeprüfter Hashtag" + other: "%{count} ungeprüfte Hashtags" pending_users_html: one: "%{count} unerledigte*r Benutzer*in" other: "%{count} unerledigte Benutzer*innen" @@ -386,7 +386,7 @@ de: cancel: Abbrechen confirm: Sperren permanent_action: Das Aufheben der Sperre wird keine Daten oder Beziehungen wiederherstellen. - preamble_html: Du bist dabei, %{domain} und alle Subdomains zu sperren. + preamble_html: Du bist dabei, %{domain} und seine Subdomains zu sperren. remove_all_data: Alle Inhalte, Medien und Profildaten werden für die Konten dieser Domain von deinem Server entfernt. stop_communication: Dein Server wird nicht länger mit diesen Servern kommunizieren. title: Sperre für Domain %{domain} bestätigen @@ -706,7 +706,7 @@ de: manage_rules_description: Erlaubt es Benutzer*innen, Serverregeln zu ändern manage_settings: Einstellungen verwalten manage_settings_description: Erlaubt Nutzer*innen, Einstellungen dieses Servers zu ändern - manage_taxonomies: Taxonomien verwalten + manage_taxonomies: Hashtags verwalten manage_taxonomies_description: Ermöglicht Benutzer*innen, die Trends zu überprüfen und die Hashtag-Einstellungen zu aktualisieren manage_user_access: Kontozugriff verwalten manage_user_access_description: Erlaubt es Benutzer*innen, die Zwei-Faktor-Authentisierung (2FA) anderer zu deaktivieren, ihre E-Mail-Adresse zu ändern und ihr Passwort zurückzusetzen @@ -804,7 +804,7 @@ de: delete_statuses: "%{name} entfernte die Beiträge von %{target}" disable: "%{name} fror das Konto von %{target} ein" mark_statuses_as_sensitive: "%{name} hat die Beiträge von %{target} mit einer Inhaltswarnung versehen" - none: "%{name} sendete eine Warnung an %{target}" + none: "%{name} hat eine Warnung an %{target} gesendet" sensitive: "%{name} versah das Konto von %{target} mit einer Inhaltswarnung" silence: "%{name} schaltete das Konto von %{target} stumm" suspend: "%{name} sperrte das Konto von %{target}" @@ -846,7 +846,7 @@ de: disallow_provider: Herausgeber*in verbieten no_link_selected: Keine Links wurden geändert, da keine ausgewählt wurden publishers: - no_publisher_selected: Keine Herausgeber wurden geändert, da keine ausgewählt wurden + no_publisher_selected: Keine Herausgeber*innen wurden geändert, da keine ausgewählt wurden shared_by_over_week: one: In den vergangenen 7 Tagen von einem Profil geteilt other: In den vergangenen 7 Tagen von %{count} Profilen geteilt @@ -874,16 +874,16 @@ de: other: "%{friendly_count}-mal geteilt oder favorisiert" title: Angesagte Beiträge tags: - current_score: Aktuelle Punktzahl %{score} + current_score: 'Aktueller Score: %{score}' dashboard: - tag_accounts_measure: eindeutige Verwendungen + tag_accounts_measure: Profile tag_languages_dimension: Häufigste Sprachen tag_servers_dimension: Aktivste Server - tag_servers_measure: verschiedene Server - tag_uses_measure: Gesamtnutzungen + tag_servers_measure: Server + tag_uses_measure: insgesamt description_html: Diese Hashtags werden derzeit in vielen Beiträgen verwendet, die dein Server sieht. Dies kann deinen Nutzer*innen helfen, herauszufinden, worüber die Leute im Moment am meisten schreiben. Hashtags werden erst dann öffentlich angezeigt, wenn du sie genehmigst. listable: Kann vorgeschlagen werden - no_tag_selected: Keine Tags wurden geändert, da keine ausgewählt wurden + no_tag_selected: Keine Hashtags wurden geändert, da keine ausgewählt wurden not_listable: Wird nicht vorgeschlagen not_trendable: Wird in den Trends nicht angezeigt not_usable: Kann nicht verwendet werden @@ -894,8 +894,8 @@ de: usable: Darf verwendet werden usage_comparison: Heute %{today}-mal und gestern %{yesterday}-mal verwendet used_by_over_week: - one: In der letzten Woche von einem Profil verwendet - other: In der letzten Woche von %{count} Profilen verwendet + one: In den vergangenen 7 Tagen von einem Profil verwendet + other: In den vergangenen 7 Tagen von %{count} Profilen verwendet title: Trends trending: Angesagt warning_presets: @@ -934,9 +934,9 @@ de: sensitive: das Markieren des Kontos mit einer Inhaltswarnung silence: das Beschränken des Kontos suspend: um deren Konto zu sperren - body: "%{target} hat etwas gegen eine Moderationsentscheidung von %{action_taken_by} vom %{date}, die %{type} war. Die Person schrieb:" - next_steps: Du kannst dem Einspruch zustimmen, womit die Entscheidung der Moderation rückgängig gemacht wird, oder ihn ignorieren. - subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung von %{instance} eingelegt" + body: "%{target} erhebt Einspruch gegen eine Moderationsentscheidung von %{action_taken_by} vom %{date} (%{type}). Folgendes wurde geschrieben:" + next_steps: Du kannst dem Einspruch zustimmen, um die Moderationsentscheidung rückgängig zu machen, oder ihn ignorieren. + subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung auf %{instance} erhoben" new_pending_account: body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen. subject: Neues Konto zur Überprüfung auf %{instance} verfügbar (%{username}) @@ -1000,7 +1000,7 @@ de: delete_account: Konto löschen delete_account_html: Falls du dein Konto endgültig löschen möchtest, kannst du das hier vornehmen. Du musst dies zusätzlich bestätigen. description: - prefix_invited_by_user: "@%{name} lädt dich ein, diesem Server von Mastodon beizutreten!" + prefix_invited_by_user: "@%{name} lädt dich ein, diesem Mastodon-Server beizutreten!" prefix_sign_up: Registriere dich noch heute bei Mastodon! suffix: Mit einem Konto kannst du Profilen folgen, neue Beiträge veröffentlichen, Nachrichten mit Personen von jedem Mastodon-Server austauschen und vieles mehr! didnt_get_confirmation: Keinen Bestätigungslink erhalten? @@ -1050,7 +1050,7 @@ de: sign_up: manual_review: Registrierungen für den Server %{domain} werden manuell durch unsere Moderator*innen überprüft. Um uns dabei zu unterstützen, schreibe etwas über dich und sage uns, weshalb du ein Konto auf %{domain} anlegen möchtest. preamble: Mit einem Konto auf diesem Mastodon-Server kannst du jeder anderen Person im Netzwerk folgen, unabhängig davon, wo ihr Konto registriert ist. - title: Okay, lass uns dein Konto auf %{domain} einrichten. + title: Lass uns dein Konto auf %{domain} einrichten. status: account_status: Kontostatus confirming: Auf die Bestätigung deiner E-Mail-Adresse wird gewartet. @@ -1434,8 +1434,8 @@ de: subject: "%{name} bearbeitete einen Beitrag" notifications: email_events: Benachrichtigungen per E-Mail - email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen erhalten möchtest:' - other_settings: Weitere Einstellungen + email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen per E-Mail erhalten möchtest:' + other_settings: Erweitere Einstellungen number: human: decimal_units: @@ -1579,7 +1579,7 @@ de: migrate: Kontoumzug notifications: Benachrichtigungen preferences: Einstellungen - profile: Öffentliches Profil + profile: Profil relationships: Follower und Folge ich statuses_cleanup: Automatische Löschung strikes: Maßnahmen @@ -1628,8 +1628,8 @@ de: title: "%{name}: „%{quote}“" visibilities: direct: Direktnachricht - private: Nur eigene Follower - private_long: Nur für deine eigenen Follower sichtbar + private: Nur Follower + private_long: Nur für deine Follower sichtbar public: Öffentlich public_long: Für alle sichtbar unlisted: Nicht gelistet @@ -1643,8 +1643,8 @@ de: ignore_reblogs: Geteilte Beiträge ignorieren interaction_exceptions: Ausnahmen basierend auf Interaktionen interaction_exceptions_explanation: Beachte, dass Beiträge nicht gelöscht werden, sobald deine Grenzwerte für Favoriten oder geteilte Beiträge einmal überschritten wurden – auch dann nicht, wenn diese Schwellenwerte mittlerweile nicht mehr erreicht werden. - keep_direct: Direktnachrichten behalten - keep_direct_hint: Löscht keine deiner privaten Nachrichten + keep_direct: Private Nachrichten behalten + keep_direct_hint: Löscht keinen deiner Beiträge, die nur für erwähnte Profile sichtbar sind keep_media: Beiträge mit Medien behalten keep_media_hint: Löscht keinen deiner Beiträge mit Medieninhalten keep_pinned: Angeheftete Beiträge behalten @@ -1772,8 +1772,8 @@ de: verification: extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. here_is_how: So funktioniert's - hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt und zeigen einen visuellen Hinweis an." - instructions_html: Kopiere und füge den untenstehenden Code in das HTML deiner Website ein. Füge anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil hinzu und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. + hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an." + instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend diese Website-Adresse in eines der Felder für die Metadaten deines Profils ein – und speichere die Änderungen. verification: Verifizierung verified_links: Deine verifizierten Links webauthn_credentials: diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index b63e73a736..722ca01608 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -82,8 +82,8 @@ de: success: Du hast dich erfolgreich mit deinem Konto %{kind} angemeldet. passwords: no_token: Du kannst diese Seite nur über den Link aus der E-Mail zum Zurücksetzen des Passworts aufrufen. Wenn du einen solchen Link aufgerufen hast, vergewissere dich bitte, dass du die vollständige Adresse aufrufst. - send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Passwort zurücksetzen kannst. - send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Passwort zurücksetzen kannst. + send_instructions: Du erhältst in wenigen Minuten eine E-Mail, sofern deine Adresse unserer Datenbank bekannt ist. In dieser Nachricht befindet sich ein Link. Wenn du diesen aufrufst, kannst du dein Passwort zurücksetzen. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner. + send_paranoid_instructions: Du erhältst in wenigen Minuten eine E-Mail, sofern deine Adresse unserer Datenbank bekannt ist. In dieser Nachricht befindet sich ein Link. Wenn du diesen aufrufst, kannst du dein Passwort zurücksetzen. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner. updated: Dein Passwort wurde erfolgreich geändert. Du bist jetzt angemeldet. updated_not_active: Dein Passwort wurde erfolgreich geändert. registrations: @@ -100,8 +100,8 @@ de: signed_in: Erfolgreich angemeldet. signed_out: Erfolgreich abgemeldet. unlocks: - send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. - send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. + send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner. + send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner. unlocked: Dein Konto wurde erfolgreich entsperrt. Bitte melde dich an, um fortzufahren. errors: messages: diff --git a/config/locales/devise.ms.yml b/config/locales/devise.ms.yml index c1165e47da..30eceb239d 100644 --- a/config/locales/devise.ms.yml +++ b/config/locales/devise.ms.yml @@ -81,17 +81,39 @@ ms: failure: Tidak dapat mengesahkan anda daripada %{kind} disebabkan oleh “%{reason}”. success: Berjaya disahkan daripada akaun %{kind}. passwords: + no_token: Anda tidak boleh mengakses halaman ini tanpa datang daripada e-mel tetapan semula kata laluan. Jika anda datang daripada e-mel tetapan semula kata laluan, sila pastikan anda menggunakan URL penuh yang disediakan. + send_instructions: Jika alamat e-mel anda wujud dalam pangkalan data kami, anda akan menerima pautan pemulihan kata laluan di alamat e-mel anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini. + send_paranoid_instructions: Jika alamat e-mel anda wujud dalam pangkalan data kami, anda akan menerima pautan pemulihan kata laluan di alamat e-mel anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini. updated: Kata laluan anda telah berjaya ditukar. Anda telah didaftar masuk. updated_not_active: Kata laluan anda telah berjaya ditukar. registrations: destroyed: Selamat tinggal! Akaun anda telah berjaya dibatalkan. Kami harap berjumpa lagi. signed_up: Selamat datang! Anda telah berjaya mendaftar. signed_up_but_inactive: Anda telah berjaya mendaftar. Namun, kami tidak dapat mendaftar masuk anda kerana akaun anda belum diaktifkan. + signed_up_but_locked: Anda telah berjaya mendaftar. Walau bagaimanapun, kami tidak dapat melog masuk anda kerana akaun anda dikunci. + signed_up_but_pending: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Selepas anda mengklik pautan, kami akan menyemak permohonan anda. Anda akan dimaklumkan jika ia diluluskan. + signed_up_but_unconfirmed: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Sila ikuti pautan untuk mengaktifkan akaun anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini. + update_needs_confirmation: Anda berjaya mengemas kini akaun anda, tetapi kami perlu mengesahkan alamat e-mel baharu anda. Sila semak e-mel anda dan ikuti pautan pengesahan untuk mengesahkan alamat e-mel baharu anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini. + updated: Akaun anda telah berjaya dikemas kini. sessions: already_signed_out: Daftar keluar berjaya. signed_in: Daftar masuk berjaya. signed_out: Daftar keluar berjaya. + unlocks: + send_instructions: Anda akan menerima e-mel dengan arahan tentang cara membuka kunci akaun anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini. + send_paranoid_instructions: Jika akaun anda wujud, anda akan menerima e-mel dengan arahan cara membuka kuncinya dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini. + unlocked: Akaun anda telah berjaya dibuka. Sila log masuk untuk meneruskan. errors: messages: already_confirmed: sudah disahkan, sila cuba mendaftar masuk + confirmation_period_expired: perlu disahkan dalam %{period}, sila minta yang baharu + expired: telah tamat tempoh, sila minta yang baharu not_found: tidak dijumpai + not_locked: tidak dikunci + not_saved: + other: |- + satu + 1 ralat melarang %{resource} ini daripada disimpan: + + Lain-lain + %{count} ralat melarang %{resource} ini daripada disimpan: diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index a396742d84..8d36a3f06e 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -127,6 +127,7 @@ ar: bookmarks: الفواصل المرجعية conversations: المحادثات crypto: التشفير من الطرف إلى نهاية الطرف + favourites: المفضلة filters: عوامل التصفية follow: الإشتراكات والحسابات المكتومة والحسابات المحجوبة follows: الإشتراكات diff --git a/config/locales/doorkeeper.gd.yml b/config/locales/doorkeeper.gd.yml index 2541fce889..4db4497b4e 100644 --- a/config/locales/doorkeeper.gd.yml +++ b/config/locales/doorkeeper.gd.yml @@ -127,6 +127,7 @@ gd: bookmarks: Comharran-lìn conversations: Còmhraidhean crypto: Crioptachadh o cheann gu ceann + favourites: Annsachdan filters: Criathragan follow: Leantainn, mùchaidhean is bacaidhean follows: Leantainn @@ -146,47 +147,49 @@ gd: application: title: Tha feum air ùghdarrachadh OAuth scopes: - admin:read: dàta sam bith a leughadh air an fhrithealaiche - admin:read:accounts: fiosrachadh dìomhair air a h-uile cunntas a leughadh - admin:read:canonical_email_blocks: fiosrachadh dìomhair air a h-uile bacadh puist-d gnàthach a leughadh - admin:read:domain_allows: fiosrachadh dìomhair air a h-uile cead àrainne a leughadh - admin:read:domain_blocks: fiosrachadh dìomhair air a h-uile bacadh àrainne a leughadh - admin:read:email_domain_blocks: fiosrachadh dìomhair air a h-uile bacadh àrainn puist-d a leughadh - admin:read:ip_blocks: fiosrachadh dìomhair air a h-uile bacadh IP a leughadh - admin:read:reports: fiosrachadh dìomhair air a h-uile gearan is cunntasan a chaidh a ghearan mun dèidhinn a leughadh - admin:write: dàta sam bith atharrachadh air an fhrithealaiche - admin:write:accounts: gnìomhan na maorsainneachd a ghabhail air cunntasan - admin:write:canonical_email_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean puist-d gnàthach - admin:write:domain_allows: gnìomhan na maorsainneachd a ghabhail air ceadan àrainn - admin:write:domain_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean àrainne - admin:write:email_domain_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean àrainn puist-d - admin:write:ip_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean IP - admin:write:reports: gnìomhan na maorsainneachd a ghabhail air gearanan - crypto: crioptachadh o cheann gu ceann a chleachdadh - follow: dàimhean chunntasan atharrachadh - push: na brathan putaidh agad fhaighinn - read: dàta sam bith a’ cunntais agad a leughadh - read:accounts: fiosrachadh nan cunntasan fhaicinn - read:blocks: na bacaidhean agad fhaicinn - read:bookmarks: na comharran-lìn agad fhaicinn - read:filters: na criathragan agad fhaicinn - read:follows: faicinn cò a tha thu a’ leantainn - read:lists: na liostaichean agad fhaicinn - read:mutes: na mùchaidhean agad fhaicinn - read:notifications: na brathan agad faicinn - read:reports: na gearanan agad fhaicinn - read:search: lorg a dhèanamh às do leth - read:statuses: na postaichean uile fhaicinn - write: dàta sam bith a’ cunntais agad atharrachadh - write:accounts: a’ phròifil agad atharrachadh - write:blocks: cunntasan is àrainnean a bhacadh - write:bookmarks: comharran-lìn a dhèanamh de phostaichean - write:conversations: còmhraidhean a mhùchadh is a sguabadh às - write:filters: criathragan a chruthachadh + admin:read: leughadh dàta sam bith air an fhrithealaiche + admin:read:accounts: leughadh fiosrachaidh dhìomhair air a h-uile cunntas + admin:read:canonical_email_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh puist-d gnàthach + admin:read:domain_allows: leughadh fiosrachaidh dhìomhair air a h-uile cead àrainne + admin:read:domain_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh àrainne + admin:read:email_domain_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh àrainn puist-d + admin:read:ip_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh IP + admin:read:reports: leughadh fiosrachaidh dhìomhair air a h-uile gearan is cunntasan a chaidh a ghearan mun dèidhinn + admin:write: atharrachadh dàta sam bith air an fhrithealaiche + admin:write:accounts: gnìomhan na maorsainneachd air cunntasan + admin:write:canonical_email_blocks: gnìomhan na maorsainneachd air bacaidhean puist-d gnàthach + admin:write:domain_allows: gnìomhan na maorsainneachd air ceadan àrainn + admin:write:domain_blocks: gnìomhan na maorsainneachd air bacaidhean àrainne + admin:write:email_domain_blocks: gnìomhan na maorsainneachd air bacaidhean àrainn puist-d + admin:write:ip_blocks: gnìomhan na maorsainneachd air bacaidhean IP + admin:write:reports: gnìomhan na maorsainneachd air gearanan + crypto: cleachdadh crioptachaidh o cheann gu ceann + follow: atharrachadh dàimhean chunntasan + push: faighinn nam brathan putaidh agad + read: leughadh dàta sam bith a’ cunntais agad + read:accounts: sealltainn fiosrachadh nan cunntasan + read:blocks: sealltainn nam bacaidhean agad + read:bookmarks: sealltainn nan comharran-lìn agad + read:favourites: sealltainn nan annsachdan agad + read:filters: sealltainn nan criathragan agad + read:follows: sealltainn cò a tha thu a’ leantainn + read:lists: sealltainn nan liostaichean agad + read:mutes: sealltainn nam mùchaidhean agad + read:notifications: sealltainn nam brathan agad + read:reports: sealltainn nan gearanan agad + read:search: lorg às do leth + read:statuses: sealltainn nam postaichean uile + write: atharrachadh dàta sam bith a’ cunntais agad + write:accounts: atharrachadh na pròifile agad + write:blocks: bacadh chunntasan is àrainnean + write:bookmarks: cruthachadh chomharran-lìn de phostaichean + write:conversations: mùchadh is sguabadh às chòmhraidhean + write:favourites: cur phostaichean ris na h-annsachdan + write:filters: cruthachadh chriathragan write:follows: leantainn dhaoine - write:lists: liostaichean a chruthachadh - write:media: faidhlichean meadhain a luchdadh suas - write:mutes: daoine is còmhraidhean a mhùchadh - write:notifications: na brathan agad fhalamhachadh - write:reports: gearan a dhèanamh mu chàch - write:statuses: postaichean fhoillseachadh + write:lists: cruthachadh liostaichean + write:media: luchdadh suas fhaidhlichean meadhain + write:mutes: mùchadh dhaoine is chòmhraidhean + write:notifications: falamhachadh nam brathan agad + write:reports: gearan mu chàch + write:statuses: foillseachadh phostaichean diff --git a/config/locales/doorkeeper.ms.yml b/config/locales/doorkeeper.ms.yml index c8d3043298..32fb0044bb 100644 --- a/config/locales/doorkeeper.ms.yml +++ b/config/locales/doorkeeper.ms.yml @@ -4,21 +4,103 @@ ms: attributes: doorkeeper/application: name: Nama aplikasi + redirect_uri: Ubah hala URI + scopes: Skop + website: Laman web permohonan + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: tidak boleh mengandungi serpihan. + invalid_uri: mestilah URI yang sah. + relative_uri: mestilah URI mutlak. + secured_uri: mestilah URI HTTPS/SSL. doorkeeper: applications: buttons: + authorize: Benarkan cancel: Batal + destroy: Musnah edit: Sunting submit: Hantar confirmations: destroy: Anda pasti? + edit: + title: Mengedit permohonan + form: + error: Alamak! Semak borang anda untuk kemungkinan kesilapan + help: + native_redirect_uri: Gunakan %{native_redirect_uri} untuk ujian tempatan + redirect_uri: Gunakan satu barisan setiap URI + scopes: Asingkan skop dengan ruang. Biarkan kosong untuk menggunakan skop lalai. index: + application: Aplikasi + callback_url: URL callback delete: Padam + empty: Anda tidak mempunyai aplikasi. name: Nama + new: Aplikasi baru + scopes: Skop show: Paparkan + title: Aplikasi anda + new: + title: Aplikasi baru + show: + actions: Tindakan + application_id: Kunci klien + callback_urls: URLs Callback + scopes: Skop + secret: Rahsia klien + title: 'Aplikasi: %{name}' + authorizations: + buttons: + authorize: Benarkan + deny: Nafikan + error: + title: Ralat telah berlaku + new: + prompt_html: "%{client_name} ingin mendapatkan kebenaran untuk mengakses akaun anda. Ia adalah aplikasi pihak ketiga. Jika anda tidak mempercayainya, maka anda tidak seharusnya membenarkannya." + review_permissions: Semak kebenaran + title: Kebenaran diperlukan + show: + title: Salin kod kebenaran ini dan tampalkannya pada aplikasi. authorized_applications: + buttons: + revoke: Batalkan + confirmations: + revoke: Adakah anda pasti? index: + authorized_at: Dibenarkan on %{date} + description_html: Ini adalah aplikasi yang boleh mengakses akaun lalui kegunaan API. Jika terdapat aplikasi yang anda tidak kenali di sini, atau aplikasi tidak berfungsi, anda boleh membatalkan aksesnya. + last_used_at: Terakhir digunakan pada %{date} + never_used: Tidak pernah digunakan + scopes: Kebenaran superapp: Dalaman + title: Aplikasi anda your dibenarkan + errors: + messages: + access_denied: Pemilik sumber atau server kebenaran menolak permintaan. + credential_flow_not_configured: Carian Pemilik Sumber gagal kerana Doorkeeper.configure.resource_owner_authenticator tidak dikonfigurasikan. + invalid_client: Pengesahan pelanggan gagal disebabkan oleh pelanggan yang tidak diketahui, tiada pengesahan pelanggan disertakan atau kaedah pengesahan yang tidak disokong. + invalid_grant: Pemberian kebenaran yang diberikan adalah tidak sah, tamat tempoh, dibatalkan, tidak sepadan dengan URI pengalihan yang digunakan dalam permintaan kebenaran atau telah dikeluarkan kepada klien lain. + invalid_redirect_uri: Uri ubah hala yang disertakan tidak sah. + invalid_request: + missing_param: 'Parameter yang diperlukan hilang: %{value}.' + request_not_authorized: Permintaan perlu dibenarkan. Parameter yang diperlukan untuk membenarkan permintaan tiada atau tidak sah. + unknown: Permintaan itu tidak mempunyai parameter yang diperlukan, termasuk nilai parameter yang tidak disokong, atau sebaliknya salah bentuk. + invalid_resource_owner: Bukti kelayakan pemilik sumber yang diberikan tidak sah atau pemilik sumber tidak dapat ditemui + invalid_scope: Skop yang diminta tidak sah, tidak diketahui atau salah bentuk. + invalid_token: + expired: Token akses telah tamat tempoh + revoked: Token akses telah dibatalkan + unknown: Token akses tidak sah + resource_owner_authenticator_not_configured: Carian Pemilik Sumber gagal kerana Doorkeeper.configure.resource_owner_authenticator tidak dikonfigurasikan. + server_error: Server kebenaran mengalami keadaan yang tidak dijangka yang menghalangnya daripada memenuhi permintaan. + temporarily_unavailable: Server kebenaran pada masa ini tidak dapat mengendalikan permintaan kerana beban berlebihan sementara atau penyelenggaraan server. + unauthorized_client: Klien tidak dibenarkan untuk melaksanakan permintaan ini menggunakan kaedah ini. + unsupported_grant_type: Jenis pemberian kebenaran tidak disokong oleh server kebenaran. + unsupported_response_type: Server kebenaran tidak menyokong jenis respons ini. flash: applications: create: @@ -27,25 +109,87 @@ ms: notice: Aplikasi dipadamkan. update: notice: Aplikasi dikemaskini. + authorized_applications: + destroy: + notice: Aplikasi dipadamkan. grouped_scopes: + access: + read: Akses baca sahaja + read/write: Akses baca dan tulis + write: Akses tulis sahaja title: accounts: Akaun admin/accounts: Pengurusan akaun admin/all: Semua fungsi pengurusan admin/reports: Pengurusan laporan + all: Akses penuh ke akaun Mastodon anda + blocks: Blok + bookmarks: Penanda buku conversations: Perbualan + crypto: Penyulitan hujung ke hujung + favourites: Kegemaran + filters: Penapis + follow: Ikut, Senyap dan Blok follows: Ikutan + lists: Senarai media: Lampiran media + mutes: Senyapkan notifications: Pemberitahuan push: Pemberitahuan segera reports: Laporan search: Cari statuses: Hantaran + layouts: + admin: + nav: + applications: Aplikasi + oauth2_provider: Pembekal OAuth2 + application: + title: Keizinan OAuth diperlukan scopes: admin:read: baca semua data pada pelayan admin:read:accounts: baca maklumat sensitif untuk semua akaun + admin:read:canonical_email_blocks: baca maklumat sensitif semua blok e-mel kanonik + admin:read:domain_allows: baca maklumat sensitif semua domain yang dibenarkan + admin:read:domain_blocks: baca maklumat sensitif semua blok domain + admin:read:email_domain_blocks: baca maklumat sensitif semua blok domain e-mel + admin:read:ip_blocks: baca maklumat sensitif semua blok IP admin:read:reports: baca maklumat sensitif untuk semua laporan dan akaun-akaun yang dilaporkan admin:write: mengubah semua data pada pelayan + admin:write:accounts: melakukan tindakan penyederhanaan pada akaun + admin:write:canonical_email_blocks: melakukan tindakan penyederhanaan pada blok e-mel kanonik + admin:write:domain_allows: melakukan tindakan penyederhanaan pada domain yang dibenarkan + admin:write:domain_blocks: melakukan tindakan penyederhanaan pada blok domain + admin:write:email_domain_blocks: melakukan tindakan penyederhanaan pada blok domain e-mel + admin:write:ip_blocks: melakukan tindakan penyederhanaan pada blok IP + admin:write:reports: melakukan tindakan penyederhanaan ke atas laporan + crypto: gunakan penyulitan hujung ke hujung + follow: mengubah suai perhubungan akaun + push: terima pemberitahuan tolak anda + read: baca semua data akaun anda + read:accounts: lihat maklumat akaun + read:blocks: lihat blok anda + read:bookmarks: lihat penanda halaman anda + read:favourites: lihat kegemaran anda + read:filters: lihat penapis anda + read:follows: lihat senarai yang anda ikuti + read:lists: lihat senarai anda + read:mutes: lihat senarai yang anda senyapkan + read:notifications: lihat notifikasi anda + read:reports: lihat laporan anda + read:search: cari bagi pihak anda read:statuses: lihat semua hantaran + write: ubahsuai semua data akaun anda + write:accounts: ubaisuai profail anda + write:blocks: domain dan akaun blok write:bookmarks: menandabuku hantaran + write:conversations: senyapkan dan padamkan perbualan + write:favourites: pos kesukaan + write:filters: cipta penapis + write:follows: ikut orang + write:lists: cipta senarai + write:media: memuat naik fail media + write:mutes: membisukan orang dan perbualan + write:notifications: kosongkan pemberitahuan anda + write:reports: melaporkan orang lain write:statuses: terbitkan hantaran diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 0ce2c4c30f..e08939e146 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -798,6 +798,7 @@ gd: approved: Tha aontachadh riatanach airson clàradh none: Chan fhaod neach sam bith clàradh open: "’S urrainn do neach sam bith clàradh" + title: Roghainnean an fhrithealaiche site_uploads: delete: Sguab às am faidhle a chaidh a luchdadh suas destroyed_msg: Chaidh an luchdadh suas dhan làrach a sguabadh às! @@ -1314,12 +1315,14 @@ gd: bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur an àite nan comharra-lìn agad. domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. + lists_html: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{total_items}cunntas(an) a chur ri liostaichean ùra. muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur an àite liosta nan cunntasan mùchte agad. preambles: blocking_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a bhacadh. bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur ris na h-annsachdan agad. domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a bhacadh. following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a leantainn. + lists_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a mhùchadh. preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh." recent_imports: Ion-phortaidhean o chionn goirid @@ -1336,6 +1339,7 @@ gd: bookmarks: Ag ion-phortadh comharran-leabhair domain_blocking: Ag ion-phortadh àrainnean bacte following: Ion-phortaich cunntasan ’gan leantainn + lists: Ag ion-phortadh liostaichean muting: Ag ion-phortadh cunntasan mùchte type: Seòrsa an ion-phortaidh type_groups: @@ -1346,6 +1350,7 @@ gd: bookmarks: Comharran-lìn domain_blocking: Liosta-bhacaidh àrainnean following: Liosta dhen fheadhainn a leanas tu + lists: Liostaichean muting: Liosta a’ mhùchaidh upload: Luchdaich suas invites: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 678dbcd762..e7d20891b7 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -89,6 +89,7 @@ ms: moderation: active: Aktif all: Semua + disabled: Dimatikan pending: Menunggu silenced: Terhad suspended: Digantungkan @@ -113,12 +114,15 @@ ms: redownloaded_msg: Berjaya segarkan semula profil %{username} daripada asalnya reject: Tolak rejected_msg: Berjaya menolak permohonan pendaftaran %{username} + remote_suspension_irreversible: Data akaun ini telah dipadamkan secara tidak dapat dipulihkan. remove_avatar: Buang avatar remove_header: Buang pengepala removed_avatar_msg: Berjaya membuang imej avatar %{username} removed_header_msg: Berjaya membuang imej pengepala %{username} resend_confirmation: already_confirmed: Pengguna ini telah disahkan + send: Hantar semula pautan pengesahan + success: Pautan pengesahan berjaya dihantar! reset: Tetapkan semula reset_password: Tetapkan semula kata laluan resubscribe: Langgan semula @@ -126,6 +130,7 @@ ms: search: Cari search_same_email_domain: Pengguna lain dengan domain e-mel yang sama search_same_ip: Pengguna lain dengan alamat IP yang sama + security: Keselamatan security_measures: only_password: Kata laluan sahaja password_and_2fa: Kata laluan dan 2FA @@ -369,6 +374,12 @@ ms: undo: Buang kebenaran persekutuan dengan domain domain_blocks: add_new: Tambah penyekatan domain baharu + confirm_suspension: + cancel: Batal + confirm: Gantung + permanent_action: Membuat asal penggantungan tidak akan memulihkan sebarang data atau perhubungan. + preamble_html: Anda akan menggantung %{domain} dan subdomainnya. + remove_all_data: Ini akan mengalih keluar semua kandungan, media dan data profil untuk akaun domain ini daripada sever anda. created_msg: Sekatan domain sedang diproses destroyed_msg: Sekatan domain telah diundurkan domain: Domain @@ -414,6 +425,7 @@ ms: resolve: Menyelesaikan domain title: Sekat domain e-mel baharu no_email_domain_block_selected: Tiada sekatan domain e-mel diubah kerana tiada yang dipilih + not_permitted: Tidak dibenarkan resolved_through_html: Diselesaikan melalui %{domain} title: Domain e-mel disekat export_domain_allows: @@ -423,6 +435,9 @@ ms: export_domain_blocks: import: existing_relationships_warning: Hubungan ikut sedia ada + title: Import blok domain + new: + title: Import blok domain no_file: Tiada fail yang dipilih follow_recommendations: description_html: "Saranan ikutan membantu pengguna baharu mencari kandungan menarik dengan cepat. Apabila pengguna belum cukup berinteraksi dengan akaun lain untuk membentuk saranan ikutan tersendiri, akaun-akaun inilah yang akan disarankan. Ia dinilai semula setiap hari dari gabungan keterlibatan tertinggi terkini dan juga jumlah pengikut tempatan tertinggi mengikut bahasa masing-masing." @@ -444,7 +459,10 @@ ms: content_policies: comment: Catatan dalaman policies: + reject_media: Tolak media + reject_reports: Tolak laporan silence: Hadkan + suspend: Gantung policy: Dasar reason: Sebab awam title: Dasar kandungan @@ -454,6 +472,7 @@ ms: instance_followers_measure: pengikut kami di situ instance_follows_measure: pengikut mereka di sini instance_languages_dimension: Bahasa teratas + instance_media_attachments_measure: lampiran media yang disimpan instance_reports_measure: laporan mengenai mereka instance_statuses_measure: Hantaran yang disimpan delivery: @@ -467,6 +486,8 @@ ms: delivery_error_days: Hari ralat penghantaran delivery_error_hint: Jika penghantaran tidak berjaya selama %{count} hari, ia akan ditanda sebagai tidak boleh dihantar. empty: Tiada domain dijumpai. + known_accounts: + other: "%{count} akaun dikenali" moderation: all: Semua limited: Terhad @@ -538,9 +559,11 @@ ms: assign_to_self: Menugaskan kepada saya assigned: Penyederhana yang ditugaskan by_target_domain: Domain bagi akaun yang dilaporkan + cancel: Batal category: Kumpulan comment: none: Tiada + confirm: Konfirm created_at: Dilaporkan delete_and_resolve: Padam hantaran forwarded: Dipanjangkan @@ -556,6 +579,7 @@ ms: delete: Padam placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan... title: Catatan + processed_msg: 'Laporan #%{id} berjaya diproses' reopen: Buka semula laporan report: 'Laporan #%{id}' reported_account: Akaun yang dilaporkan @@ -669,6 +693,8 @@ ms: destroyed_msg: Muat naik tapak berjaya dihapuskan! statuses: account: Penulis + batch: + report: Laporan deleted: Dipadamkan favourites: Gemaran history: Sejarah versi @@ -694,16 +720,27 @@ ms: suspend: "%{name} telah menggantungkan akaun %{target}" appeal_approved: Dirayu appeal_pending: Rayuan yang belum selesai + system_checks: + sidekiq_process_check: + message_html: Tiada proses Sidekiq berjalan untuk baris gilir %{value}. Sila semak konfigurasi Sidekiq anda + upload_check_privacy_error: + message_html: "Server web anda salah konfigurasi. Privasi pengguna anda berisiko" + upload_check_privacy_error_object_storage: + message_html: "Ruang objek anda salah konfigurasi. Privasi pengguna anda berisiko" tags: review: Semak status title: Pentadbiran trends: allow: Izin approved: Diluluskan + disallow: Tidak membenarkan links: allow: Membenarkan pautan allow_provider: Membenarkan penerbit + disallow: Tidak membenarkan pautan title: Pautan yang sedang sohor kini + not_allowed_to_trend: Tidak dibenarkan menjadi trend + only_allowed: Hanya dibenarkan preview_card_providers: rejected: Pautan daripada penerbit ini tidak akan menjadi sohor kini title: Penerbit @@ -735,6 +772,7 @@ ms: delete: Padam webhooks: delete: Padam + empty: You don't have any webhook endpoints configured yet. enable: Dayakan enabled: Aktif admin_mailer: @@ -742,15 +780,24 @@ ms: actions: silence: untuk mengehadkan akaun mereka appearance: + advanced_web_interface_hint: 'Jika anda ingin menggunakan keseluruhan lebar skrin anda, antara muka web lanjutan membolehkan anda mengkonfigurasi banyak lajur berbeza untuk melihat seberapa banyak maklumat pada masa yang sama seperti yang anda mahu: Laman Utama, pemberitahuan, garis masa bersekutu, sebarang bilangan senarai dan hashteg.' + discovery: Penemuan localization: guide_link_text: Sesiapa sahaja boleh memberi sumbangan. sensitive_content: Kandungan sensitif application_mailer: notification_preferences: Tukar keutamaan e-mel + salutation: "%{name}," view: 'Lihat:' view_profile: Lihat profil view_status: Lihat hantaran + applications: + logout: Log keluar + your_token: Token akses anda auth: + apply_for_account: Minta akaun + captcha_confirmation: + title: Pemeriksaan keselamatan delete_account: Padam akaun description: prefix_sign_up: Daftar pada Mastodon hari ini! @@ -759,9 +806,19 @@ ms: login: Daftar masuk logout: Daftar keluar migrate_account: Pindah kepada akaun lain + migrate_account_html: Jika anda ingin mengubah hala akaun ini kepada akaun lain, anda boleh konfigurasikannya di sini. or_log_in_with: Atau daftar masuk dengan + progress: + confirm: Sahkan E-mel + details: Maklumat anda + providers: + cas: CAS + saml: SAML register: Daftar registration_closed: "%{instance} tidak menerima ahli-ahli baru" + rules: + accept: Terima + back: Kembali security: Keselamatan status: account_status: Status akaun @@ -774,6 +831,7 @@ ms: datetime: distance_in_words: half_a_minute: Sebentar tadi + less_than_x_seconds: Baru sahaja deletes: proceed: Padam akaun disputes: @@ -818,8 +876,11 @@ ms: '503': Halaman tidak dapat disampaikan kerana kegagalan pelayan sementara. exports: archive_takeout: + date: Tarikh in_progress: Mengkompil arkib anda... request: Minta arkib anda + size: Saiz + blocks: Blok anda csv: CSV domain_blocks: Domain disekat lists: Senarai @@ -832,6 +893,7 @@ ms: keywords: Kata kunci title: Sunting penapis index: + delete: Padam empty: Anda tiada penapis. keywords: other: "%{count} kata kunci" @@ -852,8 +914,18 @@ ms: deselect: Nyahpilih semua none: Tiada imports: + errors: + too_large: Fail terlalu besar + states: + finished: Selesai + in_progress: Dalam proses + scheduled: Dijadualkan + status: Status + types: + lists: Senarai upload: Muat naik invites: + expired: Tamat tempoh expires_in: '1800': 30 minit '21600': 6 jam @@ -867,9 +939,16 @@ ms: password: kata laluan sign_in_token: e-mel kod keselamatan webauthn: kunci keselamatan + mail_subscriptions: + unsubscribe: + title: Hentikan langganan migrations: acct: Dipindah ke + errors: + not_found: tidak dapat dicarikan proceed_with_move: Pindah pengikut + warning: + backreference_required: Akaun baharu mesti terlebih dahulu dikonfigurasikan untuk merujuk semula akaun ini notification_mailer: follow: title: Pengikut baru diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 29065db53f..b6f0d8bfe3 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -741,7 +741,7 @@ nn: preamble: Profileringa av tenaren din skil den frå andre tenarar i nettverket. Informasjonen kan bli vist ulike stadar, til dømes i Mastodon sitt web-grensesnitt, i eigne applikasjonar, i førehandsvisningar på andre nettsider, i meldingsappar og så bortetter. På grunn av dette er det best å halde informasjonen enkel, kort og treffande. title: Profilering captcha_enabled: - desc_html: Dette er avhengig av eksterne skript fra hCaptcha, som kan være et sikkerhets- og personvernproblem. I tillegg kan dette gjøre registreringsprosessen betydelig mindre tilgjengelig for noen (spesielt funksjonshemmede) personer. Av disse grunnene bør du vurdere alternative tiltak som godkjenningsbasert eller invitasjonsbasert registrering. + desc_html: Dette baserer seg på eksterne skript frå hCaptcha, noko som kan vera eit tryggleiks- og personvernsproblem. I tillegg kan dette gjera registreringsprosessen monaleg mindre tilgjengeleg (særleg for folk med nedsett funksjonsevne). Dette gjer at du bør du vurdera alternative tiltak, som til dømes godkjennings- eller invitasjonsbasert registrering. title: Krev at nye brukarar løyser ein CAPTCHA for å bekrefte kontoen sin content_retention: preamble: Styr korleis brukargenerert innhald blir lagra i Mastodon. @@ -1138,7 +1138,7 @@ nn: invalid_domain: er ikkje eit gangbart domenenamn edit_profile: basic_information: Grunnleggande informasjon - hint_html: "Tilpass hva folk ser på din offentlige profil og ved siden av dine innlegg. Det er mer sannsynlig at andre mennesker følger deg tilbake og samhandler med deg når du har fylt ut en profil og et profilbilde." + hint_html: "Tilpass kva folk ser på den offentlege profilen din og ved sida av innlegga dine. Andre vil i større grad fylgja og samhandla med deg når du har eit profilbilete og har fyllt ut profilen din." other: Anna safety_and_privacy: Sikkerheit og personvern errors: @@ -1265,14 +1265,14 @@ nn: bookmarks_html: Du skal til å byta ut bokmerka dine med opp til %{total_items} innlegg frå %{filename}. domain_blocking_html: Du skal til å byta ut domeneblokkeringslista di med opp til %{total_items} domene frå %{filename}. following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename} og slutta å fylgja alle andre. - lists_html: Du er i ferd med å erstatte dine lister med innholdet i %{filename}. Inntil %{total_items} kontoer legges til i nye lister. + lists_html: Du er i ferd med å erstatta listene dine med innhaldet i %{filename}. Opptil %{total_items} kontoar vil bli lagt til i nye lister. muting_html: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{total_items} brukarkontoar frå %{filename}. preambles: blocking_html: Du skal til å blokkera opp til %{total_items} brukarkontoar frå %{filename}. bookmarks_html: Du skal til å leggja til opp til %{total_items} innlegg frå %{filename} til bokmerka dine. domain_blocking_html: Du skal til å blokkera opp til %{total_items} domene frå %{filename}. following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename}. - lists_html: Du er i ferd med å legge inntil %{total_items} kontoer fra %{filename} til dine lister. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til. + lists_html: Du er i ferd med å leggja til opptil %{total_items} kontoar frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før. muting_html: Du skal til å dempa opp til %{total_items} brukarkontoar frå %{filename}. preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer. recent_imports: Siste importar @@ -1343,12 +1343,12 @@ nn: unsubscribe: action: Ja, meld av complete: Meldt av - confirmation_html: Er du sikker på at du vil slutte å motta %{type} fra Mastodon %{domain} i e-posten din på %{email}? Du kan når som helst gjenoppta i innstillinger for e-postvarsling. + confirmation_html: Er du sikker på at du ikkje lenger ynskjer å motta %{type} frå Mastodon på %{domain} til e-posten din %{email}? Du kan alltids gjera om på dette i innstillingar for e-postvarsling. emails: notification_emails: - favourite: e-poster om favorittmarkeringer - follow: e-poster om følgere - follow_request: e-poster om følgeforespørsler + favourite: e-postar om favorittmarkeringar + follow: e-postar om nye fylgjarar + follow_request: e-postar om fylgjeførespurnadar mention: e-poster om nevninger reblog: e-poster om fremhevinger resubscribe_html: Hvis du har avsluttet abonnementet ved en feiltakelse, kan du abonnere på nytt i innstillinger for e-postvarsling. diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 15174b2acd..ce4b81f30a 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -40,7 +40,7 @@ de: context: Orte, an denen der Filter aktiv sein soll current_password: Gib aus Sicherheitsgründen bitte das Passwort des aktuellen Kontos ein current_username: Um das zu bestätigen, gib den Profilnamen des aktuellen Kontos ein - digest: Wenn du eine längere Zeit inaktiv bist oder du in deiner Abwesenheit eine Direktnachricht erhalten hast + digest: Wenn du eine längere Zeit inaktiv bist oder du während deiner Abwesenheit in einer privaten Nachricht erwähnt worden bist discoverable: Dein Konto kann von Fremden durch Empfehlungen, Trends und andere Funktionen entdeckt werden email: Du wirst eine E-Mail zur Verifizierung dieser E-Mail-Adresse erhalten header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert @@ -182,7 +182,7 @@ de: display_name: Anzeigename email: E-Mail-Adresse expires_in: Läuft ab - fields: Zusatzfelder + fields: Metadaten header: Titelbild honeypot: "%{label} (nicht ausfüllen)" inbox_url: Inbox-URL des Relais @@ -226,7 +226,7 @@ de: type: Typ username: Profilname username_or_email: Profilname oder E-Mail - whole_word: Phrasensuche mit exakter Zeichenfolge erzwingen + whole_word: Exakte Zeichenfolge email_domain_block: with_dns_records: MX-Einträge und IP-Adressen der Domain einbeziehen featured_tag: @@ -259,14 +259,14 @@ de: status_page_url: Statusseite (URL) theme: Standard-Design thumbnail: Vorschaubild des Servers - timeline_preview: Nicht-authentifizierten Zugriff auf die öffentliche Timeline gestatten + timeline_preview: Nicht-authentisierten Zugriff auf öffentliche Timelines gestatten trendable_by_default: Trends ohne vorherige Überprüfung erlauben trends: Trends aktivieren trends_as_landing_page: Trends als Landingpage verwenden interactions: - must_be_follower: Benachrichtigungen von Profilen unterdrücken, die mir nicht folgen - must_be_following: Benachrichtigungen von Profilen unterdrücken, denen ich nicht folge - must_be_following_dm: Direktnachrichten von Profilen, denen ich nicht folge, ablehnen + must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden + must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden + must_be_following_dm: Private Nachrichten von Profilen, denen ich nicht folge, ausblenden invite: comment: Kommentar invite_request: diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index 57aff248b6..8f4854858d 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -2,6 +2,8 @@ ms: simple_form: hints: + account: + display_name: Nama penuh anda atau nama anda yang menyeronokkan. account_alias: acct: Tentukan namapengguna@domain akaun yang ingin anda alihkan daripada account_migration: @@ -44,6 +46,8 @@ ms: site_contact_username: Bagaimana orang boleh menghubungi anda pada Mastodon. site_extended_description: Apa-apa maklumat tambahan yang mungkin berguna untuk pelawat dan pengguna anda. Boleh distruktur dengan sintaks Markdown. site_terms: Gunakan dasar polisi anda atau biarkan kosong untuk menggunakan lalai. Boleh distruktur dengan sintaks Markdown. + site_title: Bagaimana orang boleh merujuk kepada server anda selain nama domainnya. + status_page_url: URL halaman yang membolehkan orang ramai melihat status server ini semasa gangguan form_challenge: current_password: Anda sedang memasuki kawasan selamat imports: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 243d7a133b..b35c11f362 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -62,7 +62,7 @@ vi: setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết của tút setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào - username: Chỉ chấp nhận ký tự, số và dấu gạch dưới + username: Chỉ dùng ký tự, số và dấu gạch dưới whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: domain: Máy chủ này sẽ tiếp nhận dữ liệu, rồi sau đó xử lý và lưu trữ diff --git a/config/locales/vi.yml b/config/locales/vi.yml index e8f3c26b9c..54f9f7a805 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1000,7 +1000,7 @@ vi: privacy_policy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật progress: confirm: Xác minh email - details: Thông tin của bạn + details: Điền thông tin review: Đợi duyệt rules: Đọc nội quy providers: @@ -1021,18 +1021,18 @@ vi: security: Bảo mật set_new_password: Đặt mật khẩu mới setup: - email_below_hint_html: Kiểm tra thư rác của bạn hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. + email_below_hint_html: Kiểm tra hộp thư rác hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn. link_not_received: Không nhận được mã? new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút! - title: Kiểm tra hộp thư của bạn + title: Kiểm tra email của bạn sign_in: preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu tài khoản của bạn được lưu trữ trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. title: Đăng nhập %{domain} sign_up: - manual_review: Đăng ký trên %{domain} cần duyệt thủ công. Để giúp chúng tôi xử lý nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}. + manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}." preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu. - title: Cho phép bạn đăng ký trên %{domain}. + title: Đang đăng ký trên %{domain}. status: account_status: Trạng thái tài khoản confirming: Đang chờ xác minh email. From cdd6d9e714eec4481c8722263dbabb376b816546 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:47:55 +0200 Subject: [PATCH 048/163] Update dependency aws-sdk-s3 to v1.132.1 (#26423) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 46a10e5acc..6507b0e42e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ GEM awrence (1.2.1) aws-eventstream (1.2.0) aws-partitions (1.793.0) - aws-sdk-core (3.180.0) + aws-sdk-core (3.180.3) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.5) @@ -133,7 +133,7 @@ GEM aws-sdk-kms (1.71.0) aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.132.0) + aws-sdk-s3 (1.132.1) aws-sdk-core (~> 3, >= 3.179.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.6) From 37b6cf54bccc8f9a2ebd2be41c16ab5a29998947 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:48:41 +0200 Subject: [PATCH 049/163] Update dependency immutable to v4.3.2 (#26425) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 629eee40c5..fa88008a3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6678,16 +6678,11 @@ immutable@^3.8.2: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== -immutable@^4.0.0: +immutable@^4.0.0, immutable@^4.0.0-rc.1, immutable@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== -immutable@^4.0.0-rc.1, immutable@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc" - integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A== - import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -11310,6 +11305,7 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== From a885b1d9eaac3e64738f09acfa163fae49af460e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:50:22 +0200 Subject: [PATCH 050/163] Update dependency haml_lint to v0.49.3 (#26424) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6507b0e42e..c716403127 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -332,7 +332,7 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.49.2) + haml_lint (0.49.3) haml (>= 4.0, < 6.2) parallel (~> 1.10) rainbow From 78760a80f2051cc03f191903b8061f5bc0b7066f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:23:00 +0200 Subject: [PATCH 051/163] Update dependency eslint-config-prettier to v9 (#26434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 147460a100..cac350a12a 100644 --- a/package.json +++ b/package.json @@ -189,7 +189,7 @@ "@typescript-eslint/parser": "^6.0.0", "babel-jest": "^29.5.0", "eslint": "^8.41.0", - "eslint-config-prettier": "^8.8.0", + "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-formatjs": "^4.10.1", "eslint-plugin-import": "~2.28.0", diff --git a/yarn.lock b/yarn.lock index fa88008a3e..2fdbed5c22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5341,10 +5341,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^8.8.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== eslint-import-resolver-node@^0.3.7: version "0.3.7" From 7aba925071fec75346f40ba9df1e2469b313d4df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:23:37 +0200 Subject: [PATCH 052/163] Update dependency sass to v1.65.1 (#26433) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2fdbed5c22..88a23e9655 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10608,9 +10608,9 @@ sass-loader@^10.2.0: semver "^7.3.2" sass@^1.62.1: - version "1.64.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.64.2.tgz#0d9805ad6acf31c59c3acc725fcfb91b7fcc6909" - integrity sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg== + version "1.65.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.65.1.tgz#8f283b0c26335a88246a448d22e1342ba2ea1432" + integrity sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 87a6ea1884933c5b3a2bcf5953e500fdd25386fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:24:34 +0200 Subject: [PATCH 053/163] Update dependency mime-types to '~> 3.5.0' (#26431) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 27adec7a09..f62ec7b8fa 100644 --- a/Gemfile +++ b/Gemfile @@ -59,7 +59,7 @@ gem 'httplog', '~> 1.6.2' gem 'idn-ruby', require: 'idn' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' -gem 'mime-types', '~> 3.4.1', require: 'mime/types/columnar' +gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar' gem 'nokogiri', '~> 1.15' gem 'nsa', github: 'jhawthorn/nsa', ref: 'e020fcc3a54d993ab45b7194d89ab720296c111b' gem 'oj', '~> 3.14' diff --git a/Gemfile.lock b/Gemfile.lock index c716403127..4428f9c0de 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -451,9 +451,9 @@ GEM hashie (~> 5.0) memory_profiler (1.0.1) method_source (1.0.0) - mime-types (3.4.1) + mime-types (3.5.0) mime-types-data (~> 3.2015) - mime-types-data (3.2023.0218.1) + mime-types-data (3.2023.0808) mini_mime (1.1.2) mini_portile2 (2.8.4) minitest (5.19.0) @@ -874,7 +874,7 @@ DEPENDENCIES mario-redis-lock (~> 1.2) md-paperclip-azure (~> 2.2) memory_profiler - mime-types (~> 3.4.1) + mime-types (~> 3.5.0) net-http (~> 0.3.2) net-ldap (~> 0.18) nokogiri (~> 1.15) From a0bed9f6414c68f25467a069f0fdcbb5bf3fc1ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:39:47 +0200 Subject: [PATCH 054/163] Update dependency regenerator-runtime to ^0.14.0 (#26432) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index cac350a12a..5c109c2588 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "redux": "^4.2.1", "redux-immutable": "^4.0.0", "redux-thunk": "^2.4.2", - "regenerator-runtime": "^0.13.11", + "regenerator-runtime": "^0.14.0", "requestidlecallback": "^0.3.0", "reselect": "^4.1.8", "rimraf": "^5.0.1", diff --git a/yarn.lock b/yarn.lock index 88a23e9655..00537c9cad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10278,6 +10278,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.3: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" From 4f56243c590c4c0e1c977ba10952c50dfca5d185 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:44:00 +0200 Subject: [PATCH 055/163] Update dependency rails to v7.0.7 (#26428) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 112 +++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4428f9c0de..9eef038557 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -39,47 +39,47 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) + actioncable (7.0.7) + actionpack (= 7.0.7) + activesupport (= 7.0.7) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + actionmailbox (7.0.7) + actionpack (= 7.0.7) + activejob (= 7.0.7) + activerecord (= 7.0.7) + activestorage (= 7.0.7) + activesupport (= 7.0.7) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.6) - actionpack (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activesupport (= 7.0.6) + actionmailer (7.0.7) + actionpack (= 7.0.7) + actionview (= 7.0.7) + activejob (= 7.0.7) + activesupport (= 7.0.7) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.6) - actionview (= 7.0.6) - activesupport (= 7.0.6) + actionpack (7.0.7) + actionview (= 7.0.7) + activesupport (= 7.0.7) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.6) - actionpack (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + actiontext (7.0.7) + actionpack (= 7.0.7) + activerecord (= 7.0.7) + activestorage (= 7.0.7) + activesupport (= 7.0.7) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.6) - activesupport (= 7.0.6) + actionview (7.0.7) + activesupport (= 7.0.7) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -89,22 +89,22 @@ GEM activemodel (>= 4.1, < 7.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.0.6) - activesupport (= 7.0.6) + activejob (7.0.7) + activesupport (= 7.0.7) globalid (>= 0.3.6) - activemodel (7.0.6) - activesupport (= 7.0.6) - activerecord (7.0.6) - activemodel (= 7.0.6) - activesupport (= 7.0.6) - activestorage (7.0.6) - actionpack (= 7.0.6) - activejob (= 7.0.6) - activerecord (= 7.0.6) - activesupport (= 7.0.6) + activemodel (7.0.7) + activesupport (= 7.0.7) + activerecord (7.0.7) + activemodel (= 7.0.7) + activesupport (= 7.0.7) + activestorage (7.0.7) + actionpack (= 7.0.7) + activejob (= 7.0.7) + activerecord (= 7.0.7) + activesupport (= 7.0.7) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.6) + activesupport (7.0.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -454,7 +454,7 @@ GEM mime-types (3.5.0) mime-types-data (~> 3.2015) mime-types-data (3.2023.0808) - mini_mime (1.1.2) + mini_mime (1.1.5) mini_portile2 (2.8.4) minitest (5.19.0) msgpack (1.7.1) @@ -464,7 +464,7 @@ GEM uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.3.6) + net-imap (0.3.7) date net-protocol net-ldap (0.18.0) @@ -555,20 +555,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.6) - actioncable (= 7.0.6) - actionmailbox (= 7.0.6) - actionmailer (= 7.0.6) - actionpack (= 7.0.6) - actiontext (= 7.0.6) - actionview (= 7.0.6) - activejob (= 7.0.6) - activemodel (= 7.0.6) - activerecord (= 7.0.6) - activestorage (= 7.0.6) - activesupport (= 7.0.6) + rails (7.0.7) + actioncable (= 7.0.7) + actionmailbox (= 7.0.7) + actionmailer (= 7.0.7) + actionpack (= 7.0.7) + actiontext (= 7.0.7) + actionview (= 7.0.7) + activejob (= 7.0.7) + activemodel (= 7.0.7) + activerecord (= 7.0.7) + activestorage (= 7.0.7) + activesupport (= 7.0.7) bundler (>= 1.15.0) - railties (= 7.0.6) + railties (= 7.0.7) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -583,9 +583,9 @@ GEM rails-i18n (7.0.7) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) + railties (7.0.7) + actionpack (= 7.0.7) + activesupport (= 7.0.7) method_source rake (>= 12.2) thor (~> 1.0) @@ -801,7 +801,7 @@ GEM railties (>= 5.2) semantic_range (>= 2.3.0) websocket (1.2.9) - websocket-driver (0.7.5) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) wisper (2.0.1) From aa367e4058ea047b6c88b4fe67f913881925442d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:44:14 +0200 Subject: [PATCH 056/163] Update dependency @rails/ujs to v7.0.7 (#26422) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 00537c9cad..a20d7f2838 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1774,9 +1774,9 @@ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@rails/ujs@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.0.6.tgz#fd8937c92335f3da9495e07292511ad5f7547a6a" - integrity sha512-s5v3AC6AywOIFMz0RIMW83Xc8FPIvKMkP3ZHFlM4ISNkhdUwP9HdhVtxxo6z3dIhe9vI0Our2A8kN/QpUV02Qg== + version "7.0.7" + resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.0.7.tgz#54af8d66160a8a7bf7d8f184703d2bf4b3fab914" + integrity sha512-J2v5Ca7HgejO7diGKiDylaVDQKmbQ5FJih6Oo3hXuBKEuXlcaccJu64lj8MNVLaPVyZx0g4gaOQZQz95QEb/hg== "@redis/bloom@1.2.0": version "1.2.0" From acaeaaeb6a9f9ac148063e5fe61f9594ed1faff1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:59:42 +0200 Subject: [PATCH 057/163] Update dependency pg to v8.11.2 (#26426) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index a20d7f2838..545cce46b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9172,11 +9172,16 @@ pg-cloudflare@^1.1.1: resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== -pg-connection-string@^2.6.0, pg-connection-string@^2.6.1: +pg-connection-string@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb" integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg== +pg-connection-string@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" @@ -9222,13 +9227,13 @@ pg-types@^4.0.1: postgres-range "^1.1.1" pg@^8.5.0: - version "8.11.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.1.tgz#297e0eb240306b1e9e4f55af8a3bae76ae4810b1" - integrity sha512-utdq2obft07MxaDg0zBJI+l/M3mBRfIpEN3iSemsz0G5F2/VXx+XzqF4oxrbIZXQxt2AZzIUzyVg/YM6xOP/WQ== + version "8.11.2" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.2.tgz#1a23f6de7bfb65ba56e4dd15df96668d319900c4" + integrity sha512-l4rmVeV8qTIrrPrIR3kZQqBgSN93331s9i6wiUiLOSk0Q7PmUxZD/m1rQI622l3NfqBby9Ar5PABfS/SulfieQ== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" - pg-connection-string "^2.6.1" + pg-connection-string "^2.6.2" pg-pool "^3.6.1" pg-protocol "^1.6.0" pg-types "^2.1.0" From e530e5737a6db7837dd3daba0a14ce0fb3a895fe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:01:40 +0200 Subject: [PATCH 058/163] Update babel monorepo to v7.22.10 (#26421) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 405 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 210 insertions(+), 195 deletions(-) diff --git a/yarn.lock b/yarn.lock index 545cce46b3..a1c670f013 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,53 +29,61 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: "@babel/highlight" "^7.22.5" +"@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" + integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== + dependencies: + "@babel/highlight" "^7.22.10" + chalk "^2.4.2" + "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.10.4", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.22.1": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" - integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" + integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.6" - "@babel/parser" "^7.22.7" + "@babel/helpers" "^7.22.10" + "@babel/parser" "^7.22.10" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.22.5": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" - integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== +"@babel/generator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" + integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.22.7", "@babel/generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" - integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== +"@babel/generator@^7.22.5": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" + integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== dependencies: "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" @@ -100,11 +108,11 @@ "@babel/types" "^7.22.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" + integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" "@babel/helper-builder-react-jsx@^7.22.5": version "7.22.5" @@ -114,10 +122,10 @@ "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" - integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== dependencies: "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" @@ -126,9 +134,9 @@ semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" - integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" + integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" @@ -149,10 +157,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" - integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -217,7 +225,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5": +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== @@ -272,30 +280,30 @@ integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== "@babel/helper-wrap-function@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" - integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" -"@babel/helpers@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" - integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== +"@babel/helpers@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" + integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.6" - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.22.10", "@babel/highlight@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== dependencies: "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" + chalk "^2.4.2" js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": @@ -303,10 +311,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/parser@^7.22.5", "@babel/parser@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/parser@^7.22.10", "@babel/parser@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" + integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -329,14 +337,6 @@ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -492,14 +492,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" - integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== +"@babel/plugin-transform-async-generator-functions@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" + integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-transform-async-to-generator@^7.22.5": @@ -518,10 +518,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== +"@babel/plugin-transform-block-scoping@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -565,14 +565,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== +"@babel/plugin-transform-destructuring@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== @@ -750,10 +750,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" - integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== +"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" + integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -839,13 +839,13 @@ "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" + regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.22.5": version "7.22.5" @@ -855,15 +855,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.22.4": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" - integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" + integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== dependencies: "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.22.5": @@ -912,10 +912,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -944,12 +944,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.22.4": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" - integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" + integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" @@ -974,15 +974,15 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.7" + "@babel/plugin-transform-async-generator-functions" "^7.22.10" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.10" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.5" "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.10" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" "@babel/plugin-transform-dynamic-import" "^7.22.5" @@ -1005,38 +1005,36 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.5" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.6" + "@babel/plugin-transform-optional-chaining" "^7.22.10" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.5" "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" "@babel/plugin-transform-reserved-words" "^7.22.5" "@babel/plugin-transform-shorthand-properties" "^7.22.5" "@babel/plugin-transform-spread" "^7.22.5" "@babel/plugin-transform-sticky-regex" "^7.22.5" "@babel/plugin-transform-template-literals" "^7.22.5" "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" "@babel/plugin-transform-unicode-property-regex" "^7.22.5" "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.10" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" core-js-compat "^3.31.0" semver "^6.3.1" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" @@ -1076,11 +1074,11 @@ regenerator-runtime "^0.12.0" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" - integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" @@ -1107,23 +1105,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== +"@babel/traverse@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" + integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" + "@babel/parser" "^7.22.10" + "@babel/types" "^7.22.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== @@ -1132,6 +1130,15 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" +"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" + integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1668,6 +1675,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -1686,12 +1698,12 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== @@ -1699,16 +1711,19 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-design-icons/svg@^0.14.10": version "0.14.10" resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.10.tgz#25804b66d0740b0bf8d6841fa343dfdd60f22e82" integrity sha512-rXxfqj5Su8i51aG8s8QRIe7mX1gB+C/ZCroLu3JvIsO3+Vx6PcWP97HLwIl7AQH/jYIHQlKq0E6OMqU91u5fCg== -"@nicolo-ribaudo/semver-v6@^6.3.3": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" - integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -3423,29 +3438,29 @@ babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" - integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.1" - "@nicolo-ribaudo/semver-v6" "^6.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" - integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" - integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" babel-plugin-preval@^5.1.0: version "5.1.0" @@ -3735,13 +3750,13 @@ browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5: update-browserslist-db "^1.0.11" browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" update-browserslist-db "^1.0.11" bser@2.1.1: @@ -3914,17 +3929,17 @@ caniuse-lite@^1.0.30001502: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== -caniuse-lite@^1.0.30001503: - version "1.0.30001516" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz#621b1be7d85a8843ee7d210fd9d87b52e3daab3a" - integrity sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g== +caniuse-lite@^1.0.30001517: + version "1.0.30001519" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" + integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== chalk@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4308,9 +4323,9 @@ copy-descriptor@^0.1.0: integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-js-compat@^3.31.0: - version "3.31.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" - integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" + integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== dependencies: browserslist "^4.21.9" @@ -5057,10 +5072,10 @@ electron-to-chromium@^1.4.428: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz#3fdc7b4f97d628ac6b51e8b4b385befb362fe343" integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA== -electron-to-chromium@^1.4.431: - version "1.4.461" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.461.tgz#6b14af66042732bf883ab63a4d82cac8f35eb252" - integrity sha512-1JkvV2sgEGTDXjdsaQCeSwYYuhLRphRpc+g6EHTFELJXEiznLt3/0pZ9JuAOQ5p2rI3YxKTbivtvajirIfhrEQ== +electron-to-chromium@^1.4.477: + version "1.4.490" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz#d99286f6e915667fa18ea4554def1aa60eb4d5f1" + integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A== elliptic@^6.5.3: version "6.5.4" @@ -6911,20 +6926,20 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-core-module@^2.12.1, is-core-module@^2.13.0: +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" +is-core-module@^2.5.0, is-core-module@^2.9.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -8654,7 +8669,7 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^2.0.12: +node-releases@^2.0.12, node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== @@ -10278,7 +10293,7 @@ regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.3: +regenerator-runtime@^0.13.3: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== @@ -10288,10 +10303,10 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -10438,16 +10453,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.3: +resolve@^1.14.2, resolve@^1.22.3: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -10456,6 +10462,15 @@ resolve@^1.22.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" From adbe541e5e9af3c3335b2094daa59952d8f76e9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:07:15 +0200 Subject: [PATCH 059/163] Update dependency eslint-import-resolver-typescript to v3.6.0 (#26429) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/yarn.lock b/yarn.lock index a1c670f013..98a49b4f03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5371,18 +5371,17 @@ eslint-import-resolver-node@^0.3.7: resolve "^1.22.1" eslint-import-resolver-typescript@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" - integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" + integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== dependencies: debug "^4.3.4" enhanced-resolve "^5.12.0" eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" get-tsconfig "^4.5.0" - globby "^13.1.3" is-core-module "^2.11.0" is-glob "^4.0.3" - synckit "^0.8.5" eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" @@ -5808,7 +5807,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.12: +fast-glob@^3.2.12: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -5819,7 +5818,7 @@ fast-glob@^3.2.11, fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.9: +fast-glob@^3.2.9, fast-glob@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -6190,9 +6189,9 @@ get-symbol-description@^1.0.0: get-intrinsic "^1.1.1" get-tsconfig@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05" - integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg== + version "4.7.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" + integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== dependencies: resolve-pkg-maps "^1.0.0" @@ -6313,17 +6312,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.3: - version "13.1.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" - integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -10904,11 +10892,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" From d28ac3caa8cb7adb070797773839853eb8d564e9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:07:33 +0200 Subject: [PATCH 060/163] Update dependency pg-connection-string to v2.6.2 (#26427) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 98a49b4f03..55b86b3b6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9175,12 +9175,7 @@ pg-cloudflare@^1.1.1: resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== -pg-connection-string@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb" - integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg== - -pg-connection-string@^2.6.2: +pg-connection-string@^2.6.0, pg-connection-string@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== From 80e6e7d008a5fe9b7c196a024488d3d784adb94f Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 10 Aug 2023 14:15:18 +0200 Subject: [PATCH 061/163] Add `S3_DISABLE_CHECKSUM_MODE` environment variable for compatibility with some S3-compatible providers (#26435) --- config/initializers/paperclip.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index 12d8d69341..02943ce091 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -90,13 +90,19 @@ if ENV['S3_ENABLED'] == 'true' # Some S3-compatible providers might not actually be compatible with some APIs # used by kt-paperclip, see https://github.com/mastodon/mastodon/issues/16822 - if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' + # and https://github.com/mastodon/mastodon/issues/26394 + if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' || ENV['S3_DISABLE_CHECKSUM_MODE'] == 'true' module Paperclip module Storage module S3Extensions def copy_to_local_file(style, local_dest_path) log("copying #{path(style)} to local file #{local_dest_path}") - s3_object(style).download_file(local_dest_path, { mode: 'single_request' }) + + options = {} + options[:mode] = 'single_request' if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' + options[:checksum_mode] = 'DISABLED' if ENV['S3_DISABLE_CHECKSUM_MODE'] == 'true' + + s3_object(style).download_file(local_dest_path, options) rescue Aws::Errors::ServiceError => e warn("#{e} - cannot copy #{path(style)} to local file #{local_dest_path}") false From 4d32f9bdf81855cdc12137669e6174f359e08c00 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Thu, 10 Aug 2023 15:51:48 -0400 Subject: [PATCH 062/163] Merge duplicate Gemfile groups (#26441) --- Gemfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Gemfile b/Gemfile index f62ec7b8fa..4c3e5a368c 100644 --- a/Gemfile +++ b/Gemfile @@ -186,9 +186,7 @@ group :development, :test do gem 'ruby-prof', require: false gem 'stackprof', require: false gem 'test-prof' -end -group :development, :test do # RSpec runner for rails gem 'rspec-rails', '~> 6.0' end From 13a4a81f022a1b944dd65acb1041dc76093b0901 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 11 Aug 2023 09:59:57 +0200 Subject: [PATCH 063/163] Upgrade JS dev dependencies (#26442) --- yarn.lock | 1025 +++++++++++++++++++++++++---------------------------- 1 file changed, 489 insertions(+), 536 deletions(-) diff --git a/yarn.lock b/yarn.lock index 55b86b3b6f..7b799cda19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,9 +8,9 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@adobe/css-tools@^4.0.1": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855" - integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.0.tgz#1991d273fb29edbd2f63060f5bdaf0af26aa64e3" + integrity sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w== "@ampproject/remapping@^2.2.0": version "2.2.1" @@ -29,14 +29,7 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== - dependencies: - "@babel/highlight" "^7.22.5" - -"@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== @@ -44,6 +37,13 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" +"@babel/code-frame@^7.10.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" @@ -70,7 +70,7 @@ json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.22.10": +"@babel/generator@^7.22.10", "@babel/generator@^7.22.5", "@babel/generator@^7.7.2": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== @@ -80,26 +80,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.22.5": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" - integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== - dependencies: - "@babel/types" "^7.22.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== - dependencies: - "@babel/types" "^7.22.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -306,12 +286,7 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== - -"@babel/parser@^7.22.10", "@babel/parser@^7.22.5": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== @@ -1089,7 +1064,7 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@7", "@babel/traverse@^7.7.2": +"@babel/traverse@7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== @@ -1121,19 +1096,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.3.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" + integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== +"@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" @@ -1145,19 +1120,19 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@csstools/css-parser-algorithms@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141" - integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" + integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== "@csstools/css-tokenizer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" - integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" + integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== "@csstools/media-query-list-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728" - integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c" + integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw== "@csstools/selector-specificity@^3.0.0": version "3.0.0" @@ -1469,28 +1444,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" - integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== +"@jest/console@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.2.tgz#bf1d4101347c23e07c029a1b1ae07d550f5cc541" + integrity sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + jest-message-util "^29.6.2" + jest-util "^29.6.2" slash "^3.0.0" -"@jest/core@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" - integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== +"@jest/core@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.2.tgz#6f2d1dbe8aa0265fcd4fb8082ae1952f148209c8" + integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg== dependencies: - "@jest/console" "^29.5.0" - "@jest/reporters" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.6.2" + "@jest/reporters" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -1498,81 +1473,81 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.5.0" - jest-config "^29.5.0" - jest-haste-map "^29.5.0" - jest-message-util "^29.5.0" + jest-config "^29.6.2" + jest-haste-map "^29.6.2" + jest-message-util "^29.6.2" jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-resolve-dependencies "^29.5.0" - jest-runner "^29.5.0" - jest-runtime "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" - jest-watcher "^29.5.0" + jest-resolve "^29.6.2" + jest-resolve-dependencies "^29.6.2" + jest-runner "^29.6.2" + jest-runtime "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" + jest-watcher "^29.6.2" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.6.2" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" - integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== +"@jest/environment@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9" + integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q== dependencies: - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/fake-timers" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.5.0" + jest-mock "^29.6.2" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== +"@jest/expect-utils@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534" + integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg== dependencies: jest-get-type "^29.4.3" -"@jest/expect@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" - integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== +"@jest/expect@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28" + integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg== dependencies: - expect "^29.5.0" - jest-snapshot "^29.5.0" + expect "^29.6.2" + jest-snapshot "^29.6.2" -"@jest/fake-timers@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" - integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== +"@jest/fake-timers@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4" + integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.5.0" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-message-util "^29.6.2" + jest-mock "^29.6.2" + jest-util "^29.6.2" -"@jest/globals@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" - integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== +"@jest/globals@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.2.tgz#74af81b9249122cc46f1eb25793617eec69bf21a" + integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw== dependencies: - "@jest/environment" "^29.5.0" - "@jest/expect" "^29.5.0" - "@jest/types" "^29.5.0" - jest-mock "^29.5.0" + "@jest/environment" "^29.6.2" + "@jest/expect" "^29.6.2" + "@jest/types" "^29.6.1" + jest-mock "^29.6.2" -"@jest/reporters@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" - integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== +"@jest/reporters@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.2.tgz#524afe1d76da33d31309c2c4a2c8062d0c48780a" + integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/console" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -1584,77 +1559,77 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.5.0" - jest-util "^29.5.0" - jest-worker "^29.5.0" + jest-message-util "^29.6.2" + jest-util "^29.6.2" + jest-worker "^29.6.2" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" - integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== +"@jest/source-map@^29.6.0": + version "29.6.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" + integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== dependencies: - "@jridgewell/trace-mapping" "^0.3.15" + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" - integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== +"@jest/test-result@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.2.tgz#fdd11583cd1608e4db3114e8f0cce277bf7a32ed" + integrity sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw== dependencies: - "@jest/console" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.6.2" + "@jest/types" "^29.6.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" - integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== +"@jest/test-sequencer@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz#585eff07a68dd75225a7eacf319780cb9f6b9bf4" + integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw== dependencies: - "@jest/test-result" "^29.5.0" + "@jest/test-result" "^29.6.2" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" + jest-haste-map "^29.6.2" slash "^3.0.0" -"@jest/transform@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" - integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== +"@jest/transform@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.2.tgz#522901ebbb211af08835bc3bcdf765ab778094e3" + integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.5.0" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" + jest-haste-map "^29.6.2" jest-regex-util "^29.4.3" - jest-util "^29.5.0" + jest-util "^29.6.2" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1670,11 +1645,6 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -1693,25 +1663,12 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": version "0.3.19" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== @@ -1881,10 +1838,10 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": version "3.0.0" @@ -1894,9 +1851,9 @@ type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194" - integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg== + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -2028,9 +1985,9 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" - integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== + version "5.17.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" + integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== dependencies: "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" @@ -2231,9 +2188,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@*", "@types/jest@^29.5.2": - version "29.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b" - integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg== + version "29.5.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" + integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2268,9 +2225,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.195": - version "4.14.195" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632" - integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg== + version "4.14.197" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" + integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== "@types/mime@*": version "3.0.1" @@ -2293,9 +2250,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "20.3.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" - integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== + version "20.4.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" + integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== "@types/node@14 || 16 || 17": version "17.0.45" @@ -2336,11 +2293,6 @@ resolved "https://registry.yarnpkg.com/@types/picomatch/-/picomatch-2.3.0.tgz#75db5e75a713c5a83d5b76780c3da84a82806003" integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/prop-types@*", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" @@ -2366,13 +2318,20 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4": +"@types/react-dom@^18.0.0": version "18.2.5" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.5.tgz#5c5f13548bda23cd98f50ca4a59107238bfe18f3" integrity sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ== dependencies: "@types/react" "*" +"@types/react-dom@^18.2.4": + version "18.2.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" + integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== + dependencies: + "@types/react" "*" + "@types/react-helmet@^6.1.6": version "6.1.6" resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.6.tgz#7d1afd8cbf099616894e8240e9ef70e3c6d7506d" @@ -2468,7 +2427,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7": +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26": version "18.2.12" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.12.tgz#95d584338610b78bb9ba0415e3180fb03debdf97" integrity sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw== @@ -2477,6 +2436,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.2.7": + version "18.2.20" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" + integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/redux-immutable@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/redux-immutable/-/redux-immutable-4.0.3.tgz#db92a281aa9a55a7b63bc1f20a233790305a1f06" @@ -2539,9 +2507,9 @@ integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/testing-library__jest-dom@^5.9.1": - version "5.14.6" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.6.tgz#4887f6e1af11215428ab02777873bcede98a53b0" - integrity sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA== + version "5.14.9" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" + integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== dependencies: "@types/jest" "*" @@ -2925,12 +2893,12 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2: +acorn@^8.0.4, acorn@^8.8.2: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -acorn@^8.9.0: +acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0: version "8.10.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== @@ -3094,7 +3062,14 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" -aria-query@^5.0.0, aria-query@^5.1.3: +aria-query@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +aria-query@^5.1.3: version "5.2.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15" integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g== @@ -3357,12 +3332,12 @@ axobject-query@^3.1.1: dependencies: dequal "^2.0.3" -babel-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" - integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== +babel-jest@^29.5.0, babel-jest@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126" + integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A== dependencies: - "@jest/transform" "^29.5.0" + "@jest/transform" "^29.6.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^29.5.0" @@ -4126,9 +4101,9 @@ cocoon-js-vanilla@^1.3.0: integrity sha512-rMnbfW6oFhvELUg141vfqZKzsowfLJRxs5FksfmDr1ZBs6LTNVYE63NQyvgRqyYUOK54cKKbI+V83dQKeeRuPg== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== collection-visit@^1.0.0: version "1.0.0" @@ -4450,10 +4425,10 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== +css-functions-list@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee" + integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg== css-loader@^5.2.7: version "5.2.7" @@ -4712,10 +4687,10 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-equal@^1.0.1: version "1.1.1" @@ -4753,7 +4728,7 @@ deep-equal@^2.0.5: which-collection "^1.0.1" which-typed-array "^1.1.9" -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -5345,14 +5320,13 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" @@ -5680,7 +5654,22 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.0.0, execa@^7.1.1: +execa@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +execa@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== @@ -5720,16 +5709,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^29.0.0, expect@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" - integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== +expect@^29.0.0, expect@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521" + integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA== dependencies: - "@jest/expect-utils" "^29.5.0" + "@jest/expect-utils" "^29.6.2" + "@types/node" "*" jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-util "^29.6.2" express@^4.17.1, express@^4.18.2: version "4.18.2" @@ -5818,7 +5808,7 @@ fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.9, fast-glob@^3.3.1: +fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -5829,23 +5819,12 @@ fast-glob@^3.2.9, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -6914,14 +6893,14 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0: +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.5.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" -is-core-module@^2.5.0, is-core-module@^2.9.0: +is-core-module@^2.9.0: version "2.12.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== @@ -7281,12 +7260,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: semver "^6.3.0" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -7299,9 +7278,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7333,87 +7312,87 @@ jest-changed-files@^29.5.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" - integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== +jest-circus@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.2.tgz#1e6ffca60151ac66cad63fce34f443f6b5bb4258" + integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw== dependencies: - "@jest/environment" "^29.5.0" - "@jest/expect" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.6.2" + "@jest/expect" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.5.0" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-runtime "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" + jest-each "^29.6.2" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-runtime "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" p-limit "^3.1.0" - pretty-format "^29.5.0" + pretty-format "^29.6.2" pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" - integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== +jest-cli@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.2.tgz#edb381763398d1a292cd1b636a98bfa5644b8fda" + integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q== dependencies: - "@jest/core" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" + jest-config "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" - integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== +jest-config@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.2.tgz#c68723f06b31ca5e63030686e604727d406cd7c3" + integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.5.0" - "@jest/types" "^29.5.0" - babel-jest "^29.5.0" + "@jest/test-sequencer" "^29.6.2" + "@jest/types" "^29.6.1" + babel-jest "^29.6.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.5.0" - jest-environment-node "^29.5.0" + jest-circus "^29.6.2" + jest-environment-node "^29.6.2" jest-get-type "^29.4.3" jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-runner "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" + jest-resolve "^29.6.2" + jest-runner "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.5.0" + pretty-format "^29.6.2" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== +jest-diff@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.2.tgz#c36001e5543e82a0805051d3ceac32e6825c1c46" + integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA== dependencies: chalk "^4.0.0" diff-sequences "^29.4.3" jest-get-type "^29.4.3" - pretty-format "^29.5.0" + pretty-format "^29.6.2" jest-docblock@^29.4.3: version "29.4.3" @@ -7422,108 +7401,108 @@ jest-docblock@^29.4.3: dependencies: detect-newline "^3.0.0" -jest-each@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" - integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== +jest-each@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.2.tgz#c9e4b340bcbe838c73adf46b76817b15712d02ce" + integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" chalk "^4.0.0" jest-get-type "^29.4.3" - jest-util "^29.5.0" - pretty-format "^29.5.0" + jest-util "^29.6.2" + pretty-format "^29.6.2" jest-environment-jsdom@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb" - integrity sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw== + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz#4fc68836a7774a771819a2f980cb47af3b1629da" + integrity sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ== dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.6.2" + "@jest/fake-timers" "^29.6.2" + "@jest/types" "^29.6.1" "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-mock "^29.6.2" + jest-util "^29.6.2" jsdom "^20.0.0" -jest-environment-node@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" - integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== +jest-environment-node@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad" + integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.6.2" + "@jest/fake-timers" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-mock "^29.6.2" + jest-util "^29.6.2" jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== -jest-haste-map@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" - integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== +jest-haste-map@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.2.tgz#298c25ea5255cfad8b723179d4295cf3a50a70d1" + integrity sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.4.3" - jest-util "^29.5.0" - jest-worker "^29.5.0" + jest-util "^29.6.2" + jest-worker "^29.6.2" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" - integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== +jest-leak-detector@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz#e2b307fee78cab091c37858a98c7e1d73cdf5b38" + integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ== dependencies: jest-get-type "^29.4.3" - pretty-format "^29.5.0" + pretty-format "^29.6.2" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== +jest-matcher-utils@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535" + integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ== dependencies: chalk "^4.0.0" - jest-diff "^29.5.0" + jest-diff "^29.6.2" jest-get-type "^29.4.3" - pretty-format "^29.5.0" + pretty-format "^29.6.2" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== +jest-message-util@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" + integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.6.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" - integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== +jest-mock@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" + integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.6.2" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -7535,149 +7514,146 @@ jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -jest-resolve-dependencies@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" - integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== +jest-resolve-dependencies@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2" + integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w== dependencies: jest-regex-util "^29.4.3" - jest-snapshot "^29.5.0" + jest-snapshot "^29.6.2" -jest-resolve@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" - integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== +jest-resolve@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.2.tgz#f18405fe4b50159b7b6d85e81f6a524d22afb838" + integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" + jest-haste-map "^29.6.2" jest-pnp-resolver "^1.2.2" - jest-util "^29.5.0" - jest-validate "^29.5.0" + jest-util "^29.6.2" + jest-validate "^29.6.2" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" - integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== +jest-runner@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.2.tgz#89e8e32a8fef24781a7c4c49cd1cb6358ac7fc01" + integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w== dependencies: - "@jest/console" "^29.5.0" - "@jest/environment" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.6.2" + "@jest/environment" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" jest-docblock "^29.4.3" - jest-environment-node "^29.5.0" - jest-haste-map "^29.5.0" - jest-leak-detector "^29.5.0" - jest-message-util "^29.5.0" - jest-resolve "^29.5.0" - jest-runtime "^29.5.0" - jest-util "^29.5.0" - jest-watcher "^29.5.0" - jest-worker "^29.5.0" + jest-environment-node "^29.6.2" + jest-haste-map "^29.6.2" + jest-leak-detector "^29.6.2" + jest-message-util "^29.6.2" + jest-resolve "^29.6.2" + jest-runtime "^29.6.2" + jest-util "^29.6.2" + jest-watcher "^29.6.2" + jest-worker "^29.6.2" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" - integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== +jest-runtime@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.2.tgz#692f25e387f982e89ab83270e684a9786248e545" + integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg== dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/globals" "^29.5.0" - "@jest/source-map" "^29.4.3" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.6.2" + "@jest/fake-timers" "^29.6.2" + "@jest/globals" "^29.6.2" + "@jest/source-map" "^29.6.0" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" - jest-message-util "^29.5.0" - jest-mock "^29.5.0" + jest-haste-map "^29.6.2" + jest-message-util "^29.6.2" + jest-mock "^29.6.2" jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" + jest-resolve "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" - integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== +jest-snapshot@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.2.tgz#9b431b561a83f2bdfe041e1cab8a6becdb01af9c" + integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" - "@types/babel__traverse" "^7.0.6" - "@types/prettier" "^2.1.5" + "@jest/expect-utils" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.5.0" + expect "^29.6.2" graceful-fs "^4.2.9" - jest-diff "^29.5.0" + jest-diff "^29.6.2" jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-util "^29.6.2" natural-compare "^1.4.0" - pretty-format "^29.5.0" - semver "^7.3.5" + pretty-format "^29.6.2" + semver "^7.5.3" -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" + integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" - integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== +jest-validate@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" + integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.4.3" leven "^3.1.0" - pretty-format "^29.5.0" + pretty-format "^29.6.2" -jest-watcher@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" - integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== +jest-watcher@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.2.tgz#77c224674f0620d9f6643c4cfca186d8893ca088" + integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA== dependencies: - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.5.0" + jest-util "^29.6.2" string-length "^4.0.1" jest-worker@^26.2.1, jest-worker@^26.5.0: @@ -7689,25 +7665,25 @@ jest-worker@^26.2.1, jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" - integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== +jest-worker@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.2.tgz#682fbc4b6856ad0aa122a5403c6d048b83f3fb44" + integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ== dependencies: "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.6.2" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" - integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.2.tgz#3bd55b9fd46a161b2edbdf5f1d1bd0d1eab76c42" + integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg== dependencies: - "@jest/core" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.6.2" + "@jest/types" "^29.6.1" import-local "^3.0.2" - jest-cli "^29.5.0" + jest-cli "^29.6.2" jpeg-autorotate@^7.1.1: version "7.1.1" @@ -7952,14 +7928,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - lilconfig@2.1.0, lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -7971,9 +7939,9 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + version "13.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" + integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== dependencies: chalk "5.2.0" cli-truncate "^3.1.0" @@ -8175,13 +8143,20 @@ magic-string@^0.30.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -8734,7 +8709,12 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nwsapi@^2.2.2, nwsapi@^2.2.4: +nwsapi@^2.2.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + +nwsapi@^2.2.4: version "2.2.5" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2" integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ== @@ -8916,18 +8896,6 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -9289,9 +9257,9 @@ pinkie@^2.0.0: integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: version "3.0.0" @@ -9589,7 +9557,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.15, postcss@^8.4.24: +postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25: version "8.4.27" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== @@ -9652,11 +9620,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -9665,9 +9628,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== + version "3.0.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.1.tgz#65271fc9320ce4913c57747a70ce635b30beaa40" + integrity sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ== pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" @@ -9683,12 +9646,12 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== +pretty-format@^29.0.0, pretty-format@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47" + integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -10436,7 +10399,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.14.2, resolve@^1.22.3: +resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.3: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -10445,7 +10408,7 @@ resolve@^1.14.2, resolve@^1.22.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: +resolve@^1.19.0, resolve@^1.22.1: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -10695,24 +10658,19 @@ semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2, semver@^7.3.7: version "7.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== dependencies: lru-cache "^6.0.0" -semver@^7.5.4: +semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -10864,9 +10822,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sirv@^1.0.7: version "1.0.19" @@ -11209,7 +11167,6 @@ string-length@^4.0.1: strip-ansi "^6.0.0" "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11308,7 +11265,6 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -11438,9 +11394,9 @@ stylelint-scss@^5.0.0: postcss-value-parser "^4.2.0" stylelint@^15.10.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d" - integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ== + version "15.10.2" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.2.tgz#0ee5a8371d3a2e1ff27fefd48309d3ddef7c3405" + integrity sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg== dependencies: "@csstools/css-parser-algorithms" "^2.3.0" "@csstools/css-tokenizer" "^2.1.1" @@ -11449,7 +11405,7 @@ stylelint@^15.10.1: balanced-match "^2.0.0" colord "^2.9.3" cosmiconfig "^8.2.0" - css-functions-list "^3.1.0" + css-functions-list "^3.2.0" css-tree "^2.3.1" debug "^4.3.4" fast-glob "^3.3.0" @@ -11469,7 +11425,7 @@ stylelint@^15.10.1: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.24" + postcss "^8.4.25" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" postcss-selector-parser "^6.0.13" @@ -11866,7 +11822,12 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0: +tslib@^2.1.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +tslib@^2.4.0, tslib@^2.5.0: version "2.5.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== @@ -11905,13 +11866,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -11984,11 +11938,16 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -"typescript@^4.7 || 5", typescript@^5.0.4: +"typescript@^4.7 || 5": version "5.1.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== +typescript@^5.0.4: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -12622,11 +12581,6 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - workbox-background-sync@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz#2b84b96ca35fec976e3bd2794b70e4acec46b3a5" @@ -12797,7 +12751,6 @@ workbox-window@7.0.0, workbox-window@^7.0.0: workbox-core "7.0.0" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - name wrap-ansi-cjs version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From a9219018a7b025c2c2ca824f2296de1e38070e16 Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 12 Aug 2023 00:06:37 +0200 Subject: [PATCH 064/163] Fix reply not preserving the language from the replied-to post (#26452) --- app/javascript/mastodon/actions/importer/normalizer.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 67368abb24..e6b361c0c9 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -76,7 +76,10 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); normalStatus.spoiler_text = normalOldStatus.get('spoiler_text'); normalStatus.hidden = normalOldStatus.get('hidden'); - normalStatus.translation = normalOldStatus.get('translation'); + + if (normalOldStatus.get('translation')) { + normalStatus.translation = normalOldStatus.get('translation'); + } } else { // If the status has a CW but no contents, treat the CW as if it were the // status' contents, to avoid having a CW toggle with seemingly no effect. From 2b248693f1f28ed74e4f79d2bbec067e91b1d3a4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 01:51:10 +0200 Subject: [PATCH 065/163] [Glitch] Add client-side timeout on resend confirmation button Port f51e991561865ea68187cbf2281e4d3354f5a863 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/packs/sign_up.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app/javascript/flavours/glitch/packs/sign_up.js b/app/javascript/flavours/glitch/packs/sign_up.js index 2e675dff20..4e0af41a2e 100644 --- a/app/javascript/flavours/glitch/packs/sign_up.js +++ b/app/javascript/flavours/glitch/packs/sign_up.js @@ -13,4 +13,30 @@ ready(() => { console.error(error); }); }, 5000); + + document.querySelectorAll('.timer-button').forEach(button => { + let counter = 30; + + const container = document.createElement('span'); + + const updateCounter = () => { + container.innerText = ` (${counter})`; + }; + + updateCounter(); + + const countdown = setInterval(() => { + counter--; + + if (counter === 0) { + button.disabled = false; + button.removeChild(container); + clearInterval(countdown); + } else { + updateCounter(); + } + }, 1000); + + button.appendChild(container); + }); }); From 60438e609795bbd99bf38adb739d46155de8daa3 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Sun, 13 Aug 2023 09:06:04 +0900 Subject: [PATCH 066/163] Add missing instances option to tootctl search deploy (#26461) --- lib/mastodon/cli/search.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/cli/search.rb b/lib/mastodon/cli/search.rb index 33bcad5fea..ee1c0fade1 100644 --- a/lib/mastodon/cli/search.rb +++ b/lib/mastodon/cli/search.rb @@ -15,7 +15,7 @@ module Mastodon::CLI option :concurrency, type: :numeric, default: 5, aliases: [:c], desc: 'Workload will be split between this number of threads' option :batch_size, type: :numeric, default: 100, aliases: [:b], desc: 'Number of records in each batch' - option :only, type: :array, enum: %w(accounts tags statuses), desc: 'Only process these indices' + option :only, type: :array, enum: %w(instances accounts tags statuses), desc: 'Only process these indices' option :import, type: :boolean, default: true, desc: 'Import data from the database to the index' option :clean, type: :boolean, default: true, desc: 'Remove outdated documents from the index' desc 'deploy', 'Create or upgrade Elasticsearch indices and populate them' From 0e6c62a4c782a2d946b1d8c83cff5d79b715ba77 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 3 Aug 2023 15:41:51 +0200 Subject: [PATCH 067/163] [Glitch] Add alt text for preview card thumbnails Port ecb00fa5ac19629f1548eaf3774467e0287ad2f5 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/explore/components/story.jsx | 5 +++-- app/javascript/flavours/glitch/features/explore/links.jsx | 1 + .../flavours/glitch/features/status/components/card.jsx | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/features/explore/components/story.jsx b/app/javascript/flavours/glitch/features/explore/components/story.jsx index 9a4a221bca..8dc92a4d91 100644 --- a/app/javascript/flavours/glitch/features/explore/components/story.jsx +++ b/app/javascript/flavours/glitch/features/explore/components/story.jsx @@ -23,6 +23,7 @@ export default class Story extends PureComponent { author: PropTypes.string, sharedTimes: PropTypes.number, thumbnail: PropTypes.string, + thumbnailDescription: PropTypes.string, blurhash: PropTypes.string, expanded: PropTypes.bool, }; @@ -34,7 +35,7 @@ export default class Story extends PureComponent { handleImageLoad = () => this.setState({ thumbnailLoaded: true }); render () { - const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, blurhash } = this.props; + const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props; const { thumbnailLoaded } = this.state; @@ -50,7 +51,7 @@ export default class Story extends PureComponent { {thumbnail ? ( <>
- + {thumbnailDescription} ) : }
diff --git a/app/javascript/flavours/glitch/features/explore/links.jsx b/app/javascript/flavours/glitch/features/explore/links.jsx index 383f68a8b4..9124285f4f 100644 --- a/app/javascript/flavours/glitch/features/explore/links.jsx +++ b/app/javascript/flavours/glitch/features/explore/links.jsx @@ -67,6 +67,7 @@ class Links extends PureComponent { author={link.get('author_name')} sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1} thumbnail={link.get('image')} + thumbnailDescription={link.get('image_description')} blurhash={link.get('blurhash')} /> ))} diff --git a/app/javascript/flavours/glitch/features/status/components/card.jsx b/app/javascript/flavours/glitch/features/status/components/card.jsx index ff34b525a0..a64314efa3 100644 --- a/app/javascript/flavours/glitch/features/status/components/card.jsx +++ b/app/javascript/flavours/glitch/features/status/components/card.jsx @@ -178,7 +178,8 @@ export default class Card extends PureComponent { dummy={!useBlurhash} /> ); - let thumbnail = ; + const thumbnailDescription = card.get('image_description'); + const thumbnail = {thumbnailDescription}; let spoilerButton = ( + if(registrationsOpen) { + signupButton = ( + + + + ); + } else { + signupButton = ( + + ); + } + + signUpOrSignInButton = ( + <> + + + + {signupButton} + ); } @@ -353,6 +371,13 @@ class InteractionModal extends React.PureComponent {

{actionDescription}

+
+
+

+ {signUpOrSignInButton} +
+
+

diff --git a/app/javascript/flavours/glitch/features/ui/components/header.jsx b/app/javascript/flavours/glitch/features/ui/components/header.jsx index 1ebecbd29d..114d348d45 100644 --- a/app/javascript/flavours/glitch/features/ui/components/header.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/header.jsx @@ -13,7 +13,7 @@ import { Avatar } from 'flavours/glitch/components/avatar'; import { Icon } from 'flavours/glitch/components/icon'; import { WordmarkLogo, SymbolLogo } from 'flavours/glitch/components/logo'; import Permalink from 'flavours/glitch/components/permalink'; -import { registrationsOpen, me } from 'flavours/glitch/initial_state'; +import { registrationsOpen, me, sso_redirect } from 'flavours/glitch/initial_state'; const Account = connect(state => ({ account: state.getIn(['accounts', me]), @@ -74,28 +74,35 @@ class Header extends PureComponent { ); } else { - let signupButton; - if (registrationsOpen) { - signupButton = ( - - - - ); + if (sso_redirect) { + content = ( + + ) } else { - signupButton = ( - + let signupButton; + + if (registrationsOpen) { + signupButton = ( + + + + ); + } else { + signupButton = ( + + ); + } + + content = ( + <> + {signupButton} + + ); } - - content = ( - <> - {signupButton} - - - ); } return ( diff --git a/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx b/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx index ea7de7efbb..a8e46df8a1 100644 --- a/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx @@ -3,7 +3,7 @@ import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'flavours/glitch/actions/modal'; -import { registrationsOpen } from 'flavours/glitch/initial_state'; +import { registrationsOpen, sso_redirect } from 'flavours/glitch/initial_state'; import { useAppDispatch, useAppSelector } from 'flavours/glitch/store'; const SignInBanner = () => { @@ -16,7 +16,16 @@ const SignInBanner = () => { let signupButton; - const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + + if (sso_redirect) { + return ( +
+

+ +
+ ) + } if (registrationsOpen) { signupButton = ( diff --git a/app/javascript/flavours/glitch/initial_state.js b/app/javascript/flavours/glitch/initial_state.js index f07c9fb71f..46228c3306 100644 --- a/app/javascript/flavours/glitch/initial_state.js +++ b/app/javascript/flavours/glitch/initial_state.js @@ -82,6 +82,7 @@ * @property {boolean} use_blurhash * @property {boolean=} use_pending_items * @property {string} version + * @property {string} sso_redirect * @property {boolean} translation_enabled * @property {string} status_page_url * @property {boolean} system_emoji_font @@ -160,6 +161,7 @@ export const usePendingItems = getMeta('use_pending_items'); export const version = getMeta('version'); export const languages = initialState?.languages; export const statusPageUrl = getMeta('status_page_url'); +export const sso_redirect = getMeta('sso_redirect'); // Glitch-soc-specific settings export const maxChars = (initialState && initialState.max_toot_chars) || 500; From 254da0e8349f1f34594f3f8c4984db61db741c52 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 20:39:33 +0200 Subject: [PATCH 069/163] [Glitch] Change reblogs to be excluded from "Posts and replies" tab in web UI Port 1a2f3b8a9bc46985a8c6b8d6b5bfb1d8cc4519ff to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/actions/timelines.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index 7d4d56a784..fa69bca985 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -157,7 +157,7 @@ export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => ex export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote, allowLocalOnly } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, allow_local_only: !!allowLocalOnly, max_id: maxId, only_media: !!onlyMedia }, done); export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done); export const expandDirectTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }, done); -export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, tagged, max_id: maxId }); +export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId }); export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged }); export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 }); export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done); From 3037873bbcbf791fe2d39bbaa01f6f904c1882ac Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Aug 2023 20:39:45 +0200 Subject: [PATCH 070/163] [Glitch] Change design of hidden media overlay (again) in web UI Port 6ff571563cf415c2f481bcd667a79a7b8f5ad044 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/styles/components/misc.scss | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components/misc.scss b/app/javascript/flavours/glitch/styles/components/misc.scss index 064d500d5a..40fd159879 100644 --- a/app/javascript/flavours/glitch/styles/components/misc.scss +++ b/app/javascript/flavours/glitch/styles/components/misc.scss @@ -1345,7 +1345,7 @@ button.icon-button.active i.fa-retweet { display: flex; align-items: center; justify-content: center; - background: rgba($black, 0.5); + background: transparent; width: 100%; height: 100%; padding: 0; @@ -1354,6 +1354,10 @@ button.icon-button.active i.fa-retweet { color: $white; &__label { + background-color: rgba($black, 0.45); + backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + border-radius: 6px; + padding: 10px 15px; display: flex; align-items: center; justify-content: center; @@ -1367,6 +1371,13 @@ button.icon-button.active i.fa-retweet { font-weight: 400; font-size: 13px; } + + &:hover, + &:focus { + .spoiler-button__overlay__label { + background-color: rgba($black, 0.9); + } + } } } From 9d80be79a268f06bddca01f97a0a8741f0f857c2 Mon Sep 17 00:00:00 2001 From: Trevor Wolf Date: Fri, 4 Aug 2023 17:41:17 +1000 Subject: [PATCH 071/163] [Glitch] Fix light theme select option for hashtags Port 395dc4524fad4e3c65399f3da0a47872b4d25a36 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/styles/mastodon-light/diff.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index af0890580a..456252750b 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -420,6 +420,10 @@ html { border-top: 0; } +.column-settings__hashtags .column-select__option { + color: $white; +} + .dashboard__quick-access, .focal-point__preview strong, .admin-wrapper .content__heading__tabs a.selected { From 9d885a93fc5e2c33c19d79151fb964ea941164b1 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 15:48:29 +0200 Subject: [PATCH 072/163] [Glitch] Fix confirmation when closing media edition modal with unsaved changes Port aac7e9fd9d96d799986d08813522a2c646037b82 to glitch-soc Signed-off-by: Claire --- .../glitch/features/ui/components/focal_point_modal.jsx | 2 +- .../glitch/features/ui/components/modal_root.jsx | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx index ed3bed47e1..eeef422779 100644 --- a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx @@ -423,4 +423,4 @@ class FocalPointModal extends ImmutablePureComponent { export default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, -})(injectIntl(FocalPointModal, { withRef: true })); +})(injectIntl(FocalPointModal, { forwardRef: true })); diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx index 1e5bf40db7..7e94141fb8 100644 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx @@ -105,14 +105,7 @@ export default class ModalRoot extends PureComponent { handleClose = (ignoreFocus = false) => { const { onClose } = this.props; - let message = null; - try { - message = this._modal?.getWrappedInstance?.().getCloseConfirmationMessage?.(); - } catch (_) { - // injectIntl defines `getWrappedInstance` but errors out if `withRef` - // isn't set. - // This would be much smoother with react-intl 3+ and `forwardRef`. - } + const message = this._modal?.getCloseConfirmationMessage?.(); onClose(message, ignoreFocus); }; From 03858547bdc556f5aa7e410b16f8a108ec4d27d7 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Aug 2023 16:25:44 +0200 Subject: [PATCH 073/163] [Glitch] Fix report modal secondary buttons style Port 1037c413cf780be493ee114f84d858b818df4d6a to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/styles/components/modal.scss | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss index 9d8838783e..2759fc02f5 100644 --- a/app/javascript/flavours/glitch/styles/components/modal.scss +++ b/app/javascript/flavours/glitch/styles/components/modal.scss @@ -719,15 +719,16 @@ } .button.button-secondary { - border-color: $ui-button-secondary-border-color; - color: $ui-button-secondary-color; + border-color: $inverted-text-color; + color: $inverted-text-color; flex: 0 0 auto; &:hover, &:focus, &:active { - border-color: $ui-button-secondary-focus-background-color; - color: $ui-button-secondary-focus-color; + background: transparent; + border-color: $ui-button-background-color; + color: $ui-button-background-color; } } From b4dcac13152cd5813855a95d3baf0bfd0af16a8c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Aug 2023 09:46:11 +0200 Subject: [PATCH 074/163] [Glitch] Change header of hashtag timelines in web UI Port 2ddf268e73364dd41adc6f4a01f5a30a4f522f14 to glitch-soc Signed-off-by: Claire --- .../components/hashtag_header.jsx | 79 +++++++++++++++++++ .../features/hashtag_timeline/index.jsx | 35 ++------ .../glitch/styles/components/columns.scss | 30 +++++++ 3 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx b/app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx new file mode 100644 index 0000000000..986bf80b51 --- /dev/null +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx @@ -0,0 +1,79 @@ +import PropTypes from 'prop-types'; + +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; + +import ImmutablePropTypes from 'react-immutable-proptypes'; + +import Button from 'flavours/glitch/components/button'; +import { ShortNumber } from 'flavours/glitch/components/short_number'; + +const messages = defineMessages({ + followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, + unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, +}); + +const usesRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +const peopleRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +const usesTodayRenderer = (displayNumber, pluralReady) => ( + {displayNumber}, + }} + /> +); + +export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => { + if (!tag) { + return null; + } + + const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]); + const dividingCircle = {' · '}; + + return ( +
+
+

#{tag.get('name')}

+
+ +
+ + {dividingCircle} + + {dividingCircle} + +
+
+ ); +}); + +HashtagHeader.propTypes = { + tag: ImmutablePropTypes.map, + disabled: PropTypes.bool, + onClick: PropTypes.func, + intl: PropTypes.object, +}; \ No newline at end of file diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx b/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx index de67b06ca8..af889f6d61 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx @@ -1,9 +1,8 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; -import classNames from 'classnames'; import { Helmet } from 'react-helmet'; import ImmutablePropTypes from 'react-immutable-proptypes'; @@ -17,17 +16,11 @@ import { fetchHashtag, followHashtag, unfollowHashtag } from 'flavours/glitch/ac import { expandHashtagTimeline, clearTimeline } from 'flavours/glitch/actions/timelines'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; -import { Icon } from 'flavours/glitch/components/icon'; import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; +import { HashtagHeader } from './components/hashtag_header'; import ColumnSettingsContainer from './containers/column_settings_container'; - -const messages = defineMessages({ - followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, - unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, -}); - const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0, tag: state.getIn(['tags', props.params.id]), @@ -48,7 +41,6 @@ class HashtagTimeline extends PureComponent { hasUnread: PropTypes.bool, tag: ImmutablePropTypes.map, multiColumn: PropTypes.bool, - intl: PropTypes.object, }; handlePin = () => { @@ -188,27 +180,11 @@ class HashtagTimeline extends PureComponent { }; render () { - const { hasUnread, columnId, multiColumn, tag, intl } = this.props; + const { hasUnread, columnId, multiColumn, tag } = this.props; const { id, local } = this.props.params; const pinned = !!columnId; const { signedIn } = this.context.identity; - let followButton; - - if (tag) { - const following = tag.get('following'); - - const classes = classNames('column-header__button', { - active: following, - }); - - followButton = ( - - ); - } - return ( {columnId && } } + alwaysPrepend trackScroll={!pinned} scrollKey={`hashtag_timeline-${columnId}`} timelineId={`hashtag:${id}${local ? ':local' : ''}`} @@ -245,4 +222,4 @@ class HashtagTimeline extends PureComponent { } -export default connect(mapStateToProps)(injectIntl(HashtagTimeline)); +export default connect(mapStateToProps)(HashtagTimeline); diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index 2ca456191c..d4860258ed 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -1038,3 +1038,33 @@ $ui-header-height: 55px; } } } + +.hashtag-header { + border-bottom: 1px solid lighten($ui-base-color, 8%); + padding: 15px; + font-size: 17px; + line-height: 22px; + color: $darker-text-color; + + strong { + font-weight: 700; + } + + &__header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; + gap: 15px; + + h1 { + color: $primary-text-color; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 22px; + line-height: 33px; + font-weight: 700; + } + } +} From f19168ec19018165f2a4be911f1532796bb36b5c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 7 Aug 2023 17:58:29 +0200 Subject: [PATCH 075/163] [Glitch] Fix interaction modal layout Port cae84de47b2d775226d39389a27332730bd0a70a to glitch-soc Signed-off-by: Claire --- .../features/interaction_modal/index.jsx | 47 ++++++------------- .../features/ui/components/sign_in_banner.jsx | 4 +- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/app/javascript/flavours/glitch/features/interaction_modal/index.jsx b/app/javascript/flavours/glitch/features/interaction_modal/index.jsx index 67f9cd1711..3375afde6f 100644 --- a/app/javascript/flavours/glitch/features/interaction_modal/index.jsx +++ b/app/javascript/flavours/glitch/features/interaction_modal/index.jsx @@ -331,36 +331,24 @@ class InteractionModal extends React.PureComponent { } let signupButton; - let signUpOrSignInButton; if (sso_redirect) { - signUpOrSignInButton = ( - - + signupButton = ( + + - ) + ); + } else if (registrationsOpen) { + signupButton = ( + + + + ); } else { - if(registrationsOpen) { - signupButton = ( - - - - ); - } else { - signupButton = ( - - ); - } - - signUpOrSignInButton = ( - <> - - - - {signupButton} - + signupButton = ( + ); } @@ -371,13 +359,6 @@ class InteractionModal extends React.PureComponent {

{actionDescription}

-
-
-

- {signUpOrSignInButton} -
-
-

diff --git a/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx b/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx index a8e46df8a1..82a7fcdb95 100644 --- a/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx @@ -16,9 +16,9 @@ const SignInBanner = () => { let signupButton; - const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); + const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up'); - if (sso_redirect) { + if (sso_redirect) { return (

From fa3a993c544bca0869924c67dbc470366ca7d91d Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Aug 2023 16:32:40 +0200 Subject: [PATCH 076/163] [Glitch] Change the hashtag column to not display the hashtag header on pinned columns Port f08d97c0c2d90d2283301b460582a010ffa1e2bd to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/hashtag_timeline/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx b/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx index af889f6d61..675c4cc022 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx @@ -202,7 +202,7 @@ class HashtagTimeline extends PureComponent { } + prepend={pinned ? null : } alwaysPrepend trackScroll={!pinned} scrollKey={`hashtag_timeline-${columnId}`} From c6ec56e0b270242d83688fa959c1c82dc467011b Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 12 Aug 2023 00:06:37 +0200 Subject: [PATCH 077/163] [Glitch] Fix reply not preserving the language from the replied-to post Port a9219018a7b025c2c2ca824f2296de1e38070e16 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/importer/normalizer.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js index f58f275171..97f94d9e46 100644 --- a/app/javascript/flavours/glitch/actions/importer/normalizer.js +++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js @@ -75,7 +75,10 @@ export function normalizeStatus(status, normalOldStatus, settings) { normalStatus.contentHtml = normalOldStatus.get('contentHtml'); normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); normalStatus.hidden = normalOldStatus.get('hidden'); - normalStatus.translation = normalOldStatus.get('translation'); + + if (normalOldStatus.get('translation')) { + normalStatus.translation = normalOldStatus.get('translation'); + } } else { const spoilerText = normalStatus.spoiler_text || ''; const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(//g, '\n').replace(/<\/p>

/g, '\n\n'); From e204d2090f67819f5492ad2d32b6e8b03fe801eb Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 09:38:08 +0200 Subject: [PATCH 078/163] Remove old non-unique index on preview_cards statuses join table (#26447) --- ...ew_cards_statuses_on_status_id_and_preview_card_id.rb | 9 +++++++++ db/schema.rb | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 db/post_migrate/20230811103651_remove_index_preview_cards_statuses_on_status_id_and_preview_card_id.rb diff --git a/db/post_migrate/20230811103651_remove_index_preview_cards_statuses_on_status_id_and_preview_card_id.rb b/db/post_migrate/20230811103651_remove_index_preview_cards_statuses_on_status_id_and_preview_card_id.rb new file mode 100644 index 0000000000..11e0bf6f1b --- /dev/null +++ b/db/post_migrate/20230811103651_remove_index_preview_cards_statuses_on_status_id_and_preview_card_id.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class RemoveIndexPreviewCardsStatusesOnStatusIdAndPreviewCardId < ActiveRecord::Migration[7.0] + disable_ddl_transaction! + + def change + remove_index :preview_cards_statuses, column: [:status_id, :preview_card_id], name: :index_preview_cards_statuses_on_status_id_and_preview_card_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 79bebb5ed5..fc997f6340 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_08_03_112520) do +ActiveRecord::Schema[7.0].define(version: 2023_08_11_103651) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -809,7 +809,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_03_112520) do create_table "preview_cards_statuses", primary_key: ["status_id", "preview_card_id"], force: :cascade do |t| t.bigint "preview_card_id", null: false t.bigint "status_id", null: false - t.index ["status_id", "preview_card_id"], name: "index_preview_cards_statuses_on_status_id_and_preview_card_id" end create_table "relays", force: :cascade do |t| From 98912c5caf8c27f2326a7eb59c2939c595c7cb95 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 14 Aug 2023 09:40:07 +0200 Subject: [PATCH 079/163] Upgrade `@types/react` (#26457) --- yarn.lock | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b799cda19..76031d9597 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2427,16 +2427,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26": - version "18.2.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.12.tgz#95d584338610b78bb9ba0415e3180fb03debdf97" - integrity sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^18.2.7": +"@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.20" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== @@ -11167,6 +11158,7 @@ string-length@^4.0.1: strip-ansi "^6.0.0" "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11265,6 +11257,7 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -12751,6 +12744,7 @@ workbox-window@7.0.0, workbox-window@^7.0.0: workbox-core "7.0.0" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + name wrap-ansi-cjs version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From 10651d8b8ab269ab98ba71aa41993038605a6381 Mon Sep 17 00:00:00 2001 From: mogaminsk Date: Mon, 14 Aug 2023 19:04:04 +0900 Subject: [PATCH 080/163] Fix "Create Account" button in interaction modal (#26459) --- .../mastodon/features/interaction_modal/index.jsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index 220719a94a..84e4309254 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -21,12 +21,16 @@ const messages = defineMessages({ const mapStateToProps = (state, { accountId }) => ({ displayNameHtml: state.getIn(['accounts', accountId, 'display_name_html']), + signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up', }); const mapDispatchToProps = (dispatch) => ({ onSignupClick() { - dispatch(closeModal()); - dispatch(openModal('CLOSED_REGISTRATIONS')); + dispatch(closeModal({ + modalType: undefined, + ignoreFocus: false, + })); + dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })); }, }); @@ -294,6 +298,7 @@ class InteractionModal extends React.PureComponent { url: PropTypes.string, type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']), onSignupClick: PropTypes.func.isRequired, + signupUrl: PropTypes.string.isRequired, }; handleSignupClick = () => { @@ -301,7 +306,7 @@ class InteractionModal extends React.PureComponent { }; render () { - const { url, type, displayNameHtml } = this.props; + const { url, type, displayNameHtml, signupUrl } = this.props; const name = ; @@ -340,7 +345,7 @@ class InteractionModal extends React.PureComponent { ); } else if (registrationsOpen) { signupButton = ( - + ); From 489f8cdbc4d2e6ca7e0135b244043395523f61b6 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 14 Aug 2023 12:08:43 +0200 Subject: [PATCH 081/163] Improve Renovate configuration (#26306) --- .github/renovate.json5 | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 78530d65b4..3131083ca1 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,20 +1,21 @@ { $schema: 'https://docs.renovatebot.com/renovate-schema.json', extends: [ - 'config:base', - ':dependencyDashboard', + 'config:recommended', ':labels(dependencies)', ':maintainLockFilesMonthly', // update non-direct dependencies monthly - ':prConcurrentLimit10', // only 10 open PRs at the same time + ':prConcurrentLimitNone', // Remove limit for open PRs at any time. + ':prHourlyLimit2' // Rate limit PR creation to a maximum of two per hour. ], - stabilityDays: 3, // Wait 3 days after the package has been published before upgrading it + minimumReleaseAge: "3", // Wait 3 days after the package has been published before upgrading it // packageRules order is important, they are applied from top to bottom and are merged, // meaning the most important ones must be at the bottom, for example grouping rules // If we do not want a package to be grouped with others, we need to set its groupName // to `null` after any other rule set it to something. + dependencyDashboardHeader: 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. Before approving any upgrade: read the description and comments in the [`renovate.json5` file](https://github.com/mastodon/mastodon/blob/main/.github/renovate.json5).', packageRules: [ { - // Ignore major version bumps for these node packages + // Require Dependency Dashboard Approval for major version bumps of these node packages matchManagers: ['npm'], matchPackageNames: [ 'tesseract.js', // Requires code changes @@ -41,10 +42,10 @@ 'react-router-dom', ], matchUpdateTypes: ['major'], - enabled: false, + "dependencyDashboardApproval": true }, { - // Ignore major version bumps for these Ruby packages + // Require Dependency Dashboard Approval for major version bumps of these Ruby packages matchManagers: ['bundler'], matchPackageNames: [ 'rack', // Needs to be synced with Rails version @@ -55,7 +56,7 @@ 'redis', // Requires manual upgrade and sync with Sidekiq version ], matchUpdateTypes: ['major'], - enabled: false, + "dependencyDashboardApproval": true }, { // Update Github Actions and Docker images weekly @@ -63,25 +64,25 @@ extends: ['schedule:weekly'], }, { - // Ignore major & minor bumps for the ruby image, this needs to be synced with .ruby-version + // Require Dependency Dashboard Approval for major & minor bumps for the ruby image, this needs to be synced with .ruby-version matchManagers: ['dockerfile'], matchPackageNames: ['moritzheiber/ruby-jemalloc'], matchUpdateTypes: ['minor', 'major'], - enabled: false, + "dependencyDashboardApproval": true }, { - // Ignore major bump for the node image, this needs to be synced with .nvmrc + // Require Dependency Dashboard Approval for major bumps for the node image, this needs to be synced with .nvmrc matchManagers: ['dockerfile'], matchPackageNames: ['node'], matchUpdateTypes: ['major'], - enabled: false, + "dependencyDashboardApproval": true }, { - // Ignore major postgres bumps in the docker-compose file, as those break dev environments + // Require Dependency Dashboard Approval for major postgres bumps in the docker-compose file, as those break dev environments matchManagers: ['docker-compose'], matchPackageNames: ['postgres'], matchUpdateTypes: ['major'], - enabled: false, + "dependencyDashboardApproval": true }, { // Update devDependencies every week, with one grouped PR From ade07610e644195fbfc008787cb941741e825c58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 13:38:41 +0200 Subject: [PATCH 082/163] Update dependency faker to v3.2.1 (#26474) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9eef038557..b5b57bfaf0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -269,7 +269,7 @@ GEM tzinfo excon (0.100.0) fabrication (2.30.0) - faker (3.2.0) + faker (3.2.1) i18n (>= 1.8.11, < 2) faraday (1.10.3) faraday-em_http (~> 1.0) From 7cf538f54776fe444c16099ef9d930f30316e25c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 13:39:28 +0200 Subject: [PATCH 083/163] Update dependency autoprefixer to v10.4.15 (#26473) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 76031d9597..09deddc764 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3286,12 +3286,12 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^10.4.14: - version "10.4.14" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + version "10.4.15" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" + integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" + browserslist "^4.21.10" + caniuse-lite "^1.0.30001520" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" @@ -3705,7 +3705,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.0.0, browserslist@^4.21.4: version "4.21.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.8.tgz#db2498e1f4b80ed199c076248a094935860b6017" integrity sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw== @@ -3715,7 +3715,7 @@ browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5: node-releases "^2.0.12" update-browserslist-db "^1.0.11" -browserslist@^4.21.9: +browserslist@^4.21.10, browserslist@^4.21.9: version "4.21.10" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== @@ -3885,7 +3885,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464: +caniuse-lite@^1.0.0: version "1.0.30001503" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz#88b6ff1b2cf735f1f3361dc1a15b59f0561aa398" integrity sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw== @@ -3895,10 +3895,10 @@ caniuse-lite@^1.0.30001502: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== -caniuse-lite@^1.0.30001517: - version "1.0.30001519" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" - integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== +caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: + version "1.0.30001520" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006" + integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== chalk@5.2.0: version "5.2.0" From 81108ad3e8cc49a20f16ff85a7ed46f4098b3925 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:10:46 +0200 Subject: [PATCH 084/163] Update dependency nokogiri to v1.15.4 (#26476) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b5b57bfaf0..c8a945da2d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -478,7 +478,7 @@ GEM net-protocol net-ssh (7.1.0) nio4r (2.5.9) - nokogiri (1.15.3) + nokogiri (1.15.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.15.0) From e7ad14959098344a3ec974b875858c4031ef3393 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 14 Aug 2023 14:53:13 +0200 Subject: [PATCH 085/163] Fix `lint:json` not processing `json5` extension (#26481) --- .github/renovate.json5 | 14 +++++++------- package.json | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 3131083ca1..879a564e1c 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -5,9 +5,9 @@ ':labels(dependencies)', ':maintainLockFilesMonthly', // update non-direct dependencies monthly ':prConcurrentLimitNone', // Remove limit for open PRs at any time. - ':prHourlyLimit2' // Rate limit PR creation to a maximum of two per hour. + ':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour. ], - minimumReleaseAge: "3", // Wait 3 days after the package has been published before upgrading it + minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it // packageRules order is important, they are applied from top to bottom and are merged, // meaning the most important ones must be at the bottom, for example grouping rules // If we do not want a package to be grouped with others, we need to set its groupName @@ -42,7 +42,7 @@ 'react-router-dom', ], matchUpdateTypes: ['major'], - "dependencyDashboardApproval": true + dependencyDashboardApproval: true, }, { // Require Dependency Dashboard Approval for major version bumps of these Ruby packages @@ -56,7 +56,7 @@ 'redis', // Requires manual upgrade and sync with Sidekiq version ], matchUpdateTypes: ['major'], - "dependencyDashboardApproval": true + dependencyDashboardApproval: true, }, { // Update Github Actions and Docker images weekly @@ -68,21 +68,21 @@ matchManagers: ['dockerfile'], matchPackageNames: ['moritzheiber/ruby-jemalloc'], matchUpdateTypes: ['minor', 'major'], - "dependencyDashboardApproval": true + dependencyDashboardApproval: true, }, { // Require Dependency Dashboard Approval for major bumps for the node image, this needs to be synced with .nvmrc matchManagers: ['dockerfile'], matchPackageNames: ['node'], matchUpdateTypes: ['major'], - "dependencyDashboardApproval": true + dependencyDashboardApproval: true, }, { // Require Dependency Dashboard Approval for major postgres bumps in the docker-compose file, as those break dev environments matchManagers: ['docker-compose'], matchPackageNames: ['postgres'], matchUpdateTypes: ['major'], - "dependencyDashboardApproval": true + dependencyDashboardApproval: true, }, { // Update devDependencies every week, with one grouped PR diff --git a/package.json b/package.json index 5c109c2588..0dbd84ee85 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build:development": "cross-env RAILS_ENV=development NODE_ENV=development ./bin/webpack", "build:production": "cross-env RAILS_ENV=production NODE_ENV=production ./bin/webpack", "fix:js": "yarn lint:js --fix", - "fix:json": "prettier --write \"**/*.json\"", + "fix:json": "prettier --write \"**/*.{json,json5}\"", "fix:md": "prettier --write \"**/*.md\"", "fix:sass": "stylelint --fix \"**/*.{css,scss}\" && prettier --write \"**/*.{css,scss}\"", "fix:yml": "prettier --write \"**/*.{yaml,yml}\"", @@ -16,7 +16,7 @@ "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' '--ignore=**/*.d.ts' --out-file app/javascript/mastodon/locales/en.json --format config/formatjs-formatter.js", "jest": "cross-env NODE_ENV=test jest", "lint:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives", - "lint:json": "prettier --check \"**/*.json\"", + "lint:json": "prettier --check \"**/*.{json,json5}\"", "lint:md": "prettier --check \"**/*.md\"", "lint:sass": "stylelint \"**/*.{css,scss}\" && prettier --check \"**/*.{css,scss}\"", "lint:yml": "prettier --check \"**/*.{yaml,yml}\"", From 30f84f10b18f32ec415d6dc183b3112e548b1c7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:54:31 +0200 Subject: [PATCH 086/163] New Crowdin Translations (automated) (#26444) Co-authored-by: GitHub Actions Co-authored-by: Claire --- app/javascript/mastodon/locales/ar.json | 2 + app/javascript/mastodon/locales/ast.json | 1 + app/javascript/mastodon/locales/fr.json | 6 +- app/javascript/mastodon/locales/gd.json | 40 +++---- app/javascript/mastodon/locales/hu.json | 2 +- app/javascript/mastodon/locales/kab.json | 13 +++ app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/lv.json | 7 ++ app/javascript/mastodon/locales/ms.json | 38 +++++++ app/javascript/mastodon/locales/nn.json | 6 +- app/javascript/mastodon/locales/no.json | 2 +- app/javascript/mastodon/locales/sk.json | 2 + app/javascript/mastodon/locales/tr.json | 14 +-- app/javascript/mastodon/locales/vi.json | 76 ++++++------- config/locales/ar.yml | 6 ++ config/locales/de.yml | 2 +- config/locales/devise.vi.yml | 2 +- config/locales/doorkeeper.vi.yml | 2 +- config/locales/gd.yml | 18 ++-- config/locales/kab.yml | 17 +-- config/locales/ko.yml | 4 +- config/locales/ms.yml | 129 +++++++++++++++++++++++ config/locales/nn.yml | 14 +-- config/locales/simple_form.gd.yml | 8 +- config/locales/simple_form.ms.yml | 39 +++++++ config/locales/simple_form.vi.yml | 48 ++++----- config/locales/vi.yml | 60 +++++------ config/locales/zh-CN.yml | 20 ++-- 28 files changed, 410 insertions(+), 170 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 035ba3f68f..f5843d7d83 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -201,6 +201,7 @@ "dismissable_banner.community_timeline": "هذه هي أحدث المشاركات العامة من الأشخاص الذين تُستضاف حساباتهم على {domain}.", "dismissable_banner.dismiss": "رفض", "dismissable_banner.explore_links": "هذه القصص الإخبارية يتحدث عنها حاليًا أشخاص على هذا الخادم وكذا على الخوادم الأخرى للشبكة اللامركزية.", + "dismissable_banner.explore_statuses": "هذه هي المنشورات الرائجة على الشبكات الاجتماعيّة اليوم. تظهر المنشورات التي أعيد مشاركتها وحازت على مفضّلات أكثر في مرتبة عليا.", "dismissable_banner.explore_tags": "هذه الوسوم تكتسب جذب اهتمام الناس حاليًا على هذا الخادم وكذا على الخوادم الأخرى للشبكة اللامركزية.", "dismissable_banner.public_timeline": "هذه هي أحدث المنشورات العامة من الناس على الشبكة الاجتماعية التي يتبعها الناس على {domain}.", "embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.", @@ -315,6 +316,7 @@ "interaction_modal.on_another_server": "على خادم مختلف", "interaction_modal.on_this_server": "على هذا الخادم", "interaction_modal.sign_in": "لم تقم بتسجيل الدخول إلى هذا الخادم. أين هو مستضاف حسابك؟", + "interaction_modal.sign_in_hint": "تلميح: هذا هو الموقع الذي سجّلت عن طريقه. إن لم تتذكّر/ين اسم الموقع، يمكنك البحث عن الرسالة الترحيبيّة في بريدك الالكتروني. يمكنك أيضاً استخدام إسم المستخدم/ـة الكامل! (مثلاً: @Mastadon@mastadon.social)", "interaction_modal.title.favourite": "إضافة منشور {name} إلى المفضلة", "interaction_modal.title.follow": "اتبع {name}", "interaction_modal.title.reblog": "مشاركة منشور {name}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 597d294a6f..af52135ac0 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -212,6 +212,7 @@ "hashtag.column_header.tag_mode.none": "ensin {additional}", "hashtag.column_settings.select.no_options_message": "Nun s'atopó nenguna suxerencia", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.follow": "Siguir a la etiqueta", "hashtag.unfollow": "Dexar de siguir a la etiqueta", "home.column_settings.basic": "Configuración básica", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 157d984191..2bef3bb4b3 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -38,7 +38,7 @@ "account.following_counter": "{count, plural, one {{counter} Abonnement} other {{counter} Abonnements}}", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", - "account.go_to_profile": "Voir le profil", + "account.go_to_profile": "Aller au profil", "account.hide_reblogs": "Masquer les partages de @{name}", "account.in_memoriam": "En mémoire de.", "account.joined_short": "Ici depuis", @@ -50,9 +50,9 @@ "account.moved_to": "{name} a indiqué que son nouveau compte est maintenant :", "account.mute": "Masquer @{name}", "account.mute_notifications_short": "Désactiver les alertes", - "account.mute_short": "Mettre en sourdine", + "account.mute_short": "Masquer", "account.muted": "Masqué·e", - "account.no_bio": "Aucune description enregistrée.", + "account.no_bio": "Aucune description fournie.", "account.open_original_page": "Ouvrir la page d'origine", "account.posts": "Messages", "account.posts_with_replies": "Messages et réponses", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 3f088b2ea7..ba859498f6 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -13,14 +13,14 @@ "about.rules": "Riaghailtean an fhrithealaiche", "account.account_note_header": "Nòta", "account.add_or_remove_from_list": "Cuir ris no thoir air falbh o na liostaichean", - "account.badges.bot": "Bot", + "account.badges.bot": "Fèin-obrachail", "account.badges.group": "Buidheann", "account.block": "Bac @{name}", "account.block_domain": "Bac an àrainn {domain}", "account.block_short": "Bac", "account.blocked": "’Ga bhacadh", "account.browse_more_on_origin_server": "Rùraich barrachd dheth air a’ phròifil thùsail", - "account.cancel_follow_request": "Cuir d’ iarrtas leantainn dhan dàrna taobh", + "account.cancel_follow_request": "Sguir dhen leantainn", "account.direct": "Thoir iomradh air @{name} gu prìobhaideach", "account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris", "account.domain_blocked": "Chaidh an àrainn a bhacadh", @@ -114,7 +114,7 @@ "column.directory": "Rùraich sna pròifilean", "column.domain_blocks": "Àrainnean bacte", "column.favourites": "Annsachdan", - "column.firehose": "Inbhirean beòtha", + "column.firehose": "An saoghal poblach", "column.follow_requests": "Iarrtasan leantainn", "column.home": "Dachaigh", "column.lists": "Liostaichean", @@ -150,7 +150,7 @@ "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", "compose_form.publish": "Foillsich", - "compose_form.publish_form": "Foillsich", + "compose_form.publish_form": "Post ùr", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Sàbhail na h-atharraichean", "compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}", @@ -200,9 +200,9 @@ "disabled_account_banner.text": "Tha an cunntas {disabledAccount} agad à comas aig an àm seo.", "dismissable_banner.community_timeline": "Seo na postaichean poblach as ùire o dhaoine aig a bheil cunntas air {domain}.", "dismissable_banner.dismiss": "Leig seachad", - "dismissable_banner.explore_links": "Seo na naidheachdan air a bhithear a’ bruidhinn an-dràsta fhèin air an fhrithealaiche seo is frithealaichean eile dhen lìonra sgaoilte.", - "dismissable_banner.explore_statuses": "Tha fèill air na postaichean seo a’ fàs an-diugh thar an lìona shòisealta. Gheibh postaichean nas ùire le barrachd brosnaichean is annsachdan rangachadh nas àirde.", - "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs an-diugh air an fhrithealaich seo is frithealaichean eile dhen lìonra sgaoilte. Gheibh tagaichean hais a tha gan cleachdadh le daoine eadar-dhealaichte rangachadh nas àirde.", + "dismissable_banner.explore_links": "Seo na cinn-naidheachd a tha ’gan co-roinneadh as trice thar an lìona shòisealta an-diugh. Gheibh naidheachdan nas ùire a tha ’gan co-roinneadh le daoine eadar-dhealaichte rangachadh nas àirde.", + "dismissable_banner.explore_statuses": "Tha fèill air na postaichean seo a’ fàs thar an lìona shòisealta an-diugh. Gheibh postaichean nas ùire le barrachd brosnaichean is annsachdan rangachadh nas àirde.", + "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs air an fhrithealaiche seo is frithealaichean eile dhen lìonra sgaoilte an-diugh. Gheibh tagaichean hais a tha ’gan cleachdadh le daoine eadar-dhealaichte rangachadh nas àirde.", "dismissable_banner.public_timeline": "Seo na postaichean poblach as ùire o dhaoine air an lìonra sòisealta tha ’gan leantainn le daoine air {domain}.", "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.", "embed.preview": "Seo an coltas a bhios air:", @@ -235,7 +235,7 @@ "empty_column.follow_requests": "Chan eil iarrtas leantainn agad fhathast. Nuair a gheibh thu fear, nochdaidh e an-seo.", "empty_column.followed_tags": "Cha do lean thu taga hais sam bith fhathast. Nuair a leanas tu, nochdaidh iad an-seo.", "empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.", - "empty_column.home": "Tha loidhne-ama na dachaigh agad falamh! Lean barrachd dhaoine gus a lìonadh. {suggestions}", + "empty_column.home": "Tha loidhne-ama na dachaigh agad falamh! Lean barrachd dhaoine gus a lìonadh.", "empty_column.list": "Chan eil dad air an liosta seo fhathast. Nuair a phostaicheas buill a tha air an liosta seo postaichean ùra, nochdaidh iad an-seo.", "empty_column.lists": "Chan eil liosta agad fhathast. Nuair chruthaicheas tu tè, nochdaidh i an-seo.", "empty_column.mutes": "Cha do mhùch thu cleachdaiche sam bith fhathast.", @@ -301,7 +301,7 @@ "hashtag.follow": "Lean an taga hais", "hashtag.unfollow": "Na lean an taga hais tuilleadh", "home.actions.go_to_explore": "Faic na tha a’ treandadh", - "home.actions.go_to_suggestions": "Lorg daoine a leanas tu", + "home.actions.go_to_suggestions": "Lorg daoine gus an leantainn", "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", @@ -333,7 +333,7 @@ "keyboard_shortcuts.column": "Cuir am fòcas air colbh", "keyboard_shortcuts.compose": "Cuir am fòcas air raon teacsa an sgrìobhaidh", "keyboard_shortcuts.description": "Tuairisgeul", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "a dh’fhosgladh colbh nan iomraidhean prìobhaideach", "keyboard_shortcuts.down": "Gluais sìos air an liosta", "keyboard_shortcuts.enter": "Fosgail post", "keyboard_shortcuts.favourite": "Cuir am post ris na h-annsachdan", @@ -380,7 +380,7 @@ "lists.replies_policy.followed": "Cleachdaiche sam bith a leanas mi", "lists.replies_policy.list": "Buill na liosta", "lists.replies_policy.none": "Na seall idir", - "lists.replies_policy.title": "Seall na freagairtean gu:", + "lists.replies_policy.title": "Seall freagairtean do:", "lists.search": "Lorg am measg nan daoine a leanas tu", "lists.subheading": "Na liostaichean agad", "load_pending": "{count, plural, one {# nì ùr} two {# nì ùr} few {# nithean ùra} other {# nì ùr}}", @@ -418,7 +418,7 @@ "not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.", "notification.admin.report": "Rinn {name} gearan mu {target}", "notification.admin.sign_up": "Chlàraich {name}", - "notification.favourite": "Chuir {name} am post agad ris na h-annsachdan", + "notification.favourite": "Is annsa le {name} am post agad", "notification.follow": "Tha {name} ’gad leantainn a-nis", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", "notification.mention": "Thug {name} iomradh ort", @@ -466,12 +466,12 @@ "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh", "onboarding.action.back": "Air ais leam", "onboarding.actions.back": "Air ais leam", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_explore": "Thoir dha na treandaichean mi", + "onboarding.actions.go_to_home": "Thoir dhachaigh mi", "onboarding.compose.template": "Shin thu, a #Mhastodon!", "onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.", "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.follows.title": "Cuir dreach pearsanta air do dhachaigh", "onboarding.share.lead": "Innis do dhaoine mar a gheibh iad grèim ort air Mastodon!", "onboarding.share.message": "Is mise {username} air #Mastodon! Thig ’gam leantainn air {url}", "onboarding.share.next_steps": "Ceuman eile as urrainn dhut gabhail:", @@ -480,13 +480,13 @@ "onboarding.start.skip": "Want to skip right ahead?", "onboarding.start.title": "Rinn thu a’ chùis air!", "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.follow_people.title": "Cuir dreach pearsanta air do dhachaigh", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.title": "Dèan a’ chiad phost agad", "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!", - "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.steps.setup_profile.title": "Gnàthaich a’ phròifil agad", + "onboarding.steps.share_profile.body": "Leig fios dha do charaidean mar a gheibh iad lorg ort air Mastodon", + "onboarding.steps.share_profile.title": "Co-roinn a’ phròifil Mastodon agad", "onboarding.tips.2fa": "An robh fios agad? ’S urrainn dhut an cunntas agad a dhìon is tu a’ suidheachadh dearbhadh dà-cheumnach ann an roghainnean a’ chunntais agad. Obraichidh e le aplacaid dearbhaidh dhà-cheumnaich sam bith a thogras tu gun fheum air àireamh fòn!", "onboarding.tips.accounts_from_other_servers": "An robh fios agad? On a tha Mastodon sgaoilte, tachraidh tu air pròifilean a tha ’gan òstadh air frithealaichean eile. ’S urrainn dhut bruidhinn riutha gun chnap-starra co-dhiù! ’S e ainm an fhrithealaiche a tha san dàrna leth dhen ainm-chleachdaiche aca!", "onboarding.tips.migration": "An robh fios agad? Ma thig an latha nach eil thu toilichte le {domain} mar an fhrithealaiche agad tuilleadh, ’s urrainn dhut imrich gu frithealaiche Mastodon eile gun a bhith a’ call an luchd-leantainn agad. ’S urrainn dhut fiù frithealaiche agad fhèin òstadh!", @@ -655,7 +655,7 @@ "status.show_more": "Seall barrachd dheth", "status.show_more_all": "Seall barrachd dhen a h-uile", "status.show_original": "Seall an tionndadh tùsail", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "Phostaich {user} {attachmentCount, plural, one {{attachmentCount} cheanglachan} two {{attachmentCount} cheanglachan} few {{attachmentCount} ceanglachain} other {{attachmentCount} ceanglachan}}", "status.translate": "Eadar-theangaich", "status.translated_from_with": "Air eadar-theangachadh o {lang} le {provider}", "status.uncached_media_warning": "Chan eil ro-shealladh ri fhaighinn", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 4b32af595b..5645f4806c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -114,7 +114,7 @@ "column.directory": "Profilok böngészése", "column.domain_blocks": "Letiltott tartománynevek", "column.favourites": "Kedvencek", - "column.firehose": "Élő hírfolyamok", + "column.firehose": "Hírfolyamok", "column.follow_requests": "Követési kérelmek", "column.home": "Kezdőlap", "column.lists": "Listák", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 487fede3fe..0f200cf6fb 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -7,6 +7,7 @@ "account.badges.group": "Agraw", "account.block": "Seḥbes @{name}", "account.block_domain": "Ffer kra i d-yekkan seg {domain}", + "account.block_short": "Sewḥel", "account.blocked": "Yettusewḥel", "account.browse_more_on_origin_server": "Snirem ugar deg umeɣnu aneẓli", "account.cancel_follow_request": "Withdraw follow request", @@ -28,6 +29,7 @@ "account.media": "Timidyatin", "account.mention": "Bder-d @{name}", "account.mute": "Sgugem @{name}", + "account.mute_short": "Sgugem", "account.muted": "Yettwasgugem", "account.open_original_page": "Ldi asebter anasli", "account.posts": "Tisuffaɣ", @@ -70,6 +72,7 @@ "column.community": "Tasuddemt tadigant", "column.directory": "Inig deg imaɣnuten", "column.domain_blocks": "Taɣulin yeffren", + "column.favourites": "Imenyafen", "column.follow_requests": "Isuturen n teḍfeṛt", "column.home": "Agejdan", "column.lists": "Tibdarin", @@ -90,6 +93,7 @@ "community.column_settings.remote_only": "Anmeggag kan", "compose.language.change": "Beddel tutlayt", "compose.language.search": "Nadi tutlayin …", + "compose.published.open": "Ldi", "compose_form.direct_message_warning_learn_more": "Issin ugar", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", @@ -177,6 +181,7 @@ "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", "explore.search_results": "Igemmaḍ n unadi", + "explore.suggested_follows": "Imdanen", "explore.title": "Snirem", "explore.trending_links": "Isallen", "explore.trending_statuses": "Tisuffiɣin", @@ -184,6 +189,8 @@ "filter_modal.added.settings_link": "asebter n yiɣewwaṛen", "filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}", "filter_modal.select_filter.search": "Nadi neɣ snulfu-d", + "firehose.all": "Akk", + "firehose.local": "Deg uqeddac-ayi", "follow_request.authorize": "Ssireg", "follow_request.reject": "Agi", "footer.about": "Γef", @@ -252,6 +259,7 @@ "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Γer zdat", "lightbox.previous": "Γer deffir", + "link_preview.author": "S-ɣur {name}", "lists.account.add": "Rnu ɣer tebdart", "lists.account.remove": "Kkes seg tebdart", "lists.delete": "Kkes tabdart", @@ -280,6 +288,7 @@ "navigation_bar.domain_blocks": "Tiɣula yeffren", "navigation_bar.edit_profile": "Ẓreg amaɣnu", "navigation_bar.explore": "Snirem", + "navigation_bar.favourites": "Imenyafen", "navigation_bar.filters": "Awalen i yettwasgugmen", "navigation_bar.follow_requests": "Isuturen n teḍfeṛt", "navigation_bar.follows_and_followers": "Imeḍfaṛen akked wid i teṭṭafaṛeḍ", @@ -303,6 +312,7 @@ "notifications.clear": "Sfeḍ tilɣa", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", "notifications.column_settings.alert": "Tilɣa n tnarit", + "notifications.column_settings.favourite": "Imenyafen:", "notifications.column_settings.filter_bar.advanced": "Ssken-d meṛṛa tiggayin", "notifications.column_settings.filter_bar.category": "Iri n usizdeg uzrib", "notifications.column_settings.follow": "Imeḍfaṛen imaynuten:", @@ -316,6 +326,7 @@ "notifications.column_settings.status": "Tiẓenẓunin timaynutin:", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", + "notifications.filter.favourites": "Imenyafen", "notifications.filter.follows": "Yeṭafaṛ", "notifications.filter.mentions": "Abdar", "notifications.filter.polls": "Igemmaḍ n usenqed", @@ -328,6 +339,7 @@ "notifications_permission_banner.title": "Ur zeggel acemma", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.compose.template": "Azul a #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.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", @@ -396,6 +408,7 @@ "server_banner.learn_more": "Issin ugar", "sign_in_banner.create_account": "Snulfu-d amiḍan", "sign_in_banner.sign_in": "Qqen", + "sign_in_banner.sso_redirect": "Qqen neɣ jerred", "status.admin_status": "Open this status in the moderation interface", "status.block": "Seḥbes @{name}", "status.bookmark": "Creḍ", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index b0b2e68a16..72195770b4 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -623,7 +623,7 @@ "status.filter": "이 게시물을 필터", "status.filtered": "필터로 걸러짐", "status.hide": "게시물 숨기기", - "status.history.created": "{name} 님이 {date}에 생성함", + "status.history.created": "{name} 님이 {date}에 처음 게시함", "status.history.edited": "{name} 님이 {date}에 수정함", "status.load_more": "더 보기", "status.media.open": "클릭하여 열기", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index cff2aa4adf..f45b0427e0 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -17,6 +17,7 @@ "account.badges.group": "Grupa", "account.block": "Bloķēt @{name}", "account.block_domain": "Bloķēt domēnu {domain}", + "account.block_short": "Bloķēt", "account.blocked": "Bloķēts", "account.browse_more_on_origin_server": "Pārlūkot vairāk sākotnējā profilā", "account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu", @@ -48,7 +49,9 @@ "account.mention": "Pieminēt @{name}", "account.moved_to": "{name} norādīja, ka viņu jaunais konts tagad ir:", "account.mute": "Apklusināt @{name}", + "account.mute_short": "Apklusināt", "account.muted": "Apklusināts", + "account.no_bio": "Apraksts nav sniegts.", "account.open_original_page": "Atvērt oriģinālo lapu", "account.posts": "Ieraksti", "account.posts_with_replies": "Ieraksti un atbildes", @@ -104,6 +107,7 @@ "column.direct": "Privāti pieminēti", "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Bloķētie domēni", + "column.favourites": "Iecienīti", "column.follow_requests": "Sekošanas pieprasījumi", "column.home": "Sākums", "column.lists": "Saraksti", @@ -124,6 +128,7 @@ "community.column_settings.remote_only": "Tikai attālinātie", "compose.language.change": "Mainīt valodu", "compose.language.search": "Meklēt valodas...", + "compose.published.open": "Atvērt", "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk", "compose_form.encryption_warning": "Ziņas vietnē Mastodon nav pilnībā šifrētas. Nedalies ar sensitīvu informāciju caur Mastodon.", "compose_form.hashtag_warning": "Šī ziņa netiks norādīta zem nevienas atsauces, jo tā nav publiska. Tikai publiskās ziņās var meklēt pēc atsauces.", @@ -251,6 +256,7 @@ "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", + "firehose.remote": "Citi serveri", "follow_request.authorize": "Autorizēt", "follow_request.reject": "Noraidīt", "follow_requests.unlocked_explanation": "Lai gan tavs konts nav bloķēts, {domain} darbinieki iedomājās, ka, iespējams, vēlēsies pārskatīt pieprasījumus no šiem kontiem.", @@ -452,6 +458,7 @@ "picture_in_picture.restore": "Novietot atpakaļ", "poll.closed": "Pabeigta", "poll.refresh": "Atsvaidzināt", + "poll.reveal": "Skatīt rezultātus", "poll.total_people": "{count, plural, zero {# cilvēku} one {# persona} other {# cilvēki}}", "poll.total_votes": "{count, plural, zero {# balsojumu} one {# balsojums} other {# balsojumi}}", "poll.vote": "Balsot", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 2e02e6af0d..8b389c48fa 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -21,6 +21,7 @@ "account.blocked": "Disekat", "account.browse_more_on_origin_server": "Layari selebihnya di profil asal", "account.cancel_follow_request": "Menarik balik permintaan mengikut", + "account.direct": "Sebut secara persendirian @{name}", "account.disable_notifications": "Berhenti maklumkan saya apabila @{name} mengirim hantaran", "account.domain_blocked": "Domain disekat", "account.edit_profile": "Sunting profil", @@ -39,6 +40,7 @@ "account.follows_you": "Mengikuti anda", "account.go_to_profile": "Pergi ke profil", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", + "account.in_memoriam": "Dalam Memoriam.", "account.joined_short": "Menyertai", "account.languages": "Tukar bahasa yang dilanggan", "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}", @@ -74,6 +76,7 @@ "admin.dashboard.retention.cohort": "Bulan pendaftaran", "admin.dashboard.retention.cohort_size": "Pengguna baru", "admin.impact_report.instance_accounts": "Profil akaun ini akan dipadamkan", + "admin.impact_report.title": "Ringkasan kesan", "alert.rate_limited.message": "Sila cuba semula selepas {retry_time, time, medium}.", "alert.rate_limited.title": "Kadar terhad", "alert.unexpected.message": "Berlaku ralat di luar jangkaan.", @@ -127,6 +130,7 @@ "community.column_settings.remote_only": "Jauh sahaja", "compose.language.change": "Tukar bahasa", "compose.language.search": "Cari bahasa...", + "compose.published.body": "Pos telah diterbitkan.", "compose.published.open": "Buka", "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut", "compose_form.encryption_warning": "Hantaran pada Mastodon tidak disulitkan hujung ke hujung. Jangan berkongsi sebarang maklumat sensitif melalui Mastodon.", @@ -171,6 +175,7 @@ "confirmations.mute.explanation": "Ini akan menyembunyikan hantaran daripada mereka dan juga hantaran yang menyebut mereka, tetapi ia masih membenarkan mereka melihat hantaran anda dan mengikuti anda.", "confirmations.mute.message": "Adakah anda pasti anda ingin membisukan {name}?", "confirmations.redraft.confirm": "Padam & rangka semula", + "confirmations.redraft.message": "Adakah anda pasti anda ingin memadam pos ini dan merangkanya semula? Kegemaran dan galakan akan hilang, dan balasan ke pos asal akan menjadi yatim.", "confirmations.reply.confirm": "Balas", "confirmations.reply.message": "Membalas sekarang akan menulis ganti mesej yang anda sedang karang. Adakah anda pasti anda ingin teruskan?", "confirmations.unfollow.confirm": "Nyahikut", @@ -180,6 +185,7 @@ "conversation.open": "Lihat perbualan", "conversation.with": "Dengan {names}", "copypaste.copied": "Disalin", + "copypaste.copy_to_clipboard": "Salin ke papan klip", "directory.federated": "Dari fediverse yang diketahui", "directory.local": "Dari {domain} sahaja", "directory.new_arrivals": "Ketibaan baharu", @@ -189,7 +195,9 @@ "dismissable_banner.community_timeline": "Inilah hantaran awam terkini daripada orang yang akaun dihos oleh {domain}.", "dismissable_banner.dismiss": "Ketepikan", "dismissable_banner.explore_links": "Berita-berita ini sedang dibualkan oleh orang di pelayar ini dan pelayar lain dalam rangkaian terpencar sekarang.", + "dismissable_banner.explore_statuses": "Ini adalah pos dari seluruh web sosial yang semakin menarik perhatian hari ini. Pos baharu dengan lebih banyak rangsangan dan kegemaran diberi kedudukan lebih tinggi.", "dismissable_banner.explore_tags": "Tanda-tanda pagar ini daripada pelayar ini dan pelayar lain dalam rangkaian terpencar sedang hangat pada pelayar ini sekarang.", + "dismissable_banner.public_timeline": "Ini ialah pos awam terbaharu daripada orang di web sosial yang diikuti oleh orang di {domain}.", "embed.instructions": "Benam hantaran ini di laman sesawang anda dengan menyalin kod berikut.", "embed.preview": "Begini rupanya nanti:", "emoji_button.activity": "Aktiviti", @@ -231,6 +239,7 @@ "errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan", "errors.unexpected_crash.report_issue": "Laporkan masalah", "explore.search_results": "Hasil carian", + "explore.suggested_follows": "Orang", "explore.title": "Terokai", "explore.trending_links": "Baru", "explore.trending_statuses": "Hantar", @@ -279,10 +288,12 @@ "hashtag.column_settings.tag_toggle": "Sertakan tag tambahan untuk lajur ini", "hashtag.follow": "Ikuti hashtag", "hashtag.unfollow": "Nyahikut tanda pagar", + "home.actions.go_to_explore": "Lihat apa yand sedang tren", "home.actions.go_to_suggestions": "Cari orang untuk diikuti", "home.column_settings.basic": "Asas", "home.column_settings.show_reblogs": "Tunjukkan galakan", "home.column_settings.show_replies": "Tunjukkan balasan", + "home.explore_prompt.title": "Ini adalah pusat operasi anda dalam Mastodon.", "home.hide_announcements": "Sembunyikan pengumuman", "home.show_announcements": "Tunjukkan pengumuman", "interaction_modal.description.follow": "Dengan akaun pada Mastodon, anda boleh mengikut {name} untuk menerima hantaran mereka di suapan rumah anda.", @@ -338,6 +349,7 @@ "lightbox.previous": "Sebelumnya", "limited_account_hint.action": "Paparkan profil", "limited_account_hint.title": "Profil ini telah disembunyikan oleh moderator {domain}.", + "link_preview.author": "Dengan {name}", "lists.account.add": "Tambah ke senarai", "lists.account.remove": "Buang daripada senarai", "lists.delete": "Padam senarai", @@ -367,6 +379,7 @@ "navigation_bar.domain_blocks": "Domain disekat", "navigation_bar.edit_profile": "Sunting profil", "navigation_bar.explore": "Teroka", + "navigation_bar.favourites": "Kegemaran", "navigation_bar.filters": "Perkataan yang dibisukan", "navigation_bar.follow_requests": "Permintaan ikutan", "navigation_bar.followed_tags": "Ikuti hashtag", @@ -396,6 +409,7 @@ "notifications.column_settings.admin.report": "Laporan baru:", "notifications.column_settings.admin.sign_up": "Pendaftaran baru:", "notifications.column_settings.alert": "Pemberitahuan atas meja", + "notifications.column_settings.favourite": "Kegemaran:", "notifications.column_settings.filter_bar.advanced": "Papar semua kategori", "notifications.column_settings.filter_bar.category": "Bar penapis pantas", "notifications.column_settings.filter_bar.show_bar": "Paparkan bar penapis", @@ -413,6 +427,7 @@ "notifications.column_settings.update": "Suntingan:", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Galakan", + "notifications.filter.favourites": "Kegemaran", "notifications.filter.follows": "Ikutan", "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Keputusan undian", @@ -433,19 +448,29 @@ "onboarding.compose.template": "Hello #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.next_steps": "Langkah seterusnya yang mungkin:", + "onboarding.share.title": "Berkongsi profil anda", "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": "Anda telah berjaya!", "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": "Buat pos pertama anda", "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!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Tahukah anda? Anda boleh melindungi akaun anda dengan menyediakan pengesahan dua faktor dalam tetapan akaun anda. Ia berfungsi dengan mana-mana aplikasi TOTP pilihan anda, tiada nombor telefon diperlukan!", + "onboarding.tips.accounts_from_other_servers": "Tahukah anda? Memandangkan Mastodon tidak berpusat, beberapa profil yang anda temui akan dihoskan pada server selain anda. Namun anda boleh berinteraksi dengan mereka dengan lancar! Server mereka berada di separuh kedua nama pengguna mereka!", + "onboarding.tips.migration": "Tahukah anda? Jika anda rasa {domain} bukan pilihan server yang bagus untuk anda pada masa hadapan, anda boleh beralih ke server Mastodon yang lain tanpa kehilangan pengikut anda. Anda juga boleh mengehoskan server anda sendiri!", + "onboarding.tips.verification": "Tahukah anda? Anda boleh mengesahkan akaun anda dengan meletakkan pautan ke profil Mastodon anda pada tapak web anda sendiri dan menambah tapak web pada profil anda. Tiada bayaran atau dokumen diperlukan!", + "password_confirmation.exceeds_maxlength": "Pengesahan kata laluan melebihi panjang kata laluan maksimum", + "password_confirmation.mismatching": "Pengesahan kata laluan tidak sepadan", "picture_in_picture.restore": "Letak semula", "poll.closed": "Ditutup", "poll.refresh": "Muat semula", + "poll.reveal": "Hasil carian", "poll.total_people": "{count, plural, other {# orang}}", "poll.total_votes": "{count, plural, other {# undian}}", "poll.vote": "Undi", @@ -499,6 +524,7 @@ "report.reasons.dislike": "Saya tidak suka", "report.reasons.dislike_description": "Inilah sesuatu yang anda tidak ingin lihat", "report.reasons.legal": "Ia haram", + "report.reasons.legal_description": "Anda percaya ia melanggar undang-undang negara anda atau negara server", "report.reasons.other": "Inilah sesuatu yang lain", "report.reasons.other_description": "Isu ini tidak sesuai untuk kategori lain", "report.reasons.spam": "Inilah spam", @@ -523,8 +549,16 @@ "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Langgaran peraturan", "report_notification.open": "Buka laporan", + "search.no_recent_searches": "Tiada carian terkini", "search.placeholder": "Cari", + "search.quick_action.account_search": "Pos sepadan {x}", + "search.quick_action.go_to_account": "Pergi ke profil {x}", + "search.quick_action.go_to_hashtag": "Pergi ke hashtag {x}", + "search.quick_action.open_url": "Buka URL dalam Mastadon", + "search.quick_action.status_search": "Pos sepadan {x}", "search.search_or_paste": "Cari atau tampal URL", + "search_popout.quick_actions": "Tindakan pantas", + "search_popout.recent": "Carian terkini", "search_results.accounts": "Profil", "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", @@ -556,8 +590,10 @@ "status.edited": "Disunting {date}", "status.edited_x_times": "Disunting {count, plural, other {{count} kali}}", "status.embed": "Benaman", + "status.favourite": "Kegemaran", "status.filter": "Tapiskan hantaran ini", "status.filtered": "Ditapis", + "status.hide": "Sembunyikan pos", "status.history.created": "{name} mencipta pada {date}", "status.history.edited": "{name} menyunting pada {date}", "status.load_more": "Muatkan lagi", @@ -593,6 +629,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.translate": "Menterjemah", "status.translated_from_with": "Diterjemah daripada {lang} dengan {provider}", + "status.uncached_media_warning": "Pratonton tidak tersedia", "status.unmute_conversation": "Nyahbisukan perbualan", "status.unpin": "Nyahsemat daripada profil", "subscribed_languages.lead": "Hanya hantaran dalam bahasa-bahasa terpilih akan dipaparkan pada garis masa rumah dan senarai selepas perubahan. Pilih tiada untuk menerima hantaran dalam semua bahasa.", @@ -640,6 +677,7 @@ "upload_modal.preview_label": "Pratonton ({ratio})", "upload_progress.label": "Memuat naik...", "upload_progress.processing": "Memproses…", + "username.taken": "Nama pengguna tersebut sudah digunakan. Sila cuba lagi", "video.close": "Tutup video", "video.download": "Muat turun fail", "video.exit_fullscreen": "Keluar skrin penuh", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 62c7c5d531..731a5b95f5 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -295,9 +295,9 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ingen av desse", "hashtag.column_settings.tag_toggle": "Inkluder fleire emneord for denne kolonna", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltaker} other {{counter} deltakere}}", - "hashtag.counter_by_uses": "{count, plural, one {ett innlegg} other {{counter} innlegg}}", - "hashtag.counter_by_uses_today": "{count, plural, one {ett innlegg} other {{counter} innlegg}} i dag", + "hashtag.counter_by_accounts": "{count, plural,one {{counter} deltakar} other {{counter} deltakarar}}", + "hashtag.counter_by_uses": "{count, plural,one {{counter} innlegg} other {{counter} innlegg}}", + "hashtag.counter_by_uses_today": "{count, plural,one {{counter} innlegg} other {{counter} innlegg}} i dag", "hashtag.follow": "Fylg emneknagg", "hashtag.unfollow": "Slutt å fylgje emneknaggen", "home.actions.go_to_explore": "Sjå kva som er populært", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 85460b916e..e2563b60c8 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -13,7 +13,7 @@ "about.rules": "Regler for serveren", "account.account_note_header": "Notat", "account.add_or_remove_from_list": "Legg til eller fjern fra lister", - "account.badges.bot": "Robot", + "account.badges.bot": "Automatisert", "account.badges.group": "Gruppe", "account.block": "Blokker @{name}", "account.block_domain": "Blokker domenet {domain}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 75153b4694..94562d2bb2 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -358,6 +358,7 @@ "lightbox.previous": "Predchádzajúci", "limited_account_hint.action": "Ukáž profil aj tak", "limited_account_hint.title": "Tento profil bol skrytý moderátormi stránky {domain}.", + "link_preview.author": "Podľa {name}", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", @@ -574,6 +575,7 @@ "server_banner.server_stats": "Serverové štatistiky:", "sign_in_banner.create_account": "Vytvor účet", "sign_in_banner.sign_in": "Prihlás sa", + "sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index f1c3d6c374..991d3f8c92 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -200,8 +200,8 @@ "disabled_account_banner.text": "{disabledAccount} hesabınız şu an devre dışı.", "dismissable_banner.community_timeline": "Bunlar, {domain} sunucusunda hesabı olanların yakın zamandaki herkese açık gönderileridir.", "dismissable_banner.dismiss": "Yoksay", - "dismissable_banner.explore_links": "Bu haberler, merkeziyetsiz ağın bu ve diğer sunucularındaki insanlar tarafından şimdilerde konuşuluyor.", - "dismissable_banner.explore_statuses": "Merkeziyetsiz ağın bu ve diğer sunucularındaki bu gönderiler, mevcut sunucuda şimdilerde ilgi çekiyorlar.", + "dismissable_banner.explore_links": "Bunlar şimdilerde sosyal ağlarda en çok paylaşılan haberler. Farklı kişilerin yayınladığı daha yeni haberler daha üst sıralarda yer alır.", + "dismissable_banner.explore_statuses": "Bunlar, sosyal ağ genelinde bugün ilgi gören gönderiler. Daha çok yinelenen ve favorilenen yeni gönderiler daha üst sıralarda yer alır.", "dismissable_banner.explore_tags": "Bu etiketler, merkeziyetsiz ağda bulunan bu ve diğer sunuculardaki insanların şimdilerde ilgisini çekiyor.", "dismissable_banner.public_timeline": "Bunlar, {domain} üzerindeki insanların, sosyal ağ da takip ettiği insanlarca gönderilen en son ve herkese açık gönderilerdir.", "embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.", @@ -227,7 +227,7 @@ "empty_column.blocks": "Henüz herhangi bir kullanıcıyı engellemedin.", "empty_column.bookmarked_statuses": "Henüz yer imine eklediğin toot yok. Bir tanesi yer imine eklendiğinde burada görünür.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", - "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecekler.", + "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecek.", "empty_column.domain_blocks": "Henüz engellenmiş bir alan adı yok.", "empty_column.explore_statuses": "Şu an öne çıkan birşey yok. Daha sonra tekrar bakın!", "empty_column.favourited_statuses": "Henüz bir gönderiyi favorilerinize eklememişsiniz. Bir gönderiyi favorilerinize eklediğinizde burada görünecek.", @@ -418,7 +418,7 @@ "not_signed_in_indicator.not_signed_in": "Bu kaynağa erişmek için oturum açmanız gerekir.", "notification.admin.report": "{name}, {target} kişisini bildirdi", "notification.admin.sign_up": "{name} kaydoldu", - "notification.favourite": "{name} gönderinizden hoşlandı", + "notification.favourite": "{name} gönderinizi beğendi", "notification.follow": "{name} seni takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", "notification.mention": "{name} senden bahsetti", @@ -582,7 +582,7 @@ "search.quick_action.go_to_hashtag": "Etikete git {x}", "search.quick_action.open_url": "Bağlantıyı Mastodon'da Aç", "search.quick_action.status_search": "Eşleşen gönderiler {x}", - "search.search_or_paste": "Ara veya Bağlantıyı yapıştır", + "search.search_or_paste": "Ara veya bağlantıyı yapıştır", "search_popout.quick_actions": "Hızlı eylemler", "search_popout.recent": "Son aramalar", "search_results.accounts": "Profiller", @@ -610,7 +610,7 @@ "status.bookmark": "Yer işareti ekle", "status.cancel_reblog_private": "Yeniden paylaşımı geri al", "status.cannot_reblog": "Bu gönderi yeniden paylaşılamaz", - "status.copy": "Bağlantı durumunu kopyala", + "status.copy": "Gönderi bağlantısını kopyala", "status.delete": "Sil", "status.detailed_status": "Ayrıntılı sohbet görünümü", "status.direct": "@{name} kullanıcısına özelden değin", @@ -643,7 +643,7 @@ "status.reblogs.empty": "Henüz hiç kimse bu Gönderiyi Yeniden Paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.", "status.redraft": "Sil,Düzenle ve Yeniden paylaş", "status.remove_bookmark": "Yer işaretini kaldır", - "status.replied_to": "{name} kullanıcısına yanıt verildi", + "status.replied_to": "{name} kullanıcısına yanıt verdi", "status.reply": "Yanıtla", "status.replyAll": "Konuyu yanıtla", "status.report": "@{name} adlı kişiyi bildir", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 6b5533bfb0..df632ac02e 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -12,7 +12,7 @@ "about.powered_by": "Mạng xã hội liên hợp {mastodon}", "about.rules": "Nội quy máy chủ", "account.account_note_header": "Ghi chú", - "account.add_or_remove_from_list": "Thêm hoặc xóa khỏi danh sách", + "account.add_or_remove_from_list": "Thêm vào danh sách", "account.badges.bot": "Bot", "account.badges.group": "Nhóm", "account.block": "Chặn @{name}", @@ -29,7 +29,7 @@ "account.endorse": "Tôn vinh người này", "account.featured_tags.last_status_at": "Tút gần nhất {date}", "account.featured_tags.last_status_never": "Chưa có tút", - "account.featured_tags.title": "Hashtag {name} thường dùng", + "account.featured_tags.title": "Hashtag của {name}", "account.follow": "Theo dõi", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", @@ -116,7 +116,7 @@ "column.favourites": "Lượt thích", "column.firehose": "Bảng tin", "column.follow_requests": "Yêu cầu theo dõi", - "column.home": "Bảng tin", + "column.home": "Trang chính", "column.lists": "Danh sách", "column.mutes": "Người đã ẩn", "column.notifications": "Thông báo", @@ -131,7 +131,7 @@ "column_header.unpin": "Không ghim", "column_subheading.settings": "Cài đặt", "community.column_settings.local_only": "Chỉ máy chủ của bạn", - "community.column_settings.media_only": "Chỉ xem media", + "community.column_settings.media_only": "Chỉ hiện tút có media", "community.column_settings.remote_only": "Chỉ người ở máy chủ khác", "compose.language.change": "Chọn ngôn ngữ tút", "compose.language.search": "Tìm ngôn ngữ...", @@ -185,7 +185,7 @@ "confirmations.reply.confirm": "Trả lời", "confirmations.reply.message": "Nội dung bạn đang soạn thảo sẽ bị ghi đè, bạn có tiếp tục?", "confirmations.unfollow.confirm": "Bỏ theo dõi", - "confirmations.unfollow.message": "Bạn thật sự muốn ngưng theo dõi {name}?", + "confirmations.unfollow.message": "Bạn thật sự muốn bỏ theo dõi {name}?", "conversation.delete": "Xóa tin nhắn này", "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", @@ -198,12 +198,12 @@ "directory.recently_active": "Hoạt động gần đây", "disabled_account_banner.account_settings": "Cài đặt tài khoản", "disabled_account_banner.text": "Tài khoản {disabledAccount} của bạn hiện không khả dụng.", - "dismissable_banner.community_timeline": "Đây là những tút gần đây từ những người thuộc máy chủ {domain}.", + "dismissable_banner.community_timeline": "Đây là những tút công khai gần đây trong mạng liên hợp của máy chủ {domain}.", "dismissable_banner.dismiss": "Bỏ qua", - "dismissable_banner.explore_links": "Những sự kiện đang được thảo luận nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.", - "dismissable_banner.explore_statuses": "Những tút đang phổ biến trên máy chủ này và mạng liên hợp của nó.", - "dismissable_banner.explore_tags": "Những hashtag đang được sử dụng nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.", - "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây từ những người trong mạng liên hợp của {domain}.", + "dismissable_banner.explore_links": "Đây là những liên kết đang được chia sẻ nhiều trong mạng liên hợp của máy chủ này.", + "dismissable_banner.explore_statuses": "Đây là những tút đang phổ biến trong mạng liên hợp của máy chủ này.", + "dismissable_banner.explore_tags": "Đây là những hashtag đang được sử dụng nhiều trong mạng liên hợp của máy chủ này.", + "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây trong mạng liên hợp của máy chủ {domain}.", "embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.", "embed.preview": "Nó sẽ hiển thị như vầy:", "emoji_button.activity": "Hoạt động", @@ -235,11 +235,11 @@ "empty_column.follow_requests": "Bạn chưa có yêu cầu theo dõi nào.", "empty_column.followed_tags": "Bạn chưa theo dõi hashtag nào. Khi bạn theo dõi, chúng sẽ hiện lên ở đây.", "empty_column.hashtag": "Chưa có tút nào dùng hashtag này.", - "empty_column.home": "Bảng tin của bạn đang trống! Hãy theo dõi nhiều người hơn. {suggestions}", + "empty_column.home": "Trang chính của bạn đang trống! Hãy theo dõi nhiều người hơn để lấp đầy.", "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", "empty_column.lists": "Bạn chưa tạo danh sách nào.", "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.", - "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn riêng cho một ai đó.", + "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn riêng cho ai đó.", "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi những người khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", "error.unexpected_crash.explanation_addons": "Trang này không thể hiển thị do xung khắc với add-on của trình duyệt hoặc công cụ tự động dịch ngôn ngữ.", @@ -299,16 +299,16 @@ "hashtag.counter_by_uses": "{count, plural, other {{counter} tút}}", "hashtag.counter_by_uses_today": "{count, plural, other {{counter} tút}} hôm nay", "hashtag.follow": "Theo dõi hashtag", - "hashtag.unfollow": "Ngưng theo dõi hashtag", + "hashtag.unfollow": "Bỏ theo dõi hashtag", "home.actions.go_to_explore": "Khám phá xu hướng", - "home.actions.go_to_suggestions": "Đề xuất theo dõi", + "home.actions.go_to_suggestions": "Tìm người theo dõi", "home.column_settings.basic": "Tùy chỉnh", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", - "home.explore_prompt.body": "Bảng tin của bạn sẽ có sự kết hợp của các tút gắn hashtag mà bạn đã chọn để theo dõi, những người bạn đã chọn để theo dõi và các bài đăng lại từ họ. Lúc này có vẻ hơi trống, sao bạn không:", + "home.explore_prompt.body": "Bảng tin của bạn sẽ bao gồm các tút có hashtag bạn theo dõi, những người bạn theo dõi và các tút mà họ đăng lại. Lúc này có vẻ hơi trống, sao bạn không:", "home.explore_prompt.title": "Đây là ngôi nhà Mastodon của bạn.", "home.hide_announcements": "Ẩn thông báo máy chủ", - "home.show_announcements": "Hiện thông báo máy chủ", + "home.show_announcements": "Xem thông báo máy chủ", "interaction_modal.description.favourite": "Với tài khoản Mastodon, bạn có thể cho người đăng biết bạn thích tút này và lưu lại tút.", "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để tút của họ hiện trên bảng tin của mình.", "interaction_modal.description.reblog": "Với tài khoản Mastodon, bạn có thể đăng lại tút này để chia sẻ nó với những người đang theo dõi bạn.", @@ -340,7 +340,7 @@ "keyboard_shortcuts.favourites": "Mở lượt thích", "keyboard_shortcuts.federated": "mở mạng liên hợp", "keyboard_shortcuts.heading": "Danh sách phím tắt", - "keyboard_shortcuts.home": "mở bảng tin", + "keyboard_shortcuts.home": "mở trang chính", "keyboard_shortcuts.hotkey": "Phím tắt", "keyboard_shortcuts.legend": "hiện bảng hướng dẫn này", "keyboard_shortcuts.local": "mở máy chủ của bạn", @@ -467,26 +467,26 @@ "onboarding.action.back": "Quay lại", "onboarding.actions.back": "Quay lại", "onboarding.actions.go_to_explore": "Xem những gì đang thịnh hành", - "onboarding.actions.go_to_home": "Đi đến bảng tin", + "onboarding.actions.go_to_home": "Đến trang chính", "onboarding.compose.template": "Xin chào #Mastodon!", "onboarding.follows.empty": "Không có kết quả có thể được hiển thị lúc này. Bạn có thể thử sử dụng tính năng tìm kiếm hoặc duyệt qua trang khám phá để tìm những người theo dõi hoặc thử lại sau.", - "onboarding.follows.lead": "Bạn quản lý bảng tin của riêng bạn. Bạn càng theo dõi nhiều người, nó sẽ càng sôi động và thú vị. Những hồ sơ này có thể là một điểm khởi đầu tốt—bạn luôn có thể hủy theo dõi họ sau!", + "onboarding.follows.lead": "Bạn quản lý bảng tin của riêng bạn. Bạn càng theo dõi nhiều người, nó sẽ càng sôi động và thú vị. Để bắt đầu, đây là vài gợi ý:", "onboarding.follows.title": "Thịnh hành trên Mastodon", "onboarding.share.lead": "Hãy cho mọi người biết làm thế nào họ có thể tìm thấy bạn trên Mastodon!", "onboarding.share.message": "Tôi là {username} trên #Mastodon! Hãy theo dõi tôi tại {url}", "onboarding.share.next_steps": "Các bước kế tiếp:", - "onboarding.share.title": "Chia sẻ hồ sơ của bạn", + "onboarding.share.title": "Chia sẻ hồ sơ", "onboarding.start.lead": "Tài khoản Mastodon mới của bạn đã sẵn sàng hoạt động. Đây là cách bạn có thể tận dụng tối đa nó:", "onboarding.start.skip": "Muốn bỏ qua luôn?", "onboarding.start.title": "Xong rồi bạn!", - "onboarding.steps.follow_people.body": "Bạn quản lý bảng tin của riêng bạn. Hãy lấp đầy nó với những người thú vị.", - "onboarding.steps.follow_people.title": "Theo dõi {count, plural, other {# người}}", - "onboarding.steps.publish_status.body": "Gửi lời chào tới thế giới mới.", - "onboarding.steps.publish_status.title": "Đăng tút đầu tiên của bạn", - "onboarding.steps.setup_profile.body": "Những người khác có nhiều khả năng tương tác với bạn hơn nếu hồ sơ bạn được điền đầy đủ thông tin.", + "onboarding.steps.follow_people.body": "Theo dõi những người thú vị trên Mastodon.", + "onboarding.steps.follow_people.title": "Cá nhân hóa trang chính", + "onboarding.steps.publish_status.body": "Chào cộng đồng bằng lời nói, ảnh hoặc video {emoji}", + "onboarding.steps.publish_status.title": "Đăng tút đầu tiên", + "onboarding.steps.setup_profile.body": "Tạo sự tương tác bằng một hồ sơ hoàn chỉnh.", "onboarding.steps.setup_profile.title": "Tùy biến hồ sơ", "onboarding.steps.share_profile.body": "Hãy để bạn bè của bạn biết cách tìm thấy bạn trên Mastodon!", - "onboarding.steps.share_profile.title": "Chia sẻ hồ sơ của bạn", + "onboarding.steps.share_profile.title": "Chia sẻ hồ sơ Mastodon của bạn", "onboarding.tips.2fa": "Bạn có biết? Bạn có thể bảo mật tài khoản của mình bằng cách thiết lập xác thực hai yếu tố trong cài đặt tài khoản của mình. Nó hoạt động với bất kỳ ứng dụng OTP nào bạn chọn, không cần số điện thoại!", "onboarding.tips.accounts_from_other_servers": "Bạn có biết? Vì Mastodon liên hợp, một số hồ sơ bạn gặp sẽ được lưu trữ trên các máy chủ không giống bạn. Tuy nhiên, bạn có thể tương tác với họ một cách liền mạch! Máy chủ của họ nằm ở nửa sau tên người dùng của họ!", "onboarding.tips.migration": "Bạn có biết? Nếu bạn thấy {domain} không phải là lựa chọn máy chủ tuyệt vời cho bạn trong tương lai, bạn có thể chuyển sang máy chủ Mastodon khác mà không bị mất người theo dõi. Bạn thậm chí có thể lưu trữ máy chủ của riêng bạn!", @@ -494,7 +494,7 @@ "password_confirmation.exceeds_maxlength": "Mật khẩu vượt quá độ dài mật khẩu tối đa", "password_confirmation.mismatching": "Mật khẩu không trùng khớp", "picture_in_picture.restore": "Hiển thị bình thường", - "poll.closed": "Kết thúc", + "poll.closed": "Đóng", "poll.refresh": "Làm mới", "poll.reveal": "Xem kết quả", "poll.total_people": "{count, plural, other {# người bình chọn}}", @@ -504,7 +504,7 @@ "poll.votes": "{votes, plural, other {# lượt bình chọn}}", "poll_button.add_poll": "Tạo bình chọn", "poll_button.remove_poll": "Hủy cuộc bình chọn", - "privacy.change": "Thay đổi quyền riêng tư", + "privacy.change": "Chọn kiểu tút", "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", "privacy.direct.short": "Nhắn riêng", "privacy.private.long": "Dành riêng cho người theo dõi", @@ -517,7 +517,7 @@ "privacy_policy.title": "Chính sách bảo mật", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", - "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", + "regeneration_indicator.sublabel": "Trang chính của bạn đang được cập nhật!", "relative_time.days": "{number} ngày", "relative_time.full.days": "{number, plural, other {# ngày}}", "relative_time.full.hours": "{number, plural, other {# giờ}}", @@ -537,8 +537,8 @@ "report.categories.violation": "Vi phạm nội quy máy chủ", "report.category.subtitle": "Chọn lý do phù hợp nhất:", "report.category.title": "{type} này có vấn đề gì?", - "report.category.title_account": "người này", - "report.category.title_status": "tút", + "report.category.title_account": "Người", + "report.category.title_status": "Tút", "report.close": "Xong", "report.comment.title": "Có điều gì mà chúng tôi cần biết không?", "report.forward": "Chuyển đến {target}", @@ -567,8 +567,8 @@ "report.thanks.take_action_actionable": "Trong lúc chờ chúng tôi xem xét, bạn có thể áp dụng hành động với @{name}:", "report.thanks.title": "Không muốn xem thứ này?", "report.thanks.title_actionable": "Cảm ơn đã báo cáo, chúng tôi sẽ xem xét kỹ.", - "report.unfollow": "Ngưng theo dõi @{name}", - "report.unfollow_explanation": "Bạn đang theo dõi người này. Để không thấy tút của họ trong bảng tin nữa, hãy ngưng theo dõi.", + "report.unfollow": "Bỏ theo dõi @{name}", + "report.unfollow_explanation": "Bạn đang theo dõi người này. Để không thấy tút của họ trên trang chính nữa, hãy bỏ theo dõi.", "report_notification.attached_statuses": "{count, plural, other {{count} tút}} đính kèm", "report_notification.categories.legal": "Pháp lý", "report_notification.categories.other": "Khác", @@ -623,14 +623,14 @@ "status.filter": "Lọc tút này", "status.filtered": "Bộ lọc", "status.hide": "Ẩn tút", - "status.history.created": "{name} tạo vào {date}", - "status.history.edited": "{name} sửa vào {date}", + "status.history.created": "{name} đăng {date} trước", + "status.history.edited": "{name} đã sửa {date} trước", "status.load_more": "Tải thêm", "status.media.open": "Nhấn để mở", "status.media.show": "Nhấn để xem", "status.media_hidden": "Đã ẩn", "status.mention": "Nhắc đến @{name}", - "status.more": "Thêm", + "status.more": "Xem thêm", "status.mute": "Ẩn @{name}", "status.mute_conversation": "Không quan tâm nữa", "status.open": "Đọc tút", @@ -658,7 +658,7 @@ "status.title.with_attachments": "{user} đã đăng {attachmentCount, plural, other {{attachmentCount} đính kèm}}", "status.translate": "Dịch tút", "status.translated_from_with": "Dịch từ {lang} bằng {provider}", - "status.uncached_media_warning": "Xem trước không sẵn có", + "status.uncached_media_warning": "Không bản xem trước", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên hồ sơ", "subscribed_languages.lead": "Chỉ các tút đăng bằng các ngôn ngữ đã chọn mới được xuất hiện trên bảng tin của bạn. Không chọn gì cả để đọc tút đăng bằng mọi ngôn ngữ.", @@ -666,7 +666,7 @@ "subscribed_languages.target": "Đổi ngôn ngữ mong muốn cho {target}", "suggestions.dismiss": "Tắt đề xuất", "suggestions.header": "Có thể bạn quan tâm…", - "tabs_bar.home": "Bảng tin", + "tabs_bar.home": "Trang chính", "tabs_bar.notifications": "Thông báo", "time_remaining.days": "{number, plural, other {# ngày}}", "time_remaining.hours": "{number, plural, other {# giờ}}", diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 348521ae82..11d368f77e 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -399,6 +399,12 @@ ar: confirm_suspension: cancel: إلغاء confirm: علّق الحساب + permanent_action: لن يستعيد رفع الحظر أي بيانات أو علاقات. + preamble_html: أنت على وشك تعليق %{domain} وجميع نطاقاته الفرعيّة. + remove_all_data: ستُحذف كل المحتوى والوسائط وبيانات حسابات هذا النطاق من خادومك. + stop_communication: سيتوقّف خادومك عن التواصل مع كل هذه الخادومات. + title: تأكيد حظر نطاق %{domain} + undo_relationships: سيتم التراجع عن أي علاقات متابعة ما بين الحسابات على هذه الخادومات وخادومك. created_msg: إنّ حجب النطاق حيز التشغيل destroyed_msg: تم إلغاء الحجب المفروض على النطاق domain: النطاق diff --git a/config/locales/de.yml b/config/locales/de.yml index e1501e1d1d..8bbc33f3a1 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1018,7 +1018,7 @@ de: privacy_policy_agreement_html: Ich habe die Datenschutzerklärung gelesen und stimme ihr zu progress: confirm: E-Mail-Adresse bestätigen - details: Deine Daten + details: Deine Details review: Unsere Überprüfung rules: Regeln akzeptieren providers: diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index 2139daca75..904cc51fe9 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -14,7 +14,7 @@ vi: 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 hoặc đăng ký trước khi tiếp tục. + unauthenticated: Bạn cần đăng nhập để tiếp tục. unconfirmed: Bạn phải xác minh địa chỉ email trước khi tiếp tục. mailer: confirmation_instructions: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index aecedbe443..d6e62d82b1 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -71,7 +71,7 @@ vi: confirmations: revoke: Bạn có chắc không? index: - authorized_at: Cho phép vào %{date} + authorized_at: Cho phép %{date} description_html: Đây là những ứng dụng có thể truy cập tài khoản của bạn bằng API. Nếu có ứng dụng bạn không nhận ra ở đây hoặc ứng dụng hoạt động sai, bạn có thể thu hồi quyền truy cập của ứng dụng đó. last_used_at: Dùng lần cuối %{date} never_used: Chưa dùng diff --git a/config/locales/gd.yml b/config/locales/gd.yml index e08939e146..4dff8629b0 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -593,7 +593,7 @@ gd: pending: A’ feitheamh ri aontachadh an ath-sheachadain save_and_enable: Sàbhail ’s cuir an comas setup: Suidhich ceangal ri ath-sheachadain - signatures_not_enabled: Chan obraich ath-sheachadain mar bu chòir nuair a bhios am modh tèarainte no modh a’ cho-nasgaidh chuingichte an comas + signatures_not_enabled: Dh’fhaoidte nach obraich ath-sheachadain mar bu chòir nuair a bhios am modh tèarainte no modh a’ cho-nasgaidh chuingichte an comas status: Staid title: Ath-sheachadain report_notes: @@ -900,10 +900,10 @@ gd: no_status_selected: Cha deach post a’ treandadh sam bith atharrachadh o nach deach gin dhiubh a thaghadh not_discoverable: Cha do chuir an t-ùghdar roimhe gun gabh a rùrachadh shared_by: - few: Chaidh a cho-roinneadh no ’na annsachd %{friendly_count} tursan - one: Chaidh a cho-roinneadh no ’na annsachd %{friendly_count} turas - other: Chaidh a cho-roinneadh no ’na annsachd %{friendly_count} turas - two: Chaidh a cho-roinneadh no ’na annsachd %{friendly_count} thuras + few: Chaidh a cho-roinneadh no a chur ris na h-annsachdan %{friendly_count} tursan + one: Chaidh a cho-roinneadh no a chur ris na h-annsachdan %{friendly_count} turas + other: Chaidh a cho-roinneadh no a chur ris na h-annsachdan %{friendly_count} turas + two: Chaidh a cho-roinneadh no a chur ris na h-annsachdan %{friendly_count} thuras title: Postaichean a’ treandadh tags: current_score: Sgòr làithreach de %{score} @@ -1631,7 +1631,7 @@ gd: migrate: Imrich cunntais notifications: Brathan preferences: Roghainnean - profile: Pròifil + profile: Pròifil phoblach relationships: Dàimhean leantainn statuses_cleanup: Sguabadh às fèin-obrachail phostaichean strikes: Rabhaidhean na maorsainneachd @@ -1717,7 +1717,7 @@ gd: keep_polls_hint: Cha dèid gin dhe na cunntasan-bheachd agad a sguabadh às keep_self_bookmark: Cùm na chuir thu ris comharran-lìn keep_self_bookmark_hint: Cha dèid gin dhe na postaichean agad fhèin a chuir thu ris na comharran-lìn agad a sguabadh às - keep_self_fav: Cùm na chuir thu ris na h-annsachdan + keep_self_fav: Cùm na postaichean a chuir thu ris na h-annsachdan keep_self_fav_hint: Cha dèid gin dhe na postaichean agad fhèin a chuir thu ris na h-annsachdan agad a sguabadh às min_age: '1209600': 2 sheachdain @@ -1729,8 +1729,8 @@ gd: '63113904': 2 bhliadhna '7889238': 3 mìosan min_age_label: Stairsneach aoise - min_favs: Cùm na tha ’na annsachd aig co-dhiù - min_favs_hint: Cha dèid gin dhe na postaichean agad a sguabadh às a tha ’nan annsachd an àireamh de thursan seo air a char as lugha. Fàg seo bàn airson postaichean a sguabadh às ge b’ e co mheud turas a tha iad ’nan annsachd + min_favs: Cùm na postaichean a chaidh a chur ris na h-annsachdan co-dhiù + min_favs_hint: Cha dèid gin dhe na postaichean agad a sguabadh às a chaidh a chur ris na h-annsachdan an àireamh seo de thursan air a char as lugha. Fàg seo bàn airson na postaichean a sguabadh às ge b’ e co mheud neach a chuir ris na h-annsachdan iad min_reblogs: Cùm na tha ’ga bhrosnachadh le co-dhiù min_reblogs_hint: Cha dèid gin dhe na postaichean agad a sguabadh às a tha ’gam brosnachadh an àireamh de thursan seo air a char as lugha. Fàg seo bàn airson postaichean a sguabadh às ge b’ e co mheud turas a tha iad ’gam brosnachadh stream_entries: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 4223467032..eeb8f16ae4 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -101,6 +101,7 @@ kab: search: Nadi search_same_email_domain: Iseqdacen-nniḍen s yiwet n taɣult n yimayl search_same_ip: Imseqdacen-nniḍen s tansa IP am tinn-ik + security: Taɣellist security_measures: only_password: Awal uffir kan password_and_2fa: Awal uffir d 2FA @@ -253,6 +254,8 @@ kab: undo: Kkes seg tebdart tamellalt domain_blocks: add_new: Rni iḥder amaynut n taɣult + confirm_suspension: + cancel: Sefsex domain: Taγult export: Sifeḍ import: Kter @@ -283,6 +286,7 @@ kab: instances: back_to_all: Akk back_to_limited: Ɣur-s talast + back_to_warning: Γur-wat by_domain: Taγult content_policies: policy: Tasertit @@ -353,6 +357,7 @@ kab: category: Taggayt comment: none: Ula yiwen + confirm: Sentem mark_as_resolved: Creḍ-it yefra mark_as_unresolved: Creḍ-it ur yefra ara notes: @@ -407,6 +412,7 @@ kab: application: Asnas back_to_account: Tuγalin γer usebter n umiḍan deleted: Yettwakkes + favourites: Imenyafen language: Tutlayt media: title: Taγwalt @@ -437,9 +443,11 @@ kab: view_profile: Ssken-d amaɣnu view_status: Ssken-d tasuffiɣt applications: + logout: Ffeɣ token_regenerated: Ajuṭu n unekcum yettusirew i tikkelt-nniḍen akken iwata your_token: Ajiṭun-ik·im n unekcum auth: + apply_for_account: Suter amiḍan delete_account: Kkes amiḍan description: prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!" @@ -456,6 +464,8 @@ kab: register: Jerred registration_closed: "%{instance} ur yeqbil ara imttekkiyen imaynuten" reset_password: Wennez awal uffir + rules: + back: Tuɣalin security: Taγellist set_new_password: Egr-d awal uffir amaynut status: @@ -489,15 +499,8 @@ kab: username_available: Isem-ik·im n useqdac ad yuɣal yella i tikkelt-nniḍen username_unavailable: Isem-ik·im n useqdac ad yeqqim ulac-it errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '429': Too many requests '500': title: Asebter-ayi d arameγtu - '503': The page could not be served due to a temporary server failure. existing_username_validator: not_found_multiple: ur yezmir ara ad yaf %{usernames} exports: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 6cce9b9937..b784dad25c 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1395,8 +1395,8 @@ ko: title: 새 팔로우 요청 mention: action: 답장 - body: "%{name} 님이 나를 언급했습니다:" - subject: "%{name} 님이 나를 언급했습니다" + body: "%{name} 님이 나를 멘션했습니다:" + subject: "%{name} 님이 나를 멘션했습니다" title: 새 답글 poll: subject: "%{name}의 투표가 종료되었습니다" diff --git a/config/locales/ms.yml b/config/locales/ms.yml index e7d20891b7..c0d0c1eecc 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -115,6 +115,7 @@ ms: reject: Tolak rejected_msg: Berjaya menolak permohonan pendaftaran %{username} remote_suspension_irreversible: Data akaun ini telah dipadamkan secara tidak dapat dipulihkan. + remote_suspension_reversible_hint_html: Akaun telah digantung pada server mereka dan data akan dialih keluar sepenuhnya pada %{date}. Sehingga itu, server jauh boleh memulihkan akaun ini tanpa sebarang kesan buruk. Jika anda ingin mengalih keluar semua data akaun dengan segera, anda boleh berbuat demikian di bawah. remove_avatar: Buang avatar remove_header: Buang pengepala removed_avatar_msg: Berjaya membuang imej avatar %{username} @@ -380,6 +381,9 @@ ms: permanent_action: Membuat asal penggantungan tidak akan memulihkan sebarang data atau perhubungan. preamble_html: Anda akan menggantung %{domain} dan subdomainnya. remove_all_data: Ini akan mengalih keluar semua kandungan, media dan data profil untuk akaun domain ini daripada sever anda. + stop_communication: Server anda akan berhenti berkomunikasi dengan server ini. + title: Sahkan blok domain untuk %{domain} + undo_relationships: Ini akan membuat asal sebarang hubungan ikut antara akaun server ini dan akaun anda. created_msg: Sekatan domain sedang diproses destroyed_msg: Sekatan domain telah diundurkan domain: Domain @@ -392,6 +396,7 @@ ms: create: Cipta sekatan hint: Sekatan domain tidak akan menghindarkan penciptaan entri akaun dalam pangkalan data, tetapi akan dikenakan kaedah penyederhanaan khusus tertentu pada akaun-akaun tersebut secara retroaktif dan automatik. severity: + desc_html: "Had akan menjadikan siaran daripada akaun di domain ini tidak kelihatan kepada sesiapa sahaja yang tidak mengikutinya. Tangguhkan akan mengalih keluar semua kandungan, media dan data profil untuk akaun domain ini daripada server anda. Gunakan Tiada jika anda hanya mahu menolak fail media." noop: Tiada silence: Hadkan suspend: Gantungkan @@ -426,6 +431,7 @@ ms: title: Sekat domain e-mel baharu no_email_domain_block_selected: Tiada sekatan domain e-mel diubah kerana tiada yang dipilih not_permitted: Tidak dibenarkan + resolved_dns_records_hint_html: Nama domain diselesaikan kepada domain MX berikut, yang akhirnya bertanggungjawab untuk menerima e-mel. Menyekat domain MX akan menyekat pendaftaran daripada mana-mana alamat e-mel yang menggunakan domain MX yang sama, walaupun nama domain yang kelihatan berbeza. Berhati-hati untuk tidak menyekat penyedia e-mel utama. resolved_through_html: Diselesaikan melalui %{domain} title: Domain e-mel disekat export_domain_allows: @@ -434,8 +440,12 @@ ms: no_file: Tiada fail dipilih export_domain_blocks: import: + description_html: Anda akan mengimport senarai blok domain. Sila semak senarai ini dengan teliti, terutamanya jika anda belum mengarang senarai ini sendiri. existing_relationships_warning: Hubungan ikut sedia ada + private_comment_description_html: 'Untuk membantu anda menjejak dari mana datangnya blok yang diimport, blok yang diimport akan dibuat dengan ulasan peribadi berikut: %{comment}' + private_comment_template: Diimport daripada %{source} pada %{date} title: Import blok domain + invalid_domain_block: 'Satu atau lebih blok domain telah dilangkau kerana ralat berikut: %{error}' new: title: Import blok domain no_file: Tiada fail yang dipilih @@ -449,6 +459,8 @@ ms: unsuppress: Tetap semula saranan ikutan instances: availability: + failure_threshold_reached: Ambang kegagalan dicapai pada %{date}. + no_failures_recorded: Tiada kegagalan dalam rekod. title: Ketersediaan warning: Percubaan terakhir untuk menyambung ke pelayan ini tidak berjaya back_to_all: Semua @@ -458,6 +470,8 @@ ms: confirm_purge: Adakah anda pasti mahu menghapuskan senarai ini secara kekal daripada domain ini? content_policies: comment: Catatan dalaman + description_html: Anda boleh menentukan dasar kandungan yang akan digunakan pada semua akaun daripada domain ini dan mana-mana subdomainnya. + limited_federation_mode_description_html: Anda boleh memilih sama ada untuk membenarkan persekutuan dengan domain ini. policies: reject_media: Tolak media reject_reports: Tolak laporan @@ -485,6 +499,7 @@ ms: delivery_available: Penghantaran tersedia delivery_error_days: Hari ralat penghantaran delivery_error_hint: Jika penghantaran tidak berjaya selama %{count} hari, ia akan ditanda sebagai tidak boleh dihantar. + destroyed_msg: Data daripada %{domain} kini beratur untuk pemadaman segera. empty: Tiada domain dijumpai. known_accounts: other: "%{count} akaun dikenali" @@ -494,12 +509,15 @@ ms: title: Penyederhanaan private_comment: Ulasan peribadi public_comment: Ulasan awam + purge: Singkir + purge_description_html: Jika anda percaya domain ini berada di luar talian selama-lamanya, anda boleh memadamkan semua rekod akaun dan data yang berkaitan daripada domain ini daripada storan anda. Ini mungkin mengambil sedikit masa. title: Persekutuan total_blocked_by_us: Disekati kami total_followed_by_them: Diikuti mereka total_followed_by_us: Diikuti kami total_reported: Laporan tentang mereka total_storage: Lampiran media + totals_time_period_hint_html: Jumlah yang dipaparkan di bawah termasuk data untuk sepanjang masa. invites: deactivate_all: Nyahaktifkan semua filter: @@ -553,7 +571,12 @@ ms: actions: delete_description_html: Hantaran yang dilaporkan akan dihapuskan dan pelanggaran itu akan direkodkan bagi membantu anda menguruskan pelanggaran pada akaun yang sama di masa akan datang. mark_as_sensitive_description_html: Media di dalam hantaran yang dilaporkan akan ditandakan sebagai sensitif dan pelanggaran itu akan direkodkan bagi membantu anda menguruskan pelanggaran pada akaun yang sama di masa akan datang. + other_description_html: Lihat lebih banyak pilihan untuk mengawal tingkah laku akaun dan menyesuaikan komunikasi ke akaun yang dilaporkan. resolve_description_html: Tiada tindakan akan diambil terhadap akaun yang dilaporkan, tiada pelanggaran direkodkan dan laporan akan ditutup. + silence_description_html: Akaun itu akan kelihatan hanya kepada mereka yang telah mengikutinya atau mencarinya secara manual, mengehadkan capaiannya dengan teruk. Sentiasa boleh dikembalikan. Menutup semua laporan terhadap akaun ini. + suspend_description_html: Akaun dan semua kandungannya akan tidak boleh diakses dan akhirnya dipadamkan, dan berinteraksi dengannya adalah mustahil. Boleh diterbalikkan dalam masa 30 hari. Menutup semua laporan terhadap akaun ini. + actions_description_html: Tentukan tindakan yang perlu diambil untuk menyelesaikan laporan ini. Jika anda mengambil tindakan menghukum terhadap akaun yang dilaporkan, pemberitahuan e-mel akan dihantar kepada mereka, kecuali apabila kategori Spam dipilih. + actions_description_remote_html: Tentukan tindakan yang perlu diambil untuk menyelesaikan laporan ini. Ini hanya akan menjejaskan cara serveranda berkomunikasi dengan akaun jauh ini dan mengendalikan kandungannya. add_to_report: Tambahkan lebih banyak pada laporan are_you_sure: Adakah anda pasti? assign_to_self: Menugaskan kepada saya @@ -561,9 +584,12 @@ ms: by_target_domain: Domain bagi akaun yang dilaporkan cancel: Batal category: Kumpulan + category_description_html: Sebab akaun dan/atau kandungan ini dilaporkan akan disebut dalam komunikasi dengan akaun yang dilaporkan comment: none: Tiada + comment_description_html: 'Untuk memberikan maklumat lanjut, %{name} menulis:' confirm: Konfirm + confirm_action: Sahkan tindakan penyederhanaan terhadap @%{acct} created_at: Dilaporkan delete_and_resolve: Padam hantaran forwarded: Dipanjangkan @@ -579,7 +605,10 @@ ms: delete: Padam placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan... title: Catatan + notes_description_html: Lihat dan tinggalkan nota kepada moderator lain dan diri masa depan anda processed_msg: 'Laporan #%{id} berjaya diproses' + quick_actions_description_html: 'Ambil tindakan pantas atau tatal ke bawah untuk melihat kandungan yang dilaporkan:' + remote_user_placeholder: pengguna jauh dari %{instance} reopen: Buka semula laporan report: 'Laporan #%{id}' reported_account: Akaun yang dilaporkan @@ -589,9 +618,29 @@ ms: skip_to_actions: Langkau ke tindakan status: Status statuses: Kandungan yang dilaporkan + statuses_description_html: Kandungan yang menyinggung perasaan akan disebut dalam komunikasi dengan akaun yang dilaporkan + summary: + action_preambles: + delete_html: 'Anda akan mengalih keluar beberapa siaran @%{acct}. Ini akan:' + mark_as_sensitive_html: 'Anda akan menandai beberapa siaran @%{acct} sebagai sensitif. Ini akan:' + silence_html: 'Anda akan menghadkan akaun @%{acct}. Ini akan:' + suspend_html: 'Anda akan menggantung akaun @%{acct}. Ini akan:' + actions: + delete_html: Alih keluar pos yang menyinggung perasaan + mark_as_sensitive_html: Tandai media pos yang menyinggung perasaan sebagai sensitif + silence_html: Hadkan capaian @%{acct} dengan ketat dengan menjadikan profil dan kandungan mereka hanya kelihatan kepada orang yang sudah mengikuti mereka atau melihat profil itu secara manual + suspend_html: Gantung @%{acct}, menjadikan profil dan kandungan mereka tidak boleh diakses dan mustahil untuk berinteraksi dengannya + close_report: 'Tandai laporan #%{id} sebagai diselesaikan' + close_reports_html: Tandai semua laporan terhadap @%{acct} sebagai telah diselesaikan + delete_data_html: Padamkan profil dan kandungan @%{acct} 30 hari dari sekarang melainkan mereka dibatalkan penggantungan buat sementara waktu + preview_preamble_html: "@%{acct} akan menerima amaran dengan kandungan berikut:" + record_strike_html: Rakam bantahan terhadap @%{acct} untuk membantu anda mempertingkatkan tentang pelanggaran akaun ini pada masa hadapan + send_email_html: Hantar @%{acct} e-mel amaran + warning_placeholder: Penaakulan tambahan pilihan untuk tindakan penyederhanaan. target_origin: Asalan akaun yang dilaporkan title: Laporan unassign: Nyahtugaskan + unknown_action_msg: 'Tindakan tidak diketahui: %{action}' unresolved: Nyahselesaikan updated_at: Dikemaskini view_profile: Lihat profil @@ -606,12 +655,15 @@ ms: moderation: Penyederhanaan special: Khas delete: Padam + description_html: Dengan peranan pengguna, anda boleh menyesuaikan fungsi dan kawasan Mastodon yang boleh diakses oleh pengguna anda. edit: Sunting peranan '%{name}' everyone: Kebenaran lalai + everyone_full_description_html: Ini ialah peranan asas yang mempengaruhi semua pengguna, walaupun mereka yang tidak mempunyai peranan yang ditetapkan. Semua peranan lain mewarisi kebenaran daripadanya. permissions_count: other: "%{count} kebenaran" privileges: administrator: Pentadbir + administrator_description: Users with this permission will bypass every permission delete_user_data: Padamkan Data Pengguna delete_user_data_description: Membenarkan pengguna menghapuskan data pengguna lain tanpa bertangguh invite_users: Mengundang pengguna @@ -668,12 +720,24 @@ ms: preamble: Menyesuaikan antara muka web Mastodon. title: Penampilan branding: + preamble: Penjenamaan server anda membezakannya daripada server lain dalam rangkaian. Maklumat ini mungkin dipaparkan merentasi pelbagai persekitaran, seperti antara muka web Mastodon, aplikasi asli, dalam pratonton pautan di tapak web lain dan dalam aplikasi pemesejan, dan sebagainya. Atas sebab ini, adalah lebih baik untuk memastikan maklumat ini jelas, pendek dan padat. title: Penjenamaan + captcha_enabled: + desc_html: Ini bergantung pada skrip luaran daripada hCaptcha, yang mungkin menjadi kebimbangan keselamatan dan privasi. Selain itu, ini boleh menjadikan proses pendaftaran menjadi kurang dapat diakses oleh sesetengah orang (terutamanya orang kurang upaya). Atas sebab ini, sila pertimbangkan langkah alternatif seperti pendaftaran berasaskan kelulusan atau jemputan. + title: Memerlukan pengguna baharu menyelesaikan CAPTCHA untuk mengesahkan akaun mereka content_retention: + preamble: Kawal cara kandungan yang dijana pengguna disimpan dalam Mastodon. title: Pengekalan kandungan + default_noindex: + desc_html: Mempengaruhi semua pengguna yang tidak menukar tetapan ini sendiri + title: Tarik pengguna keluar daripada pengindeksan enjin carian secara lalai discovery: + follow_recommendations: Ikut cadangan + preamble: Memaparkan kandungan yang menarik adalah penting dalam memasukkan pengguna baharu yang mungkin tidak mengenali sesiapa Mastodon. Kawal cara pelbagai ciri penemuan berfungsi pada server anda. profile_directory: Direktori profil public_timelines: Garis masa awam + publish_discovered_servers: Terbitkan pelayan yang ditemui + publish_statistics: Terbitkan statistik title: Penemuan trends: Sohor kini domain_blocks: @@ -688,16 +752,22 @@ ms: approved: Kelulusan diperlukan untuk pendaftaran none: Tiada siapa boleh mendaftar open: Sesiapapun boleh mendaftar + title: Tetapan server site_uploads: delete: Hapuskan fail yang dimuat naik destroyed_msg: Muat naik tapak berjaya dihapuskan! statuses: account: Penulis + application: Aplikasi + back_to_account: Kembali ke halaman akaun + back_to_report: Kembali ke halaman laporan batch: + remove_from_report: Alih keluar daripada laporan report: Laporan deleted: Dipadamkan favourites: Gemaran history: Sejarah versi + in_reply_to: Membalas kepada language: Bahasa media: title: Media @@ -709,6 +779,8 @@ ms: status_changed: Hantaran diubah title: Hantaran akaun trending: Sohor kini + visibility: Visibiliti + with_media: Dengan media strikes: actions: delete_statuses: "%{name} memadam hantaran %{target}" @@ -720,15 +792,29 @@ ms: suspend: "%{name} telah menggantungkan akaun %{target}" appeal_approved: Dirayu appeal_pending: Rayuan yang belum selesai + appeal_rejected: Rayuan ditolak system_checks: + database_schema_check: + message_html: Terdapat migrasi pangkalan data yang belum selesai. Sila jalankannya untuk memastikan aplikasi berfungsi seperti yang diharapkan + elasticsearch_running_check: + message_html: Tidak dapat menyambung ke Elasticsearch. Sila semak sama ada ia sedang berjalan atau lumpuhkan carian teks penuh + elasticsearch_version_check: + message_html: 'Versi Elasticsearch tidak serasi: %{value}' + version_comparison: Elasticsearch %{running_version} sedang berjalan manakala %{required_version} diperlukan + rules_check: + action: Urus peraturan server + message_html: Anda belum menentukan sebarang peraturan server. sidekiq_process_check: message_html: Tiada proses Sidekiq berjalan untuk baris gilir %{value}. Sila semak konfigurasi Sidekiq anda upload_check_privacy_error: + action: Semak di sini untuk maklumat lanjut message_html: "Server web anda salah konfigurasi. Privasi pengguna anda berisiko" upload_check_privacy_error_object_storage: + action: Semak di sini untuk maklumat lanjut message_html: "Ruang objek anda salah konfigurasi. Privasi pengguna anda berisiko" tags: review: Semak status + updated_msg: Tetapan hashtag berjaya dikemas kini title: Pentadbiran trends: allow: Izin @@ -737,11 +823,19 @@ ms: links: allow: Membenarkan pautan allow_provider: Membenarkan penerbit + description_html: Ini ialah pautan yang sedang banyak dikongsi oleh akaun tempat server anda melihat siaran daripadanya. Ia boleh membantu pengguna anda mengetahui perkara yang berlaku di dunia. Tiada pautan dipaparkan secara terbuka sehingga anda meluluskan penerbit. Anda juga boleh membenarkan atau menolak pautan individu. disallow: Tidak membenarkan pautan + disallow_provider: Tolak penerbit + no_link_selected: Tiada pautan ditukar kerana tiada pautan dipilih + publishers: + no_publisher_selected: Tiada penerbit ditukar kerana tiada penerbit dipilih title: Pautan yang sedang sohor kini + usage_comparison: Dikongsi %{today} kali hari ini, berbanding %{yesterday} semalam not_allowed_to_trend: Tidak dibenarkan menjadi trend only_allowed: Hanya dibenarkan + pending_review: Menunggu semak semula preview_card_providers: + description_html: Ini adalah domain dari mana pautan sering dikongsi pada server anda. Pautan tidak akan menjadi aliran secara terbuka melainkan domain pautan itu diluluskan. Kelulusan (atau penolakan) anda dilanjutkan kepada subdomain. rejected: Pautan daripada penerbit ini tidak akan menjadi sohor kini title: Penerbit rejected: Ditolak @@ -775,10 +869,41 @@ ms: empty: You don't have any webhook endpoints configured yet. enable: Dayakan enabled: Aktif + new: Webhook baru + rotate_secret: Putar rahsia + secret: Menandatangani rahsia + status: Status + title: Webhook + webhook: Webhook admin_mailer: new_appeal: actions: + delete_statuses: untuk memadamkan pos mereka + disable: untuk membekukan akaun mereka + mark_statuses_as_sensitive: untuk menandakan pos mereka sebagai sensitif + none: amaran + sensitive: untuk menandakan akaun mereka sebagai sensitif silence: untuk mengehadkan akaun mereka + suspend: untuk menggantung akaun mereka + body: "%{target} sedang merayu keputusan penyederhanaan sebanyak %{action_taken_by} dari %{date}, iaitu %{type}. Mereka tulis:" + next_steps: Anda boleh meluluskan rayuan untuk membuat asal keputusan penyederhanaan atau mengabaikannya. + subject: "%{username} sedang merayu keputusan penyederhanaan pada %{instance}" + new_pending_account: + body: Butiran akaun baharu ada di bawah. Anda boleh meluluskan atau menolak aplikasi ini. + subject: Akaun baharu disediakan untuk semakan pada %{instance} (%{username}) + new_report: + body: "%{reporter} telah melaporkan %{target}" + body_remote: Seseorang daripada %{domain} telah melaporkan %{target} + subject: Laporan baharu untuk %{instance} (#%{id}) + new_trends: + body: 'Item berikut memerlukan semakan sebelum boleh dipaparkan secara terbuka:' + new_trending_links: + title: Pautan sohor kini + new_trending_statuses: + title: Pos sohor kini + new_trending_tags: + no_approved_tags: Pada masa ini tiada hashtag sohor kini yang diluluskan. + requirements: 'Mana-mana calon ini boleh melepasi hashtag arah aliran #%{rank} yang diluluskan, yang pada masa ini ialah #%{lowest_tag_name} dengan markah %{lowest_tag_score}.' appearance: advanced_web_interface_hint: 'Jika anda ingin menggunakan keseluruhan lebar skrin anda, antara muka web lanjutan membolehkan anda mengkonfigurasi banyak lajur berbeza untuk melihat seberapa banyak maklumat pada masa yang sama seperti yang anda mahu: Laman Utama, pemberitahuan, garis masa bersekutu, sebarang bilangan senarai dan hashteg.' discovery: Penemuan @@ -801,7 +926,11 @@ ms: delete_account: Padam akaun description: prefix_sign_up: Daftar pada Mastodon hari ini! + suffix: Dengan akaun, anda akan dapat mengikuti orang, menyiarkan kemas kini dan bertukar-tukar mesej dengan pengguna dari mana-mana server Mastodon dan banyak lagi! + didnt_get_confirmation: Tidak menerima pautan pengesahan? + dont_have_your_security_key: Tiada kunci keselamatan anda? forgot_password: Terlupa kata laluan anda? + invalid_reset_password_token: Token tetapan semula kata laluan tidak sah atau tamat tempoh. Sila minta yang baharu. log_in_with: Daftar masuk dengan login: Daftar masuk logout: Daftar keluar diff --git a/config/locales/nn.yml b/config/locales/nn.yml index b6f0d8bfe3..5c81e83976 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1349,10 +1349,10 @@ nn: favourite: e-postar om favorittmarkeringar follow: e-postar om nye fylgjarar follow_request: e-postar om fylgjeførespurnadar - mention: e-poster om nevninger - reblog: e-poster om fremhevinger - resubscribe_html: Hvis du har avsluttet abonnementet ved en feiltakelse, kan du abonnere på nytt i innstillinger for e-postvarsling. - success_html: Du vil ikke lenger motta %{type} fra Mastodon på %{domain} i e-posten din på %{email}. + mention: e-postar om nemningar + reblog: e-postar om framhevingar + resubscribe_html: Om du har avslutta avslutta abonnementet ved ein feil, kan du abonnera på nytt i innstillingar for e-postvarsling. + success_html: Du vil ikkje lenger motta %{type} frå Mastodon på %{domain} til din e-post %{email}. title: Meld av media_attachments: validations: @@ -1770,10 +1770,10 @@ nn: seamless_external_login: Du er logga inn gjennom eit eksternt reiskap, so passord og e-postinstillingar er ikkje tilgjengelege. signed_in_as: 'Logga inn som:' verification: - extra_instructions_html: Tips: Lenken på din nettside kan være usynlig. Den viktige delen er rel="me" som sikrer at nettsteder med brukergenerert innhold ikke kan utgi seg for å være deg. Du kan til og med bruke en link lenke i sidens topptekst i stedet for a, men HTML-koden må være tilgjengelig uten å kjøre JavaScript. + extra_instructions_html: Tips: Linken på nettsida di kan vera usynleg. Den viktige delen er rel="me", som på nettstader med brukargenerert innhald vil hindra at andre kan låst som dei er deg. Du kan til og med bruka link i staden for a i toppteksten til sida, men HTML-koden må vera tilgjengeleg utan å måtte køyra JavaScript. here_is_how: Slik gjer du - hint_html: "Verifisering av identiteten din på Mastodon er for alle. Basert på åpne nettstandarder, gratis nå og for alltid. Alt du trenger er en personlig nettside som gjør at folk kjenner deg igjen. Når du lenker til dette nettstedet fra din profil, vil vi sjekke at nettstedet lenker tilbake til profilen din og viser dette på profilen din." - instructions_html: Kopier og lim inn koden nedenfor i HTML til ditt nettsted. Deretter legger du til adressen til nettstedet ditt i et av ekstrafeltene på profilen din fra fanen "Rediger profil" og lagre endringer. + hint_html: "Stadfesting av eigen identitet på Mastodon er for alle. Basert på opne nettstandardar, gratis no og for alltid. Alt du treng er ei personleg nettside der folk kjenner deg att. Om du lagar ein link som peikar på denne nettsida frå profilen din, vil profilen din få ein synleg indikator i dei tilfella der nettsida har ein link som peikar attende på profilen." + instructions_html: Kopier og lim inn i koden nedanfor i HTML-koden for nettsida di. Legg deretter adressa til nettsida di til i ei av ekstrafelta på profilen din frå fana "Rediger profil" og lagre endringane. verification: Stadfesting verified_links: Dine verifiserte lenker webauthn_credentials: diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index f1b1e06ad1..ce7a87cf9e 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -170,8 +170,8 @@ gd: text: Mìnich carson a bu chòir an caochladh a chur orra defaults: autofollow: Thoir cuireadh dhaibh airson an cunntas agad a leantainn - avatar: Avatar - bot: Seo cunntas bot + avatar: Dealbh na pròifil + bot: Seo cunntas fèin-obrachail chosen_languages: Criathraich na cànain confirm_new_password: Dearbh am facal-faire ùr confirm_password: Dearbh am facal-faire @@ -182,8 +182,8 @@ gd: display_name: Ainm-taisbeanaidh email: Seòladh puist-d expires_in: Falbhaidh an ùine air às dèidh - fields: Meata-dàta na pròifile - header: Bann-cinn + fields: Raointean a bharrachd + header: Dealbh a’ bhanna-chinn honeypot: "%{label} (na lìon seo)" inbox_url: URL bogsa a-steach an ath-sheachadain irreversible: Leig seachad seach falach diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index 8f4854858d..511742fdff 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -4,6 +4,8 @@ ms: hints: account: display_name: Nama penuh anda atau nama anda yang menyeronokkan. + fields: Halaman utama anda, kata ganti nama, umur, apa sahaja yang anda mahukan. + note: 'Anda boleh @menyebut orang lain atau #hashtags.' account_alias: acct: Tentukan namapengguna@domain akaun yang ingin anda alihkan daripada account_migration: @@ -20,6 +22,8 @@ ms: disable: Halang pengguna daripada menggunakan akaun mereka, tetapi jangan hapus atau sorokkan kandungan mereka. none: Gunakan ini untuk menghantar amaran kepada pengguna, tanpa mencetuskan sebarang tindakan lain. sensitive: Memaksa semua lampiran media pengguna ini ditandakan sebagai sensitif. + silence: Halang pengguna daripada dapat membuat siaran dengan keterlihatan awam, menyembunyikan siaran dan pemberitahuan mereka daripada orang yang tidak mengikutinya. Menutup semua laporan terhadap akaun ini. + suspend: Halang sebarang interaksi daripada atau ke akaun ini dan padamkan kandungannya. Boleh diterbalikkan dalam masa 30 hari. Menutup semua laporan terhadap akaun ini. warning_preset_id: Pilihan. Anda masih boleh menambah teks tersuai pada akhir praset announcement: all_day: Apabila diperiksa, hanya tarikh dalam julat masa yang akan dipaparkan @@ -32,22 +36,43 @@ ms: defaults: autofollow: Orang yang mendaftar melalui undangan akan mengikuti anda secara automatik avatar: PNG, GIF atau JPG. Kebanyakannya %{size}. Saiz akan dikecilkan kepada %{dimensions}px + bot: Memberi isyarat kepada orang lain bahawa akaun itu kebanyakannya melakukan tindakan automatik dan mungkin tidak dipantau + context: Satu atau berbilang konteks di mana penapis harus digunakan + current_password: Untuk tujuan keselamatan sila masukkan kata laluan akaun semasa + current_username: Untuk mengesahkan, sila masukkan nama pengguna akaun semasa + digest: Hanya dihantar selepas tempoh yang lama tidak aktif dan hanya jika anda telah menerima sebarang mesej peribadi semasa ketiadaan anda + discoverable: Benarkan akaun anda ditemui oleh orang yang tidak dikenali melalui pengesyoran, aliran dan ciri lain email: Anda akan dihantar e-mel pengesahan + header: PNG, GIF atau JPG. Paling banyak %{size}. Akan diturunkan skala kepada %{dimensions}px + inbox_url: Salin URL dari muka depan geganti yang anda mahu gunakan + irreversible: Siaran yang ditapis akan hilang secara tidak dapat dipulihkan, walaupun penapis dialih keluar kemudian locale: Bahasa untuk antara muka pengguna, e-mel dan pemberitahuan segera + locked: Kawal orang yang boleh mengikuti anda secara manual dengan meluluskan permintaan ikuti password: Gunakan sekurang-kurangnya 8 aksara + phrase: Akan dipadankan tanpa mengira sarung dalam teks atau amaran kandungan siaran + scopes: API mana yang akan dibenarkan untuk diakses oleh aplikasi. Jika anda memilih skop peringkat atasan, anda tidak perlu memilih skop individu. + setting_aggregate_reblogs: Jangan tunjukkan rangsangan baharu untuk siaran yang telah dirangsang baru-baru ini (hanya menjejaskan rangsangan yang baru diterima) setting_always_send_emails: Biasanya pemberitahuan e-mel tidak akan dihantar apabila anda selalu menggunakan Mastodon + setting_default_sensitive: Media sensitif disembunyikan secara lalai dan boleh didedahkan dengan satu klik setting_display_media_default: Sembunyikan media yang ditanda sebagai sensitif setting_display_media_hide_all: Sentiasa sembunyikan media setting_display_media_show_all: Sentiasa paparkan media setting_hide_network: Sesiapa yang anda ikuti dan sesiapa yang mengikuti anda akan disembunyi daripada profil anda setting_noindex: Menjejaskan profil awam dan laman hantaran anda + setting_show_application: Aplikasi yang anda gunakan untuk menyiarkan akan dipaparkan dalam paparan terperinci siaran anda form_admin_settings: closed_registrations_message: Dipaparkan semasa pendaftaran ditutup + site_contact_email: Cara orang boleh menghubungi anda untuk pertanyaan undang-undang atau sokongan. site_contact_username: Bagaimana orang boleh menghubungi anda pada Mastodon. site_extended_description: Apa-apa maklumat tambahan yang mungkin berguna untuk pelawat dan pengguna anda. Boleh distruktur dengan sintaks Markdown. + site_short_description: Penerangan ringkas untuk membantu mengenal pasti server anda. Siapa yang menjalankannya, untuk siapa? site_terms: Gunakan dasar polisi anda atau biarkan kosong untuk menggunakan lalai. Boleh distruktur dengan sintaks Markdown. site_title: Bagaimana orang boleh merujuk kepada server anda selain nama domainnya. status_page_url: URL halaman yang membolehkan orang ramai melihat status server ini semasa gangguan + theme: Tema yang pelawat log keluar dan pengguna baharu lihat. + thumbnail: Imej kira-kira 2:1 dipaparkan bersama maklumat server anda. + timeline_preview: Pelawat yang log keluar akan dapat menyemak imbas siaran awam terkini yang tersedia pada server. + trendable_by_default: Langkau semakan manual kandungan sohor kini. Item individu masih boleh dialih keluar daripada trend selepas fakta itu. form_challenge: current_password: Anda sedang memasuki kawasan selamat imports: @@ -63,9 +88,12 @@ ms: color: Warna yang akan digunakan untuk peranan ini dalam seluruh UI, sebagai RGB dalam format hex highlighted: Ini menjadikan peranan ini dipaparkan secara umum permissions_as_keys: Pengguna dengan peranan ini akan mempunyai akses kepada... + webhook: + url: Di mana acara akan dihantar labels: account: fields: + name: Label value: Kandungan account_warning_preset: title: Tajuk @@ -79,10 +107,14 @@ ms: suspend: Gantung warning_preset_id: Gunakan amaran yang ditetapkan announcement: + all_day: Acara sepanjang hari + ends_at: Tamat acara + starts_at: Permulaan acara text: Pengumuman appeal: text: Jelaskan mengapa keputusan ini patut diterbalikkan defaults: + avatar: Gambar profil bot: Ini ialah akaun bot chosen_languages: Tapis bahasa confirm_new_password: Sahkan kata laluan baru @@ -95,8 +127,11 @@ ms: email: Alamat e-mel expires_in: Tamat tempoh selepas fields: Metadata profil + honeypot: "%{label} (jangan isi)" + irreversible: Sebaliknya sembunyikan, jatuhkan locale: Bahasa antara muka new_password: Kata laluan baru + note: Bio otp_attempt: Kod dua faktor password: Kata laluan phrase: Kata kunci atau frasa @@ -108,6 +143,7 @@ ms: setting_display_media_default: Lalai setting_display_media_hide_all: Sembunyikan semua setting_display_media_show_all: Paparkan semua + setting_hide_network: Sembunyikan graf sosial anda setting_system_font_ui: Gunakan fon lalai sistem setting_theme: Tema halaman setting_trends: Paparkan trend hari ini @@ -136,6 +172,7 @@ ms: site_short_description: Penerangan pelayan site_terms: Dasar Privasi site_title: Nama pelayan + status_page_url: URL halaman status theme: Tema asal trends: Dayakan trend invite: @@ -166,6 +203,7 @@ ms: usable: Benarkan siaran untuk menggunakan tanda pagar ini user: role: Peranan + time_zone: Zon masa user_role: color: Warna lencana name: Nama @@ -175,5 +213,6 @@ ms: not_recommended: Tidak disyorkan recommended: Disyorkan required: + mark: "*" text: diperlukan 'yes': Ya diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index b35c11f362..80333c96e5 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -4,7 +4,7 @@ vi: hints: account: display_name: Tên đầy đủ hoặc biệt danh đều được. - fields: Trang blog của bạn, nghề nghiệp, tuổi hay bất cứ thứ gì. + fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. note: 'Bạn có thể @nhắnriêng ai đó hoặc #hashtags.' account_alias: acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ @@ -19,9 +19,9 @@ vi: text_html: Tùy chọn. Bạn nên dùng mẫu có sẵn để tiết kiệm thời gian type_html: Chọn làm gì với %{acct} types: - disable: Tạm khóa đăng nhập tài khoản, nhưng không xóa hoặc ẩn tút. + disable: Tạm không cho đăng nhập tài khoản. none: Cảnh cáo tài khoản này, không áp đặt trừng phạt. - sensitive: Mọi tập tin của tài khoản này tải lên đều sẽ bị gắn nhãn nhạy cảm. + sensitive: Tất cả media tải lên sẽ bị gắn nhãn nhạy cảm. silence: Cấm người này đăng tút công khai, ẩn tút của họ hiện ra với những người chưa theo dõi họ. suspend: Vô hiệu hóa và xóa sạch dữ liệu của tài khoản này. Có thể khôi phục trước 30 ngày. warning_preset_id: Tùy chọn. Bạn vẫn có thể thêm chú thích riêng @@ -53,14 +53,14 @@ vi: scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi. setting_aggregate_reblogs: Nếu một tút đã được đăng lại thì những lượt đăng lại sau sẽ không hiện trên bảng tin nữa setting_always_send_emails: Bình thường thì email thông báo sẽ không gửi khi bạn đang dùng Mastodon - setting_default_sensitive: Mặc định là nội dung nhạy cảm và chỉ hiện nếu nhấn vào - setting_display_media_default: Làm mờ nội dung nhạy cảm - setting_display_media_hide_all: Ẩn - setting_display_media_show_all: Luôn hiển thị + setting_default_sensitive: Bắt buộc nhấn vào mới có thể xem + setting_display_media_default: Click để xem + setting_display_media_hide_all: Luôn ẩn + setting_display_media_show_all: Luôn hiện setting_hide_network: Ẩn những người bạn theo dõi và những người theo dõi bạn setting_noindex: Ảnh hưởng đến trang cá nhân và tút của bạn - setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết của tút - setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm + setting_show_application: Nó sẽ hiện trong chi tiết của tút + setting_use_blurhash: Phủ lớp màu làm nhòe đi hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào username: Chỉ dùng ký tự, số và dấu gạch dưới whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy @@ -124,7 +124,7 @@ vi: tag: name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn user: - chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ được chọn sau + chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ sau role: Vai trò kiểm soát những quyền mà người dùng có user_role: color: Màu được sử dụng cho vai trò trong toàn bộ giao diện người dùng, dưới dạng RGB ở định dạng hex @@ -199,26 +199,26 @@ vi: setting_aggregate_reblogs: Không hiện lượt đăng lại trùng lặp setting_always_send_emails: Luôn gửi email thông báo setting_auto_play_gif: Tự động phát ảnh GIF - setting_boost_modal: Yêu cầu xác nhận trước khi đăng lại tút + setting_boost_modal: Hỏi trước khi đăng lại tút setting_default_language: Ngôn ngữ đăng setting_default_privacy: Kiểu đăng - setting_default_sensitive: Ảnh/video là nội dung nhạy cảm - setting_delete_modal: Yêu cầu xác nhận trước khi xóa tút - setting_disable_swiping: Vô hiệu hóa vuốt màn hình - setting_display_media: Nội dung nhạy cảm + setting_default_sensitive: Đánh dấu media nhạy cảm + setting_delete_modal: Hỏi trước khi xóa tút + setting_disable_swiping: Không dùng chuyển động vuốt + setting_display_media: Media nhạy cảm setting_display_media_default: Mặc định setting_display_media_hide_all: Ẩn toàn bộ setting_display_media_show_all: Hiện toàn bộ - setting_expand_spoilers: Luôn hiển thị tút có nội dung ẩn + setting_expand_spoilers: Luôn mở rộng tút chứa nội dung ẩn setting_hide_network: Ẩn quan hệ của bạn setting_noindex: Không xuất hiện trong công cụ tìm kiếm setting_reduce_motion: Giảm chuyển động ảnh GIF - setting_show_application: Hiện ứng dụng đã dùng để đăng tút - setting_system_font_ui: Dùng phông chữ mặc định của hệ thống + setting_show_application: Hiện tên ứng dụng đăng tút + setting_system_font_ui: Dùng phông chữ mặc định hệ thống setting_theme: Giao diện setting_trends: Hiển thị thịnh hành hôm nay - setting_unfollow_modal: Yêu cầu xác nhận trước khi ngưng theo dõi ai đó - setting_use_blurhash: Làm mờ trước ảnh/video nhạy cảm + setting_unfollow_modal: Hỏi trước khi bỏ theo dõi ai đó + setting_use_blurhash: Phủ màu media nhạy cảm setting_use_pending_items: Không tự động cập nhật bảng tin severity: Mức độ nghiêm trọng sign_in_token_attempt: Mã an toàn @@ -264,9 +264,9 @@ vi: trends: Bật thịnh hành trends_as_landing_page: Dùng trang thịnh hành làm trang chào mừng interactions: - must_be_follower: Chặn thông báo từ những người không theo dõi bạn - must_be_following: Chặn thông báo từ những người bạn không theo dõi - must_be_following_dm: Chặn tin nhắn từ những người bạn không theo dõi + must_be_follower: Những người không theo dõi bạn + must_be_following: Những người bạn không theo dõi + must_be_following_dm: những người bạn không theo dõi (nhắn riêng) invite: comment: Bình luận invite_request: @@ -315,7 +315,7 @@ vi: recommended: Đề xuất required: mark: "*" - text: yêu cầu + text: Bắt buộc title: sessions: webauthn: Dùng một trong những khóa bảo mật của bạn để đăng nhập diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 54f9f7a805..57bf046983 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -168,14 +168,14 @@ vi: action_logs: action_types: approve_appeal: Chấp nhận kháng cáo - approve_user: Chấp nhận người dùng + approve_user: Chấp nhận đăng ký assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email - change_role_user: Thay đổi vai trò + change_role_user: Đổi vai trò confirm_user: Xác minh create_account_warning: Cảnh cáo create_announcement: Tạo thông báo mới - create_canonical_email_block: Tạo chặn tên miền email mới + create_canonical_email_block: Tạo chặn tên miền email create_custom_emoji: Tạo emoji create_domain_allow: Cho phép máy chủ create_domain_block: Chặn máy chủ @@ -187,7 +187,7 @@ vi: destroy_announcement: Xóa thông báo destroy_canonical_email_block: Bỏ chặn tên miền email destroy_custom_emoji: Xóa emoji - destroy_domain_allow: Bỏ cho phép máy chủ + destroy_domain_allow: Bỏ thanh trừng máy chủ destroy_domain_block: Bỏ chặn máy chủ destroy_email_domain_block: Bỏ chặn tên miền email destroy_instance: Thanh trừng máy chủ @@ -205,7 +205,7 @@ vi: memorialize_account: Đánh dấu tưởng niệm promote_user: Chỉ định vai trò reject_appeal: Từ chối kháng cáo - reject_user: Từ chối người dùng + reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo resend_user: Gửi lại email xác nhận @@ -343,9 +343,9 @@ vi: dashboard: active_users: người hoạt động interactions: tương tác - media_storage: Dung lượng lưu trữ + media_storage: Media new_users: người mới - opened_reports: tổng báo cáo + opened_reports: báo cáo pending_appeals_html: other: "%{count} kháng cáo đang chờ" pending_reports_html: @@ -357,7 +357,7 @@ vi: resolved_reports: báo cáo đã xử lí software: Phần mềm sources: Nguồn đăng ký - space: Dung lượng lưu trữ + space: Lưu trữ title: Thống kê top_languages: Ngôn ngữ phổ biến top_servers: Máy chủ phổ biến @@ -450,7 +450,7 @@ vi: title: Nhập máy chủ chặn no_file: Không có tập tin nào được chọn follow_recommendations: - description_html: "Gợi ý theo dõi là cách giúp những người mới nhanh chóng tìm thấy những nội dung thú vị. Khi một người chưa đủ tương tác với những người khác để hình thành các đề xuất theo dõi được cá nhân hóa, thì những người này sẽ được đề xuất. Nó bao gồm những người có số lượt tương tác gần đây cao nhất và số lượng người theo dõi cao nhất cho một ngôn ngữ nhất định trong máy chủ." + description_html: "Gợi ý theo dõi giúp những người mới nhanh chóng tìm thấy những nội dung thú vị. Khi một người chưa đủ tương tác với những người khác để hình thành các đề xuất theo dõi được cá nhân hóa, thì những người này sẽ được đề xuất. Nó bao gồm những người có số lượt tương tác gần đây cao nhất và số lượng người theo dõi cao nhất cho một ngôn ngữ nhất định trong máy chủ." language: Theo ngôn ngữ status: Trạng thái suppress: Tắt gợi ý theo dõi @@ -835,15 +835,15 @@ vi: no_publisher_selected: Không có nguồn đăng nào thay đổi vì không có nguồn đăng nào được chọn shared_by_over_week: other: "%{count} người chia sẻ tuần rồi" - title: Liên kết nổi bật + title: Tin tức nổi bật usage_comparison: Chia sẻ %{today} lần hôm nay, so với %{yesterday} lần hôm qua not_allowed_to_trend: Không được phép thành xu hướng only_allowed: Chỉ cho phép pending_review: Đang chờ preview_card_providers: - allowed: Liên kết từ nguồn đăng này có thể nổi bật + allowed: Tin tức từ nguồn này có thể lên xu hướng description_html: Đây là những nguồn mà từ đó các liên kết thường được chia sẻ trên máy chủ của bạn. Các liên kết sẽ không thể thịnh hành trừ khi bạn cho phép nguồn. Sự cho phép (hoặc cấm) của bạn áp dụng luôn cho các tên miền phụ. - rejected: Liên kết từ nguồn đăng không thể nổi bật + rejected: Tin tức từ nguồn này không thể lên xu hướng title: Nguồn đăng rejected: Đã cấm statuses: @@ -929,7 +929,7 @@ vi: new_trends: body: 'Các mục sau đây cần được xem xét trước khi chúng hiển thị công khai:' new_trending_links: - title: Liên kết nổi bật + title: Tin tức nổi bật new_trending_statuses: title: Tút nổi bật new_trending_tags: @@ -946,8 +946,8 @@ vi: remove: Bỏ liên kết bí danh appearance: advanced_web_interface: Bố cục - advanced_web_interface_hint: 'Bố cục nhiều cột cho phép bạn chuyển bố cục hiển thị thành nhiều cột khác nhau. Bao gồm: Bảng tin, thông báo, thế giới, cũng như danh sách và hashtag. Thích hợp nếu bạn đang dùng màn hình rộng.' - animations_and_accessibility: Bảng tin + advanced_web_interface_hint: Bố cục nhiều cột cho phép bạn chuyển bố cục hiển thị thành nhiều cột khác nhau. Thích hợp với màn hình rộng. + animations_and_accessibility: Hiệu ứng confirmation_dialogs: Hộp thoại xác nhận discovery: Khám phá localization: @@ -1027,7 +1027,7 @@ vi: new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút! title: Kiểm tra email của bạn sign_in: - preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu tài khoản của bạn được lưu trữ trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. + preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu đăng ký trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. title: Đăng nhập %{domain} sign_up: manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}." @@ -1120,9 +1120,9 @@ vi: invalid_domain: không phải là một tên miền hợp lệ edit_profile: basic_information: Thông tin cơ bản - hint_html: "Tùy chỉnh những gì mọi người nhìn thấy trên hồ sơ công khai của bạn và bên cạnh tút của bạn. Mọi người sẽ muốn theo dõi lại bạn và tương tác với bạn hơn khi bạn có một hồ sơ đầy đủ và một ảnh hồ sơ." + hint_html: "Tùy chỉnh những gì mọi người nhìn thấy trên hồ sơ công khai và bên cạnh tút của bạn. Mọi người sẽ muốn theo dõi và tương tác với bạn hơn nếu bạn có ảnh đại diện và một hồ sơ hoàn chỉnh." other: Khác - safety_and_privacy: An toàn và bảo mật + safety_and_privacy: Sự riêng tư errors: '400': Yêu cầu bạn gửi không hợp lệ hoặc sai hình thức. '403': Bạn không có quyền xem trang này. @@ -1160,11 +1160,11 @@ vi: add_new: Thêm mới errors: limit: Bạn đã đạt tới số lượng hashtag tối đa - hint_html: "Hashtag thường dùng là gì? Chúng là những hashtag sẽ được hiển thị nổi bật trên trang hồ sơ của bạn, cho phép mọi người tìm kiếm các bài đăng công khai của bạn có chứa các hashtag đó. Tính năng này có thể dùng để đánh dấu chuỗi tác phẩm sáng tạo hoặc dự án dài hạn." + hint_html: "Làm nổi bật những hashtag thường dùng. Một công cụ tuyệt vời để theo dõi các tác phẩm sáng tạo và dự án dài hạn của bạn, các hashtag thường dùng sẽ hiển thị nổi bật trên hồ sơ của bạn và cho phép truy cập nhanh vào các tút." filters: contexts: account: Trang hồ sơ - home: Bảng tin + home: Trang chính và danh sách notifications: Thông báo public: Tin công khai thread: Thảo luận @@ -1213,7 +1213,7 @@ vi: delete: Xóa deselect: Bỏ chọn tất cả none: Trống - order_by: Sắp xếp + order_by: Xếp theo save_changes: Lưu thay đổi select_all_matching_items: other: Chọn tất cả%{count} mục trùng hợp với tìm kiếm của bạn. @@ -1409,7 +1409,7 @@ vi: notifications: email_events: Email email_events_hint: 'Chọn những hoạt động sẽ gửi thông báo qua email:' - other_settings: Thông báo khác + other_settings: Chặn thông báo từ number: human: decimal_units: @@ -1469,14 +1469,14 @@ vi: invited: Đã mời last_active: Hoạt động lần cuối most_recent: Mới nhất - moved: Đã xóa + moved: Đã chuyển mutual: Đồng thời - primary: Hoạt động + primary: Còn relationship: Quan hệ remove_selected_domains: Xóa hết người theo dõi từ các máy chủ đã chọn remove_selected_followers: Xóa những người theo dõi đã chọn remove_selected_follows: Bỏ theo dõi những người đã chọn - status: Trạng thái của họ + status: Trạng thái remote_follow: missing_resource: Không tìm thấy URL chuyển hướng cho tài khoản của bạn reports: @@ -1493,7 +1493,7 @@ vi: too_soon: Ngày lên lịch phải trong tương lai sessions: activity: Gần đây nhất - browser: Trình duyệt + browser: Ứng dụng browsers: alipay: Alipay blackberry: BlackBerry @@ -1501,7 +1501,7 @@ vi: edge: Edge electron: Electron firefox: Firefox - generic: Trình duyệt khác + generic: Chưa rõ huawei_browser: Huawei Browser ie: Internet Explorer micro_messenger: MicroMes hành khách @@ -1516,7 +1516,7 @@ vi: weibo: Weibo current_session: Phiên hiện tại description: "%{browser} trên %{platform}" - explanation: Đây là các trình duyệt web đã từng đăng nhập vào tài khoản Mastodon của bạn. + explanation: Đây là các ứng dụng đã từng đăng nhập vào tài khoản Mastodon của bạn. ip: IP platforms: adobe_air: Adobe Air @@ -1645,7 +1645,7 @@ vi: tags: does_not_match_previous_name: không khớp với tên trước themes: - contrast: Mastodon (Độ tương phản cao) + contrast: Mastodon (Tương phản) default: Mastodon (Tối) mastodon-light: Mastodon (Sáng) time: @@ -1741,7 +1741,7 @@ vi: extra_instructions_html: Mẹo: Liên kết trên trang web của bạn có thể ẩn. Phần quan trọng là rel="me" ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn thậm chí có thể sử dụng một thẻ link trên header của trang thay vì a, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript. here_is_how: Cách thực hiện hint_html: "Xác minh danh tính trên Mastodon là dành cho tất cả mọi người. Dựa trên các tiêu chuẩn web mở, miễn phí bây giờ và mãi mãi. Tất cả những gì bạn cần là một trang web cá nhân để mọi người nhận ra bạn. Khi bạn liên kết đến trang web này từ hồ sơ của mình, chúng tôi sẽ kiểm tra xem trang web đó có liên kết lại với hồ sơ của bạn hay không và hiển thị một chỉ báo trực quan trên đó." - instructions_html: Sao chép và dán mã bên dưới vào HTML của trang web của bạn. Sau đó, thêm địa chỉ trang web của bạn vào một trong các trường bổ sung trên hồ sơ của bạn từ tab "Chỉnh sửa hồ sơ" và lưu các thay đổi. + instructions_html: Sao chép và dán mã bên dưới vào mã nguồn trang web của bạn. Sau đó, thêm địa chỉ trang web của bạn vào một trong các trường metadata trên hồ sơ của bạn từ tab "Sửa hồ sơ" và lưu thay đổi. verification: Xác minh verified_links: Những liên kết bạn đã xác minh webauthn_credentials: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index bed748d81e..2004c3a6c4 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1057,18 +1057,18 @@ zh-CN: with_month_name: "%Y年%m月%d日" datetime: distance_in_words: - about_x_hours: "%{count}时" - about_x_months: "%{count}个月" - about_x_years: "%{count}年" - almost_x_years: "%{count}年" + about_x_hours: "%{count}小时前" + about_x_months: "%{count}个月前" + about_x_years: "%{count}年前" + almost_x_years: "%{count}年前" half_a_minute: 刚刚 - less_than_x_minutes: "%{count}分" + less_than_x_minutes: "%{count}分钟前" less_than_x_seconds: 刚刚 - over_x_years: "%{count}年" - x_days: "%{count}天" - x_minutes: "%{count}分" - x_months: "%{count}个月" - x_seconds: "%{count}秒" + over_x_years: "%{count}年前" + x_days: "%{count}天前" + x_minutes: "%{count}分钟前" + x_months: "%{count}个月前" + x_seconds: "%{count}秒前" deletes: challenge_not_passed: 你输入的信息不正确 confirm_password: 输入你当前的密码来验证身份 From 6c6f3c91485065c95346a5af225f2654cc2c496c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 17:46:16 +0200 Subject: [PATCH 087/163] Add `ES_PRESET` option to customize numbers of shards and replicas (#26483) Co-authored-by: Eugen Rochko --- app/chewy/accounts_index.rb | 2 +- app/chewy/instances_index.rb | 2 +- app/chewy/statuses_index.rb | 2 +- app/chewy/tags_index.rb | 2 +- config/application.rb | 2 ++ config/initializers/chewy.rb | 8 -------- lib/chewy/index_extensions.rb | 18 ++++++++++++++++++ lib/chewy/settings_extensions.rb | 11 +++++++++++ 8 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 lib/chewy/index_extensions.rb create mode 100644 lib/chewy/settings_extensions.rb diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb index 61f5277d2b..1f8571c09d 100644 --- a/app/chewy/accounts_index.rb +++ b/app/chewy/accounts_index.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class AccountsIndex < Chewy::Index - settings index: { refresh_interval: '30s' }, analysis: { + settings index: index_preset(refresh_interval: '30s'), analysis: { filter: { english_stop: { type: 'stop', diff --git a/app/chewy/instances_index.rb b/app/chewy/instances_index.rb index 2bce4043c9..0d58167dc8 100644 --- a/app/chewy/instances_index.rb +++ b/app/chewy/instances_index.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class InstancesIndex < Chewy::Index - settings index: { refresh_interval: '30s' } + settings index: index_preset(refresh_interval: '30s') index_scope ::Instance.searchable diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb index 6dd4fb18b0..9f680efa52 100644 --- a/app/chewy/statuses_index.rb +++ b/app/chewy/statuses_index.rb @@ -3,7 +3,7 @@ class StatusesIndex < Chewy::Index include FormattingHelper - settings index: { refresh_interval: '30s' }, analysis: { + settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: { filter: { english_stop: { type: 'stop', diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb index df3d9e4cce..b2d50a000c 100644 --- a/app/chewy/tags_index.rb +++ b/app/chewy/tags_index.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class TagsIndex < Chewy::Index - settings index: { refresh_interval: '30s' }, analysis: { + settings index: index_preset(refresh_interval: '30s'), analysis: { analyzer: { content: { tokenizer: 'keyword', diff --git a/config/application.rb b/config/application.rb index a3bd3dfa4e..372adc1680 100644 --- a/config/application.rb +++ b/config/application.rb @@ -41,6 +41,8 @@ require_relative '../lib/mastodon/rack_middleware' require_relative '../lib/public_file_server_middleware' require_relative '../lib/devise/two_factor_ldap_authenticatable' require_relative '../lib/devise/two_factor_pam_authenticatable' +require_relative '../lib/chewy/settings_extensions' +require_relative '../lib/chewy/index_extensions' require_relative '../lib/chewy/strategy/mastodon' require_relative '../lib/chewy/strategy/bypass_with_warning' require_relative '../lib/webpacker/manifest_extensions' diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb index dc90176213..7d51a08457 100644 --- a/config/initializers/chewy.rb +++ b/config/initializers/chewy.rb @@ -25,14 +25,6 @@ Chewy.root_strategy = :bypass_with_warning if Rails.env.production? Chewy.request_strategy = :mastodon Chewy.use_after_commit_callbacks = false -module Chewy - class << self - def enabled? - settings[:enabled] - end - end -end - # Elasticsearch uses Faraday internally. Faraday interprets the # http_proxy env variable by default which leads to issues when # Mastodon is run with hidden services enabled, because diff --git a/lib/chewy/index_extensions.rb b/lib/chewy/index_extensions.rb new file mode 100644 index 0000000000..064fd56b3e --- /dev/null +++ b/lib/chewy/index_extensions.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Chewy + module IndexExtensions + def index_preset(base_options = {}) + case ENV['ES_PRESET'].presence + when 'single_node_cluster', nil + base_options.merge(number_of_replicas: 0) + when 'small_cluster' + base_options.merge(number_of_replicas: 1) + when 'large_cluster' + base_options.merge(number_of_replicas: 1, number_of_shards: (base_options[:number_of_shards] || 1) * 2) + end + end + end +end + +Chewy::Index.extend(Chewy::IndexExtensions) diff --git a/lib/chewy/settings_extensions.rb b/lib/chewy/settings_extensions.rb new file mode 100644 index 0000000000..0eb8b336f3 --- /dev/null +++ b/lib/chewy/settings_extensions.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Chewy + module SettingsExtensions + def enabled? + settings[:enabled] + end + end +end + +Chewy.extend(Chewy::SettingsExtensions) From 89b675cb07886dcc72ef52b6f778679d7099d96c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 18:47:43 +0200 Subject: [PATCH 088/163] Fix `repo:changelog` task matching strings that are not Pull Request identifiers (#26280) --- lib/tasks/repo.rake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake index 33c454444e..1ed1ee5c32 100644 --- a/lib/tasks/repo.rake +++ b/lib/tasks/repo.rake @@ -49,8 +49,8 @@ namespace :repo do File.open(path, 'r') do |file| file.each_line do |line| if line.start_with?('-') - new_line = line.gsub(/#([[:digit:]]+)*/) do |pull_request_reference| - pull_request_number = pull_request_reference[1..] + new_line = line.gsub(/[(]#([[:digit:]]+)[)]\Z/) do |pull_request_reference| + pull_request_number = pull_request_reference[2..-2] response = nil loop do @@ -66,7 +66,7 @@ namespace :repo do end pull_request = Oj.load(response.to_s) - "[#{pull_request['user']['login']}](#{pull_request['html_url']})" + "([#{pull_request['user']['login']}](#{pull_request['html_url']}))" end tmp.puts new_line From 738b024d0c65e01ecdbabe9fa5be5409c795e0cb Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 18:52:45 +0200 Subject: [PATCH 089/163] Add privacy tab in profile settings (#26484) Co-authored-by: Eugen Rochko --- .../settings/privacy_controller.rb | 27 ++++++++++++ .../settings/profiles_controller.rb | 2 +- app/models/user_settings.rb | 25 +++++------ app/models/user_settings/dsl.rb | 4 ++ app/models/user_settings/setting.rb | 21 +++++++++ .../settings/preferences/other/show.html.haml | 6 --- app/views/settings/privacy/show.html.haml | 43 +++++++++++++++++++ app/views/settings/profiles/show.html.haml | 11 ----- .../shared/_profile_navigation.html.haml | 1 + config/locales/ar.yml | 1 - config/locales/ast.yml | 2 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 1 - config/locales/de.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/en.yml | 10 ++++- config/locales/eo.yml | 1 - config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-QC.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 1 - config/locales/he.yml | 1 - config/locales/hu.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/ko.yml | 1 - config/locales/my.yml | 1 - config/locales/nl.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/simple_form.an.yml | 9 ---- config/locales/simple_form.ar.yml | 9 ---- config/locales/simple_form.ast.yml | 9 ---- config/locales/simple_form.be.yml | 9 ---- config/locales/simple_form.bg.yml | 9 ---- config/locales/simple_form.ca.yml | 9 ---- config/locales/simple_form.ckb.yml | 8 ---- config/locales/simple_form.co.yml | 8 ---- config/locales/simple_form.cs.yml | 9 ---- config/locales/simple_form.cy.yml | 9 ---- config/locales/simple_form.da.yml | 9 ---- config/locales/simple_form.de.yml | 9 ---- config/locales/simple_form.el.yml | 9 ---- config/locales/simple_form.en-GB.yml | 9 ---- config/locales/simple_form.en.yml | 21 +++++---- config/locales/simple_form.eo.yml | 9 ---- config/locales/simple_form.es-AR.yml | 9 ---- config/locales/simple_form.es-MX.yml | 9 ---- config/locales/simple_form.es.yml | 9 ---- config/locales/simple_form.et.yml | 9 ---- config/locales/simple_form.eu.yml | 9 ---- config/locales/simple_form.fa.yml | 9 ---- config/locales/simple_form.fi.yml | 9 ---- config/locales/simple_form.fo.yml | 9 ---- config/locales/simple_form.fr-QC.yml | 9 ---- config/locales/simple_form.fr.yml | 9 ---- config/locales/simple_form.fy.yml | 9 ---- config/locales/simple_form.gd.yml | 9 ---- config/locales/simple_form.gl.yml | 9 ---- config/locales/simple_form.he.yml | 9 ---- config/locales/simple_form.hr.yml | 2 - config/locales/simple_form.hu.yml | 9 ---- config/locales/simple_form.hy.yml | 8 ---- config/locales/simple_form.id.yml | 9 ---- config/locales/simple_form.io.yml | 9 ---- config/locales/simple_form.is.yml | 9 ---- config/locales/simple_form.it.yml | 9 ---- config/locales/simple_form.ja.yml | 9 ---- config/locales/simple_form.ka.yml | 5 --- config/locales/simple_form.kab.yml | 4 -- config/locales/simple_form.kk.yml | 2 - config/locales/simple_form.ko.yml | 9 ---- config/locales/simple_form.ku.yml | 9 ---- config/locales/simple_form.lv.yml | 9 ---- config/locales/simple_form.ms.yml | 6 --- config/locales/simple_form.my.yml | 9 ---- config/locales/simple_form.nl.yml | 9 ---- config/locales/simple_form.nn.yml | 9 ---- config/locales/simple_form.no.yml | 9 ---- config/locales/simple_form.oc.yml | 8 ---- config/locales/simple_form.pl.yml | 9 ---- config/locales/simple_form.pt-BR.yml | 9 ---- config/locales/simple_form.pt-PT.yml | 9 ---- config/locales/simple_form.ro.yml | 8 ---- config/locales/simple_form.ru.yml | 9 ---- config/locales/simple_form.sc.yml | 8 ---- config/locales/simple_form.sco.yml | 9 ---- config/locales/simple_form.si.yml | 9 ---- config/locales/simple_form.sk.yml | 8 ---- config/locales/simple_form.sl.yml | 9 ---- config/locales/simple_form.sq.yml | 9 ---- config/locales/simple_form.sr-Latn.yml | 9 ---- config/locales/simple_form.sr.yml | 9 ---- config/locales/simple_form.sv.yml | 9 ---- config/locales/simple_form.ta.yml | 2 - config/locales/simple_form.th.yml | 9 ---- config/locales/simple_form.tr.yml | 9 ---- config/locales/simple_form.uk.yml | 9 ---- config/locales/simple_form.vi.yml | 9 ---- config/locales/simple_form.zgh.yml | 1 - config/locales/simple_form.zh-CN.yml | 9 ---- config/locales/simple_form.zh-HK.yml | 9 ---- config/locales/simple_form.zh-TW.yml | 9 ---- config/locales/sl.yml | 1 - config/locales/sq.yml | 1 - config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 1 - config/locales/zh-CN.yml | 1 - config/locales/zh-TW.yml | 1 - config/navigation.rb | 2 +- config/routes/settings.rb | 1 + 130 files changed, 131 insertions(+), 689 deletions(-) create mode 100644 app/controllers/settings/privacy_controller.rb create mode 100644 app/views/settings/privacy/show.html.haml diff --git a/app/controllers/settings/privacy_controller.rb b/app/controllers/settings/privacy_controller.rb new file mode 100644 index 0000000000..83be8772a0 --- /dev/null +++ b/app/controllers/settings/privacy_controller.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class Settings::PrivacyController < Settings::BaseController + before_action :set_account + + def show; end + + def update + if UpdateAccountService.new.call(@account, account_params.except(:settings)) + current_user.update!(settings_attributes: account_params[:settings]) + ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + redirect_to settings_privacy_path, notice: I18n.t('generic.changes_saved_msg') + else + render :show + end + end + + private + + def account_params + params.require(:account).permit(:discoverable, :locked, :hide_collections, settings: UserSettings.keys) + end + + def set_account + @account = current_account + end +end diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb index be5b4f3029..8ae69b7fe0 100644 --- a/app/controllers/settings/profiles_controller.rb +++ b/app/controllers/settings/profiles_controller.rb @@ -20,7 +20,7 @@ class Settings::ProfilesController < Settings::BaseController private def account_params - params.require(:account).permit(:display_name, :note, :avatar, :header, :locked, :bot, :discoverable, :hide_collections, fields_attributes: [:name, :value]) + params.require(:account).permit(:display_name, :note, :avatar, :header, :bot, fields_attributes: [:name, :value]) end def set_account diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index a707e28ce9..678467c75d 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -16,6 +16,8 @@ class UserSettings setting :default_sensitive, default: false setting :default_privacy, default: nil, in: %w(public unlisted private) + setting_inverse_alias :indexable, :noindex + namespace :web do setting :advanced_layout, default: false setting :trends, default: true @@ -55,31 +57,26 @@ class UserSettings end def [](key) - key = key.to_sym + definition = self.class.definition_for(key) - raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key) + raise KeyError, "Undefined setting: #{key}" if definition.nil? - if @original_hash.key?(key) - @original_hash[key] - else - self.class.definition_for(key).default_value - end + definition.value_for(key, @original_hash[definition.key]) end def []=(key, value) - key = key.to_sym + definition = self.class.definition_for(key) - raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key) + raise KeyError, "Undefined setting: #{key}" if definition.nil? - setting_definition = self.class.definition_for(key) - typecast_value = setting_definition.type_cast(value) + typecast_value = definition.type_cast(value) - raise ArgumentError, "Invalid value for setting #{key}: #{typecast_value}" if setting_definition.in.present? && setting_definition.in.exclude?(typecast_value) + raise ArgumentError, "Invalid value for setting #{definition.key}: #{typecast_value}" if definition.in.present? && definition.in.exclude?(typecast_value) if typecast_value.nil? - @original_hash.delete(key) + @original_hash.delete(definition.key) else - @original_hash[key] = typecast_value + @original_hash[definition.key] = definition.value_for(key, typecast_value) end end diff --git a/app/models/user_settings/dsl.rb b/app/models/user_settings/dsl.rb index 26238bbbe8..4282830711 100644 --- a/app/models/user_settings/dsl.rb +++ b/app/models/user_settings/dsl.rb @@ -10,6 +10,10 @@ module UserSettings::DSL end end + def setting_inverse_alias(key, original_key) + @definitions[key] = @definitions[original_key].inverse_of(key) + end + def namespace(key, &block) @definitions ||= {} diff --git a/app/models/user_settings/setting.rb b/app/models/user_settings/setting.rb index 5f5504254a..9c17017440 100644 --- a/app/models/user_settings/setting.rb +++ b/app/models/user_settings/setting.rb @@ -10,6 +10,27 @@ class UserSettings::Setting @in = options[:in] end + def inverse_of(name) + @inverse_of = name.to_sym + self + end + + def value_for(name, original_value) + value = begin + if original_value.nil? + default_value + else + original_value + end + end + + if !@inverse_of.nil? && @inverse_of == name.to_sym + !value + else + value + end + end + def default_value if @default_value.respond_to?(:call) @default_value.call diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index b8beed394c..5228ce1190 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -8,9 +8,6 @@ = render 'shared/error_messages', object: current_user = f.simple_fields_for :settings, current_user.settings do |ff| - .fields-group - = ff.input :noindex, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_noindex'), hint: I18n.t('simple_form.hints.defaults.setting_noindex') - .fields-group = ff.input :aggregate_reblogs, wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_aggregate_reblogs'), hint: I18n.t('simple_form.hints.defaults.setting_aggregate_reblogs') @@ -26,9 +23,6 @@ .fields-group = ff.input :default_sensitive, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_default_sensitive'), hint: I18n.t('simple_form.hints.defaults.setting_default_sensitive') - .fields-group - = ff.input :show_application, wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_show_application'), hint: I18n.t('simple_form.hints.defaults.setting_show_application') - %h4= t 'preferences.public_timelines' .fields-group diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml new file mode 100644 index 0000000000..66e495e108 --- /dev/null +++ b/app/views/settings/privacy/show.html.haml @@ -0,0 +1,43 @@ +- content_for :page_title do + = t('privacy.title') + +- content_for :heading do + %h2= t('settings.profile') + = render partial: 'settings/shared/profile_navigation' + += simple_form_for @account, url: settings_privacy_path, html: { method: :put } do |f| + = render 'shared/error_messages', object: @account + + %p.lead= t('privacy.hint_html') + + %h4= t('privacy.reach') + + %p.lead= t('privacy.reach_hint_html') + + .fields-group + = f.input :discoverable, as: :boolean, wrapper: :with_label, recommended: true + + .fields-group + = f.input :locked, as: :boolean, wrapper: :with_label + + %h4= t('privacy.search') + + %p.lead= t('privacy.search_hint_html') + + = f.simple_fields_for :settings, current_user.settings do |ff| + .fields-group + = ff.input :indexable, wrapper: :with_label + + %h4= t('privacy.privacy') + + %p.lead= t('privacy.privacy_hint_html') + + .fields-group + = f.input :hide_collections, as: :boolean, wrapper: :with_label + + = f.simple_fields_for :settings, current_user.settings do |ff| + .fields-group + = ff.input :show_application, wrapper: :with_label + + .actions + = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index ac3070f162..92b7f42569 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -56,17 +56,6 @@ = fa_icon 'trash fw' = t('generic.delete') - %h4= t('edit_profile.safety_and_privacy') - - .fields-group - = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable'), recommended: true - - .fields-group - = f.input :locked, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.locked') - - .fields-group - = f.input :hide_collections, as: :boolean, wrapper: :with_label, label: t('simple_form.labels.defaults.setting_hide_network'), hint: t('simple_form.hints.defaults.setting_hide_network') - %h4= t('edit_profile.other') .fields-group diff --git a/app/views/settings/shared/_profile_navigation.html.haml b/app/views/settings/shared/_profile_navigation.html.haml index 54425c27b3..3a657c5bde 100644 --- a/app/views/settings/shared/_profile_navigation.html.haml +++ b/app/views/settings/shared/_profile_navigation.html.haml @@ -2,5 +2,6 @@ = render_navigation renderer: :links do |primary| :ruby primary.item :profile, safe_join([fa_icon('user fw'), t('settings.edit_profile')]), settings_profile_path + primary.item :privacy, safe_join([fa_icon('lock fw'), t('privacy.title')]), settings_privacy_path primary.item :verification, safe_join([fa_icon('check fw'), t('verification.verification')]), settings_verification_path primary.item :featured_tags, safe_join([fa_icon('hashtag fw'), t('settings.featured_tags')]), settings_featured_tags_path diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 11d368f77e..5abc5d700f 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1152,7 +1152,6 @@ ar: edit_profile: basic_information: معلومات أساسية other: أخرى - safety_and_privacy: الأمان والخصوصية errors: '400': الطلب الذي قدمته غير صالح أو أنّ شكله غير سليم. '403': ليس لك الصلاحيات الكافية لعرض هذه الصفحة. diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 4bcbd554c7..598cb73325 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -528,8 +528,6 @@ ast: your_appeal_approved: Aprobóse la to apellación your_appeal_pending: Unviesti una apellación your_appeal_rejected: Refugóse la to apellación - edit_profile: - safety_and_privacy: Seguranza ya privacidá errors: '400': La solicitú qu'unviesti nun yera válida o yera incorreuta. '403': Nun tienes permisu pa ver esta páxina. diff --git a/config/locales/be.yml b/config/locales/be.yml index a48fa97e32..849299fc95 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1176,7 +1176,6 @@ be: basic_information: Асноўная інфармацыя hint_html: "Наладзьце тое, што людзі будуць бачыць у вашым профілі і побач з вашымі паведамленнямі. Іншыя людзі з большай верагоднасцю будуць сачыць і ўзаемадзейнічаць з вамі, калі ў вас ёсць запоўнены профіль і фота профілю." other: Іншае - safety_and_privacy: Бяспека і прыватнасць errors: '400': Запыт, які вы адправілі, памылковы або няправільны. '403': У вас няма дазволу на прагляд гэтай старонкі. diff --git a/config/locales/bg.yml b/config/locales/bg.yml index f16758498f..51860a261a 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1139,7 +1139,6 @@ bg: basic_information: Основна информация hint_html: "Персонализирайте какво хората виждат в обществения ви профил и до публикациите ви. Другите хора са по-склонни да ви последват и да взаимодействат с вас, когато имате попълнен профил и снимка на профила." other: Друго - safety_and_privacy: Безопасност и поверителност errors: '400': Подадохте невалидна или деформирана заявка. '403': Нямате позволение да разгледате тази страница. diff --git a/config/locales/ca.yml b/config/locales/ca.yml index a8d67e8e4d..ef66280cc7 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1140,7 +1140,6 @@ ca: basic_information: Informació bàsica hint_html: "Personalitza el que la gent veu en el teu perfil públic i a prop dels teus tuts.. És més probable que altres persones et segueixin i interaccionin amb tu quan tens emplenat el teu perfil i amb la teva imatge." other: Altres - safety_and_privacy: Seguretat i privacitat errors: '400': La sol·licitud que vas emetre no era vàlida o no era correcta. '403': No tens permís per a veure aquesta pàgina. diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 12873fafc1..c866d7e386 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1212,7 +1212,6 @@ cy: basic_information: Gwybodaeth Sylfaenol hint_html: "Addaswch yr hyn y mae pobl yn ei weld ar eich proffil cyhoeddus ac wrth ymyl eich postiadau. Mae pobl eraill yn fwy tebygol o'ch dilyn yn ôl a rhyngweithio â chi pan fydd gennych broffil wedi'i lenwi a llun proffil." other: Arall - safety_and_privacy: Diogelwch a phreifatrwydd errors: '400': Roedd y cais a gyflwynwyd gennych yn annilys neu wedi'i gamffurfio. '403': Nid oes gennych ganiatâd i weld y dudalen hon. diff --git a/config/locales/da.yml b/config/locales/da.yml index 0ffc3a51a6..db55defae7 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1140,7 +1140,6 @@ da: basic_information: Oplysninger hint_html: "Tilpas hvad folk ser på din offentlige profil og ved siden af dine indlæg. Andre personer vil mere sandsynligt følge dig tilbage og interagere med dig, når du har en udfyldt profil og et profilbillede." other: Andre - safety_and_privacy: Sikkerhed og privatliv errors: '400': Din indsendte anmodning er ugyldig eller fejlbehæftet. '403': Du har ikke tilladelse til at se denne side. diff --git a/config/locales/de.yml b/config/locales/de.yml index 8bbc33f3a1..79a1051c65 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1140,7 +1140,6 @@ de: basic_information: Allgemeine Informationen hint_html: "Bestimme, was andere auf deinem öffentlichen Profil und neben deinen Beiträgen sehen können. Wenn du ein Profilbild festlegst und dein Profil vervollständigst, werden andere eher mit dir interagieren und dir folgen." other: Andere - safety_and_privacy: Sicherheit und Datenschutz errors: '400': Die Anfrage, die du gestellt hast, war ungültig oder fehlerhaft. '403': Dir fehlt die Berechtigung, diese Seite aufzurufen. diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 9ae8e85409..f6fa1336c1 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1140,7 +1140,6 @@ en-GB: basic_information: Basic information hint_html: "Customise what people see on your public profile and next to your posts. Other people are more likely to follow you back and interact with you when you have a filled out profile and a profile picture." other: Other - safety_and_privacy: Safety and privacy errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. diff --git a/config/locales/en.yml b/config/locales/en.yml index 7c14b89b9b..4a052e0003 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1140,7 +1140,6 @@ en: basic_information: Basic information hint_html: "Customize what people see on your public profile and next to your posts. Other people are more likely to follow you back and interact with you when you have a filled out profile and a profile picture." other: Other - safety_and_privacy: Safety and privacy errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -1477,6 +1476,15 @@ en: other: Other posting_defaults: Posting defaults public_timelines: Public timelines + privacy: + hint_html: "Customize how you want your profile and your posts to be found. A variety of features in Mastodon can help you reach a wider audience when enabled. Take a moment to review these settings to make sure they fit your use case." + privacy: Privacy + privacy_hint_html: Control how much you want to disclose for the benefit of others. People discover interesting profiles and cool apps by browsing other people's follows and seeing which apps they post from, but you may prefer to keep it hidden. + reach: Reach + reach_hint_html: Control whether you want to be discovered and followed by new people. Do you want your posts to appear on the Explore screen? Do you want other people to see you in their follow recommendations? Do you want to accept all new followers automatically, or have granular control over each one? + search: Search + search_hint_html: Control how you want to be found. Do you want people to find you by what you've publicly posted about? Do you want people outside Mastodon to find your profile when searching the web? Please mind that total exclusion from all search engines cannot be guaranteed for public information. + title: Privacy and reach privacy_policy: title: Privacy Policy reactions: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 245771b8e6..d06f759101 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1135,7 +1135,6 @@ eo: edit_profile: basic_information: Baza informo other: Alia - safety_and_privacy: Sekureco kaj privateco errors: '400': La peto kiun vi sendis estas nevalida au malformas. '403': Vi ne havas la rajton por vidi ĉi tiun paĝon. diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index bcbde8f65b..7d730d1405 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1140,7 +1140,6 @@ es-AR: basic_information: Información básica hint_html: "Personalizá lo que la gente ve en tu perfil público y junto a tus publicaciones. Es más probable que otras personas te sigan e interactúen con vos cuando tengas un perfil completo y una foto de perfil." other: Otros - safety_and_privacy: Seguridad y privacidad errors: '400': La solicitud que enviaste no era válida o estaba corrompida. '403': No tenés permiso para ver esta página. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 127937141b..3271a32fcd 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1140,7 +1140,6 @@ es-MX: basic_information: Información básica hint_html: "Personaliza lo que la gente ve en tu perfil público junto a tus publicaciones. Es más probable que otras personas te sigan e interactúen contigo cuando completes tu perfil y agregues una foto." other: Otro - safety_and_privacy: Seguridad y privacidad errors: '400': La solicitud que has enviado no es valida o estaba malformada. '403': No tienes permiso para acceder a esta página. diff --git a/config/locales/es.yml b/config/locales/es.yml index 622bf17617..265b15f01c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1140,7 +1140,6 @@ es: basic_information: Información básica hint_html: "Personaliza lo que la gente ve en tu perfil público junto a tus publicaciones. Es más probable que otras personas te sigan e interactúen contigo cuando completas tu perfil y foto." other: Otros - safety_and_privacy: Seguridad y privacidad errors: '400': La solicitud que has enviado no es valida o estaba malformada. '403': No tienes permiso para acceder a esta página. diff --git a/config/locales/et.yml b/config/locales/et.yml index 9d9fa45c44..9869852ef7 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1140,7 +1140,6 @@ et: basic_information: Põhiinfo hint_html: "Kohanda, mida inimesed näevad su avalikul profiilil ja postituste kõrval. Inimesed alustavad tõenäolisemalt sinu jälgimist ja interakteeruvad sinuga, kui sul on täidetud profiil ja profiilipilt." other: Muu - safety_and_privacy: Turvalisus ja privaatsus errors: '400': Esitatud päring oli vigane või valesti vormindatud. '403': Sul puudub õigus seda lehte vaadata. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index a1f27c6ab3..774f6b3277 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1140,7 +1140,6 @@ fi: basic_information: Perustiedot hint_html: "Mukauta mitä ihmiset näkevät julkisessa profiilissasi ja sinun julkaisujen vieressä. Ihmiset todennäköisesti seuraavat ja kirjoittavat sinulle, kun sinulla on täytetty profiili ja profiilikuva." other: Muu - safety_and_privacy: Turvallisuus ja yksityisyys errors: '400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti. '403': Sinulla ei ole lupaa nähdä tätä sivua. diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 872c258248..145d3972b6 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1140,7 +1140,6 @@ fo: basic_information: Grundleggjandi upplýsingar hint_html: "Tillaga tað, sum fólk síggja á tínum almenna vanga og við síðna av tínum postum. Sannlíkindini fyri, at onnur fylgja tær og virka saman við tær eru størri, tá tú hevur fylt út vangan og eina vangamynd." other: Onnur - safety_and_privacy: Trygd og privatlív errors: '400': Umbønin, sum tú sendi inn, var ógildug ella hevði skeivt skap. '403': Tú hevur ikki loyvi at síggja hesa síðuna. diff --git a/config/locales/fr-QC.yml b/config/locales/fr-QC.yml index c7e69ca963..6603db0012 100644 --- a/config/locales/fr-QC.yml +++ b/config/locales/fr-QC.yml @@ -1140,7 +1140,6 @@ fr-QC: basic_information: Informations de base hint_html: "Personnalisez ce que les gens voient sur votre profil public et à côté de vos messages. Les autres personnes seront plus susceptibles de vous suivre et d’interagir avec vous lorsque vous avez un profil complet et une photo." other: Autre - safety_and_privacy: Sécurité et confidentialité errors: '400': La demande que vous avez soumise est invalide ou mal formée. '403': Vous n’avez pas accès à cette page. diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 61f6410460..c1d3775e18 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1140,7 +1140,6 @@ fr: basic_information: Informations de base hint_html: "Personnalisez ce que les gens voient sur votre profil public et à côté de vos messages. Les autres personnes seront plus susceptibles de vous suivre et d’interagir avec vous lorsque vous avez un profil complet et une photo." other: Autre - safety_and_privacy: Sécurité et confidentialité errors: '400': La demande que vous avez soumise est invalide ou mal formée. '403': Vous n’avez pas accès à cette page. diff --git a/config/locales/fy.yml b/config/locales/fy.yml index d3279a65bb..85cf23586e 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1140,7 +1140,6 @@ fy: basic_information: Algemiene ynformaasje hint_html: "Pas oan wat minsken op jo iepenbiere profyl en njonken jo berjochten sjogge. Oare minsken sille jo earder folgje en mei jo kommunisearje wannear’t jo profyl ynfolle is en jo in profylfoto hawwe." other: Oars - safety_and_privacy: Feilichheid en privacy errors: '400': De oanfraach dy’t jo yntsjinne hawwe wie ûnjildich of fout. '403': Jo hawwe gjin tastimming om dizze side te besjen. diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 4dff8629b0..9be86a20e2 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1176,7 +1176,6 @@ gd: basic_information: Fiosrachadh bunasach hint_html: "Gnàthaich na chithear air a’ phròifil phoblach agad is ri taobh nam postaichean agad. Bidh càch nas buailtiche do leantainn agus conaltradh leat nuair a bhios tu air a’ phròifil agad a lìonadh agus dealbh rithe." other: Eile - safety_and_privacy: Sàbhailteachd is prìobhaideachd errors: '400': Cha robh an t-iarrtas a chuir thu a-null dligheach no bha droch-chruth air. '403': Chan eil cead agad gus an duilleag seo a shealltainn. diff --git a/config/locales/gl.yml b/config/locales/gl.yml index f3a4647cf5..0e23b2dd6f 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1140,7 +1140,6 @@ gl: basic_information: Información básica hint_html: "Personaliza o que van ver no teu perfil público e ao lado das túas publicacións. As outras persoas estarán máis animadas a seguirte e interactuar contigo se engades algún dato sobre ti así como unha imaxe de perfil." other: Outros - safety_and_privacy: Seguridade e privacidade errors: '400': A solicitude que enviou non é válida ou ten formato incorrecto. '403': Non ten permiso para ver esta páxina. diff --git a/config/locales/he.yml b/config/locales/he.yml index ef33453351..404b9f2de5 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1176,7 +1176,6 @@ he: basic_information: מידע בסיסי hint_html: "התאמה אישית של מה שיראו אחרים בפרופיל הציבורי שלך וליד הודעותיך. אחרים עשויים יותר להחזיר עוקב וליצור אתך שיחה אם הפרופיל והתמונה יהיו מלאים." other: אחר - safety_and_privacy: בטחון ופרטיות errors: '400': הבקשה שהגשת לא תקינה. '403': חסרות לך הרשאות לצפיה בעמוד זה. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index b4cfde5903..7d15cb133c 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1140,7 +1140,6 @@ hu: basic_information: Általános információk hint_html: "Tedd egyedivé, mi látnak mások a profilodon és a bejegyzéseid mellett. Mások nagyobb eséllyel követnek vissza és lépnek veled kapcsolatba, ha van kitöltött profilod és profilképed." other: Egyéb - safety_and_privacy: Biztonság és személyes adatok errors: '400': A küldött kérés érvénytelen vagy hibás volt. '403': Nincs jogosultságod az oldal megtekintéséhez. diff --git a/config/locales/is.yml b/config/locales/is.yml index 346eeeb56d..183c32b54e 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1144,7 +1144,6 @@ is: basic_information: Grunnupplýsingar hint_html: "Sérsníddu hvað fólk sér á opinbera notandasniðinu þínu og næst færslunum þínum. Annað fólk er líklegra til að fylgjast með þér og eiga í samskiptum við þig ef þú fyllir út notandasniðið og setur auðkennismynd." other: Annað - safety_and_privacy: Öryggi og friðhelgi errors: '400': Beiðnin sem þú sendir er ógild eða rangt uppsett. '403': Þú hefur ekki heimildir til að skoða þessari síðu. diff --git a/config/locales/it.yml b/config/locales/it.yml index 950e5eca31..5a4e00cbb6 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1142,7 +1142,6 @@ it: basic_information: Informazioni di base hint_html: "Personalizza ciò che le persone vedono sul tuo profilo pubblico e accanto ai tuoi post. È più probabile che altre persone ti seguano e interagiscano con te quando hai un profilo compilato e un'immagine del profilo." other: Altro - safety_and_privacy: Sicurezza e privacy errors: '400': La richiesta che hai inviato non è valida o non è corretta. '403': Non sei autorizzato a visualizzare questa pagina. diff --git a/config/locales/ja.yml b/config/locales/ja.yml index e56e131e79..c47a1a4a66 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1122,7 +1122,6 @@ ja: basic_information: 基本情報 hint_html: "アカウントのトップページや投稿の隣に表示される公開情報です。プロフィールとアイコンを設定することで、ほかのユーザーは親しみやすく、またフォローしやすくなります。" other: その他 - safety_and_privacy: 安全とプライバシー errors: '400': 送信されたリクエストは無効であるか、または不正なフォーマットです。 '403': このページを表示する権限がありません。 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index b784dad25c..c12e4dcf31 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1124,7 +1124,6 @@ ko: basic_information: 기본 정보 hint_html: "내 공개 프로필과 게시물 옆에 보이는 부분을 꾸미세요. 다른 사람들은 프로필 내용과 사진이 채워진 계정과 더 상호작용하고 팔로우를 하고 싶어합니다." other: 기타 - safety_and_privacy: 안전과 개인정보 errors: '400': 제출한 요청이 올바르지 않습니다. '403': 이 페이지를 표시할 권한이 없습니다. diff --git a/config/locales/my.yml b/config/locales/my.yml index 2ce63d2725..8eef41b369 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1122,7 +1122,6 @@ my: basic_information: အခြေခံသတင်းအချက်အလက် hint_html: "သင်၏ အများမြင်ပရိုဖိုင်နှင့် သင့်ပို့စ်များဘေးရှိ တွေ့မြင်ရသည့်အရာကို စိတ်ကြိုက်ပြင်ဆင်ပါ။ သင့်တွင် ပရိုဖိုင်နှင့် ပရိုဖိုင်ပုံတစ်ခု ဖြည့်သွင်းထားပါက အခြားသူများအနေဖြင့် သင်နှင့် အပြန်အလှန် တုံ့ပြန်နိုင်ခြေပိုများပါသည်။" other: အခြား - safety_and_privacy: ဘေးကင်းရေးနှင့် လျှို့ဝှက်ရေး errors: '400': သင်တင်ပြသော တောင်းဆိုချက်မှာ မမှန်ကန်ပါ သို့မဟုတ် ပုံစံမမှန်ပါ။ '403': ဤစာမျက်နှာကြည့်ရှုရန် သင့်တွင် ခွင့်ပြုချက်မရှိပါ။ diff --git a/config/locales/nl.yml b/config/locales/nl.yml index ab3bcfac61..ca7eedb95d 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1140,7 +1140,6 @@ nl: basic_information: Algemene informatie hint_html: "Pas aan wat mensen op jouw openbare profiel en naast je berichten zien. Andere mensen zullen je eerder volgen en met je communiceren wanneer je profiel is ingevuld en je een profielfoto hebt." other: Overige - safety_and_privacy: Veiligheid en privacy errors: '400': De aanvraag die je hebt ingediend was ongeldig of foutief. '403': Jij hebt geen toestemming om deze pagina te bekijken. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 5c81e83976..401cbad05c 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1140,7 +1140,6 @@ nn: basic_information: Grunnleggande informasjon hint_html: "Tilpass kva folk ser på den offentlege profilen din og ved sida av innlegga dine. Andre vil i større grad fylgja og samhandla med deg når du har eit profilbilete og har fyllt ut profilen din." other: Anna - safety_and_privacy: Sikkerheit og personvern errors: '400': Søknaden du sende var ugyldig eller sett opp feil. '403': Du har ikkje løyve til å sjå denne sida. diff --git a/config/locales/no.yml b/config/locales/no.yml index 6a0bdca071..fc8f75ce7e 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1140,7 +1140,6 @@ basic_information: Grunnleggende informasjon hint_html: "Tilpass hva folk ser på din offentlige profil og ved siden av dine innlegg. Det er mer sannsynlig at andre mennesker følger deg tilbake og samhandler med deg når du har fylt ut en profil og et profilbilde." other: Annet - safety_and_privacy: Sikkerhet og personvern errors: '400': Forespørselen du sendte inn var ugyldig eller feil. '403': Du har ikke tillatelse til å vise denne siden. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index c1b34ee966..62ec21294e 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1176,7 +1176,6 @@ pl: basic_information: Podstawowe informacje hint_html: "Dostosuj to, co ludzie widzą na Twoim profilu publicznym i obok Twoich wpisów. Inne osoby są bardziej skłonne obserwować Cię i wchodzić z Tobą w interakcje, gdy masz wypełniony profil i zdjęcie profilowe." other: Inne - safety_and_privacy: Bezpieczeństwo i prywatność errors: '400': Wysłane zgłoszenie jest nieprawidłowe lub uszkodzone. '403': Nie masz uprawnień, aby wyświetlić tę stronę. diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index d47b946272..7e088dd397 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1139,7 +1139,6 @@ pt-BR: basic_information: Informações básicas hint_html: "Personalize o que as pessoas veem no seu perfil público e ao lado de suas publicações. É mais provável que outras pessoas o sigam de volta e interajam com você quando você tiver um perfil preenchido e uma foto de perfil." other: Outro - safety_and_privacy: Segurança e privacidade errors: '400': A solicitação enviada é inválida ou incorreta. '403': Você não tem permissão para ver esta página. diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 4357d30e62..40cbc6bf9e 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1140,7 +1140,6 @@ pt-PT: basic_information: Informação básica hint_html: "Personalize o que as pessoas veem no seu perfil público e junto das suas publicações. É mais provável que as outras pessoas o sigam de volta ou interajam consigo se tiver um perfil preenchido e uma imagem de perfil." other: Outro - safety_and_privacy: Segurança e privacidade errors: '400': O pedido que submeteu foi inválido ou mal formulado. '403': Não tens a permissão necessária para ver esta página. diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 9a97f9a3dc..e80d230973 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1176,7 +1176,6 @@ ru: basic_information: Основная информация hint_html: "Настройте то, что люди видят в вашем публичном профиле и рядом с вашими сообщениями. Другие люди с большей вероятностью подпишутся на Вас и будут взаимодействовать с вами, если у Вас заполнен профиль и добавлено изображение." other: Прочее - safety_and_privacy: Безопасность и приватность errors: '400': Ваш запрос был недействительным или неправильным. '403': У Вас нет доступа к просмотру этой страницы. diff --git a/config/locales/simple_form.an.yml b/config/locales/simple_form.an.yml index 51e7910786..f354e5ba82 100644 --- a/config/locales/simple_form.an.yml +++ b/config/locales/simple_form.an.yml @@ -37,13 +37,11 @@ an: current_password: Per razons de seguranza per favor ingrese la clau d'a cuenta actual current_username: Pa confirmar, per favor ingrese lo nombre d'usuario d'a cuenta actual digest: Solo ninviau dimpués d'un largo periodo d'inactividat y nomás si has recibiu mensaches personals entre la tuya ausencia - discoverable: Permite que la tuya cuenta sía descubierta per extranyos a traviés de recomendacions, tendencias y atras caracteristicas email: Se le ninviará un correu de confirmación header: PNG, GIF u JPG. Maximo %{size}. Será escalau a %{dimensions}px inbox_url: Copia la URL d'a pachina prencipal d'o relés que quiers utilizar irreversible: Las publicacions filtradas desapareixerán irreversiblement, mesmo si este filtro ye eliminau mas abance locale: L'idioma d'a interficie d'usuario, correus y notificacions push - locked: Requiere que manualment aprebes seguidores y las publicacions serán amostradas nomás a las tuyas seguidores password: Utilice a lo menos 8 caracters phrase: S'aplicará sin importar las mayusclas u los avisos de conteniu d'una publicación scopes: Qué APIs de l'aplicación tendrán acceso. Si trías l'aconsiga de libel pero alto, no amenestes triar las individuals. @@ -53,9 +51,6 @@ an: setting_display_media_default: Amagar conteniu multimedia marcau como sensible setting_display_media_hide_all: Siempre amagar tot lo conteniu multimedia setting_display_media_show_all: Amostrar siempre conteniu multimedia marcau como sensible - setting_hide_network: A quí sigues y quí te sigue no será amostrau en o tuyo perfil - setting_noindex: Afecta a lo tuyo perfil publico y pachinas d'estau - setting_show_application: L'aplicación que utiliza vusté pa publicar publicacions s'amostrará en a vista detallada d'as suyas publicacions setting_use_blurhash: Los gradientes se basan en as colors d'as imachens amagadas pero fendo borrosos los detalles setting_use_pending_items: Amagar nuevos estaus dezaga d'un clic en cuenta de desplazar automaticament lo feed whole_word: Quan la parola clau u frase ye nomás alfanumerica, nomás será aplicau si concuerda con tota la parola @@ -170,7 +165,6 @@ an: context: Filtrar contextos current_password: Clau actual data: Información - discoverable: Sucherir la cuenta a atros display_name: Nombre pa amostrar email: Adreza de correu electronico expires_in: Expirar dimpués de @@ -180,7 +174,6 @@ an: inbox_url: URL d'a dentrada de relés irreversible: Refusar en cuenta d'amagar locale: Idioma - locked: Fer privada esta cuenta max_uses: Máx. numero d'usos new_password: Nueva clau note: Biografía @@ -203,9 +196,7 @@ an: setting_display_media_show_all: Amostrar tot setting_expand_spoilers: Siempre expandir las publicacions marcadas con alvertencias de conteniu setting_hide_network: Amagar lo tuyo ret - setting_noindex: Excluyir-se d'o indexado de motors de busqueda setting_reduce_motion: Reducir lo movimiento d'as animacions - setting_show_application: Amostrar aplicación usada pa publicar publicacions setting_system_font_ui: Utilizar la tipografía per defecto d'o sistema setting_theme: Tema d'o puesto setting_trends: Amostrar las tendencias de hue diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 907221cdd7..db10b4b0b8 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -41,13 +41,11 @@ ar: current_password: لأسباب أمنية ، يرجى إدخال الكلمة السرية الخاصة بالحساب الحالي current_username: يرجى إدخال اسم المستخدم الخاص بالحساب الحالي قصد التأكيد digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة - discoverable: السماح للغرباء اكتشاف حسابك من خلال التوصيات والمتداولة وغيرها من الميزات email: سوف تتلقى رسالة إلكترونية للتأكيد header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الاستقبال للمُرحَّل irreversible: المنشورات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات - locked: يتطلب منك الموافقة يدويا على طلبات المتابعة password: يُنصح باستخدام 8 أحرف على الأقل phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الاستغناء عن الخَيار اليدوي. @@ -57,9 +55,6 @@ ar: setting_display_media_default: إخفاء الوسائط المُعيَّنة كحساسة setting_display_media_hide_all: إخفاء كافة الوسائط دائمًا setting_display_media_show_all: دائمًا عرض الوسائط المُعيَّنة كحساسة - setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك التعريفية - setting_noindex: ذلك يؤثر على صفحتك التعريفية وصفحات المنشورات - setting_show_application: سيُعرَض اسم التطبيق الذي تستخدمه عند النشر في العرض المفصّل لمنشوراتك setting_use_blurhash: الألوان التدرّجية مبنية على ألوان المرئيات المخفية ولكنها تحجب كافة التفاصيل setting_use_pending_items: إخفاء تحديثات الخط وراء نقرة بدلًا مِن التمرير التلقائي للتدفق username: يمكنك استخدام الأحرف والأرقام والسطور السفلية @@ -178,7 +173,6 @@ ar: context: تصفية السياقات current_password: كلمة السر الحالية data: البيانات - discoverable: القيام بإدراج هذا الحساب في قائمة دليل الحسابات display_name: الاسم المعروض email: عنوان البريد الإلكتروني expires_in: تنتهي مدة صلاحيته بعد @@ -188,7 +182,6 @@ ar: inbox_url: عنوان رابط صندوق المُرَحِّل irreversible: إسقاط بدلا من إخفائها locale: لغة الواجهة - locked: تجميد الحساب max_uses: عدد مرات استخدام الرابط new_password: كلمة السر الجديدة note: السيرة الذاتية @@ -211,9 +204,7 @@ ar: setting_display_media_show_all: عرض الكل setting_expand_spoilers: توسيع المنشورات التي تحتوي على تحذيرات عن المحتوى دائما setting_hide_network: إخفِ شبكتك - setting_noindex: الطلب مِن محركات البحث بعدم فهرسة معلوماتك وصفحتك التعريفية الشخصية setting_reduce_motion: تخفيض عدد الصور في الوسائط المتحركة - setting_show_application: اكشف اسم التطبيق المستخدَم لإرسال المنشورات setting_system_font_ui: استخدم الخطوط الافتراضية للنظام setting_theme: سمة الموقع setting_trends: اعرض ما يُتداوَل اليوم diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 3269605618..4ffc4bd166 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -18,11 +18,9 @@ ast: avatar: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px bot: Avisa a otres persones de qu'esta cuenta fai principalmente aiciones automatizaes ya de que ye posible que nun tean supervisaes digest: Namás s'unvia dempués d'un periodu llongu d'inactividá ya namás si recibiesti dalgún mensaxe personal demientres la to ausencia - discoverable: Permite que persones desconocíes descubran la to cuenta pente recomendaciones, tendencies ya otres funciones header: Ficheros PNG, GIF o JPG de %{size} como muncho. La semeya va redimensionase a %{dimensions} px irreversible: Los artículos peñeraos desapaecen de forma irreversible, magar que la peñera se quite dempués locale: La llingua de la interfaz, los mensaxes per corréu electrónicu ya los avisos push - locked: Controla manualmente quién pue siguite pente l'aprobación de les solicitúes de siguimientu password: Usa polo menos 8 caráuteres setting_aggregate_reblogs: Nun amuesa los artículos compartíos nuevos que xá se compartieren de recién (namás afeuta a los artículos compartíos d'agora) setting_always_send_emails: Los avisos nun se suelen unviar per corréu electrónicu si uses activamente Mastodon @@ -30,9 +28,6 @@ ast: setting_display_media_default: Anubrilu cuando se marque como sensible setting_display_media_hide_all: Anubrilu siempres setting_display_media_show_all: Amosalu siempres - setting_hide_network: Les persones que sigas ya les que te sigan nun van apaecer nel to perfil - setting_noindex: Afeuta al perfil públicu ya a les páxines de los artículos - setting_show_application: L'aplicación qu'uses pa espublizar apaez na vista detallada de los tos artículos setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia anubríu mas desenfonca los detalles featured_tag: name: 'Equí tán dalgunes de les etiquetes qu''usesti apocayá:' @@ -91,7 +86,6 @@ ast: confirm_password: Confirmación de la contraseña current_password: Contraseña actual data: Datos - discoverable: Suxerir esta cuenta a otres persones display_name: Nome visible email: Direición de corréu electrónicu expires_in: Caduca dempués de @@ -99,7 +93,6 @@ ast: header: Semeya de la testera irreversible: Escartar en cuentes d'anubrir locale: Llingua de la interfaz - locked: Riquir solicitúes de siguimientu max_uses: Númberu máximu d'usos new_password: Contraseña nueva note: Biografía @@ -119,9 +112,7 @@ ast: setting_display_media: Conteníu multimedia setting_expand_spoilers: Espander siempres los artículos marcaos con alvertencies de conteníu setting_hide_network: Anubrir les cuentes que sigas ya te sigan - setting_noindex: Arrenunciar a apaecer nos índices de los motores de busca setting_reduce_motion: Amenorgar el movimientu de les animaciones - setting_show_application: Dicir les aplicaciones que s'usen pa unviar artículos setting_system_font_ui: Usar la fonte predeterminada del sistema setting_theme: Estilu del sitiu setting_trends: Amosar les tendencies de güei diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index 3298745c4c..1f8279fbca 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -41,13 +41,11 @@ be: current_password: У мэтах бяспекі, калі ласка, увядзіце пароль бягучага ўліковага запісу current_username: Каб пацвердзіць, увядзіце, калі ласка імя карыстальніка бягучага ўліковага запісу digest: Будзе даслана толькі пасля доўгага перыяду неактыўнасці і толькі калі вы атрымалі асабістыя паведамленні падчас вашай адсутнасці - discoverable: Дазволіць незнаёмым людзям знаходзіць ваш уліковы запіс праз рэкамендацыі, трэнды і іншыя функцыі email: Пацвярджэнне будзе выслана па электроннай пошце header: PNG, GIF ці JPG. Не больш за %{size}. Будзе сціснуты да памеру %{dimensions}} пікселяў inbox_url: Капіраваць URL са старонкі рэтранслятара, якім вы хочаце карыстацца irreversible: Адфільтраваныя пасты прападуць незваротна, нават калі фільтр потым будзе выдалены locale: Мова карыстальніцкага інтэрфейсу, электронных паведамленняў і апавяшчэнняў - locked: Уручную кантралюйце, хто можа быць вашым падпісантам, ухваляючы запросы на падпіску password: Не менш за 8 сімвалаў phrase: Параўнанне адбудзецца нягледзячы на рэгістр тэксту і папярэджанні аб змесціве допісу scopes: Якімі API праграм будзе дазволена карыстацца. Калі вы абярэце найвышэйшы ўзровень, не трэба абіраць асобныя. @@ -57,9 +55,6 @@ be: setting_display_media_default: Хаваць медыя пазначаныя як далікатныя setting_display_media_hide_all: Заўсёды хаваць медыя setting_display_media_show_all: Заўсёды паказваць медыя - setting_hide_network: Вашы падпіскі і вашы падпісчыкі будуць нябачны ў вашым профілі - setting_noindex: Уплывае на бачнасць старонкі вашага профілю і вашых допісаў - setting_show_application: Праграма, праз якую вы ствараеце допісы, будзе паказвацца ў падрабязнасцях пра допісы setting_use_blurhash: Градыенты заснаваны на колерах схаваных выяў, але размываюць дэталі setting_use_pending_items: Схаваць абнаўленні стужкі за клікам замест аўтаматычнага пракручвання стужкі username: Вы можаце выкарыстоўваць літары, лічбы і падкрэсліванне @@ -178,7 +173,6 @@ be: context: Фільтр кантэкстаў current_password: Бягучы пароль data: Даныя - discoverable: Рэкамендаваць уліковы запіс іншым карыстальнікам display_name: Адлюстраванае імя email: Адрас электроннай пошты expires_in: Заканчваецца пасля @@ -188,7 +182,6 @@ be: inbox_url: URL паштовай скрыні-рэтранслятара irreversible: Выдаляць, а не хаваць locale: Мова інтэрфейсу - locked: Зрабіць уліковы запіс закрытым max_uses: Максімальная колькасць выкарыстанняў new_password: Новы пароль note: Пра сябе @@ -211,9 +204,7 @@ be: setting_display_media_show_all: Паказаць усё setting_expand_spoilers: Заўжды разгортваць допісы з папярэджаннем аб змесціве setting_hide_network: Схаваць вашы сувязі - setting_noindex: Адмовіцца ад індэксавання пашуковымі рухавікамі setting_reduce_motion: Памяншэнне руху ў анімацыях - setting_show_application: Паказваць праграмы, праз якія дасылаюцца допісы setting_system_font_ui: Выкарыстоўваць прадвызначаны сістэмны шрыфт setting_theme: Тэма сайта setting_trends: Паказваць трэнды дня diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 6b319e2721..560031e41f 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -41,13 +41,11 @@ bg: current_password: От съображения за сигурност, въведете паролата на текущия акаунт current_username: Въведете потребителското име на текущия профил, за да потвърдите digest: Изпраща се само след дълъг период на бездействие и само ако сте получили лични съобщения във ваше отсъствие - discoverable: Позволяване на странници да откриват вашия акаунт чрез препоръки, нашумели и други неща email: Ще ви се изпрати имейл за потвърждение header: PNG, GIF или JPG. До най-много %{size}. Ще се смали до %{dimensions} пиксела inbox_url: Копирайте URL адреса от заглавната страница на предаващия сървър, който искате да използвате irreversible: Филтрираните публикации ще изчезнат безвъзвратно, дори филтърът да бъде премахнат по-късно locale: Езикът на потребителския интерфейс, известиятата по имейл и насочените известия - locked: Ръчно управляване кой може да ви последва, одобрявайки заявките за последване password: Използвайте поне 8 символа phrase: Ще съвпадне без значение дали са главни или малки букви, или ако е предупреждение към публикация scopes: Указва до кои API има достъп приложението. Ако изберете диапазон от най-високо ниво, няма нужда да избирате индивидуални. @@ -57,9 +55,6 @@ bg: setting_display_media_default: Скриване на мултимедия отбелязана като деликатна setting_display_media_hide_all: Винаги скриване на мултимедията setting_display_media_show_all: Винаги показване на мултимедията - setting_hide_network: В профила ви ще бъде скрито кой може да последвате и кой може да ви последва - setting_noindex: Влияе на вашите обществен профил и страници с публикации - setting_show_application: Приложението, което ползвате за публикуване, ще се показва в подробностите на публикацията ви setting_use_blurhash: Преливането е въз основа на цветовете на скритите визуализации, но се замъгляват подробностите setting_use_pending_items: Да се показват обновявания на часовата ос само след щракване вместо автоматично превъртане на инфоканала username: Може да ползвате букви, цифри и долни черти @@ -178,7 +173,6 @@ bg: context: Прецеждане на контекста current_password: Текуща парола data: Данни - discoverable: Предложете акаунта на други display_name: Показвано име email: Адрес на имейла expires_in: Изтича след @@ -188,7 +182,6 @@ bg: inbox_url: URL адрес за входящи съобщения на предаващия сървър irreversible: Премахване, вместо скриване locale: Език на интерфейса - locked: Направи акаунта поверителен max_uses: Макс брой употреби new_password: Нова парола note: Биогр. @@ -211,9 +204,7 @@ bg: setting_display_media_show_all: Показване на всичко setting_expand_spoilers: Винаги разширяване на публикации, отбелязани с предупреждения за съдържание setting_hide_network: Скриване на социалния ви свързан граф - setting_noindex: Отказвам се от индексирането от търсачки setting_reduce_motion: Обездвижване на анимациите - setting_show_application: Разкриване на приложението, изпращащо публикации setting_system_font_ui: Употреба на стандартния шрифт на системата setting_theme: Тема на сайта setting_trends: Показване на днешното налагащо се diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 279ad9cb81..a80fe5a19b 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -41,13 +41,11 @@ ca: current_password: Per motius de seguretat, introduïu la contrasenya del compte actual current_username: Per a confirmar, entreu el nom d'usuari del compte actual digest: Només s'envia després d'un llarg període d'inactivitat i només si has rebut algun missatge personal durant la teva absència - discoverable: Permet que el teu compte sigui descobert per desconeguts a través de recomanacions, etiquetes i altres característiques email: Se t'enviarà un correu electrònic de confirmació header: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px inbox_url: Copia l'enllaç de la pàgina principal del relay que vols usar irreversible: Els tuts filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard locale: L'idioma de la interfície d’usuari, els correus i les notificacions push - locked: Controla manualment qui et pot seguir, aprovant sol·licituds password: Utilitza com a mínim 8 caràcters phrase: Es combinarà independentment del format en el text o l'avís de contingut del tut scopes: API permeses per a accedir a l'aplicació. Si selecciones un àmbit de nivell superior, no cal que en seleccionis un d'individual. @@ -57,9 +55,6 @@ ca: setting_display_media_default: Amaga el contingut gràfic marcat com a sensible setting_display_media_hide_all: Oculta sempre tot el contingut multimèdia setting_display_media_show_all: Mostra sempre el contingut gràfic - setting_hide_network: Qui segueixes i els que et segueixen no es mostraran en el teu perfil - setting_noindex: Afecta el teu perfil públic i les pàgines d'estat - setting_show_application: L'aplicació que fas servir per a publicar es mostrarà a la vista detallada dels teus tuts setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però n'enfosqueixen els detalls setting_use_pending_items: Amaga les actualitzacions de la línia de temps després de fer un clic, en lloc de desplaçar-les automàticament username: Pots emprar lletres, números i subratllats @@ -178,7 +173,6 @@ ca: context: Filtre els contextos current_password: Contrasenya actual data: Informació - discoverable: Mostra aquest compte en el directori de perfils display_name: Nom visible email: Adreça de correu electrònic expires_in: Expira després @@ -188,7 +182,6 @@ ca: inbox_url: Enllaç de la safata d'entrada del relay irreversible: Cau en lloc d'ocultar locale: Idioma de la interfície - locked: Requereix sol·licituds de seguiment max_uses: Nombre màxim d'usos new_password: Contrasenya nova note: Biografia @@ -211,9 +204,7 @@ ca: setting_display_media_show_all: Mostra-ho tot setting_expand_spoilers: Desplega sempre els tuts marcats amb advertències de contingut setting_hide_network: Amaga la teva xarxa - setting_noindex: Desactiva la indexació dels motors de cerca setting_reduce_motion: Redueix el moviment de les animacions - setting_show_application: Revela l'aplicació utilitzada per enviar tuts setting_system_font_ui: Usa la lletra predeterminada del sistema setting_theme: Tema del lloc setting_trends: Mostra les tendències d'avui diff --git a/config/locales/simple_form.ckb.yml b/config/locales/simple_form.ckb.yml index 0d129dd702..a6110e2034 100644 --- a/config/locales/simple_form.ckb.yml +++ b/config/locales/simple_form.ckb.yml @@ -36,7 +36,6 @@ ckb: inbox_url: نیشانەی پەڕەی سەرەکی ئەو رێڵە کە هەرەکتە بەکاریببەیت ڕوونووس دەکات irreversible: توتە فلتەرکراوەکە بە شێوەیەکی نەگەڕاو فرەدەدرێن، تەنانەت ئەگەر فلتەردواتر لاببرێت locale: زمانی ڕووکاری بەکارهێنەر، ئیمەیلەکان و ئاگانامەکان - locked: خۆت بڕیار بدە کێ دەتوانێت شوێنت بکەوێت بە وەرگتنی داوای شوێنکەوتن password: لایەنی کەم 8 نووسە بەکار بهێنە phrase: سەربەخۆ لە بچکۆلی و گەورەیی پیتەکان، لەگەڵ دەقی ئەسڵی یان ئاگانامەکانی ناوەرۆکی توتەکان هاوئاهەنگ دەکرێت scopes: APIـیەکانی بەرنامەنووسی کە ئەم ماڵپەڕە دەستپێگەیشتنی لەگەڵیان هیە. ئەگەر بەرزترین ئاست هەڵبژێرن ئیتر نیاز بە بژاردەی ئاستی نزم نییە. @@ -45,9 +44,6 @@ ckb: setting_display_media_default: ئەو میدیایانە بشارەوە کە هەستیارن setting_display_media_hide_all: هەمیشە میدیا بشارەوە setting_display_media_show_all: هەمیشە میدیا نیشان بدە - setting_hide_network: شوێنکەوتوو و شوێنکەوتنەکانت لە پرۆفایلەکەت نیشان نادرێن - setting_noindex: کاردەکاتە سەر پرۆفایل و لاپەڕە گشتیەکانت - setting_show_application: بەرنامەیەک کە بە یارمەتیت توت دەکەیت، لە دیمەنی وردی توتەکان پیشان دەدرێت setting_use_blurhash: سێبەرەکان لە سەر بنەمای ڕەنگەکانی بەکارهاتوو لە وێنە داشاراوەکان دروست دەبن بەڵام وردەزانیاری وێنە تێیدا ڕوون نییە setting_use_pending_items: لەجیاتی ئەوەی بە خۆکارانە کێشان هەبێت لە نووسراوەکان بە کرتەیەک بەڕۆژبوونی پێرستی نووسراوەکان بشارەوە whole_word: کاتێک کلیل‌وشە بریتییە لە ژمارە و پیت، تنەها کاتێک پەیدا دەبێت کە لەگەڵ گشتی وشە لە نێو دەقەکە هاوئاهەنگ بێت، نە تەنها لەگەڵ بەشێک لە وشە @@ -116,7 +112,6 @@ ckb: context: چوارچێوەی پاڵافتن current_password: تێپەروشەی ئێستا data: دراوه - discoverable: ئەم هەژمێرە لە پێرستی بژاردەی بەکارهێنەران نیشان بدە display_name: ناوی پیشاندان email: ناونیشانی ئیمەیڵ expires_in: بەسەردەچێت پاش @@ -125,7 +120,6 @@ ckb: inbox_url: بەستەری سندوقی گواستنەوەی irreversible: فرێدان لەجیاتی شاردنەوە locale: زمانی پەڕەی بەکارهێنەر - locked: داخستنی هەژمارە max_uses: زۆرترین ژمارەی بەکاربەرەکان new_password: تێپەروشەی نوێ note: دەربارەی ئیوە @@ -147,9 +141,7 @@ ckb: setting_display_media_show_all: هەموو نیشان بدە setting_expand_spoilers: هەمیشە ئەو توتانەی کە بە ئاگادارکردنەوەکانی ناوەڕۆکەوە نیشانەکراون، پیسان بدە setting_hide_network: شاردنەوەی تۆڕەکەت - setting_noindex: داوا لە مەکینەی گەڕان بۆ پیشاننەدان لە دەئەنجامی گەڕانەکان setting_reduce_motion: کەمکردنەوەی جوڵە لە ئەنیمەکان - setting_show_application: ئاشکراکردنی ئەپەکان بۆ ناردنی توتەکان setting_system_font_ui: فۆنتی بنەڕەتی سیستەم بەکاربهێنە setting_theme: ڕووکاری ماڵپەڕ setting_trends: پیشاندانی نووسراوە بەرچاوکراوەی ئەمڕۆ diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 105c67efbf..fd6f595e91 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -34,7 +34,6 @@ co: inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push - locked: Duvarete appruvà e dumande d’abbunamentu password: Ci volenu almenu 8 caratteri phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali. @@ -43,9 +42,6 @@ co: setting_display_media_default: Piattà i media marcati cum'è sensibili setting_display_media_hide_all: Sempre piattà tutti i media setting_display_media_show_all: Sempre affissà i media marcati cum'è sensibili - setting_hide_network: I vostri abbunati è abbunamenti ùn saranu micca mustrati nant’à u vostru prufile - setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti - setting_show_application: L'applicazione chì voi utilizate per mandà statuti sarà affissata indè a vista ditagliata di quelli setting_use_blurhash: I digradati blurhash sò basati nant'à i culori di u ritrattu piattatu ma senza i ditagli setting_use_pending_items: Clicchi per messe à ghjornu i statuti invece di fà sfilà a linea autumaticamente whole_word: Quandu a parolla o a frasa sana hè alfanumerica, sarà applicata solu s'ella currisponde à a parolla sana @@ -116,7 +112,6 @@ co: context: Cuntesti di u filtru current_password: Chjave d’accessu attuale data: Dati - discoverable: Arregistrà stu contu indè l'annuariu display_name: Nome pubblicu email: Indirizzu e-mail expires_in: Spira dopu à @@ -126,7 +121,6 @@ co: inbox_url: URL di l'inbox di u ripetitore irreversible: Sguassà invece di piattà locale: Lingua di l'interfaccia - locked: Privatizà u contu max_uses: Numeru massimale d’utilizazione new_password: Nova chjave d’accessu note: Descrizzione @@ -148,9 +142,7 @@ co: setting_display_media_show_all: Affissà tuttu setting_expand_spoilers: Sempre slibrà i statutu marcati cù un'avertimentu CW setting_hide_network: Piattà a vostra rete - setting_noindex: Dumandà à i motori di ricerca internet d’un pudè micca esse truvatu·a cusì setting_reduce_motion: Fà chì l’animazione vanu più pianu - setting_show_application: Indicà u nome di l'applicazione utilizata per mandà statuti setting_system_font_ui: Pulizza di caratteri di u sistemu setting_theme: Tema di u situ setting_trends: Vede e tendenze per oghji diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 8323ac15cb..dff9378098 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -41,13 +41,11 @@ cs: current_password: Z bezpečnostních důvodů prosím zadejte heslo současného účtu current_username: Potvrďte prosím tuto akci zadáním uživatelského jména aktuálního účtu digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste během své nepřítomnosti obdrželi osobní zprávy - discoverable: Umožnit, aby mohli váš účet objevit neznámí lidé pomocí doporučení, trendů a dalších funkcí email: Bude vám poslán potvrzovací e-mail header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít irreversible: Filtrované příspěvky nenávratně zmizí, i pokud bude filtr později odstraněn locale: Jazyk uživatelského rozhraní, e-mailů a push notifikací - locked: Kontrolujte, kdo vás může sledovat pomocí schvalování žádostí o sledování password: Použijte alespoň 8 znaků phrase: Shoda bude nalezena bez ohledu na velikost písmen v textu příspěvku či varování o obsahu scopes: Která API bude aplikace moct používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat jednotlivě. @@ -57,9 +55,6 @@ cs: setting_display_media_default: Skrývat média označená jako citlivá setting_display_media_hide_all: Vždy skrývat média setting_display_media_show_all: Vždy zobrazovat média - setting_hide_network: Koho sledujete a kdo sleduje vás bude na vašem profilu skryto - setting_noindex: Ovlivňuje váš veřejný profil a stránky příspěvků - setting_show_application: Aplikace, kterou používáte k odeslání příspěvků, bude zobrazena jejich detailním zobrazení setting_use_blurhash: Gradienty jsou založeny na barvách skryté grafiky, ale zakrývají jakékoliv detaily setting_use_pending_items: Aktualizovat časovou osu až po kliknutí namísto automatického rolování kanálu username: Pouze písmena, číslice a podtržítka @@ -178,7 +173,6 @@ cs: context: Kontexty filtrů current_password: Současné heslo data: Data - discoverable: Navrhovat účet ostatním display_name: Zobrazované jméno email: E-mailová adresa expires_in: Vypršet za @@ -188,7 +182,6 @@ cs: inbox_url: URL příchozí schránky mostu irreversible: Zahodit místo skrytí locale: Jazyk rozhraní - locked: Vynutit žádosti o sledování max_uses: Maximální počet použití new_password: Nové heslo note: O vás @@ -211,9 +204,7 @@ cs: setting_display_media_show_all: Zobrazit vše setting_expand_spoilers: Vždy rozbalit příspěvky označené varováními o obsahu setting_hide_network: Skrýt mou síť - setting_noindex: Neindexovat svůj profil vyhledávači setting_reduce_motion: Omezit pohyb v animacích - setting_show_application: Odhalit aplikaci použitou k odeslání příspěvků setting_system_font_ui: Použít výchozí písmo systému setting_theme: Vzhled stránky setting_trends: Zobrazit dnešní trendy diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 0c85f0667a..f5ae0c7060 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -41,13 +41,11 @@ cy: current_password: At ddibenion diogelwch, nodwch gyfrinair y cyfrif cyfredol current_username: I gadarnhau, nodwch enw defnyddiwr y cyfrif cyfredol digest: Ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb - discoverable: Caniatáu i'ch cyfrif gael ei ddarganfod gan ddieithriaid trwy argymhellion, pynciau llosg a nodweddion eraill email: Byddwch yn derbyn e-bost cadarnhau header: PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei israddio i %{dimensions}px inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio irreversible: Bydd postiadau wedi'u hidlo'n diflannu'n ddiwrthdro, hyd yn oed os caiff yr hidlydd ei dynnu'n ddiweddarach locale: Iaith y rhyngwyneb, e-byst a hysbysiadau gwthiadwy - locked: Mae hyn yn eich galluogi i reoli pwy sy'n gallu eich dilyn drwy gymeradwyo ceisiadau dilyn password: Defnyddiwch o leiaf 8 nod phrase: Caiff ei gyfateb heb ystyriaeth o briflythrennu mewn testun neu rhybudd ynghylch cynnwys postiad scopes: Pa APIs y bydd y rhaglen yn cael mynediad iddynt. Os dewiswch gwmpas lefel uchaf, nid oes angen i chi ddewis rhai unigol. @@ -57,9 +55,6 @@ cy: setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif setting_display_media_hide_all: Cuddio cyfryngau bob tro setting_display_media_show_all: Dangos cyfryngau bob tro - setting_hide_network: Ni fydd y pobl yr ydych chi'n eu dilyn a'ch dilynwyr yn ymddangos ar eich proffil - setting_noindex: Mae hyn yn effeithio ar eich proffil cyhoeddus a'ch tudalennau statws - setting_show_application: Bydd y cymhwysiad a ddefnyddiwch i bostio yn cael ei arddangos yng ngolwg fanwl eich postiadau setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maen nhw'n cuddio unrhyw fanylion setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio'n awtomatig username: Gallwch ddefnyddio nodau, rhifau a thanlinellau @@ -178,7 +173,6 @@ cy: context: Hidlo cyd-destunau current_password: Cyfrinair cyfredol data: Data - discoverable: Awgrymu cyfrif i eraill display_name: Enw dangos email: Cyfeiriad e-bost expires_in: Yn dod i ben ar ôl @@ -188,7 +182,6 @@ cy: inbox_url: URL y mewnflwch relái irreversible: Gollwng yn hytrach na chuddio locale: Iaith y rhyngwyneb - locked: Angen ceisiadau dilyn max_uses: Nifer y ddefnyddiau uchafswm new_password: Cyfrinair newydd note: Bywgraffiad @@ -211,9 +204,7 @@ cy: setting_display_media_show_all: Dangos popeth setting_expand_spoilers: Dangos postiadau wedi'u marcio â rhybudd cynnwys bob tro setting_hide_network: Cuddio eich graff cymdeithasol - setting_noindex: Eithrio rhag gael eich mynegeio gan beiriannau chwilio setting_reduce_motion: Lleihau mudiant mewn animeiddiadau - setting_show_application: Datgelu rhaglen a ddefnyddir i anfon postiadau setting_system_font_ui: Defnyddio ffont rhagosodedig y system setting_theme: Thema'r wefan setting_trends: Dangos pynciau llosg heddiw diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 4e8972cb96..d47b547230 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -41,13 +41,11 @@ da: current_password: Angiv af sikkerhedsårsager adgangskoden til den aktuelle konto current_username: For at bekræfte, angiv brugernavnet for den aktuelle konto digest: Sendes kun efter en lang inaktivitetsperiode, og kun hvis du har modtaget personlige beskeder under fraværet - discoverable: Tillad kontoen at blive fundet af fremmede via anbefalinger og øvrige funktioner email: En bekræftelses-e-mail fremsendes header: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px inbox_url: Kopiér URL'en fra forsiden af den videreformidler, der skal anvendes irreversible: Filtrerede indlæg forsvinder permanent, selv hvis filteret senere fjernes locale: Sprog til brug for brugerflade, e-mails og push-notifikationer - locked: Godkend manuelt følgeanmodninger for at styre, hvem der følger dig password: Brug mindst 8 tegn phrase: Matches uanset uanset brug af store/små bogstaver i teksten eller indholdsadvarsel for et indlæg scopes: De API'er, som applikationen vil kunne tilgå. Vælges en topniveaudstrækning, vil detailvalg være unødvendige. @@ -57,9 +55,6 @@ da: setting_display_media_default: Skjul medier med sensitiv-markering setting_display_media_hide_all: Skjul altid medier setting_display_media_show_all: Vis altid medier - setting_hide_network: Hvem du følger, og hvem som følger dig, skjules på din profil - setting_noindex: Påvirker din offentlige profil samt indlægssider - setting_show_application: Applikationen, hvormed der postes, vil fremgå af detailvisningen af dine indlæg setting_use_blurhash: Gradienter er baseret på de skjulte grafikelementers farver, men slører alle detaljer setting_use_pending_items: Skjul tidslinjeopdateringer bag et klik i stedet for brug af auto-feedrulning username: Bogstaver, cifre og understregningstegn kan benyttes @@ -178,7 +173,6 @@ da: context: Kontekstfiltrering current_password: Aktuel adgangskode data: Data - discoverable: Foreslå konto til andre display_name: Visningsnavn email: E-mailadresse expires_in: Udløb efter @@ -188,7 +182,6 @@ da: inbox_url: URL til videreformidlingsindbakken irreversible: Fjern istedet for skjul locale: Grænsefladesprog - locked: Kræv følgeanmodninger max_uses: Maks. antal afbenyttelser new_password: Ny adgangskode note: Biografi @@ -211,9 +204,7 @@ da: setting_display_media_show_all: Vis alle setting_expand_spoilers: Ekspandér altid indlæg markeret med indholdsadvarsler setting_hide_network: Skjul din sociale graf - setting_noindex: Fravælg søgemaskineindeksering setting_reduce_motion: Reducér animationsbevægelse - setting_show_application: Vis applikationen brugt til at poste indlæg setting_system_font_ui: Brug systemets standardskrifttype setting_theme: Webstedstema setting_trends: Vis dagens tendenser diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index ce4b81f30a..f89ed2d22c 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -41,13 +41,11 @@ de: current_password: Gib aus Sicherheitsgründen bitte das Passwort des aktuellen Kontos ein current_username: Um das zu bestätigen, gib den Profilnamen des aktuellen Kontos ein digest: Wenn du eine längere Zeit inaktiv bist oder du während deiner Abwesenheit in einer privaten Nachricht erwähnt worden bist - discoverable: Dein Konto kann von Fremden durch Empfehlungen, Trends und andere Funktionen entdeckt werden email: Du wirst eine E-Mail zur Verifizierung dieser E-Mail-Adresse erhalten header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert inbox_url: Kopiere die URL von der Startseite des gewünschten Relays irreversible: Bereinigte Beiträge verschwinden unwiderruflich für dich, auch dann, wenn dieser Filter zu einem späteren wieder entfernt wird locale: Die Sprache der Bedienoberfläche, E-Mails und Push-Benachrichtigungen - locked: Wer dir folgen möchte, muss um deine Erlaubnis bitten password: Verwende mindestens 8 Zeichen phrase: Wird unabhängig von der Groß- und Kleinschreibung im Text oder der Inhaltswarnung eines Beitrags abgeglichen scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen. @@ -57,9 +55,6 @@ de: setting_display_media_default: Medien mit Inhaltswarnung ausblenden setting_display_media_hide_all: Medien immer ausblenden setting_display_media_show_all: Medien mit Inhaltswarnung immer anzeigen - setting_hide_network: Wem du folgst und wer dir folgt, wird auf deinem Profil nicht angezeigt - setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge - setting_show_application: Die Anwendung die du nutzt wird in der detaillierten Ansicht deiner Beiträge angezeigt setting_use_blurhash: Der Farbverlauf basiert auf den Farben der ausgeblendeten Medien, verschleiert aber jegliche Details setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken, anstatt automatisch zu scrollen username: Du kannst Buchstaben, Zahlen und Unterstriche verwenden @@ -178,7 +173,6 @@ de: context: Nach Bereichen filtern current_password: Derzeitiges Passwort data: Daten - discoverable: Anderen dieses Konto empfehlen display_name: Anzeigename email: E-Mail-Adresse expires_in: Läuft ab @@ -188,7 +182,6 @@ de: inbox_url: Inbox-URL des Relais irreversible: Endgültig, nicht nur temporär ausblenden locale: Sprache des Webinterface - locked: Geschütztes Profil max_uses: Maximale Anzahl von Verwendungen new_password: Neues Passwort note: Biografie @@ -211,9 +204,7 @@ de: setting_display_media_show_all: Alle Medien anzeigen setting_expand_spoilers: Beiträge mit Inhaltswarnung immer ausklappen setting_hide_network: Follower und „Folge ich“ nicht anzeigen - setting_noindex: Suchmaschinen-Indexierung verhindern setting_reduce_motion: Bewegung in Animationen verringern - setting_show_application: Anwendung für das Veröffentlichen von Beiträgen offenlegen setting_system_font_ui: Standardschriftart des Browsers verwenden setting_theme: Design setting_trends: Heutige Trends anzeigen diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 339b4b5303..dc140a199f 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -37,13 +37,11 @@ el: current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου - discoverable: Επέτρεψε στον λογαριασμό σου να ανακαλυφθεί από αγνώστους μέσω συστάσεων, τάσεων και άλλων χαρακτηριστικών email: Θα σου σταλεί email επιβεβαίωσης header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push - locked: Απαιτεί να εγκρίνεις χειροκίνητα τους ακόλουθούς σου password: Χρησιμοποίησε τουλάχιστον 8 χαρακτήρες phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου μιας ανάρτησης scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και το καθένα ξεχωριστά. @@ -53,9 +51,6 @@ el: setting_display_media_default: Απόκρυψη ευαίσθητων πολυμέσων setting_display_media_hide_all: Μόνιμη απόκρυψη όλων των πολυμέσων setting_display_media_show_all: Πάντα εμφάνιση πολυμέσων - setting_hide_network: Δε θα εμφανίζεται στο προφίλ σου ποιους ακολουθείς και ποιοι σε ακολουθούν - setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις αναρτήσεις σου - setting_show_application: Η εφαρμογή που χρησιμοποιείς για να κάνεις τις αναρτήσεις σου θα εμφανίζεται στις αναλυτικές λεπτομέρειες των αναρτήσεων σου setting_use_blurhash: Οι χρωματισμοί βασίζονται στα χρώματα του κρυμμένου πολυμέσου αλλά θολώνουν τις λεπτομέρειες setting_use_pending_items: Εμφάνιση ενημερώσεων ροής μετά από κλικ αντί για αυτόματη κύλισή τους username: Μπορείς να χρησιμοποιήσεις γράμματα, αριθμούς και κάτω παύλες @@ -173,7 +168,6 @@ el: context: Πλαίσια φιλτραρίσματος current_password: Τρέχον συνθηματικό data: Δεδομένα - discoverable: Εμφάνιση αυτού του λογαριασμού στον κατάλογο display_name: Όνομα εμφάνισης email: Διεύθυνση email expires_in: Λήξη μετά από @@ -183,7 +177,6 @@ el: inbox_url: Το URL του inbox του ανταποκριτή (relay) irreversible: Απόρριψη αντί για κρύψιμο locale: Γλώσσα χρήσης - locked: Κλείδωμα λογαριασμού max_uses: Μέγιστος αριθμός χρήσεων new_password: Νέο συνθηματικό note: Βιογραφικό @@ -206,9 +199,7 @@ el: setting_display_media_show_all: Εμφάνιση όλων setting_expand_spoilers: Μόνιμη ανάπτυξη των τουτ με προειδοποίηση περιεχομένου setting_hide_network: Κρύψε τις διασυνδέσεις σου - setting_noindex: Επέλεξε να μην συμμετέχεις στα αποτελέσματα μηχανών αναζήτησης setting_reduce_motion: Μείωση κίνησης κινουμένων στοιχείων - setting_show_application: Αποκάλυψη εφαρμογής που χρησιμοποιήθηκε για την αποστολή των τουτ setting_system_font_ui: Χρήση της προεπιλεγμένης γραμματοσειράς του συστήματος setting_theme: Θέμα ιστότοπου setting_trends: Εμφάνιση σημερινών τάσεων diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 150ce85023..3aa52fde22 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -41,13 +41,11 @@ en-GB: current_password: For security purposes please enter the password of the current account current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence - discoverable: Allow your account to be discovered by strangers through recommendations, trends and other features email: You will be sent a confirmation e-mail header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px inbox_url: Copy the URL from the frontpage of the relay you want to use irreversible: Filtered posts will disappear irreversibly, even if filter is later removed locale: The language of the user interface, e-mails and push notifications - locked: Manually control who can follow you by approving follow requests password: Use at least 8 characters phrase: Will be matched regardless of casing in text or content warning of a post scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. @@ -57,9 +55,6 @@ en-GB: setting_display_media_default: Hide media marked as sensitive setting_display_media_hide_all: Always hide media setting_display_media_show_all: Always show media - setting_hide_network: Who you follow and who follows you will be hidden on your profile - setting_noindex: Affects your public profile and post pages - setting_show_application: The application you use to post will be displayed in the detailed view of your posts setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed username: You can use letters, numbers, and underscores @@ -178,7 +173,6 @@ en-GB: context: Filter contexts current_password: Current password data: Data - discoverable: Suggest account to others display_name: Display name email: E-mail address expires_in: Expire after @@ -188,7 +182,6 @@ en-GB: inbox_url: URL of the relay inbox irreversible: Drop instead of hide locale: Interface language - locked: Require follow requests max_uses: Max number of uses new_password: New password note: Bio @@ -211,9 +204,7 @@ en-GB: setting_display_media_show_all: Show all setting_expand_spoilers: Always expand posts marked with content warnings setting_hide_network: Hide your social graph - setting_noindex: Opt-out of search engine indexing setting_reduce_motion: Reduce motion in animations - setting_show_application: Disclose application used to send posts setting_system_font_ui: Use system's default font setting_theme: Site theme setting_trends: Show today's trends diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 4307d65e9b..e16b54efeb 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -3,8 +3,11 @@ en: simple_form: hints: account: + discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. + hide_collections: People will not be able to browse through your follows and followers. People that you follow will see that you follow them regardless. + locked: People will request to follow you and you will be able to either accept or reject new followers. note: 'You can @mention other people or #hashtags.' account_alias: acct: Specify the username@domain of the account you want to move from @@ -41,13 +44,11 @@ en: current_password: For security purposes please enter the password of the current account current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence - discoverable: Allow your account to be discovered by strangers through recommendations, trends and other features email: You will be sent a confirmation e-mail header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px inbox_url: Copy the URL from the frontpage of the relay you want to use irreversible: Filtered posts will disappear irreversibly, even if filter is later removed locale: The language of the user interface, e-mails and push notifications - locked: Manually control who can follow you by approving follow requests password: Use at least 8 characters phrase: Will be matched regardless of casing in text or content warning of a post scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. @@ -57,9 +58,6 @@ en: setting_display_media_default: Hide media marked as sensitive setting_display_media_hide_all: Always hide media setting_display_media_show_all: Always show media - setting_hide_network: Who you follow and who follows you will be hidden on your profile - setting_noindex: Affects your public profile and post pages - setting_show_application: The application you use to post will be displayed in the detailed view of your posts setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed username: You can use letters, numbers, and underscores @@ -121,6 +119,9 @@ en: sessions: otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' webauthn: If it's an USB key be sure to insert it and, if necessary, tap it. + settings: + indexable: Your profile page may appear in search results on Google, Bing, and others. + show_application: You will always be able to see which app published your post regardless. tag: name: You can only change the casing of the letters, for example, to make it more readable user: @@ -138,9 +139,12 @@ en: url: Where events will be sent to labels: account: + discoverable: Feature profile and posts in discovery algorithms fields: name: Label value: Content + hide_collections: Hide follows and followers from profile + locked: Manually review new followers account_alias: acct: Handle of the old account account_migration: @@ -178,7 +182,6 @@ en: context: Filter contexts current_password: Current password data: Data - discoverable: Suggest account to others display_name: Display name email: E-mail address expires_in: Expire after @@ -188,7 +191,6 @@ en: inbox_url: URL of the relay inbox irreversible: Drop instead of hide locale: Interface language - locked: Require follow requests max_uses: Max number of uses new_password: New password note: Bio @@ -211,9 +213,7 @@ en: setting_display_media_show_all: Show all setting_expand_spoilers: Always expand posts marked with content warnings setting_hide_network: Hide your social graph - setting_noindex: Opt-out of search engine indexing setting_reduce_motion: Reduce motion in animations - setting_show_application: Disclose application used to send posts setting_system_font_ui: Use system's default font setting_theme: Site theme setting_trends: Show today's trends @@ -292,6 +292,9 @@ en: trending_tag: New trend requires review rule: text: Rule + settings: + indexable: Include profile page in search engines + show_application: Display from which app you sent a post tag: listable: Allow this hashtag to appear in searches and suggestions name: Hashtag diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index f7adede7c7..434da61976 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -41,13 +41,11 @@ eo: current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto - discoverable: Permesi vian konton esti malkovrita de fremduloj per rekomendoj, tendencoj kaj aliaj funkcioj email: Vi ricevos konfirman retpoŝton header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj - locked: Vi devos aprobi ĉiun peton de sekvado mane password: Uzu almenaŭ 8 signojn phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn. @@ -57,9 +55,6 @@ eo: setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj setting_display_media_hide_all: Ĉiam kaŝi la plurmediojn setting_display_media_show_all: Ĉiam montri la plurmediojn - setting_hide_network: Tiuj kiujn vi sekvas, kaj tiuj kiuj sekvas vin estos kaŝitaj en via profilo - setting_noindex: Influas vian publikan profilon kaj afiŝajn paĝojn - setting_show_application: La aplikaĵo, kiun vi uzas por afiŝi, estos montrita en la detala vido de viaj afiŝoj setting_use_blurhash: Transirojn estas bazita sur la koloroj de la kaŝitaj aŭdovidaĵoj sed ne montri iun ajn detalon setting_use_pending_items: Kaŝi tempoliniajn ĝisdatigojn malantaŭ klako anstataŭ aŭtomate rulumi la fluon username: Vi povas uzi literojn, ciferojn kaj substrekojn @@ -178,7 +173,6 @@ eo: context: Filtri kuntekstojn current_password: Nuna pasvorto data: Datumoj - discoverable: Montri ĉi tiun konton en la profilujo display_name: Publika nomo email: Retadreso expires_in: Eksvalidiĝas post @@ -188,7 +182,6 @@ eo: inbox_url: URL de la ripetila enirkesto irreversible: Forĵeti anstataŭ kaŝi locale: Lingvo de la fasado - locked: Ŝlosi konton max_uses: Maksimuma nombro de uzoj new_password: Nova pasvorto note: Sinprezento @@ -211,9 +204,7 @@ eo: setting_display_media_show_all: Montri ĉiujn setting_expand_spoilers: Ĉiam malfoldas mesaĝojn markitajn per averto pri enhavo setting_hide_network: Kaŝi viajn sekvantojn kaj sekvatojn - setting_noindex: Ellistiĝi de retserĉila indeksado setting_reduce_motion: Redukti la movecojn de la animacioj - setting_show_application: Publikigi la aplikaĵon uzatan por sendi mesaĝojn setting_system_font_ui: Uzi la dekomencan tiparon de la sistemo setting_theme: Etoso de la retejo setting_trends: Montri hodiaŭajn furoraĵojn diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index ec00f5dd1d..7fcda1a733 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -41,13 +41,11 @@ es-AR: current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia - discoverable: Permití que tu cuenta sea descubierta por extraños a través de recomendaciones, tendencias y otras funciones email: Se te enviará un correo electrónico de confirmación header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' inbox_url: Copiá la dirección web desde la página principal del relé que querés usar irreversible: Los mensajes filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después locale: El idioma de la interface de usuario, correos electrónicos y notificaciones push - locked: Controlá manualmente quién puede seguirte al aprobar solicitudes de seguimiento password: Usá al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un mensaje scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionás el alcance de nivel más alto, no necesitás seleccionar las individuales. @@ -57,9 +55,6 @@ es-AR: setting_display_media_default: Ocultar medios marcados como sensibles setting_display_media_hide_all: Siempre ocultar todos los medios setting_display_media_show_all: Siempre mostrar todos los medios - setting_hide_network: Las cuentas que seguís y tus seguidores serán ocultados en tu perfil - setting_noindex: Afecta a tu perfil público y páginas de mensajes - setting_show_application: La aplicación que usás para enviar mensajes se mostrará en la vista detallada de tus mensajes setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo username: Podés usar letras, números y subguiones ("_") @@ -178,7 +173,6 @@ es-AR: context: Filtrar contextos current_password: Contraseña actual data: Datos - discoverable: Sugerir cuenta a otros display_name: Nombre para mostrar email: Dirección de correo electrónico expires_in: Vence después de @@ -188,7 +182,6 @@ es-AR: inbox_url: Dirección web de la bandeja de entrada del relé irreversible: Dejar en lugar de ocultar locale: Idioma de la interface - locked: Requerir solicitudes de seguimiento max_uses: Número máximo de usos new_password: Nueva contraseña note: Biografía @@ -211,9 +204,7 @@ es-AR: setting_display_media_show_all: Mostrar todo setting_expand_spoilers: Siempre expandir los mensajes marcados con advertencias de contenido setting_hide_network: Ocultá tu gráfica social - setting_noindex: Excluirse del indexado de motores de búsqueda setting_reduce_motion: Reducir el movimiento de las animaciones - setting_show_application: Mostrar aplicación usada para enviar mensajes setting_system_font_ui: Utilizar la tipografía predeterminada del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 7a1577cdb0..85e920f6fb 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -41,13 +41,11 @@ es-MX: current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia - discoverable: Permite que tu cuenta sea descubierta por extraños a través de recomendaciones, tendencias y otras características email: Se le enviará un correo de confirmación header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push - locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores password: Utilice al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. @@ -57,9 +55,6 @@ es-MX: setting_display_media_default: Ocultar contenido multimedia marcado como sensible setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible - setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil - setting_noindex: Afecta a tu perfil público y páginas de estado - setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed username: Puedes usar letras, números y guiones bajos @@ -178,7 +173,6 @@ es-MX: context: Filtrar contextos current_password: Contraseña actual data: Información - discoverable: Listar esta cuenta en el directorio display_name: Nombre para mostrar email: Dirección de correo electrónico expires_in: Expirar tras @@ -188,7 +182,6 @@ es-MX: inbox_url: URL de la entrada de relés irreversible: Dejar en lugar de ocultar locale: Idioma - locked: Hacer privada esta cuenta max_uses: Máx. número de usos new_password: Nueva contraseña note: Biografía @@ -211,9 +204,7 @@ es-MX: setting_display_media_show_all: Mostrar todo setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido setting_hide_network: Ocultar tu red - setting_noindex: Excluirse del indexado de motores de búsqueda setting_reduce_motion: Reducir el movimiento de las animaciones - setting_show_application: Mostrar aplicación usada para publicar toots setting_system_font_ui: Utilizar la tipografía por defecto del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 75f83b17cc..2b648ad901 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -41,13 +41,11 @@ es: current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia - discoverable: Permite que tu cuenta sea descubierta por extraños a través de recomendaciones, tendencias y otras características email: Se le enviará un correo de confirmación header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push - locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores password: Utilice al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. @@ -57,9 +55,6 @@ es: setting_display_media_default: Ocultar contenido multimedia marcado como sensible setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible - setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil - setting_noindex: Afecta a tu perfil público y a tus publicaciones - setting_show_application: La aplicación que utiliza usted para publicar publicaciones se mostrará en la vista detallada de sus publicaciones setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles setting_use_pending_items: Ocultar nuevas publicaciones detrás de un clic en lugar de desplazar automáticamente el feed username: Puedes usar letras, números y guiones bajos @@ -178,7 +173,6 @@ es: context: Filtrar contextos current_password: Contraseña actual data: Información - discoverable: Sugerir la cuenta a otros display_name: Nombre para mostrar email: Dirección de correo electrónico expires_in: Expirar tras @@ -188,7 +182,6 @@ es: inbox_url: URL de la entrada de relés irreversible: Rechazar en lugar de ocultar locale: Idioma - locked: Hacer privada esta cuenta max_uses: Máx. número de usos new_password: Nueva contraseña note: Biografía @@ -211,9 +204,7 @@ es: setting_display_media_show_all: Mostrar todo setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido setting_hide_network: Ocultar tu red - setting_noindex: Excluirse del indexado de motores de búsqueda setting_reduce_motion: Reducir el movimiento de las animaciones - setting_show_application: Mostrar aplicación usada para publicar publicaciones setting_system_font_ui: Utilizar la tipografía por defecto del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index ef375261fc..b4bb40c6c5 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -41,13 +41,11 @@ et: current_password: Sisesta turvalisuse huvides oma siinse konto salasõna current_username: Kinnitamiseks palun sisesta oma konto kasutajanimi digest: Saadetakse ainult pärast pikka tegevusetuse perioodi ja ainult siis, kui on saadetud otsesõnumeid - discoverable: Konto on leitav võhivõõraste jaoks soovituste ja trendide sirvimise teel vm sarnaste vahenditega email: Sulle saadetakse e-posti teel kinnituskiri header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini inbox_url: Kopeeri soovitud vahendaja avalehe URL irreversible: Filtreeritud postitused kaovad taastamatult, isegi kui filter on hiljem eemaldatud locale: Kasutajaliidese, e-kirjade ja tõuketeadete keel - locked: Nõuab käsitsi jälgijate kinnitamist password: Vajalik on vähemalt 8 märki phrase: Kattub olenemata postituse teksti suurtähtedest või sisuhoiatusest scopes: Milliseid API-sid see rakendus tohib kasutada. Kui valid kõrgeima taseme, ei pea üksikuid eraldi valima. @@ -57,9 +55,6 @@ et: setting_display_media_default: Peida tundlikuks märgitud meedia setting_display_media_hide_all: Alati peida kõik meedia setting_display_media_show_all: Alati näita tundlikuks märgistatud meedia - setting_hide_network: Profiilil ei kuvata, keda sa jälgid ja kes sind jälgib - setting_noindex: Mõjutab avalikku profiili ja postituste lehekülgi - setting_show_application: Postitamiseks kasutatud rakenduse infot kuvatakse postituse üksikasjavaates setting_use_blurhash: Värvid põhinevad peidetud visuaalidel, kuid hägustavad igasuguseid detaile setting_use_pending_items: Voo automaatse kerimise asemel peida ajajoone uuendused kliki taha username: Võid kasutada ladina tähti, numbreid ja allkriipsu @@ -178,7 +173,6 @@ et: context: Filtreeri kontekste current_password: Kehtiv salasõna data: Andmed - discoverable: Lisa see konto kataloogi display_name: Kuvanimi email: E-posti aadress expires_in: Aegu pärast @@ -188,7 +182,6 @@ et: inbox_url: Vahendaja sisendkausta URL irreversible: Kustuta selle asemel, et peita locale: Kasutajaliidese keel - locked: Lukusta konto max_uses: Maksimum kasutajate arv new_password: Uus salasõna note: Elulugu @@ -211,9 +204,7 @@ et: setting_display_media_show_all: Kuva kõik setting_expand_spoilers: Alati näita tundlikuks märgitud postituste sisu setting_hide_network: Peida oma võrk - setting_noindex: Keeldu otsingumootorite indekseerimistest setting_reduce_motion: Vähenda animatsioonides liikumist - setting_show_application: Avalikusta postituste tegemisel kasutatud rakendus setting_system_font_ui: Kasuta süsteemi vaikefonti setting_theme: Saidi teema setting_trends: Näita tänaseid trende diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index 5ab8ab612d..2fc73ac172 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -37,13 +37,11 @@ eu: current_password: Segurtasunagatik sartu uneko kontuaren pasahitza current_username: Berresteko sartu uneko kontuaren erabiltzaile-izena digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu, besterik ez - discoverable: Baimendu zure kontua ezezagunek aurkitu ahal izatea gomendio, joera eta beste ezaugarrien bidez email: Baieztapen e-mail bat bidaliko zaizu header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa irreversible: Iragazitako tootak betirako galduko dira, geroago iragazkia kentzen baduzu ere locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza - locked: Jarraitzaileak eskuz onartu behar dituzu password: Erabili 8 karaktere gutxienez phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar. @@ -53,9 +51,6 @@ eu: setting_display_media_default: Ezkutatu hunkigarri gisa markatutako multimedia setting_display_media_hide_all: Ezkutatu multimedia guztia beti setting_display_media_show_all: Erakutsi beti hunkigarri gisa markatutako multimedia - setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean - setting_noindex: Zure profil publiko eta tooten orrietan eragina du - setting_show_application: Tootak bidaltzeko erabiltzen duzun aplikazioa zure tooten ikuspegi xehetsuan bistaratuko da setting_use_blurhash: Gradienteak ezkutatutakoaren koloreetan oinarritzen dira, baina xehetasunak ezkutatzen dituzte setting_use_pending_items: Ezkutatu denbora-lerroko eguneraketak klik baten atzean jarioa automatikoki korritu ordez username: Hizkiak, zenbakiak eta azpimarrak erabil ditzakezu @@ -173,7 +168,6 @@ eu: context: Iragazkiaren testuinguruak current_password: Oraingo pasahitza data: Datuak - discoverable: Zerrendatu kontu hau direktorioan display_name: Pantaila-izena email: E-mail helbidea expires_in: Iraungitzea @@ -183,7 +177,6 @@ eu: inbox_url: Errelearen sarrera ontziaren URLa irreversible: Baztertu ezkutatu ordez locale: Interfazearen hizkuntza - locked: Giltzapetu kontua max_uses: Gehieneko erabiltzaile kopurua new_password: Pasahitz berria note: Biografia @@ -206,9 +199,7 @@ eu: setting_display_media_show_all: Erakutsi guztia setting_expand_spoilers: Hedatu beti edukia abisua (CW) duten tootak setting_hide_network: Ezkutatu zure sarea - setting_noindex: Atera bilaketa motorraren indexaziotik setting_reduce_motion: Murriztu animazioen mugimenduak - setting_show_application: Utzi agerian tootak bidaltzeko erabilitako aplikazioa setting_system_font_ui: Erabili sistemako tipografia lehenetsia setting_theme: Gunearen azala setting_trends: Erakutsi gaurko joerak diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 0d6cf3e565..ca382f387e 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -37,13 +37,11 @@ fa: current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد - discoverable: اجازه دهید حساب‌تان از طریق پیشنهادها، پرطرفدارها و سایر قابلیت‌ها، توسط افراد غریبه قابل کشف باشد email: به شما ایمیل تأییدی فرستاده خواهد شد header: یکی از قالب‌های PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد inbox_url: نشانی صفحهٔ اصلی رله‌ای را که می‌خواهید به کار ببرید کپی کنید irreversible: فرسته‌های پالوده به طور برگشت‌ناپذیری ناپدید می‌شوند، حتا اگر بعدها پالایه برداشته شود locale: زبان واسط کاربری، رایانامه‌ها و آگاهی‌های ارسالی - locked: باید پیگیران تازه را خودتان تأیید کنید password: دست‌کم باید ۸ نویسه داشته باشد phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای فرسته‌ها مقایسه می‌شود scopes: واسط‌های برنامه‌نویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطح‌های پایینی ندارید. @@ -53,9 +51,6 @@ fa: setting_display_media_default: تصویرهایی را که به عنوان حساس علامت زده شده‌اند پنهان کن setting_display_media_hide_all: همیشه همهٔ عکس‌ها و ویدیوها را پنهان کن setting_display_media_show_all: همیشه تصویرهایی را که به عنوان حساس علامت زده شده‌اند را نشان بده - setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی می‌گیرید روی نمایهٔ شما دیده نخواهد شد - setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشته‌های شما تأثیر می‌گذارد - setting_show_application: برنامه‌ای که به کمک آن فرسته می‌زنید، در جزئیات فرسته شما نمایش خواهد یافت setting_use_blurhash: سایه‌ها بر اساس رنگ‌های به‌کاررفته در تصویر پنهان‌شده ساخته می‌شوند ولی جزئیات تصویر در آن‌ها آشکار نیست setting_use_pending_items: به جای پیش‌رفتن خودکار در فهرست، به‌روزرسانی فهرست نوشته‌ها را پشت یک کلیک پنهان کن username: تنها می‌توانید از حروف، اعداد، و زیرخط استفاده کنید @@ -147,7 +142,6 @@ fa: context: زمینه‌های پالایش current_password: گذرواژه کنونی data: داده‌ها - discoverable: پیشنهاد حساب به دیگران display_name: نمایش به نام email: نشانی ایمیل expires_in: تاریخ انقضا @@ -157,7 +151,6 @@ fa: inbox_url: نشانی صندوق ورودی رله irreversible: به جای پنهان‌سازی، حذف کن locale: زبان محیط کاربری - locked: خصوصی‌کردن حساب max_uses: بیشترین شمار استفاده new_password: گذرواژه تازه note: دربارهٔ شما @@ -180,9 +173,7 @@ fa: setting_display_media_show_all: نمایش همه setting_expand_spoilers: همیشه فرسته‌هایی را که هشدار محتوا دارند کامل نشان بده setting_hide_network: نهفتن شبکهٔ ارتباطی - setting_noindex: درخواست از موتورهای جستجوگر برای ظاهر نشدن در نتایج جستجو setting_reduce_motion: کاستن از حرکت در پویانمایی‌ها - setting_show_application: برنامه‌ای که به کار می‌برید آشکار شود setting_system_font_ui: به‌کاربردن قلم پیش‌فرض سیستم setting_theme: تم سایت setting_trends: نشان‌دادن موضوعات پرطرفدار روز diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 23db63dee1..72d29c6114 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -41,13 +41,11 @@ fi: current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana - discoverable: Salli tuntemattomien löytää tilisi suositusten, trendien ja muiden ominaisuuksien kautta email: Sinulle lähetetään vahvistussähköposti header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli - locked: Sinun täytyy hyväksyä seuraajat manuaalisesti password: Käytä vähintään 8 merkkiä phrase: Täytetään riippumatta julkaisun kirjainkoon tai sisällön varoituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. @@ -57,9 +55,6 @@ fi: setting_display_media_default: Piilota arkaluonteiseksi merkitty media setting_display_media_hide_all: Piilota aina kaikki media setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media - setting_hide_network: Ketä seuraat ja kuka seuraa sinua, piilotetaan profiiliisi - setting_noindex: Vaikuttaa julkiseen profiiliisi ja tilasivuihisi - setting_show_application: Viestittelyyn käyttämäsi sovellus näkyy viestiesi yksityiskohtaisessa näkymässä setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja @@ -178,7 +173,6 @@ fi: context: Suodata konteksteista current_password: Nykyinen salasana data: Tiedot - discoverable: Listaa tämä tili hakemistoon display_name: Nimimerkki email: Sähköpostiosoite expires_in: Vanhenee @@ -188,7 +182,6 @@ fi: inbox_url: Välittäjän postilaatikon URL-osoite irreversible: Pudota piilottamisen sijaan locale: Kieli - locked: Lukitse tili max_uses: Käyttökertoja enintään new_password: Uusi salasana note: Kuvaus @@ -211,9 +204,7 @@ fi: setting_display_media_show_all: Näytä kaikki setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt viestit setting_hide_network: Piilota verkkosi - setting_noindex: Jättäydy hakukoneindeksoinnin ulkopuolelle setting_reduce_motion: Vähennä animaatioiden liikettä - setting_show_application: Näytä sovellus mistä lähetät viestejä setting_system_font_ui: Käytä järjestelmän oletusfonttia setting_theme: Sivuston teema setting_trends: Näytä päivän trendit diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index 27edf181bd..2e100e54e2 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -41,13 +41,11 @@ fo: current_password: Av trygdarávum vinarliga les inn loyniorðið hjá verandi kontu current_username: Fyri at vátta, vinarliga les inn brúkaranavnið á verandi kontu digest: Einans sent eftir eitt langt tíðarskeið við óvirkni og einans um tú hevur móttikið persónlig boð meðan tú var burtur - discoverable: Loyv kontu tíni at verða funnin av fremmandum gjøgnum viðmæli, rák og aðrar hentleikar email: Tú fær sendandi ein váttanarteldupost header: PNG, GIF ella JPG. Ikki størri enn %{size}. Verður minkað til %{dimensions}px inbox_url: Avrita URL'in frá forsíðuni hjá reiðlagnum, sum tú vilt brúka irreversible: Filtreraðir postar blíva burtur med alla, eisini sjálvt um filtrið seinni verður strikað locale: Málið, sum verður brúkt í brúkaramarkamótinum, teldupostum og skumpiboðum - locked: Stýr hvør kann fylgja tær við at góðtaka ella vraka umbønir um at fylgja password: Skriva minst 8 tekin phrase: Fer at samsvara óanæsð um tað er skrivað við lítlum ella stórum ella um postar hava innihaldsávaringar scopes: Hvørji API nýtsluskipanin fær atgongd til. Velur tú eitt vav á hægsta stigi, so er ikki neyðugt at velja tey einstøku. @@ -57,9 +55,6 @@ fo: setting_display_media_default: Fjal miðlafílur, sum eru merktar sum viðkvæmar setting_display_media_hide_all: Fjal altíð miðlafílur setting_display_media_show_all: Vís altíð miðlafílur - setting_hide_network: Tey, ið tú fylgir og tey, ið fylgja tær, verða ikki víst á tínum vanga - setting_noindex: Ávirkar almenna vangan og síður við postum hjá tær - setting_show_application: Nýtsluskipanin, sum tú brúkar at posta við, verður víst í nágreinligu vísingini av postum tínum setting_use_blurhash: Gradientar eru grundaðir á litirnar av fjaldu myndunum, men grugga allar smálutir setting_use_pending_items: Fjal tíðarlinjudagføringar aftan fyri eitt klikk heldur enn at skrulla tilføringina sjálvvirkandi username: Tú kanst brúka bókstavir, tøl og botnstrikur @@ -178,7 +173,6 @@ fo: context: Filtrera kontekstir current_password: Núverandi loyniorð data: Dáta - discoverable: Skjót kontuna upp fyri øðrum display_name: Navn, sum skal vísast email: Teldubrævabústaður expires_in: Endar aftan á @@ -188,7 +182,6 @@ fo: inbox_url: URL'ur hjá innbakkanum hjá reiðlagnum irreversible: Strika heldur enn at fjala locale: Markamótsmál - locked: Krev umbønir um at fylgja max_uses: Ikki brúka oftari enn new_password: Nýtt loyniorð note: Ævilýsing @@ -211,9 +204,7 @@ fo: setting_display_media_show_all: Vís alt setting_expand_spoilers: Víðka altíð postar, sum eru merktir við innihaldsávaringum setting_hide_network: Fjal sosiala grafin hjá tær - setting_noindex: Frábið tær indeksering á leitimaskinum setting_reduce_motion: Minka um rørslu í teknimyndum - setting_show_application: Avdúka serskipan, sum verður brúkt til at senda postar setting_system_font_ui: Brúka vanliga skriftaslagið hjá skipanini setting_theme: Uppsetingareyðkenni setting_trends: Vís dagsins rák diff --git a/config/locales/simple_form.fr-QC.yml b/config/locales/simple_form.fr-QC.yml index ba81508365..ea81a0229d 100644 --- a/config/locales/simple_form.fr-QC.yml +++ b/config/locales/simple_form.fr-QC.yml @@ -41,13 +41,11 @@ fr-QC: current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte current_username: Pour confirmer, veuillez saisir le nom d'utilisateur de ce compte digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence - discoverable: Permet à votre compte d’être découvert par des inconnus par le biais de recommandations, de tendances et autres fonctionnalités email: Vous recevrez un courriel de confirmation header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relai que vous souhaitez utiliser irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications - locked: Nécessite que vous approuviez manuellement chaque abonné·e password: Utilisez au moins 8 caractères phrase: Sera filtré peu importe la casse ou l’avertissement de contenu du message scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez une permission générale, vous n’avez pas besoin de sélectionner les permissions plus précises. @@ -57,9 +55,6 @@ fr-QC: setting_display_media_default: Masquer les médias marqués comme sensibles setting_display_media_hide_all: Toujours masquer les médias setting_display_media_show_all: Toujours afficher les médias - setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil - setting_noindex: Affecte votre profil public ainsi que vos messages - setting_show_application: Le nom de l’application que vous utilisez pour publier sera affichée dans la vue détaillée de vos messages setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas @@ -178,7 +173,6 @@ fr-QC: context: Contextes du filtre current_password: Mot de passe actuel data: Données - discoverable: Suggérer ce compte aux autres display_name: Nom public email: Adresse courriel expires_in: Expire après @@ -188,7 +182,6 @@ fr-QC: inbox_url: URL de la boîte de relais irreversible: Supprimer plutôt que masquer locale: Langue de l’interface - locked: Verrouiller le compte max_uses: Nombre maximum d’utilisations new_password: Nouveau mot de passe note: Présentation @@ -211,9 +204,7 @@ fr-QC: setting_display_media_show_all: Montrer tout setting_expand_spoilers: Toujours déplier les messages marqués d’un avertissement de contenu setting_hide_network: Cacher votre réseau - setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles setting_reduce_motion: Réduire la vitesse des animations - setting_show_application: Dévoiler l’application utilisée pour envoyer les messages setting_system_font_ui: Utiliser la police par défaut du système setting_theme: Thème du site setting_trends: Afficher les tendances du jour diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 45494e8748..d4915c3be2 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -41,13 +41,11 @@ fr: current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte current_username: Pour confirmer, veuillez saisir l’identifiant de ce compte digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence - discoverable: Permet à votre compte d’être découvert par des inconnus par le biais de recommandations, de tendances et autres fonctionnalités email: Vous recevrez un courriel de confirmation header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser irreversible: Les messages filtrés disparaîtront irrévocablement, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications - locked: Nécessite que vous approuviez manuellement chaque abonné·e password: Utilisez au moins 8 caractères phrase: Sera filtré peu importe la casse ou l’avertissement de contenu du message scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez une permission générale, vous n’avez pas besoin de sélectionner les permissions plus précises. @@ -57,9 +55,6 @@ fr: setting_display_media_default: Masquer les médias marqués comme sensibles setting_display_media_hide_all: Toujours masquer les médias setting_display_media_show_all: Toujours afficher les médias - setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil - setting_noindex: Affecte votre profil public ainsi que vos messages - setting_show_application: Le nom de l’application que vous utilisez pour publier sera affichée dans la vue détaillée de vos messages setting_use_blurhash: Les dégradés sont basés sur les couleurs des images cachées mais n’en montrent pas les détails setting_use_pending_items: Cacher les mises à jour des fils d’actualités derrière un clic, au lieu de les afficher automatiquement username: Vous pouvez utiliser des lettres, des chiffres, et des tirets bas @@ -178,7 +173,6 @@ fr: context: Contextes du filtre current_password: Mot de passe actuel data: Données - discoverable: Suggérer ce compte aux autres display_name: Nom public email: Adresse de courriel expires_in: Expire après @@ -188,7 +182,6 @@ fr: inbox_url: URL de la boîte de relais irreversible: Supprimer plutôt que masquer locale: Langue de l’interface - locked: Verrouiller le compte max_uses: Nombre maximum d’utilisations new_password: Nouveau mot de passe note: Présentation @@ -211,9 +204,7 @@ fr: setting_display_media_show_all: Montrer tout setting_expand_spoilers: Toujours déplier les messages marqués d’un avertissement de contenu setting_hide_network: Cacher votre réseau - setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles setting_reduce_motion: Réduire la vitesse des animations - setting_show_application: Dévoiler l’application utilisée pour envoyer les messages setting_system_font_ui: Utiliser la police par défaut du système setting_theme: Thème du site setting_trends: Afficher les tendances du jour diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index ea50164bcb..023203b557 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -41,13 +41,11 @@ fy: current_password: Fier foar feilichheidsredenen it wachtwurd fan jo aktuele account yn current_username: Fier ta befêstiging de brûkersnamme fan jo aktuele account yn digest: Wurdt allinnich nei in lange perioade fan ynaktiviteit ferstjoerd en allinnich wannear’t jo wylst jo ôfwêzigens persoanlike berjochten ûntfongen hawwe - discoverable: Tastean dat jo account te finen is foar ûnbekenden, fia oanrekommandaasjes, trends en op oare manieren email: Jo krije in befêstigings-e-mailberjocht header: PNG, GIF of JPG. Maksimaal %{size}. Wurdt weromskeald nei %{dimensions}px inbox_url: Kopiearje de URL fan de foarside fan de relayserver dy’t jo brûke wolle irreversible: Filtere berjochten ferdwine definityf, sels as it filter letter fuortsmiten wurdt locale: De taal fan de brûkersomjouwing, e-mailberjochten en pushmeldingen - locked: Troch it goedkarren fan folgers hânmjittich bepale wa’t jo folgje mei password: Brûk op syn minst 8 tekens phrase: Komt oerien nettsjinsteande haad-/lytse letters of in ynhâldswarskôging scopes: Ta hokker API’s hat de tapassing tagong. Wannear’t jo in tastimming fan it boppeste nivo kieze, hoege jo gjin yndividuele tastimmingen mear te kiezen. @@ -57,9 +55,6 @@ fy: setting_display_media_default: As gefoelich markearre media ferstopje setting_display_media_hide_all: Media altyd ferstopje setting_display_media_show_all: Media altyd toane - setting_hide_network: Wa’t jo folgje en wa’t jo folget wurdt net op jo profyl toand - setting_noindex: Hat ynfloed op jo iepenbiere profyl en siden mei berjochten - setting_show_application: De tapassing dy’t jo brûke om berjochten te pleatsen, wurdt yn de detaillearre werjefte fan it berjocht toand setting_use_blurhash: Dizige kleuroergongen binne basearre op de kleuren fan de ferstoppe media, wêrmei elk detail ferdwynt setting_use_pending_items: De tiidline wurdt bywurke troch op it oantal nije items te klikken, yn stee fan dat dizze automatysk bywurke wurdt username: Jo kinne letters, sifers en ûnderstreekjes brûke @@ -178,7 +173,6 @@ fy: context: Filterlokaasjes current_password: Aktueel wachtwurd data: Gegevens - discoverable: Dizze account oanrekommandearje litte en yn de brûkersgids toane display_name: Werjeftenamme email: E-mailadres expires_in: Ferrint nei @@ -188,7 +182,6 @@ fy: inbox_url: Relais-ynboks-URL irreversible: Fuortsmite yn stee fan ferstopje locale: Taal fan de brûkersomjouwing - locked: Folchfersyk fereaskje max_uses: Maksimaal tal kear te brûken new_password: Nije wachtwurd note: Bio @@ -211,9 +204,7 @@ fy: setting_display_media_show_all: Alles toane setting_expand_spoilers: Berjochten mei ynhâldswarskôgingen altyd útklappe setting_hide_network: Jo folgers en wa’t jo folget ferstopje - setting_noindex: Jo berjochten net troch sykmasinen yndeksearje litte setting_reduce_motion: Stadigere animaasjes - setting_show_application: Tapassing dy’t jo foar it ferstjoeren fan berjochten brûke toane setting_system_font_ui: Standertlettertype fan jo systeem brûke setting_theme: Websitetema setting_trends: Trends fan hjoed toane diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index ce7a87cf9e..ad7adc8f7c 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -41,13 +41,11 @@ gd: current_password: A chùm tèarainteachd, cuir a-steach facal-faire a’ chunntais làithrich current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh - discoverable: Ceadaich gun rùraich coigrich an cunntas agad le taic o mholaidhean, treandaichean is gleusan eile email: Thèid post-d dearbhaidh a chur thugad header: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px inbox_url: Dèan lethbhreac dhen URL o phrìomh-dhuilleag an ath-sheachadain a bu mhiann leat cleachdadh irreversible: Thèid postaichean criathraichte à sealladh gu buan fiù ’s ma bheir thu a’ chriathrag air falbh às dèidh làimhe locale: Cànan eadar-aghaidh a’ chleachdaiche, nam post-d ’s nam brathan putaidh - locked: Stiùirich cò dh’fhaodas ’gad leantainn le gabhail ri iarrtasan leantainn a làimh password: Cleachd co-dhiù 8 caractaran phrase: Thèid a mhaidseadh gun aire air litrichean mòra ’s beaga no air rabhadh susbainte puist scopes: Na APIan a dh’fhaodas an aplacaid inntrigeadh. Ma thaghas tu sgòp air ìre as àirde, cha leig thu leas sgòpaichean fa leth a thaghadh. @@ -57,9 +55,6 @@ gd: setting_display_media_default: Falaich meadhanan ris a bheil comharra gu bheil iad frionasach setting_display_media_hide_all: Falaich na meadhanan an-còmhnaidh setting_display_media_show_all: Seall na meadhanan an-còmhnaidh - setting_hide_network: Thèid cò a tha thu a’ leantainn ’s an luchd-leantainn agad fhèin a chur am falach air a’ phròifil agad - setting_noindex: Bheir seo buaidh air a’ phròifil phoblach ’s air duilleagan nam postaichean agad - setting_show_application: Chithear cò an aplacaid a chleachd thu airson post a sgrìobhadh ann an seallaidhean mionaideach nam postaichean agad setting_use_blurhash: Tha caiseadan stèidhichte air dathan nan nithean lèirsinneach a chaidh fhalach ach chan fhaicear am mion-fhiosrachadh setting_use_pending_items: Falaich ùrachaidhean na loidhne-ama air cùlaibh briogaidh seach a bhith a’ sgroladh nam postaichean gu fèin-obrachail username: Faodaidh tu litrichean, àireamhan is fo-loidhnichean a chleachdadh @@ -178,7 +173,6 @@ gd: context: Co-theacsaichean na criathraige current_password: Am facal-faire làithreach data: Dàta - discoverable: Mol an cunntas do chàch display_name: Ainm-taisbeanaidh email: Seòladh puist-d expires_in: Falbhaidh an ùine air às dèidh @@ -188,7 +182,6 @@ gd: inbox_url: URL bogsa a-steach an ath-sheachadain irreversible: Leig seachad seach falach locale: Cànan na h-eadar-aghaidh - locked: Iarr iarrtasan leantainn max_uses: An àireamh as motha de chleachdaidhean new_password: Facal-faire ùr note: Mu mo dhèidhinn @@ -211,9 +204,7 @@ gd: setting_display_media_show_all: Seall na h-uile setting_expand_spoilers: Leudaich postaichean ris a bheil rabhadh susbainte an-còmhnaidh setting_hide_network: Falaich an graf sòisealta agad - setting_noindex: Thoir air falbh an ro-aonta air inneacsadh le einnseanan-luirg setting_reduce_motion: Ìslich an gluasad sna beòthachaidhean - setting_show_application: Foillsich dè an aplacaid a chleachdas tu airson postaichean a chur setting_system_font_ui: Cleachd cruth-clò bunaiteach an t-siostaim setting_theme: Ùrlar na làraich setting_trends: Seall na treandaichean an-diugh diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 6ca24a2dcd..226f03186f 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -41,13 +41,11 @@ gl: current_password: Por razóns de seguridade, introduce o contrasinal da conta actual current_username: Para confirmar, introduce o nome de usuaria da conta actual digest: Enviar só tras un longo período de inactividade e só se recibiches algunha mensaxe directa na tua ausencia - discoverable: Permite que a túa conta poida ser descuberta por persoas descoñecidas a través de recomendacións, tendencias e outras ferramentas email: Ímosche enviar un correo de confirmación header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px inbox_url: Copiar o URL desde a páxina de inicio do repetidor que queres utilizar irreversible: As publicacións filtradas desaparecerán de xeito irreversible, incluso se despois se elimina o filtro locale: O idioma da interface de usuaria, correos e notificacións - locked: Xestionar manualmente quen pode seguirte aprobando as solicitudes de seguimento password: Utiliza 8 caracteres ao menos phrase: Concordará independentemente das maiúsculas ou avisos de contido na publicación scopes: A que APIs terá acceso a aplicación. Se escolles un ámbito de alto nivel, non precisas seleccionar elementos individuais. @@ -57,9 +55,6 @@ gl: setting_display_media_default: Ocultar medios marcados como sensibles setting_display_media_hide_all: Ocultar sempre os medios setting_display_media_show_all: Mostrar sempre os medios marcados como sensibles - setting_hide_network: Non se mostrará no teu perfil quen te segue e a quen estás a seguir - setting_noindex: Afecta ao teu perfil público e páxinas de publicación - setting_show_application: A aplicación que estás a utilizar para enviar publicacións mostrarase na vista detallada da publicación setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esvaecendo tódolos detalles setting_use_pending_items: Agochar actualizacións da cronoloxía tras un click no lugar de desprazar automáticamente os comentarios username: Podes usar letras, números e trazos baixos @@ -178,7 +173,6 @@ gl: context: Contextos do filtro current_password: Contrasinal actual data: Datos - discoverable: Suxerir esta conta a outras persoas display_name: Nome mostrado email: Enderezo de email expires_in: Caduca tras @@ -188,7 +182,6 @@ gl: inbox_url: URL da caixa de entrada do repetidor irreversible: Desbotar en lugar de agochar locale: Idioma da interface - locked: Requerir aprobar seguimento max_uses: Número máximo de usos new_password: Novo contrasinal note: Acerca de ti @@ -211,9 +204,7 @@ gl: setting_display_media_show_all: Mostrar todo setting_expand_spoilers: Despregar sempre as publicacións marcadas con avisos de contido setting_hide_network: Non mostrar contactos - setting_noindex: Pedir non aparecer nas buscas dos motores de busca setting_reduce_motion: Reducir o movemento nas animacións - setting_show_application: Mostrar a aplicación utilizada para publicar setting_system_font_ui: Utilizar a tipografía por defecto do sistema setting_theme: Decorado da instancia setting_trends: Mostrar as tendencias de hoxe diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 994f4bd5d4..c15661ad29 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -41,13 +41,11 @@ he: current_password: מסיבות אבטחה נא להזין את הסיסמא של החשבון הנוכחי current_username: על מנת לאשר, נא להכניס את שם המשתמש של החשבון הנוכחי digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך - discoverable: אשר/י לחשבונך להתגלות לזרים על ידי המלצות, נושאים חמים ושאר דרכים email: דוא"ל אישור יישלח אליך header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px inbox_url: נא להעתיק את הקישורית מדף הבית של הממסר בו תרצה/י להשתמש irreversible: הודעות מסוננות יעלמו באופן בלתי הפיך, אפילו אם מאוחר יותר יוסר המסנן locale: שפת ממשק המשתמש, הדוא"ל וההתראות בדחיפה - locked: מחייב אישור עוקבים באופן ידני. פרטיות ההודעות תהיה עוקבים-בלבד אלא אם יצוין אחרת password: נא להשתמש בלפחות 8 תוים phrase: התאמה תמצא ללא תלות באזהרת תוכן בהודעה scopes: לאיזה ממשק יורשה היישום לגשת. בבחירת תחום כללי, אין צורך לבחור ממשקים ספציפיים. @@ -57,9 +55,6 @@ he: setting_display_media_default: הסתרת מדיה המסומנת כרגישה setting_display_media_hide_all: הסתר מדיה תמיד setting_display_media_show_all: גלה מדיה תמיד - setting_hide_network: עוקבייך ונעקבייך יוסתרו בפרופילך - setting_noindex: משפיע על הפרופיל הציבורי שלך ועמודי ההודעות - setting_show_application: היישום בו נעשה שימוש כדי לחצרץ יופיע בתצוגה המפורטת של החצרוץ setting_use_blurhash: הגראדיינטים מבוססים על תוכן התמונה המוסתרת, אבל מסתירים את כל הפרטים setting_use_pending_items: הסתר עדכוני פיד מאחורי קליק במקום לגלול את הפיד אוטומטית username: ניתן להשתמש בספרות, אותיות לטיניות ומקף תחתון @@ -178,7 +173,6 @@ he: context: סינון לפי הקשר current_password: סיסמא נוכחית data: מידע - discoverable: הצע חשבון לאחרים display_name: שם להצגה email: כתובת דוא"ל expires_in: תפוגה לאחר @@ -188,7 +182,6 @@ he: inbox_url: קישורית לתיבת ממסר irreversible: הסרה במקום הסתרה locale: שפה - locked: הפוך חשבון לפרטי max_uses: מספר מרבי של שימושים new_password: סיסמא חדשה note: אודות @@ -211,9 +204,7 @@ he: setting_display_media_show_all: להציג הכול setting_expand_spoilers: להרחיב תמיד הודעות מסומנות באזהרת תוכן setting_hide_network: להחביא את הגרף החברתי שלך - setting_noindex: לבקש הסתרה ממנועי חיפוש setting_reduce_motion: הפחתת תנועה בהנפשות - setting_show_application: הצגת הישום ששימש לפרסום ההודעה setting_system_font_ui: להשתמש בגופן ברירת המחדל של המערכת setting_theme: ערכת העיצוב של האתר setting_trends: הצגת הנושאים החמים diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml index b45c2f3574..0f2896fe05 100644 --- a/config/locales/simple_form.hr.yml +++ b/config/locales/simple_form.hr.yml @@ -5,7 +5,6 @@ hr: defaults: avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px - locked: Zahtijeva ručno odobravanje pratitelja setting_display_media_default: Sakrij medijski sadržaj označen kao osjetljiv setting_display_media_hide_all: Uvijek sakrij medijski sadržaj setting_display_media_show_all: Uvijek prikaži medijski sadržaj @@ -24,7 +23,6 @@ hr: display_name: Prikazano ime email: Adresa e-pošte locale: Jezik sučelja - locked: Zaključaj račun new_password: Nova lozinka note: Biografija otp_attempt: Dvofaktorski kôd diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index c9680fd012..d214ea7a2f 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -41,13 +41,11 @@ hu: current_password: Biztonsági okok miatt kérlek, írd be a jelenlegi fiók jelszavát current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben - discoverable: Engedélyezés, hogy a fiókod idegenek által megtalálható legyen javaslatokon, trendeken és más funkciókon keresztül email: Kapsz egy megerősítő e-mailt header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét irreversible: A kiszűrt bejegyzések visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is locale: A felhasználói felület, e-mailek, push üzenetek nyelve - locked: Egyenként engedélyezned kell a követőidet password: Legalább 8 karakter phrase: Illeszkedni fog kis/nagybetű függetlenül, és tartalmi figyelmeztetések mögött is scopes: Mely API-kat érheti el az alkalmazás. Ha felső szintű hatáskört választasz, nem kell egyesével kiválasztanod az alatta lévőeket. @@ -57,9 +55,6 @@ hu: setting_display_media_default: Kényes tartalomnak jelölt média elrejtése setting_display_media_hide_all: Mindig minden média elrejtése setting_display_media_show_all: Mindig mutasd a szenzitív tartalomként jelölt médiát - setting_hide_network: Nem látszik majd a profilodon, kik követnek és te kiket követsz - setting_noindex: A nyilvános profilodra és a bejegyzéseidre vonatkozik - setting_show_application: A bejegyzések részletes nézetében látszani fog, milyen alkalmazást használtál a bejegyzés közzétételéhez setting_use_blurhash: A kihomályosítás az eredeti képből történik, de minden részletet elrejt setting_use_pending_items: Idővonal frissítése csak kattintásra automatikus görgetés helyett username: Betűk, számok és alávonások használhatók @@ -178,7 +173,6 @@ hu: context: Szűrés kontextusai current_password: Jelenlegi jelszó data: Adatok - discoverable: Fiók listázása a profilok adatbázisában display_name: Megjelenített név email: E-mail cím expires_in: Elévül @@ -188,7 +182,6 @@ hu: inbox_url: Relé inbox-hoz tartozó URL irreversible: Eldobás elrejtés helyett locale: Felhasználói felület nyelve - locked: Felhasználói fiók lezárása max_uses: Hányszor használható new_password: Új jelszó note: Bemutatkozás @@ -211,9 +204,7 @@ hu: setting_display_media_show_all: Mindent mutat setting_expand_spoilers: Tartalmi figyelmeztetéssel ellátott bejegyzések automatikus kinyitása setting_hide_network: Hálózatod elrejtése - setting_noindex: Megtiltom a keresőmotoroknak, hogy indexeljék a tartalmaimat setting_reduce_motion: Animációk mozgásának csökkentése - setting_show_application: Bejegyzések küldésére használt alkalmazás feltüntetése setting_system_font_ui: Rendszer betűtípusának használata setting_theme: Megjelenítési sablon setting_trends: Mai trend mutatása diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index 084c16863a..d2fab9e048 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -34,7 +34,6 @@ hy: inbox_url: Պատճէնիր URL այն շերտի դիմերեսից, որը ցանկանում ես օգտագործել irreversible: Զտուած գրառումները կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես locale: Ինտերֆեյսի լեզուն, էլ. նամակները եւ push ծանուցումները - locked: Անհրաժեշտ կը լինի ձեռքով հաստատել հետեւորդներին password: Օգտագործիր առնուազն 8 նիշ phrase: Կը համընկնի անկախ տեքստի ձեւից կամ զգուշացնող բովանդակութիւնից scopes: Որ API֊ին յաւելուածն ունի հասանելիութիւն։ Եթէ ընտրել ես բարձր մակարդակի դաշտ, ապա անհատական ընտրելու կարիք չկայ։ @@ -43,9 +42,6 @@ hy: setting_display_media_default: Թաքցնել կասկածելի բովանդակութիւնը setting_display_media_hide_all: Երբեք մեդիա ցոյց չտալ setting_display_media_show_all: Մեդիա միշտ ցոյց տալ - setting_hide_network: Ուրիշները չեն կարողանայ տեսնել ձեզ հետեւողներին եւ թե ում էք հետեւում դուք - setting_noindex: Ազդում է քո հրապարակային հաշուի եւ գրառումների էջի վրայ - setting_show_application: Գրառման մանրամասներում կերեւայ թէ որ ծրագրով ես հրապարակել այն setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն whole_word: Եթէ բանալի բառը կամ արտայայտութիւնը պարունակում է միայն այբբենական նիշեր եւ թուեր, ապա այն կիրառուելու է ամբողջ բառի հետ համընկնելու դէպքում միայն @@ -114,7 +110,6 @@ hy: context: Զտել կոնտեքստները current_password: Ներկայիս գաղտնաբառը data: Տուեալներ - discoverable: Աւելացնել հաշիւը հասցէագրքում display_name: Ցուցադրուող անուն email: Էլ․ հասցէ expires_in: Սպառուում է @@ -124,7 +119,6 @@ hy: inbox_url: Ներմուծման շերտի URL irreversible: Թաքցնելու փոխարէն ջնջել locale: Ինտերֆեյսի լեզու - locked: Փակել հաշիւը max_uses: Օգտագործման առաւելագոյն քանակ new_password: Նոր գաղտնաբառ note: Բիո @@ -146,9 +140,7 @@ hy: setting_display_media_show_all: Ցուցադրել բոլորը setting_expand_spoilers: Միշտ բացել բովանդակութեան զգուշացմամբ գրառումները setting_hide_network: Թաքցնել ցանցդ - setting_noindex: Խուսափել որոնողական համակարգերի ինդէքսաւորումից setting_reduce_motion: Կրճատել անիմացիաների շարժումը - setting_show_application: Բացայայտել գրառման համար օգտագործուած յաւելուածը setting_system_font_ui: Օգտագործել համակարգի լռելեայն տառատեսակը setting_theme: Կայքի թեման setting_trends: Ցուցադրել օրուայ թրենդները diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index ae99a256b4..51046ce9d4 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -35,13 +35,11 @@ id: current_password: Untuk tujuan keamanan mohon masukkan kata sandi akun ini current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda - discoverable: Izinkan akun Anda ditemukan orang lain lewat rekomendasi, tren, dan fitur lain email: Anda akan dikirimi email konfirmasi header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px inbox_url: Salin URL dari halaman depan relai yang ingin Anda pakai irreversible: Toot tersaring akan hilang permanen bahkan jika saringan dihapus kemudian locale: Bahasa antar muka pengguna, email, dan notifikasi dorong - locked: Anda harus menerima permintaan pengikut secara manual dan setting privasi postingan akan diubah khusus untuk pengikut password: Gunakan minimal 8 karakter phrase: Akan dicocokkan terlepas dari luaran dalam teks atau peringatan konten dari toot scopes: API mana yang diizinkan untuk diakses aplikasi. Jika Anda memilih cakupan level-atas, Anda tidak perlu memilih yang individu. @@ -51,9 +49,6 @@ id: setting_display_media_default: Sembunyikan media yang ditandai sebagai sensitif setting_display_media_hide_all: Selalu sembunyikan semua media setting_display_media_show_all: Selalu tampilkan media sensitif - setting_hide_network: Siapa yang Anda ikuti dan yang mengikuti Anda tak akan ditampilkan dalam profil - setting_noindex: Pengaruhi profil publik dan halaman status Anda - setting_show_application: Aplikasi yang Anda pakai untuk men-toot akan ditampilkan di tampilan detail toot setting_use_blurhash: Gradien didasarkan pada warna visual yang tersembunyi tetapi mengaburkan setiap detail setting_use_pending_items: Sembunyikan pembaruan linimasa di balik klik alih-alih bergulir secara otomatis whole_word: Ketika kata kunci/frasa hanya alfanumerik, maka itu hanya akan diterapkan jika cocok dengan semua kata @@ -166,7 +161,6 @@ id: context: Saring konteks current_password: Kata sandi sekarang data: Data - discoverable: Daftarkan akun ini di direktori display_name: Nama yang ditampilkan email: Alamat e-mail expires_in: Kedaluwarsa setelah @@ -176,7 +170,6 @@ id: inbox_url: URL kotak relai irreversible: Hapus alih-alih sembunyikan locale: Bahasa - locked: Buat akun menjadi pribadi max_uses: Jumlah maksimal penggunaan new_password: Password baru note: Bio @@ -199,9 +192,7 @@ id: setting_display_media_show_all: Tunjukkan semua setting_expand_spoilers: Selalu bentangkan kiriman yang bertanda peringatan konten setting_hide_network: Sembunyikan jaringan Anda - setting_noindex: Opt-out dari pengindeksan mesin pencari setting_reduce_motion: Kurangi gerakan animasi - setting_show_application: Singkap aplikasi yang dipakai utk kirim toot setting_system_font_ui: Gunakan fon bawaan sistem setting_theme: Tema situs setting_trends: Tampilkan tren hari ini diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 3291ba4cff..b21b86723c 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -35,13 +35,11 @@ io: current_password: Por sekuresorezoni, pozez pasvorto di ca konto current_username: Por konfirmar, pozez uzantonomo di ca konto digest: Nur sendesas pos longa neaktiveso e nur se vu ganis irga mesaji dum ke vu esas neprezenta - discoverable: Permisez vua konto deskovresar da nekonociti tra rekomendi, tendenci e altra traiti email: Vu sendesos konfirmretposto header: En la formato PNG, GIF o JPG. Til %{size}. Esos mikrigita a %{dimensions}px inbox_url: Kopiez URL de frontpagino de relayo quon vu volas uzar irreversible: Filtrita posti neinversigeble desaparos, mem se filtro efacesas pose locale: Linguo di uzantointervizajo, retposti e pulsavizi - locked: Tu devos aprobar omna demandi di sequado, e tua mesaji esos senchanje nur por tua sequanti. password: Uzes minime 8 litri phrase: Parigesos ne ye textosituaciono o konteneyoaverto di posto scopes: Quala API quon softwaro permisesas acesar. Se vu selektas alta skopo, vu ne mustas selektar individui. @@ -51,9 +49,6 @@ io: setting_display_media_default: Celez medii quo markizesis quale sentoza setting_display_media_hide_all: Sempre celez medii setting_display_media_show_all: Sempre montrez medii - setting_hide_network: Vua sequato e sequanto celesos che vua profilo - setting_noindex: Efektigar vua publika profilo e postopagini - setting_show_application: Softwaro quon vu uzar por postigar montresos che detala vidajo di vua posti setting_use_blurhash: Inklini esas segun kolori di celesis vidaji ma kovras irga detali setting_use_pending_items: Celez tempolineonovi dop kliktar e ne automatike movigar niuzeto whole_word: Kande klefvorto o fraz esas nur litera e nombra, ol nur aplikesos se ol parigesas la tota vorto @@ -164,7 +159,6 @@ io: context: Filtrez kuntexti current_password: Nuna pasvorto data: Datumi - discoverable: Sugestez konto a altra personi display_name: Publika nomo email: Retpost-adreso expires_in: Expiras pos @@ -174,7 +168,6 @@ io: inbox_url: URL di relayomesajbuxo irreversible: Deslevez e ne celez locale: Linguo - locked: Privatigar la konto max_uses: Maxima uzi new_password: Nova pasvorto note: Suprizento @@ -197,9 +190,7 @@ io: setting_display_media_show_all: Montrez omno setting_expand_spoilers: Sempre expansigez posti quo markizesis kun kontenajaverti setting_hide_network: Celez vua sociala grafiko - setting_noindex: Desjuntez trovmotorindexigo setting_reduce_motion: Diminutez moveso di animacii - setting_show_application: Montrez softwaro quo uzesis por sendar posti setting_system_font_ui: Uzez originala literfonto di sistemo setting_theme: Sittemo setting_trends: Montrez tendenco di hodie diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 63f6c436e0..f7b1e08d73 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -41,13 +41,11 @@ is: current_password: Í öryggisskyni skaltu setja inn lykilorðið fyrir þennan notandaaðgang current_username: Til að staðfesta skaltu setja inn notandanafnið fyrir þennan notandaaðgang digest: Er aðeins sent eftir lengri tímabil án virkni og þá aðeins ef þú hefur fengið persónuleg skilaboð á meðan þú hefur ekki verið á línunni - discoverable: Gerðu öðrum kleift að finna aðganginn þinn í gegnum meðmæli, vinsældir og annað slíkt email: Þú munt fá sendan staðfestingarpóst header: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px inbox_url: Afritaðu slóðina af forsíðu endurvarpans sem þú vilt nota irreversible: Síaðar færslur munu hverfa óendurkræft, jafnvel þó sían sé seinna fjarlægð locale: Tungumál notandaviðmótsins, tölvupósts og ýti-tilkynninga - locked: Krefst þess að þú samþykkir fylgjendur handvirkt password: Notaðu minnst 8 stafi phrase: Verður notað til samsvörunar burtséð frá stafstöðu texta eða viðvörunar vegna efnis í færslu scopes: Að hvaða API-kerfisviðmótum forritið fær aðgang. Ef þú velur efsta-stigs svið, þarftu ekki að gefa einstakar heimildir. @@ -57,9 +55,6 @@ is: setting_display_media_default: Fela myndefni sem merkt er viðkvæmt setting_display_media_hide_all: Alltaf fela allt myndefni setting_display_media_show_all: Alltaf birta myndefni sem merkt er viðkvæmt - setting_hide_network: Hverjum þú fylgist með og hverjir fylgjast með þér verður ekki birt á notandasniðinu þínu - setting_noindex: Hefur áhrif á opinbera notandasniðið þitt og færslusíður - setting_show_application: Nafnið á forritinu sem þú notar til að senda færslur mun birtast í ítarlegri sýn á færslunum þínum setting_use_blurhash: Litstiglarnir byggja á litunum í földu myndunum, en gera öll smáatriði óskýr setting_use_pending_items: Fela uppfærslur tímalínu þar til smellt er, í stað þess að hún skruni streyminu sjálfvirkt username: Þú mátt nota bókstafi, tölur og undirstrik @@ -178,7 +173,6 @@ is: context: Samhengi síu current_password: Núverandi lykilorð data: Gögn - discoverable: Hafa þennan aðgang með í notendaskránni display_name: Birtingarnafn email: Tölvupóstfang expires_in: Rennur út eftir @@ -188,7 +182,6 @@ is: inbox_url: URL-slóð á innhólf endurvarpa irreversible: Fella niður í staðinn fyrir að fela locale: Tungumál viðmóts - locked: Krefjast fylgjendabeiðna max_uses: Hámarksfjöldi afnota new_password: Nýtt lykilorð note: Æviágrip @@ -211,9 +204,7 @@ is: setting_display_media_show_all: Birta allt setting_expand_spoilers: Alltaf útfella færslur sem eru með aðvörun vegna efnisins setting_hide_network: Fela félagsnetið þitt - setting_noindex: Afþakka atriðaskráningu í leitarvélum setting_reduce_motion: Minnka hreyfingu í hreyfimyndum - setting_show_application: Upplýsa um forrit sem er til að senda færslur setting_system_font_ui: Nota sjálfgefið letur kerfisins setting_theme: Þema vefsvæðis setting_trends: Birta það sem er efst á baugi í dag diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 1bd93243fa..df8e54737c 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -41,13 +41,11 @@ it: current_password: Per motivi di sicurezza inserisci la password dell'account attuale current_username: Per confermare, inserisci il nome utente dell'account attuale digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza - discoverable: Consenti al tuo account di essere scoperto da sconosciuti tramite consigli, tendenze e altre funzionalità email: Ti manderemo una email di conferma header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px inbox_url: Copia la URL dalla pagina iniziale del ripetitore che vuoi usare irreversible: I post filtrati scompariranno in modo irreversibile, anche se il filtro viene eliminato locale: La lingua dell'interfaccia utente, di email e notifiche push - locked: Richiede che approvi i follower manualmente password: Usa almeno 8 caratteri phrase: Il confronto sarà eseguito ignorando minuscole/maiuscole e i content warning scopes: A quali API l'applicazione potrà avere accesso. Se selezionate un ambito di alto livello, non c'è bisogno di selezionare quelle singole. @@ -57,9 +55,6 @@ it: setting_display_media_default: Nascondi media segnati come sensibili setting_display_media_hide_all: Nascondi sempre tutti i media setting_display_media_show_all: Mostra sempre i media segnati come sensibili - setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo - setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status - setting_show_application: L'applicazione che usi per pubblicare i toot sarà mostrata nella vista di dettaglio dei tuoi toot setting_use_blurhash: I gradienti sono basati sui colori delle immagini nascoste ma offuscano tutti i dettagli setting_use_pending_items: Fare clic per mostrare i nuovi messaggi invece di aggiornare la timeline automaticamente username: Puoi usare lettere, numeri e caratteri di sottolineatura @@ -178,7 +173,6 @@ it: context: Contesti del filtro current_password: Password corrente data: Dati - discoverable: Inserisci questo account nella directory display_name: Nome visualizzato email: Indirizzo email expires_in: Scade dopo @@ -188,7 +182,6 @@ it: inbox_url: URL della inbox del ripetitore irreversible: Elimina invece di nascondere locale: Lingua dell'interfaccia - locked: Blocca account max_uses: Numero massimo di utilizzi new_password: Nuova password note: Biografia @@ -211,9 +204,7 @@ it: setting_display_media_show_all: Mostra tutti setting_expand_spoilers: Espandi sempre post con content warning setting_hide_network: Nascondi la tua rete - setting_noindex: Non farti indicizzare dai motori di ricerca setting_reduce_motion: Riduci movimento nelle animazioni - setting_show_application: Rendi pubblica l'applicazione usata per inviare i post setting_system_font_ui: Usa il carattere predefinito del sistema setting_theme: Tema del sito setting_trends: Mostra tendenze di oggi diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 4169a9abca..94657500d9 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -41,13 +41,11 @@ ja: current_password: 現在のアカウントのパスワードを入力してください current_username: 確認のため、現在のアカウントのユーザー名を入力してください digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます - discoverable: レコメンド、トレンド、その他の機能により、あなたのアカウントを他の人から見つけられるようにします email: 確認のメールが送信されます header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます" inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします irreversible: フィルターが後で削除されても、除外された投稿は元に戻せなくなります locale: ユーザーインターフェース、メールやプッシュ通知の言語 - locked: フォロワーを手動で承認する必要があります password: 少なくとも8文字は入力してください phrase: 投稿内容の大文字小文字や閲覧注意に関係なく一致 scopes: アプリの API に許可するアクセス権を選択してください。最上位のスコープを選択する場合、個々のスコープを選択する必要はありません。 @@ -57,9 +55,6 @@ ja: setting_display_media_default: 閲覧注意としてマークされたメディアは隠す setting_display_media_hide_all: メディアを常に隠す setting_display_media_show_all: メディアを常に表示する - setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします - setting_noindex: 公開プロフィールおよび各投稿ページに影響します - setting_show_application: 投稿するのに使用したアプリが投稿の詳細ビューに表示されるようになります setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします username: アルファベット大文字と小文字、数字、アンダーバー「_」が使えます @@ -178,7 +173,6 @@ ja: context: 除外対象 current_password: 現在のパスワード data: データ - discoverable: ディレクトリに掲載する display_name: 表示名 email: メールアドレス expires_in: 有効期限 @@ -188,7 +182,6 @@ ja: inbox_url: リレーサーバーの inbox URL irreversible: 隠すのではなく除外する locale: 言語 - locked: 承認制アカウントにする max_uses: 使用できる回数 new_password: 新しいパスワード note: プロフィール @@ -211,9 +204,7 @@ ja: setting_display_media_show_all: 表示 setting_expand_spoilers: 閲覧注意としてマークされた投稿を常に展開する setting_hide_network: 繋がりを隠す - setting_noindex: 検索エンジンによるインデックスを拒否する setting_reduce_motion: アニメーションの動きを減らす - setting_show_application: 送信したアプリを開示する setting_system_font_ui: システムのデフォルトフォントを使う setting_theme: サイトテーマ setting_trends: 本日のトレンドタグを表示する diff --git a/config/locales/simple_form.ka.yml b/config/locales/simple_form.ka.yml index 574a2b07c7..e5d874c5a5 100644 --- a/config/locales/simple_form.ka.yml +++ b/config/locales/simple_form.ka.yml @@ -12,11 +12,8 @@ ka: inbox_url: ურლ დააკოირეთ გამოყენებისთვის სასურველი რილეის წინა გვერდიდან irreversible: გაფილტრული ტუტები გაუქმდება აღუდგენლად, იმ შემთხვევაშიც კი თუ ფილტრი სამომავლოდ გაუქმდება locale: მომხმარებლის ინტერფეისის, ელ-ფოსტის წერილების და ფუშ შეტყობინებების ენა - locked: საჭიროებს თქვენ მიერ მიმდევრების ხელით დადასტურებას phrase: დამთხვევა მოხდება დიდი და პატარა ასოების ან კონტენტის გაფრთხილების გათვალისწინების გარეშე scopes: რომელი აპიებისადმი ექნება აპლიკაციას ცვდომა. თუ არიჩევთ უმთავრეს ფარგლებს, არ დაგჭირდებათ ინდივიდუალურების ამორჩევა. - setting_hide_network: ვის მიყვებით და ვინ მოგყვებათ არ გამოჩნდება აქ - setting_noindex: გავლენას ახდენს თქვენს ღია პროფილისა და სტატუსის გვერდებზე whole_word: როდესაც სიტყვა ან ფრაზა მხოლოდ ალფა-ნუმერიკულია, ის დაფიქსირდება თუ ემთხვევა სრულ სიტყვას imports: data: ცსვ ფაილის ექსპორტი მოხდა მასტოდონის სხვა ინსტანციიდან @@ -47,7 +44,6 @@ ka: inbox_url: რილეი ინბოქსის ურლ irreversible: გაუქმდეს დამალვის მაგივრად locale: ინტერფეისის ენა - locked: ანგარიშის ჩაკეტვა max_uses: მოხმარების მაქს. ოდენობა new_password: ახალი პაროლი note: ბიო. @@ -61,7 +57,6 @@ ka: setting_default_sensitive: ყოველთვის მოინიშნოს მედია მგრძნობიარედ setting_delete_modal: ტუტის გაუქმებამდე გამოჩნდეს დადასტურების ფანჯარა setting_hide_network: თქვენი ქსელის დამალვა - setting_noindex: საძოები სისტემების ინდექსაციის შეჩერება setting_reduce_motion: მოძრაობის შემცირება ანიმაციებში setting_system_font_ui: მოხდეს სისტემის საწყისი ფონტის მოხმარება setting_theme: საიტის თემა diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index b55a3406db..1e1c52da24 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -14,12 +14,10 @@ kab: email: Ad n-teṭṭfeḍ imayl i usentem irreversible: Tijewwaqin i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat locale: Tutlayt n ugrudem, imaylen d tilγa - locked: Isra asentem s wufus n ineḍfaren password: Seqdec ma drus 8 n yisekkilen setting_display_media_default: Ffer teywalt yettwacreḍ d tanafrit setting_display_media_hide_all: Ffer yal tikkelt akk taywalt setting_display_media_show_all: Ffer yal tikkelt teywalt yettwacreḍ d tanafrit - setting_hide_network: Wid i teṭṭafaṛeḍ d wid i k-yeṭṭafaṛen ur d-ttwaseknen ara deg umaγnu-inek imports: data: Afaylu CSV id yusan seg uqeddac-nniḍen n Maṣṭudun ip_block: @@ -55,12 +53,10 @@ kab: confirm_password: Sentem awal uffir current_password: Awal uffir n tura data: Isefka - discoverable: Rnu amiḍan-a γer ukaram display_name: Isem ara d-yettwaskanen email: Tansa imayl header: Ixef locale: Tutlayt n wegrudem - locked: Rgel amiḍan max_uses: Amḍan afellay n iseqdacen new_password: Awal uffir amaynut note: Tameddurt diff --git a/config/locales/simple_form.kk.yml b/config/locales/simple_form.kk.yml index c1c7b4c2fd..5c1854d188 100644 --- a/config/locales/simple_form.kk.yml +++ b/config/locales/simple_form.kk.yml @@ -29,14 +29,12 @@ kk: context: Фильтр контекстері current_password: Ағымдағы кілтсөз data: Дата - discoverable: Бұл аккаунтты каталогта көрсету display_name: Атын көрсет email: Эл. пошта мекен жайы expires_in: Аяқталу мерзімі fields: Профиль метадатасы header: Басы locale: Интерфейс тілі - locked: Аккаунтты құлыптау max_uses: Максимум қолданушы саны new_password: Жаңа құпиясөз note: Био diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 4c51117a13..38c07d5bef 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -41,13 +41,11 @@ ko: current_password: 보안을 위해 현재 계정의 암호를 입력해주세요 current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 - discoverable: 추천, 트렌드 및 기타 기능을 통해 낯선 사람이 내 계정을 발견할 수 있도록 허용합니다 email: 확인용 이메일을 보냈습니다. header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다 irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다 locale: 사용자 인터페이스, 이메일, 푸시 알림 언어 - locked: 팔로우 요청을 승인제로 두어 누가 당신을 팔로우 할 수 있는지를 수동으로 제어합니다. password: 최소 8글자 phrase: 게시물 내용이나 열람주의 내용 안에서 대소문자 구분 없이 매칭 됩니다 scopes: 애플리케이션에 허용할 API들입니다. 최상위 스코프를 선택하면 개별적인 것은 선택하지 않아도 됩니다. @@ -57,9 +55,6 @@ ko: setting_display_media_default: 민감함으로 표시된 미디어 가리기 setting_display_media_hide_all: 모든 미디어를 가리기 setting_display_media_show_all: 모든 미디어를 보이기 - setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들을 내 프로필에서 숨깁니다 - setting_noindex: 공개 프로필 및 각 게시물 페이지에 영향을 미칩니다 - setting_show_application: 게시물 작성에 사용한 애플리케이션이 게시물 상세정보에 표시됩니다. setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다 setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다 username: 문자, 숫자, 밑줄을 사용할 수 있습니다 @@ -178,7 +173,6 @@ ko: context: 필터 컨텍스트 current_password: 현재 암호 입력 data: 데이터 - discoverable: 계정을 다른 사람들에게 추천하기 display_name: 표시 이름 email: 이메일 주소 expires_in: 만기 @@ -188,7 +182,6 @@ ko: inbox_url: 릴레이 서버의 inbox URL irreversible: 숨기는 대신 삭제 locale: 인터페이스 언어 - locked: 팔로우 요청 필요 max_uses: 사용 횟수 제한 new_password: 새로운 암호 입력 note: 소개 @@ -211,9 +204,7 @@ ko: setting_display_media_show_all: 모두 보이기 setting_expand_spoilers: 내용 경고로 표시된 게시물을 항상 펼치기 setting_hide_network: 내 인맥 숨기기 - setting_noindex: 검색엔진의 인덱싱을 거절 setting_reduce_motion: 애니메이션 줄이기 - setting_show_application: 게시물 작성에 쓰인 애플리케이션 공개 setting_system_font_ui: 시스템의 기본 글꼴을 사용 setting_theme: 사이트 테마 setting_trends: 오늘의 유행 보이기 diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index 9194c8b122..fb7a45c34b 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -35,13 +35,11 @@ ku: current_password: Ji bo ewlehiyê ji kerema xwe borînpeyva ajimêrê xwe têxe current_username: Ji bo piştrastkirinê, ji kerema xwe navê bikarhêner ya ajimêrê niha binvîse digest: Tenê piştî demek dirêj neçalakiyê de û tenê di nebûna te da peyamên teybetî standî be tê şandin - discoverable: Mafê biden ku ajimêra te bi pêşniyar û taybetmendiyên din ji aliyê biyaniyan ve bê vedîtin email: Ji te re e-name ya pejirandinê were header: PNG, GIF an jî JPG. Herî zêde %{size} ber bi %{dimensions}px ve were kêmkirin inbox_url: Girêdanê ji rûpela pêşîn a guhêrkera ku tu dixwazî bi kar bînî jê bigire irreversible: Şandiyên parzûnkirî êdî bê veger wenda bibe, heger parzûn paşê were rakirin jî nabe locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin - locked: Bi pejirandina daxwazên şopandinê, kî dikare te bişopîne bi destan kontrol bike 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: |- @@ -53,9 +51,6 @@ ku: setting_display_media_default: Medyaya wekî hestyarî hatiye nîşankirî ye veşêre setting_display_media_hide_all: Medyayê tim veşêre setting_display_media_show_all: Medyayê tim nîşan bike - setting_hide_network: Kesên ku te dişopîne û kesên tu dişopînî ev ên profîla te de were veşartin - setting_noindex: Bandor li hemî profîla te û şandiyên rûpela te dike - setting_show_application: Navê sepana ku tu ji bo şandinê wê bi kar tîne dê di dîtinê berferh ên di şandiyên te de were xuyakirin setting_use_blurhash: Gradyen xwe bi rengên dîtbarîyên veşartî ve radigire, lê belê hûrgilîyan diveşêre setting_use_pending_items: Li şûna ku herkê wek bixweber bizivirînî nûvekirina demnameyê li paş tikandinekî veşêre whole_word: Dema peyvkilîd an jî hevok bi tenê alfahejmarî çêbe, bi tenê hemû bêjeyê re li hev bike wê pêk bê @@ -168,7 +163,6 @@ ku: context: Parzûnê naverokan current_password: Borînpeyva heyî data: Dane - discoverable: Ji yên din re ajimêrê pêşniyar bike display_name: Navê nîşandanê email: Navnîşana E-nameyê expires_in: Dîroka xilasbûyînê @@ -178,7 +172,6 @@ ku: inbox_url: Girêdana guhêrkera peymanên hatî irreversible: Li şûna veşartinê jê bibe locale: Zimanê navrûyê - locked: Ajimêr kilît bike max_uses: Hejmara bikaranîna herî zêde new_password: Borînpeyva nû note: Jiyanname @@ -201,9 +194,7 @@ ku: setting_display_media_show_all: Hemûyan nîşan bide setting_expand_spoilers: Şandîyên ku bi agahdarîyên naverokê va hatine nîşankirin her dem berfireh bike setting_hide_network: Grafîka xwe ya civakî veşêre - setting_noindex: Bes e nexe di nav rêzên lêgerîna gerokan setting_reduce_motion: Lîstikên livoka kêm bike - setting_show_application: Sepana ku ji bo şandina şandiyan tê bikaranîn diyar bike setting_system_font_ui: Curenivîsa berdest a pergalê bi kar bîne setting_theme: Rûkarê malperê setting_trends: Rojeva îro nîşan bide diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index ab0decf986..b2b25b3deb 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -37,13 +37,11 @@ lv: current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas - discoverable: Ļauj svešiniekiem atklāt savu kontu caur ieteikumiem, tendencēm un citām iespējām email: Tev tiks nosūtīts apstiprinājuma e-pasts header: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda - locked: Manuāli kontrolē, kas var tev sekot, apstiprinot sekošanas pieprasījumus password: Izmanto vismaz 8 rakstzīmes phrase: Tiks saskaņots neatkarīgi no ziņas teksta reģistra vai satura brīdinājuma scopes: Kuriem API lietojumprogrammai būs atļauta piekļuve. Ja izvēlies augstākā līmeņa tvērumu, tev nav jāatlasa atsevišķi vienumi. @@ -53,9 +51,6 @@ lv: setting_display_media_default: Paslēpt multividi, kas atzīmēta kā sensitīva setting_display_media_hide_all: Vienmēr slēpt multividi setting_display_media_show_all: Vienmēr rādīt multividi - setting_hide_network: Tavā profilā netiks rādīts, kam tu seko un kurš seko tev - setting_noindex: Ietekmē tavu publisko profilu un ziņu lapas - setting_show_application: Lietojumprogramma, ko tu izmanto publicēšanai, tiks parādīta tavu ziņu detalizētajā skatā setting_use_blurhash: Gradientu pamatā ir paslēpto vizuālo attēlu krāsas, bet neskaidras visas detaļas setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu username: Tu vari lietot burtus, ciparus un zemsvītras @@ -173,7 +168,6 @@ lv: context: Filtrēt kontekstus current_password: Pašreizējā parole data: Dati - discoverable: Ieteikt kontu citiem display_name: Parādāmais vārds email: E-pasta adrese expires_in: Beidzas pēc @@ -183,7 +177,6 @@ lv: inbox_url: URL vai releja pastkaste irreversible: Nomest, nevis paslēpt locale: Saskarnes valoda - locked: Pieprasīt sekotāju pieprasījumus max_uses: Maksimālais lietojumu skaits new_password: Jauna parole note: Par sevi @@ -206,9 +199,7 @@ lv: setting_display_media_show_all: Parādīt visu setting_expand_spoilers: Vienmēr izvērst ziņas, kas apzīmētas ar brīdinājumiem par saturu setting_hide_network: Slēpt savu sociālo grafu - setting_noindex: Atteikties no meklētājprogrammu indeksēšanas setting_reduce_motion: Ierobežot kustību animācijās - setting_show_application: Atklāt lietojumprogrammu, ko izmanto ziņu nosūtīšanai setting_system_font_ui: Lietot sistēmas noklusējuma fontu setting_theme: Vietnes motīvs setting_trends: Parādīt šodienas tendences diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index 511742fdff..3d488814b3 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -41,13 +41,11 @@ ms: current_password: Untuk tujuan keselamatan sila masukkan kata laluan akaun semasa current_username: Untuk mengesahkan, sila masukkan nama pengguna akaun semasa digest: Hanya dihantar selepas tempoh yang lama tidak aktif dan hanya jika anda telah menerima sebarang mesej peribadi semasa ketiadaan anda - discoverable: Benarkan akaun anda ditemui oleh orang yang tidak dikenali melalui pengesyoran, aliran dan ciri lain email: Anda akan dihantar e-mel pengesahan header: PNG, GIF atau JPG. Paling banyak %{size}. Akan diturunkan skala kepada %{dimensions}px inbox_url: Salin URL dari muka depan geganti yang anda mahu gunakan irreversible: Siaran yang ditapis akan hilang secara tidak dapat dipulihkan, walaupun penapis dialih keluar kemudian locale: Bahasa untuk antara muka pengguna, e-mel dan pemberitahuan segera - locked: Kawal orang yang boleh mengikuti anda secara manual dengan meluluskan permintaan ikuti password: Gunakan sekurang-kurangnya 8 aksara phrase: Akan dipadankan tanpa mengira sarung dalam teks atau amaran kandungan siaran scopes: API mana yang akan dibenarkan untuk diakses oleh aplikasi. Jika anda memilih skop peringkat atasan, anda tidak perlu memilih skop individu. @@ -57,9 +55,6 @@ ms: setting_display_media_default: Sembunyikan media yang ditanda sebagai sensitif setting_display_media_hide_all: Sentiasa sembunyikan media setting_display_media_show_all: Sentiasa paparkan media - setting_hide_network: Sesiapa yang anda ikuti dan sesiapa yang mengikuti anda akan disembunyi daripada profil anda - setting_noindex: Menjejaskan profil awam dan laman hantaran anda - setting_show_application: Aplikasi yang anda gunakan untuk menyiarkan akan dipaparkan dalam paparan terperinci siaran anda form_admin_settings: closed_registrations_message: Dipaparkan semasa pendaftaran ditutup site_contact_email: Cara orang boleh menghubungi anda untuk pertanyaan undang-undang atau sokongan. @@ -122,7 +117,6 @@ ms: context: Konteks penapis current_password: Kata laluan semasa data: Data - discoverable: Mencadangkan akaun kepada pengguna lain display_name: Nama paparan email: Alamat e-mel expires_in: Tamat tempoh selepas diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml index fc41c27f81..59d134137f 100644 --- a/config/locales/simple_form.my.yml +++ b/config/locales/simple_form.my.yml @@ -41,13 +41,11 @@ my: current_password: လုံခြုံရေးအတွက် ကျေးဇူးပြုပြီး လက်ရှိအကောင့်၏ စကားဝှက်ကို ထည့်ပါ current_username: အတည်ပြုရန်အတွက် လက်ရှိအကောင့်၏ အသုံးပြုသူအမည်ကို ရိုက်ထည့်ပါ digest: အချိန်အတော်ကြာ အသုံးမပြုသည့်သည့်နောက်တွင်သာ ပေးပို့ပြီး အသုံးမပြုသည့်ကာလအတွင်း ကိုယ်ရေးကိုယ်တာစာများသာ လက်ခံရန် - discoverable: အကြံပြုချက်များ၊ လက်ရှိခေတ်စားနေသောပို့စ်များနှင့် အခြားအကြောင်းအရာများမှတစ်ဆင့် သင့်အကောင့်ကို တခြားသူများက တွေ့ရှိနိုင်စေရန် ခွင့်ပြုပါ။ email: သင့်ထံ အတည်ပြုချက်အီးမေးလ်တစ်စောင် ပေးပို့ပါမည် header: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည် inbox_url: သင်အသုံးပြုလိုသော relay ၏ ရှေ့စာမျက်နှာမှ URL ကို ကူးယူပါ irreversible: စစ်ထုတ်ခြင်းကိုဖယ်ရှားလိုက်ပါက စစ်ထုတ်ထားသော ပို့စ်များမှာ ပျောက်ကွယ်သွားပါမည် locale: အသုံးပြုသူမှ လက်ရှိသုံးနေသည့်ဘာသာစကား၊ အီးမေးလ်များနှင့် ရရှိစေရန်ပေးပို့သည့် အသိပေးချက်များ - locked: စောင့်ကြည့်ရန်အတွက် တောင်းဆိုမှုများကို အတည်ပြုခြင်းဖြင့် စောင့်ကြည့်သူများကို ထိန်းချုပ်နိုင်သည် password: အနည်းဆုံး စာလုံး ၈ လုံး အသုံးပြုပါ။ phrase: ပို့စ်တစ်ခု၏ စာသား သို့မဟုတ် အကြောင်းအရာသတိပေးချက်တွင် စာသားသတ်မှတ်ထားမှုမရှိဘဲ ကိုက်ညီရပါမည် scopes: API အက်ပလီကေးရှင်းများကို ဝင်ရောက်ကြည့်ရှုခွင့်ပြုပါမည်။ ထိပ်တန်းအဆင့်နယ်ပယ်ကို ရွေးချယ်ထားပါက တစ်ခုချင်းစီရွေးချယ်ရန် မလိုအပ်တော့ပါ။ @@ -57,9 +55,6 @@ my: setting_display_media_default: သတိထားရသောမီဒီယာအဖြစ် သတ်မှတ်ထားမှုအား ဖျောက်ပါ setting_display_media_hide_all: မီဒီယာကို အမြဲတမ်းဖျောက်ထားပါ setting_display_media_show_all: မီဒီယာကို အမြဲတမ်းပြပါ - setting_hide_network: သင်စောင့်ကြည့်မည့်သူများနှင့် သင့်ကိုစောင့်ကြည့်မည့်သူများကို သင့်ပရိုဖိုင်တွင် ဖျောက်ထားနိုင်ပါသည် - setting_noindex: သင်၏ အများမြင်သည့်ပရိုဖိုင်နှင့် ပို့စ်စာမျက်နှာများကို အကျိုးသက်ရောက်သည် - setting_show_application: ပို့စ်တင်ရန်အတွက် သင်အသုံးပြုသည့် အက်ပလီကေးရှင်းကို သင့်ပို့စ်များ၏ အသေးစိတ်ကြည့်ရှုမှုတွင် ပြသမည်ဖြစ်သည် setting_use_blurhash: Gradients မှာ ဖျောက်ထားသောရုပ်ပုံများ၏ အရောင်များကိုအခြေခံသော်လည်း မည်သည့်အသေးစိတ်အချက်အလက်ကိုမဆို ရှုပ်ထွေးစေနိုင်ပါသည်။ setting_use_pending_items: အပေါ်အောက်လှိမ့်မည့်အစား ကလစ်တစ်ခုနောက်တွင် စာမျက်နှာအပ်ဒိတ်များကို ဖျောက်ထားပါ။ username: အက္ခရာများ၊ နံပါတ်များနှင့် underscore များကို အသုံးပြုနိုင်သည် @@ -178,7 +173,6 @@ my: context: အကြောင်းအရာများကို စစ်ထုတ်ပါ။ current_password: လက်ရှိစကားဝှက် data: အချက်အလက် - discoverable: အကောင့်ကို အခြားသူများအား အကြံပြုပါ display_name: ဖော်ပြမည့်အမည် email: အီးမေးလ်လိပ်စာ expires_in: သက်တမ်းကုန်ဆုံးမည့်ရက် @@ -188,7 +182,6 @@ my: inbox_url: ထပ်ဆင့်ဝင်စာ၏ URL irreversible: ဖျောက်မယ့်အစား လွှတ်လိုက်ပါ။ locale: ဘာသာစကား - locked: စောင့်ကြည့်တောင်းဆိုမှုများ လိုအပ်သည် max_uses: အများဆုံးအသုံးပြုမှုအရေအတွက် new_password: စကားဝှက်အသစ် note: ကိုယ်ရေးအကျဉ်း @@ -211,9 +204,7 @@ my: setting_display_media_show_all: အားလုံးပြရန် setting_expand_spoilers: အကြောင်းအရာသတိပေးချက်များဖြင့် အမှတ်အသားပြုထားသော ပို့စ်များကို အမြဲချဲ့ပါ setting_hide_network: သင့် Social Graph ကို ဖျောက်ထားပါ - setting_noindex: ရှာဖွေရေးအညွှန်းမှ ဖယ်ထုတ်ပါ setting_reduce_motion: ကာတွန်းများတွင် လှုပ်ရှားမှုကို လျှော့ချပါ - setting_show_application: ပို့စ်များ ပေးပို့ရာတွင် အသုံးပြုသည့် အက်ပလီကေးရှင်း setting_system_font_ui: စနစ်ရှိ နဂိုမူလ စာလုံးပုံစံကို အသုံးပြုပါ setting_theme: ဆိုက်အပြင်အဆင် setting_trends: ယနေ့ ရေပန်းစားသည်များကို ပြပါ diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index d58a55e9ad..45a09b658a 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -41,13 +41,11 @@ nl: current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen - discoverable: Toestaan dat jouw account vindbaar is voor onbekenden, via aanbevelingen, trends en op andere manieren email: Je krijgt een bevestigingsmail header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken irreversible: Gefilterde berichten verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen - locked: Door het goedkeuren van volgers handmatig bepalen wie jou mag volgen password: Gebruik tenminste 8 tekens phrase: Komt overeen ongeacht hoofd-/kleine letters of een inhoudswaarschuwing scopes: Tot welke API's heeft de toepassing toegang. Wanneer je een toestemming van het bovenste niveau kiest, hoef je geen individuele toestemmingen meer te kiezen. @@ -57,9 +55,6 @@ nl: setting_display_media_default: Als gevoelig gemarkeerde media verbergen setting_display_media_hide_all: Media altijd verbergen setting_display_media_show_all: Media altijd tonen - setting_hide_network: Wie jij volgt en wie jou volgen wordt niet op jouw profiel getoond - setting_noindex: Heeft invloed op jouw openbare profiel en pagina's met berichten - setting_show_application: De toepassing de je gebruikt om berichten te plaatsen wordt in de gedetailleerde weergave van het bericht getoond setting_use_blurhash: Wazige kleurovergangen zijn gebaseerd op de kleuren van de verborgen media, waarmee elk detail verdwijnt setting_use_pending_items: De tijdlijn wordt bijgewerkt door op het aantal nieuwe items te klikken, in plaats van dat deze automatisch wordt bijgewerkt username: Je kunt letters, cijfers en underscores gebruiken @@ -178,7 +173,6 @@ nl: context: Filterlocaties current_password: Huidig wachtwoord data: Gegevens - discoverable: Dit account laten aanbevelen en in de gebruikersgids tonen display_name: Weergavenaam email: E-mailadres expires_in: Vervalt na @@ -188,7 +182,6 @@ nl: inbox_url: Inbox-URL van de relayserver irreversible: Verwijderen in plaats van verbergen locale: Taal van de gebruikersomgeving - locked: Volgverzoek vereisen max_uses: Max. aantal keer te gebruiken new_password: Nieuwe wachtwoord note: Bio @@ -211,9 +204,7 @@ nl: setting_display_media_show_all: Alles tonen setting_expand_spoilers: Berichten met inhoudswaarschuwingen altijd uitklappen setting_hide_network: Jouw volgers en wie je volgt verbergen - setting_noindex: Jouw berichten niet door zoekmachines laten indexeren setting_reduce_motion: Beweging in animaties verminderen - setting_show_application: Toepassing onthullen die je voor het verzenden van berichten gebruikt setting_system_font_ui: Standaardlettertype van het systeem gebruiken setting_theme: Thema website setting_trends: Trends van vandaag tonen diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index b07db9a9a4..b44ec1e6a6 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -41,13 +41,11 @@ nn: current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: Skriv inn brukarnamnet til den noverande kontoen for å stadfesta digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte - discoverable: La kontoen din bli oppdaga av ukjende gjennom anbefalingar, trendar og andre funksjonar email: Du får snart ein stadfestings-e-post header: PNG, GIF eller JPG. Maksimalt %{size}. Minkast til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte tut vil verta borte for evig, sjølv om filteret vert fjerna seinare locale: Språket til brukargrensesnittet, e-postar og push-varsel - locked: Krev at du manuelt godkjenner fylgjarar password: Nytt minst 8 teikn phrase: Vil bli samsvart med, uansett bruk av store/små bokstaver eller innholdsadvarselen til en tut scopes: API-ane som programmet vil få tilgjenge til. Ettersom du vel eit toppnivåomfang tarv du ikkje velja einskilde API-ar. @@ -57,9 +55,6 @@ nn: setting_display_media_default: Gøym media som er merka som nærtakande setting_display_media_hide_all: Alltid skjul alt media setting_display_media_show_all: Vis alltid media - setting_hide_network: Kven du fylgjer og kven som fylgjer deg vert ikkje vist på profilen din - setting_noindex: Påverkar den offentlege profilen og statussidene dine - setting_show_application: Programmet du brukar for å tuta blir vist i den detaljerte visninga av tuta dine setting_use_blurhash: Overgangar er basert på fargane til skjulte grafikkelement, men gjer detaljar utydelege setting_use_pending_items: Gøym tidslineoppdateringar bak eit klikk, i staden for å rulla ned automatisk username: Du kan bruka bokstavar, tal og understrekar @@ -178,7 +173,6 @@ nn: context: Filtrer kontekstar current_password: Noverande passord data: Data - discoverable: Før denne kontoen opp i mappa display_name: Synleg namn email: E-post-adresse expires_in: Vert ugyldig etter @@ -188,7 +182,6 @@ nn: inbox_url: URL-addressen til overgangsinnboksen irreversible: Forkast i staden for å gøyma locale: Språk - locked: Lås konto max_uses: Grense på brukartal new_password: Nytt passord note: Om meg @@ -211,9 +204,7 @@ nn: setting_display_media_show_all: Vis alle setting_expand_spoilers: Vid alltid ut tut som er merka med innhaldsåtvaringar setting_hide_network: Gøym nettverket ditt - setting_noindex: Vel bort søkjemotorregistrering setting_reduce_motion: Minsk rørsle i animasjonar - setting_show_application: Avdekk programmet bruka for å senda tut setting_system_font_ui: Bruk standardskrifttypen på systemet setting_theme: Sidetema setting_trends: Vis kva som er populært i dag diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index b566dd3712..60eff4c8c4 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -41,13 +41,11 @@ current_password: For sikkerhetsgrunner, vennligst oppgi passordet til den nåværende bruker current_username: For å bekrefte, vennligst skriv inn brukernavnet til den nåværende kontoen digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte - discoverable: La kontoen din bli oppdaget av ukjente gjennom anbefalinger, trender og andre funksjoner email: Du vil bli tilsendt en bekreftelses-E-post header: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px inbox_url: Kopier URLen fra forsiden til overgangen du vil bruke irreversible: Filtrerte innlegg vil ugjenkallelig forsvinne, selv om filteret senere blir fjernet locale: Språket til brukergrensesnittet, e-mailer og push-varsler - locked: Krever at du manuelt godkjenner følgere password: Bruk minst 8 tegn phrase: Vil bli samsvart med, uansett bruk av store/små bokstaver eller innholdsvarselet til et innlegg scopes: Hvilke API-er programmet vil bli gitt tilgang til. Dersom du velger et toppnivåomfang, trenger du ikke å velge individuelle API-er. @@ -57,9 +55,6 @@ setting_display_media_default: Skjul media som er merket som følsomt setting_display_media_hide_all: Skjul alltid all media setting_display_media_show_all: Alltid vis media som er merket som sensitivt - setting_hide_network: De som du følger, og de som følger deg, vil ikke bli vist på profilen din - setting_noindex: Påvirker din offentlige profil og statussider - setting_show_application: Appen du bruker til å publisere innlegg vil bli vist i den detaljerte visningen til innleggene dine setting_use_blurhash: Gradientene er basert på fargene til de skjulte visualitetene, men gjør alle detaljer uklare setting_use_pending_items: Skjul tidslinjeoppdateringer bak et klikk, i stedet for å automatisk la strømmen skrolle username: Du kan bruke bokstaver, tall og understrekingstegn @@ -178,7 +173,6 @@ context: Filtersammenhenger current_password: Nåværende passord data: Data - discoverable: Før opp denne kontoen i mappen display_name: Visningsnavn email: E-postadresse expires_in: Utløper etter @@ -188,7 +182,6 @@ inbox_url: URL til overgangsinnboksen irreversible: Forkast i stedet for å skjule locale: Språk - locked: Lås konto max_uses: Maksimalt antall bruk new_password: Nytt passord note: Om meg @@ -211,9 +204,7 @@ setting_display_media_show_all: Vis alle setting_expand_spoilers: Utvid alltid innlegg som er merket med innholdsvarsler setting_hide_network: Skjul nettverket ditt - setting_noindex: Avmeld fra søkemotorindeksering setting_reduce_motion: Reduser bevegelser i animasjoner - setting_show_application: Vis hvilken app som ble brukt til å sende innlegg setting_system_font_ui: Bruk systemets standardfont setting_theme: Sidens tema setting_trends: Vis dagens trender diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index 32ecbf34cf..7159eed322 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -36,7 +36,6 @@ oc: inbox_url: Copiatz l’URL de la pagina màger del relai que volètz utilizar irreversible: Los tuts filtrats desapareisseràn irreversiblament, encara que lo filtre siá suprimit mai tard locale: La lenga de l’interfàcia d’utilizacion, los messatges e las notificacions - locked: Demanda qu’acceptetz manualament lo mond que vos sègon e botarà la visibilitat de vòstras publicacions coma accessiblas a vòstres seguidors solament password: Utilizatz almens 8 caractèrs phrase: Serà pres en compte que siá en majuscula o minuscula o dins un avertiment de contengut sensible scopes: A quinas APIs poiràn accedir las aplicacions. Se seleccionatz un encastre de naut nivèl, fa pas mestièr de seleccionar los nivèls mai basses. @@ -46,9 +45,6 @@ oc: setting_display_media_default: Rescondre los mèdias marcats coma sensibles setting_display_media_hide_all: Totjorn rescondre los mèdias setting_display_media_show_all: Totjorn mostrar los mèdias marcats coma sensibles - setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo mond que seguètz - setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts - setting_show_application: Lo nom de l’aplicacion qu’utilizatz per publicar serà mostrat dins la vista detalhada de vòstres tuts setting_use_blurhash: Los degradats venon de las colors de l’imatge rescondut en enfoscar los detalhs setting_use_pending_items: Rescondre las actualizacions del flux d’actualitat aprèp un clic allòc de desfilar lo flux automaticament whole_word: Quand lo mot-clau o frasa es solament alfranumeric, serà pas qu’aplicat se correspond al mot complèt @@ -117,7 +113,6 @@ oc: context: Contèxte del filtre current_password: Senhal actual data: Donadas - discoverable: Far aparéisser aqueste compte a l’annuari display_name: Escais email: Corrièl expires_in: Expira aprèp @@ -127,7 +122,6 @@ oc: inbox_url: URL de la bóstia de recepcion del relai irreversible: Suprimir allòc de rescondre locale: Lenga de l’interfàcia - locked: Far venir lo compte privat max_uses: Limit d’utilizacions new_password: Nòu senhal note: Biografia @@ -150,9 +144,7 @@ oc: setting_display_media_show_all: O mostrar tot setting_expand_spoilers: Totjorn desplegar los tuts marcats amb un avertiment de contengut setting_hide_network: Amagar vòstre malhum - setting_noindex: Èsser pas indexat pels motors de recèrca setting_reduce_motion: Reduire la velocitat de las animacions - setting_show_application: Revelar lo nom de l’aplicacion utilizada per enviar de tuts setting_system_font_ui: Utilizar la polissa del sistèma setting_theme: Tèma del site setting_trends: Veire las tendéncias d’uèi diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index fa0f50d840..04f6f08e6f 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -41,13 +41,11 @@ pl: current_password: Ze względów bezpieczeństwa wprowadź hasło obecnego konta current_username: Aby potwierdzić, wprowadź nazwę użytkownika obecnego konta digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią - discoverable: Pozwala na odkrywanie twojego konta przez nieznajomych poprzez rekomendacje, popularne wpisy i inne funkcje email: Otrzymasz e-mail potwierdzający header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px inbox_url: Skopiuj adres ze strony głównej przekaźnika, którego chcesz użyć irreversible: Filtrowane wpisy znikną bezpowrotnie, nawet gdy filtr zostanie usunięty locale: Język interfejsu, wiadomości e-mail i powiadomieniach push - locked: Musisz akceptować prośby o możliwość obserwacji password: Użyj co najmniej 8 znaków phrase: Zostanie wykryte nawet, gdy znajduje się za ostrzeżeniem o zawartości scopes: Wybór API, do których aplikacja będzie miała dostęp. Jeżeli wybierzesz nadrzędny zakres, nie musisz wybierać jego elementów. @@ -57,9 +55,6 @@ pl: setting_display_media_default: Ukrywaj zawartość multimedialną oznaczoną jako wrażliwa setting_display_media_hide_all: Zawsze ukrywaj zawartość multimedialną setting_display_media_show_all: Zawsze pokazuj zawartość multimedialną - setting_hide_network: Informacje o tym, kto Cię obserwuje i kogo obserwujesz nie będą widoczne - setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów - setting_show_application: W informacjach o wpisie będzie widoczna informacja o aplikacji, z której został wysłany setting_use_blurhash: Gradienty są oparte na kolorach ukrywanej zawartości, ale uniewidaczniają wszystkie szczegóły setting_use_pending_items: Ukryj aktualizacje osi czasu za kliknięciem, zamiast automatycznego przewijania strumienia username: Możesz używać liter, cyfr i podkreślników @@ -178,7 +173,6 @@ pl: context: Filtruj zawartość current_password: Obecne hasło data: Dane - discoverable: Wyświetlaj ten profil w katalogu display_name: Widoczna nazwa email: Adres e-mail expires_in: Wygaśnie po @@ -188,7 +182,6 @@ pl: inbox_url: Adres skrzynki przekaźnika irreversible: Usuwaj zamiast ukrywać locale: Język interfejsu - locked: Ustaw konto jako prywatne max_uses: Maksymalna liczba użyć new_password: Nowe hasło note: Biogram @@ -211,9 +204,7 @@ pl: setting_display_media_show_all: Pokaż wszystko setting_expand_spoilers: Zawsze rozwijaj wpisy oznaczone ostrzeżeniem o zawartości setting_hide_network: Ukryj swoją sieć - setting_noindex: Nie indeksuj mojego profilu w wyszukiwarkach internetowych setting_reduce_motion: Ogranicz ruch w animacjach - setting_show_application: Informuj o aplikacji z której wysłano wpisy setting_system_font_ui: Używaj domyślnej czcionki systemu setting_theme: Motyw strony setting_trends: Pokazuj dzisiejsze „Na czasie” diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 46cf516032..e770ba0a1c 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -41,13 +41,11 @@ pt-BR: current_password: Para fins de segurança, digite a senha da conta atual current_username: Para confirmar, digite o nome de usuário da conta atual digest: Enviado apenas após um longo período de inatividade com um resumo das menções recebidas durante ausência - discoverable: Permita que a sua conta seja descoberta por estranhos através de recomendações, tendências e outros recursos email: Você receberá um e-mail de confirmação header: PNG, GIF ou JPG de até %{size}. Serão redimensionados para %{dimensions}px inbox_url: Copie o link da página inicial do repetidor que você deseja usar irreversible: As publicações filtradas desaparecerão irreversivelmente, mesmo se o filtro for removido depois locale: O idioma da interface do usuário, e-mails e notificações - locked: Requer aprovação manual de seguidores password: Use pelo menos 8 caracteres phrase: Corresponderá independente de maiúsculas ou minúsculas, no texto ou no Aviso de Conteúdo de um toot scopes: Quais APIs o aplicativo vai ter permissão de acessar. Se você selecionar uma autorização de alto nível, você não precisa selecionar individualmente os outros. @@ -57,9 +55,6 @@ pt-BR: setting_display_media_default: Sempre ocultar mídia sensível setting_display_media_hide_all: Sempre ocultar todas as mídias setting_display_media_show_all: Sempre mostrar mídia sensível - setting_hide_network: Quem você segue e seus seguidores não serão mostrados no seu perfil - setting_noindex: Afeta seu perfil público e as páginas das suas publicações - setting_show_application: O aplicativo que você usar para publicar será exibido na visão detalhada das suas publicações setting_use_blurhash: O blur é baseado nas cores da imagem oculta, ofusca a maioria dos detalhes setting_use_pending_items: Ocultar atualizações da linha do tempo atrás de um clique ao invés de rolar automaticamente username: Você pode usar letras, números e underlines @@ -178,7 +173,6 @@ pt-BR: context: Contextos do filtro current_password: Senha atual data: Dados - discoverable: Mostrar conta no diretório de perfis display_name: Nome de exibição email: E-mail expires_in: Expira em @@ -188,7 +182,6 @@ pt-BR: inbox_url: Link da caixa de entrada do repetidor irreversible: Ignorar ao invés de ocultar locale: Idioma da interface - locked: Trancar perfil max_uses: Limite de uso new_password: Nova senha note: Biografia @@ -211,9 +204,7 @@ pt-BR: setting_display_media_show_all: Mostrar tudo setting_expand_spoilers: Sempre expandir toots com Aviso de Conteúdo setting_hide_network: Ocultar suas relações - setting_noindex: Não quero ser indexado por mecanismos de pesquisa setting_reduce_motion: Reduzir animações - setting_show_application: Mostrar o aplicativo usado para enviar as publicações setting_system_font_ui: Usar fonte padrão do sistema setting_theme: Tema do site setting_trends: Mostrar em alta hoje diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 951a3850bf..fe364a9e56 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -41,13 +41,11 @@ pt-PT: current_password: Para fins de segurança, queira inserir a palavra-passe da conta atual current_username: Para confirmar, queira inserir o nome de utilizador da conta atual digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência - discoverable: Permitir que a sua conta seja descoberta por outros através de recomendações, destaques e outras funções email: Será enviado um e-mail de confirmação header: PNG, GIF ou JPG. Ficheiros no máximo de %{size}. Serão reduzidos para %{dimensions}px inbox_url: Copie o URL da página inicial do repetidor que quer usar irreversible: Publicações filtradas irão desaparecer irremediavelmente, mesmo que o filtro seja removido posteriormente locale: A língua da interface de utilizador, e-mails e notificações push - locked: Requer aprovação manual de seguidores password: Use pelo menos 8 caracteres phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação scopes: Quais as API a que será concedido acesso. Se escolher uma abrangência de nível superior, não precisará de as seleccionar individualmente. @@ -57,9 +55,6 @@ pt-PT: setting_display_media_default: Esconder media marcada como problemática setting_display_media_hide_all: Esconder sempre toda a media setting_display_media_show_all: Mostrar sempre a media - setting_hide_network: Quem tu segues e quem te segue não será mostrado no teu perfil - setting_noindex: Afecta o teu perfil público e as páginas das tuas publicações - setting_show_application: A aplicação que usa para publicar será mostrada na vista pormenorizada das suas publicações setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer pormenores setting_use_pending_items: Ocultar atualizações da cronologia por detrás dum clique, em vez de rolar automaticamente o fluxo username: Pode utilizar letras, números e sublinhados @@ -178,7 +173,6 @@ pt-PT: context: Filtrar contextos current_password: Palavra-passe actual data: Dados - discoverable: Sugerir esta conta a outros display_name: Nome a apresentar email: Endereço de correio electrónico expires_in: Expira em @@ -188,7 +182,6 @@ pt-PT: inbox_url: URL da caixa de entrada do repetidor irreversible: Expandir em vez de esconder locale: Língua da interface - locked: Exigir pedidos de seguimento max_uses: Número máximo de utilizações new_password: Nova palavra-passe note: Biografia @@ -211,9 +204,7 @@ pt-PT: setting_display_media_show_all: Mostrar todos setting_expand_spoilers: Expandir sempre as publicações marcadas com avisos de conteúdo setting_hide_network: Esconder a tua rede - setting_noindex: Não quero ser indexado por motores de pesquisa setting_reduce_motion: Reduz movimento em animações - setting_show_application: Revelar sempre qual a aplicação usada para enviar as publicações setting_system_font_ui: Usar o tipo de letra padrão do sistema setting_theme: Tema do sítio setting_trends: Mostrar o que está hoje em alta diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml index d894cc0cea..cade572f38 100644 --- a/config/locales/simple_form.ro.yml +++ b/config/locales/simple_form.ro.yml @@ -34,7 +34,6 @@ ro: inbox_url: Copiază adresa URL de pe prima pagină a reului pe care vrei să îl utilizezi irreversible: Postările sortate vor dispărea ireversibil, chiar dacă filtrul este ulterior șters locale: Limba interfaței de utilizator, e-mailurile si notificările push - locked: Necesită aprobare manuală a urmăritorilor password: Utilizează cel puțin 8 caractere phrase: Vor fi potrivite indiferent de textul din casetă sau advertismentul unei postări scopes: La care API-uri aplicația are nevoie de acces. Dacă selectezi un scop principal nu mai e nevoie să selectezi fiecare sub-scop al acestuia. @@ -43,9 +42,6 @@ ro: setting_display_media_default: Ascunde conținutul media marcat ca sensibil (NSFW) setting_display_media_hide_all: Întotdeauna ascunde tot conținutul media setting_display_media_show_all: Întotdeauna afișează conținutul media marcat ca sensibil - setting_hide_network: Pe cine urmărești și cine te urmărește nu vor fi afișați pe profilul tău - setting_noindex: Afecteazâ profilul tău public și statusurile tale - setting_show_application: Aplicația pe care o utilizați pentru a posta va fi afișată în vizualizarea detaliată a postărilor setting_use_blurhash: Gradienții sunt bazați pe culorile vizualelor ascunse, dar ofuscă orice detalii setting_use_pending_items: Ascunde actualizările cronologice din spatele unui click în loc de a derula automat fluxul whole_word: Când fraza sau cuvântul este doar alfanumeric, acesta se aplică doar dacă există o potrivire completă @@ -104,7 +100,6 @@ ro: context: Contextele filtrului current_password: Parola actuală data: Date - discoverable: Listează acest cont in director display_name: Numele afișat email: Adresa de e-mail expires_in: Expiră după @@ -113,7 +108,6 @@ ro: inbox_url: Adresa URL a inbox-ului irreversible: Lasă înloc să ascunzi locale: Limbă - locked: Cont Privat max_uses: Numărul maxim de utilizatori new_password: Parola nouă note: Descriere @@ -134,9 +128,7 @@ ro: setting_display_media_show_all: Arată toate setting_expand_spoilers: Întotdeauna extinde postările marcate cu avertismente referitoare la conținut setting_hide_network: Ascunde rețeaua - setting_noindex: Nu permite motoarelor de căutare să indexeze rețeaua ta setting_reduce_motion: Redu mișcarea în animații - setting_show_application: Dezvăluie aplicația folosită pentru a trimite postări setting_system_font_ui: Utilizează fontul standard as sistemului setting_theme: Tema siteului setting_trends: Arată tendințele de astăzi diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 6451a9c93a..4a4e18507d 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -41,13 +41,11 @@ ru: current_password: В целях безопасности введите пароль текущей учётной записи current_username: Для подтверждения, пожалуйста, введите имя пользователя текущей учётной записи digest: Если вы долго не заглядывали, отправим вам дайджест событий, которые происходили в период вашего отсутствия. - discoverable: Разрешить другим людям находить ваш профиль через рекомендации, тренды и другие функции. email: Вам будет отправлено электронное письмо с подтверждением. header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px. inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать irreversible: Отфильтрованные посты будут утеряны навсегда, даже если в будущем фильтр будет убран locale: Язык интерфейса, e-mail писем и push-уведомлений - locked: Вручную контролируйте, кто может подписываться на вас, утверждая запросы на подписку password: Укажите не менее 8 символов. phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании поста scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически. @@ -57,9 +55,6 @@ ru: setting_display_media_default: Скрывать файлы «деликатного характера» setting_display_media_hide_all: Всегда скрывать любые медиафайлы setting_display_media_show_all: Всегда показывать любые медиафайлы - setting_hide_network: Другие не смогут видеть ни ваши подписки, ни ваших подписчиков. - setting_noindex: Ваш публичный профиль и публикации будут скрыты от поисковых систем. - setting_show_application: При просмотре поста будет видно из какого приложения он отправлен. setting_use_blurhash: Градиенты основаны на цветах скрытых медиа, но скрывают любые детали. setting_use_pending_items: Показывать обновления в ленте только после клика вместо автоматической прокрутки. username: Вы можете использовать буквы, цифры и знаки подчеркивания @@ -178,7 +173,6 @@ ru: context: Контекст фильтра current_password: Текущий пароль data: Данные - discoverable: Рекомендовать учётную запись другим пользователям display_name: Отображаемое имя email: Адрес e-mail expires_in: Истекает через @@ -188,7 +182,6 @@ ru: inbox_url: URL для входящих от ретрансляторов irreversible: Удалять, а не скрывать locale: Язык интерфейса - locked: Сделать учётную запись закрытой max_uses: Максимальное кол-во использований new_password: Новый пароль note: О себе @@ -211,9 +204,7 @@ ru: setting_display_media_show_all: Показывать все setting_expand_spoilers: Всегда раскрывать посты, имеющие предупреждение о содержании setting_hide_network: Скрыть свои связи - setting_noindex: Отказаться от индексации в поисковых машинах setting_reduce_motion: Уменьшить движение в анимации - setting_show_application: Указывать приложение, с которого отправлен пост setting_system_font_ui: Использовать шрифт системы по умолчанию setting_theme: Тема сайта setting_trends: Показывать сегодняшние тренды diff --git a/config/locales/simple_form.sc.yml b/config/locales/simple_form.sc.yml index 09a55eed5b..2c47259961 100644 --- a/config/locales/simple_form.sc.yml +++ b/config/locales/simple_form.sc.yml @@ -38,7 +38,6 @@ sc: inbox_url: Còpia s'URL dae sa pàgina printzipale de su ripetidore chi boles impreare irreversible: Is tuts filtrados ant a isparèssere in manera irreversìbile, fintzas si prus a tardu s'at a bogare su filtru locale: S'idioma de s'interfache de s'utente, de is messàgios de posta eletrònica e de is notìficas push - locked: Gesti a manu chie ti podet sighire aprovende a manu is sighiduras password: Imprea a su mancu 8 caràteres phrase: At a cuncordare sena cunsiderare is minùsculas e is majùsculas o is avisos de cuntenutu scopes: A ite API s'aplicatzione at a pòdere atzèdere. Si seletzionas un'àmbitu de su livellu prus artu, non serbit a nde seletzionare de sìngulos. @@ -47,9 +46,6 @@ sc: setting_display_media_default: Cua elementos multimediales marcados comente sensìbiles setting_display_media_hide_all: Cua semper is elementos multimediales setting_display_media_show_all: Ammustra semper is elementos multimediales - setting_hide_network: Sa gente chi sighis o chi ti sighit no at a èssere ammustrada in su profilu tuo - setting_noindex: Tenet efetu in su profilu pùblicu tuo e in is pàginas de is istados - setting_show_application: S'aplicatzione chi impreas pro publicare tuts at a èssere ammustrada in sa visualizatzione de detàlliu de is tuts setting_use_blurhash: Is gradientes sunt basados in subra de is colores de is immàgines cuadas ma imbelant totu is detàllios setting_use_pending_items: Cua is atualizatziones in segus de un'incarcu imbetzes de iscùrrere in automàticu su flussu de publicatziones whole_word: Cando sa crae (faeddu o fràsia) siat isceti alfanumèrica, s'at a aplicare isceti si currispondet a su faeddu intreu @@ -120,7 +116,6 @@ sc: context: Filtra cuntestos current_password: Crae atuale data: Data - discoverable: Cussìgia custu contu a àtere display_name: Nòmine visìbile email: Indiritzu de posta eletrònica expires_in: Iscadit a pustis de @@ -130,7 +125,6 @@ sc: inbox_url: URL de sa cartella de intrada de su ripetidore irreversible: Cantzella imbetzes de cuare locale: Idioma de s'interfache - locked: Rechede rechestas de sighidura max_uses: Nùmeru màssimu de impreos new_password: Crae noa note: Biografia @@ -152,9 +146,7 @@ sc: setting_display_media_show_all: Ammustra totu setting_expand_spoilers: Ismànnia semper is tuts marcados cun avisos de cuntenutu setting_hide_network: Cua sa retza tua - setting_noindex: Pedi de non ti fàghere inditzizare dae is motores de chirca setting_reduce_motion: Mìnima su movimentu in is animatziones - setting_show_application: Rivela s'aplicatzione impreada pro imbiare tuts setting_system_font_ui: Imprea sa tipografia predefinida de su sistema setting_theme: Tema de su situ setting_trends: Ammustra is tendèntzias de oe diff --git a/config/locales/simple_form.sco.yml b/config/locales/simple_form.sco.yml index eb8128cd4a..85fa66ddc9 100644 --- a/config/locales/simple_form.sco.yml +++ b/config/locales/simple_form.sco.yml @@ -35,13 +35,11 @@ sco: current_password: Fir security purposes please pit in the passwird o the current accoont current_username: Fir tae confirm, please pit in the uisernemm o the current accoont digest: Ainly sent efter a lang whilie o inactivity an ainly if ye'v gotten onie personal messages whilst ye wis awa - discoverable: Alloo yer accoont fir tae get discovert bi strangers throu recommendations, trends an ither features email: Ye'll be sent a confirmation email header: PNG, GIF or JPG. At maist %{size}. Wull get doonscaled tae %{dimensions}px inbox_url: Copy the URL fae the frontpage o the relay thit ye'r wantin tae uise irreversible: Filtert posts wull dizappear irreversibly, even if filter is taen aff efter locale: The leid o the uiser interface, emails an push notes - locked: Control bi haun wha kin follae ye bi approvin follae requests password: Uise at least 8 chairecters phrase: Wull get matched regairdless o case in text or content warnin o a post scopes: Whit APIs the application wull be allooed tae access. Gin ye dinnae pick a tap-level scope, ye dinnae need tae pick anes ane at a time. @@ -51,9 +49,6 @@ sco: setting_display_media_default: Hide media mairked sensitive setting_display_media_hide_all: Aye hide media setting_display_media_show_all: Aye shaw media - setting_hide_network: Wha ye follae an thaim thit follaes ye wull get hid on yer profile - setting_noindex: Affects yer public profile an post pages - setting_show_application: The application thit ye uise fir tae post wull be displayed in the detailt view o yer posts setting_use_blurhash: Gradients is based aff o the colors o the image thit's hid, but ye cannae see onie details setting_use_pending_items: Plank timeline updates ahin a chap insteid o automatic scrowin o the feed whole_word: Whan the keywird or phrase is alphanumeric ainly, it wull ainly get applied if it matches the haill wird @@ -166,7 +161,6 @@ sco: context: Filter contexts current_password: Current passwird data: Data - discoverable: Suggest accoont tae ithers display_name: Display nemm email: Email address expires_in: Rin oot efter @@ -176,7 +170,6 @@ sco: inbox_url: URL o the relay inbox irreversible: Drap insteid o plank locale: Interface leid - locked: Require follae requests max_uses: Maist nummer o uises new_password: New passwird note: Bio @@ -199,9 +192,7 @@ sco: setting_display_media_show_all: Shaw aw setting_expand_spoilers: Aye expand posts mairked wi content warnins setting_hide_network: Plank yer social graph - setting_noindex: Opt-oot o seirch engine indexin setting_reduce_motion: Reduce motion in animations - setting_show_application: Disclose application uised fir tae sen posts setting_system_font_ui: Uise system's defaut font setting_theme: Steid theme setting_trends: Shaw the day's trends diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 9835b126a2..23e63ef42c 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -35,13 +35,11 @@ si: current_password: ආරක්ෂක අරමුණු සඳහා කරුණාකර ජංගම ගිණුමේ මුරපදය ඇතුළත් කරන්න current_username: තහවුරු කිරීමට, කරුණාකර වත්මන් ගිණුමේ පරිශීලක නාමය ඇතුළත් කරන්න digest: දිගු කාලයක් අක්‍රියව සිටීමෙන් පසුව පමණක් යවන ලද අතර ඔබ නොමැති විට ඔබට කිසියම් පුද්ගලික පණිවිඩයක් ලැබී ඇත්නම් පමණි - discoverable: නිර්දේශ, ප්‍රවණතා සහ වෙනත් විශේෂාංග හරහා ඔබේ ගිණුම ආගන්තුකයන්ට සොයා ගැනීමට ඉඩ දෙන්න email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් - locked: අනුගමන ඉල්ලීම් අනුමත කිරීමෙන් ඔබව අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව පාලනය කරන්න password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. @@ -51,9 +49,6 @@ si: setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න - setting_hide_network: ඔබ අනුගමනය කරන්නේ කවුරුන්ද සහ ඔබව අනුගමනය කරන්නේ කවුරුන්ද යන්න ඔබගේ පැතිකඩෙහි සඟවනු ඇත - setting_noindex: ඔබගේ පොදු පැතිකඩ සහ පළ කිරීම් පිටු වලට බලපායි - setting_show_application: ඔබ පළ කිරීමට භාවිතා කරන යෙදුම ඔබගේ පළ කිරීම් වල සවිස්තරාත්මක දර්ශනයේ පෙන්වනු ඇත setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි @@ -135,7 +130,6 @@ si: context: සන්දර්භ පෙරහන් කරන්න current_password: වත්මන් මුර පදය data: දත්ත - discoverable: අන් අයට ගිණුමක් යෝජනා කරන්න display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය expires_in: පසු කල් ඉකුත් වේ @@ -145,7 +139,6 @@ si: inbox_url: රිලේ එන ලිපි URL irreversible: සැඟවීම වෙනුවට අතහරින්න locale: අතුරු මුහුණත භාෂාව - locked: ඉල්ලීම් අනුගමනය කිරීම අවශ්‍ය වේ max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය note: ජෛව @@ -168,9 +161,7 @@ si: setting_display_media_show_all: සියල්ල පෙන්වන්න setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න setting_hide_network: ඔබගේ ජාලය සඟවන්න - setting_noindex: සෙවුම් යන්ත්‍ර සුචිගත කිරීමෙන් ඉවත් වීම setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න - setting_show_application: පළ කිරීම් යැවීමට භාවිතා කරන යෙදුම හෙළි කරන්න setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න setting_theme: අඩවියේ තේමාව setting_trends: අද ප්‍රවණතා පෙන්වන්න diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index fe9f16eb92..a89e1a4290 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -27,7 +27,6 @@ sk: inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš locale: Jazyk užívateľského rozhrania, emailových, a nástenkových oboznámení - locked: Vyžaduje sa manuálne schvaľovanie sledujúcich password: Zadaj aspoň osem znakov phrase: Zhoda sa nájde nezávisle od toho, či je text napísaný, veľkými, alebo malými písmenami, či už v tele, alebo v hlavičke scopes: Ktoré API budú povolené aplikácii pre prístup. Ak vyberieš vrcholný stupeň, nemusíš už potom vyberať po jednom. @@ -36,9 +35,6 @@ sk: setting_display_media_default: Ukry médiá označené ako chúlostivé setting_display_media_hide_all: Vždy ukry všetky médiá setting_display_media_show_all: Vždy zobrazuj médiá - setting_hide_network: Koho následuješ, a kto následuje teba, nebude zobrazené na tvojom profile - setting_noindex: Ovplyvňuje verejný profil a stránky s príspevkami - setting_show_application: Aplikácia, ktorú používaš na písanie príspevkov, bude zobrazená v podrobnom náhľade jednotlivých tvojích príspevkov setting_use_blurhash: Prechody sú založené na farbách skrytých vizuálov, ale zahaľujú akékoľvek podrobnosti setting_use_pending_items: Skry aktualizovanie časovej osi tak, aby bola načitávaná iba po kliknutí, namiesto samostatného posúvania whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom @@ -97,7 +93,6 @@ sk: context: Triedenie kontextov current_password: Súčasné heslo data: Dáta - discoverable: Zaraď tento účet do databázy profilov display_name: Zobrazované meno email: Emailová adresa expires_in: Expiruj po @@ -106,7 +101,6 @@ sk: inbox_url: URL adresa prechodnej schránky irreversible: Zahoď, namiesto ukrytia locale: Jazyk rozhrania - locked: Zamknúť účet max_uses: Najviac možno použiť new_password: Nové heslo note: O tebe @@ -127,9 +121,7 @@ sk: setting_display_media_show_all: Ukáž všetky setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o chúlostivom obsahu setting_hide_network: Ukry svoju sieť kontaktov - setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče setting_reduce_motion: Mierni pohyb pri animáciách - setting_show_application: Zverejni akú aplikáciu používaš na posielanie príspevkov setting_system_font_ui: Použi základné systémové písmo setting_theme: Vzhľad webu setting_trends: Ukáž dnešné trendy diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 88687cb78e..655226d568 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -41,13 +41,11 @@ sl: current_password: Iz varnostnih razlogov vnesite geslo trenutnega računa current_username: Za potrditev vnesite uporabniško ime trenutnega računa digest: Pošlje se le po dolgem obdobju nedejavnosti in samo, če ste prejeli osebna sporočila v vaši odsotnosti - discoverable: Dovolite, da vaš račun odkrijejo neznanci prek priporočil, trendov in drugih funkcij email: Poslali vam bomo potrditveno e-pošto header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px inbox_url: Kopirajte URL naslov s prve strani releja, ki ga želite uporabiti irreversible: Filtrirane objave bodo nepovratno izginile, tudi če je filter kasneje odstranjen locale: Jezik uporabniškega vmesnika, e-poštnih sporočil in potisnih obvestil - locked: Zahteva, da ročno odobrite sledilce password: Uporabite najmanj 8 znakov phrase: Se bo ujemal, ne glede na začetnice v besedilu ali opozorilo o vsebini objave scopes: Do katerih API-jev bo imel program dostop. Če izberete obseg najvišje ravni, vam ni treba izbrati posameznih. @@ -57,9 +55,6 @@ sl: setting_display_media_default: Skrij medij, ki je označen kot občutljiv setting_display_media_hide_all: Vedno skrij vse medije setting_display_media_show_all: Vedno pokaži medij, ki je označen kot občutljiv - setting_hide_network: Kogar spremljate in kdo vas spremlja ne bo prikazano na vašem profilu - setting_noindex: Vpliva na vaš javni profil in na strani z objavami - setting_show_application: Aplikacija, ki jo uporabljate za objavljanje, bo prikazana v podrobnem pogledu vaših objav setting_use_blurhash: Prelivi temeljijo na barvah skrite vizualne slike, vendar zakrivajo vse podrobnosti setting_use_pending_items: Skrij posodobitev časovnice za klikom namesto samodejnega posodabljanja username: Uporabite lahko črke, števke in podčrtaje. @@ -178,7 +173,6 @@ sl: context: Filtriraj vsebino current_password: Trenutno geslo data: Podatki - discoverable: Dodaj ta račun v imenik display_name: Prikazno ime email: E-poštni naslov expires_in: Preteče po @@ -188,7 +182,6 @@ sl: inbox_url: URL mape "Prejeto" irreversible: Opusti namesto skrij locale: Jezik vmesnika - locked: Zaklenjen račun max_uses: Največje število uporabnikov new_password: Novo geslo note: Biografija @@ -211,9 +204,7 @@ sl: setting_display_media_show_all: Prikaži vse setting_expand_spoilers: Vedno razširi objave, označene z opozorili o vsebini setting_hide_network: Skrij svoje omrežje - setting_noindex: Odsotnost indeksiranja iskalnikov setting_reduce_motion: Zmanjšanje premikanja v animacijah - setting_show_application: Razkrij aplikacijo za pošiljanje objav setting_system_font_ui: Uporabi privzeto pisavo sistema setting_theme: Tema strani setting_trends: Pokaži današnje trende diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 496d752ebf..3fe1f73e23 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -41,13 +41,11 @@ sq: current_password: Për qëllime sigurie, ju lutemi, jepni fjalëkalimin e llogarisë së tanishme current_username: Që ta ripohoni, ju lutemi, jepni emrin e përdoruesit të llogarisë së tanishme digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës tuaj - discoverable: Lejoni që llogaria juaj të zbulohet nga të huaj përmes rekomandimesh, gjërash në modë dhe veçorish të tjera email: Do t’ju dërgohet një email ripohimi header: PNG, GIF ose JPG. E shumta %{size}. Do të ripërmasohet në %{dimensions}px inbox_url: Kopjoni URL-në prej faqes ballore të relesë që doni të përdorni irreversible: Mesazhet e filtruar do të zhduken në mënyrë të pakthyeshme, edhe nëse filtri hiqet më vonë locale: Gjuha e ndërfaqes së përdoruesit, email-eve dhe njoftimeve push - locked: Lyp që ju të miratoni dorazi ndjekësit password: Përdorni të paktën 8 shenja phrase: Do të kërkohet përputhje pavarësish se teksti ose sinjalizimi mbi lëndën e një mesazhi është shkruar me të mëdha apo me të vogla scopes: Cilat API do të lejohen të përdorin aplikacioni. Nëse përzgjidhni një shkallë të epërme, nuk ju duhet të përzgjidhni individualet një nga një. @@ -57,9 +55,6 @@ sq: setting_display_media_default: Fshih media me shenjën rezervat setting_display_media_hide_all: Fshih përherë mediat setting_display_media_show_all: Mediat shfaqi përherë - setting_hide_network: Cilët ndiqni dhe cilët ju ndjekin nuk do të shfaqen në profilin tuaj - setting_noindex: Prek faqet e profilit tuaj publik dhe gjendjeve - setting_show_application: Aplikacioni që përdorni për mesazhe do të shfaqet te pamja e hollësishme për mesazhet tuaj setting_use_blurhash: Gradientët bazohen në ngjyrat e elementëve pamorë të fshehur, por errësojnë çfarëdo hollësie setting_use_pending_items: Fshihi përditësimet e rrjedhës kohore pas një klikimi, në vend të rrëshqitjes automatike nëpër prurje username: Mund të përdorni shkronja, numra dhe nënvija @@ -178,7 +173,6 @@ sq: context: Filtroni kontekste current_password: Fjalëkalimi i tanishëm data: Të dhëna - discoverable: Sugjerojuni llogari të tjerëve display_name: Emër në ekran email: Adresë email expires_in: Skadon pas @@ -188,7 +182,6 @@ sq: inbox_url: URL e Të marrëve të relesë irreversible: Heqje, në vend se fshehje locale: Gjuhë ndërfaqeje - locked: Kyçe llogarinë max_uses: Numër maksimum përdorimesh new_password: Fjalëkalim i ri note: Jetëshkrim @@ -211,9 +204,7 @@ sq: setting_display_media_show_all: Shfaqi krejt setting_expand_spoilers: Mesazhet me sinjalizime mbi lëndën, zgjeroji përherë setting_hide_network: Fshiheni rrjetin tuaj - setting_noindex: Zgjidhni lënien jashtë nga indeksim prej motorësh kërkimi setting_reduce_motion: Zvogëlo lëvizjen në animacione - setting_show_application: Tregoje aplikacionin e përdorur për të dërguar mesazhe setting_system_font_ui: Përdor shkronja parazgjedhje të sistemit setting_theme: Temë sajti setting_trends: Shfaq prirjet sot diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index d7e05ecb84..6149094f42 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -41,13 +41,11 @@ sr-Latn: current_password: Iz bezbednosnih razloga molimo Vas unesite lozinku trenutnog naloga current_username: Da biste potvrdili, Molimo Vas unesite korisničko ime trenutno aktivnog naloga digest: Šalje se samo posle dužeg perioda neaktivnosti i samo u slučaju da ste primili jednu ili više ličnih poruka tokom Vašeg odsustva - discoverable: Dozvolite nepoznatim korisnicima da otkriju Vaš nalog putem preporuka, trendova i drugih funkcija email: Biće Vam poslat mejl sa potvrdom header: PNG, GIF ili JPG. Najviše %{size}. Biće smanjeno na %{dimensions}px inbox_url: Kopirajte URL sa naslovne strane releja koji želite koristiti irreversible: Filtrirane obajve će nestati nepovratno, čak i ako je filter kasnije uklonjen locale: Jezik korisničkog okruženja, e-pošte i mobilnih obaveštenja - locked: Kontrolišite ko može da Vas prati tako što ćete pojedinačno odobravati zahteve za praćenje password: Koristite najmanje 8 znakova phrase: Biće uparena bez obzira na veliko ili malo slovo u tekstu ili upozorenja o sadržaju objave scopes: Kojim API-jima će aplikacija imati pristup. Ako izaberete opseg najvišeg nivoa, ne morate odabrati pojedinačne. @@ -57,9 +55,6 @@ sr-Latn: setting_display_media_default: Sakrij medije označene kao osetljive setting_display_media_hide_all: Uvek sakrij sve medije setting_display_media_show_all: Uvek prikaži medije označene kao osetljive - setting_hide_network: Koga pratite i ko Vas prati neće biti prikazano na Vašem profilu - setting_noindex: Utiče na Vaš javni profil i stranice sa objavama - setting_show_application: Aplikacija koju koristite za objavljivanje će biti prikazana u detaljnom prikazu vaših objava setting_use_blurhash: Gradijenti se formiraju na osnovu bojâ skrivenih slika i zamućuju prikaz, prikrivajući detalje setting_use_pending_items: Sakriva ažuriranja vremenske linije iza klika umesto automatskog ažuriranja i pomeranja vremenske linije username: Možete koristiti slova, brojeve i donje crte @@ -178,7 +173,6 @@ sr-Latn: context: Filtriraj kontekste current_password: Trenutna lozinka data: Podaci - discoverable: Navedite ovaj nalog u fascikli display_name: Ime za prikaz email: Adresa e-pošte expires_in: Ističe nakon @@ -188,7 +182,6 @@ sr-Latn: inbox_url: URL od relejnog prijemnog sandučeta irreversible: Ispustiti umesto sakriti locale: Jezik - locked: Zahtevaj zahteve za praćenje max_uses: Maksimalni broj korišćenja new_password: Nova lozinka note: Biografija @@ -211,9 +204,7 @@ sr-Latn: setting_display_media_show_all: Prikaži sve setting_expand_spoilers: Uvek proširi objave koje su označene upozorenjem sadržaja setting_hide_network: Sakrij svoju mrežu - setting_noindex: Onemogući indeksiranje pretraživača setting_reduce_motion: Smanji pokrete u animacijama - setting_show_application: Otkrij aplikaciju koja se koristi za slanje postova setting_system_font_ui: Koristi sistemski font setting_theme: Tema sajta setting_trends: Prikaži današnje trendove diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index b4a96f9808..b6c1b36e25 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -41,13 +41,11 @@ sr: current_password: Из безбедносних разлога молимо Вас унесите лозинку тренутног налога current_username: Да бисте потврдили, Молимо Вас унесите корисничко име тренутно активног налога digest: Шаље се само после дужег периода неактивности и само у случају да сте примили једну или више личних порука током Вашег одсуства - discoverable: Дозволите непознатим корисницима да открију Ваш налог путем препорука, трендова и других функција email: Биће Вам послат мејл са потврдом header: PNG, GIF или JPG. Највише %{size}. Биће смањено на %{dimensions}px inbox_url: Копирајте URL са насловне стране релеја који желите користити irreversible: Филтриранe обајве ће нестати неповратно, чак и ако је филтер касније уклоњен locale: Језик корисничког окружења, е-поште и мобилних обавештења - locked: Контролишите ко може да Вас прати тако што ћете појединачно одобравати захтеве за праћење password: Користите најмање 8 знакова phrase: Биће упарена без обзира на велико или мало слово у тексту или упозорења о садржају објаве scopes: Којим API-јима ће апликација имати приступ. Ако изаберете опсег највишег нивоа, не морате одабрати појединачне. @@ -57,9 +55,6 @@ sr: setting_display_media_default: Сакриј медије означене као осетљиве setting_display_media_hide_all: Увек сакриј све медије setting_display_media_show_all: Увек прикажи медије означене као осетљиве - setting_hide_network: Кога пратите и ко Вас прати неће бити приказано на Вашем профилу - setting_noindex: Утиче на Ваш јавни профил и странице са објавама - setting_show_application: Апликација коју користите за објављивање ће бити приказана у детаљном приказу ваших објава setting_use_blurhash: Градијенти се формирају на основу бојâ скривених слика и замућују приказ, прикривајући детаље setting_use_pending_items: Сакрива ажурирања временске линије иза клика уместо аутоматског ажурирања и померања временске линије username: Можете користити слова, бројеве и доње црте @@ -178,7 +173,6 @@ sr: context: Филтрирај контексте current_password: Тренутна лозинка data: Подаци - discoverable: Наведите овај налог у фасцикли display_name: Име за приказ email: Адреса е-поште expires_in: Истиче након @@ -188,7 +182,6 @@ sr: inbox_url: URL од релејног пријемног сандучета irreversible: Испустити уместо сакрити locale: Језик - locked: Захтевај захтеве за праћење max_uses: Максимални број коришћења new_password: Нова лозинка note: Биографија @@ -211,9 +204,7 @@ sr: setting_display_media_show_all: Прикажи све setting_expand_spoilers: Увек прошири објаве које су означене упозорењем садржаја setting_hide_network: Сакриј своју мрежу - setting_noindex: Онемогући индексирање претраживача setting_reduce_motion: Смањи покрете у анимацијама - setting_show_application: Откриј апликацију која се користи за слање постова setting_system_font_ui: Користи системски фонт setting_theme: Тема сајта setting_trends: Прикажи данашње трендове diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index b4b8f262f1..3f02645d90 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -37,13 +37,11 @@ sv: current_password: Av säkerhetsskäl krävs lösenordet till det nuvarande kontot current_username: Ange det nuvarande kontots användarnamn för att bekräfta digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro - discoverable: Tillåt att ditt konto upptäcks av främlingar genom rekommendationer, trender och andra funktioner email: Du kommer att få ett bekräftelsemeddelande via e-post header: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px inbox_url: Kopiera webbadressen från hemsidan av det ombud du vill använda irreversible: Filtrerade inlägg kommer att försvinna oåterkalleligt, även om filter tas bort senare locale: Språket för användargränssnittet, e-postmeddelanden och push-aviseringar - locked: Kräver att du manuellt godkänner följare password: Använd minst 8 tecken phrase: Matchas oavsett användande i text eller innehållsvarning för ett inlägg scopes: 'Vilka API: er applikationen kommer tillåtas åtkomst till. Om du väljer en omfattning på högstanivån behöver du inte välja individuella sådana.' @@ -53,9 +51,6 @@ sv: setting_display_media_default: Dölj media markerad som känslig setting_display_media_hide_all: Dölj alltid all media setting_display_media_show_all: Visa alltid media markerad som känslig - setting_hide_network: Vem du följer och vilka som följer dig kommer inte att visas på din profilsida - setting_noindex: Påverkar din offentliga profil och statussidor - setting_show_application: Applikationen du använder för att göra inlägg kommer visas i detaljvyn för dina inlägg setting_use_blurhash: Gradienter är baserade på färgerna av de dolda objekten men fördunklar alla detaljer setting_use_pending_items: Dölj tidslinjeuppdateringar bakom ett klick istället för att automatiskt bläddra i flödet username: Du kan använda bokstäver, siffror och understreck @@ -173,7 +168,6 @@ sv: context: Filtrera sammanhang current_password: Nuvarande lösenord data: Data - discoverable: Föreslå konto för andra display_name: Visningsnamn email: E-postadress expires_in: Utgår efter @@ -183,7 +177,6 @@ sv: inbox_url: Webbadress för ombudsinkorg irreversible: Släng istället för att dölja locale: Språk för gränssnittet - locked: Kräv följförfrågningar max_uses: Max antal användningar new_password: Nytt lösenord note: Biografi @@ -206,9 +199,7 @@ sv: setting_display_media_show_all: Visa alla setting_expand_spoilers: Utöka alltid tutningar markerade med innehållsvarningar setting_hide_network: Göm ditt nätverk - setting_noindex: Uteslutning av sökmotorindexering setting_reduce_motion: Minska rörelser i animationer - setting_show_application: Visa programmet som används för att skicka tutningar setting_system_font_ui: Använd systemets standardfont setting_theme: Sidans tema setting_trends: Visa dagens trender diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml index 3dbea2009d..a3819e5eb5 100644 --- a/config/locales/simple_form.ta.yml +++ b/config/locales/simple_form.ta.yml @@ -53,11 +53,9 @@ ta: context: அமைப்பு current_password: தற்போதைய கடவுச்சொல் data: தரவு - discoverable: கோப்பகத்தில் இந்த கணக்கை பட்டியலிடுங்கள் email: மின்னஞ்சல் முகவரி header: தலைப்பு locale: பயனர் இடைமுக மொழி - locked: கணக்கைப் பூட்டு max_uses: பயன்பாடுகளின் அதிகபட்ச எண்ணிக்கை new_password: புதிய கடவுச்சொல் note: சுயசரிதை diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index b752f0d002..f6c87f5826 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -41,13 +41,11 @@ th: current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น - discoverable: อนุญาตให้คนแปลกหน้าค้นพบบัญชีของคุณได้ผ่านคำแนะนำ, แนวโน้ม และคุณลักษณะอื่น ๆ email: คุณจะได้รับอีเมลการยืนยัน header: PNG, GIF หรือ JPG สูงสุด %{size} จะได้รับการย่อขนาดเป็น %{dimensions}px inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้ irreversible: โพสต์ที่กรองอยู่จะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลังก็ตาม locale: ภาษาของส่วนติดต่อผู้ใช้, อีเมล และการแจ้งเตือนแบบผลัก - locked: ควบคุมผู้ที่สามารถติดตามคุณด้วยตนเองได้โดยอนุมัติคำขอติดตาม password: ใช้อย่างน้อย 8 ตัวอักษร phrase: จะได้รับการจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กในข้อความหรือคำเตือนเนื้อหาของโพสต์ scopes: API ใดที่จะอนุญาตให้แอปพลิเคชันเข้าถึง หากคุณเลือกขอบเขตระดับบนสุด คุณไม่จำเป็นต้องเลือกขอบเขตแต่ละรายการ @@ -57,9 +55,6 @@ th: setting_display_media_default: ซ่อนสื่อที่มีการทำเครื่องหมายว่าละเอียดอ่อน setting_display_media_hide_all: ซ่อนสื่อเสมอ setting_display_media_show_all: แสดงสื่อเสมอ - setting_hide_network: จะซ่อนผู้ที่คุณติดตามและผู้ที่ติดตามคุณในโปรไฟล์ของคุณ - setting_noindex: มีผลต่อโปรไฟล์สาธารณะและหน้าโพสต์ของคุณ - setting_show_application: จะแสดงแอปพลิเคชันที่คุณใช้ในการโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ setting_use_blurhash: อิงการไล่ระดับสีตามสีของภาพที่ซ่อนอยู่แต่ทำให้รายละเอียดใด ๆ คลุมเครือ setting_use_pending_items: ซ่อนการอัปเดตเส้นเวลาไว้หลังการคลิกแทนที่จะเลื่อนฟีดโดยอัตโนมัติ username: คุณสามารถใช้ตัวอักษร, ตัวเลข และขีดล่าง @@ -178,7 +173,6 @@ th: context: บริบทตัวกรอง current_password: รหัสผ่านปัจจุบัน data: ข้อมูล - discoverable: เสนอแนะบัญชีให้ผู้อื่น display_name: ชื่อที่แสดง email: ที่อยู่อีเมล expires_in: หมดอายุหลังจาก @@ -188,7 +182,6 @@ th: inbox_url: URL ของกล่องขาเข้าของรีเลย์ irreversible: ลบแทนที่จะซ่อน locale: ภาษาส่วนติดต่อ - locked: ต้องมีคำขอติดตาม max_uses: จำนวนการใช้งานสูงสุด new_password: รหัสผ่านใหม่ note: ชีวประวัติ @@ -211,9 +204,7 @@ th: setting_display_media_show_all: แสดงทั้งหมด setting_expand_spoilers: ขยายโพสต์ที่มีการทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ setting_hide_network: ซ่อนกราฟทางสังคมของคุณ - setting_noindex: เลือกไม่รับการทำดัชนีโดยเครื่องมือค้นหา setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว - setting_show_application: เปิดเผยแอปพลิเคชันที่ใช้ในการส่งโพสต์ setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ setting_theme: ชุดรูปแบบไซต์ setting_trends: แสดงแนวโน้มของวันนี้ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 778b3df487..14da3281fa 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -41,13 +41,11 @@ tr: current_password: Güvenlik nedeniyle lütfen şu anki hesabın parolasını girin current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin digest: Sadece uzun bir süre hareketsiz kaldıktan sonra ve yalnızca yokluğunuzda herhangi bir kişisel mesaj aldıysanız gönderilir - discoverable: Hesabınızın öneriler, trendler ve diğer özellikler aracılığıyla yabancılar tarafından keşfedilmesine izin verin email: Onay e-postası gönderilir header: PNG, GIF ya da JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecek inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın irreversible: Filtrelenmiş gönderiler, filtre daha sonra kaldırılsa bile, geri dönüşümsüz biçimde kaybolur locale: Kullanıcı arayüzünün dili, e-postalar ve push bildirimleri - locked: Takipçilerinizi manuel olarak kabul etmenizi ve gönderilerinizi varsayılan olarak sadece takipçilerinizin göreceği şekilde paylaşmanızı sağlar. password: En az 8 karakter kullanın phrase: Metnin büyük/küçük harf durumundan veya gönderinin içerik uyarısından bağımsız olarak eşleştirilecek scopes: Uygulamanın erişmesine izin verilen API'ler. Üst seviye bir kapsam seçtiyseniz, bireysel kapsam seçmenize gerek yoktur. @@ -57,9 +55,6 @@ tr: setting_display_media_default: Hassas olarak işaretlenmiş medyayı gizle setting_display_media_hide_all: Medyayı her zaman gizle setting_display_media_show_all: Medyayı her zaman göster - setting_hide_network: Takip ettiğiniz ve sizi takip eden kişiler profilinizde gösterilmeyecek - setting_noindex: Herkese açık profilinizi ve durum sayfalarınızı etkiler - setting_show_application: Gönderi gönderimi için kullandığınız uygulama, gönderilerinizin ayrıntılı görünümünde gösterilecektir setting_use_blurhash: Gradyenler gizli görsellerin renklerine dayanır, ancak detayları gizler setting_use_pending_items: Akışı otomatik olarak kaydırmak yerine, zaman çizelgesi güncellemelerini tek bir tıklamayla gizleyin username: Harfleri, sayıları veya alt çizgi kullanabilirsiniz @@ -178,7 +173,6 @@ tr: context: İçeriği filtrele current_password: Güncel parola data: Veri - discoverable: Bu hesabı dizinde listele display_name: Görünen isim email: E-posta adresi expires_in: Bitiş tarihi @@ -188,7 +182,6 @@ tr: inbox_url: Aktarıcı gelen kutusunun URL'si irreversible: Gizlemek yerine benim için sil locale: Arayüz dili - locked: Hesabı kilitle max_uses: Maksimum kullanım sayısı new_password: Yeni parola note: Kişisel bilgiler @@ -211,9 +204,7 @@ tr: setting_display_media_show_all: Tümünü göster setting_expand_spoilers: İçerik uyarılarıyla işaretli gönderileri her zaman genişlet setting_hide_network: Sosyal grafiğini gizle - setting_noindex: Arama motoru dizinine eklemeyi iptal et setting_reduce_motion: Animasyonlarda hareketi azalt - setting_show_application: Gönderileri göndermek için kullanılan uygulamayı belirt setting_system_font_ui: Sistemin varsayılan yazı tipini kullan setting_theme: Site teması setting_trends: Bugünün gündemini göster diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index e1401f4d41..b224607f90 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -41,13 +41,11 @@ uk: current_password: Для цілей безпеки, будь ласка, введіть пароль поточного облікового запису current_username: Для підтвердження, будь ласка, введіть ім'я користувача поточного облікового запису digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період - discoverable: Дозволити знаходити ваш обліковий запис стороннім людям за допомогою рекомендацій, трендів та інших функцій email: Вам надійде електронний лист з підтвердженням header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px inbox_url: Скопіюйте інтернет-адресу з титульної сторінки ретранслятора irreversible: Відфільтровані дописи зникнуть назавжди, навіть якщо фільтр потім буде вилучено locale: Мова інтерфейсу, електронних листів та push-сповіщень - locked: Вручну контролюйте, хто може слідкувати за вами, затверджуючи запити на стеження password: Не менше 8 символів phrase: Шукає без врахування регістру у тексті допису або у його попередженні про вміст scopes: Які API додатку буде дозволено використовувати. Якщо ви виберете самий верхній, нижчестоящі будуть обрані автоматично. @@ -57,9 +55,6 @@ uk: setting_display_media_default: Приховувати медіа, позначені як делікатними setting_display_media_hide_all: Завжди приховувати медіа setting_display_media_show_all: Завжди показувати медіа - setting_hide_network: У вашому профілі не буде показано підписки та підписників - setting_noindex: Впливає на ваш загальнодоступний профіль і сторінки дописів - setting_show_application: Застосунок, за допомогою якого ви зробили допис, буде показано серед подробиць допису setting_use_blurhash: Градієнти, що базуються на кольорах прихованих медіа, але роблять нерозрізненними будь-які деталі setting_use_pending_items: Не додавати нові повідомлення до стрічок миттєво, показувати лише після додаткового клацання username: Можна використовувати літери, цифри та підкреслення @@ -181,7 +176,6 @@ uk: context: Фільтр контексту current_password: Поточний пароль data: Дані - discoverable: Оприлюднити обліковий запис у каталозі display_name: Ім'я email: Адреса е-пошти expires_in: Закінчується після @@ -191,7 +185,6 @@ uk: inbox_url: URL поштової скриньки ретранслятора irreversible: Видалити назавжди, а не просто сховати locale: Мова - locked: Зробити обліковий запис приватним max_uses: Максимальна кількість використань new_password: Новий пароль note: Про Вас @@ -214,9 +207,7 @@ uk: setting_display_media_show_all: Показати всі setting_expand_spoilers: Завжди розгортати дописи з попередженнями про вміст setting_hide_network: Сховати вашу мережу - setting_noindex: Відмовитися від індексування пошуковими системами setting_reduce_motion: Менше руху в анімаціях - setting_show_application: Показувати застосунки, з яких створюються дописи setting_system_font_ui: Використовувати типовий системний шрифт setting_theme: Тема сайту setting_trends: Показувати популярні сьогодні дописи diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 80333c96e5..d381b67779 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -41,13 +41,11 @@ vi: current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) - discoverable: Cho phép tài khoản của bạn xuất hiện trong gợi ý theo dõi, thịnh hành và những tính năng khác email: Bạn sẽ được gửi một email xác nhận header: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy - locked: Tự bạn sẽ phê duyệt người theo dõi password: Dùng ít nhất 8 ký tự phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi. @@ -57,9 +55,6 @@ vi: setting_display_media_default: Click để xem setting_display_media_hide_all: Luôn ẩn setting_display_media_show_all: Luôn hiện - setting_hide_network: Ẩn những người bạn theo dõi và những người theo dõi bạn - setting_noindex: Ảnh hưởng đến trang cá nhân và tút của bạn - setting_show_application: Nó sẽ hiện trong chi tiết của tút setting_use_blurhash: Phủ lớp màu làm nhòe đi hình ảnh nhạy cảm setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấn vào username: Chỉ dùng ký tự, số và dấu gạch dưới @@ -178,7 +173,6 @@ vi: context: Áp dụng current_password: Mật khẩu hiện tại data: Dữ liệu - discoverable: Đề xuất tài khoản display_name: Biệt danh email: Địa chỉ email expires_in: Hết hạn sau @@ -188,7 +182,6 @@ vi: inbox_url: Hộp thư relay irreversible: Xóa bỏ vĩnh viễn locale: Ngôn ngữ - locked: Yêu cầu theo dõi max_uses: Số lần dùng tối đa new_password: Mật khẩu mới note: Giới thiệu @@ -211,9 +204,7 @@ vi: setting_display_media_show_all: Hiện toàn bộ setting_expand_spoilers: Luôn mở rộng tút chứa nội dung ẩn setting_hide_network: Ẩn quan hệ của bạn - setting_noindex: Không xuất hiện trong công cụ tìm kiếm setting_reduce_motion: Giảm chuyển động ảnh GIF - setting_show_application: Hiện tên ứng dụng đăng tút setting_system_font_ui: Dùng phông chữ mặc định hệ thống setting_theme: Giao diện setting_trends: Hiển thị thịnh hành hôm nay diff --git a/config/locales/simple_form.zgh.yml b/config/locales/simple_form.zgh.yml index 1d55f34b52..7ba82b1bf2 100644 --- a/config/locales/simple_form.zgh.yml +++ b/config/locales/simple_form.zgh.yml @@ -18,7 +18,6 @@ zgh: data: ⵉⴼⵙⴽⴰ email: ⵜⴰⵏⵙⴰ ⵉⵎⴰⵢⵍ locale: ⵜⵓⵜⵍⴰⵢⵜ ⵏ ⵓⵏⴳⵔⵓⴷⵎ - locked: ⵔⴳⵍ ⴰⵎⵉⴹⴰⵏ new_password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ note: ⵜⴰⵔⵉⴷⵉⵔⵜ password: ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 607c4ac2c8..6aff155e0d 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -41,13 +41,11 @@ zh-CN: current_password: 为了安全起见,请输入当前账号的密码 current_username: 请输入当前账号的用户名以确认 digest: 仅在你长时间未登录,且收到了私信时发送 - discoverable: 允许他人通过推荐、热门和其他途径发现你的账户 email: 我们会向你发送一封确认邮件 header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px inbox_url: 从你想要使用的中继站的主页上复制 URL irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样 locale: 用户界面、电子邮件和推送通知中使用的语言 - locked: 你需要手动审核所有关注请求 password: 至少需要8个字符 phrase: 匹配将忽略嘟文或内容警告里的字母大小写 scopes: 哪些 API 被允许使用。如果你勾选了更高一级的范围,就不用单独选中子项目了。 @@ -57,9 +55,6 @@ zh-CN: setting_display_media_default: 隐藏被标记为敏感内容的媒体 setting_display_media_hide_all: 始终隐藏媒体 setting_display_media_show_all: 始终显示媒体 - setting_hide_network: 你的关注者和你关注的人将不会在你的个人资料页上展示 - setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面 - setting_show_application: 你用来发表嘟文的应用程序将会在你嘟文的详细内容中显示 setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的 setting_use_pending_items: 关闭自动滚动更新,时间轴会在点击后更新 username: 您只能使用字母、数字和下划线 @@ -178,7 +173,6 @@ zh-CN: context: 过滤环境 current_password: 当前密码 data: 数据文件 - discoverable: 在本站用户目录中收录此账号 display_name: 昵称 email: 电子邮件地址 expires_in: 失效时间 @@ -188,7 +182,6 @@ zh-CN: inbox_url: 中继站收件箱的 URL irreversible: 丢弃而非隐藏 locale: 界面语言 - locked: 保护你的账户(锁嘟) max_uses: 最大使用次数 new_password: 新密码 note: 简介 @@ -211,9 +204,7 @@ zh-CN: setting_display_media_show_all: 显示全部 setting_expand_spoilers: 一律展开具有内容警告的嘟文 setting_hide_network: 隐藏你的社交网络 - setting_noindex: 禁止搜索引擎建立索引 setting_reduce_motion: 降低过渡动画效果 - setting_show_application: 展示发布嘟文的应用 setting_system_font_ui: 使用系统默认字体 setting_theme: 站点主题 setting_trends: 显示今日热门 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index 92b7b906e7..2600980890 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -37,13 +37,11 @@ zh-HK: current_password: 基於保安緣故,請輸入目前帳號的密碼 current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登錄,且收到了私信時發送 - discoverable: 允許陌生人從推薦、趨勢及其他功能發現你的帳號 email: 你將收到一封確認電郵 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px inbox_url: 在你想要使用的中繼站首頁,複製它的網址 irreversible: 文章過濾是不可還原的,即使日後過濾器被移除,也無法重新看到被它濾走的文章 locale: 使用者介面、電郵和通知的語言 - locked: 你必須手動審核每個人對你的關注請求 password: 使用至少 8 個字元 phrase: 過濾器會閱讀文章和內容警告標語的字眼,然後決定過濾與否 scopes: 選擇應用程式可以存取的 API。 若你選擇最高階的權限範圍,則無須選擇個別項目。 @@ -53,9 +51,6 @@ zh-HK: setting_display_media_default: 隱藏標為敏感的媒體 setting_display_media_hide_all: 總是隱藏所有媒體 setting_display_media_show_all: 總是顯示標為敏感的媒體 - setting_hide_network: 你所關注的人,和關注你的人,將不會在你的個人資料頁上顯示 - setting_noindex: 此設定會影響到你的公開個人資料以及文章頁面 - setting_show_application: 你用來發表文章的應用程式,將會顯示在你文章的詳細檢視中 setting_use_blurhash: 漸變圖樣會基於隱藏媒體內容產生,但所有細節會變得模糊 setting_use_pending_items: 關閉自動滾動更新,時間軸會在點擊後更新 whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用 @@ -172,7 +167,6 @@ zh-HK: context: 所過濾情境 current_password: 目前密碼 data: 資料 - discoverable: 在目錄列出此帳號 display_name: 顯示名稱 email: 電郵地址 expires_in: 失效時間 @@ -182,7 +176,6 @@ zh-HK: inbox_url: 中繼收件匣的 URL irreversible: 丟棄而非隱藏 locale: 介面語言 - locked: 將帳號轉為「私人」 max_uses: 最大使用次數 new_password: 新密碼 note: 簡介 @@ -205,9 +198,7 @@ zh-HK: setting_display_media_show_all: 全部顯示 setting_expand_spoilers: 永遠展開標有內容警告的文章 setting_hide_network: 隱藏你的社交網絡 - setting_noindex: 聲明本站不希望搜尋器讓外界搜尋 setting_reduce_motion: 減少動畫效果 - setting_show_application: 顯示用來發表文章的應用程式 setting_system_font_ui: 使用系統預設字型 setting_theme: 網站主題 setting_trends: 顯示今天的趨勢 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 1485e23f4d..9826d93f25 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -41,13 +41,11 @@ zh-TW: current_password: 因安全因素,請輸入目前帳號的密碼 current_username: 請輸入目前帳號的使用者名稱以確認 digest: 僅在您長時間未登入且在未登入期間收到私訊時傳送 - discoverable: 允許陌生人透過推薦、熱門趨勢及其他功能發現您的帳號 email: 您將收到一封確認電子郵件 header: 支援 PNG、GIF 或 JPG 圖片格式,檔案最大為 %{size},會等比例縮減至 %{dimensions} 像素 inbox_url: 從您想要使用的中繼首頁複製網址 irreversible: 已過濾的嘟文將會不可逆地消失,即便之後移除過濾器也一樣 locale: 使用者介面、電子郵件和推播通知的語言 - locked: 需要您手動批准跟隨請求 password: 使用至少 8 個字元 phrase: 無論是嘟文的本文或是內容警告都會被過濾 scopes: 允許讓應用程式存取的 API。 若您選擇最高階範圍,則無須選擇個別項目。 @@ -57,9 +55,6 @@ zh-TW: setting_display_media_default: 隱藏標為敏感內容的媒體 setting_display_media_hide_all: 總是隱藏所有媒體 setting_display_media_show_all: 總是顯示標為敏感內容的媒體 - setting_hide_network: 您跟隨的人與跟隨您的人將不會在您的個人檔案頁面上顯示 - setting_noindex: 會影響您的公開個人檔案與嘟文頁面 - setting_show_application: 您用來發嘟文的應用程式將會在您嘟文的詳細檢視顯示 setting_use_blurhash: 彩色漸層圖樣是基於隱藏媒體內容顏色產生,所有細節會變得模糊 setting_use_pending_items: 關閉自動捲動更新,時間軸只會在點擊後更新 username: 您可以使用字幕、數字與底線 @@ -178,7 +173,6 @@ zh-TW: context: 過濾情境 current_password: 目前密碼 data: 資料 - discoverable: 在目錄列出此帳號 display_name: 顯示名稱 email: 電子郵件地址 expires_in: 失效時間 @@ -188,7 +182,6 @@ zh-TW: inbox_url: 中繼收件匣 URL irreversible: 放棄而非隱藏 locale: 介面語言 - locked: 鎖定帳號 max_uses: 最大使用次數 new_password: 新密碼 note: 個人簡介 @@ -211,9 +204,7 @@ zh-TW: setting_display_media_show_all: 全部顯示 setting_expand_spoilers: 永遠展開標有內容警告的嘟文 setting_hide_network: 隱藏您的社交網路 - setting_noindex: 阻止搜尋引擎建立索引 setting_reduce_motion: 減少過渡動畫效果 - setting_show_application: 顯示用來傳送嘟文的應用程式 setting_system_font_ui: 使用系統預設字型 setting_theme: 佈景主題 setting_trends: 顯示本日熱門趨勢 diff --git a/config/locales/sl.yml b/config/locales/sl.yml index a3060f294b..21df7f6034 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1165,7 +1165,6 @@ sl: edit_profile: basic_information: Osnovni podatki other: Drugo - safety_and_privacy: Varnost in zasebnost errors: '400': Zahteva, ki ste jo oddali, je neveljavna ali nepravilno oblikovana. '403': Nimate dovoljenja za ogled te strani. diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 51bf810ade..753544d97c 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1132,7 +1132,6 @@ sq: basic_information: Hollësi elementare hint_html: "Përshtatni ç’shohin njerëzit në profilin tuaj publik dhe në krah të postimeve tuaja. Personat e tjerë ka më shumë gjasa t’ju ndjekin dhe ndërveprojnë me ju, kur keni të plotësuar profilin dhe një foto profili." other: Tjetër - safety_and_privacy: Siguri dhe privatësi errors: '400': Kërkesa që parashtruar qe e pavlefshme ose e keqformuar. '403': S’keni leje të shihni këtë faqe. diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index b09488aa12..3c12b88ff2 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1158,7 +1158,6 @@ sr-Latn: basic_information: Osnovne informacije hint_html: "Prilagodite šta ljudi vide na vašem javnom profilu i pored vaših objava. Veća je verovatnoća da će vas drugi pratiti i komunicirati sa vama kada imate popunjen profil i sliku profila." other: Ostalo - safety_and_privacy: Sigurnost i privatnost errors: '400': Zahtev koji ste podneli je bio nelegitiman ili u pogrešnom formatu. '403': Nemate dozvola da vidite ovu stranu. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 6398d0b79c..994b0828fc 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1158,7 +1158,6 @@ sr: basic_information: Основне информације hint_html: "Прилагодите шта људи виде на вашем јавном профилу и поред ваших објава. Већа је вероватноћа да ће вас други пратити и комуницирати са вама када имате попуњен профил и слику профила." other: Остало - safety_and_privacy: Сигурност и приватност errors: '400': Захтев који сте поднели је био нелегитиман или у погрешном формату. '403': Немате дозвола да видите ову страну. diff --git a/config/locales/th.yml b/config/locales/th.yml index f7309bbb96..2c7246d274 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1122,7 +1122,6 @@ th: basic_information: ข้อมูลพื้นฐาน hint_html: "ปรับแต่งสิ่งที่ผู้คนเห็นในโปรไฟล์สาธารณะของคุณและถัดจากโพสต์ของคุณ ผู้คนอื่น ๆ มีแนวโน้มที่จะติดตามคุณกลับและโต้ตอบกับคุณมากขึ้นเมื่อคุณมีโปรไฟล์ที่กรอกแล้วและรูปภาพโปรไฟล์" other: อื่น ๆ - safety_and_privacy: ความปลอดภัยและความเป็นส่วนตัว errors: '400': คำขอที่คุณได้ส่งไม่ถูกต้องหรือผิดรูปแบบ '403': คุณไม่มีสิทธิอนุญาตเพื่อดูหน้านี้ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 8923e730a9..571e9e5ab2 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1140,7 +1140,6 @@ tr: basic_information: Temel bilgiler hint_html: "İnsanlara herkese açık profilinizde ve gönderilerinizin yanında ne göstermek istediğinizi düzenleyin. Dolu bir profile ve bir profil resmine sahip olduğunuzda diğer insanlar daha yüksek ihtimalle sizi takip etmek ve sizinle etkileşime geçmek isteyeceklerdir." other: Diğer - safety_and_privacy: Güvenlik ve gizlilik errors: '400': Gönderdiğiniz istek geçersiz veya hatalı biçimlendirilmiş. '403': Bu sayfayı görmek için izniniz yok. diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 3fed715de0..ac36333a0f 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1176,7 +1176,6 @@ uk: basic_information: Основна інформація hint_html: "Налаштуйте те, що люди бачитимуть у вашому загальнодоступному профілі та поруч із вашими дописами. Інші люди з більшою ймовірністю підпишуться на вас та взаємодіятимуть з вами, якщо у вас є заповнений профіль та зображення профілю." other: Інше - safety_and_privacy: Безпека та приватність errors: '400': Ваш запит був недійсним або неправильним. '403': У Вас немає доступу до перегляду даної сторінки. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 57bf046983..574f097905 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1122,7 +1122,6 @@ vi: basic_information: Thông tin cơ bản hint_html: "Tùy chỉnh những gì mọi người nhìn thấy trên hồ sơ công khai và bên cạnh tút của bạn. Mọi người sẽ muốn theo dõi và tương tác với bạn hơn nếu bạn có ảnh đại diện và một hồ sơ hoàn chỉnh." other: Khác - safety_and_privacy: Sự riêng tư errors: '400': Yêu cầu bạn gửi không hợp lệ hoặc sai hình thức. '403': Bạn không có quyền xem trang này. diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 2004c3a6c4..50f0c578c8 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1122,7 +1122,6 @@ zh-CN: basic_information: 基本信息 hint_html: "自定义公开资料和帖子旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" other: 其他 - safety_and_privacy: 安全和隐私 errors: '400': 你提交的请求无效或格式不正确。 '403': 你没有访问这个页面的权限。 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 7f614f725e..bb49016965 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1126,7 +1126,6 @@ zh-TW: basic_information: 基本資訊 hint_html: "自訂人們可以於您個人檔案及嘟文內容。當您完成填寫個人檔案以及設定大頭貼後,其他人們比較願意跟隨您並與您互動。" other: 其他 - safety_and_privacy: 安全與隱私 errors: '400': 您所送出的請求無效或格式不正確。 '403': 您沒有檢視這個頁面的權限。 diff --git a/config/navigation.rb b/config/navigation.rb index 4c1396cc86..f608c2eea7 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -3,7 +3,7 @@ SimpleNavigation::Configuration.run do |navigation| navigation.items do |n| n.item :web, safe_join([fa_icon('chevron-left fw'), t('settings.back')]), root_path - n.item :profile, safe_join([fa_icon('user fw'), t('settings.profile')]), settings_profile_path, if: -> { current_user.functional? }, highlights_on: %r{/settings/profile|/settings/featured_tags|/settings/verification} + n.item :profile, safe_join([fa_icon('user fw'), t('settings.profile')]), settings_profile_path, if: -> { current_user.functional? }, highlights_on: %r{/settings/profile|/settings/featured_tags|/settings/verification|/settings/privacy} n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_path, if: -> { current_user.functional? } do |s| s.item :appearance, safe_join([fa_icon('desktop fw'), t('settings.appearance')]), settings_preferences_appearance_path diff --git a/config/routes/settings.rb b/config/routes/settings.rb index 194fe9280d..888fa9ecb5 100644 --- a/config/routes/settings.rb +++ b/config/routes/settings.rb @@ -61,6 +61,7 @@ namespace :settings do resource :delete, only: [:show, :destroy] resource :migration, only: [:show, :create] resource :verification, only: :show + resource :privacy, only: [:show, :update], controller: 'privacy' namespace :migration do resource :redirect, only: [:new, :create, :destroy] From 3c50a9108732a639606cab2cb084827a45518b0d Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 18:54:51 +0200 Subject: [PATCH 090/163] Add support for `indexable` attribute on remote actors (#26485) Co-authored-by: Eugen Rochko --- app/helpers/context_helper.rb | 1 + app/models/account.rb | 1 + .../activitypub/process_account_service.rb | 1 + .../20230814223300_add_indexable_to_accounts.rb | 17 +++++++++++++++++ db/schema.rb | 3 ++- 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20230814223300_add_indexable_to_accounts.rb diff --git a/app/helpers/context_helper.rb b/app/helpers/context_helper.rb index c23e8d028b..d8fa9b92e1 100644 --- a/app/helpers/context_helper.rb +++ b/app/helpers/context_helper.rb @@ -20,6 +20,7 @@ module ContextHelper focal_point: { 'toot' => 'http://joinmastodon.org/ns#', 'focalPoint' => { '@container' => '@list', '@id' => 'toot:focalPoint' } }, blurhash: { 'toot' => 'http://joinmastodon.org/ns#', 'blurhash' => 'toot:blurhash' }, discoverable: { 'toot' => 'http://joinmastodon.org/ns#', 'discoverable' => 'toot:discoverable' }, + indexable: { 'toot' => 'http://joinmastodon.org/ns#', 'indexable' => 'toot:indexable' }, voters_count: { 'toot' => 'http://joinmastodon.org/ns#', 'votersCount' => 'toot:votersCount' }, olm: { 'toot' => 'http://joinmastodon.org/ns#', 'Device' => 'toot:Device', 'Ed25519Signature' => 'toot:Ed25519Signature', 'Ed25519Key' => 'toot:Ed25519Key', 'Curve25519Key' => 'toot:Curve25519Key', 'EncryptedMessage' => 'toot:EncryptedMessage', 'publicKeyBase64' => 'toot:publicKeyBase64', 'deviceId' => 'toot:deviceId', diff --git a/app/models/account.rb b/app/models/account.rb index 1edc15972d..ca8cd2b138 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -50,6 +50,7 @@ # trendable :boolean # reviewed_at :datetime # requested_review_at :datetime +# indexable :boolean default(FALSE), not null # class Account < ApplicationRecord diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index c116fab733..ae30e88a29 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -115,6 +115,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.fields = property_values || {} @account.also_known_as = as_array(@json['alsoKnownAs'] || []).map { |item| value_or_id(item) } @account.discoverable = @json['discoverable'] || false + @account.indexable = @json['indexable'] || false end def set_fetchable_key! diff --git a/db/migrate/20230814223300_add_indexable_to_accounts.rb b/db/migrate/20230814223300_add_indexable_to_accounts.rb new file mode 100644 index 0000000000..6729c05ef2 --- /dev/null +++ b/db/migrate/20230814223300_add_indexable_to_accounts.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddIndexableToAccounts < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured { add_column_with_default :accounts, :indexable, :boolean, default: false, allow_null: false } + end + + def down + remove_column :accounts, :indexable + end +end diff --git a/db/schema.rb b/db/schema.rb index fc997f6340..7cca196ea0 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_08_11_103651) do +ActiveRecord::Schema[7.0].define(version: 2023_08_14_223300) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -185,6 +185,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_11_103651) do t.boolean "trendable" t.datetime "reviewed_at", precision: nil t.datetime "requested_review_at", precision: nil + t.boolean "indexable", default: false, null: false t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["domain", "id"], name: "index_accounts_on_domain_and_id" From 90e403ba4d1af49a7f22b87b42d86fa7c81be915 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 19:00:56 +0200 Subject: [PATCH 091/163] Fix ES_PRESET not being applied to Chewy's internal index (#26489) --- config/initializers/chewy.rb | 3 +++ lib/mastodon/cli/search.rb | 3 +++ 2 files changed, 6 insertions(+) diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb index 7d51a08457..66008a0009 100644 --- a/config/initializers/chewy.rb +++ b/config/initializers/chewy.rb @@ -15,6 +15,9 @@ Chewy.settings = { journal: false, user: user, password: password, + index: { + number_of_replicas: ['single_node_cluster', nil].include?(ENV['ES_PRESET'].presence) ? 0 : 1, + }, } # We use our own async strategy even outside the request-response diff --git a/lib/mastodon/cli/search.rb b/lib/mastodon/cli/search.rb index ee1c0fade1..41862b5b6b 100644 --- a/lib/mastodon/cli/search.rb +++ b/lib/mastodon/cli/search.rb @@ -18,6 +18,7 @@ module Mastodon::CLI option :only, type: :array, enum: %w(instances accounts tags statuses), desc: 'Only process these indices' option :import, type: :boolean, default: true, desc: 'Import data from the database to the index' option :clean, type: :boolean, default: true, desc: 'Remove outdated documents from the index' + option :reset_chewy, type: :boolean, default: false, desc: "Reset Chewy's internal index" desc 'deploy', 'Create or upgrade Elasticsearch indices and populate them' long_desc <<~LONG_DESC If Elasticsearch is empty, this command will create the necessary indices @@ -42,6 +43,8 @@ module Mastodon::CLI importers = indices.index_with { |index| "Importer::#{index.name}Importer".constantize.new(batch_size: options[:batch_size], executor: pool) } progress = ProgressBar.create(total: nil, format: '%t%c/%u |%b%i| %e (%r docs/s)', autofinish: false) + Chewy::Stash::Specification.reset! if options[:reset_chewy] + # First, ensure all indices are created and have the correct # structure, so that live data can already be written indices.select { |index| index.specification.changed? }.each do |index| From bd7f631918b3acbecf0c385008389ba22c945dbe Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 19:02:47 +0200 Subject: [PATCH 092/163] Fix unfollow icon styling in advanced column (#26482) --- .../mastodon/features/account/components/header.jsx | 4 ++-- app/javascript/styles/mastodon/components.scss | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index d351e210f6..fe6cbad547 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -265,9 +265,9 @@ class Header extends ImmutablePureComponent { if (signedIn && !account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn = } +

+ ); +}; + +HashtagBar.propTypes = { + hashtags: ImmutablePropTypes.list, + text: PropTypes.string, +}; \ No newline at end of file diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 37951d5782..7c34684d71 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -22,6 +22,7 @@ import { displayMedia } from '../initial_state'; import { Avatar } from './avatar'; import { AvatarOverlay } from './avatar_overlay'; import { DisplayName } from './display_name'; +import { HashtagBar } from './hashtag_bar'; import { RelativeTimestamp } from './relative_timestamp'; import StatusActionBar from './status_action_bar'; import StatusContent from './status_content'; @@ -580,6 +581,8 @@ class Status extends ImmutablePureComponent { {media} + + diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index 7348905c53..c1815b9167 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -10,6 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import EditedTimestamp from 'mastodon/components/edited_timestamp'; +import { HashtagBar } from 'mastodon/components/hashtag_bar'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; @@ -314,6 +315,8 @@ class DetailedStatus extends ImmutablePureComponent { {media} + +
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 5b7b4f6b35..7205bff055 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -300,6 +300,7 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} posts}} today", "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", + "hashtags.and_other": "…and {count, plural, other {# more}}", "home.actions.go_to_explore": "See what's trending", "home.actions.go_to_suggestions": "Find people to follow", "home.column_settings.basic": "Basic", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 46c7d328ca..009d4f71d6 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9256,3 +9256,26 @@ noscript { } } } + +.hashtag-bar { + margin-top: 16px; + display: flex; + flex-wrap: wrap; + font-size: 14px; + gap: 4px; + + a { + display: inline-flex; + border-radius: 4px; + background: rgba($highlight-text-color, 0.2); + color: $highlight-text-color; + padding: 0.4em 0.6em; + text-decoration: none; + + &:hover, + &:focus, + &:active { + background: rgba($highlight-text-color, 0.3); + } + } +} From 030dd2c9de40700b9caa36a2232841229050a49b Mon Sep 17 00:00:00 2001 From: Santiago Kozak Date: Wed, 16 Aug 2023 04:06:04 -0300 Subject: [PATCH 094/163] Fix hashtag bar display when status is in a thread (#26497) --- app/javascript/styles/mastodon/components.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 009d4f71d6..115b6f5d1b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1111,7 +1111,8 @@ body > [data-popper-placement] { .audio-player, .attachment-list, .picture-in-picture-placeholder, - .status-card { + .status-card, + .hashtag-bar { margin-inline-start: $thread-margin; width: calc(100% - ($thread-margin)); } From dc779cbd552a5ee88efc89a357bba41e341222f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Aug 2023 09:08:57 +0200 Subject: [PATCH 095/163] Update dependency postcss to v8.4.28 (#26502) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 09deddc764..4862776d95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9549,9 +9549,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25: - version "8.4.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" - integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== + version "8.4.28" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" + integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" From 805e0eff77d4e341ebb04744ff0bffa26c2eda61 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 16 Aug 2023 11:47:59 +0200 Subject: [PATCH 096/163] Fix hashtag bar sometimes including tags that appear in the post's body (#26506) --- app/javascript/mastodon/components/hashtag_bar.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag_bar.jsx b/app/javascript/mastodon/components/hashtag_bar.jsx index 6a39005e16..3ad6362551 100644 --- a/app/javascript/mastodon/components/hashtag_bar.jsx +++ b/app/javascript/mastodon/components/hashtag_bar.jsx @@ -15,11 +15,11 @@ const VISIBLE_HASHTAGS = 7; export const HashtagBar = ({ hashtags, text }) => { const renderedHashtags = useMemo(() => { const body = domParser.parseFromString(text, 'text/html').documentElement; - return [].map.call(body.querySelectorAll('[rel=tag]'), node => node.textContent.toLowerCase()); + return [].filter.call(body.querySelectorAll('a[href]'), link => link.textContent[0] === '#' || (link.previousSibling?.textContent?.[link.previousSibling.textContent.length - 1] === '#')).map(node => node.textContent.toLowerCase()); }, [text]); const invisibleHashtags = useMemo(() => ( - hashtags.filter(hashtag => !renderedHashtags.some(textContent => textContent === `#${hashtag.get('name')}` || textContent === hashtag.get('name'))) + hashtags.filter(hashtag => !renderedHashtags.some(textContent => textContent === `#${hashtag.get('name').toLowerCase()}` || textContent === hashtag.get('name').toLowerCase())) ), [hashtags, renderedHashtags]); const [expanded, setExpanded] = useState(false); From a19ce425ef6ac267004de9a90ab477ded071a136 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 16 Aug 2023 16:38:33 +0200 Subject: [PATCH 097/163] =?UTF-8?q?Fix=20=E2=80=9Clegal=E2=80=9D=20report?= =?UTF-8?q?=20category=20not=20showing=20up=20in=20moderation=20interface?= =?UTF-8?q?=20(#26509)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mastodon/components/admin/ReportReasonSelector.jsx | 2 ++ app/javascript/mastodon/locales/en.json | 1 + app/models/report.rb | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx index df298f333c..ecce92b309 100644 --- a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx +++ b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx @@ -8,6 +8,7 @@ import classNames from 'classnames'; import api from 'mastodon/api'; const messages = defineMessages({ + legal: { id: 'report.categories.legal', defaultMessage: 'Legal' }, other: { id: 'report.categories.other', defaultMessage: 'Other' }, spam: { id: 'report.categories.spam', defaultMessage: 'Spam' }, violation: { id: 'report.categories.violation', defaultMessage: 'Content violates one or more server rules' }, @@ -150,6 +151,7 @@ class ReportReasonSelector extends PureComponent { return (
+ {rules.map(rule => )} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 7205bff055..d4cd8c7945 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -533,6 +533,7 @@ "reply_indicator.cancel": "Cancel", "report.block": "Block", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", + "report.categories.legal": "Legal", "report.categories.other": "Other", "report.categories.spam": "Spam", "report.categories.violation": "Content violates one or more server rules", diff --git a/app/models/report.rb b/app/models/report.rb index f6fd23cf3a..eaf662d1e2 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -48,7 +48,10 @@ class Report < ApplicationRecord validate :validate_rule_ids - # entries here needs to be kept in sync with app/javascript/mastodon/features/notifications/components/report.jsx + # entries here need to be kept in sync with the front-end: + # - app/javascript/mastodon/features/notifications/components/report.jsx + # - app/javascript/mastodon/features/report/category.jsx + # - app/javascript/mastodon/components/admin/ReportReasonSelector.jsx enum category: { other: 0, spam: 1_000, From 4b4228c0cde87686edfca472fea9892d6629a3c9 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 17 Aug 2023 09:13:26 +0200 Subject: [PATCH 098/163] =?UTF-8?q?Change=20=E2=80=9Cprivacy=20and=20reach?= =?UTF-8?q?=E2=80=9D=20settings=20so=20that=20unchecking=20boxes=20always?= =?UTF-8?q?=20increase=20privacy=20and=20checking=20them=20always=20increa?= =?UTF-8?q?se=20reach=20(#26508)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/settings/privacy_controller.rb | 2 +- app/models/account.rb | 13 +++++++++++++ app/views/settings/privacy/show.html.haml | 4 ++-- config/locales/simple_form.en.yml | 8 ++++---- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/controllers/settings/privacy_controller.rb b/app/controllers/settings/privacy_controller.rb index 83be8772a0..c2648eedd8 100644 --- a/app/controllers/settings/privacy_controller.rb +++ b/app/controllers/settings/privacy_controller.rb @@ -18,7 +18,7 @@ class Settings::PrivacyController < Settings::BaseController private def account_params - params.require(:account).permit(:discoverable, :locked, :hide_collections, settings: UserSettings.keys) + params.require(:account).permit(:discoverable, :unlocked, :show_collections, settings: UserSettings.keys) end def set_account diff --git a/app/models/account.rb b/app/models/account.rb index ca8cd2b138..6b6cb8ee56 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -442,8 +442,21 @@ class Account < ApplicationRecord EntityCache.instance.mention(username, domain) end end + + def inverse_alias(key, original_key) + define_method("#{key}=") do |value| + public_send("#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value)) + end + + define_method(key) do + !public_send(original_key) + end + end end + inverse_alias :show_collections, :hide_collections + inverse_alias :unlocked, :locked + def emojis @emojis ||= CustomEmoji.from_text(emojifiable_text, domain) end diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index 66e495e108..ce31e60f06 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -18,7 +18,7 @@ = f.input :discoverable, as: :boolean, wrapper: :with_label, recommended: true .fields-group - = f.input :locked, as: :boolean, wrapper: :with_label + = f.input :unlocked, as: :boolean, wrapper: :with_label %h4= t('privacy.search') @@ -33,7 +33,7 @@ %p.lead= t('privacy.privacy_hint_html') .fields-group - = f.input :hide_collections, as: :boolean, wrapper: :with_label + = f.input :show_collections, as: :boolean, wrapper: :with_label = f.simple_fields_for :settings, current_user.settings do |ff| .fields-group diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index e16b54efeb..443b7617ff 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -6,9 +6,9 @@ en: discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. - hide_collections: People will not be able to browse through your follows and followers. People that you follow will see that you follow them regardless. - locked: People will request to follow you and you will be able to either accept or reject new followers. note: 'You can @mention other people or #hashtags.' + show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless. + unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers. account_alias: acct: Specify the username@domain of the account you want to move from account_migration: @@ -143,8 +143,8 @@ en: fields: name: Label value: Content - hide_collections: Hide follows and followers from profile - locked: Manually review new followers + show_collections: Show follows and followers on profile + unlocked: Automatically accept new followers account_alias: acct: Handle of the old account account_migration: From 5904d363b9fcaf860da88de5f40a5f640f36848f Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 17 Aug 2023 12:49:52 +0200 Subject: [PATCH 099/163] Fix case-insensitive comparison of hashtags to do case-folding (#26525) --- app/javascript/mastodon/components/hashtag_bar.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag_bar.jsx b/app/javascript/mastodon/components/hashtag_bar.jsx index 3ad6362551..3c7e24228d 100644 --- a/app/javascript/mastodon/components/hashtag_bar.jsx +++ b/app/javascript/mastodon/components/hashtag_bar.jsx @@ -15,11 +15,11 @@ const VISIBLE_HASHTAGS = 7; export const HashtagBar = ({ hashtags, text }) => { const renderedHashtags = useMemo(() => { const body = domParser.parseFromString(text, 'text/html').documentElement; - return [].filter.call(body.querySelectorAll('a[href]'), link => link.textContent[0] === '#' || (link.previousSibling?.textContent?.[link.previousSibling.textContent.length - 1] === '#')).map(node => node.textContent.toLowerCase()); + return [].filter.call(body.querySelectorAll('a[href]'), link => link.textContent[0] === '#' || (link.previousSibling?.textContent?.[link.previousSibling.textContent.length - 1] === '#')).map(node => node.textContent); }, [text]); const invisibleHashtags = useMemo(() => ( - hashtags.filter(hashtag => !renderedHashtags.some(textContent => textContent === `#${hashtag.get('name').toLowerCase()}` || textContent === hashtag.get('name').toLowerCase())) + hashtags.filter(hashtag => !renderedHashtags.some(textContent => textContent.localeCompare(`#${hashtag.get('name')}`, undefined, { sensitivity: 'accent' }) === 0 || textContent.localeCompare(hashtag.get('name'), undefined, { sensitivity: 'accent' }) === 0)) ), [hashtags, renderedHashtags]); const [expanded, setExpanded] = useState(false); @@ -47,4 +47,4 @@ export const HashtagBar = ({ hashtags, text }) => { HashtagBar.propTypes = { hashtags: ImmutablePropTypes.list, text: PropTypes.string, -}; \ No newline at end of file +}; From 2e66d2562c616a5dfcb974d6f836f010cb52df5d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 17 Aug 2023 16:11:48 +0200 Subject: [PATCH 100/163] Fix cached posts including stale stats (#26409) --- app/models/status.rb | 12 ++++++++++ .../concerns/cache_concern_spec.rb | 24 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/models/status.rb b/app/models/status.rb index 5a277269c5..86fd8334a2 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -367,13 +367,25 @@ class Status < ApplicationRecord account_ids.uniq! + status_ids = cached_items.map { |item| item.reblog? ? item.reblog_of_id : item.id }.uniq + return if account_ids.empty? accounts = Account.where(id: account_ids).includes(:account_stat, :user).index_by(&:id) + status_stats = StatusStat.where(status_id: status_ids).index_by(&:status_id) + cached_items.each do |item| item.account = accounts[item.account_id] item.reblog.account = accounts[item.reblog.account_id] if item.reblog? + + if item.reblog? + status_stat = status_stats[item.reblog.id] + item.reblog.status_stat = status_stat if status_stat.present? + else + status_stat = status_stats[item.id] + item.status_stat = status_stat if status_stat.present? + end end end diff --git a/spec/controllers/concerns/cache_concern_spec.rb b/spec/controllers/concerns/cache_concern_spec.rb index bf328d679d..fffd2b266e 100644 --- a/spec/controllers/concerns/cache_concern_spec.rb +++ b/spec/controllers/concerns/cache_concern_spec.rb @@ -13,12 +13,17 @@ RSpec.describe CacheConcern do def empty_relation render plain: cache_collection(Status.none, Status).size end + + def account_statuses_favourites + render plain: cache_collection(Status.where(account_id: params[:id]), Status).map(&:favourites_count) + end end before do routes.draw do - get 'empty_array' => 'anonymous#empty_array' - post 'empty_relation' => 'anonymous#empty_relation' + get 'empty_array' => 'anonymous#empty_array' + get 'empty_relation' => 'anonymous#empty_relation' + get 'account_statuses_favourites' => 'anonymous#account_statuses_favourites' end end @@ -36,5 +41,20 @@ RSpec.describe CacheConcern do expect(response.body).to eq '0' end end + + context 'when given a collection of statuses' do + let!(:account) { Fabricate(:account) } + let!(:status) { Fabricate(:status, account: account) } + + it 'correctly updates with new interactions' do + get :account_statuses_favourites, params: { id: account.id } + expect(response.body).to eq '[0]' + + FavouriteService.new.call(account, status) + + get :account_statuses_favourites, params: { id: account.id } + expect(response.body).to eq '[1]' + end + end end end From 5dcf08d912b1b03959eaf88f6c924a65d24c9f15 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Aug 2023 16:43:37 +0200 Subject: [PATCH 101/163] Update dependency pg to v8.11.3 (#26519) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4862776d95..37efb2747a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9184,9 +9184,9 @@ pg-types@^4.0.1: postgres-range "^1.1.1" pg@^8.5.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.2.tgz#1a23f6de7bfb65ba56e4dd15df96668d319900c4" - integrity sha512-l4rmVeV8qTIrrPrIR3kZQqBgSN93331s9i6wiUiLOSk0Q7PmUxZD/m1rQI622l3NfqBby9Ar5PABfS/SulfieQ== + version "8.11.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" From f4a6879cafd47b86875ed6df9693e47572c90710 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 18 Aug 2023 08:18:40 +0200 Subject: [PATCH 102/163] Allow setting a custom HTTP method in CacheBuster (#26528) Co-authored-by: Jorijn Schrijvershof --- app/lib/cache_buster.rb | 17 ++++++--- app/lib/request.rb | 2 +- config/application.rb | 1 + config/initializers/cache_buster.rb | 1 + lib/http_extensions.rb | 10 ++++++ spec/lib/cache_buster_spec.rb | 56 +++++++++++++++++++++++++++++ 6 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 lib/http_extensions.rb create mode 100644 spec/lib/cache_buster_spec.rb diff --git a/app/lib/cache_buster.rb b/app/lib/cache_buster.rb index 035611518e..c54b0da1a1 100644 --- a/app/lib/cache_buster.rb +++ b/app/lib/cache_buster.rb @@ -2,8 +2,14 @@ class CacheBuster def initialize(options = {}) - @secret_header = options[:secret_header] || 'Secret-Header' - @secret = options[:secret] || 'True' + ActiveSupport::Deprecation.warn('Default values for the cache buster secret header name and values will be removed in Mastodon 4.3. Please set them explicitely if you rely on those.') unless options[:http_method] || (options[:secret] && options[:secret_header]) + + @secret_header = options[:secret_header] || + (options[:http_method] ? nil : 'Secret-Header') + @secret = options[:secret] || + (options[:http_method] ? nil : 'True') + + @http_method = options[:http_method] || 'GET' end def bust(url) @@ -21,8 +27,9 @@ class CacheBuster end def build_request(url, http_client) - Request.new(:get, url, http_client: http_client).tap do |request| - request.add_headers(@secret_header => @secret) - end + request = Request.new(@http_method.downcase.to_sym, url, http_client: http_client) + request.add_headers(@secret_header => @secret) if @secret_header.present? && @secret && !@secret.empty? + + request end end diff --git a/app/lib/request.rb b/app/lib/request.rb index e5a9476a8e..fa0e3472f6 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -117,7 +117,7 @@ class Request def perform begin - response = http_client.public_send(@verb, @url.to_s, @options.merge(headers: headers)) + response = http_client.request(@verb, @url.to_s, @options.merge(headers: headers)) rescue => e raise e.class, "#{e.message} on #{@url}", e.backtrace[0] end diff --git a/config/application.rb b/config/application.rb index 372adc1680..2a62c37e8b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -51,6 +51,7 @@ require_relative '../lib/rails/engine_extensions' require_relative '../lib/active_record/database_tasks_extensions' require_relative '../lib/active_record/batches' require_relative '../lib/simple_navigation/item_extensions' +require_relative '../lib/http_extensions' Dotenv::Railtie.load diff --git a/config/initializers/cache_buster.rb b/config/initializers/cache_buster.rb index 227e450f35..a49fba671b 100644 --- a/config/initializers/cache_buster.rb +++ b/config/initializers/cache_buster.rb @@ -6,5 +6,6 @@ Rails.application.configure do config.x.cache_buster = { secret_header: ENV['CACHE_BUSTER_SECRET_HEADER'], secret: ENV['CACHE_BUSTER_SECRET'], + http_method: ENV['CACHE_BUSTER_HTTP_METHOD'] || 'GET', } end diff --git a/lib/http_extensions.rb b/lib/http_extensions.rb new file mode 100644 index 0000000000..2bc0618c4c --- /dev/null +++ b/lib/http_extensions.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +# Monkey patching until https://github.com/httprb/http/pull/757 is merged +unless HTTP::Request::METHODS.include?(:purge) + module HTTP + class Request + METHODS = METHODS.dup.push(:purge).freeze + end + end +end diff --git a/spec/lib/cache_buster_spec.rb b/spec/lib/cache_buster_spec.rb new file mode 100644 index 0000000000..84085608e8 --- /dev/null +++ b/spec/lib/cache_buster_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe CacheBuster do + subject { described_class.new(secret_header: secret_header, secret: secret, http_method: http_method) } + + let(:secret_header) { nil } + let(:secret) { nil } + let(:http_method) { nil } + + let(:purge_url) { 'https://example.com/test_purge' } + + describe '#bust' do + shared_examples 'makes_request' do + it 'makes an HTTP purging request' do + method = http_method&.to_sym || :get + stub_request(method, purge_url).to_return(status: 200) + + subject.bust(purge_url) + + test_request = a_request(method, purge_url) + + test_request = test_request.with(headers: { secret_header => secret }) if secret && secret_header + + expect(test_request).to have_been_made.once + end + end + + context 'when using default options' do + include_examples 'makes_request' + end + + context 'when specifying a secret header' do + let(:secret_header) { 'X-Purge-Secret' } + let(:secret) { SecureRandom.hex(20) } + + include_examples 'makes_request' + end + + context 'when specifying a PURGE method' do + let(:http_method) { 'purge' } + + context 'when not using headers' do + include_examples 'makes_request' + end + + context 'when specifying a secret header' do + let(:secret_header) { 'X-Purge-Secret' } + let(:secret) { SecureRandom.hex(20) } + + include_examples 'makes_request' + end + end + end +end From e4db4df28b9a02507d9f6b498029b89091f6efda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20S=C3=B8borg?= Date: Fri, 18 Aug 2023 08:32:47 +0200 Subject: [PATCH 103/163] Fix `frame_rate` for videos where `ffprobe` reports 0/0 (#26500) --- app/lib/video_metadata_extractor.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb index 2896620cb2..f27d34868a 100644 --- a/app/lib/video_metadata_extractor.rb +++ b/app/lib/video_metadata_extractor.rb @@ -43,6 +43,9 @@ class VideoMetadataExtractor @height = video_stream[:height] @frame_rate = video_stream[:avg_frame_rate] == '0/0' ? nil : Rational(video_stream[:avg_frame_rate]) @r_frame_rate = video_stream[:r_frame_rate] == '0/0' ? nil : Rational(video_stream[:r_frame_rate]) + # For some video streams the frame_rate reported by `ffprobe` will be 0/0, but for these streams we + # should use `r_frame_rate` instead. Video screencast generated by Gnome Screencast have this issue. + @frame_rate ||= @r_frame_rate end if (audio_stream = audio_streams.first) From 408991045b2564049bd3244fc72a1138873dce3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Aug 2023 08:33:33 +0200 Subject: [PATCH 104/163] Update dependency puma to v6.3.1 (#26537) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c8a945da2d..73e3bd9753 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -532,7 +532,7 @@ GEM premailer (~> 1.7, >= 1.7.9) private_address_check (0.5.0) public_suffix (5.0.3) - puma (6.3.0) + puma (6.3.1) nio4r (~> 2.0) pundit (2.3.0) activesupport (>= 3.0.0) From 8f40a96f28a5cdf5e52c40f57b8adf63165ce6d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:10:05 +0200 Subject: [PATCH 105/163] Update dependency @material-design-icons/svg to v0.14.11 (#26536) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 37efb2747a..7b851a088d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1677,9 +1677,9 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@material-design-icons/svg@^0.14.10": - version "0.14.10" - resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.10.tgz#25804b66d0740b0bf8d6841fa343dfdd60f22e82" - integrity sha512-rXxfqj5Su8i51aG8s8QRIe7mX1gB+C/ZCroLu3JvIsO3+Vx6PcWP97HLwIl7AQH/jYIHQlKq0E6OMqU91u5fCg== + version "0.14.11" + resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.11.tgz#f90a2c8de801523c3b17e606c89313121c8bb3b4" + integrity sha512-jpAksWZIVLB5/qTAeqANns7pH/faIQR3jgV2yROUNKZkzpJ428h7e1/byJB+rFZNI0hgZpY9nOVMLhc1J41HtA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" From fa6b30b2f9bd6cc12ec0a0278d27d748091208cd Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 18 Aug 2023 12:06:08 +0200 Subject: [PATCH 106/163] Remove redundant ready() wrapper (#26533) --- app/javascript/packs/public.jsx | 493 ++++++++++++++++---------------- 1 file changed, 245 insertions(+), 248 deletions(-) diff --git a/app/javascript/packs/public.jsx b/app/javascript/packs/public.jsx index da43bba7d6..9e30ecaa01 100644 --- a/app/javascript/packs/public.jsx +++ b/app/javascript/packs/public.jsx @@ -65,287 +65,284 @@ function loaded() { }; }; - ready(() => { - const locale = document.documentElement.lang; + const locale = document.documentElement.lang; - const dateTimeFormat = new Intl.DateTimeFormat(locale, { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - }); + const dateTimeFormat = new Intl.DateTimeFormat(locale, { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + }); - const dateFormat = new Intl.DateTimeFormat(locale, { - year: 'numeric', - month: 'short', - day: 'numeric', - timeFormat: false, - }); + const dateFormat = new Intl.DateTimeFormat(locale, { + year: 'numeric', + month: 'short', + day: 'numeric', + timeFormat: false, + }); - const timeFormat = new Intl.DateTimeFormat(locale, { - timeStyle: 'short', - hour12: false, - }); + const timeFormat = new Intl.DateTimeFormat(locale, { + timeStyle: 'short', + hour12: false, + }); - const formatMessage = ({ id, defaultMessage }, values) => { - const messageFormat = new IntlMessageFormat(localeData[id] || defaultMessage, locale); - return messageFormat.format(values); - }; + const formatMessage = ({ id, defaultMessage }, values) => { + const messageFormat = new IntlMessageFormat(localeData[id] || defaultMessage, locale); + return messageFormat.format(values); + }; - [].forEach.call(document.querySelectorAll('.emojify'), (content) => { - content.innerHTML = emojify(content.innerHTML); - }); + [].forEach.call(document.querySelectorAll('.emojify'), (content) => { + content.innerHTML = emojify(content.innerHTML); + }); - [].forEach.call(document.querySelectorAll('time.formatted'), (content) => { - const datetime = new Date(content.getAttribute('datetime')); - const formattedDate = dateTimeFormat.format(datetime); + [].forEach.call(document.querySelectorAll('time.formatted'), (content) => { + const datetime = new Date(content.getAttribute('datetime')); + const formattedDate = dateTimeFormat.format(datetime); - content.title = formattedDate; - content.textContent = formattedDate; - }); + content.title = formattedDate; + content.textContent = formattedDate; + }); - const isToday = date => { - const today = new Date(); + const isToday = date => { + const today = new Date(); - return date.getDate() === today.getDate() && - date.getMonth() === today.getMonth() && - date.getFullYear() === today.getFullYear(); - }; - const todayFormat = new IntlMessageFormat(localeData['relative_format.today'] || 'Today at {time}', locale); + return date.getDate() === today.getDate() && + date.getMonth() === today.getMonth() && + date.getFullYear() === today.getFullYear(); + }; + const todayFormat = new IntlMessageFormat(localeData['relative_format.today'] || 'Today at {time}', locale); - [].forEach.call(document.querySelectorAll('time.relative-formatted'), (content) => { - const datetime = new Date(content.getAttribute('datetime')); + [].forEach.call(document.querySelectorAll('time.relative-formatted'), (content) => { + const datetime = new Date(content.getAttribute('datetime')); - let formattedContent; + let formattedContent; - if (isToday(datetime)) { - const formattedTime = timeFormat.format(datetime); + if (isToday(datetime)) { + const formattedTime = timeFormat.format(datetime); - formattedContent = todayFormat.format({ time: formattedTime }); - } else { - formattedContent = dateFormat.format(datetime); - } + formattedContent = todayFormat.format({ time: formattedTime }); + } else { + formattedContent = dateFormat.format(datetime); + } - content.title = formattedContent; - content.textContent = formattedContent; - }); + content.title = formattedContent; + content.textContent = formattedContent; + }); - [].forEach.call(document.querySelectorAll('time.time-ago'), (content) => { - const datetime = new Date(content.getAttribute('datetime')); - const now = new Date(); + [].forEach.call(document.querySelectorAll('time.time-ago'), (content) => { + const datetime = new Date(content.getAttribute('datetime')); + const now = new Date(); - const timeGiven = content.getAttribute('datetime').includes('T'); - content.title = timeGiven ? dateTimeFormat.format(datetime) : dateFormat.format(datetime); - content.textContent = timeAgoString({ - formatMessage, - formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date), - }, datetime, now, now.getFullYear(), timeGiven); - }); + const timeGiven = content.getAttribute('datetime').includes('T'); + content.title = timeGiven ? dateTimeFormat.format(datetime) : dateFormat.format(datetime); + content.textContent = timeAgoString({ + formatMessage, + formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date), + }, datetime, now, now.getFullYear(), timeGiven); + }); - const reactComponents = document.querySelectorAll('[data-component]'); + const reactComponents = document.querySelectorAll('[data-component]'); - if (reactComponents.length > 0) { - import(/* webpackChunkName: "containers/media_container" */ '../mastodon/containers/media_container') - .then(({ default: MediaContainer }) => { - [].forEach.call(reactComponents, (component) => { - [].forEach.call(component.children, (child) => { - component.removeChild(child); - }); + if (reactComponents.length > 0) { + import(/* webpackChunkName: "containers/media_container" */ '../mastodon/containers/media_container') + .then(({ default: MediaContainer }) => { + [].forEach.call(reactComponents, (component) => { + [].forEach.call(component.children, (child) => { + component.removeChild(child); }); - - const content = document.createElement('div'); - - const root = createRoot(content); - root.render(); - document.body.appendChild(content); - scrollToDetailedStatus(); - }) - .catch(error => { - console.error(error); - scrollToDetailedStatus(); }); - } else { - scrollToDetailedStatus(); - } - delegate(document, '#user_account_attributes_username', 'input', throttle(() => { - const username = document.getElementById('user_account_attributes_username'); + const content = document.createElement('div'); - if (username.value && username.value.length > 0) { - axios.get('/api/v1/accounts/lookup', { params: { acct: username.value } }).then(() => { - username.setCustomValidity(formatMessage(messages.usernameTaken)); - }).catch(() => { - username.setCustomValidity(''); - }); - } else { + const root = createRoot(content); + root.render(); + document.body.appendChild(content); + scrollToDetailedStatus(); + }) + .catch(error => { + console.error(error); + scrollToDetailedStatus(); + }); + } else { + scrollToDetailedStatus(); + } + + delegate(document, '#user_account_attributes_username', 'input', throttle(() => { + const username = document.getElementById('user_account_attributes_username'); + + if (username.value && username.value.length > 0) { + axios.get('/api/v1/accounts/lookup', { params: { acct: username.value } }).then(() => { + username.setCustomValidity(formatMessage(messages.usernameTaken)); + }).catch(() => { username.setCustomValidity(''); - } - }, 500, { leading: false, trailing: true })); - - delegate(document, '#user_password,#user_password_confirmation', 'input', () => { - const password = document.getElementById('user_password'); - const confirmation = document.getElementById('user_password_confirmation'); - if (!confirmation) return; - - if (confirmation.value && confirmation.value.length > password.maxLength) { - confirmation.setCustomValidity(formatMessage(messages.passwordExceedsLength)); - } else if (password.value && password.value !== confirmation.value) { - confirmation.setCustomValidity(formatMessage(messages.passwordDoesNotMatch)); - } else { - confirmation.setCustomValidity(''); - } - }); - - delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original')); - delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static')); - - delegate(document, '.status__content__spoiler-link', 'click', function() { - const statusEl = this.parentNode.parentNode; - - if (statusEl.dataset.spoiler === 'expanded') { - statusEl.dataset.spoiler = 'folded'; - this.textContent = (new IntlMessageFormat(localeData['status.show_more'] || 'Show more', locale)).format(); - } else { - statusEl.dataset.spoiler = 'expanded'; - this.textContent = (new IntlMessageFormat(localeData['status.show_less'] || 'Show less', locale)).format(); - } - - return false; - }); - - [].forEach.call(document.querySelectorAll('.status__content__spoiler-link'), (spoilerLink) => { - const statusEl = spoilerLink.parentNode.parentNode; - const message = (statusEl.dataset.spoiler === 'expanded') ? (localeData['status.show_less'] || 'Show less') : (localeData['status.show_more'] || 'Show more'); - spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format(); - }); - }); - - delegate(document, '#account_display_name', 'input', ({ target }) => { - const name = document.querySelector('.card .display-name strong'); - if (name) { - if (target.value) { - name.innerHTML = emojify(escapeTextContentForBrowser(target.value)); - } else { - name.textContent = target.dataset.default; - } - } - }); - - delegate(document, '#account_avatar', 'change', ({ target }) => { - const avatar = document.querySelector('.card .avatar img'); - const [file] = target.files || []; - const url = file ? URL.createObjectURL(file) : avatar.dataset.originalSrc; - - avatar.src = url; - }); - - const getProfileAvatarAnimationHandler = (swapTo) => { - //animate avatar gifs on the profile page when moused over - return ({ target }) => { - const swapSrc = target.getAttribute(swapTo); - //only change the img source if autoplay is off and the image src is actually different - if(target.getAttribute('data-autoplay') !== 'true' && target.src !== swapSrc) { - target.src = swapSrc; - } - }; - }; - - delegate(document, 'img#profile_page_avatar', 'mouseover', getProfileAvatarAnimationHandler('data-original')); - - delegate(document, 'img#profile_page_avatar', 'mouseout', getProfileAvatarAnimationHandler('data-static')); - - delegate(document, '#account_header', 'change', ({ target }) => { - const header = document.querySelector('.card .card__img img'); - const [file] = target.files || []; - const url = file ? URL.createObjectURL(file) : header.dataset.originalSrc; - - header.src = url; - }); - - delegate(document, '#account_locked', 'change', ({ target }) => { - const lock = document.querySelector('.card .display-name i'); - - if (lock) { - if (target.checked) { - delete lock.dataset.hidden; - } else { - lock.dataset.hidden = 'true'; - } - } - }); - - delegate(document, '.input-copy input', 'click', ({ target }) => { - target.focus(); - target.select(); - target.setSelectionRange(0, target.value.length); - }); - - delegate(document, '.input-copy button', 'click', ({ target }) => { - const input = target.parentNode.querySelector('.input-copy__wrapper input'); - - const oldReadOnly = input.readonly; - - input.readonly = false; - input.focus(); - input.select(); - input.setSelectionRange(0, input.value.length); - - try { - if (document.execCommand('copy')) { - input.blur(); - target.parentNode.classList.add('copied'); - - setTimeout(() => { - target.parentNode.classList.remove('copied'); - }, 700); - } - } catch (err) { - console.error(err); - } - - input.readonly = oldReadOnly; - }); - - const toggleSidebar = () => { - const sidebar = document.querySelector('.sidebar ul'); - const toggleButton = document.querySelector('.sidebar__toggle__icon'); - - if (sidebar.classList.contains('visible')) { - document.body.style.overflow = null; - toggleButton.setAttribute('aria-expanded', 'false'); + }); } else { - document.body.style.overflow = 'hidden'; - toggleButton.setAttribute('aria-expanded', 'true'); + username.setCustomValidity(''); } + }, 500, { leading: false, trailing: true })); - toggleButton.classList.toggle('active'); - sidebar.classList.toggle('visible'); - }; + delegate(document, '#user_password,#user_password_confirmation', 'input', () => { + const password = document.getElementById('user_password'); + const confirmation = document.getElementById('user_password_confirmation'); + if (!confirmation) return; - delegate(document, '.sidebar__toggle__icon', 'click', () => { - toggleSidebar(); - }); - - delegate(document, '.sidebar__toggle__icon', 'keydown', e => { - if (e.key === ' ' || e.key === 'Enter') { - e.preventDefault(); - toggleSidebar(); + if (confirmation.value && confirmation.value.length > password.maxLength) { + confirmation.setCustomValidity(formatMessage(messages.passwordExceedsLength)); + } else if (password.value && password.value !== confirmation.value) { + confirmation.setCustomValidity(formatMessage(messages.passwordDoesNotMatch)); + } else { + confirmation.setCustomValidity(''); } }); - // Empty the honeypot fields in JS in case something like an extension - // automatically filled them. - delegate(document, '#registration_new_user,#new_user', 'submit', () => { - ['user_website', 'user_confirm_password', 'registration_user_website', 'registration_user_confirm_password'].forEach(id => { - const field = document.getElementById(id); - if (field) { - field.value = ''; - } - }); + delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original')); + delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static')); + + delegate(document, '.status__content__spoiler-link', 'click', function() { + const statusEl = this.parentNode.parentNode; + + if (statusEl.dataset.spoiler === 'expanded') { + statusEl.dataset.spoiler = 'folded'; + this.textContent = (new IntlMessageFormat(localeData['status.show_more'] || 'Show more', locale)).format(); + } else { + statusEl.dataset.spoiler = 'expanded'; + this.textContent = (new IntlMessageFormat(localeData['status.show_less'] || 'Show less', locale)).format(); + } + + return false; + }); + + [].forEach.call(document.querySelectorAll('.status__content__spoiler-link'), (spoilerLink) => { + const statusEl = spoilerLink.parentNode.parentNode; + const message = (statusEl.dataset.spoiler === 'expanded') ? (localeData['status.show_less'] || 'Show less') : (localeData['status.show_more'] || 'Show more'); + spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format(); }); } +delegate(document, '#account_display_name', 'input', ({ target }) => { + const name = document.querySelector('.card .display-name strong'); + if (name) { + if (target.value) { + name.innerHTML = emojify(escapeTextContentForBrowser(target.value)); + } else { + name.textContent = target.dataset.default; + } + } +}); + +delegate(document, '#account_avatar', 'change', ({ target }) => { + const avatar = document.querySelector('.card .avatar img'); + const [file] = target.files || []; + const url = file ? URL.createObjectURL(file) : avatar.dataset.originalSrc; + + avatar.src = url; +}); + +const getProfileAvatarAnimationHandler = (swapTo) => { + //animate avatar gifs on the profile page when moused over + return ({ target }) => { + const swapSrc = target.getAttribute(swapTo); + //only change the img source if autoplay is off and the image src is actually different + if(target.getAttribute('data-autoplay') !== 'true' && target.src !== swapSrc) { + target.src = swapSrc; + } + }; +}; + +delegate(document, 'img#profile_page_avatar', 'mouseover', getProfileAvatarAnimationHandler('data-original')); + +delegate(document, 'img#profile_page_avatar', 'mouseout', getProfileAvatarAnimationHandler('data-static')); + +delegate(document, '#account_header', 'change', ({ target }) => { + const header = document.querySelector('.card .card__img img'); + const [file] = target.files || []; + const url = file ? URL.createObjectURL(file) : header.dataset.originalSrc; + + header.src = url; +}); + +delegate(document, '#account_locked', 'change', ({ target }) => { + const lock = document.querySelector('.card .display-name i'); + + if (lock) { + if (target.checked) { + delete lock.dataset.hidden; + } else { + lock.dataset.hidden = 'true'; + } + } +}); + +delegate(document, '.input-copy input', 'click', ({ target }) => { + target.focus(); + target.select(); + target.setSelectionRange(0, target.value.length); +}); + +delegate(document, '.input-copy button', 'click', ({ target }) => { + const input = target.parentNode.querySelector('.input-copy__wrapper input'); + + const oldReadOnly = input.readonly; + + input.readonly = false; + input.focus(); + input.select(); + input.setSelectionRange(0, input.value.length); + + try { + if (document.execCommand('copy')) { + input.blur(); + target.parentNode.classList.add('copied'); + + setTimeout(() => { + target.parentNode.classList.remove('copied'); + }, 700); + } + } catch (err) { + console.error(err); + } + + input.readonly = oldReadOnly; +}); + +const toggleSidebar = () => { + const sidebar = document.querySelector('.sidebar ul'); + const toggleButton = document.querySelector('.sidebar__toggle__icon'); + + if (sidebar.classList.contains('visible')) { + document.body.style.overflow = null; + toggleButton.setAttribute('aria-expanded', 'false'); + } else { + document.body.style.overflow = 'hidden'; + toggleButton.setAttribute('aria-expanded', 'true'); + } + + toggleButton.classList.toggle('active'); + sidebar.classList.toggle('visible'); +}; + +delegate(document, '.sidebar__toggle__icon', 'click', () => { + toggleSidebar(); +}); + +delegate(document, '.sidebar__toggle__icon', 'keydown', e => { + if (e.key === ' ' || e.key === 'Enter') { + e.preventDefault(); + toggleSidebar(); + } +}); + +// Empty the honeypot fields in JS in case something like an extension +// automatically filled them. +delegate(document, '#registration_new_user,#new_user', 'submit', () => { + ['user_website', 'user_confirm_password', 'registration_user_website', 'registration_user_confirm_password'].forEach(id => { + const field = document.getElementById(id); + if (field) { + field.value = ''; + } + }); +}); function main() { ready(loaded); From c2ef995baae51d7faa1f3c56200e0a54257675d5 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Fri, 18 Aug 2023 15:05:35 +0200 Subject: [PATCH 107/163] Fix: support both DATABASE_URL and DB_PASS (#26295) --- streaming/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/streaming/index.js b/streaming/index.js index 2112ca4336..a241fa3280 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -110,6 +110,11 @@ const pgConfigFromEnv = (env) => { if (env.DATABASE_URL) { baseConfig = dbUrlToConfig(env.DATABASE_URL); + + // Support overriding the database password in the connection URL + if (!baseConfig.password && env.DB_PASS) { + baseConfig.password = env.DB_PASS; + } } else { baseConfig = pgConfigs[environment]; From f37cc8c15b8b84fcb72e0fccf029d8099fe761da Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 18 Aug 2023 16:06:46 +0200 Subject: [PATCH 108/163] Fix already initialized constant warning (#26542) --- lib/http_extensions.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/http_extensions.rb b/lib/http_extensions.rb index 2bc0618c4c..048f85f87b 100644 --- a/lib/http_extensions.rb +++ b/lib/http_extensions.rb @@ -2,9 +2,7 @@ # Monkey patching until https://github.com/httprb/http/pull/757 is merged unless HTTP::Request::METHODS.include?(:purge) - module HTTP - class Request - METHODS = METHODS.dup.push(:purge).freeze - end - end + methods = HTTP::Request::METHODS.dup + HTTP::Request.send(:remove_const, :METHODS) + HTTP::Request.const_set(:METHODS, methods.push(:purge).freeze) end From b4a95b46cd4399420670c8edf1807ad3a6e979ec Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 18 Aug 2023 18:20:55 +0200 Subject: [PATCH 109/163] Change follow recommendation materialized view to be faster in most cases (#26545) Co-authored-by: Renaud Chaput --- app/models/follow_recommendation.rb | 3 +- ...56_create_global_follow_recommendations.rb | 8 +++++ ...30818142253_drop_follow_recommendations.rb | 12 +++++++ db/schema.rb | 20 ++++++------ .../global_follow_recommendations_v01.sql | 32 +++++++++++++++++++ 5 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20230818141056_create_global_follow_recommendations.rb create mode 100644 db/post_migrate/20230818142253_drop_follow_recommendations.rb create mode 100644 db/views/global_follow_recommendations_v01.sql diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 123570b124..9d2648394b 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -2,7 +2,7 @@ # == Schema Information # -# Table name: follow_recommendations +# Table name: global_follow_recommendations # # account_id :bigint(8) primary key # rank :decimal(, ) @@ -11,6 +11,7 @@ class FollowRecommendation < ApplicationRecord self.primary_key = :account_id + self.table_name = :global_follow_recommendations belongs_to :account_summary, foreign_key: :account_id, inverse_of: false belongs_to :account diff --git a/db/migrate/20230818141056_create_global_follow_recommendations.rb b/db/migrate/20230818141056_create_global_follow_recommendations.rb new file mode 100644 index 0000000000..b88c71b9d7 --- /dev/null +++ b/db/migrate/20230818141056_create_global_follow_recommendations.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class CreateGlobalFollowRecommendations < ActiveRecord::Migration[7.0] + def change + create_view :global_follow_recommendations, materialized: { no_data: true } + safety_assured { add_index :global_follow_recommendations, :account_id, unique: true } + end +end diff --git a/db/post_migrate/20230818142253_drop_follow_recommendations.rb b/db/post_migrate/20230818142253_drop_follow_recommendations.rb new file mode 100644 index 0000000000..95913d6caa --- /dev/null +++ b/db/post_migrate/20230818142253_drop_follow_recommendations.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class DropFollowRecommendations < ActiveRecord::Migration[7.0] + def up + drop_view :follow_recommendations, materialized: true + end + + def down + create_view :follow_recommendations, version: 2, materialized: { no_data: true } + safety_assured { add_index :follow_recommendations, :account_id, unique: true } + end +end diff --git a/db/schema.rb b/db/schema.rb index 7cca196ea0..8b758fc7df 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_08_14_223300) do +ActiveRecord::Schema[7.0].define(version: 2023_08_18_142253) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1331,34 +1331,36 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_14_223300) do SQL add_index "account_summaries", ["account_id"], name: "index_account_summaries_on_account_id", unique: true - create_view "follow_recommendations", materialized: true, sql_definition: <<-SQL + create_view "global_follow_recommendations", materialized: true, sql_definition: <<-SQL SELECT t0.account_id, sum(t0.rank) AS rank, array_agg(t0.reason) AS reason FROM ( SELECT account_summaries.account_id, ((count(follows.id))::numeric / (1.0 + (count(follows.id))::numeric)) AS rank, 'most_followed'::text AS reason - FROM (((follows + FROM ((follows JOIN account_summaries ON ((account_summaries.account_id = follows.target_account_id))) JOIN users ON ((users.account_id = follows.account_id))) - LEFT JOIN follow_recommendation_suppressions ON ((follow_recommendation_suppressions.account_id = follows.target_account_id))) - WHERE ((users.current_sign_in_at >= (now() - 'P30D'::interval)) AND (account_summaries.sensitive = false) AND (follow_recommendation_suppressions.id IS NULL)) + WHERE ((users.current_sign_in_at >= (now() - 'P30D'::interval)) AND (account_summaries.sensitive = false) AND (NOT (EXISTS ( SELECT 1 + FROM follow_recommendation_suppressions + WHERE (follow_recommendation_suppressions.account_id = follows.target_account_id))))) GROUP BY account_summaries.account_id HAVING (count(follows.id) >= 5) UNION ALL SELECT account_summaries.account_id, (sum((status_stats.reblogs_count + status_stats.favourites_count)) / (1.0 + sum((status_stats.reblogs_count + status_stats.favourites_count)))) AS rank, 'most_interactions'::text AS reason - FROM (((status_stats + FROM ((status_stats JOIN statuses ON ((statuses.id = status_stats.status_id))) JOIN account_summaries ON ((account_summaries.account_id = statuses.account_id))) - LEFT JOIN follow_recommendation_suppressions ON ((follow_recommendation_suppressions.account_id = statuses.account_id))) - WHERE ((statuses.id >= (((date_part('epoch'::text, (now() - 'P30D'::interval)) * (1000)::double precision))::bigint << 16)) AND (account_summaries.sensitive = false) AND (follow_recommendation_suppressions.id IS NULL)) + WHERE ((statuses.id >= (((date_part('epoch'::text, (now() - 'P30D'::interval)) * (1000)::double precision))::bigint << 16)) AND (account_summaries.sensitive = false) AND (NOT (EXISTS ( SELECT 1 + FROM follow_recommendation_suppressions + WHERE (follow_recommendation_suppressions.account_id = statuses.account_id))))) GROUP BY account_summaries.account_id HAVING (sum((status_stats.reblogs_count + status_stats.favourites_count)) >= (5)::numeric)) t0 GROUP BY t0.account_id ORDER BY (sum(t0.rank)) DESC; SQL - add_index "follow_recommendations", ["account_id"], name: "index_follow_recommendations_on_account_id", unique: true + add_index "global_follow_recommendations", ["account_id"], name: "index_global_follow_recommendations_on_account_id", unique: true end diff --git a/db/views/global_follow_recommendations_v01.sql b/db/views/global_follow_recommendations_v01.sql new file mode 100644 index 0000000000..de693c9fcd --- /dev/null +++ b/db/views/global_follow_recommendations_v01.sql @@ -0,0 +1,32 @@ +SELECT + account_id, + sum(rank) AS rank, + array_agg(reason) AS reason +FROM ( + SELECT + account_summaries.account_id AS account_id, + count(follows.id) / (1.0 + count(follows.id)) AS rank, + 'most_followed' AS reason + FROM follows + INNER JOIN account_summaries ON account_summaries.account_id = follows.target_account_id + INNER JOIN users ON users.account_id = follows.account_id + WHERE users.current_sign_in_at >= (now() - interval '30 days') + AND account_summaries.sensitive = 'f' + AND NOT EXISTS (SELECT 1 FROM follow_recommendation_suppressions WHERE follow_recommendation_suppressions.account_id = follows.target_account_id) + GROUP BY account_summaries.account_id + HAVING count(follows.id) >= 5 + UNION ALL + SELECT account_summaries.account_id AS account_id, + sum(status_stats.reblogs_count + status_stats.favourites_count) / (1.0 + sum(status_stats.reblogs_count + status_stats.favourites_count)) AS rank, + 'most_interactions' AS reason + FROM status_stats + INNER JOIN statuses ON statuses.id = status_stats.status_id + INNER JOIN account_summaries ON account_summaries.account_id = statuses.account_id + WHERE statuses.id >= ((date_part('epoch', now() - interval '30 days') * 1000)::bigint << 16) + AND account_summaries.sensitive = 'f' + AND NOT EXISTS (SELECT 1 FROM follow_recommendation_suppressions WHERE follow_recommendation_suppressions.account_id = statuses.account_id) + GROUP BY account_summaries.account_id + HAVING sum(status_stats.reblogs_count + status_stats.favourites_count) >= 5 +) t0 +GROUP BY account_id +ORDER BY rank DESC From 330f7e5e7e495d5e6ef21e5b605ca1f1b4935080 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 18 Aug 2023 18:24:32 +0200 Subject: [PATCH 110/163] Fix profile picture preview (#26538) --- app/javascript/packs/public.jsx | 12 ++---------- app/javascript/styles/mastodon/forms.scss | 10 ++++++++++ app/views/settings/profiles/show.html.haml | 16 ++++++++-------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/javascript/packs/public.jsx b/app/javascript/packs/public.jsx index 9e30ecaa01..1d917d60ee 100644 --- a/app/javascript/packs/public.jsx +++ b/app/javascript/packs/public.jsx @@ -231,8 +231,8 @@ delegate(document, '#account_display_name', 'input', ({ target }) => { } }); -delegate(document, '#account_avatar', 'change', ({ target }) => { - const avatar = document.querySelector('.card .avatar img'); +delegate(document, '#edit_profile input[type=file]', 'change', ({ target }) => { + const avatar = document.getElementById(target.id + '-preview'); const [file] = target.files || []; const url = file ? URL.createObjectURL(file) : avatar.dataset.originalSrc; @@ -254,14 +254,6 @@ delegate(document, 'img#profile_page_avatar', 'mouseover', getProfileAvatarAnima delegate(document, 'img#profile_page_avatar', 'mouseout', getProfileAvatarAnimationHandler('data-static')); -delegate(document, '#account_header', 'change', ({ target }) => { - const header = document.querySelector('.card .card__img img'); - const [file] = target.files || []; - const url = file ? URL.createObjectURL(file) : header.dataset.originalSrc; - - header.src = url; -}); - delegate(document, '#account_locked', 'change', ({ target }) => { const lock = document.querySelector('.card .display-name i'); diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index f69b699a0a..beb45ab6e9 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -309,9 +309,19 @@ code { border-radius: 4px; background: url('images/void.png'); + &[src$='missing.png'] { + visibility: hidden; + } + &:last-child { margin-bottom: 0; } + + &#account_avatar-preview { + width: 90px; + height: 90px; + object-fit: cover; + } } } diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 92b7f42569..7c13dc7f44 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -35,10 +35,10 @@ .fields-group = f.input :avatar, wrapper: :with_block_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT)) - - if @account.avatar.present? - .fields-row__column.fields-row__column-6 - .fields-group - = image_tag @account.avatar.url, class: 'fields-group__thumbnail', width: 90, height: 90 + .fields-row__column.fields-row__column-6 + .fields-group + = image_tag @account.avatar.url, class: 'fields-group__thumbnail', id: 'account_avatar-preview' + - if @account.avatar.present? = link_to settings_profile_picture_path('avatar'), data: { method: :delete }, class: 'link-button link-button--destructive' do = fa_icon 'trash fw' = t('generic.delete') @@ -48,10 +48,10 @@ .fields-group = f.input :header, wrapper: :with_block_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT)) - - if @account.header.present? - .fields-row__column.fields-row__column-6 - .fields-group - = image_tag @account.header.url, class: 'fields-group__thumbnail' + .fields-row__column.fields-row__column-6 + .fields-group + = image_tag @account.header.url, class: 'fields-group__thumbnail', id: 'account_header-preview' + - if @account.header.present? = link_to settings_profile_picture_path('header'), data: { method: :delete }, class: 'link-button link-button--destructive' do = fa_icon 'trash fw' = t('generic.delete') From 89d2b28e0b50d5ab508aa21eb545649ca10f41ab Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Mon, 21 Aug 2023 03:44:35 -0300 Subject: [PATCH 111/163] Add ability to delete avatar or header picture via the API (#25124) Co-authored-by: Claire --- app/controllers/api/v1/profiles_controller.rb | 29 +++++ config/routes/api.rb | 1 + spec/requests/api/v1/profiles_spec.rb | 112 ++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 app/controllers/api/v1/profiles_controller.rb create mode 100644 spec/requests/api/v1/profiles_spec.rb diff --git a/app/controllers/api/v1/profiles_controller.rb b/app/controllers/api/v1/profiles_controller.rb new file mode 100644 index 0000000000..f781f00896 --- /dev/null +++ b/app/controllers/api/v1/profiles_controller.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Api::V1::ProfilesController < Api::BaseController + before_action -> { doorkeeper_authorize! :write, :'write:accounts' } + before_action :require_user! + before_action :set_image + before_action :validate_image_param + + def destroy + @account = current_account + UpdateAccountService.new.call(@account, { @image => nil }, raise_error: true) + ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + render json: @account, serializer: REST::CredentialAccountSerializer + end + + private + + def set_image + @image = params[:image] + end + + def validate_image_param + raise(Mastodon::InvalidParameterError, 'Image must be either "avatar" or "header"') unless valid_image? + end + + def valid_image? + %w(avatar header).include?(@image) + end +end diff --git a/config/routes/api.rb b/config/routes/api.rb index 48c4c65220..dc6aea7f72 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -95,6 +95,7 @@ namespace :api, format: false do resources :filters, only: [:index, :create, :show, :update, :destroy] resources :endorsements, only: [:index] resources :markers, only: [:index, :create] + resources :profile, only: :destroy, param: :image, controller: 'profiles' namespace :apps do get :verify_credentials, to: 'credentials#show' diff --git a/spec/requests/api/v1/profiles_spec.rb b/spec/requests/api/v1/profiles_spec.rb new file mode 100644 index 0000000000..9fa5fd329d --- /dev/null +++ b/spec/requests/api/v1/profiles_spec.rb @@ -0,0 +1,112 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Deleting profile images' do + let(:account) do + Fabricate( + :account, + avatar: fixture_file_upload('avatar.gif', 'image/gif'), + header: fixture_file_upload('attachment.jpg', 'image/jpeg') + ) + end + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: account.user.id, scopes: scopes) } + let(:scopes) { 'write:accounts' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'DELETE /api/v1/profile' do + before do + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + end + + context 'when deleting an avatar' do + context 'with wrong scope' do + before do + delete '/api/v1/profile/avatar', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read' + end + + it 'returns http success' do + delete '/api/v1/profile/avatar', headers: headers + + expect(response).to have_http_status(200) + end + + it 'deletes the avatar' do + delete '/api/v1/profile/avatar', headers: headers + + account.reload + + expect(account.avatar).to_not exist + end + + it 'does not delete the header' do + delete '/api/v1/profile/avatar', headers: headers + + account.reload + + expect(account.header).to exist + end + + it 'queues up an account update distribution' do + delete '/api/v1/profile/avatar', headers: headers + + expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + end + end + + context 'when deleting a header' do + context 'with wrong scope' do + before do + delete '/api/v1/profile/header', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read' + end + + it 'returns http success' do + delete '/api/v1/profile/header', headers: headers + + expect(response).to have_http_status(200) + end + + it 'does not delete the avatar' do + delete '/api/v1/profile/header', headers: headers + + account.reload + + expect(account.avatar).to exist + end + + it 'deletes the header' do + delete '/api/v1/profile/header', headers: headers + + account.reload + + expect(account.header).to_not exist + end + + it 'queues up an account update distribution' do + delete '/api/v1/profile/header', headers: headers + + expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + end + end + + context 'when provided picture value is invalid' do + it 'returns http bad request' do + delete '/api/v1/profile/invalid', headers: headers + + expect(response).to have_http_status(400) + end + + it 'does not queue up an account update distribution' do + delete '/api/v1/profile/invalid', headers: headers + + expect(ActivityPub::UpdateDistributionWorker).to_not have_received(:perform_async).with(account.id) + end + end + end +end From 6437d0168fa0ee8e71b23ebf83be854d96732242 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Mon, 21 Aug 2023 08:51:37 +0200 Subject: [PATCH 112/163] Do not start LibreTranslate and Elasticsearch on GitHub Codespaces (#26382) --- .devcontainer/devcontainer.json | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 17208a84e9..ce14169aae 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,31 +1,29 @@ -// For more details, see https://aka.ms/devcontainer.json. { "name": "Mastodon", "dockerComposeFile": "docker-compose.yml", "service": "app", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", - // Features to add to the dev container. More info: https://containers.dev/features. "features": { "ghcr.io/devcontainers/features/sshd:1": {} }, - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // This can be used to network with other containers or the host. + "runServices": ["app", "db", "redis"], + "forwardPorts": [3000, 4000], - // Use 'postCreateCommand' to run commands after the container is created. + "containerEnv": { + "ES_ENABLED": "", + "LIBRE_TRANSLATE_ENDPOINT": "" + }, + "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", "postCreateCommand": ".devcontainer/post-create.sh", "waitFor": "postCreateCommand", - // Configure tool-specific properties. "customizations": { - // Configure properties specific to VS Code. "vscode": { - // Set *default* container specific settings.json values on container create. "settings": {}, - // Add the IDs of extensions you want installed when the container is created. "extensions": ["EditorConfig.EditorConfig", "webben.browserslist"] } } From a1aaba08a73db5dccf2b122203ee47eb4cfd002b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 09:06:33 +0200 Subject: [PATCH 113/163] Update dependency core-js to v3.32.1 (#26548) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b851a088d..5a78fcaf33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4301,9 +4301,9 @@ core-js@^2.5.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.30.2: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.0.tgz#7643d353d899747ab1f8b03d2803b0312a0fb3b6" - integrity sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww== + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" + integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== core-util-is@~1.0.0: version "1.0.3" From d38310bed22bdf2be6ef0e49f325715685b74400 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:13:21 +0200 Subject: [PATCH 114/163] Update eslint (non-major) (#26567) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 365 +++++++++++++++++++++++++++++------------------------- 1 file changed, 197 insertions(+), 168 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5a78fcaf33..65a0eb0363 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1253,10 +1253,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" - integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1268,10 +1268,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" - integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== +"@eslint/js@^8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d" + integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== "@floating-ui/core@^1.3.1": version "1.3.1" @@ -2570,49 +2570,48 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz#e751e148aab7ccaf8a7bfd370f7ce9e6bdd1f3f4" - integrity sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A== + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz#53428b616f7d80fe879f45a08f11cc0f0b62cf13" + integrity sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.3.0" - "@typescript-eslint/type-utils" "6.3.0" - "@typescript-eslint/utils" "6.3.0" - "@typescript-eslint/visitor-keys" "6.3.0" + "@typescript-eslint/scope-manager" "6.4.0" + "@typescript-eslint/type-utils" "6.4.0" + "@typescript-eslint/utils" "6.4.0" + "@typescript-eslint/visitor-keys" "6.4.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" natural-compare "^1.4.0" - natural-compare-lite "^1.4.0" semver "^7.5.4" ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.3.0.tgz#359684c443f4f848db3c4f14674f544f169c8f46" - integrity sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg== + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.4.0.tgz#47e7c6e22ff1248e8675d95f488890484de67600" + integrity sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg== dependencies: - "@typescript-eslint/scope-manager" "6.3.0" - "@typescript-eslint/types" "6.3.0" - "@typescript-eslint/typescript-estree" "6.3.0" - "@typescript-eslint/visitor-keys" "6.3.0" + "@typescript-eslint/scope-manager" "6.4.0" + "@typescript-eslint/types" "6.4.0" + "@typescript-eslint/typescript-estree" "6.4.0" + "@typescript-eslint/visitor-keys" "6.4.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz#6b74e338c4b88d5e1dfc1a28c570dd5cf8c86b09" - integrity sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ== +"@typescript-eslint/scope-manager@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz#3048e4262ba3eafa4e2e69b08912d9037ec646ae" + integrity sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig== dependencies: - "@typescript-eslint/types" "6.3.0" - "@typescript-eslint/visitor-keys" "6.3.0" + "@typescript-eslint/types" "6.4.0" + "@typescript-eslint/visitor-keys" "6.4.0" -"@typescript-eslint/type-utils@6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz#3bf89ccd36621ddec1b7f8246afe467c67adc247" - integrity sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ== +"@typescript-eslint/type-utils@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz#c8ac92716ed6a9d5443aa3e342910355b0796ba0" + integrity sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg== dependencies: - "@typescript-eslint/typescript-estree" "6.3.0" - "@typescript-eslint/utils" "6.3.0" + "@typescript-eslint/typescript-estree" "6.4.0" + "@typescript-eslint/utils" "6.4.0" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2621,10 +2620,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== -"@typescript-eslint/types@6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.3.0.tgz#84517f1427923e714b8418981e493b6635ab4c9d" - integrity sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg== +"@typescript-eslint/types@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.4.0.tgz#5b109a59a805f0d8d375895e42d9e5f0037f66ee" + integrity sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg== "@typescript-eslint/typescript-estree@5.59.0": version "5.59.0" @@ -2639,30 +2638,30 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz#20e1e10e2f51cdb9e19a2751215cac92c003643c" - integrity sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg== +"@typescript-eslint/typescript-estree@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz#3c58d20632db93fec3d6ab902acbedf593d37276" + integrity sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA== dependencies: - "@typescript-eslint/types" "6.3.0" - "@typescript-eslint/visitor-keys" "6.3.0" + "@typescript-eslint/types" "6.4.0" + "@typescript-eslint/visitor-keys" "6.4.0" 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.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.3.0.tgz#0898c5e374372c2092ca1b979ea7ee9cc020ce84" - integrity sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q== +"@typescript-eslint/utils@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.4.0.tgz#23e996b693603c5924b1fbb733cc73196256baa5" + integrity sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.3.0" - "@typescript-eslint/types" "6.3.0" - "@typescript-eslint/typescript-estree" "6.3.0" + "@typescript-eslint/scope-manager" "6.4.0" + "@typescript-eslint/types" "6.4.0" + "@typescript-eslint/typescript-estree" "6.4.0" semver "^7.5.4" "@typescript-eslint/visitor-keys@5.59.0": @@ -2673,12 +2672,12 @@ "@typescript-eslint/types" "5.59.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz#8d09aa3e389ae0971426124c155ac289afbe450a" - integrity sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw== +"@typescript-eslint/visitor-keys@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz#96a426cdb1add28274abd7a34aefe27f8b7d51ef" + integrity sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA== dependencies: - "@typescript-eslint/types" "6.3.0" + "@typescript-eslint/types" "6.4.0" eslint-visitor-keys "^3.4.1" "@webassemblyjs/ast@1.9.0": @@ -3270,6 +3269,13 @@ async@^3.2.3: resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -5155,7 +5161,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.21.2: +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3: version "1.22.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== @@ -5200,46 +5206,6 @@ es-abstract@^1.17.2, es-abstract@^1.21.2: unbox-primitive "^1.0.2" which-typed-array "^1.1.10" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" @@ -5260,6 +5226,26 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-iterator-helpers@^1.0.12: + version "1.0.13" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" + integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.3" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.0" + safe-array-concat "^1.0.0" + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -5327,13 +5313,13 @@ eslint-config-prettier@^9.0.0: integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.5: version "3.6.0" @@ -5373,9 +5359,9 @@ eslint-plugin-formatjs@^4.10.1: unicode-emoji-utils "^1.1.1" eslint-plugin-import@~2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" - integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== dependencies: array-includes "^3.1.6" array.prototype.findlastindex "^1.2.2" @@ -5386,20 +5372,19 @@ eslint-plugin-import@~2.28.0: eslint-import-resolver-node "^0.3.7" eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.12.1" + is-core-module "^2.13.0" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.6" object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.3" semver "^6.3.1" tsconfig-paths "^3.14.2" eslint-plugin-jsdoc@^46.1.0: - version "46.4.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.6.tgz#5226461eda61b5920297cbe02c3b17bc9423cf0b" - integrity sha512-z4SWYnJfOqftZI+b3RM9AtWL1vF/sLWE/LlO9yOKDof9yN2+n3zOdOJTGX/pRE/xnPsooOLG2Rq6e4d+XW3lNw== + version "46.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.5.0.tgz#02e7945701a01fab76e7ced850d4d1eea63c23c0" + integrity sha512-aulXdA4I1dyWpzyS1Nh/GNoS6PavzeucxEapnMR4JUERowWvaEk2Y4A5irpHAcdXtBBHLVe8WIhdXNjoAlGQgA== dependencies: "@es-joy/jsdoccomment" "~0.40.1" are-docs-informative "^0.0.2" @@ -5452,14 +5437,15 @@ eslint-plugin-react-hooks@^4.6.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@~7.33.0: - version "7.33.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz#bc27cccf860ae45413a4a4150bf0977345c1ceab" - integrity sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA== + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -5488,20 +5474,20 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" - integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.41.0: - version "8.46.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" - integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== + version "8.47.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806" + integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.1" - "@eslint/js" "^8.46.0" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "^8.47.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5512,7 +5498,7 @@ eslint@^8.41.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.2" + eslint-visitor-keys "^3.4.3" espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" @@ -6257,9 +6243,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" @@ -6843,6 +6829,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -6884,20 +6877,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.5.0: +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" -is-core-module@^2.9.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6969,6 +6955,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -6989,6 +6982,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -7150,15 +7150,11 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-url@^1.2.4: version "1.2.4" @@ -7276,6 +7272,17 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterator.prototype@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" + integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== + dependencies: + define-properties "^1.1.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + has-tostringtag "^1.0.0" + reflect.getprototypeof "^1.0.3" + jackspeak@^2.0.3: version "2.2.1" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" @@ -7856,7 +7863,17 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jsx-ast-utils@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== @@ -8547,11 +8564,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -10213,6 +10225,18 @@ redux@^4.0.0, redux@^4.2.1: dependencies: "@babel/runtime" "^7.9.2" +reflect.getprototypeof@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" + integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -10390,7 +10414,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.3: +resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -10399,7 +10423,7 @@ resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.19.0, resolve@^1.22.1: +resolve@^1.19.0: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -11257,7 +11281,6 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -11791,9 +11814,9 @@ trim-newlines@^4.0.2: integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ== ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.2.tgz#7c094f753b6705ee4faee25c3c684ade52d66d99" + integrity sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ== tsconfig-paths@^3.14.2: version "3.14.2" @@ -12505,6 +12528,24 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" @@ -12520,7 +12561,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.10: +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: version "1.1.11" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== @@ -12531,18 +12572,6 @@ which-typed-array@^1.1.10: gopd "^1.0.1" has-tostringtag "^1.0.0" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" From 5458629e609519fb55c3598283d567e93baa23ec Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 21 Aug 2023 15:47:09 +0200 Subject: [PATCH 115/163] Refactor `Api::V1::ProfilesController` into two separate controllers (#26573) --- .../api/v1/profile/avatars_controller.rb | 13 +++++++++ .../api/v1/profile/headers_controller.rb | 13 +++++++++ app/controllers/api/v1/profiles_controller.rb | 29 ------------------- config/routes/api.rb | 6 +++- spec/requests/api/v1/profiles_spec.rb | 14 --------- 5 files changed, 31 insertions(+), 44 deletions(-) create mode 100644 app/controllers/api/v1/profile/avatars_controller.rb create mode 100644 app/controllers/api/v1/profile/headers_controller.rb delete mode 100644 app/controllers/api/v1/profiles_controller.rb diff --git a/app/controllers/api/v1/profile/avatars_controller.rb b/app/controllers/api/v1/profile/avatars_controller.rb new file mode 100644 index 0000000000..bc4d01a597 --- /dev/null +++ b/app/controllers/api/v1/profile/avatars_controller.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Api::V1::Profile::AvatarsController < Api::BaseController + before_action -> { doorkeeper_authorize! :write, :'write:accounts' } + before_action :require_user! + + def destroy + @account = current_account + UpdateAccountService.new.call(@account, { avatar: nil }, raise_error: true) + ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + render json: @account, serializer: REST::CredentialAccountSerializer + end +end diff --git a/app/controllers/api/v1/profile/headers_controller.rb b/app/controllers/api/v1/profile/headers_controller.rb new file mode 100644 index 0000000000..9f4daa2f77 --- /dev/null +++ b/app/controllers/api/v1/profile/headers_controller.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Api::V1::Profile::HeadersController < Api::BaseController + before_action -> { doorkeeper_authorize! :write, :'write:accounts' } + before_action :require_user! + + def destroy + @account = current_account + UpdateAccountService.new.call(@account, { header: nil }, raise_error: true) + ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + render json: @account, serializer: REST::CredentialAccountSerializer + end +end diff --git a/app/controllers/api/v1/profiles_controller.rb b/app/controllers/api/v1/profiles_controller.rb deleted file mode 100644 index f781f00896..0000000000 --- a/app/controllers/api/v1/profiles_controller.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::ProfilesController < Api::BaseController - before_action -> { doorkeeper_authorize! :write, :'write:accounts' } - before_action :require_user! - before_action :set_image - before_action :validate_image_param - - def destroy - @account = current_account - UpdateAccountService.new.call(@account, { @image => nil }, raise_error: true) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) - render json: @account, serializer: REST::CredentialAccountSerializer - end - - private - - def set_image - @image = params[:image] - end - - def validate_image_param - raise(Mastodon::InvalidParameterError, 'Image must be either "avatar" or "header"') unless valid_image? - end - - def valid_image? - %w(avatar header).include?(@image) - end -end diff --git a/config/routes/api.rb b/config/routes/api.rb index dc6aea7f72..66eb82f59a 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -95,7 +95,11 @@ namespace :api, format: false do resources :filters, only: [:index, :create, :show, :update, :destroy] resources :endorsements, only: [:index] resources :markers, only: [:index, :create] - resources :profile, only: :destroy, param: :image, controller: 'profiles' + + namespace :profile do + resource :avatar, only: :destroy + resource :header, only: :destroy + end namespace :apps do get :verify_credentials, to: 'credentials#show' diff --git a/spec/requests/api/v1/profiles_spec.rb b/spec/requests/api/v1/profiles_spec.rb index 9fa5fd329d..26a9b848e5 100644 --- a/spec/requests/api/v1/profiles_spec.rb +++ b/spec/requests/api/v1/profiles_spec.rb @@ -94,19 +94,5 @@ RSpec.describe 'Deleting profile images' do expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) end end - - context 'when provided picture value is invalid' do - it 'returns http bad request' do - delete '/api/v1/profile/invalid', headers: headers - - expect(response).to have_http_status(400) - end - - it 'does not queue up an account update distribution' do - delete '/api/v1/profile/invalid', headers: headers - - expect(ActivityPub::UpdateDistributionWorker).to_not have_received(:perform_async).with(account.id) - end - end end end From b8ca46f56873c2d7d9c7ed40848e4d92c1a41652 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 21 Aug 2023 16:09:26 +0200 Subject: [PATCH 116/163] Add auto-refresh of accounts we get new messages/edits of (#26510) --- app/lib/activitypub/activity/create.rb | 2 ++ app/lib/activitypub/activity/update.rb | 2 ++ app/models/account.rb | 8 ++++++++ app/workers/account_refresh_worker.rb | 14 ++++++++++++++ 4 files changed, 26 insertions(+) create mode 100644 app/workers/account_refresh_worker.rb diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 28cea8ec04..fedfa39dee 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -4,6 +4,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity include FormattingHelper def perform + @account.schedule_refresh_if_stale! + dereference_object! case @object['type'] diff --git a/app/lib/activitypub/activity/update.rb b/app/lib/activitypub/activity/update.rb index 8e72e08237..0a7762ee39 100644 --- a/app/lib/activitypub/activity/update.rb +++ b/app/lib/activitypub/activity/update.rb @@ -2,6 +2,8 @@ class ActivityPub::Activity::Update < ActivityPub::Activity def perform + @account.schedule_refresh_if_stale! + dereference_object! if equals_or_includes_any?(@object['type'], %w(Application Group Organization Person Service)) diff --git a/app/models/account.rb b/app/models/account.rb index 6b6cb8ee56..b1cb9eb5db 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -63,6 +63,8 @@ class Account < ApplicationRecord trust_level ) + BACKGROUND_REFRESH_INTERVAL = 1.week.freeze + USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i URL_PREFIX_RE = %r{\Ahttp(s?)://[^/]+} @@ -209,6 +211,12 @@ class Account < ApplicationRecord last_webfingered_at.nil? || last_webfingered_at <= 1.day.ago end + def schedule_refresh_if_stale! + return unless last_webfingered_at.present? && last_webfingered_at <= BACKGROUND_REFRESH_INTERVAL.ago + + AccountRefreshWorker.perform_in(rand(6.hours.to_i), id) + end + def refresh! ResolveAccountService.new.call(acct) unless local? end diff --git a/app/workers/account_refresh_worker.rb b/app/workers/account_refresh_worker.rb new file mode 100644 index 0000000000..08b5bab8da --- /dev/null +++ b/app/workers/account_refresh_worker.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class AccountRefreshWorker + include Sidekiq::Worker + + sidekiq_options queue: 'pull', retry: 3, dead: false, lock: :until_executed, lock_ttl: 1.day.to_i + + def perform(account_id) + account = Account.find_by(id: account_id) + return if account.nil? || account.last_webfingered_at > Account::BACKGROUND_REFRESH_INTERVAL.ago + + ResolveAccountService.new.call(account) + end +end From 0ce3130ef8ccb05d5090ad04746faf18716ac75d Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 21 Aug 2023 16:50:22 +0200 Subject: [PATCH 117/163] Add Elasticsearch cluster health check and indexes mismatch check to dashboard (#26448) --- app/chewy/instances_index.rb | 2 +- .../admin/system_check/elasticsearch_check.rb | 61 ++++++++++++++++++- config/locales/en.yml | 14 +++++ .../system_check/elasticsearch_check_spec.rb | 35 ++++++++++- 4 files changed, 105 insertions(+), 7 deletions(-) diff --git a/app/chewy/instances_index.rb b/app/chewy/instances_index.rb index 0d58167dc8..8f10d13b6d 100644 --- a/app/chewy/instances_index.rb +++ b/app/chewy/instances_index.rb @@ -6,7 +6,7 @@ class InstancesIndex < Chewy::Index index_scope ::Instance.searchable root date_detection: false do - field :domain, type: 'text', index_prefixes: { min_chars: 1 } + field :domain, type: 'text', index_prefixes: { min_chars: 1, max_chars: 5 } field :accounts_count, type: 'long' end end diff --git a/app/lib/admin/system_check/elasticsearch_check.rb b/app/lib/admin/system_check/elasticsearch_check.rb index 0b55be3501..a6f1f164ae 100644 --- a/app/lib/admin/system_check/elasticsearch_check.rb +++ b/app/lib/admin/system_check/elasticsearch_check.rb @@ -1,6 +1,13 @@ # frozen_string_literal: true class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck + INDEXES = [ + InstancesIndex, + AccountsIndex, + TagsIndex, + StatusesIndex, + ].freeze + def skip? !current_user.can?(:view_devops) end @@ -8,11 +15,15 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck def pass? return true unless Chewy.enabled? - running_version.present? && compatible_version? + running_version.present? && compatible_version? && cluster_health['status'] == 'green' && indexes_match? && preset_matches? + rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error + false end def message - if running_version.present? + if running_version.blank? + Admin::SystemCheck::Message.new(:elasticsearch_running_check) + elsif !compatible_version? Admin::SystemCheck::Message.new( :elasticsearch_version_check, I18n.t( @@ -21,13 +32,32 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck required_version: required_version ) ) + elsif !indexes_match? + Admin::SystemCheck::Message.new( + :elasticsearch_index_mismatch, + mismatched_indexes.join(' ') + ) + elsif cluster_health['status'] == 'red' + Admin::SystemCheck::Message.new(:elasticsearch_health_red) + elsif cluster_health['number_of_nodes'] < 2 && es_preset != 'single_node_cluster' + Admin::SystemCheck::Message.new(:elasticsearch_preset_single_node, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') + elsif Chewy.client.indices.get_settings['chewy_specifications'].dig('settings', 'index', 'number_of_replicas')&.to_i&.positive? && es_preset == 'single_node_cluster' + Admin::SystemCheck::Message.new(:elasticsearch_reset_chewy) + elsif cluster_health['status'] == 'yellow' + Admin::SystemCheck::Message.new(:elasticsearch_health_yellow) else - Admin::SystemCheck::Message.new(:elasticsearch_running_check) + Admin::SystemCheck::Message.new(:elasticsearch_preset, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') end + rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error + Admin::SystemCheck::Message.new(:elasticsearch_running_check) end private + def cluster_health + @cluster_health ||= Chewy.client.cluster.health + end + def running_version @running_version ||= begin Chewy.client.info['version']['number'] @@ -49,5 +79,30 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck Gem::Version.new(running_version) >= Gem::Version.new(required_version) || Gem::Version.new(compatible_wire_version) >= Gem::Version.new(required_version) + rescue ArgumentError + false + end + + def mismatched_indexes + @mismatched_indexes ||= INDEXES.filter_map do |klass| + klass.index_name if Chewy.client.indices.get_mapping[klass.index_name]&.deep_symbolize_keys != klass.mappings_hash + end + end + + def indexes_match? + mismatched_indexes.empty? + end + + def es_preset + ENV.fetch('ES_PRESET', 'single_node_cluster') + end + + def preset_matches? + case es_preset + when 'single_node_cluster' + cluster_health['number_of_nodes'] == 1 + else + cluster_health['number_of_nodes'] > 1 + end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 4a052e0003..389b7aa661 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -814,6 +814,20 @@ en: system_checks: database_schema_check: message_html: There are pending database migrations. Please run them to ensure the application behaves as expected + elasticsearch_health_red: + message_html: Elasticsearch cluster is unhealthy (red status), search features are unavailable + elasticsearch_health_yellow: + message_html: Elasticsearch cluster is unhealthy (yellow status), you may want to investigate the reason + elasticsearch_index_mismatch: + message_html: Elasticsearch index mappings are outdated. Please run tootctl search deploy --only=%{value} + elasticsearch_preset: + action: See documentation + message_html: Your Elasticsearch cluster has more than one node, but Mastodon is not configured to use them. + elasticsearch_preset_single_node: + action: See documentation + message_html: Your Elasticsearch cluster has only one node, ES_PRESET should be set to single_node_cluster. + elasticsearch_reset_chewy: + message_html: Your Elasticsearch system index is outdated due to a setting change. Please run tootctl search deploy --reset-chewy to update it. elasticsearch_running_check: message_html: Could not connect to Elasticsearch. Please check that it is running, or disable full-text search elasticsearch_version_check: diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb index 4982159269..bf518b56e8 100644 --- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -11,7 +11,25 @@ describe Admin::SystemCheck::ElasticsearchCheck do describe 'pass?' do context 'when chewy is enabled' do - before { allow(Chewy).to receive(:enabled?).and_return(true) } + before do + allow(Chewy).to receive(:enabled?).and_return(true) + allow(Chewy.client.cluster).to receive(:health).and_return({ 'status' => 'green', 'number_of_nodes' => 1 }) + allow(Chewy.client.indices).to receive(:get_mapping).and_return({ + AccountsIndex.index_name => AccountsIndex.mappings_hash.deep_stringify_keys, + StatusesIndex.index_name => StatusesIndex.mappings_hash.deep_stringify_keys, + InstancesIndex.index_name => InstancesIndex.mappings_hash.deep_stringify_keys, + TagsIndex.index_name => TagsIndex.mappings_hash.deep_stringify_keys, + }) + allow(Chewy.client.indices).to receive(:get_settings).and_return({ + 'chewy_specifications' => { + 'settings' => { + 'index' => { + 'number_of_replicas' => 0, + }, + }, + }, + }) + end context 'when running version is present and high enough' do before do @@ -67,8 +85,19 @@ describe Admin::SystemCheck::ElasticsearchCheck do end describe 'message' do + before do + allow(Chewy).to receive(:enabled?).and_return(true) + allow(Chewy.client.cluster).to receive(:health).and_return({ 'status' => 'green', 'number_of_nodes' => 1 }) + allow(Chewy.client.indices).to receive(:get_mapping).and_return({ + AccountsIndex.index_name => AccountsIndex.mappings_hash.deep_stringify_keys, + StatusesIndex.index_name => StatusesIndex.mappings_hash.deep_stringify_keys, + InstancesIndex.index_name => InstancesIndex.mappings_hash.deep_stringify_keys, + TagsIndex.index_name => TagsIndex.mappings_hash.deep_stringify_keys, + }) + end + context 'when running version is present' do - before { allow(Chewy.client).to receive(:info).and_return({ 'version' => { 'number' => '999.99.9' } }) } + before { allow(Chewy.client).to receive(:info).and_return({ 'version' => { 'number' => '1.2.3' } }) } it 'sends class name symbol to message instance' do allow(Admin::SystemCheck::Message).to receive(:new) @@ -77,7 +106,7 @@ describe Admin::SystemCheck::ElasticsearchCheck do check.message expect(Admin::SystemCheck::Message).to have_received(:new) - .with(:elasticsearch_version_check, 'Elasticsearch 999.99.9 is running while 7.x is required') + .with(:elasticsearch_version_check, 'Elasticsearch 1.2.3 is running while 7.x is required') end end From d13a03e830f713d17a25f04997fa0af0ad157707 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 21 Aug 2023 19:39:01 +0200 Subject: [PATCH 118/163] Remove hashtags from the last line of a status if it only contains hashtags (#26499) --- .../components/__tests__/hashtag_bar.tsx | 184 +++++++++++++++ .../mastodon/components/hashtag_bar.jsx | 50 ---- .../mastodon/components/hashtag_bar.tsx | 222 ++++++++++++++++++ app/javascript/mastodon/components/status.jsx | 7 +- .../mastodon/components/status_content.jsx | 14 +- .../status/components/detailed_status.jsx | 7 +- 6 files changed, 428 insertions(+), 56 deletions(-) create mode 100644 app/javascript/mastodon/components/__tests__/hashtag_bar.tsx delete mode 100644 app/javascript/mastodon/components/hashtag_bar.jsx create mode 100644 app/javascript/mastodon/components/hashtag_bar.tsx diff --git a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx new file mode 100644 index 0000000000..c7db485d08 --- /dev/null +++ b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx @@ -0,0 +1,184 @@ +import { fromJS } from 'immutable'; + +import type { StatusLike } from '../hashtag_bar'; +import { computeHashtagBarForStatus } from '../hashtag_bar'; + +function createStatus( + content: string, + hashtags: string[], + hasMedia = false, + spoilerText?: string, +) { + return fromJS({ + tags: hashtags.map((name) => ({ name })), + contentHtml: content, + media_attachments: hasMedia ? ['fakeMedia'] : [], + spoiler_text: spoilerText, + }) as unknown as StatusLike; // need to force the type here, as it is not properly defined +} + +describe('computeHashtagBarForStatus', () => { + it('does nothing when there are no tags', () => { + const status = createStatus('

Simple text

', []); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Simple text

"`, + ); + }); + + it('displays out of band hashtags in the bar', () => { + const status = createStatus( + '

Simple text #hashtag

', + ['hashtag', 'test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual(['test']); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Simple text #hashtag

"`, + ); + }); + + it('extract tags from the last line', () => { + const status = createStatus( + '

Simple text

#hashtag

', + ['hashtag'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual(['hashtag']); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Simple text

"`, + ); + }); + + it('does not include tags from content', () => { + const status = createStatus( + '

Simple text with a #hashtag

#hashtag

', + ['hashtag'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Simple text with a #hashtag

"`, + ); + }); + + it('works with one line status and hashtags', () => { + const status = createStatus( + '

#test. And another #hashtag

', + ['hashtag', 'test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

#test. And another #hashtag

"`, + ); + }); + + it('de-duplicate accentuated characters with case differences', () => { + const status = createStatus( + '

Text

#éaa #Éaa

', + ['éaa'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual(['Éaa']); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Text

"`, + ); + }); + + it('does not display in bar a hashtag in content with a case difference', () => { + const status = createStatus( + '

Text #Éaa

#éaa

', + ['éaa'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

Text #Éaa

"`, + ); + }); + + it('does not modify a status with a line of hashtags only', () => { + const status = createStatus( + '

#test #hashtag

', + ['test', 'hashtag'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

#test #hashtag

"`, + ); + }); + + it('puts the hashtags in the bar if a status content has hashtags in the only line and has a media', () => { + const status = createStatus( + '

This is my content! #hashtag

', + ['hashtag'], + true, + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

This is my content! #hashtag

"`, + ); + }); + + it('puts the hashtags in the bar if a status content is only hashtags and has a media', () => { + const status = createStatus( + '

#test #hashtag

', + ['test', 'hashtag'], + true, + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual(['test', 'hashtag']); + expect(statusContentProps.statusContent).toMatchInlineSnapshot(`""`); + }); + + it('does not use the hashtag bar if the status content is only hashtags, has a CW and a media', () => { + const status = createStatus( + '

#test #hashtag

', + ['test', 'hashtag'], + true, + 'My CW text', + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"

#test #hashtag

"`, + ); + }); +}); diff --git a/app/javascript/mastodon/components/hashtag_bar.jsx b/app/javascript/mastodon/components/hashtag_bar.jsx deleted file mode 100644 index 3c7e24228d..0000000000 --- a/app/javascript/mastodon/components/hashtag_bar.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import PropTypes from 'prop-types'; -import { useMemo, useState, useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import { Link } from 'react-router-dom'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; - -const domParser = new DOMParser(); - -// About two lines on desktop -const VISIBLE_HASHTAGS = 7; - -export const HashtagBar = ({ hashtags, text }) => { - const renderedHashtags = useMemo(() => { - const body = domParser.parseFromString(text, 'text/html').documentElement; - return [].filter.call(body.querySelectorAll('a[href]'), link => link.textContent[0] === '#' || (link.previousSibling?.textContent?.[link.previousSibling.textContent.length - 1] === '#')).map(node => node.textContent); - }, [text]); - - const invisibleHashtags = useMemo(() => ( - hashtags.filter(hashtag => !renderedHashtags.some(textContent => textContent.localeCompare(`#${hashtag.get('name')}`, undefined, { sensitivity: 'accent' }) === 0 || textContent.localeCompare(hashtag.get('name'), undefined, { sensitivity: 'accent' }) === 0)) - ), [hashtags, renderedHashtags]); - - const [expanded, setExpanded] = useState(false); - const handleClick = useCallback(() => setExpanded(true), []); - - if (invisibleHashtags.isEmpty()) { - return null; - } - - const revealedHashtags = expanded ? invisibleHashtags : invisibleHashtags.take(VISIBLE_HASHTAGS); - - return ( -
- {revealedHashtags.map(hashtag => ( - - #{hashtag.get('name')} - - ))} - - {!expanded && invisibleHashtags.size > VISIBLE_HASHTAGS && } -
- ); -}; - -HashtagBar.propTypes = { - hashtags: ImmutablePropTypes.list, - text: PropTypes.string, -}; diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx new file mode 100644 index 0000000000..8781c26630 --- /dev/null +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -0,0 +1,222 @@ +import { useState, useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import type { List, Record } from 'immutable'; + +import { groupBy, minBy } from 'lodash'; + +import { getStatusContent } from './status_content'; + +// About two lines on desktop +const VISIBLE_HASHTAGS = 7; + +// Those types are not correct, they need to be replaced once this part of the state is typed +export type TagLike = Record<{ name: string }>; +export type StatusLike = Record<{ + tags: List; + contentHTML: string; + media_attachments: List; + spoiler_text?: string; +}>; + +function normalizeHashtag(hashtag: string) { + if (hashtag && hashtag.startsWith('#')) return hashtag.slice(1); + else return hashtag; +} + +function isNodeLinkHashtag(element: Node): element is HTMLLinkElement { + return ( + element instanceof HTMLAnchorElement && + // it may be a starting with a hashtag + (element.textContent?.[0] === '#' || + // or a # + element.previousSibling?.textContent?.[ + element.previousSibling.textContent.length - 1 + ] === '#') + ); +} + +/** + * Removes duplicates from an hashtag list, case-insensitive, keeping only the best one + * "Best" here is defined by the one with the more casing difference (ie, the most camel-cased one) + * @param hashtags The list of hashtags + * @returns The input hashtags, but with only 1 occurence of each (case-insensitive) + */ +function uniqueHashtagsWithCaseHandling(hashtags: string[]) { + const groups = groupBy(hashtags, (tag) => + tag.normalize('NFKD').toLowerCase(), + ); + + return Object.values(groups).map((tags) => { + if (tags.length === 1) return tags[0]; + + // The best match is the one where we have the less difference between upper and lower case letter count + const best = minBy(tags, (tag) => { + const upperCase = Array.from(tag).reduce( + (acc, char) => (acc += char.toUpperCase() === char ? 1 : 0), + 0, + ); + + const lowerCase = tag.length - upperCase; + + return Math.abs(lowerCase - upperCase); + }); + + return best ?? tags[0]; + }); +} + +// Create the collator once, this is much more efficient +const collator = new Intl.Collator(undefined, { sensitivity: 'accent' }); +function localeAwareInclude(collection: string[], value: string) { + return collection.find((item) => collator.compare(item, value) === 0); +} + +// We use an intermediate function here to make it easier to test +export function computeHashtagBarForStatus(status: StatusLike): { + statusContentProps: { statusContent: string }; + hashtagsInBar: string[]; +} { + let statusContent = getStatusContent(status); + + const tagNames = status + .get('tags') + .map((tag) => tag.get('name')) + .toJS(); + + // this is returned if we stop the processing early, it does not change what is displayed + const defaultResult = { + statusContentProps: { statusContent }, + hashtagsInBar: [], + }; + + // return early if this status does not have any tags + if (tagNames.length === 0) return defaultResult; + + const template = document.createElement('template'); + template.innerHTML = statusContent.trim(); + + const lastChild = template.content.lastChild; + + if (!lastChild) return defaultResult; + + template.content.removeChild(lastChild); + const contentWithoutLastLine = template; + + // First, try to parse + const contentHashtags = Array.from( + contentWithoutLastLine.content.querySelectorAll('a[href]'), + ).reduce((result, link) => { + if (isNodeLinkHashtag(link)) { + if (link.textContent) result.push(normalizeHashtag(link.textContent)); + } + return result; + }, []); + + // Now we parse the last line, and try to see if it only contains hashtags + const lastLineHashtags: string[] = []; + // try to see if the last line is only hashtags + let onlyHashtags = true; + + Array.from(lastChild.childNodes).forEach((node) => { + if (isNodeLinkHashtag(node) && node.textContent) { + const normalized = normalizeHashtag(node.textContent); + + if (!localeAwareInclude(tagNames, normalized)) { + // stop here, this is not a real hashtag, so consider it as text + onlyHashtags = false; + return; + } + + if (!localeAwareInclude(contentHashtags, normalized)) + // only add it if it does not appear in the rest of the content + lastLineHashtags.push(normalized); + } else if (node.nodeType !== Node.TEXT_NODE || node.nodeValue?.trim()) { + // not a space + onlyHashtags = false; + } + }); + + const hashtagsInBar = tagNames.filter( + (tag) => + // the tag does not appear at all in the status content, it is an out-of-band tag + !localeAwareInclude(contentHashtags, tag) && + !localeAwareInclude(lastLineHashtags, tag), + ); + + const isOnlyOneLine = contentWithoutLastLine.content.childElementCount === 0; + const hasMedia = status.get('media_attachments').size > 0; + const hasSpoiler = !!status.get('spoiler_text'); + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- due to https://github.com/microsoft/TypeScript/issues/9998 + if (onlyHashtags && ((hasMedia && !hasSpoiler) || !isOnlyOneLine)) { + // if the last line only contains hashtags, and we either: + // - have other content in the status + // - dont have other content, but a media and no CW. If it has a CW, then we do not remove the content to avoid having an empty content behind the CW button + statusContent = contentWithoutLastLine.innerHTML; + // and add the tags to the bar + hashtagsInBar.push(...lastLineHashtags); + } + + return { + statusContentProps: { statusContent }, + hashtagsInBar: uniqueHashtagsWithCaseHandling(hashtagsInBar), + }; +} + +/** + * This function will process a status to, at the same time (avoiding parsing it twice): + * - build the HashtagBar for this status + * - remove the last-line hashtags from the status content + * @param status The status to process + * @returns Props to be passed to the component, and the hashtagBar to render + */ +export function getHashtagBarForStatus(status: StatusLike) { + const { statusContentProps, hashtagsInBar } = + computeHashtagBarForStatus(status); + + return { + statusContentProps, + hashtagBar: , + }; +} + +const HashtagBar: React.FC<{ + hashtags: string[]; +}> = ({ hashtags }) => { + const [expanded, setExpanded] = useState(false); + const handleClick = useCallback(() => { + setExpanded(true); + }, []); + + if (hashtags.length === 0) { + return null; + } + + const revealedHashtags = expanded + ? hashtags + : hashtags.slice(0, VISIBLE_HASHTAGS - 1); + + return ( +
+ {revealedHashtags.map((hashtag) => ( + + #{hashtag} + + ))} + + {!expanded && hashtags.length > VISIBLE_HASHTAGS && ( + + )} +
+ ); +}; diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 7c34684d71..45a2106dba 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -22,7 +22,7 @@ import { displayMedia } from '../initial_state'; import { Avatar } from './avatar'; import { AvatarOverlay } from './avatar_overlay'; import { DisplayName } from './display_name'; -import { HashtagBar } from './hashtag_bar'; +import { getHashtagBarForStatus } from './hashtag_bar'; import { RelativeTimestamp } from './relative_timestamp'; import StatusActionBar from './status_action_bar'; import StatusContent from './status_content'; @@ -545,6 +545,8 @@ class Status extends ImmutablePureComponent { const visibilityIcon = visibilityIconInfo[status.get('visibility')]; + const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); + return (
@@ -577,11 +579,12 @@ class Status extends ImmutablePureComponent { onTranslate={this.handleTranslate} collapsible onCollapsedToggle={this.handleCollapsedToggle} + {...statusContentProps} /> {media} - + {hashtagBar}
diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index 84a698810f..d3bbc1ba02 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -15,6 +15,15 @@ import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_s const MAX_HEIGHT = 706; // 22px * 32 (+ 2px padding at the top) +/** + * + * @param {any} status + * @returns {string} + */ +export function getStatusContent(status) { + return status.getIn(['translation', 'contentHtml']) || status.get('contentHtml'); +} + class TranslateButton extends PureComponent { static propTypes = { @@ -65,6 +74,7 @@ class StatusContent extends PureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, + statusContent: PropTypes.string, expanded: PropTypes.bool, onExpandedToggle: PropTypes.func, onTranslate: PropTypes.func, @@ -225,7 +235,7 @@ class StatusContent extends PureComponent { }; render () { - const { status, intl } = this.props; + const { status, intl, statusContent } = this.props; const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const renderReadMore = this.props.onClick && status.get('collapsed'); @@ -233,7 +243,7 @@ class StatusContent extends PureComponent { const targetLanguages = this.props.languages?.get(status.get('language') || 'und'); const renderTranslate = this.props.onTranslate && this.context.identity.signedIn && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('search_index').trim().length > 0 && targetLanguages?.includes(contentLocale); - const content = { __html: status.getIn(['translation', 'contentHtml']) || status.get('contentHtml') }; + const content = { __html: statusContent ?? getStatusContent(status) }; const spoilerContent = { __html: status.getIn(['translation', 'spoilerHtml']) || status.get('spoilerHtml') }; const language = status.getIn(['translation', 'language']) || status.get('language'); const classNames = classnames('status__content', { diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index c1815b9167..401550e49f 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -10,7 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import EditedTimestamp from 'mastodon/components/edited_timestamp'; -import { HashtagBar } from 'mastodon/components/hashtag_bar'; +import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; @@ -292,6 +292,8 @@ class DetailedStatus extends ImmutablePureComponent { ); } + const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); + return (
@@ -311,11 +313,12 @@ class DetailedStatus extends ImmutablePureComponent { expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} onTranslate={this.handleTranslate} + {...statusContentProps} /> {media} - + {hashtagBar}
From d4eef922aa794489a027575a560e4b09c68c153e Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 21 Aug 2023 20:18:49 +0200 Subject: [PATCH 119/163] Bump version to v4.2.0-beta2 (#26579) --- CHANGELOG.md | 33 ++++++++++++++++++++++++++------- lib/mastodon/version.rb | 2 +- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfcc188362..107dfaca3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ The following changelog entries focus on changes visible to users, administrator ### Added +- **Add “Privacy and reach” tab in profile settings** ([Gargron](https://github.com/mastodon/mastodon/pull/26484), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26508)) + This reorganized scattered privacy and reach settings to a single place, as well as improve their wording. +- **Add display of out-of-band hashtags in the web interface** ([Gargron](https://github.com/mastodon/mastodon/pull/26492), [arbolitoloco1](https://github.com/mastodon/mastodon/pull/26497), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26506), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26525)) - **Add role badges to the web interface** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25649), [Gargron](https://github.com/mastodon/mastodon/pull/26281)) - **Add ability to pick domains to forward reports to using the `forward_to_domains` parameter in `POST /api/v1/reports`** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25866)) The `forward_to_domains` REST API parameter is a list of strings. If it is empty or omitted, the previous behavior is maintained. @@ -23,8 +26,18 @@ The following changelog entries focus on changes visible to users, administrator - **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388)) - **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807)) - **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561)) +- **Add `S3_DISABLE_CHECKSUM_MODE` environment variable for compatibility with some S3-compatible providers** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26435)) +- **Add auto-refresh of accounts we get new messages/edits of** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26510)) +- **Add Elasticsearch cluster health check and indexes mismatch check to dashboard** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26448)) +- Add support for `indexable` attribute on remote actors ([Gargron](https://github.com/mastodon/mastodon/pull/26485)) +- Add `DELETE /api/v1/profile/avatar` and `DELETE /api/v1/profile/header` to the REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25124), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26573)) +- Add `ES_PRESET` option to customize numbers of shards and replicas ([Gargron](https://github.com/mastodon/mastodon/pull/26483), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26489)) + This can have a value of `single_node_cluster` (default), `small_cluster` (uses one replica) or `large_cluster` (uses one replica and a higher number of shards). +- Add missing `instances` option to `tootctl search deploy` ([tribela](https://github.com/mastodon/mastodon/pull/26461)) +- Add `CACHE_BUSTER_HTTP_METHOD` environment variable ([renchap](https://github.com/mastodon/mastodon/pull/26528), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26542)) +- Add support for `DB_PASS` when using `DATABASE_URL` ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26295)) - Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443)) -- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384)) +- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26447)) - Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300)) - Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155)) - Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149)) @@ -43,7 +56,7 @@ The following changelog entries focus on changes visible to users, administrator - Add unsubscribe link and headers to e-mails ([Gargron](https://github.com/mastodon/mastodon/pull/25378), [c960657](https://github.com/mastodon/mastodon/pull/26085)) - Add logging of websocket send errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25280)) - Add time zone preference ([Gargron](https://github.com/mastodon/mastodon/pull/25342), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26025)) -- Add `legal` as report category ([Gargron](https://github.com/mastodon/mastodon/pull/23941), [renchap](https://github.com/mastodon/mastodon/pull/25400)) +- Add `legal` as report category ([Gargron](https://github.com/mastodon/mastodon/pull/23941), [renchap](https://github.com/mastodon/mastodon/pull/25400), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26509)) - Add `data-nosnippet` so Google doesn't use trending posts in snippets for `/` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25279)) - Add card with who invited you to join when displaying rules on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23475)) - Add missing primary keys to `accounts_tags` and `statuses_tags` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25210)) @@ -80,11 +93,12 @@ The following changelog entries focus on changes visible to users, administrator ### Changed +- **Change hashtags to be displayed separately when they are the last line of a post** ([renchap](https://github.com/mastodon/mastodon/pull/26499)) - **Change reblogs to be excluded from "Posts and replies" tab in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26302)) -- **Change interaction modal in web interface** ([Gargron, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26075), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26268), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26267)) +- **Change interaction modal in web interface** ([Gargron, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26075), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26268), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26267), [mgmn](https://github.com/mastodon/mastodon/pull/26459)) - **Change design of link previews in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26136), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26151), [Gargron](https://github.com/mastodon/mastodon/pull/26153), [Gargron](https://github.com/mastodon/mastodon/pull/26250), [Gargron](https://github.com/mastodon/mastodon/pull/26287), [Gargron](https://github.com/mastodon/mastodon/pull/26286), [c960657](https://github.com/mastodon/mastodon/pull/26184)) - **Change "direct message" nomenclature to "private mention" in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24248)) -- **Change translation feature to cover Content Warnings, poll options and media descriptions** ([c960657](https://github.com/mastodon/mastodon/pull/24175), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25251), [c960657](https://github.com/mastodon/mastodon/pull/26168)) +- **Change translation feature to cover Content Warnings, poll options and media descriptions** ([c960657](https://github.com/mastodon/mastodon/pull/24175), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25251), [c960657](https://github.com/mastodon/mastodon/pull/26168), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26452)) - **Change account search to match by text when opted-in** ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25599), [Gargron](https://github.com/mastodon/mastodon/pull/26378)) - **Change import feature to be clearer, less error-prone and more reliable** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21054), [mgmn](https://github.com/mastodon/mastodon/pull/24874)) - **Change local and federated timelines to be in a single “Live feeds” column** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25641), [Gargron](https://github.com/mastodon/mastodon/pull/25683), [mgmn](https://github.com/mastodon/mastodon/pull/25694), [Plastikmensch](https://github.com/mastodon/mastodon/pull/26247)) @@ -97,7 +111,9 @@ The following changelog entries focus on changes visible to users, administrator - **Change replica support to native Rails adapter** ([krainboltgreene](https://github.com/mastodon/mastodon/pull/25693), [Gargron](https://github.com/mastodon/mastodon/pull/25849), [Gargron](https://github.com/mastodon/mastodon/pull/25874), [Gargron](https://github.com/mastodon/mastodon/pull/25851), [Gargron](https://github.com/mastodon/mastodon/pull/25977), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26074), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26326), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26386)) This is a breaking change, dropping `makara` support, and requiring you to update your database configuration if you are using replicas. To tell Mastodon to use a read replica, you can either set the `REPLICA_DB_NAME` environment variable (along with `REPLICA_DB_USER`, `REPLICA_DB_PASS`, `REPLICA_DB_HOST`, and `REPLICA_DB_PORT`, if they differ from the primary database), or the `REPLICA_DATABASE_URL` environment variable if your configuration is based on `DATABASE_URL`. -- Change header of hashtag timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26362)) +- Change follow recommendation materialized view to be faster in most cases ([renchap, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26545)) +- Change `robots.txt` to block GPTBot ([Foritus](https://github.com/mastodon/mastodon/pull/26396)) +- Change header of hashtag timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26362), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26416)) - Change streaming `/metrics` to include additional metrics ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26299)) - Change indexing frequency from 5 minutes to 1 minute, add locks to schedulers ([Gargron](https://github.com/mastodon/mastodon/pull/26304)) - Change column link to add a better keyboard focus indicator ([teeerevor](https://github.com/mastodon/mastodon/pull/26278)) @@ -114,7 +130,7 @@ The following changelog entries focus on changes visible to users, administrator - Change header backgrounds to use fewer different colors in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25577)) - Change files to be deleted in batches instead of one-by-one ([Gargron](https://github.com/mastodon/mastodon/pull/23302), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25586), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25587)) - Change emoji picker icon ([iparr](https://github.com/mastodon/mastodon/pull/25479)) -- Change edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/25413)) +- Change edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/25413), [c960657](https://github.com/mastodon/mastodon/pull/26538)) - Change "bot" label to "automated" ([Gargron](https://github.com/mastodon/mastodon/pull/25356)) - Change design of dropdowns in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25107)) - Change wording of “Content cache retention period” setting to highlight destructive implications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23261)) @@ -172,6 +188,9 @@ The following changelog entries focus on changes visible to users, administrator - **Fix being unable to load past a full page of filtered posts in Home timeline** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24930)) - **Fix log-in flow when involving both OAuth and external authentication** ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24073)) - **Fix broken links in account gallery** ([c960657](https://github.com/mastodon/mastodon/pull/24218)) +- **Fix blocking subdomains of an already-blocked domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26392)) +- Fix uploading of video files for which `ffprobe` reports `0/0` average framerate ([NicolaiSoeborg](https://github.com/mastodon/mastodon/pull/26500)) +- Fix cached posts including stale stats ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26409)) - Fix adding column with default value taking longer on Postgres >= 11 ([Gargron](https://github.com/mastodon/mastodon/pull/26375)) - Fix light theme select option for hashtags ([teeerevor](https://github.com/mastodon/mastodon/pull/26311)) - Fix AVIF attachments ([c960657](https://github.com/mastodon/mastodon/pull/26264)) @@ -189,7 +208,7 @@ The following changelog entries focus on changes visible to users, administrator - Fix for "follows you" indicator in light web UI not readable ([vmstan](https://github.com/mastodon/mastodon/pull/25993)) - Fix incorrect line break between icon and number of reposts & favourites ([edent](https://github.com/mastodon/mastodon/pull/26004)) - Fix sounds not being loaded from assets host ([Signez](https://github.com/mastodon/mastodon/pull/25931)) -- Fix buttons showing inconsistent styles ([teeerevor](https://github.com/mastodon/mastodon/pull/25903), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26341)) +- Fix buttons showing inconsistent styles ([teeerevor](https://github.com/mastodon/mastodon/pull/25903), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26341), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26482)) - Fix trend calculation working on too many items at a time ([Gargron](https://github.com/mastodon/mastodon/pull/25835)) - Fix dropdowns being disabled for logged out users in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25964)) - Fix explore page being inaccessible when opted-out of trends in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25716)) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 2b2a5d1180..ee81eedaa5 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ module Mastodon end def flags - ENV.fetch('MASTODON_VERSION_FLAGS', '-beta1') + ENV.fetch('MASTODON_VERSION_FLAGS', '-beta2') end def suffix From 8c78a128e1d6c1b05251c71a8a95b88ccd9b9dc0 Mon Sep 17 00:00:00 2001 From: mogaminsk Date: Mon, 14 Aug 2023 19:04:04 +0900 Subject: [PATCH 120/163] [Glitch] Fix "Create Account" button in interaction modal Port 10651d8b8ab269ab98ba71aa41993038605a6381 to glitch-soc Signed-off-by: Claire --- .../glitch/features/interaction_modal/index.jsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/features/interaction_modal/index.jsx b/app/javascript/flavours/glitch/features/interaction_modal/index.jsx index 3375afde6f..bbfa9af8d4 100644 --- a/app/javascript/flavours/glitch/features/interaction_modal/index.jsx +++ b/app/javascript/flavours/glitch/features/interaction_modal/index.jsx @@ -21,12 +21,16 @@ const messages = defineMessages({ const mapStateToProps = (state, { accountId }) => ({ displayNameHtml: state.getIn(['accounts', accountId, 'display_name_html']), + signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up', }); const mapDispatchToProps = (dispatch) => ({ onSignupClick() { - dispatch(closeModal()); - dispatch(openModal('CLOSED_REGISTRATIONS')); + dispatch(closeModal({ + modalType: undefined, + ignoreFocus: false, + })); + dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })); }, }); @@ -294,6 +298,7 @@ class InteractionModal extends React.PureComponent { url: PropTypes.string, type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']), onSignupClick: PropTypes.func.isRequired, + signupUrl: PropTypes.string.isRequired, }; handleSignupClick = () => { @@ -301,7 +306,7 @@ class InteractionModal extends React.PureComponent { }; render () { - const { url, type, displayNameHtml } = this.props; + const { url, type, displayNameHtml, signupUrl } = this.props; const name = ; @@ -340,7 +345,7 @@ class InteractionModal extends React.PureComponent { ); } else if (registrationsOpen) { signupButton = ( - + ); From 38ec8071fa02e1ae41458501d3462425a2f19a5a Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 22 Aug 2023 09:11:59 +0200 Subject: [PATCH 121/163] Fix layout of the closed registrations modal (#26593) --- .../styles/mastodon/components.scss | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 115b6f5d1b..7662f3d9b7 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8539,6 +8539,44 @@ noscript { } } + &__choices { + display: flex; + gap: 40px; + + &__choice { + flex: 1; + box-sizing: border-box; + + h3 { + margin-bottom: 20px; + } + + p { + color: $darker-text-color; + margin-bottom: 20px; + font-size: 15px; + } + + .button { + margin-bottom: 10px; + + &:last-child { + margin-bottom: 0; + } + } + } + } + + @media screen and (max-width: $no-gap-breakpoint - 1px) { + &__choices { + flex-direction: column; + + &__choice { + margin-top: 40px; + } + } + } + .link-button { font-size: inherit; display: inline; From 7f1b52c55f12f9ee4c6529f6e4fda296f58de6d6 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Tue, 22 Aug 2023 03:31:40 -0400 Subject: [PATCH 122/163] Update rubocop and rubocop-rspec (#26329) --- .rubocop_todo.yml | 56 ++++++++----------- Gemfile.lock | 10 ++-- app/lib/importer/base_importer.rb | 4 +- lib/redis/namespace_extensions.rb | 4 +- .../translation_languages_controller_spec.rb | 3 +- .../statuses/translations_controller_spec.rb | 3 +- spec/helpers/admin/filter_helper_spec.rb | 3 +- spec/helpers/application_helper_spec.rb | 4 +- spec/helpers/home_helper_spec.rb | 10 +--- .../system_check/elasticsearch_check_spec.rb | 5 +- spec/models/report_filter_spec.rb | 3 +- spec/services/suspend_account_service_spec.rb | 3 +- .../services/translate_status_service_spec.rb | 3 +- .../unsuspend_account_service_spec.rb | 3 +- spec/views/statuses/show.html.haml_spec.rb | 8 +-- 15 files changed, 48 insertions(+), 74 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 92c7f9cdc5..945d7514a1 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp` -# using RuboCop version 1.54.2. +# using RuboCop version 1.56.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -61,38 +61,8 @@ Lint/EmptyBlock: - 'spec/fabricators/access_token_fabricator.rb' - 'spec/fabricators/conversation_fabricator.rb' - 'spec/fabricators/system_key_fabricator.rb' - - 'spec/helpers/admin/action_logs_helper_spec.rb' - 'spec/lib/activitypub/adapter_spec.rb' - - 'spec/models/account_alias_spec.rb' - - 'spec/models/account_deletion_request_spec.rb' - - 'spec/models/account_moderation_note_spec.rb' - - 'spec/models/announcement_mute_spec.rb' - - 'spec/models/announcement_reaction_spec.rb' - - 'spec/models/announcement_spec.rb' - - 'spec/models/backup_spec.rb' - - 'spec/models/conversation_mute_spec.rb' - - 'spec/models/custom_filter_keyword_spec.rb' - - 'spec/models/custom_filter_spec.rb' - - 'spec/models/device_spec.rb' - - 'spec/models/encrypted_message_spec.rb' - - 'spec/models/featured_tag_spec.rb' - - 'spec/models/follow_recommendation_suppression_spec.rb' - - 'spec/models/list_account_spec.rb' - - 'spec/models/list_spec.rb' - - 'spec/models/login_activity_spec.rb' - - 'spec/models/mute_spec.rb' - - 'spec/models/preview_card_spec.rb' - - 'spec/models/preview_card_trend_spec.rb' - - 'spec/models/relay_spec.rb' - - 'spec/models/scheduled_status_spec.rb' - - 'spec/models/status_stat_spec.rb' - - 'spec/models/status_trend_spec.rb' - - 'spec/models/system_key_spec.rb' - - 'spec/models/tag_follow_spec.rb' - - 'spec/models/unavailable_domain_spec.rb' - - 'spec/models/user_invite_request_spec.rb' - 'spec/models/user_role_spec.rb' - - 'spec/models/web/setting_spec.rb' Lint/NonLocalExitFromIterator: Exclude: @@ -135,7 +105,7 @@ Lint/UselessAssignment: # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: - Max: 146 + Max: 144 # Configuration parameters: CountBlocks, Max. Metrics/BlockNesting: @@ -164,6 +134,19 @@ Naming/VariableNumber: - 'spec/models/domain_block_spec.rb' - 'spec/models/user_spec.rb' +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: SafeMultiline. +Performance/DeletePrefix: + Exclude: + - 'app/models/featured_tag.rb' + +Performance/MapMethodChain: + Exclude: + - 'app/models/feed.rb' + - 'lib/mastodon/cli/maintenance.rb' + - 'spec/services/bulk_import_service_spec.rb' + - 'spec/services/import_service_spec.rb' + RSpec/AnyInstance: Exclude: - 'spec/controllers/activitypub/inboxes_controller_spec.rb' @@ -762,6 +745,15 @@ Style/RedundantFetchBlock: - 'config/initializers/paperclip.rb' - 'config/puma.rb' +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowMultipleReturnValues. +Style/RedundantReturn: + Exclude: + - 'app/controllers/api/v1/directories_controller.rb' + - 'app/controllers/auth/confirmations_controller.rb' + - 'app/lib/ostatus/tag_manager.rb' + - 'app/models/form/import.rb' + # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. # AllowedMethods: present?, blank?, presence, try, try! diff --git a/Gemfile.lock b/Gemfile.lock index 73e3bd9753..e92079c1af 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -147,6 +147,7 @@ GEM faraday_middleware (~> 1.0, >= 1.0.0.rc1) net-http-persistent (~> 4.0) nokogiri (~> 1, >= 1.10.8) + base64 (0.1.1) bcrypt (3.1.18) better_errors (2.10.1) erubi (>= 1.0.0) @@ -637,7 +638,8 @@ GEM sidekiq (>= 2.4.0) rspec-support (3.12.0) rspec_chunked (0.6) - rubocop (1.54.2) + rubocop (1.56.1) + base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -645,7 +647,7 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.0, < 2.0) + rubocop-ast (>= 1.28.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.29.0) @@ -654,14 +656,14 @@ GEM rubocop (~> 1.41) rubocop-factory_bot (2.23.1) rubocop (~> 1.33) - rubocop-performance (1.18.0) + rubocop-performance (1.19.0) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) rubocop-rails (2.20.2) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) - rubocop-rspec (2.22.0) + rubocop-rspec (2.23.2) rubocop (~> 1.33) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) diff --git a/app/lib/importer/base_importer.rb b/app/lib/importer/base_importer.rb index 07be4650ec..cc1b7b44d7 100644 --- a/app/lib/importer/base_importer.rb +++ b/app/lib/importer/base_importer.rb @@ -68,8 +68,8 @@ class Importer::BaseImporter protected - def in_work_unit(*args, &block) - work_unit = Concurrent::Promises.future_on(@executor, *args, &block) + def in_work_unit(...) + work_unit = Concurrent::Promises.future_on(@executor, ...) work_unit.on_fulfillment!(&@on_progress) work_unit.on_rejection!(&@on_failure) diff --git a/lib/redis/namespace_extensions.rb b/lib/redis/namespace_extensions.rb index 310a4f465b..9af59c296e 100644 --- a/lib/redis/namespace_extensions.rb +++ b/lib/redis/namespace_extensions.rb @@ -2,8 +2,8 @@ class Redis module NamespaceExtensions - def exists?(*args, &block) - call_with_namespace('exists?', *args, &block) + def exists?(...) + call_with_namespace('exists?', ...) 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 5b7e4abb6f..88bcc40341 100644 --- a/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb +++ b/spec/controllers/api/v1/instances/translation_languages_controller_spec.rb @@ -16,8 +16,7 @@ describe Api::V1::Instances::TranslationLanguagesController do context 'when a translation service is configured' do before do service = instance_double(TranslationService::DeepL, languages: { nil => %w(en de), 'en' => ['de'] }) - allow(TranslationService).to receive(:configured?).and_return(true) - allow(TranslationService).to receive(:configured).and_return(service) + allow(TranslationService).to receive_messages(configured?: true, configured: service) end it 'returns language matrix' do diff --git a/spec/controllers/api/v1/statuses/translations_controller_spec.rb b/spec/controllers/api/v1/statuses/translations_controller_spec.rb index 989e94750a..6257494ae1 100644 --- a/spec/controllers/api/v1/statuses/translations_controller_spec.rb +++ b/spec/controllers/api/v1/statuses/translations_controller_spec.rb @@ -20,8 +20,7 @@ describe Api::V1::Statuses::TranslationsController do before do translation = TranslationService::Translation.new(text: 'Hello') service = instance_double(TranslationService::DeepL, translate: [translation]) - allow(TranslationService).to receive(:configured?).and_return(true) - allow(TranslationService).to receive(:configured).and_return(service) + allow(TranslationService).to receive_messages(configured?: true, configured: service) Rails.cache.write('translation_service/languages', { 'es' => ['en'] }) post :create, params: { status_id: status.id } end diff --git a/spec/helpers/admin/filter_helper_spec.rb b/spec/helpers/admin/filter_helper_spec.rb index bbf90a9969..40ed63239f 100644 --- a/spec/helpers/admin/filter_helper_spec.rb +++ b/spec/helpers/admin/filter_helper_spec.rb @@ -7,8 +7,7 @@ describe Admin::FilterHelper do params = ActionController::Parameters.new( { test: 'test' } ) - allow(helper).to receive(:params).and_return(params) - allow(helper).to receive(:url_for).and_return('/test') + allow(helper).to receive_messages(params: params, url_for: '/test') result = helper.filter_link_to('text', { resolved: true }) expect(result).to match(/text/) diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index d0b2900d62..b87d06359e 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -31,9 +31,7 @@ describe ApplicationHelper do context 'with a body class string from a controller' do before do without_partial_double_verification do - allow(helper).to receive(:body_class_string).and_return('modal-layout compose-standalone') - allow(helper).to receive(:current_theme).and_return('default') - allow(helper).to receive(:current_account).and_return(Fabricate(:account)) + allow(helper).to receive_messages(body_class_string: 'modal-layout compose-standalone', current_theme: 'default', current_account: Fabricate(:account)) end end diff --git a/spec/helpers/home_helper_spec.rb b/spec/helpers/home_helper_spec.rb index 15067471ed..c6baec5a1f 100644 --- a/spec/helpers/home_helper_spec.rb +++ b/spec/helpers/home_helper_spec.rb @@ -25,8 +25,7 @@ RSpec.describe HomeHelper do it 'returns a link to the account' do without_partial_double_verification do - allow(helper).to receive(:current_account).and_return(account) - allow(helper).to receive(:prefers_autoplay?).and_return(false) + allow(helper).to receive_messages(current_account: account, prefers_autoplay?: false) result = helper.account_link_to(account) expect(result).to match "@#{account.acct}" @@ -101,8 +100,7 @@ RSpec.describe HomeHelper do context 'with open registrations' do it 'returns correct sign up message' do - allow(helper).to receive(:closed_registrations?).and_return(false) - allow(helper).to receive(:open_registrations?).and_return(true) + allow(helper).to receive_messages(closed_registrations?: false, open_registrations?: true) result = helper.sign_up_message expect(result).to eq t('auth.register') @@ -111,9 +109,7 @@ RSpec.describe HomeHelper do context 'with approved registrations' do it 'returns correct sign up message' do - allow(helper).to receive(:closed_registrations?).and_return(false) - allow(helper).to receive(:open_registrations?).and_return(false) - allow(helper).to receive(:approved_registrations?).and_return(true) + allow(helper).to receive_messages(closed_registrations?: false, open_registrations?: false, approved_registrations?: true) result = helper.sign_up_message expect(result).to eq t('auth.apply_for_account') diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb index bf518b56e8..f3918d403d 100644 --- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -14,13 +14,12 @@ describe Admin::SystemCheck::ElasticsearchCheck do before do allow(Chewy).to receive(:enabled?).and_return(true) allow(Chewy.client.cluster).to receive(:health).and_return({ 'status' => 'green', 'number_of_nodes' => 1 }) - allow(Chewy.client.indices).to receive(:get_mapping).and_return({ + allow(Chewy.client.indices).to receive_messages(get_mapping: { AccountsIndex.index_name => AccountsIndex.mappings_hash.deep_stringify_keys, StatusesIndex.index_name => StatusesIndex.mappings_hash.deep_stringify_keys, InstancesIndex.index_name => InstancesIndex.mappings_hash.deep_stringify_keys, TagsIndex.index_name => TagsIndex.mappings_hash.deep_stringify_keys, - }) - allow(Chewy.client.indices).to receive(:get_settings).and_return({ + }, get_settings: { 'chewy_specifications' => { 'settings' => { 'index' => { diff --git a/spec/models/report_filter_spec.rb b/spec/models/report_filter_spec.rb index 4b0852f081..6baf0ea421 100644 --- a/spec/models/report_filter_spec.rb +++ b/spec/models/report_filter_spec.rb @@ -23,8 +23,7 @@ describe ReportFilter do it 'combines filters on Report' do filter = described_class.new(account_id: '123', resolved: true, target_account_id: '456') - allow(Report).to receive(:where).and_return(Report.none) - allow(Report).to receive(:resolved).and_return(Report.none) + allow(Report).to receive_messages(where: Report.none, resolved: Report.none) filter.results expect(Report).to have_received(:where).with(account_id: '123') expect(Report).to have_received(:where).with(target_account_id: '456') diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb index 7cdbc873e3..edb7050083 100644 --- a/spec/services/suspend_account_service_spec.rb +++ b/spec/services/suspend_account_service_spec.rb @@ -10,8 +10,7 @@ RSpec.describe SuspendAccountService, type: :service do let!(:list) { Fabricate(:list, account: local_follower) } before do - allow(FeedManager.instance).to receive(:unmerge_from_home).and_return(nil) - allow(FeedManager.instance).to receive(:unmerge_from_list).and_return(nil) + allow(FeedManager.instance).to receive_messages(unmerge_from_home: nil, unmerge_from_list: nil) local_follower.follow!(account) list.accounts << account diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index 515dd1a997..5f6418f5d6 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -29,8 +29,7 @@ RSpec.describe TranslateStatusService, type: :service do end end - allow(TranslationService).to receive(:configured?).and_return(true) - allow(TranslationService).to receive(:configured).and_return(translation_service) + allow(TranslationService).to receive_messages(configured?: true, configured: translation_service) end it 'returns translated status content' do diff --git a/spec/services/unsuspend_account_service_spec.rb b/spec/services/unsuspend_account_service_spec.rb index 3c13d5bd39..c555b661ec 100644 --- a/spec/services/unsuspend_account_service_spec.rb +++ b/spec/services/unsuspend_account_service_spec.rb @@ -10,8 +10,7 @@ RSpec.describe UnsuspendAccountService, type: :service do let!(:list) { Fabricate(:list, account: local_follower) } before do - allow(FeedManager.instance).to receive(:merge_into_home).and_return(nil) - allow(FeedManager.instance).to receive(:merge_into_list).and_return(nil) + allow(FeedManager.instance).to receive_messages(merge_into_home: nil, merge_into_list: nil) local_follower.follow!(account) list.accounts << account diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index 06f5132d9f..354f9d3e63 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -4,15 +4,9 @@ require 'rails_helper' describe 'statuses/show.html.haml', without_verify_partial_doubles: true do before do - allow(view).to receive(:api_oembed_url).and_return('') - allow(view).to receive(:show_landing_strip?).and_return(true) - allow(view).to receive(:site_title).and_return('example site') - allow(view).to receive(:site_hostname).and_return('example.com') - allow(view).to receive(:full_asset_url).and_return('//asset.host/image.svg') + allow(view).to receive_messages(api_oembed_url: '', show_landing_strip?: true, site_title: 'example site', site_hostname: 'example.com', full_asset_url: '//asset.host/image.svg', current_account: nil, single_user_mode?: false) allow(view).to receive(:local_time) allow(view).to receive(:local_time_ago) - allow(view).to receive(:current_account).and_return(nil) - allow(view).to receive(:single_user_mode?).and_return(false) assign(:instance_presenter, InstancePresenter.new) end From 78aecc744434cf5b6745dd1a51833e96d4c9be91 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 22 Aug 2023 13:24:16 +0200 Subject: [PATCH 123/163] Add `circular-dependency-plugin` to detect any circular deps issues (#26600) --- config/webpack/shared.js | 4 ++++ package.json | 1 + yarn.lock | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/config/webpack/shared.js b/config/webpack/shared.js index 3b69282d53..7c00d85d36 100644 --- a/config/webpack/shared.js +++ b/config/webpack/shared.js @@ -2,6 +2,7 @@ const { basename, dirname, join, relative, resolve } = require('path'); +const CircularDependencyPlugin = require('circular-dependency-plugin'); const { sync } = require('glob'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const extname = require('path-complete-extname'); @@ -84,6 +85,9 @@ module.exports = { writeToDisk: true, publicPath: true, }), + new CircularDependencyPlugin({ + failOnError: true, + }) ], resolve: { diff --git a/package.json b/package.json index 0dbd84ee85..16c5d529a6 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "babel-plugin-preval": "^5.1.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "blurhash": "^2.0.5", + "circular-dependency-plugin": "^5.2.2", "classnames": "^2.3.2", "cocoon-js-vanilla": "^1.3.0", "color-blend": "^4.0.0", diff --git a/yarn.lock b/yarn.lock index 65a0eb0363..779b3a21ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3998,6 +3998,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +circular-dependency-plugin@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" + integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== + cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" @@ -11281,6 +11286,7 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== From 191acb2185801ab54f96760e563231bd5b849190 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 22 Aug 2023 16:47:19 +0200 Subject: [PATCH 124/163] Update `SECURITY.md` to indicate issues can be reported on Github (#26599) --- SECURITY.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 6a51c126ab..7a79d9f91d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,8 +1,11 @@ # 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 reach us at . +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: -You should _not_ report such issues on GitHub or in other public spaces to give us time to publish a fix for the issue without exposing Mastodon's users to increased risk. +- open a [Github security issue on the Mastodon project](https://github.com/mastodon/mastodon/security/advisories/new) +- reach us at + +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. ## Scope From b085dcc921497f08e72cb29cf0b5cb07699d9d74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 16:47:40 +0200 Subject: [PATCH 125/163] Update dependency mime-types to v3.5.1 (#26595) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e92079c1af..706df8ffd9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -452,7 +452,7 @@ GEM hashie (~> 5.0) memory_profiler (1.0.1) method_source (1.0.0) - mime-types (3.5.0) + mime-types (3.5.1) mime-types-data (~> 3.2015) mime-types-data (3.2023.0808) mini_mime (1.1.5) From 284f99b924950820e11fb4dc48943cabd6335f69 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Tue, 22 Aug 2023 16:53:27 +0200 Subject: [PATCH 126/163] Add cherokee to languages dropdown (#26012) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 1f400b477a..1256932fd9 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -188,6 +188,7 @@ module LanguagesHelper ISO_639_3 = { ast: ['Asturian', 'Asturianu'].freeze, + chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze, ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze, cnr: ['Montenegrin', 'crnogorski'].freeze, jbo: ['Lojban', 'la .lojban.'].freeze, From 3adf76ce89a2c2d78faa6e116828822ef228be9a Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Tue, 22 Aug 2023 17:50:04 +0200 Subject: [PATCH 127/163] Add Kalmyk to languages dropdown (#26013) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 1256932fd9..e76def5818 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -201,6 +201,7 @@ module LanguagesHelper smj: ['Lule Sami', 'Julevsámegiella'].freeze, szl: ['Silesian', 'ślůnsko godka'].freeze, tok: ['Toki Pona', 'toki pona'].freeze, + xal: ['Kalmyk', 'Хальмг келн'].freeze, zba: ['Balaibalan', 'باليبلن'].freeze, zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze, }.freeze From 523ec5b349cbdb3e67cc3c52d71da1c8394c34a9 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 22 Aug 2023 18:24:03 +0200 Subject: [PATCH 128/163] Remove leftover `.orig` files that were mistakenly included (#2379) --- .../glitch/features/status/index.jsx.orig | 761 --------- .../glitch/styles/components/modal.scss.orig | 1425 ----------------- 2 files changed, 2186 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/status/index.jsx.orig delete mode 100644 app/javascript/flavours/glitch/styles/components/modal.scss.orig diff --git a/app/javascript/flavours/glitch/features/status/index.jsx.orig b/app/javascript/flavours/glitch/features/status/index.jsx.orig deleted file mode 100644 index d35b3a522a..0000000000 --- a/app/javascript/flavours/glitch/features/status/index.jsx.orig +++ /dev/null @@ -1,761 +0,0 @@ -import PropTypes from 'prop-types'; - -import { defineMessages, injectIntl } from 'react-intl'; - -import classNames from 'classnames'; -import { Helmet } from 'react-helmet'; - -import Immutable from 'immutable'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { HotKeys } from 'react-hotkeys'; - -import { initBlockModal } from 'flavours/glitch/actions/blocks'; -import { initBoostModal } from 'flavours/glitch/actions/boosts'; -import { - replyCompose, - mentionCompose, - directCompose, -} from 'flavours/glitch/actions/compose'; -import { - favourite, - unfavourite, - bookmark, - unbookmark, - reblog, - unreblog, - pin, - unpin, -} from 'flavours/glitch/actions/interactions'; -import { changeLocalSetting } from 'flavours/glitch/actions/local_settings'; -import { openModal } from 'flavours/glitch/actions/modal'; -import { initMuteModal } from 'flavours/glitch/actions/mutes'; -import { initReport } from 'flavours/glitch/actions/reports'; -import { - fetchStatus, - muteStatus, - unmuteStatus, - deleteStatus, - editStatus, - hideStatus, - revealStatus, - translateStatus, - undoStatusTranslation, -} from 'flavours/glitch/actions/statuses'; -import { Icon } from 'flavours/glitch/components/icon'; -import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator'; -import { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status'; -import ScrollContainer from 'flavours/glitch/containers/scroll_container'; -import StatusContainer from 'flavours/glitch/containers/status_container'; -import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error'; -import Column from 'flavours/glitch/features/ui/components/column'; -import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/initial_state'; -import { makeGetStatus, makeGetPictureInPicture } from 'flavours/glitch/selectors'; -import { autoUnfoldCW } from 'flavours/glitch/utils/content_warning'; - -import ColumnHeader from '../../components/column_header'; -import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen'; - -import ActionBar from './components/action_bar'; -import DetailedStatus from './components/detailed_status'; - -const messages = defineMessages({ - deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, - deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, - redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, - redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favorites and boosts will be lost, and replies to the original post will be orphaned.' }, - revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' }, - hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' }, - statusTitleWithAttachments: { id: 'status.title.with_attachments', defaultMessage: '{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}' }, - detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' }, - replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, - replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - tootHeading: { id: 'account.posts_with_replies', defaultMessage: 'Posts and replies' }, -}); - -const makeMapStateToProps = () => { - const getStatus = makeGetStatus(); - const getPictureInPicture = makeGetPictureInPicture(); - - const getAncestorsIds = createSelector([ - (_, { id }) => id, - state => state.getIn(['contexts', 'inReplyTos']), - ], (statusId, inReplyTos) => { - let ancestorsIds = Immutable.List(); - ancestorsIds = ancestorsIds.withMutations(mutable => { - let id = statusId; - - while (id && !mutable.includes(id)) { - mutable.unshift(id); - id = inReplyTos.get(id); - } - }); - - return ancestorsIds; - }); - - const getDescendantsIds = createSelector([ - (_, { id }) => id, - state => state.getIn(['contexts', 'replies']), - state => state.get('statuses'), - ], (statusId, contextReplies, statuses) => { - let descendantsIds = []; - const ids = [statusId]; - - while (ids.length > 0) { - let id = ids.pop(); - const replies = contextReplies.get(id); - - if (statusId !== id) { - descendantsIds.push(id); - } - - if (replies) { - replies.reverse().forEach(reply => { - if (!ids.includes(reply) && !descendantsIds.includes(reply) && statusId !== reply) ids.push(reply); - }); - } - } - - let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account')); - if (insertAt !== -1) { - descendantsIds.forEach((id, idx) => { - if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) { - descendantsIds.splice(idx, 1); - descendantsIds.splice(insertAt, 0, id); - insertAt += 1; - } - }); - } - - return Immutable.List(descendantsIds); - }); - - const mapStateToProps = (state, props) => { - const status = getStatus(state, { id: props.params.statusId }); - - let ancestorsIds = Immutable.List(); - let descendantsIds = Immutable.List(); - - if (status) { - ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); - descendantsIds = getDescendantsIds(state, { id: status.get('id') }); - } - - return { - isLoading: state.getIn(['statuses', props.params.statusId, 'isLoading']), - status, - ancestorsIds, - descendantsIds, - settings: state.get('local_settings'), - askReplyConfirmation: state.getIn(['local_settings', 'confirm_before_clearing_draft']) && state.getIn(['compose', 'text']).trim().length !== 0, - domain: state.getIn(['meta', 'domain']), - pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }), - }; - }; - - return mapStateToProps; -}; - -const truncate = (str, num) => { - const arr = Array.from(str); - if (arr.length > num) { - return arr.slice(0, num).join('') + '…'; - } else { - return str; - } -}; - -const titleFromStatus = (intl, status) => { - const displayName = status.getIn(['account', 'display_name']); - const username = status.getIn(['account', 'username']); - const user = displayName.trim().length === 0 ? username : displayName; - const text = status.get('search_index'); - const attachmentCount = status.get('media_attachments').size; - - return text ? `${user}: "${truncate(text, 30)}"` : intl.formatMessage(messages.statusTitleWithAttachments, { user, attachmentCount }); -}; - -class Status extends ImmutablePureComponent { - - static contextTypes = { - router: PropTypes.object, - identity: PropTypes.object, - }; - - static propTypes = { - params: PropTypes.object.isRequired, - dispatch: PropTypes.func.isRequired, - status: ImmutablePropTypes.map, - isLoading: PropTypes.bool, - settings: ImmutablePropTypes.map.isRequired, - ancestorsIds: ImmutablePropTypes.list.isRequired, - descendantsIds: ImmutablePropTypes.list.isRequired, - intl: PropTypes.object.isRequired, - askReplyConfirmation: PropTypes.bool, - multiColumn: PropTypes.bool, - domain: PropTypes.string.isRequired, - pictureInPicture: ImmutablePropTypes.contains({ - inUse: PropTypes.bool, - available: PropTypes.bool, - }), - }; - - state = { - fullscreen: false, - isExpanded: undefined, - threadExpanded: undefined, - statusId: undefined, - loadedStatusId: undefined, - showMedia: undefined, - revealBehindCW: undefined, - }; - - componentDidMount () { - attachFullscreenListener(this.onFullScreenChange); - this.props.dispatch(fetchStatus(this.props.params.statusId)); - } - - static getDerivedStateFromProps(props, state) { - let update = {}; - let updated = false; - - if (props.params.statusId && state.statusId !== props.params.statusId) { - props.dispatch(fetchStatus(props.params.statusId)); - update.threadExpanded = undefined; - update.statusId = props.params.statusId; - updated = true; - } - - const revealBehindCW = props.settings.getIn(['media', 'reveal_behind_cw']); - if (revealBehindCW !== state.revealBehindCW) { - update.revealBehindCW = revealBehindCW; - if (revealBehindCW) update.showMedia = defaultMediaVisibility(props.status, props.settings); - updated = true; - } - - if (props.status && state.loadedStatusId !== props.status.get('id')) { - update.showMedia = defaultMediaVisibility(props.status, props.settings); - update.loadedStatusId = props.status.get('id'); - update.isExpanded = autoUnfoldCW(props.settings, props.status); - updated = true; - } - - return updated ? update : null; - } - - handleToggleHidden = () => { - const { status } = this.props; - - if (this.props.settings.getIn(['content_warnings', 'shared_state'])) { - if (status.get('hidden')) { - this.props.dispatch(revealStatus(status.get('id'))); - } else { - this.props.dispatch(hideStatus(status.get('id'))); - } - } else if (this.props.status.get('spoiler_text')) { - this.setExpansion(!this.state.isExpanded); - } - }; - - handleToggleMediaVisibility = () => { - this.setState({ showMedia: !this.state.showMedia }); - }; - - handleModalFavourite = (status) => { - this.props.dispatch(favourite(status)); - }; - - handleFavouriteClick = (status, e) => { - const { dispatch } = this.props; - const { signedIn } = this.context.identity; - - if (signedIn) { - if (status.get('favourited')) { - dispatch(unfavourite(status)); - } else { - if ((e && e.shiftKey) || !favouriteModal) { - this.handleModalFavourite(status); - } else { - dispatch(openModal({ - modalType: 'FAVOURITE', - modalProps: { - status, - onFavourite: this.handleModalFavourite, - }, - })); - } - } - } else { - dispatch(openModal({ - modalType: 'INTERACTION', - modalProps: { - type: 'favourite', - accountId: status.getIn(['account', 'id']), - url: status.get('url'), - }, - })); - } - }; - - handlePin = (status) => { - if (status.get('pinned')) { - this.props.dispatch(unpin(status)); - } else { - this.props.dispatch(pin(status)); - } - }; - - handleReplyClick = (status) => { - const { askReplyConfirmation, dispatch, intl } = this.props; - const { signedIn } = this.context.identity; - - if (signedIn) { - if (askReplyConfirmation) { - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - message: intl.formatMessage(messages.replyMessage), - confirm: intl.formatMessage(messages.replyConfirm), - onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_before_clearing_draft'], false)), - onConfirm: () => dispatch(replyCompose(status, this.context.router.history)), - }, - })); - } else { - dispatch(replyCompose(status, this.context.router.history)); - } - } else { - dispatch(openModal({ - modalType: 'INTERACTION', - modalProps: { - type: 'reply', - accountId: status.getIn(['account', 'id']), - url: status.get('url'), - }, - })); - } - }; - - handleModalReblog = (status, privacy) => { - const { dispatch } = this.props; - - if (status.get('reblogged')) { - dispatch(unreblog(status)); - } else { - dispatch(reblog(status, privacy)); - } - }; - - handleReblogClick = (status, e) => { - const { settings, dispatch } = this.props; - const { signedIn } = this.context.identity; - - if (signedIn) { - if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) { - dispatch(initBoostModal({ status, onReblog: this.handleModalReblog, missingMediaDescription: true })); - } else if ((e && e.shiftKey) || !boostModal) { - this.handleModalReblog(status); - } else { - dispatch(initBoostModal({ status, onReblog: this.handleModalReblog })); - } - } else { - dispatch(openModal({ - modalType: 'INTERACTION', - modalProps: { - type: 'reblog', - accountId: status.getIn(['account', 'id']), - url: status.get('url'), - }, - })); - } - }; - - handleBookmarkClick = (status) => { - if (status.get('bookmarked')) { - this.props.dispatch(unbookmark(status)); - } else { - this.props.dispatch(bookmark(status)); - } - }; - - handleDeleteClick = (status, history, withRedraft = false) => { - const { dispatch, intl } = this.props; - - if (!deleteModal) { - dispatch(deleteStatus(status.get('id'), history, withRedraft)); - } else { - dispatch(openModal({ - modalType: 'CONFIRM', - modalProps: { - message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage), - confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm), - onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)), - }, - })); - } - }; - - handleEditClick = (status, history) => { - this.props.dispatch(editStatus(status.get('id'), history)); - }; - - handleDirectClick = (account, router) => { - this.props.dispatch(directCompose(account, router)); - }; - - handleMentionClick = (account, router) => { - this.props.dispatch(mentionCompose(account, router)); - }; - - handleOpenMedia = (media, index, lang) => { - this.props.dispatch(openModal({ - modalType: 'MEDIA', - modalProps: { statusId: this.props.status.get('id'), media, index, lang }, - })); - }; - - handleOpenVideo = (media, lang, options) => { - this.props.dispatch(openModal({ - modalType: 'VIDEO', - modalProps: { statusId: this.props.status.get('id'), media, lang, options }, - })); - }; - - handleHotkeyOpenMedia = e => { - const { status } = this.props; - - e.preventDefault(); - - if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 }); - } else { - this.handleOpenMedia(status.get('media_attachments'), 0); - } - } - }; - - handleMuteClick = (account) => { - this.props.dispatch(initMuteModal(account)); - }; - - handleConversationMuteClick = (status) => { - if (status.get('muted')) { - this.props.dispatch(unmuteStatus(status.get('id'))); - } else { - this.props.dispatch(muteStatus(status.get('id'))); - } - }; - - handleToggleAll = () => { - const { status, ancestorsIds, descendantsIds, settings } = this.props; - const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS()); - let { isExpanded } = this.state; - - if (settings.getIn(['content_warnings', 'shared_state'])) - isExpanded = !status.get('hidden'); - - if (!isExpanded) { - this.props.dispatch(revealStatus(statusIds)); - } else { - this.props.dispatch(hideStatus(statusIds)); - } - - this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded }); - }; - - handleTranslate = status => { - const { dispatch } = this.props; - - if (status.get('translation')) { - dispatch(undoStatusTranslation(status.get('id'), status.get('poll'))); - } else { - dispatch(translateStatus(status.get('id'))); - } - }; - - handleBlockClick = (status) => { - const { dispatch } = this.props; - const account = status.get('account'); - dispatch(initBlockModal(account)); - }; - - handleReport = (status) => { - this.props.dispatch(initReport(status.get('account'), status)); - }; - - handleEmbed = (status) => { - this.props.dispatch(openModal({ - modalType: 'EMBED', - modalProps: { id: status.get('id') }, - })); - }; - - handleHotkeyToggleSensitive = () => { - this.handleToggleMediaVisibility(); - }; - - handleHotkeyMoveUp = () => { - this.handleMoveUp(this.props.status.get('id')); - }; - - handleHotkeyMoveDown = () => { - this.handleMoveDown(this.props.status.get('id')); - }; - - handleHotkeyReply = e => { - e.preventDefault(); - this.handleReplyClick(this.props.status); - }; - - handleHotkeyFavourite = () => { - this.handleFavouriteClick(this.props.status); - }; - - handleHotkeyBoost = () => { - this.handleReblogClick(this.props.status); - }; - - handleHotkeyBookmark = () => { - this.handleBookmarkClick(this.props.status); - }; - - handleHotkeyMention = e => { - e.preventDefault(); - this.handleMentionClick(this.props.status); - }; - - handleHotkeyOpenProfile = () => { - this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`); - }; - - handleMoveUp = id => { - const { status, ancestorsIds, descendantsIds } = this.props; - - if (id === status.get('id')) { - this._selectChild(ancestorsIds.size - 1, true); - } else { - let index = ancestorsIds.indexOf(id); - - if (index === -1) { - index = descendantsIds.indexOf(id); - this._selectChild(ancestorsIds.size + index, true); - } else { - this._selectChild(index - 1, true); - } - } - }; - - handleMoveDown = id => { - const { status, ancestorsIds, descendantsIds } = this.props; - - if (id === status.get('id')) { - this._selectChild(ancestorsIds.size + 1, false); - } else { - let index = ancestorsIds.indexOf(id); - - if (index === -1) { - index = descendantsIds.indexOf(id); - this._selectChild(ancestorsIds.size + index + 2, false); - } else { - this._selectChild(index + 1, false); - } - } - }; - - _selectChild (index, align_top) { - const container = this.node; - const element = container.querySelectorAll('.focusable')[index]; - - if (element) { - if (align_top && container.scrollTop > element.offsetTop) { - element.scrollIntoView(true); - } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) { - element.scrollIntoView(false); - } - element.focus(); - } - } - - handleHeaderClick = () => { - this.column.scrollTop(); - }; - - renderChildren (list, ancestors) { - const { params: { statusId } } = this.props; - - return list.map((id, i) => ( - 0 && list.get(i - 1)} - nextId={list.get(i + 1) || (ancestors && statusId)} - rootId={statusId} - /> - )); - } - - setExpansion = value => { - this.setState({ isExpanded: value }); - }; - - setRef = c => { - this.node = c; - }; - - setColumnRef = c => { - this.column = c; - }; - - componentDidUpdate (prevProps) { - const { status, ancestorsIds, multiColumn } = this.props; - - if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) { - window.requestAnimationFrame(() => { - this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true); - - // In the single-column interface, `scrollIntoView` will put the post behind the header, - // so compensate for that. - if (!multiColumn) { - const offset = document.querySelector('.column-header__wrapper')?.getBoundingClientRect()?.bottom; - if (offset) { - const scrollingElement = document.scrollingElement || document.body; - scrollingElement.scrollBy(0, -offset); - } - } - }); - } - } - - componentWillUnmount () { - detachFullscreenListener(this.onFullScreenChange); - } - - onFullScreenChange = () => { - this.setState({ fullscreen: isFullscreen() }); - }; - - render () { - let ancestors, descendants; - const { isLoading, status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; - const { fullscreen } = this.state; - - if (isLoading) { - return ( - - - - ); - } - - if (status === null) { - return ( - - ); - } - - const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded; - - if (ancestorsIds && ancestorsIds.size > 0) { - ancestors = <>{this.renderChildren(ancestorsIds, true)}; - } - - if (descendantsIds && descendantsIds.size > 0) { - descendants = <>{this.renderChildren(descendantsIds)}; - } - - const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1; - const isIndexable = !status.getIn(['account', 'noindex']); - - const handlers = { - moveUp: this.handleHotkeyMoveUp, - moveDown: this.handleHotkeyMoveDown, - reply: this.handleHotkeyReply, - favourite: this.handleHotkeyFavourite, - boost: this.handleHotkeyBoost, - bookmark: this.handleHotkeyBookmark, - mention: this.handleHotkeyMention, - openProfile: this.handleHotkeyOpenProfile, - toggleSpoiler: this.handleToggleHidden, - toggleSensitive: this.handleHotkeyToggleSensitive, - openMedia: this.handleHotkeyOpenMedia, - }; - - return ( - - - )} - /> - - -
- {ancestors} - - -
- - - -
-
- - {descendants} -
-
- - - {titleFromStatus(intl, status)} - - - -
- ); - } - -} - -export default injectIntl(connect(makeMapStateToProps)(Status)); diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss.orig b/app/javascript/flavours/glitch/styles/components/modal.scss.orig deleted file mode 100644 index 49173e1ee8..0000000000 --- a/app/javascript/flavours/glitch/styles/components/modal.scss.orig +++ /dev/null @@ -1,1425 +0,0 @@ -.modal-container--preloader { - background: lighten($ui-base-color, 8%); -} - -.modal-root { - position: relative; - z-index: 9999; -} - -.modal-root__overlay { - position: fixed; - top: 0; - inset-inline-start: 0; - inset-inline-end: 0; - bottom: 0; - background: rgba($base-overlay-background, 0.7); - transition: background 0.5s; -} - -.modal-root__container { - position: fixed; - top: 0; - inset-inline-start: 0; - width: 100%; - height: 100%; - box-sizing: border-box; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - align-content: space-around; - z-index: 9999; - pointer-events: none; - user-select: none; -} - -.modal-root__modal { - pointer-events: auto; - display: flex; -} - -.media-modal__zoom-button { - position: absolute; - inset-inline-end: 64px; - top: 8px; - z-index: 100; - pointer-events: auto; - transition: opacity 0.3s linear; - will-change: opacity; -} - -.media-modal__zoom-button--hidden { - pointer-events: none; - opacity: 0; -} - -.onboarding-modal, -.error-modal, -.embed-modal { - background: $ui-secondary-color; - color: $inverted-text-color; - border-radius: 8px; - overflow: hidden; - display: flex; - flex-direction: column; -} - -.onboarding-modal__pager { - height: 80vh; - width: 80vw; - max-width: 520px; - max-height: 470px; - - .react-swipeable-view-container > div { - width: 100%; - height: 100%; - box-sizing: border-box; - flex-direction: column; - align-items: center; - justify-content: center; - display: flex; - user-select: text; - } -} - -.error-modal__body { - height: 80vh; - width: 80vw; - max-width: 520px; - max-height: 420px; - position: relative; - - & > div { - position: absolute; - top: 0; - inset-inline-start: 0; - width: 100%; - height: 100%; - box-sizing: border-box; - padding: 25px; - flex-direction: column; - align-items: center; - justify-content: center; - display: flex; - opacity: 0; - user-select: text; - } -} - -.error-modal__body { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; -} - -@media screen and (width <= 550px) { - .onboarding-modal { - width: 100%; - height: 100%; - border-radius: 0; - } - - .onboarding-modal__pager { - width: 100%; - height: auto; - max-width: none; - max-height: none; - flex: 1 1 auto; - } -} - -.onboarding-modal__paginator, -.error-modal__footer { - flex: 0 0 auto; - background: darken($ui-secondary-color, 8%); - display: flex; - padding: 25px; - - & > div { - min-width: 33px; - } - - .onboarding-modal__nav, - .error-modal__nav { - color: $lighter-text-color; - border: 0; - font-size: 14px; - font-weight: 500; - padding: 10px 25px; - line-height: inherit; - height: auto; - margin: -10px; - border-radius: 4px; - background-color: transparent; - - &:hover, - &:focus, - &:active { - color: darken($lighter-text-color, 4%); - background-color: darken($ui-secondary-color, 16%); - } - - &.onboarding-modal__done, - &.onboarding-modal__next { - color: $inverted-text-color; - - &:hover, - &:focus, - &:active { - color: lighten($inverted-text-color, 4%); - } - } - } -} - -.error-modal__footer { - justify-content: center; -} - -.onboarding-modal__dots { - flex: 1 1 auto; - display: flex; - align-items: center; - justify-content: center; -} - -.onboarding-modal__dot { - width: 14px; - height: 14px; - border-radius: 14px; - background: darken($ui-secondary-color, 16%); - margin: 0 3px; - cursor: pointer; - - &:hover { - background: darken($ui-secondary-color, 18%); - } - - &.active { - cursor: default; - background: darken($ui-secondary-color, 24%); - } -} - -.onboarding-modal__page__wrapper { - pointer-events: none; - padding: 25px; - padding-bottom: 0; - - &.onboarding-modal__page__wrapper--active { - pointer-events: auto; - } -} - -.onboarding-modal__page { - cursor: default; - line-height: 21px; - - h1 { - font-size: 18px; - font-weight: 500; - color: $inverted-text-color; - margin-bottom: 20px; - } - - a { - color: $highlight-text-color; - - &:hover, - &:focus, - &:active { - color: lighten($highlight-text-color, 4%); - } - } - - .navigation-bar a { - color: inherit; - } - - p { - font-size: 16px; - color: $lighter-text-color; - margin-top: 10px; - margin-bottom: 10px; - - &:last-child { - margin-bottom: 0; - } - - strong { - font-weight: 500; - background: $ui-base-color; - color: $secondary-text-color; - border-radius: 4px; - font-size: 14px; - padding: 3px 6px; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - } -} - -.onboarding-modal__page__wrapper-0 { - background: url('~images/elephant_ui_greeting.svg') no-repeat left bottom / - auto 250px; - height: 100%; - padding: 0; -} - -.onboarding-modal__page-one { - &__lead { - padding: 65px; - padding-top: 45px; - padding-bottom: 0; - margin-bottom: 10px; - - h1 { - font-size: 26px; - line-height: 36px; - margin-bottom: 8px; - } - - p { - margin-bottom: 0; - } - } - - &__extra { - padding-inline-end: 65px; - padding-inline-start: 185px; - text-align: center; - } -} - -.display-case { - text-align: center; - font-size: 15px; - margin-bottom: 15px; - - &__label { - font-weight: 500; - color: $inverted-text-color; - margin-bottom: 5px; - text-transform: uppercase; - font-size: 12px; - } - - &__case { - background: $ui-base-color; - color: $secondary-text-color; - font-weight: 500; - padding: 10px; - border-radius: 4px; - } -} - -.onboarding-modal__page-two, -.onboarding-modal__page-three, -.onboarding-modal__page-four, -.onboarding-modal__page-five { - p { - text-align: start; - } - - .figure { - background: darken($ui-base-color, 8%); - color: $secondary-text-color; - margin-bottom: 20px; - border-radius: 4px; - padding: 10px; - text-align: center; - font-size: 14px; - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.3); - - .onboarding-modal__image { - border-radius: 4px; - margin-bottom: 10px; - } - - &.non-interactive { - pointer-events: none; - text-align: start; - } - } -} - -.onboarding-modal__page-four__columns { - .row { - display: flex; - margin-bottom: 20px; - - & > div { - flex: 1 1 0; - margin: 0 10px; - - &:first-child { - margin-inline-start: 0; - } - - &:last-child { - margin-inline-end: 0; - } - - p { - text-align: center; - } - } - - &:last-child { - margin-bottom: 0; - } - } - - .column-header { - color: $primary-text-color; - } -} - -@media screen and (width <= 320px) and (height <= 600px) { - .onboarding-modal__page p { - font-size: 14px; - line-height: 20px; - } - - .onboarding-modal__page-two .figure, - .onboarding-modal__page-three .figure, - .onboarding-modal__page-four .figure, - .onboarding-modal__page-five .figure { - font-size: 12px; - margin-bottom: 10px; - } - - .onboarding-modal__page-four__columns .row { - margin-bottom: 10px; - } - - .onboarding-modal__page-four__columns .column-header { - padding: 5px; - font-size: 12px; - } -} - -.onboard-sliders { - display: inline-block; - max-width: 30px; - max-height: auto; - margin-inline-start: 10px; -} - -.doodle-modal, -.boost-modal, -.confirmation-modal, -.report-modal, -.actions-modal, -.mute-modal, -.block-modal, -.compare-history-modal { - background: lighten($ui-secondary-color, 8%); - color: $inverted-text-color; - border-radius: 8px; - overflow: hidden; - max-width: 90vw; - width: 480px; - position: relative; - flex-direction: column; - - .status__relative-time { - color: $dark-text-color; - float: right; - font-size: 14px; - width: auto; - margin: initial; - padding: initial; - } - - .status__visibility-icon { - color: $dark-text-color; - font-size: 14px; - padding: 0 4px; - } - - .status__display-name { - display: flex; - } - - .status__avatar { - height: 48px; - width: 48px; - } - - .status__content__spoiler-link { - color: lighten($secondary-text-color, 8%); - } -} - -.boost-modal .status-direct { - background-color: inherit; -} - -.actions-modal { - .status { - background: $white; - border-bottom-color: $ui-secondary-color; - padding-top: 10px; - padding-bottom: 10px; - } - - .dropdown-menu__separator { - border-bottom-color: $ui-secondary-color; - } -} - -.boost-modal__container { - overflow-x: scroll; - padding: 10px; - - .status { - user-select: text; - border-bottom: 0; - } -} - -.doodle-modal__action-bar, -.boost-modal__action-bar, -.confirmation-modal__action-bar, -.mute-modal__action-bar, -.block-modal__action-bar { - display: flex; - justify-content: space-between; - background: $ui-secondary-color; - padding: 10px; - line-height: 36px; - - & > div { - flex: 1 1 auto; - text-align: end; - color: $lighter-text-color; - padding-inline-end: 10px; - } - - .button { - flex: 0 0 auto; - } -} - -.boost-modal__status-header { - font-size: 15px; -} - -.boost-modal__status-time { - float: right; - font-size: 14px; -} - -.mute-modal, -.block-modal { - line-height: 24px; -} - -.mute-modal .react-toggle, -.block-modal .react-toggle { - vertical-align: middle; -} - -.report-modal { - width: 90vw; - max-width: 700px; -} - -.report-dialog-modal { - max-width: 90vw; - width: 480px; - height: 80vh; - background: lighten($ui-secondary-color, 8%); - color: $inverted-text-color; - border-radius: 8px; - overflow: hidden; - position: relative; - flex-direction: column; - display: flex; - - &__container { - box-sizing: border-box; - border-top: 1px solid $ui-secondary-color; - padding: 20px; - flex-grow: 1; - display: flex; - flex-direction: column; - min-height: 0; - overflow: auto; - } - - &__title { - font-size: 28px; - line-height: 33px; - font-weight: 700; - margin-bottom: 15px; - - @media screen and (height <= 800px) { - font-size: 22px; - } - } - - &__subtitle { - font-size: 17px; - font-weight: 600; - line-height: 22px; - margin-bottom: 4px; - } - - &__lead { - font-size: 17px; - line-height: 22px; - color: lighten($inverted-text-color, 16%); - margin-bottom: 30px; - - a { - text-decoration: none; - color: $inverted-text-color; - font-weight: 500; - - &:hover { - text-decoration: underline; - } - } - } - - &__actions { - margin-top: 30px; - display: flex; - - .button { - flex: 1 1 auto; - } - } - - &__statuses { - flex-grow: 1; - min-height: 0; - overflow: auto; - } - - .status__content a { - color: $highlight-text-color; - } - - .status__content, - .status__content p { - color: $inverted-text-color; - } - - .status__content__spoiler-link { - color: $primary-text-color; - background: $ui-primary-color; - - &:hover { - background: lighten($ui-primary-color, 8%); - } - } - - .dialog-option .poll__input { - border-color: $inverted-text-color; - color: $ui-secondary-color; - display: inline-flex; - align-items: center; - justify-content: center; - - svg { - width: 8px; - height: auto; - } - - &:active, - &:focus, - &:hover { - border-color: lighten($inverted-text-color, 15%); - border-width: 4px; - } - - &.active { - border-color: $inverted-text-color; - background: $inverted-text-color; - } - } - - .poll__option.dialog-option { - padding: 15px 0; - flex: 0 0 auto; - border-bottom: 1px solid $ui-secondary-color; - - &:last-child { - border-bottom: 0; - } - - & > .poll__option__text { - font-size: 13px; - color: lighten($inverted-text-color, 16%); - - strong { - font-size: 17px; - font-weight: 500; - line-height: 22px; - color: $inverted-text-color; - display: block; - margin-bottom: 4px; - - &:last-child { - margin-bottom: 0; - } - } - } - } - - .flex-spacer { - background: transparent; - } - - &__textarea { - display: block; - box-sizing: border-box; - width: 100%; - color: $inverted-text-color; - background: $simple-background-color; - padding: 10px; - font-family: inherit; - font-size: 17px; - line-height: 22px; - resize: vertical; - border: 0; - outline: 0; - border-radius: 4px; - margin: 20px 0; - - &::placeholder { - color: $dark-text-color; - } - - &:focus { - outline: 0; - } - } - - &__toggle { - display: flex; - align-items: center; - margin-bottom: 10px; - - & > span { - font-size: 17px; - font-weight: 500; - margin-inline-start: 10px; - } - } - - .button.button-secondary { - border-color: $ui-button-secondary-border-color; - color: $ui-button-secondary-color; - flex: 0 0 auto; - - &:hover, - &:focus, - &:active { - border-color: $ui-button-secondary-focus-background-color; - color: $ui-button-secondary-focus-color; - } - } - - hr { - border: 0; - background: transparent; - margin: 15px 0; - } - - .emoji-mart-search { - padding-inline-end: 10px; - } - - .emoji-mart-search-icon { - inset-inline-end: 10px + 5px; - } -} - -.report-modal__container { - display: flex; - border-top: 1px solid $ui-secondary-color; - - @media screen and (width <= 480px) { - flex-wrap: wrap; - overflow-y: auto; - } -} - -.report-modal__statuses, -.report-modal__comment { - box-sizing: border-box; - width: 50%; - - @media screen and (width <= 480px) { - width: 100%; - } -} - -.report-modal__statuses, -.focal-point-modal__content { - flex: 1 1 auto; - min-height: 20vh; - max-height: 80vh; - overflow-y: auto; - overflow-x: hidden; - - .status__content a { - color: $highlight-text-color; - } - - @media screen and (width <= 480px) { - max-height: 10vh; - } -} - -.focal-point-modal__content { - @media screen and (width <= 480px) { - max-height: 40vh; - } -} - -.setting-divider { - background: transparent; - border: 0; - margin: 0; - width: 100%; - height: 1px; - margin-bottom: 29px; -} - -.report-modal__comment { - padding: 20px; - border-inline-end: 1px solid $ui-secondary-color; - max-width: 320px; - - p { - font-size: 14px; - line-height: 20px; - margin-bottom: 20px; - } - - .setting-text { - display: block; - box-sizing: border-box; - width: 100%; - margin: 0; - color: $inverted-text-color; - background: $white; - padding: 10px; - font-family: inherit; - font-size: 14px; - resize: none; - outline: 0; - border-radius: 4px; - border: 1px solid $ui-secondary-color; - min-height: 100px; - max-height: 50vh; - margin-bottom: 10px; - - &:focus { - border: 1px solid darken($ui-secondary-color, 8%); - } - - &__wrapper { - background: $white; - border: 1px solid $ui-secondary-color; - margin-bottom: 10px; - border-radius: 4px; - - .setting-text { - border: 0; - margin-bottom: 0; - border-radius: 0; - - &:focus { - border: 0; - } - } - - &__modifiers { - color: $inverted-text-color; - font-family: inherit; - font-size: 14px; - background: $white; - } - } - - &__toolbar { - display: flex; - justify-content: space-between; - margin-bottom: 20px; - } - } - - .setting-text-label { - display: block; - color: $inverted-text-color; - font-size: 14px; - font-weight: 500; - margin-bottom: 10px; - } - - .setting-toggle { - margin-top: 20px; - margin-bottom: 24px; - - &__label { - color: $inverted-text-color; - font-size: 14px; - } - } - - @media screen and (width <= 480px) { - padding: 10px; - max-width: 100%; - order: 2; - - .setting-toggle { - margin-bottom: 4px; - } - } -} - -.actions-modal { - .status { - overflow-y: auto; - max-height: 300px; - } - - strong { - display: block; - font-weight: 500; - } - - max-height: 80vh; - max-width: 80vw; - - .actions-modal__item-label { - font-weight: 500; - } - - ul { - overflow-y: auto; - flex-shrink: 0; - max-height: 80vh; - - &.with-status { - max-height: calc(80vh - 75px); - } - - li:empty { - margin: 0; - } - - li:not(:empty) { - a { - color: $inverted-text-color; - display: flex; - padding: 12px 16px; - font-size: 15px; - align-items: center; - text-decoration: none; - - &, - button { - transition: none; - } - - &.active, - &:hover, - &:active, - &:focus { - &, - button { - background: $ui-highlight-color; - color: $primary-text-color; - } - } - - & > .react-toggle, - & > .icon, - button:first-child { - margin-inline-end: 10px; - } - } - } - } -} - -.confirmation-modal__action-bar, -.mute-modal__action-bar, -.block-modal__action-bar { - .confirmation-modal__secondary-button { - flex-shrink: 1; - } -} - -.confirmation-modal__secondary-button, -.confirmation-modal__cancel-button, -.mute-modal__cancel-button, -.block-modal__cancel-button { - background-color: transparent; - color: $lighter-text-color; - font-size: 14px; - font-weight: 500; - - &:hover, - &:focus, - &:active { - color: darken($lighter-text-color, 4%); - background-color: transparent; - } -} - -.confirmation-modal__do_not_ask_again { - padding-inline-start: 20px; - padding-inline-end: 20px; - padding-bottom: 10px; - font-size: 14px; - - label, - input { - vertical-align: middle; - } -} - -.confirmation-modal__container, -.mute-modal__container, -.block-modal__container, -.report-modal__target { - padding: 30px; - font-size: 16px; - - strong { - font-weight: 500; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - - select { - appearance: none; - box-sizing: border-box; - font-size: 14px; - color: $inverted-text-color; - display: inline-block; - width: auto; - outline: 0; - font-family: inherit; - background: $simple-background-color - url("data:image/svg+xml;utf8,") - no-repeat right 8px center / auto 16px; - border: 1px solid darken($simple-background-color, 14%); - border-radius: 4px; - padding: 6px 10px; - padding-inline-end: 30px; - } -} - -.confirmation-modal__container, -.report-modal__target { - text-align: center; -} - -.block-modal, -.mute-modal { - &__explanation { - margin-top: 20px; - } - - .setting-toggle { - margin-top: 20px; - margin-bottom: 24px; - display: flex; - align-items: center; - - &__label { - color: $inverted-text-color; - margin: 0; - margin-inline-start: 8px; - } - } -} - -.report-modal__target { - padding: 15px; - - .report-modal__close { - position: absolute; - top: 10px; - inset-inline-end: 10px; - } -} - -.compare-history-modal { - .report-modal__target { - border-bottom: 1px solid $ui-secondary-color; - } - - &__container { - padding: 30px; - pointer-events: all; - overflow-y: auto; - } - - .status__content { - color: $inverted-text-color; - font-size: 19px; - line-height: 24px; - - .emojione { - width: 24px; - height: 24px; - margin: -1px 0 0; - } - - a { - color: $highlight-text-color; - } - - hr { - height: 0.25rem; - padding: 0; - background-color: $ui-secondary-color; - border: 0; - margin: 20px 0; - } - } - - .media-gallery, - .audio-player, - .video-player { - margin-top: 15px; - } -} - -.embed-modal { - width: auto; - max-width: 80vw; - max-height: 80vh; - - h4 { - padding: 30px; - font-weight: 500; - font-size: 16px; - text-align: center; - } - - .embed-modal__container { - padding: 10px; - - .hint { - margin-bottom: 15px; - } - - .embed-modal__html { - outline: 0; - box-sizing: border-box; - display: block; - width: 100%; - border: 0; - padding: 10px; - font-family: mastodon-font-monospace, monospace; - background: $ui-base-color; - color: $primary-text-color; - font-size: 14px; - margin: 0; - margin-bottom: 15px; - border-radius: 4px; - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &:focus { - background: lighten($ui-base-color, 4%); - } - - @media screen and (width <= 600px) { - font-size: 16px; - } - } - - .embed-modal__iframe { - width: 400px; - max-width: 100%; - overflow: hidden; - border: 0; - border-radius: 4px; - } - } -} - -.focal-point { - position: relative; - cursor: move; - overflow: hidden; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - background: $base-shadow-color; - - img, - video, - canvas { - display: block; - max-height: 80vh; - width: 100%; - height: auto; - margin: 0; - object-fit: contain; - background: $base-shadow-color; - } - - &__reticle { - position: absolute; - width: 100px; - height: 100px; - transform: translate(-50%, -50%); - background: url('~images/reticle.png') no-repeat 0 0; - border-radius: 50%; - box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35); - } - - &__overlay { - position: absolute; - width: 100%; - height: 100%; - top: 0; - inset-inline-start: 0; - } - - &__preview { - position: absolute; - bottom: 10px; - inset-inline-end: 10px; - z-index: 2; - cursor: move; - transition: opacity 0.1s ease; - - &:hover { - opacity: 0.5; - } - - strong { - color: $primary-text-color; - font-size: 14px; - font-weight: 500; - display: block; - margin-bottom: 5px; - } - - div { - border-radius: 4px; - box-shadow: 0 0 14px rgba($base-shadow-color, 0.2); - } - } - - @media screen and (width <= 480px) { - img, - video { - max-height: 100%; - } - - &__preview { - display: none; - } - } -} - -.filtered-status-info { - text-align: start; - - .spoiler__text { - margin-top: 20px; - } - - .account { - border-bottom: 0; - } - - .account__display-name strong { - color: $inverted-text-color; - } - - .status__content__spoiler { - display: none; - - &--visible { - display: flex; - } - } - - ul { - padding: 10px; - margin-inline-start: 12px; - list-style: disc inside; - } - - .filtered-status-edit-link { - color: $action-button-color; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -} - -.modal-root__container .privacy-dropdown { - flex-grow: 0; -} - -.modal-root__container .privacy-dropdown__dropdown { - pointer-events: auto; - z-index: 9999; -} - -img.modal-warning { - display: block; - margin: auto; - margin-bottom: 15px; - width: 60px; -} - -.interaction-modal { - max-width: 90vw; - width: 600px; - background: $ui-base-color; - border-radius: 8px; - overflow-x: hidden; - overflow-y: auto; - position: relative; - display: block; - padding: 20px; - - h3 { - font-size: 22px; - line-height: 33px; - font-weight: 700; - text-align: center; - } - - &__icon { - color: $highlight-text-color; - margin: 0 5px; - } - - &__lead { - padding: 20px; - text-align: center; - - h3 { - margin-bottom: 15px; - } - - p { - font-size: 17px; - line-height: 22px; - color: $darker-text-color; - } - } - - &__choices { - display: flex; - - &__choice { - flex: 0 0 auto; - width: 50%; - box-sizing: border-box; - padding: 20px; - - h3 { - margin-bottom: 20px; - } - - p { - color: $darker-text-color; - margin-bottom: 20px; - } - - .button { - margin-bottom: 10px; - - &:last-child { - margin-bottom: 0; - } - } - } - } - - @media screen and (max-width: $no-gap-breakpoint - 1px) { - &__choices { - display: block; - - &__choice { - width: auto; - margin-bottom: 20px; - } - } - } -} - -.copypaste { - display: flex; - align-items: center; - gap: 10px; - - input { - display: block; - font-family: inherit; - background: darken($ui-base-color, 8%); - border: 1px solid $highlight-text-color; - color: $darker-text-color; - border-radius: 4px; - padding: 6px 9px; - line-height: 22px; - font-size: 14px; - transition: border-color 300ms linear; - flex: 1 1 auto; - overflow: hidden; - - &:focus { - outline: 0; - background: darken($ui-base-color, 4%); - } - } - - .button { - flex: 0 0 auto; - transition: background 300ms linear; - } - - &.copied { - input { - border: 1px solid $valid-value-color; - transition: none; - } - - .button { - background: $valid-value-color; - transition: none; - } - } -} From 0b50d6b662eae84e3c6895f5ee1f9321c069b29c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Aug 2023 19:02:47 +0200 Subject: [PATCH 129/163] [Glitch] Fix unfollow icon styling in advanced column Port bd7f631918b3acbecf0c385008389ba22c945dbe to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/account/components/header.jsx | 4 ++-- app/javascript/flavours/glitch/styles/components/misc.scss | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/features/account/components/header.jsx b/app/javascript/flavours/glitch/features/account/components/header.jsx index c956834776..acebd9f322 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.jsx +++ b/app/javascript/flavours/glitch/features/account/components/header.jsx @@ -196,9 +196,9 @@ class Header extends ImmutablePureComponent { if (signedIn && !account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn = - - - + + + +
diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index f1d591c73f..799354d183 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -568,7 +568,7 @@ class Status extends ImmutablePureComponent { onMoveUp={this.handleMoveUp} onMoveDown={this.handleMoveDown} contextType='thread' - previousId={i > 0 && list.get(i - 1)} + previousId={i > 0 ? list.get(i - 1) : undefined} nextId={list.get(i + 1) || (ancestors && statusId)} rootId={statusId} /> diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index fb6acfaeaa..f6de5dad35 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -115,7 +115,10 @@ export default class ModalRoot extends PureComponent { {visible && ( <> - {(SpecificComponent) => } + {(SpecificComponent) => { + const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined; + return + }} From 77280a5b1d60b76c6a517fc9789db9a98dd08f8b Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 23 Aug 2023 15:44:52 +0200 Subject: [PATCH 141/163] Change hashtag bar tags to be de-emphasized (#26606) --- .../mastodon/components/hashtag_bar.tsx | 2 +- app/javascript/styles/mastodon/components.scss | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index 75bd74da01..674c481b81 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -216,7 +216,7 @@ const HashtagBar: React.FC<{
{revealedHashtags.map((hashtag) => ( - #{hashtag} + #{hashtag} ))} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 7662f3d9b7..664f6ca02b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9305,16 +9305,15 @@ noscript { a { display: inline-flex; - border-radius: 4px; - background: rgba($highlight-text-color, 0.2); - color: $highlight-text-color; - padding: 0.4em 0.6em; + color: $dark-text-color; text-decoration: none; - &:hover, - &:focus, - &:active { - background: rgba($highlight-text-color, 0.3); + &:hover { + text-decoration: none; + + span { + text-decoration: underline; + } } } } From f6ce219c9d37400c732c7650a658449128eadbd6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Aug 2023 15:45:21 +0200 Subject: [PATCH 142/163] Update dependency immutable to v4.3.3 (#26622) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a57b203de5..7ef2a0d5b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6643,9 +6643,9 @@ immutable@^3.8.2: integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== immutable@^4.0.0, immutable@^4.0.0-rc.1, immutable@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" - integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== + version "4.3.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.3.tgz#8934ff6826d996a7642c8dc4b46e694dd19561e3" + integrity sha512-808ZFYMsIRAjLAu5xkKo0TsbY9LBy9H5MazTKIEHerNkg0ymgilGfBPMR/3G7d/ihGmuK2Hw8S1izY2d3kd3wA== import-fresh@^3.2.1: version "3.3.0" From 97b2bf351d98ba3c8e87b54f46c3272e0e319fd6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Aug 2023 15:45:38 +0200 Subject: [PATCH 143/163] Update dependency oj to v3.16.0 (#26520) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 64ad456f13..e3d9eac963 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -482,7 +482,7 @@ GEM nokogiri (1.15.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) - oj (3.15.0) + oj (3.16.0) omniauth (2.1.1) hashie (>= 3.4.6) rack (>= 2.2.3) From d0181fc9e67a7645a1df9c69da3c9a92664fe9b8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Aug 2023 15:45:56 +0200 Subject: [PATCH 144/163] Update dependency sass to v1.66.1 (#26534) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7ef2a0d5b4..403748ea9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10599,9 +10599,9 @@ sass-loader@^10.2.0: semver "^7.3.2" sass@^1.62.1: - version "1.65.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.65.1.tgz#8f283b0c26335a88246a448d22e1342ba2ea1432" - integrity sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA== + version "1.66.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1" + integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 032dfdfb70963ec9dbdad8f40b5056e16680ec86 Mon Sep 17 00:00:00 2001 From: jsgoldstein Date: Wed, 23 Aug 2023 09:46:14 -0400 Subject: [PATCH 145/163] Add elastic search installation into Vagrantfile (#26512) --- .env.vagrant | 4 ++++ Vagrantfile | 43 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/.env.vagrant b/.env.vagrant index 32ed9b9229..69c1bf1fb3 100644 --- a/.env.vagrant +++ b/.env.vagrant @@ -2,3 +2,7 @@ VAGRANT=true LOCAL_DOMAIN=mastodon.local BIND=0.0.0.0 DB_HOST=/var/run/postgresql/ + +ES_ENABLED=true +ES_HOST=localhost +ES_PORT=9200 \ No newline at end of file diff --git a/Vagrantfile b/Vagrantfile index 880cc18495..1117d62fff 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -60,6 +60,37 @@ sudo usermod -a -G rvm $USER SCRIPT +$provisionElasticsearch = <