From 49150e2f1d6ae197b160a9dc701f5ac154929ca2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:52:40 +0100 Subject: [PATCH 01/16] Update dependency ws to v8.15.1 (#28343) 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 7903ecc5ca..bd2545cf6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17739,8 +17739,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0, ws@npm:^8.12.1, ws@npm:^8.14.2": - version: 8.15.0 - resolution: "ws@npm:8.15.0" + version: 8.15.1 + resolution: "ws@npm:8.15.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17749,7 +17749,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: b778a405b2589ffbf549323e2f404f1f72e372a049d332d2f0b1f33057e9fbb14a05aa474cb156e4584b418cd95edf4297c0ca5263d6519e8009064bf8e0b80d + checksum: 9964360dd5ab35c7376bd7c4295a3c8bd44ea0838c9413742548a6fb3ec371fc6c18552d5b8e76bdc21536db1909765612815bae072674b5ec69971605395a96 languageName: node linkType: hard From 3a59365e40733a502b4a20515e15f8e18b7abe5f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:52:43 +0100 Subject: [PATCH 02/16] Update dependency test-prof to v1.3.1 (#28342) 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 07b1a4bbe3..e53e18292e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -759,7 +759,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) - test-prof (1.3.0) + test-prof (1.3.1) thor (1.3.0) tilt (2.3.0) timeout (0.4.1) From 8a3d8c6c14f4e9b57967104286fa6eaa305e6412 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Dec 2023 05:14:19 -0500 Subject: [PATCH 03/16] Remove the `stub_stdout` wrapper around CLI specs (#28340) --- lib/mastodon/cli/search.rb | 12 ++- spec/lib/mastodon/cli/accounts_spec.rb | 138 ++++++++++++++++-------- spec/lib/mastodon/cli/ip_blocks_spec.rb | 6 +- spec/lib/mastodon/cli/settings_spec.rb | 3 +- spec/rails_helper.rb | 9 -- 5 files changed, 110 insertions(+), 58 deletions(-) diff --git a/lib/mastodon/cli/search.rb b/lib/mastodon/cli/search.rb index 25a595aadd..77c455f049 100644 --- a/lib/mastodon/cli/search.rb +++ b/lib/mastodon/cli/search.rb @@ -42,7 +42,13 @@ module Mastodon::CLI pool = Concurrent::FixedThreadPool.new(options[:concurrency], max_queue: options[:concurrency] * 10) 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) + progress = ProgressBar.create( + { + total: nil, + format: '%t%c/%u |%b%i| %e (%r docs/s)', + autofinish: false, + }.merge(progress_output_options) + ) Chewy::Stash::Specification.reset! if options[:reset_chewy] @@ -116,5 +122,9 @@ module Mastodon::CLI say('Cannot run with this batch_size setting, must be at least 1', :red) exit(1) end + + def progress_output_options + Rails.env.test? ? { output: ProgressBar::Outputs::Null } : {} + end end end diff --git a/spec/lib/mastodon/cli/accounts_spec.rb b/spec/lib/mastodon/cli/accounts_spec.rb index 563f6e877d..64df29ebb3 100644 --- a/spec/lib/mastodon/cli/accounts_spec.rb +++ b/spec/lib/mastodon/cli/accounts_spec.rb @@ -77,7 +77,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user with confirmed status' do - subject + expect { subject } + .to output_results('New password') user = User.find_by(email: options[:email]) @@ -95,7 +96,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user with approved status' do - subject + expect { subject } + .to output_results('New password') user = User.find_by(email: options[:email]) @@ -111,7 +113,8 @@ describe Mastodon::CLI::Accounts do it_behaves_like 'a new user with given email address and username' it 'creates a new user and assigns the specified role' do - subject + expect { subject } + .to output_results('New password') role = User.find_by(email: options[:email])&.role @@ -148,7 +151,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'tootctl_new@example.com', reattach: true, force: true } } it 'reattaches the account to the new user and deletes the previous user' do - subject + expect { subject } + .to output_results('New password') user = Account.find_local('tootctl_username')&.user @@ -220,7 +224,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { role: default_role.name } } it "updates the user's role to the specified role" do - subject + expect { subject } + .to output_results('OK') role = user.reload.role @@ -235,7 +240,8 @@ describe Mastodon::CLI::Accounts do let(:user) { Fabricate(:user, role: role) } it "removes the user's role successfully" do - subject + expect { subject } + .to output_results('OK') role = user.reload.role @@ -248,13 +254,15 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'new_email@email.com' } } it "sets the user's unconfirmed email to the provided email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.unconfirmed_email).to eq(options[:email]) end it "does not update the user's original email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.email).to eq('old_email@email.com') end @@ -264,13 +272,15 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: 'new_email@email.com', confirm: true } } it "updates the user's email address to the provided email" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.email).to eq(options[:email]) end it "sets the user's email address as confirmed" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.confirmed?).to be(true) end @@ -282,7 +292,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { confirm: true } } it "confirms the user's email address" do - subject + expect { subject } + .to output_results('OK') expect(user.reload.confirmed?).to be(true) end @@ -297,7 +308,9 @@ describe Mastodon::CLI::Accounts do end it 'approves the user' do - expect { subject }.to change { user.reload.approved }.from(false).to(true) + expect { subject } + .to output_results('OK') + .and change { user.reload.approved }.from(false).to(true) end end @@ -306,7 +319,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { disable: true } } it 'disables the user' do - expect { subject }.to change { user.reload.disabled }.from(false).to(true) + expect { subject } + .to output_results('OK') + .and change { user.reload.disabled }.from(false).to(true) end end @@ -315,7 +330,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { enable: true } } it 'enables the user' do - expect { subject }.to change { user.reload.disabled }.from(true).to(false) + expect { subject } + .to output_results('OK') + .and change { user.reload.disabled }.from(true).to(false) end end @@ -335,7 +352,9 @@ describe Mastodon::CLI::Accounts do let(:options) { { disable_2fa: true } } it 'disables the two-factor authentication for the user' do - expect { subject }.to change { user.reload.otp_required_for_login }.from(true).to(false) + expect { subject } + .to output_results('OK') + .and change { user.reload.otp_required_for_login }.from(true).to(false) end end @@ -385,7 +404,8 @@ describe Mastodon::CLI::Accounts do let(:arguments) { [account.username] } it 'deletes the specified user successfully' do - subject + expect { subject } + .to output_results('Deleting') expect(delete_account_service).to have_received(:call).with(account, reserve_email: false).once end @@ -415,7 +435,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { email: account.user.email } } it 'deletes the specified user successfully' do - subject + expect { subject } + .to output_results('Deleting') expect(delete_account_service).to have_received(:call).with(account, reserve_email: false).once end @@ -457,7 +478,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { all: true } } it 'approves all pending registrations' do - subject + expect { subject } + .to output_results('OK') expect(User.pluck(:approved).all?(true)).to be(true) end @@ -468,7 +490,8 @@ describe Mastodon::CLI::Accounts do let(:options) { { number: 2 } } it 'approves the earliest n pending registrations but not the remaining ones' do - subject + expect { subject } + .to output_results('OK') expect(n_earliest_pending_registrations.all?(&:approved?)).to be(true) expect(pending_registrations.all?(&:approved?)).to be(false) @@ -498,7 +521,7 @@ describe Mastodon::CLI::Accounts do it 'approves all users and does not raise any error' do expect { subject } - .to_not raise_error + .to output_results('OK') expect(User.pluck(:approved).all?(true)).to be(true) end end @@ -510,7 +533,8 @@ describe Mastodon::CLI::Accounts do let(:arguments) { [user.account.username] } it 'approves the specified user successfully' do - subject + expect { subject } + .to output_results('OK') expect(user.reload.approved?).to be(true) end @@ -655,7 +679,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_avatar!) allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(remote_account_example_com).to have_received(:reset_avatar!).once @@ -665,7 +690,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh avatar for local accounts' do allow(local_account).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_avatar!) @@ -675,7 +701,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_header!) allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(remote_account_example_com).to have_received(:reset_header!).once @@ -685,7 +712,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the header for local accounts' do allow(local_account).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_header!) @@ -706,7 +734,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_avatar!) allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_avatar!) @@ -719,7 +748,8 @@ describe Mastodon::CLI::Accounts do allow(remote_account_example_com).to receive(:reset_header!) allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(local_account).to_not have_received(:reset_header!) @@ -752,7 +782,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_com_a).to have_received(:reset_avatar!).once expect(account_example_com_b).to have_received(:reset_avatar!).once @@ -761,7 +792,8 @@ describe Mastodon::CLI::Accounts do it 'does not reset the avatar for unspecified accounts' do allow(account_example_net).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_net).to_not have_received(:reset_avatar!) end @@ -770,7 +802,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_com_a).to have_received(:reset_header!).once expect(account_example_com_b).to have_received(:reset_header!).once @@ -779,7 +812,8 @@ describe Mastodon::CLI::Accounts do it 'does not reset the header for unspecified accounts' do allow(account_example_net).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK') expect(account_example_net).to_not have_received(:reset_header!) end @@ -812,7 +846,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_avatar!) expect(account_example_com_b).to_not have_received(:reset_avatar!) @@ -822,7 +857,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh(*arguments) + expect { cli.refresh(*arguments) } + .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_header!) expect(account_example_com_b).to_not have_received(:reset_header!) @@ -848,7 +884,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_com_a).to have_received(:reset_avatar!).once @@ -858,7 +895,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the avatar for accounts outside specified domain' do allow(account_example_net).to receive(:reset_avatar!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_net).to_not have_received(:reset_avatar!) @@ -868,7 +906,8 @@ describe Mastodon::CLI::Accounts do allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope) expect(account_example_com_a).to have_received(:reset_header!).once @@ -878,7 +917,8 @@ describe Mastodon::CLI::Accounts do it 'does not refresh the header for accounts outside specified domain' do allow(account_example_net).to receive(:reset_header!) - cli.refresh + expect { cli.refresh } + .to output_results('Refreshed 2 accounts') expect(cli).to have_received(:parallelize_with_progress).with(scope).once expect(account_example_net).to_not have_received(:reset_header!) @@ -913,7 +953,8 @@ describe Mastodon::CLI::Accounts do old_private_key = account.private_key old_public_key = account.public_key - subject + expect { subject } + .to output_results('OK') account.reload expect(account.private_key).to_not eq(old_private_key) @@ -923,7 +964,8 @@ describe Mastodon::CLI::Accounts do it 'broadcasts the new keys for the specified account' do allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) - subject + expect { subject } + .to output_results('OK') expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once end @@ -947,7 +989,8 @@ describe Mastodon::CLI::Accounts do old_private_keys = accounts.map(&:private_key) old_public_keys = accounts.map(&:public_key) - subject + expect { subject } + .to output_results('rotated') accounts.each(&:reload) expect(accounts.map(&:private_key)).to_not eq(old_private_keys) @@ -957,7 +1000,8 @@ describe Mastodon::CLI::Accounts do it 'broadcasts the new keys for each account' do allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) - subject + expect { subject } + .to output_results('rotated') accounts.each do |account| expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id, anything).once @@ -1036,7 +1080,8 @@ describe Mastodon::CLI::Accounts do end it 'merges `from_account` into `to_account` and deletes `from_account`' do - subject + expect { subject } + .to output_results('OK') expect(to_account).to have_received(:merge_with!).with(from_account).once expect(from_account).to have_received(:destroy).once @@ -1059,7 +1104,8 @@ describe Mastodon::CLI::Accounts do end it 'merges "from_account" into "to_account" and deletes from_account' do - subject + expect { subject } + .to output_results('OK') expect(to_account).to have_received(:merge_with!).with(from_account).once expect(from_account).to have_received(:destroy) @@ -1339,7 +1385,8 @@ describe Mastodon::CLI::Accounts do shared_examples 'a successful migration' do it 'calls the MoveService for the last migration' do - subject + expect { subject } + .to output_results('OK') last_migration = source_account.migrations.last @@ -1449,7 +1496,8 @@ describe Mastodon::CLI::Accounts do end it 'creates a migration for the specified account with the target account' do - subject + expect { subject } + .to output_results('migrated') last_migration = source_account.migrations.last diff --git a/spec/lib/mastodon/cli/ip_blocks_spec.rb b/spec/lib/mastodon/cli/ip_blocks_spec.rb index 1d6c47268e..82be10813e 100644 --- a/spec/lib/mastodon/cli/ip_blocks_spec.rb +++ b/spec/lib/mastodon/cli/ip_blocks_spec.rb @@ -78,7 +78,8 @@ describe Mastodon::CLI::IpBlocks do it 'overwrites the existing IP block record' do expect { subject } - .to change { blocked_ip.reload.severity } + .to output_results('Added 11') + .and change { blocked_ip.reload.severity } .from('no_access') .to('sign_up_requires_approval') end @@ -189,7 +190,8 @@ describe Mastodon::CLI::IpBlocks do let(:options) { { force: true } } it 'removes blocks for IP ranges that cover given IP(s) and keeps other ranges' do - subject + expect { subject } + .to output_results('Removed 2') expect(covered_ranges).to_not exist expect(other_ranges).to exist diff --git a/spec/lib/mastodon/cli/settings_spec.rb b/spec/lib/mastodon/cli/settings_spec.rb index 568ee00393..e1b353eb90 100644 --- a/spec/lib/mastodon/cli/settings_spec.rb +++ b/spec/lib/mastodon/cli/settings_spec.rb @@ -41,7 +41,8 @@ describe Mastodon::CLI::Settings do it 'changes registrations_mode and require_invite_text' do expect { subject } - .to change(Setting, :registrations_mode).from(nil).to('approved') + .to output_results('OK') + .and change(Setting, :registrations_mode).from(nil).to('approved') .and change(Setting, :require_invite_text).from(false).to(true) end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 4394b470e6..0e68fbe121 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -104,7 +104,6 @@ RSpec.configure do |config| end config.before :each, type: :cli do - stub_stdout stub_reset_connection_pools end @@ -163,14 +162,6 @@ def attachment_fixture(name) Rails.root.join('spec', 'fixtures', 'files', name).open end -def stub_stdout - # TODO: Is there a bettery way to: - # - Avoid CLI command output being printed out - # - Allow rspec to assert things against STDOUT - # - Avoid disabling stdout for other desirable output (deprecation warnings, for example) - allow($stdout).to receive(:write) -end - def stub_reset_connection_pools # TODO: Is there a better way to correctly run specs without stubbing this? # (Avoids reset_connection_pools! in test env) From d791b470582f761f819a9862dd0ea81705e60e86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:26:28 +0100 Subject: [PATCH 04/16] Update dependency chewy to v7.4.0 (#28349) 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 e53e18292e..ab24f5dca1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.4) + bigdecimal (3.1.5) bindata (2.4.15) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) @@ -197,7 +197,7 @@ GEM activesupport cbor (0.5.9.6) charlock_holmes (0.7.7) - chewy (7.3.5) + chewy (7.4.0) activesupport (>= 5.2) elasticsearch (>= 7.12.0, < 7.14.0) elasticsearch-dsl From 28e1a7a394db5586bdeb1d872f2bf4bfc18b5d0a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 05:29:10 -0500 Subject: [PATCH 05/16] Improve spec coverage for `models/announcement` class (#28350) --- spec/controllers/emojis_controller_spec.rb | 2 +- .../announcement_mute_fabricator.rb | 6 + .../announcement_reaction_fabricator.rb | 7 + spec/fabricators/custom_emoji_fabricator.rb | 2 +- spec/models/announcement_spec.rb | 210 ++++++++++++++++++ spec/models/custom_emoji_spec.rb | 2 +- spec/requests/api/v1/custom_emojis_spec.rb | 2 +- 7 files changed, 227 insertions(+), 4 deletions(-) create mode 100644 spec/fabricators/announcement_mute_fabricator.rb create mode 100644 spec/fabricators/announcement_reaction_fabricator.rb create mode 100644 spec/models/announcement_spec.rb diff --git a/spec/controllers/emojis_controller_spec.rb b/spec/controllers/emojis_controller_spec.rb index 3fe19ee5ce..dd139de931 100644 --- a/spec/controllers/emojis_controller_spec.rb +++ b/spec/controllers/emojis_controller_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe EmojisController do render_views - let(:emoji) { Fabricate(:custom_emoji) } + let(:emoji) { Fabricate(:custom_emoji, shortcode: 'coolcat') } describe 'GET #show' do let(:response) { get :show, params: { id: emoji.id, format: :json } } diff --git a/spec/fabricators/announcement_mute_fabricator.rb b/spec/fabricators/announcement_mute_fabricator.rb new file mode 100644 index 0000000000..0adc1d60bb --- /dev/null +++ b/spec/fabricators/announcement_mute_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:announcement_mute) do + announcement { Fabricate.build(:announcement) } + account { Fabricate.build(:account) } +end diff --git a/spec/fabricators/announcement_reaction_fabricator.rb b/spec/fabricators/announcement_reaction_fabricator.rb new file mode 100644 index 0000000000..e845797291 --- /dev/null +++ b/spec/fabricators/announcement_reaction_fabricator.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Fabricator(:announcement_reaction) do + account { Fabricate.build(:account) } + announcement { Fabricate.build(:announcement) } + name { Fabricate(:custom_emoji).shortcode } +end diff --git a/spec/fabricators/custom_emoji_fabricator.rb b/spec/fabricators/custom_emoji_fabricator.rb index fa570eec60..7ef875286f 100644 --- a/spec/fabricators/custom_emoji_fabricator.rb +++ b/spec/fabricators/custom_emoji_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator(:custom_emoji) do - shortcode 'coolcat' + shortcode { sequence(:shortcode) { |i| "code_#{i}" } } domain nil image { Rails.root.join('spec', 'fixtures', 'files', 'emojo.png').open } end diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb new file mode 100644 index 0000000000..e37b81a52e --- /dev/null +++ b/spec/models/announcement_spec.rb @@ -0,0 +1,210 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Announcement do + describe 'Scopes' do + context 'with published and unpublished records' do + let!(:published) { Fabricate(:announcement, published: true) } + let!(:unpublished) { Fabricate(:announcement, published: false, scheduled_at: 10.days.from_now) } + + describe '#unpublished' do + it 'returns records with published false' do + results = described_class.unpublished + + expect(results).to eq([unpublished]) + end + end + + describe '#published' do + it 'returns records with published true' do + results = described_class.published + + expect(results).to eq([published]) + end + end + end + + describe '#without_muted' do + let!(:announcement) { Fabricate(:announcement) } + let(:account) { Fabricate(:account) } + let(:muted_announcement) { Fabricate(:announcement) } + + before do + Fabricate(:announcement_mute, account: account, announcement: muted_announcement) + end + + it 'returns the announcements not muted by the account' do + results = described_class.without_muted(account) + expect(results).to include(announcement) + expect(results).to_not include(muted_announcement) + end + end + + context 'with timestamped announcements' do + let!(:adam_announcement) { Fabricate(:announcement, starts_at: 100.days.ago, scheduled_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) } + let!(:brenda_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 100.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) } + let!(:clara_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 10.days.ago, published_at: 100.days.ago, ends_at: 5.days.from_now) } + let!(:darnelle_announcement) { Fabricate(:announcement, starts_at: 10.days.ago, scheduled_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now, created_at: 100.days.ago) } + + describe '#chronological' do + it 'orders the records correctly' do + results = described_class.chronological + + expect(results).to eq( + [ + adam_announcement, + brenda_announcement, + clara_announcement, + darnelle_announcement, + ] + ) + end + end + + describe '#reverse_chronological' do + it 'orders the records correctly' do + results = described_class.reverse_chronological + + expect(results).to eq( + [ + darnelle_announcement, + clara_announcement, + brenda_announcement, + adam_announcement, + ] + ) + end + end + end + end + + describe 'Validations' do + describe 'text' do + it 'validates presence of attribute' do + record = Fabricate.build(:announcement, text: nil) + + expect(record).to_not be_valid + expect(record.errors[:text]).to be_present + end + end + + describe 'ends_at' do + it 'validates presence when starts_at is present' do + record = Fabricate.build(:announcement, starts_at: 1.day.ago) + + expect(record).to_not be_valid + expect(record.errors[:ends_at]).to be_present + end + + it 'does not validate presence when starts_at is missing' do + record = Fabricate.build(:announcement, starts_at: nil) + + expect(record).to be_valid + expect(record.errors[:ends_at]).to_not be_present + end + end + end + + describe '#publish!' do + it 'publishes an unpublished record' do + announcement = Fabricate(:announcement, published: false, scheduled_at: 10.days.from_now) + + announcement.publish! + + expect(announcement).to be_published + expect(announcement.published_at).to_not be_nil + expect(announcement.scheduled_at).to be_nil + end + end + + describe '#unpublish!' do + it 'unpublishes a published record' do + announcement = Fabricate(:announcement, published: true) + + announcement.unpublish! + + expect(announcement).to_not be_published + expect(announcement.scheduled_at).to be_nil + end + end + + describe '#time_range?' do + it 'returns false when starts_at and ends_at are missing' do + record = Fabricate.build(:announcement, starts_at: nil, ends_at: nil) + + expect(record.time_range?).to be(false) + end + + it 'returns false when starts_at is present and ends_at is missing' do + record = Fabricate.build(:announcement, starts_at: 5.days.from_now, ends_at: nil) + + expect(record.time_range?).to be(false) + end + + it 'returns false when starts_at is missing and ends_at is present' do + record = Fabricate.build(:announcement, starts_at: nil, ends_at: 5.days.from_now) + + expect(record.time_range?).to be(false) + end + + it 'returns true when starts_at and ends_at are present' do + record = Fabricate.build(:announcement, starts_at: 5.days.from_now, ends_at: 10.days.from_now) + + expect(record.time_range?).to be(true) + end + end + + describe '#reactions' do + context 'with announcement_reactions present' do + let!(:account) { Fabricate(:account) } + let!(:announcement) { Fabricate(:announcement) } + let!(:announcement_reaction) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 10.days.ago) } + let!(:announcement_reaction_account) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 5.days.ago, account: account) } + + before do + Fabricate(:announcement_reaction) + end + + it 'returns the announcement reactions for the announcement' do + results = announcement.reactions + + expect(results.first.name).to eq(announcement_reaction.name) + expect(results.last.name).to eq(announcement_reaction_account.name) + end + + it 'returns the announcement reactions for the announcement limited to account' do + results = announcement.reactions(account) + + expect(results.first.name).to eq(announcement_reaction.name) + end + end + end + + describe '#statuses' do + let(:announcement) { Fabricate(:announcement, status_ids: status_ids) } + + context 'with empty status_ids' do + let(:status_ids) { nil } + + it 'returns empty array' do + results = announcement.statuses + + expect(results).to eq([]) + end + end + + context 'with relevant status_ids' do + let(:status) { Fabricate(:status, visibility: :public) } + let(:direct_status) { Fabricate(:status, visibility: :direct) } + let(:status_ids) { [status.id, direct_status.id] } + + it 'returns public and unlisted statuses' do + results = announcement.statuses + + expect(results).to include(status) + expect(results).to_not include(direct_status) + end + end + end +end diff --git a/spec/models/custom_emoji_spec.rb b/spec/models/custom_emoji_spec.rb index 8a6487c321..06affd634a 100644 --- a/spec/models/custom_emoji_spec.rb +++ b/spec/models/custom_emoji_spec.rb @@ -59,7 +59,7 @@ RSpec.describe CustomEmoji do describe '.from_text' do subject { described_class.from_text(text, nil) } - let!(:emojo) { Fabricate(:custom_emoji) } + let!(:emojo) { Fabricate(:custom_emoji, shortcode: 'coolcat') } context 'with plain text' do let(:text) { 'Hello :coolcat:' } diff --git a/spec/requests/api/v1/custom_emojis_spec.rb b/spec/requests/api/v1/custom_emojis_spec.rb index 5de0dda0be..2f0dc72944 100644 --- a/spec/requests/api/v1/custom_emojis_spec.rb +++ b/spec/requests/api/v1/custom_emojis_spec.rb @@ -9,7 +9,7 @@ describe 'Custom Emojis' do describe 'GET /api/v1/custom_emojis' do before do - Fabricate(:custom_emoji, domain: nil, disabled: false, visible_in_picker: true) + Fabricate(:custom_emoji, domain: nil, disabled: false, visible_in_picker: true, shortcode: 'coolcat') end context 'when logged out' do From cd9ebf5f0f476c7d2fb60b59eb9f2674bebce158 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 05:35:54 -0500 Subject: [PATCH 06/16] Update stylelint to version 16.0.2 (#28354) --- package.json | 2 +- yarn.lock | 354 +++++++++++---------------------------------------- 2 files changed, 76 insertions(+), 280 deletions(-) diff --git a/package.json b/package.json index 37139254c1..39d387d6f4 100644 --- a/package.json +++ b/package.json @@ -201,7 +201,7 @@ "lint-staged": "^15.0.0", "prettier": "^3.0.0", "react-test-renderer": "^18.2.0", - "stylelint": "^15.10.1", + "stylelint": "^16.0.2", "stylelint-config-standard-scss": "^12.0.0", "typescript": "^5.0.4", "webpack-dev-server": "^3.11.3", diff --git a/yarn.lock b/yarn.lock index bd2545cf6a..e369f89d84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1539,7 +1539,7 @@ __metadata: languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.3.1": +"@csstools/css-parser-algorithms@npm:^2.3.2": version: 2.3.2 resolution: "@csstools/css-parser-algorithms@npm:2.3.2" peerDependencies: @@ -1548,14 +1548,14 @@ __metadata: languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.0": +"@csstools/css-tokenizer@npm:^2.2.1": version: 2.2.1 resolution: "@csstools/css-tokenizer@npm:2.2.1" checksum: 0c6901d291e99c567893846a47068057c2a28b3edc4219b6da589a530f55f51ddd4675f906f707b393bfe7a508ab2604bf3f75708f064db857bb277636bd5a44 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.4": +"@csstools/media-query-list-parser@npm:^2.1.5": version: 2.1.5 resolution: "@csstools/media-query-list-parser@npm:2.1.5" peerDependencies: @@ -2432,7 +2432,7 @@ __metadata: sass-loader: "npm:^10.2.0" stacktrace-js: "npm:^2.0.2" stringz: "npm:^2.1.0" - stylelint: "npm:^15.10.1" + stylelint: "npm:^16.0.2" stylelint-config-standard-scss: "npm:^12.0.0" substring-trie: "npm:^1.0.2" terser-webpack-plugin: "npm:^4.2.3" @@ -3252,13 +3252,6 @@ __metadata: languageName: node linkType: hard -"@types/minimist@npm:^1.2.2": - version: 1.2.4 - resolution: "@types/minimist@npm:1.2.4" - checksum: 01403652c09de17b8c6d7d9959cb7a244deccf31e9e7a1a7011fba73fa2724c14fe935718e0fdc48dcd30403fd76a916cb991d4c0ddf229748ccc6c4920c3371 - languageName: node - linkType: hard - "@types/node@npm:*": version: 20.8.10 resolution: "@types/node@npm:20.8.10" @@ -3275,13 +3268,6 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.3 - resolution: "@types/normalize-package-data@npm:2.4.3" - checksum: 9ad94568b53f65d0c7fffed61c74e4a7b8625b1ebbc549f1de25287c2d20e6bca9d9cdc5826e508c9d95e02a48ac69d0282121c300667071661f37090224416b - languageName: node - linkType: hard - "@types/npmlog@npm:^7.0.0": version: 7.0.0 resolution: "@types/npmlog@npm:7.0.0" @@ -4491,13 +4477,6 @@ __metadata: languageName: node linkType: hard -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - "arrow-key-navigation@npm:^1.2.0": version: 1.2.0 resolution: "arrow-key-navigation@npm:1.2.0" @@ -5371,18 +5350,6 @@ __metadata: languageName: node linkType: hard -"camelcase-keys@npm:^7.0.0": - version: 7.0.2 - resolution: "camelcase-keys@npm:7.0.2" - dependencies: - camelcase: "npm:^6.3.0" - map-obj: "npm:^4.1.0" - quick-lru: "npm:^5.1.1" - type-fest: "npm:^1.2.1" - checksum: ae86a51168643e9e8a2f2c7bfa17850729979ec3dafc5253056a7d97931cbb0e3ef5b4185e59d54b7a56c54405dee2874b0c82033498d8626e512ff9034cb05c - languageName: node - linkType: hard - "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -5390,7 +5357,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": +"camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 @@ -5987,15 +5954,20 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.2.0": - version: 8.2.0 - resolution: "cosmiconfig@npm:8.2.0" +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" dependencies: - import-fresh: "npm:^3.2.1" + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - checksum: 4180aa6d1881b75ba591b2fc04b022741a3a4b67e9e243c0eb8d169b6e1efbd3cdf7e8ca19243c0f2e53a9d59ac3eccd5cad5f95f487fcbf4e740f9e86745747 + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee languageName: node linkType: hard @@ -6435,30 +6407,13 @@ __metadata: languageName: node linkType: hard -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": +"decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 languageName: node linkType: hard -"decamelize@npm:^5.0.0": - version: 5.0.1 - resolution: "decamelize@npm:5.0.1" - checksum: 3da71022bc1e85487810fa0833138effb599fa331ca21e179650e93a765d0c4dabeb1ecdd6ad1474fa0bacd2457953c63ea335afb6e53b35f2b4bf779514e2a3 - languageName: node - linkType: hard - "decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" @@ -7093,7 +7048,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 @@ -7941,6 +7896,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -7998,12 +7966,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^7.0.0": - version: 7.0.1 - resolution: "file-entry-cache@npm:7.0.1" +"file-entry-cache@npm:^7.0.2": + version: 7.0.2 + resolution: "file-entry-cache@npm:7.0.2" dependencies: - flat-cache: "npm:^3.1.1" - checksum: fc0e4f830777e07087f97da9a6734820fdffa2945583355433f40d9819dd97b89f16ac87c07118737a6bc3eb9cf4bd896e7b38b07f0768aefcf44da33e797363 + flat-cache: "npm:^3.2.0" + checksum: 822664e35c3e295e6a8ca7ec490d8d8077017607f41f94b29922f1f49c6dd07025048e3ed528e2909a1439eba66d60f802c0774aa612cf6ee053ee4ecc16c8c5 languageName: node linkType: hard @@ -8137,7 +8105,7 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4, flat-cache@npm:^3.1.1": +"flat-cache@npm:^3.0.4, flat-cache@npm:^3.2.0": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" dependencies: @@ -8669,13 +8637,6 @@ __metadata: languageName: node linkType: hard -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -8855,15 +8816,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -9124,6 +9076,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.3.0": + version: 5.3.0 + resolution: "ignore@npm:5.3.0" + checksum: dc06bea5c23aae65d0725a957a0638b57e235ae4568dda51ca142053ed2c352de7e3bc93a69b2b32ac31966a1952e9a93c5ef2e2ab7c6b06aef9808f6b55b571 + languageName: node + linkType: hard + "immer@npm:^9.0.21": version: 9.0.21 resolution: "immer@npm:9.0.21" @@ -9145,7 +9104,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -9155,13 +9114,6 @@ __metadata: languageName: node linkType: hard -"import-lazy@npm:^4.0.0": - version: 4.0.0 - resolution: "import-lazy@npm:4.0.0" - checksum: a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca - languageName: node - linkType: hard - "import-local@npm:^2.0.0": version: 2.0.0 resolution: "import-local@npm:2.0.0" @@ -9214,13 +9166,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 - languageName: node - linkType: hard - "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -9482,7 +9427,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.9.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -9764,13 +9709,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - "is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -11264,20 +11202,6 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.1.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - "map-visit@npm:^1.0.0": version: 1.0.0 resolution: "map-visit@npm:1.0.0" @@ -11381,23 +11305,10 @@ __metadata: languageName: node linkType: hard -"meow@npm:^10.1.5": - version: 10.1.5 - resolution: "meow@npm:10.1.5" - dependencies: - "@types/minimist": "npm:^1.2.2" - camelcase-keys: "npm:^7.0.0" - decamelize: "npm:^5.0.0" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.2" - read-pkg-up: "npm:^8.0.0" - redent: "npm:^4.0.0" - trim-newlines: "npm:^4.0.2" - type-fest: "npm:^1.2.2" - yargs-parser: "npm:^20.2.9" - checksum: a513849022edd5ddcc41d28c679d31978abe414d9db5bc457e95e537a4327b2910fd2f699cdd883293f9a5da8951a50939bf60fbd62f7fe12b9ddf96a84b1b27 +"meow@npm:^12.1.1": + version: 12.1.1 + resolution: "meow@npm:12.1.1" + checksum: a125ca99a32e2306e2f4cbe651a0d27f6eb67918d43a075f6e80b35e9bf372ebf0fc3a9fbc201cbbc9516444b6265fb3c9f80c5b7ebd32f548aa93eb7c28e088 languageName: node linkType: hard @@ -11520,7 +11431,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": +"min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c @@ -11581,17 +11492,6 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -11949,18 +11849,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.2": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - "normalize-path@npm:^2.1.1": version: 2.1.1 resolution: "normalize-path@npm:2.1.1" @@ -13160,12 +13048,12 @@ __metadata: languageName: node linkType: hard -"postcss-safe-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-safe-parser@npm:6.0.0" +"postcss-safe-parser@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-safe-parser@npm:7.0.0" peerDependencies: - postcss: ^8.3.3 - checksum: 5b0997b63de6ab4afb4b718a52dd7902e465c21d1f2e516762bcb59047787459b4dc5713132f6a19c9c8c483043b20b8a380a55fb61152ee66cbffcddf3b57f0 + postcss: ^8.4.31 + checksum: 4217afd8ce2809e959dc365e4675f499303cc6b91f94db06c8164422822db2d3b3124df701ee2234db4127ad05619b016bfb9c2bccae9bf9cf898a396f1632c9 languageName: node linkType: hard @@ -13218,7 +13106,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.28": +"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.32": version: 8.4.32 resolution: "postcss@npm:8.4.32" dependencies: @@ -13541,13 +13429,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - "raf@npm:^3.1.0": version: 3.4.1 resolution: "raf@npm:3.4.1" @@ -14027,29 +13908,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^8.0.0": - version: 8.0.0 - resolution: "read-pkg-up@npm:8.0.0" - dependencies: - find-up: "npm:^5.0.0" - read-pkg: "npm:^6.0.0" - type-fest: "npm:^1.0.1" - checksum: cf3905ccbe5cd602f23192cc7ca65ed17561bab117eadb9aed817441d5bfc6b9a11215c2a3e9505f501d046818f3c4180dbea61fa83c42083e0b4e407d5cc745 - languageName: node - linkType: hard - -"read-pkg@npm:^6.0.0": - version: 6.0.0 - resolution: "read-pkg@npm:6.0.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^3.0.2" - parse-json: "npm:^5.2.0" - type-fest: "npm:^1.0.1" - checksum: b51ee5eed75324f4fac34c9a40b5e4b403de4c532242be01959c9bbdb1ff9db1c6c2aefaba569622fec49d1ead866e97ba856ab145f6e11039b11f7bec1318ba - languageName: node - linkType: hard - "readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -14118,16 +13976,6 @@ __metadata: languageName: node linkType: hard -"redent@npm:^4.0.0": - version: 4.0.0 - resolution: "redent@npm:4.0.0" - dependencies: - indent-string: "npm:^5.0.0" - strip-indent: "npm:^4.0.0" - checksum: a9b640c8f4b2b5b26a1a908706475ff404dd50a97d6f094bc3c59717be922622927cc7d601d4ae2857d897ad243fd979bd76d751a0481cee8be7024e5fb4c662 - languageName: node - linkType: hard - "redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": version: 1.2.0 resolution: "redis-errors@npm:1.2.0" @@ -15270,16 +15118,6 @@ __metadata: languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - "spdx-exceptions@npm:^2.1.0": version: 2.3.0 resolution: "spdx-exceptions@npm:2.3.0" @@ -15287,7 +15125,7 @@ __metadata: languageName: node linkType: hard -"spdx-expression-parse@npm:^3.0.0, spdx-expression-parse@npm:^3.0.1": +"spdx-expression-parse@npm:^3.0.1": version: 3.0.1 resolution: "spdx-expression-parse@npm:3.0.1" dependencies: @@ -15723,15 +15561,6 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-indent@npm:4.0.0" - dependencies: - min-indent: "npm:^1.0.1" - checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -15739,13 +15568,6 @@ __metadata: languageName: node linkType: hard -"style-search@npm:^0.1.0": - version: 0.1.0 - resolution: "style-search@npm:0.1.0" - checksum: 9e5cb735e5dc4fc2f8c61bebdf211d5352f1cf01511a64da12bb726a01e8c6948c50d357eb8fd7893d44b4e3189655bdddcf8ab338f9d508fe89a8942c650b14 - languageName: node - linkType: hard - "stylehacks@npm:^6.0.0": version: 6.0.0 resolution: "stylehacks@npm:6.0.0" @@ -15826,53 +15648,51 @@ __metadata: languageName: node linkType: hard -"stylelint@npm:^15.10.1": - version: 15.11.0 - resolution: "stylelint@npm:15.11.0" +"stylelint@npm:^16.0.2": + version: 16.0.2 + resolution: "stylelint@npm:16.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.3.1" - "@csstools/css-tokenizer": "npm:^2.2.0" - "@csstools/media-query-list-parser": "npm:^2.1.4" + "@csstools/css-parser-algorithms": "npm:^2.3.2" + "@csstools/css-tokenizer": "npm:^2.2.1" + "@csstools/media-query-list-parser": "npm:^2.1.5" "@csstools/selector-specificity": "npm:^3.0.0" balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" - cosmiconfig: "npm:^8.2.0" + cosmiconfig: "npm:^9.0.0" css-functions-list: "npm:^3.2.1" css-tree: "npm:^2.3.1" debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.1" + fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^7.0.0" + file-entry-cache: "npm:^7.0.2" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.2.4" - import-lazy: "npm:^4.0.0" + ignore: "npm:^5.3.0" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.29.0" mathml-tag-names: "npm:^2.1.3" - meow: "npm:^10.1.5" + meow: "npm:^12.1.1" micromatch: "npm:^4.0.5" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.0" - postcss: "npm:^8.4.28" + postcss: "npm:^8.4.32" postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-safe-parser: "npm:^6.0.0" + postcss-safe-parser: "npm:^7.0.0" postcss-selector-parser: "npm:^6.0.13" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - style-search: "npm:^0.1.0" + strip-ansi: "npm:^7.1.0" supports-hyperlinks: "npm:^3.0.0" svg-tags: "npm:^1.0.0" table: "npm:^6.8.1" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 2d88b7293e308b7e418c14ba4130777b1a28b214304957f03b41a6dc8e00005266caf47479f718a6ec5e572cb52e903ca34aabf3febbe3a3ae32fff6b018d9fd + checksum: 5ec755e209beb1877ff40d50f18c1ebb05bf251925da1f98f28fb3911e4031195eb86adaf641ac5cdb01ba973f4c999bc0c6b0270d08c1d5c070adbdd9e734cf languageName: node linkType: hard @@ -16326,13 +16146,6 @@ __metadata: languageName: node linkType: hard -"trim-newlines@npm:^4.0.2": - version: 4.1.1 - resolution: "trim-newlines@npm:4.1.1" - checksum: 70e60e652305efd0dda1f2bce1a5edc9bb5834a2e00d05dfde178715ec48faa8264a2bc1a7efc593b7936d03f6d42c398616329eef44b7bd5070180a02056981 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -16424,13 +16237,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^1.0.1, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 - languageName: node - linkType: hard - "type-fest@npm:^3.0.0": version: 3.13.1 resolution: "type-fest@npm:3.13.1" @@ -16897,16 +16703,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -17833,7 +17629,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.1, yargs-parser@npm:^20.2.9": +"yargs-parser@npm:^20.2.1": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 From adbfd40a1b38b89587d74d4ce2d27b21b8c90ed1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 05:38:06 -0500 Subject: [PATCH 07/16] Convert `api/v1/directories` controller spec to request spec (#28356) --- .../api/v1/directories_spec.rb} | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) rename spec/{controllers/api/v1/directories_controller_spec.rb => requests/api/v1/directories_spec.rb} (82%) diff --git a/spec/controllers/api/v1/directories_controller_spec.rb b/spec/requests/api/v1/directories_spec.rb similarity index 82% rename from spec/controllers/api/v1/directories_controller_spec.rb rename to spec/requests/api/v1/directories_spec.rb index 308a8874c8..0a1864d136 100644 --- a/spec/controllers/api/v1/directories_controller_spec.rb +++ b/spec/requests/api/v1/directories_spec.rb @@ -2,17 +2,13 @@ require 'rails_helper' -describe Api::V1::DirectoriesController do - render_views - +describe 'Directories API' do let(:user) { Fabricate(:user, confirmed_at: nil) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:follows') } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:follows' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do + describe 'GET /api/v1/directories' do context 'with no params' do before do local_unconfirmed_account = Fabricate( @@ -58,27 +54,32 @@ describe Api::V1::DirectoriesController do ) domain_blocked_account.create_account_stat! Fabricate(:account_domain_block, account: user.account, domain: 'test.example') + + local_discoverable_account.create_account_stat! + eligible_remote_account.create_account_stat! end - it 'returns the local discoverable account and the remote discoverable account' do - local_discoverable_account = Fabricate( + let(:local_discoverable_account) do + Fabricate( :account, domain: nil, user: Fabricate(:user, confirmed_at: 10.days.ago, approved: true), discoverable: true, username: 'local_discoverable' ) - local_discoverable_account.create_account_stat! + end - eligible_remote_account = Fabricate( + let(:eligible_remote_account) do + Fabricate( :account, domain: 'host.example', discoverable: true, username: 'eligible_remote' ) - eligible_remote_account.create_account_stat! + end - get :show + it 'returns the local discoverable account and the remote discoverable account' do + get '/api/v1/directory', headers: headers expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) @@ -87,14 +88,17 @@ describe Api::V1::DirectoriesController do end context 'when asking for local accounts only' do - it 'returns only the local accounts' do - user = Fabricate(:user, confirmed_at: 10.days.ago, approved: true) - local_account = Fabricate(:account, domain: nil, user: user) - remote_account = Fabricate(:account, domain: 'host.example') + let(:user) { Fabricate(:user, confirmed_at: 10.days.ago, approved: true) } + let(:local_account) { Fabricate(:account, domain: nil, user: user) } + let(:remote_account) { Fabricate(:account, domain: 'host.example') } + + before do local_account.create_account_stat! remote_account.create_account_stat! + end - get :show, params: { local: '1' } + it 'returns only the local accounts' do + get '/api/v1/directory', headers: headers, params: { local: '1' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(1) @@ -108,7 +112,7 @@ describe Api::V1::DirectoriesController do old_stat = Fabricate(:account_stat, last_status_at: 1.day.ago) new_stat = Fabricate(:account_stat, last_status_at: 1.minute.ago) - get :show, params: { order: 'active' } + get '/api/v1/directory', headers: headers, params: { order: 'active' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) @@ -123,7 +127,7 @@ describe Api::V1::DirectoriesController do travel_to 10.seconds.from_now account_new = Fabricate(:account_stat).account - get :show, params: { order: 'new' } + get '/api/v1/directory', headers: headers, params: { order: 'new' } expect(response).to have_http_status(200) expect(body_as_json.size).to eq(2) From ef9797a395de7cc9e44f5f29ca3a2f70aff04b48 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 05:46:43 -0500 Subject: [PATCH 08/16] Un-nest contexts in `settings/2fa/webauthn` spec (#28359) --- .../webauthn_credentials_controller_spec.rb | 97 ++++++++----------- 1 file changed, 42 insertions(+), 55 deletions(-) diff --git a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb index 719ed2f886..41a3ba5eb5 100644 --- a/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb @@ -194,60 +194,49 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do add_webauthn_credential(user) end - context 'when creation succeeds' do - it 'adds a new credential to user credentials and does not change webauthn_id', :aggregate_failures do - controller.session[:webauthn_challenge] = challenge - - expect do - post :create, params: { credential: new_webauthn_credential, nickname: nickname } - end.to change { user.webauthn_credentials.count }.by(1) - .and not_change(user, :webauthn_id) - - expect(response).to have_http_status(200) - end - end - - context 'when the nickname is already used' do - it 'fails' do - controller.session[:webauthn_challenge] = challenge - - post :create, params: { credential: new_webauthn_credential, nickname: 'USB Key' } - - expect(response).to have_http_status(422) - expect(flash[:error]).to be_present - end - end - - context 'when the credential already exists' do - before do - user2 = Fabricate(:user) - public_key_credential = WebAuthn::Credential.from_create(new_webauthn_credential) - Fabricate(:webauthn_credential, - user_id: user2.id, - external_id: public_key_credential.id, - public_key: public_key_credential.public_key) - end - - it 'fails' do - controller.session[:webauthn_challenge] = challenge + it 'adds a new credential to user credentials and does not change webauthn_id when creation succeeds', :aggregate_failures do + controller.session[:webauthn_challenge] = challenge + expect do post :create, params: { credential: new_webauthn_credential, nickname: nickname } + end.to change { user.webauthn_credentials.count }.by(1) + .and not_change(user, :webauthn_id) - expect(response).to have_http_status(422) - expect(flash[:error]).to be_present - end + expect(response).to have_http_status(200) + end + + it 'fails when the nickname is already used' do + controller.session[:webauthn_challenge] = challenge + + post :create, params: { credential: new_webauthn_credential, nickname: 'USB Key' } + + expect(response).to have_http_status(422) + expect(flash[:error]).to be_present + end + + it 'fails when the credential already exists' do + public_key_credential = WebAuthn::Credential.from_create(new_webauthn_credential) + Fabricate(:webauthn_credential, + user_id: Fabricate(:user).id, + external_id: public_key_credential.id, + public_key: public_key_credential.public_key) + + controller.session[:webauthn_challenge] = challenge + + post :create, params: { credential: new_webauthn_credential, nickname: nickname } + + expect(response).to have_http_status(422) + expect(flash[:error]).to be_present end end - context 'when user have not enabled webauthn' do - context 'when creation succeeds' do - it 'creates a webauthn credential' do - controller.session[:webauthn_challenge] = challenge + context 'when user have not enabled webauthn and creation succeeds' do + it 'creates a webauthn credential' do + controller.session[:webauthn_challenge] = challenge - expect do - post :create, params: { credential: new_webauthn_credential, nickname: nickname } - end.to change { user.webauthn_credentials.count }.by(1) - end + expect do + post :create, params: { credential: new_webauthn_credential, nickname: nickname } + end.to change { user.webauthn_credentials.count }.by(1) end end end @@ -292,15 +281,13 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do add_webauthn_credential(user) end - context 'when deletion succeeds' do - it 'redirects to 2FA methods list and shows flash success and deletes the credential', :aggregate_failures do - expect do - delete :destroy, params: { id: user.webauthn_credentials.take.id } - end.to change { user.webauthn_credentials.count }.by(-1) + it 'redirects to 2FA methods list and shows flash success and deletes the credential when deletion succeeds', :aggregate_failures do + expect do + delete :destroy, params: { id: user.webauthn_credentials.take.id } + end.to change { user.webauthn_credentials.count }.by(-1) - expect(response).to redirect_to settings_two_factor_authentication_methods_path - expect(flash[:success]).to be_present - end + expect(response).to redirect_to settings_two_factor_authentication_methods_path + expect(flash[:success]).to be_present end end From 1c3b5f4a7812a1c7ffaded56684882b02ca26b60 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 09:02:33 -0500 Subject: [PATCH 09/16] Fix reference to non-existent var in CLI maintenance command (#28363) --- lib/mastodon/cli/maintenance.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index 43fd7fab33..2e5243468b 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -254,7 +254,7 @@ module Mastodon::CLI users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse ref_user = users.shift say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow - say "e-mail will be disabled for the following accounts: #{user.map { |user| user.account.acct }.join(', ')}", :yellow + say "e-mail will be disabled for the following accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow say 'Please reach out to them and set another address with `tootctl account modify` or delete them.', :yellow users.each_with_index do |user, index| From e17faedffba569a5925b1da35214c1f56806f6b2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 09:04:55 -0500 Subject: [PATCH 10/16] Move default `meta` options from `InitialStateSerializer` to private method (AbcSize reduction) (#28355) --- .rubocop_todo.yml | 2 +- app/serializers/initial_state_serializer.rb | 50 +++++++++++---------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 03543c8e0d..03cc2e75d3 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -26,7 +26,7 @@ Lint/NonLocalExitFromIterator: # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: - Max: 125 + Max: 100 # Configuration parameters: CountBlocks, Max. Metrics/BlockNesting: diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index f606836ba4..9f7921461d 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -13,29 +13,7 @@ class InitialStateSerializer < ActiveModel::Serializer has_one :role, serializer: REST::RoleSerializer def meta - store = { - streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, - access_token: object.token, - locale: I18n.locale, - domain: Addressable::IDNA.to_unicode(instance_presenter.domain), - title: instance_presenter.title, - admin: object.admin&.id&.to_s, - search_enabled: Chewy.enabled?, - repository: Mastodon::Version.repository, - source_url: instance_presenter.source_url, - version: instance_presenter.version, - limited_federation_mode: Rails.configuration.x.limited_federation_mode, - mascot: instance_presenter.mascot&.file&.url, - profile_directory: Setting.profile_directory, - trends_enabled: Setting.trends, - registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, - timeline_preview: Setting.timeline_preview, - activity_api_enabled: Setting.activity_api_enabled, - 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, - } + store = default_meta_store if object.current_account store[:me] = object.current_account.id.to_s @@ -108,6 +86,32 @@ class InitialStateSerializer < ActiveModel::Serializer private + def default_meta_store + { + access_token: object.token, + activity_api_enabled: Setting.activity_api_enabled, + admin: object.admin&.id&.to_s, + domain: Addressable::IDNA.to_unicode(instance_presenter.domain), + limited_federation_mode: Rails.configuration.x.limited_federation_mode, + locale: I18n.locale, + mascot: instance_presenter.mascot&.file&.url, + profile_directory: Setting.profile_directory, + registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, + repository: Mastodon::Version.repository, + search_enabled: Chewy.enabled?, + single_user_mode: Rails.configuration.x.single_user_mode, + source_url: instance_presenter.source_url, + sso_redirect: sso_redirect, + status_page_url: Setting.status_page_url, + streaming_api_base_url: Rails.configuration.x.streaming_api_base_url, + timeline_preview: Setting.timeline_preview, + title: instance_presenter.title, + trends_as_landing_page: Setting.trends_as_landing_page, + trends_enabled: Setting.trends, + version: instance_presenter.version, + } + end + def object_account_user object.current_account.user end From db897eaa5ad517154c531df2b5f0f97fdc53ad16 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 14 Dec 2023 09:07:54 -0500 Subject: [PATCH 11/16] Unwind `map` on single-item array in `spec/services/delete_account_service` spec (#28358) --- spec/services/delete_account_service_spec.rb | 58 +++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/spec/services/delete_account_service_spec.rb b/spec/services/delete_account_service_spec.rb index 8a19d3cf74..a2c57f1c1e 100644 --- a/spec/services/delete_account_service_spec.rb +++ b/spec/services/delete_account_service_spec.rb @@ -50,11 +50,11 @@ RSpec.describe DeleteAccountService, type: :service do end def delete_associated_target_records - change do - [ - AccountPin.where(target_account: account), - ].map(&:count) - end.from([1]).to([0]) + change(account_pins_for_account, :count).from(1).to(0) + end + + def account_pins_for_account + AccountPin.where(target_account: account) end def delete_associated_target_notifications @@ -100,28 +100,34 @@ RSpec.describe DeleteAccountService, type: :service do it 'sends expected activities to followed and follower inboxes' do subject - expect(a_request(:post, account.inbox_url).with( - body: - hash_including({ - 'type' => 'Reject', - 'object' => hash_including({ - 'type' => 'Follow', - 'actor' => account.uri, - 'object' => ActivityPub::TagManager.instance.uri_for(local_follower), - }), - }) - )).to have_been_made.once + expect(post_to_inbox_with_reject).to have_been_made.once + expect(post_to_inbox_with_undo).to have_been_made.once + end - expect(a_request(:post, account.inbox_url).with( - body: hash_including({ - 'type' => 'Undo', - 'object' => hash_including({ - 'type' => 'Follow', - 'actor' => ActivityPub::TagManager.instance.uri_for(local_follower), - 'object' => account.uri, - }), - }) - )).to have_been_made.once + def post_to_inbox_with_undo + a_request(:post, account.inbox_url).with( + body: hash_including({ + 'type' => 'Undo', + 'object' => hash_including({ + 'type' => 'Follow', + 'actor' => ActivityPub::TagManager.instance.uri_for(local_follower), + 'object' => account.uri, + }), + }) + ) + end + + def post_to_inbox_with_reject + a_request(:post, account.inbox_url).with( + body: hash_including({ + 'type' => 'Reject', + 'object' => hash_including({ + 'type' => 'Follow', + 'actor' => account.uri, + 'object' => ActivityPub::TagManager.instance.uri_for(local_follower), + }), + }) + ) end end end From 1ee8d1e50e2e113af63348c6d16ee5cface22e33 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 15 Dec 2023 09:33:56 -0500 Subject: [PATCH 12/16] Assign a proc to `Rack::Request.ip_filter` instead of patching method (#28380) --- config/initializers/trusted_proxies.rb | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/config/initializers/trusted_proxies.rb b/config/initializers/trusted_proxies.rb index aa2f4510c2..33bfddbdf1 100644 --- a/config/initializers/trusted_proxies.rb +++ b/config/initializers/trusted_proxies.rb @@ -1,13 +1,8 @@ # frozen_string_literal: true -module Rack - class Request - def trusted_proxy?(ip) - if Rails.application.config.action_dispatch.trusted_proxies.nil? - super - else - Rails.application.config.action_dispatch.trusted_proxies.any? { |proxy| proxy === ip } - end - end - end +unless Rails.application.config.action_dispatch.trusted_proxies.nil? + # Rack is configured with a default collection of trusted proxies + # If Rails has been configured to use a specific list, configure + # Rack to use this Proc, which enforces the Rails-configured list. + Rack::Request.ip_filter = ->(ip) { Rails.application.config.action_dispatch.trusted_proxies.include?(ip) } end From e5717c9bc6cb5a1bea4c93048024f6247566f8ce Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 15 Dec 2023 09:34:24 -0500 Subject: [PATCH 13/16] Fix `Style/Lambda` cop (#28378) --- .rubocop_todo.yml | 8 -------- config/initializers/simple_form.rb | 2 +- config/routes.rb | 10 +++++----- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 03cc2e75d3..c323aa877b 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -386,14 +386,6 @@ Style/InverseMethods: - 'app/services/update_account_service.rb' - 'spec/controllers/activitypub/replies_controller_spec.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: line_count_dependent, lambda, literal -Style/Lambda: - Exclude: - - 'config/initializers/simple_form.rb' - - 'config/routes.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Style/MapToHash: Exclude: diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index 6d9d7b8aeb..a8bc4b1921 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -164,7 +164,7 @@ SimpleForm.setup do |config| # config.item_wrapper_class = nil # How the label text should be generated altogether with the required text. - config.label_text = lambda { |label, required, _explicit_label| "#{label} #{required}" } + config.label_text = ->(label, required, _explicit_label) { "#{label} #{required}" } # You can define the class to use on all labels. Default is nil. # config.label_class = nil diff --git a/config/routes.rb b/config/routes.rb index 150b26cf1e..85c3b18556 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -51,7 +51,7 @@ Rails.application.routes.draw do get 'health', to: 'health#show' - authenticate :user, lambda { |u| u.role&.can?(:view_devops) } do + authenticate :user, ->(user) { user.role&.can?(:view_devops) } do mount Sidekiq::Web, at: 'sidekiq', as: :sidekiq mount PgHero::Engine, at: 'pghero', as: :pghero end @@ -105,10 +105,10 @@ Rails.application.routes.draw do } # rubocop:disable Style/FormatStringToken - those do not go through the usual formatting functions and are not safe to correct - get '/users/:username', to: redirect_with_vary('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/following', to: redirect_with_vary('/@%{username}/following'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/followers', to: redirect_with_vary('/@%{username}/followers'), constraints: lambda { |req| req.format.nil? || req.format.html? } - get '/users/:username/statuses/:id', to: redirect_with_vary('/@%{username}/%{id}'), constraints: lambda { |req| req.format.nil? || req.format.html? } + get '/users/:username', to: redirect_with_vary('/@%{username}'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/following', to: redirect_with_vary('/@%{username}/following'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/followers', to: redirect_with_vary('/@%{username}/followers'), constraints: ->(req) { req.format.nil? || req.format.html? } + get '/users/:username/statuses/:id', to: redirect_with_vary('/@%{username}/%{id}'), constraints: ->(req) { req.format.nil? || req.format.html? } # rubocop:enable Style/FormatStringToken get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" } From 3e336fe706a7b745c97efaca402e75a8ec5a7aeb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 15 Dec 2023 09:38:12 -0500 Subject: [PATCH 14/16] Opt out of `Rails/SkipsModelValidations` cop in db/migrate (#28371) --- .rubocop.yml | 4 ++++ .rubocop_todo.yml | 16 ---------------- db/migrate/20230215074423_move_user_settings.rb | 2 +- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 68352e3198..2221604224 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -105,6 +105,10 @@ Rails/Exit: - 'config/boot.rb' - 'lib/mastodon/cli/*.rb' +Rails/SkipsModelValidations: + Exclude: + - 'db/*migrate/**/*' + # Reason: Some single letter camel case files shouldn't be split # https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath RSpec/FilePath: diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index c323aa877b..7d05090b39 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -181,22 +181,6 @@ Rails/SkipsModelValidations: - 'app/workers/move_worker.rb' - 'app/workers/scheduler/ip_cleanup_scheduler.rb' - 'app/workers/scheduler/scheduled_statuses_scheduler.rb' - - 'db/migrate/20161203164520_add_from_account_id_to_notifications.rb' - - 'db/migrate/20170105224407_add_shortcode_to_media_attachments.rb' - - 'db/migrate/20170209184350_add_reply_to_statuses.rb' - - 'db/migrate/20170304202101_add_type_to_media_attachments.rb' - - 'db/migrate/20180528141303_fix_accounts_unique_index.rb' - - 'db/migrate/20180609104432_migrate_web_push_subscriptions2.rb' - - 'db/migrate/20181207011115_downcase_custom_emoji_domains.rb' - - 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb' - - 'db/migrate/20191007013357_update_pt_locales.rb' - - 'db/migrate/20220316233212_update_kurdish_locales.rb' - - 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb' - - 'db/post_migrate/20200917193528_migrate_notifications_type.rb' - - 'db/post_migrate/20201017234926_fill_account_suspension_origin.rb' - - 'db/post_migrate/20220617202502_migrate_roles.rb' - - 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb' - - 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb' - 'lib/mastodon/cli/accounts.rb' - 'lib/mastodon/cli/maintenance.rb' - 'spec/lib/activitypub/activity/follow_spec.rb' diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index 27caac1011..86231e49e8 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -80,7 +80,7 @@ class MoveUserSettings < ActiveRecord::Migration[6.1] end end - user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + user.update_column('settings', Oj.dump(user_settings)) end end end From b1dec09d203d535a3b0bc61e520e520ba7643878 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 15 Dec 2023 10:52:00 -0500 Subject: [PATCH 15/16] Fix `Style/InverseMethods` cop (#28377) --- .rubocop_todo.yml | 8 -------- app/models/custom_filter.rb | 2 +- app/services/update_account_service.rb | 2 +- spec/controllers/activitypub/replies_controller_spec.rb | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 7d05090b39..d9b2ec8144 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -362,14 +362,6 @@ Style/IfUnlessModifier: - 'config/initializers/devise.rb' - 'config/initializers/ffmpeg.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: InverseMethods, InverseBlocks. -Style/InverseMethods: - Exclude: - - 'app/models/custom_filter.rb' - - 'app/services/update_account_service.rb' - - 'spec/controllers/activitypub/replies_controller_spec.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Style/MapToHash: Exclude: diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 0f4fd78cbf..5a53e73ba8 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -91,7 +91,7 @@ class CustomFilter < ApplicationRecord filters_hash.values.map { |cache| [cache.delete(:filter), cache] } end.to_a - active_filters.select { |custom_filter, _| !custom_filter.expired? } + active_filters.reject { |custom_filter, _| custom_filter.expired? } end def self.apply_cached_filters(cached_filters, status) diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 1bbcfce3ea..78a846e03e 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -21,7 +21,7 @@ class UpdateAccountService < BaseService def authorize_all_follow_requests(account) follow_requests = FollowRequest.where(target_account: account) - follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? } + follow_requests = follow_requests.preload(:account).reject { |req| req.account.silenced? } AuthorizeFollowWorker.push_bulk(follow_requests, limit: 1_000) do |req| [req.account_id, req.target_account_id] end diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index 7e6e0ffb0d..5fc9698a32 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -123,7 +123,7 @@ RSpec.describe ActivityPub::RepliesController do end it 'uses ids for remote toots' do - remote_replies = page_json[:items].select { |x| !x.is_a?(Hash) } + remote_replies = page_json[:items].reject { |x| x.is_a?(Hash) } expect(remote_replies.all? { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }).to be true end From f99e05710ea06cf10bbd3fb64ae8c00b095cb455 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 09:25:21 +0100 Subject: [PATCH 16/16] New Crowdin Translations (automated) (#28373) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fil.json | 146 +++++++- app/javascript/mastodon/locales/ia.json | 23 ++ app/javascript/mastodon/locales/ie.json | 392 +++++++++++++++++++++ app/javascript/mastodon/locales/io.json | 57 ++- app/javascript/mastodon/locales/lad.json | 139 ++++++++ app/javascript/mastodon/locales/pa.json | 288 ++++++++++----- app/javascript/mastodon/locales/sk.json | 1 + app/javascript/mastodon/locales/th.json | 2 +- app/javascript/mastodon/locales/ug.json | 2 + app/javascript/mastodon/locales/zh-TW.json | 16 +- config/locales/activerecord.ia.yml | 8 + config/locales/activerecord.ie.yml | 1 + config/locales/activerecord.lad.yml | 51 +++ config/locales/activerecord.pa.yml | 22 ++ config/locales/devise.ia.yml | 1 + config/locales/devise.ie.yml | 1 + config/locales/devise.io.yml | 4 +- config/locales/devise.lad.yml | 1 + config/locales/devise.pa.yml | 17 + config/locales/doorkeeper.ia.yml | 1 + config/locales/doorkeeper.ie.yml | 11 + config/locales/doorkeeper.io.yml | 2 + config/locales/doorkeeper.lad.yml | 1 + config/locales/doorkeeper.pa.yml | 84 +++++ config/locales/eu.yml | 7 + config/locales/ia.yml | 52 +++ config/locales/ie.yml | 68 ++++ config/locales/io.yml | 275 ++++++++++++++- config/locales/lad.yml | 1 + config/locales/pa.yml | 160 +++++++++ config/locales/simple_form.ia.yml | 1 + config/locales/simple_form.ie.yml | 23 ++ config/locales/simple_form.io.yml | 48 ++- config/locales/simple_form.lad.yml | 1 + config/locales/sk.yml | 1 + config/locales/zh-TW.yml | 4 +- 36 files changed, 1779 insertions(+), 133 deletions(-) create mode 100644 app/javascript/mastodon/locales/ia.json create mode 100644 app/javascript/mastodon/locales/ie.json create mode 100644 app/javascript/mastodon/locales/lad.json create mode 100644 config/locales/activerecord.ia.yml create mode 100644 config/locales/activerecord.ie.yml create mode 100644 config/locales/activerecord.lad.yml create mode 100644 config/locales/devise.ia.yml create mode 100644 config/locales/devise.ie.yml create mode 100644 config/locales/devise.lad.yml create mode 100644 config/locales/doorkeeper.ia.yml create mode 100644 config/locales/doorkeeper.ie.yml create mode 100644 config/locales/doorkeeper.lad.yml create mode 100644 config/locales/ia.yml create mode 100644 config/locales/ie.yml create mode 100644 config/locales/lad.yml create mode 100644 config/locales/simple_form.ia.yml create mode 100644 config/locales/simple_form.ie.yml create mode 100644 config/locales/simple_form.lad.yml diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 0967ef424b..bc76358875 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -1 +1,145 @@ -{} +{ + "about.blocks": "Mga pinatimping server", + "about.contact": "Kontak:", + "about.disclaimer": "Ang Mastodon ay software na malaya at bukas-na-pinagmulan, at isang tatak-pangkalakal ng Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Hindi makuha ang dahilan", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.title": "Suspendido", + "about.rules": "Mga alituntunin ng server", + "account.account_note_header": "Tala", + "account.add_or_remove_from_list": "I-dagdag o tanggalin mula sa mga listahan", + "account.badges.bot": "Pakusa", + "account.badges.group": "Pangkat", + "account.block": "Hadlangan si @{name}", + "account.block_domain": "Hadlangan ang domain na {domain}", + "account.block_short": "Hadlangan", + "account.blocked": "Hinadlangan", + "account.browse_more_on_origin_server": "Tingnan pa sa pangunahing profile", + "account.cancel_follow_request": "I-kansela ang pagsunod", + "account.copy": "I-sipi ang kawing sa profile", + "account.direct": "Palihim banggitin si @{name}", + "account.disable_notifications": "I-tigil ang pagpapaalam sa akin tuwing nagpopost si @{name}", + "account.domain_blocked": "Hinadlangan ang domain", + "account.edit_profile": "Baguhin ang profile", + "account.enable_notifications": "Ipaalam sa akin kapag nag-post si @{name}", + "account.endorse": "I-tampok sa profile", + "account.featured_tags.last_status_at": "Huling post noong {date}", + "account.featured_tags.last_status_never": "Walang mga post", + "account.featured_tags.title": "Nakatampok na hashtag ni {name}", + "account.follow": "Sundan", + "account.followers": "Mga tagasunod", + "account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.", + "account.following": "Sinusundan", + "account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.", + "account.follows_you": "Sinusunod ka", + "account.go_to_profile": "Pumunta sa profile", + "account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}", + "account.in_memoriam": "Sa Alaala Ni.", + "account.joined_short": "Sumali", + "account.languages": "Palitan ang mga nakasumuscribing wika", + "account.link_verified_on": "Sinuri ang pagmamay-ari ng kawing ito sa {date}", + "account.locked_info": "Nakakandado ang pagsasariling kalagayan ng account na ito. Manomano sinusuri ng may-ari kung sino ang maaaring sumunod sa kanya.", + "account.media": "Medya", + "account.mention": "Banggitin si @{name}", + "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "bundle_column_error.error.title": "Naku!", + "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", + "bundle_column_error.network.title": "Kamaliang network", + "bundle_column_error.retry": "Subukang muli", + "bundle_column_error.return": "Bumalik sa tahanan", + "bundle_column_error.routing.body": "Hindi mahanap ang hiniling na pahina. Sigurado ka ba na ang URL sa address bar ay tama?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "I-sara", + "bundle_modal_error.message": "May nangyaring mali habang kinakarga ang bahaging ito.", + "bundle_modal_error.retry": "Subukang muli", + "closed_registrations.other_server_instructions": "Dahil desentralisado ang Mastodon, pwede kang gumawa ng account sa iba pang server at makipag-ugnayan pa rin dito.", + "closed_registrations_modal.description": "Hindi pa pwedeng gumawa ng account sa {domain}, pero tandaan na hindi mo kailangan ng account partikular sa {domain} para gamitin ang Mastodon.", + "closed_registrations_modal.find_another_server": "Maghanap ng iba pang server", + "closed_registrations_modal.preamble": "Dahil desentralisado ang Mastodon, kahit saan ka pa gumawa ng account, maaari ka pa ring sumunod at makipag-ugnayan sa kahit-sino rito sa server na ito. Pwede mo pang i-host nang pasarili!", + "closed_registrations_modal.title": "Pagrerehistro sa Mastodon", + "column.about": "Tungkol dito", + "column.blocks": "Nakahadlang na mga tagagamit", + "column.bookmarks": "Mga bookmark", + "column.community": "Lokal na timeline", + "column.direct": "Mga palihim na banggit", + "column.directory": "Tingnan ang mga profile", + "column.domain_blocks": "Nakahadlang na mga domain", + "column.favourites": "Mga paborito", + "column.firehose": "Mga live feed", + "column.follow_requests": "Mga hiling para sundan", + "column.home": "Tahanan", + "column.lists": "Mga listahan", + "column.mutes": "Mga pinatahimik na tagagamit", + "column.notifications": "Mga abiso", + "column.pins": "Mga nakapaskil na post", + "column.public": "Pinagsamang timeline", + "column_back_button.label": "Bumalik", + "column_header.hide_settings": "I-tago ang mga setting", + "column_header.moveLeft_settings": "I-lipat ang hanay pakaliwa", + "column_header.moveRight_settings": "I-lipat ang hanay pakanan", + "column_header.pin": "I-paskil", + "column_header.show_settings": "Ipakita ang mga setting", + "column_header.unpin": "Tanggalin sa pagkapaskil", + "column_subheading.settings": "Mga setting", + "community.column_settings.local_only": "Lokal lamang", + "community.column_settings.media_only": "Medya Lamang", + "community.column_settings.remote_only": "Liblib lamang", + "compose.language.change": "Magpalit ng wika", + "compose.language.search": "Maghanap ng mga wika...", + "compose.published.body": "Nailathala ang post.", + "compose.published.open": "Buksan", + "compose.saved.body": "Nai-save ang post.", + "compose_form.direct_message_warning_learn_more": "Matuto pa", + "compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.", + "compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.", + "copy_icon_button.copied": "Sinipi sa clipboard", + "copypaste.copied": "Sinipi", + "copypaste.copy_to_clipboard": "I-sipi sa clipboard", + "directory.federated": "Mula sa kilalang fediverse", + "directory.local": "Mula sa {domain} lamang", + "directory.new_arrivals": "Mga bagong dating", + "directory.recently_active": "Kamakailang aktibo", + "disabled_account_banner.account_settings": "Mga setting ng account", + "disabled_account_banner.text": "Ang iyong account na {disabledAccount} ay hindi pinapagana ngayon.", + "dismissable_banner.community_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong ang mga account hinohost ng {domain}.", + "dismissable_banner.dismiss": "Alisin", + "dismissable_banner.explore_links": "Ito ang mga balitang kwento na pinaka-binabahagi sa social web ngayon. Ang mga mas bagong balitang kwento na pinost ng mas marami pang mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.", + "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.", + "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", + "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", + "embed.preview": "Ito ang magiging itsura:", + "emoji_button.activity": "Aktibidad", + "emoji_button.clear": "Linisin", + "emoji_button.custom": "Pasadya", + "emoji_button.flags": "Mga watawat", + "emoji_button.food": "Pagkain at Inumin", + "emoji_button.label": "Maglagay ng emoji", + "emoji_button.nature": "Kalikasan", + "emoji_button.not_found": "Walang mahanap na mga tugmang emoji", + "emoji_button.objects": "Mga bagay", + "emoji_button.people": "Mga tao", + "emoji_button.recent": "Madalas na ginagamit", + "emoji_button.search": "Maghanap...", + "emoji_button.search_results": "Resulta ng paghahanap", + "emoji_button.symbols": "Mga tanda", + "emoji_button.travel": "Paglakbay at Mga Lugar", + "empty_column.account_hides_collections": "Pinili ng tagagamit na ito na hindi makuha ang impormasyong ito", + "empty_column.account_suspended": "Sinuspinde ang account", + "empty_column.account_timeline": "Walang mga post dito!", + "empty_column.account_unavailable": "Hindi makuha ang profile", + "empty_column.blocks": "Hindi ka pa naghahadlang ng sinumang tagagamit.", + "empty_column.bookmarked_statuses": "Wala ka pang naka-bookmark na post. Kapag nag-bookmark ka ng isa, makikita yun dito.", + "empty_column.community": "Walang laman ang lokal na timeline. Magsulat ng anuman papubliko para makaandar tayo!", + "empty_column.direct": "Wala ka pang mga palihim na banggit. Kapag nagpadala o tumanggap ka ng isa, makikita yun dito.", + "empty_column.domain_blocks": "Wala pang nakahadlang na domain.", + "empty_column.explore_statuses": "Wala pang sumisikat sa ngayon. Balik na lang sa muli!", + "empty_column.favourited_statuses": "Wala ka pang mga paboritong post. Kapag nag-paborito ka ng isa, makikita yun dito.", + "empty_column.favourites": "Wala pang may paborito ng post na ito. Kung may sinumang nagpaborito, makikita sila rito.", + "empty_column.follow_requests": "Wala ka pang mga hiling para sundan ka. Kapag nakatanggap ka ng isa, makikita yun dito.", + "empty_column.followed_tags": "Wala ka pang sinusunod na hashtag. Kapag may sinundan ka na, makikita sila rito.", + "empty_column.hashtag": "Wala pang laman ang hashtag na ito.", + "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", + "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", + "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito." +} diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json new file mode 100644 index 0000000000..917a034667 --- /dev/null +++ b/app/javascript/mastodon/locales/ia.json @@ -0,0 +1,23 @@ +{ + "account.add_or_remove_from_list": "Adder o remover ab listas", + "account.copy": "Copiar ligamine a profilo", + "bundle_column_error.network.title": "Error de rete", + "bundle_modal_error.close": "Clauder", + "column.home": "Initio", + "column_subheading.settings": "Parametros", + "compose.language.search": "Cercar linguas...", + "compose.published.open": "Aperir", + "confirmation_modal.cancel": "Cancellar", + "confirmations.logout.confirm": "Clauder le session", + "copypaste.copy_to_clipboard": "Copiar al area de transferentia", + "dismissable_banner.dismiss": "Dimitter", + "firehose.local": "Iste servitor", + "footer.about": "A proposito de", + "home.pending_critical_update.link": "Vider actualisationes", + "keyboard_shortcuts.my_profile": "Aperir tu profilo", + "lightbox.close": "Clauder", + "lightbox.next": "Sequente", + "link_preview.author": "Per {name}", + "lists.account.add": "Adder al lista", + "navigation_bar.about": "A proposito de" +} diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json new file mode 100644 index 0000000000..e5a4084cc1 --- /dev/null +++ b/app/javascript/mastodon/locales/ie.json @@ -0,0 +1,392 @@ +{ + "about.blocks": "Moderat servitores", + "about.contact": "Contacter:", + "about.disclaimer": "Mastodon es programmatura líber e con fonte apert, e un marca de fabrica de Mastodon dGmbH.", + "about.domain_blocks.no_reason_available": "Rason ne disponibil", + "about.domain_blocks.preamble": "Mastodon generalmen possibilisa regardar li contenete de, e li interaction con usatores de quelcunc altri servitor in li fediverse. Ci trova se li exceptiones fat de ti-ci particulari servitor.", + "about.domain_blocks.silenced.explanation": "Generalmen, li profiles e contenete de ti-ci servitor ne va aparir, except si on sercha les explicitmen o optionalisa it per sequer.", + "about.domain_blocks.silenced.title": "Limitat", + "about.domain_blocks.suspended.explanation": "Necun data de ti-ci servitor va esser tractat, inmagasinat o exchangeat, quel inpossibilisa li interaction o comunication de usatores de ti-ci servitor.", + "about.domain_blocks.suspended.title": "Suspendet", + "about.not_available": "On ne ha disponibilisat ti-ci information sur ti-ci servitor.", + "about.powered_by": "Decentralisat social medie disponibilisat de {mastodon}", + "about.rules": "Regules del servitor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjunter o remover de listes", + "account.badges.bot": "Automatisat", + "account.badges.group": "Gruppe", + "account.block": "Bloccar @{name}", + "account.block_domain": "Bloccar domene {domain}", + "account.block_short": "Bloccar", + "account.blocked": "Bloccat", + "account.browse_more_on_origin_server": "Navigar plu sur li profil original", + "account.cancel_follow_request": "Anullar sequer", + "account.copy": "Copiar ligament al profil", + "account.direct": "Privatmen mentionar @{name}", + "account.disable_notifications": "Cessa notificar me quande @{name} posta", + "account.domain_blocked": "Domene bloccat", + "account.edit_profile": "Redacter profil", + "account.enable_notifications": "Notificar me quande @{name} posta", + "account.endorse": "Recomandar sur profil", + "account.featured_tags.last_status_at": "Ultim post ye {date}", + "account.featured_tags.last_status_never": "Null postas", + "account.featured_tags.title": "Recomandat hashtags de {name}", + "account.follow": "Sequer", + "account.followers": "Sequitores", + "account.followers.empty": "Ancor nequi seque ti-ci usator.", + "account.followers_counter": "{count, plural, one {{counter} Sequitor} other {{counter} Sequitor}}", + "account.following": "Sequent", + "account.following_counter": "{count, plural, one {{counter} Sequent} other {{counter} Sequent}}", + "account.follows.empty": "Ti-ci usator ancor ne seque quemcunc.", + "account.follows_you": "Seque te", + "account.go_to_profile": "Ear a profil", + "account.hide_reblogs": "Celar boosts de @{name}", + "account.in_memoriam": "In Memoriam.", + "account.joined_short": "Adheret", + "account.languages": "Changear lingues de subscrition", + "account.link_verified_on": "Proprietá de ti-ci ligament esset verificat ye {date}", + "account.locked_info": "Li statu de confidentialitá de ti-ci conto es configurat quam cludet. Li proprietario decide manualmen qui posse sequer.", + "account.media": "Medie", + "account.mention": "Mentionar @{name}", + "account.moved_to": "{name} ha indicat que su nov conto es ja:", + "account.mute": "Silentiar @{name}", + "account.mute_notifications_short": "Silentiar notificationes", + "account.mute_short": "Silentiar", + "account.muted": "Silentiat", + "account.no_bio": "Null description providet.", + "account.open_original_page": "Aperter li págine original", + "account.posts": "Postas", + "account.posts_with_replies": "Postas e replicas", + "account.report": "Raportar @{name}", + "account.requested": "Atendent aprobation. Cliccar por anullar li petition de sequer", + "account.requested_follow": "{name} ha petit sequer te", + "account.share": "Distribuer li profil de @{name}", + "account.show_reblogs": "Monstrar boosts de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} Post} other {{counter} Postas}}", + "account.unblock": "Desbloccar @{name}", + "account.unblock_domain": "Desbloccar domene {domain}", + "account.unblock_short": "Desbloccar", + "account.unendorse": "Ne recomandar sur profil", + "account.unfollow": "Dessequer", + "account.unmute": "Dessilentiar @{name}", + "account.unmute_notifications_short": "Dessilentiar notificationes", + "account.unmute_short": "Dessilentiar", + "account_note.placeholder": "Clicca por adjunter un nota", + "admin.dashboard.daily_retention": "Usator-retention per die pos registration", + "admin.dashboard.monthly_retention": "Usator-retention per mensu pos registration", + "admin.dashboard.retention.average": "Medial", + "admin.dashboard.retention.cohort": "Mensu de registration", + "admin.dashboard.retention.cohort_size": "Nov usatores", + "admin.impact_report.instance_accounts": "Conto-profiles to-ci vell deleter", + "admin.impact_report.instance_followers": "Sequitores queles nor usatores vell perdir", + "admin.impact_report.instance_follows": "Sequitores queles lor usatores vell perdir", + "admin.impact_report.title": "Resumate de impact", + "alert.rate_limited.message": "Ples reprovar pos {retry_time, time, medium}.", + "alert.rate_limited.title": "Frequentie limitat", + "alert.unexpected.message": "Un ínexpectat erra ha evenit.", + "alert.unexpected.title": "Ups!", + "announcement.announcement": "Proclamation", + "attachments_list.unprocessed": "(íntractat)", + "audio.hide": "Celar audio", + "autosuggest_hashtag.per_week": "{count} per semane", + "boost_modal.combo": "Li proxim vez tu posse pressar {combo} por passar to-ci", + "bundle_column_error.copy_stacktrace": "Copiar erra-raporte", + "bundle_column_error.error.body": "Li demandat págine ne posset esser rendit. Fórsan it es un problema in nor code, o un problema de compatibilitá con li navigator.", + "bundle_column_error.error.title": "O ve!", + "bundle_column_error.network.body": "Un erra evenit durant li cargation de ti-ci págine, possibilmen pro un temporari problema de tui conexion del internet o de ti-ci servitor.", + "bundle_column_error.network.title": "Erra de retage", + "bundle_column_error.retry": "Provar denov", + "bundle_column_error.return": "Retornar al comense", + "bundle_column_error.routing.body": "Li demandat págine ne trovat se. Esque tu es cert que li URL in li adresse-barre es corect?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Cluder", + "bundle_modal_error.message": "Alquo errat durant li cargation de ti-ci componente.", + "bundle_modal_error.retry": "Provar denov", + "closed_registrations.other_server_instructions": "Pro que Mastodon es decentralisat, on posse crear un conto che un altri servitor e ancor interacter con ti-ci.", + "closed_registrations_modal.description": "Crear un conto che {domain} ne es possibil actualmen, ma ples memorar que on ne besona un conto specificmen che {domain} por usar Mastodon.", + "closed_registrations_modal.find_another_server": "Serchar altri servitor", + "closed_registrations_modal.preamble": "Mastodon es descentralisat, do on posse ser e interacter con quicunc che ti-ci servitor, sin egarda de u on crea su conto. On mem posse self-albergar it!", + "closed_registrations_modal.title": "Registrar sur Mastodon", + "column.about": "Information", + "column.blocks": "Bloccat usatores", + "column.bookmarks": "Marcatores", + "column.community": "Local témpor-linea", + "column.direct": "Privat mentiones", + "column.directory": "Navigar profiles", + "column.domain_blocks": "Bloccat domenes", + "column.favourites": "Favorites", + "column.firehose": "Témpor-lineas", + "column.follow_requests": "Petitiones de sequer", + "column.home": "Comense", + "column.lists": "Listes", + "column.mutes": "Silentiat usatores", + "column.notifications": "Notificationes", + "column.pins": "Pinglat postas", + "column.public": "Federat témpor-linea", + "column_back_button.label": "Retornar", + "column_header.hide_settings": "Celar parametres", + "column_header.moveLeft_settings": "Mover columne al levul", + "column_header.moveRight_settings": "Mover columne al dextri", + "column_header.pin": "Pinglar", + "column_header.show_settings": "Monstrar parametres", + "column_header.unpin": "Despinglar", + "column_subheading.settings": "Parametres", + "community.column_settings.local_only": "Solmen local", + "community.column_settings.media_only": "Solmen medie", + "community.column_settings.remote_only": "Solmen external", + "compose.language.change": "Changear lingue", + "compose.language.search": "Serchar lingues...", + "compose.published.body": "Post publicat.", + "compose.published.open": "Aperter", + "compose.saved.body": "Post conservat.", + "compose_form.direct_message_warning_learn_more": "Aprender plu", + "compose_form.hashtag_warning": "Ti-ci post ne va esser listat sur quelcunc hashtag pro que it ne es public. Solmen public postas posse esser serchat per hashtag.", + "compose_form.lock_disclaimer": "Tui conto ne es {locked}. Quicunc posse sequer te por vider tui postas solmen por sequitores.", + "compose_form.lock_disclaimer.lock": "cludet", + "compose_form.placeholder": "Quo es in tui mente?", + "compose_form.poll.add_option": "Adjunter un option", + "compose_form.poll.duration": "Duration del balotation", + "compose_form.poll.option_placeholder": "Option {number}", + "compose_form.poll.remove_option": "Remover ti-ci option", + "compose_form.poll.switch_to_multiple": "Changea li balotation por permisser multiplic selectiones", + "compose_form.poll.switch_to_single": "Changea li balotation por permisser un singul selection", + "compose_form.publish": "Publicar", + "compose_form.publish_form": "Nov post", + "compose_form.publish_loud": "{publish}!", + "compose_form.save_changes": "Conservar changes", + "compose_form.spoiler.marked": "Remover avise pri li contenete", + "compose_form.spoiler.unmarked": "Adjunter avise pri li contenete", + "compose_form.spoiler_placeholder": "Scri tui avise ci", + "confirmation_modal.cancel": "Anullar", + "confirmations.block.block_and_report": "Bloccar & Raportar", + "confirmations.block.confirm": "Bloccar", + "confirmations.block.message": "Esque tu es cert que tu vole bloccar {name}?", + "confirmations.cancel_follow_request.confirm": "Retraer petition", + "confirmations.cancel_follow_request.message": "Esque tu es cert que tu vole retraer tui petition sequer {name}?", + "confirmations.delete.confirm": "Deleter", + "confirmations.delete.message": "Esque tu es cert que tu vole deleter ti-ci post?", + "confirmations.delete_list.confirm": "Deleter", + "confirmations.delete_list.message": "Esque tu es cert que tu vole permanentmen deleter ti-ci liste?", + "confirmations.discard_edit_media.confirm": "Forjettar", + "confirmations.discard_edit_media.message": "Tu have ínconservat changes al description de medie o al previse, forjettar les sin egarda?", + "confirmations.domain_block.confirm": "Bloccar li tot domene", + "confirmations.domain_block.message": "Esque tu es certissim que tu vole bloccar li tot {domain}? In mult casus, bloccar o silentiar quelc specific contos es suficent e preferibil. Tu ne va vider contenete de ti domene in quelcunc public témpor-linea o in tui notificationes. Tui sequitores de ti domene va esser removet.", + "confirmations.edit.confirm": "Redacter", + "confirmations.edit.message": "Redacter nu va remplazzar li missage quel tu actualmen composi. Esque tu es cert que tu vole proceder?", + "confirmations.logout.confirm": "Exear", + "confirmations.logout.message": "Vole tu vermen exear?", + "confirmations.mute.confirm": "Silentiar", + "confirmations.mute.explanation": "To-ci va celar postas de ilu e postas mentionant ilu, ma it ancor va permisser ilu vider tui postas e sequer te.", + "confirmations.mute.message": "Esque tu vermen vole silentiar {name}?", + "confirmations.redraft.confirm": "Deleter & redacter", + "confirmations.redraft.message": "Esque tu es cert que tu vole deleter ti-ci post e redacter it? Favorites e boosts va esser perdit, e replicas al post original va esser orfanat.", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder nu va remplazzar li missage quel tu actualmen composi. Esque tu es cert que tu vole proceder?", + "confirmations.unfollow.confirm": "Dessequer", + "confirmations.unfollow.message": "Esque tu es cert que tu vole dessequer {name}?", + "conversation.delete": "Deleter conversation", + "conversation.mark_as_read": "Marcar quam leet", + "conversation.open": "Vider conversation", + "conversation.with": "Con {names}", + "copypaste.copied": "Copiat", + "directory.federated": "Del conosset fediverse", + "directory.local": "De solmen {domain}", + "directory.new_arrivals": "Nov arivantes", + "directory.recently_active": "Recentmen activ", + "disabled_account_banner.account_settings": "Parametres del conto", + "dismissable_banner.community_timeline": "Tis-ci es li postas max recent de gente con contos che {domain}.", + "dismissable_banner.dismiss": "Demisser", + "dismissable_banner.explore_links": "Tis-ci es li novas max distribuet che li social retage hodie. Novas plu nov, postat de plu diferent persones, es monstrat plu alt.", + "dismissable_banner.explore_statuses": "Tis-ci es postas del social retage queles es popular hodie. Nov postas con plu mult boosts e favorites es monstrat plu alt.", + "dismissable_banner.explore_tags": "Tis-ci es hashtags queles es popular che li social retage hodie. Hashtags usat de plu mult persones diferent es monstrat plu alt.", + "dismissable_banner.public_timeline": "Tis-ci es li max recent public postas de persones che li social retage quem gente che {domain} seque.", + "embed.instructions": "Inbedar ti-ci post per copiar li code in infra.", + "embed.preview": "Vi qualmen it va aspecter:", + "emoji_button.activity": "Activitá", + "emoji_button.clear": "Efaciar", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flaggas", + "emoji_button.food": "Manjage & Trincage", + "emoji_button.label": "Inserter emoji", + "emoji_button.nature": "Natura", + "emoji_button.not_found": "Null acordant emoji trovat", + "emoji_button.objects": "Objectes", + "emoji_button.people": "Gente", + "emoji_button.recent": "Frequentmen usat", + "emoji_button.search": "Sercha...", + "emoji_button.search_results": "Resultates de sercha", + "emoji_button.symbols": "Simboles", + "emoji_button.travel": "Viageation & Locos", + "empty_column.account_hides_collections": "Ti-ci usator ha selectet ne publicar ti-ci information", + "empty_column.account_suspended": "Conto suspendet", + "empty_column.account_timeline": "Null postas ci!", + "empty_column.account_unavailable": "Profil índisponibil", + "empty_column.blocks": "Tu ancor ha bloccat null usatores.", + "empty_column.bookmarked_statuses": "Tu ancor have null marcat postas. Quande tu marca un, it va aparir ci.", + "empty_column.community": "Li local témpor-linea es vacui. Scri alquo publicmen por initiar la festa!", + "empty_column.direct": "Tu ancor have null privat mentiones. Quande tu misse o recive un, it va aparir ci.", + "empty_column.domain_blocks": "Ancor hay null bloccat domenes.", + "empty_column.explore_statuses": "Nequo es popular actualmen. Retorna plu tarde!", + "empty_column.favourited_statuses": "Tu ancor have null favorit postas. Quande tu favoritisa un, it va aparir ci.", + "empty_column.favourites": "Ancor nequi ha favoritisat ti-ci posta. Quande alqui fa it, ilu va aparir ci.", + "empty_column.follow_requests": "Tu ancor have null petitiones de sequer. Quande tu recive un, it va aparir ci.", + "empty_column.followed_tags": "Tu ancor ha sequet null hashtags. Quande tu seque un, it va aparir ci.", + "empty_column.hashtag": "Hay nullcos en ti-ci hashtag ancor.", + "empty_column.home": "Tui initial témpor-linea es vacui! Sequer plu gente por plenar it.", + "empty_column.list": "Ancor ne hay quocunc in ti-ci liste. Quande membres de ti-ci liste publica nov postas, ili va aparir ci.", + "empty_column.lists": "Tu ancor have null listes. Quande tu crea un, it va aparir ci.", + "empty_column.mutes": "Tu ancor ha silentiat null usatores.", + "empty_column.notifications": "Tu have null notificationes. Quande altri persones interacte con te, tu va vider it ci.", + "empty_column.public": "Hay nullcos ci! Scri alquo publicmen, o manualmen seque usatores de altri servitores por plenar to-ci", + "error.unexpected_crash.explanation": "Pro un error in nor code o un problema de compatibilitá in li navigator, ti-ci págine ne posset esser monstrat correctmen.", + "error.unexpected_crash.explanation_addons": "Ti-ci págine ne posset esser monstrat correctmen. Li error es probabilmen causat de un extension al navigator o instrumentes por automatic traduction.", + "error.unexpected_crash.next_steps": "Prova recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", + "error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", + "errors.unexpected_crash.report_issue": "Raportar un problema", + "explore.search_results": "Resultates de sercha", + "explore.suggested_follows": "Gente", + "explore.title": "Explorar", + "explore.trending_links": "Novas", + "explore.trending_statuses": "Postas", + "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "Ti-ci filtre-categorie ne aplica al contextu in quel tu ha accessat ti-ci post. Si tu vole que li post es filtrat anc in ti-ci contextu, tu deve redacter li filtre.", + "filter_modal.added.context_mismatch_title": "Contextu íncompatibil!", + "filter_modal.added.expired_explanation": "Ti-ci filtre-categorie ha expirat, tu deve changear li date de expiration por far it aplicar.", + "filter_modal.added.expired_title": "Expirat filtre!", + "filter_modal.added.review_and_configure": "Por reviser e configurar ti-ci filtre-categorie, ea a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Parametres pri filtres", + "filter_modal.added.settings_link": "págine por parametres", + "filter_modal.added.short_explanation": "Ti-ci post ha esset adjuntet al sequente filtre-categorie: {title}.", + "filter_modal.added.title": "Filtre adjuntet!", + "filter_modal.select_filter.context_mismatch": "ne aplica a ti-ci contextu", + "filter_modal.select_filter.expired": "expirat", + "filter_modal.select_filter.prompt_new": "Nov categorie: {name}", + "filter_modal.select_filter.search": "Serchar o crear", + "filter_modal.select_filter.subtitle": "Usar un existent categorie o crear nov", + "filter_modal.select_filter.title": "Filtrar ti-ci posta", + "filter_modal.title.status": "Filtrar un posta", + "firehose.all": "Omno", + "firehose.local": "Ti-ci servitor", + "firehose.remote": "Altri servitores", + "follow_request.authorize": "Autorisar", + "follow_request.reject": "Rejecter", + "follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.", + "followed_tags": "Sequet hashtags", + "footer.about": "Information", + "footer.directory": "Profilarium", + "footer.get_app": "Obtener li aplication", + "footer.invite": "Invitar gente", + "footer.source_code": "Vider li fonte-code", + "footer.status": "Statu", + "generic.saved": "Salvat", + "getting_started.heading": "Qualmen comensar", + "hashtag.column_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "Null suggestiones trovat", + "hashtag.column_settings.select.placeholder": "Inscrir hashtags…", + "hashtag.column_settings.tag_mode.all": "Omni tis", + "hashtag.column_settings.tag_mode.any": "Quelcunc de tis", + "hashtag.column_settings.tag_mode.none": "Necun de tis", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} postas}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} postas}} hodie", + "hashtag.follow": "Sequer hashtag", + "hashtag.unfollow": "Dessequer hashtag", + "hashtags.and_other": "…e {count, plural, other {# in plu}}", + "home.actions.go_to_explore": "Vider lu populari", + "home.actions.go_to_suggestions": "Trovar gente por sequer", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Monstrar boosts", + "home.column_settings.show_replies": "Monstrar responses", + "home.explore_prompt.body": "Tui hemal témpor-linea have un mixtura del hashtags queles tu selectet sequer, li gente quem tu selectet sequer, e li postas queles ili boosta. Si to sembla tro quiet, tu fórsan vole:", + "home.explore_prompt.title": "To-ci es tui hemal págine in Mastodon.", + "home.hide_announcements": "Celar proclamationes", + "home.pending_critical_update.body": "Ples actualisar tui Mastodon-servitor tam rapid quam es possibil!", + "home.pending_critical_update.link": "Vider actualisationes", + "home.pending_critical_update.title": "Urgent actualisation de securitá disponibil!", + "home.show_announcements": "Monstrar proclamationes", + "interaction_modal.description.favourite": "Con un conto de Mastodon, tu posse favoritisar ti-ci post por informar li autor pri quant mult tu aprecia it e conservar it por plu tard.", + "interaction_modal.description.follow": "Con un conto de Mastodon, tu posse sequer {name} por reciver su postas in tui hemal témpor-linea.", + "interaction_modal.description.reblog": "Con un conto de Mastodon, tu posse boostar ti-ci post por distribuer it a tui propri sequitores.", + "interaction_modal.description.reply": "Con un conto de Mastodon, tu posse responder a ti-ci post.", + "interaction_modal.login.action": "Retorna a hem", + "interaction_modal.login.prompt": "Domene de tui hemal servitor, p.ex. mastodon.social", + "interaction_modal.no_account_yet": "Ne sur Mastodon?", + "interaction_modal.on_another_server": "Sur un servitor diferent", + "interaction_modal.on_this_server": "Sur ti-ci servitor", + "interaction_modal.sign_in": "Tu ne ha ineat a ti-ci servitor. U logia tui conto?", + "interaction_modal.title.favourite": "Favoritisar li post de {name}", + "interaction_modal.title.follow": "Sequer {name}", + "interaction_modal.title.reblog": "Boostar li post de {name}", + "interaction_modal.title.reply": "Responder al posta de {name}", + "intervals.full.days": "{number, plural, one {# die} other {# dies}}", + "intervals.full.hours": "{number, plural, one {# hor} other {# hores}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "keyboard_shortcuts.back": "Retroear", + "keyboard_shortcuts.blocked": "Aperter li lista de bloccat usatores", + "keyboard_shortcuts.boost": "Boostar post", + "keyboard_shortcuts.description": "Descrition", + "keyboard_shortcuts.enter": "Aperter posta", + "keyboard_shortcuts.favourite": "Favoritisar post", + "keyboard_shortcuts.favourites": "Aperter li liste de favorites", + "keyboard_shortcuts.federated": "Aperter li federat témpor-linea", + "keyboard_shortcuts.home": "Aperter li hemal témpor-linea", + "keyboard_shortcuts.local": "Aperter li local témpor-linea", + "keyboard_shortcuts.mention": "Mentionar li autor", + "keyboard_shortcuts.muted": "Aperter li lista de silentiat usatores", + "keyboard_shortcuts.my_profile": "Aperter tui profil", + "keyboard_shortcuts.notifications": "Aperter li columne de notificationes", + "keyboard_shortcuts.open_media": "Aperter medie", + "keyboard_shortcuts.pinned": "Aperter li liste de pinglat postas", + "keyboard_shortcuts.profile": "Aperter profil del autor", + "keyboard_shortcuts.reply": "Responder al posta", + "keyboard_shortcuts.requests": "Aperter liste de seque-petitiones", + "limited_account_hint.title": "Ti-ci profil ha esset celat del moderatores de {domain}.", + "link_preview.author": "De {name}", + "lists.account.add": "Adjunter a liste", + "lists.account.remove": "Remover de liste", + "lists.delete": "Deleter liste", + "lists.edit": "Redacter liste", + "lists.edit.submit": "Changear titul", + "lists.exclusive": "Celar ti-ci postas del hemal témpor-linea", + "lists.new.create": "Adjunter liste", + "lists.new.title_placeholder": "Titul del nov liste", + "lists.replies_policy.followed": "Quelcunc sequet usator", + "lists.replies_policy.list": "Membres del liste", + "lists.replies_policy.none": "Nequi", + "lists.replies_policy.title": "Monstrar responses a:", + "lists.search": "Serchar inter li persones quem tu seque", + "lists.subheading": "Tui listes", + "load_pending": "{count, plural, one {# nov element} other {# nov elementes}}", + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Celar notificationes de ti-ci usator?", + "mute_modal.indefinite": "Índefinit", + "navigation_bar.filters": "Silentiat paroles", + "navigation_bar.follow_requests": "Petitiones de sequer", + "navigation_bar.lists": "Listes", + "navigation_bar.mutes": "Silentiat usatores", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinglat postas", + "navigation_bar.preferences": "Preferenties", + "navigation_bar.public_timeline": "Federat témpor-linea", + "navigation_bar.search": "Sercha", + "navigation_bar.security": "Securitá", + "not_signed_in_indicator.not_signed_in": "On deve aperter session por accesser ti-ci ressurse.", + "notification.follow_request": "{name} ha petit sequer te", + "notifications.column_settings.follow_request": "Nov petitiones de sequer:", + "notifications.column_settings.update": "Redactiones:", + "notifications.group": "{count} notificationes", + "onboarding.compose.template": "Salute #Mastodon!", + "onboarding.profile.display_name": "Nómine a monstrar", + "report.mute": "Silentiar", + "report.mute_explanation": "Tu ne va vider su postas. Ilu ancor posse sequer te e vider tui postas e ne va saver que ilu es silentiat.", + "status.mute": "Silentiar @{name}", + "status.mute_conversation": "Silentiar conversation", + "status.pin": "Pinglar sur profil", + "status.pinned": "Pinglat post", + "status.unmute_conversation": "Dessilentiar conversation", + "status.unpin": "Despinglar de profil", + "video.mute": "Silentiar li son", + "video.unmute": "Dessilentiar li son" +} diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 552debdb50..ba44408935 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -20,6 +20,7 @@ "account.blocked": "Blokusita", "account.browse_more_on_origin_server": "Videz pluse che la originala profilo", "account.cancel_follow_request": "Desendez sequodemando", + "account.copy": "Kopiez ligilo al profilo", "account.direct": "Private mencionez @{name}", "account.disable_notifications": "Cesez avizar me kande @{name} postas", "account.domain_blocked": "Domain hidden", @@ -38,7 +39,8 @@ "account.follows.empty": "Ca uzanto ne sequa irgu til nun.", "account.follows_you": "Sequas tu", "account.go_to_profile": "Irez al profilo", - "account.hide_reblogs": "Celez busti de @{name}", + "account.hide_reblogs": "Celez repeti de @{name}", + "account.in_memoriam": "Memorige.", "account.joined_short": "Juntita", "account.languages": "Chanjez abonita lingui", "account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}", @@ -58,7 +60,7 @@ "account.requested": "Vartante aprobo", "account.requested_follow": "{name} demandis sequar tu", "account.share": "Partigez profilo di @{name}", - "account.show_reblogs": "Montrez busti de @{name}", + "account.show_reblogs": "Montrez repeti de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Posto} other {{counter} Posti}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Desblokusar {domain}", @@ -86,7 +88,7 @@ "attachments_list.unprocessed": "(neprocedita)", "audio.hide": "Celez audio", "autosuggest_hashtag.per_week": "{count} dum singla semano", - "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", + "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -180,7 +182,7 @@ "confirmations.mute.explanation": "Co celigos posti de oli e posti quo mencionas oli, ma ol ankore permisas oli vidar vua posti e sequar vu.", "confirmations.mute.message": "Ka vu certe volas silencigar {name}?", "confirmations.redraft.confirm": "Efacez e riskisez", - "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e busti esos perdita, e respondi al posto originala esos orfanigita.", + "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.", "confirmations.reply.confirm": "Respondez", "confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?", "confirmations.unfollow.confirm": "Desequez", @@ -189,6 +191,7 @@ "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", "conversation.with": "Kun {names}", + "copy_icon_button.copied": "Kopiita", "copypaste.copied": "Kopiesis", "copypaste.copy_to_clipboard": "Kopiez", "directory.federated": "De savita fediverso", @@ -200,7 +203,7 @@ "dismissable_banner.community_timeline": "Co esas maxim recenta publika posti de personi quo havas konto quo hostigesas da {domain}.", "dismissable_banner.dismiss": "Ignorez", "dismissable_banner.explore_links": "Ca nova rakonti parolesas da personi che ca e altra servili di necentraligita situo nun.", - "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu busti e favoriziti esas rangizita plu alte.", + "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.", "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.", "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.", "embed.instructions": "Embed this status on your website by copying the code below.", @@ -220,6 +223,7 @@ "emoji_button.search_results": "Trovuri", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Vizito & Plasi", + "empty_column.account_hides_collections": "Ca uzanto selektis ne publikigar ca informo", "empty_column.account_suspended": "Konto restriktesis", "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profilo esas nedisponebla", @@ -294,14 +298,18 @@ "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} partoprenanto} other {{counter} partoprenanti}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} posto} other {{counter} posti}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posto} other {{counter} posti}} hodie", "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", + "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", "home.actions.go_to_explore": "Videz quo es populara nun", "home.actions.go_to_suggestions": "Trovez personi por sequar", "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", - "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili bustis. Se to semblas tro tacanta, vu darfas volar:", + "home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili repetis. Se to semblas tro tacanta, vu darfas volar:", "home.explore_prompt.title": "Co es vua hemo en Mastodon.", "home.hide_announcements": "Celez anunci", "home.pending_critical_update.body": "Voluntez aktualigar vua Mastodon-servilo tam balde kam es posibla!", @@ -310,7 +318,7 @@ "home.show_announcements": "Montrez anunci", "interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.", "interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.", - "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas bustizar ca posti por partigar kun sua sequanti.", + "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.", "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.", "interaction_modal.login.action": "Irar a hemo", "interaction_modal.login.prompt": "Domeno di vua hemala servilo, ex. mastodon.social", @@ -321,14 +329,14 @@ "interaction_modal.sign_in_hint": "Averto: To es la retsituo ube vu kreis konto. Se vu ne rimemoras, serchez vua bonvenanta e-posto. Vu anke povas enpozar vua kompleta uzantnomo! (ex. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Favorizez ca posto da {name}", "interaction_modal.title.follow": "Sequez {name}", - "interaction_modal.title.reblog": "Bustizez posto di {name}", + "interaction_modal.title.reblog": "Repetez posto di {name}", "interaction_modal.title.reply": "Respondez posto di {name}", "intervals.full.days": "{number, plural, one {# dio} other {# dii}}", "intervals.full.hours": "{number, plural, one {# horo} other {# hori}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "Repetez posto", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "Deskripto", @@ -383,6 +391,7 @@ "lists.search": "Trovez inter personi quon vu sequas", "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", + "loading_indicator.label": "Kargante…", "media_gallery.toggle_visible": "Chanjar videbleso", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", "mute_modal.duration": "Durado", @@ -448,7 +457,7 @@ "notifications.column_settings.unread_notifications.highlight": "Briligez nelektita avizi", "notifications.column_settings.update": "Modifikati:", "notifications.filter.all": "Omna", - "notifications.filter.boosts": "Busti", + "notifications.filter.boosts": "Repeti", "notifications.filter.favourites": "Favoriziti", "notifications.filter.follows": "Sequati", "notifications.filter.mentions": "Mencioni", @@ -471,6 +480,17 @@ "onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.", "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.profile.discoverable": "Trovebligez mea profilo", + "onboarding.profile.discoverable_hint": "Se vu selektas deskovrebleso che Mastodon, vua posti povas aparar en sercho-rezultaji e populari, e vua profilo forsan sugestesos a personi kun interesi simila a vua.", + "onboarding.profile.display_name": "Publika nomo", + "onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomo…", + "onboarding.profile.lead": "Vu sempre povas kompletigar co plu tarde en la opcioni, ube mem plua personalizanta opcioni es disponebla.", + "onboarding.profile.note": "Biografio", + "onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagi…", + "onboarding.profile.save_and_continue": "Preservez e avancez", + "onboarding.profile.title": "Kompletigez la profilo", + "onboarding.profile.upload_avatar": "Kargez profiloportreto", + "onboarding.profile.upload_header": "Kargez profilokapimajo", "onboarding.share.lead": "Savigez personi quale ili povas trovar vu che Mastodon!", "onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}", "onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:", @@ -482,7 +502,7 @@ "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": "Facar vua unesma posto", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", + "onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.", "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", @@ -510,6 +530,7 @@ "privacy.unlisted.short": "Ne enlistigota", "privacy_policy.last_updated": "Antea novajo ye {date}", "privacy_policy.title": "Privatesguidilo", + "recommended": "Rekomendata", "refresh": "Rifreshez", "regeneration_indicator.label": "Chargas…", "regeneration_indicator.sublabel": "Vua hemniuzeto preparesas!", @@ -580,6 +601,8 @@ "search.quick_action.status_search": "Posti qui asortas {x}", "search.search_or_paste": "Serchar o pozar URL", "search_popout.full_text_search_disabled_message": "Nedisponebla che {domain}.", + "search_popout.full_text_search_logged_out_message": "Nur disponebla enirite.", + "search_popout.language_code": "ISO linguokodexo", "search_popout.options": "Opcioni serchala", "search_popout.quick_actions": "Agi rapida", "search_popout.recent": "Lasta serchi", @@ -607,8 +630,8 @@ "status.admin_status": "Open this status in the moderation interface", "status.block": "Restriktez @{name}", "status.bookmark": "Libromarko", - "status.cancel_reblog_private": "Debustez", - "status.cannot_reblog": "Ca posto ne povas bustesas", + "status.cancel_reblog_private": "Desrepetez", + "status.cannot_reblog": "Ca posto ne povas repetesar", "status.copy": "Copy link to status", "status.delete": "Efacar", "status.detailed_status": "Detala konversvido", @@ -636,10 +659,10 @@ "status.pin": "Pinglagez che profilo", "status.pinned": "Pinned toot", "status.read_more": "Lektez pluse", - "status.reblog": "Repetar", - "status.reblog_private": "Bustez kun originala videbleso", - "status.reblogged_by": "{name} repetita", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblog": "Repetez", + "status.reblog_private": "Repetez kun originala videbleso", + "status.reblogged_by": "{name} repetis", + "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", "status.remove_bookmark": "Efacez libromarko", "status.replied_to": "Respondis a {name}", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json new file mode 100644 index 0000000000..051e475e68 --- /dev/null +++ b/app/javascript/mastodon/locales/lad.json @@ -0,0 +1,139 @@ +{ + "about.blocks": "Sirvidores moderados", + "about.contact": "Kontakto:", + "about.disclaimer": "Mastodon es un programario libero, kon kodiche avierto i una marka komersiala de Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Razon no desponivle", + "about.domain_blocks.preamble": "Mastodon djeneralmente te permete ver kontenido de i enteraktuar kon utilizadores de kualseker otro sirvidor en el fediverso. Estas son las eksepsiones en este sirvidor en partikolar.", + "about.domain_blocks.silenced.explanation": "\"Djeneralmente no veras profiles i kontenido de este sirvidor, salvo ke eksplisitamente lo bushkes o sigas algun kuento de el.", + "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.explanation": "Dingunos datos de este sirvidor sera prosesado, magazinado o enterkambiado kon este sirvidor. Enteraksyon o komunikasyon kon sus utilizadores sera imposivle.", + "about.domain_blocks.suspended.title": "Suspendido", + "about.not_available": "Esta enformasyon no esta desponivle en este sirvidor.", + "about.powered_by": "Redes sosyalas desentralizadas kon uzo de {mastodon}", + "about.rules": "Reglas del sirvidor", + "account.account_note_header": "Nota", + "account.add_or_remove_from_list": "Adjusta a o kita de listas", + "account.badges.bot": "Bot", + "account.badges.group": "Grupo", + "account.block": "Bloka @{name}", + "account.block_domain": "Bloka el domeno {domain}", + "account.block_short": "Bloka", + "account.blocked": "Blokado", + "account.browse_more_on_origin_server": "Ve mas en el profil orijinal", + "account.cancel_follow_request": "Anula solisitud de segir", + "account.copy": "Kopia atadijo de profil", + "account.direct": "Enmenta a @{name} en privado", + "account.disable_notifications": "No me avizes mas sovre publikasyones de @{name}", + "account.domain_blocked": "Domeno blokado", + "account.edit_profile": "Edita profil", + "account.enable_notifications": "Avizame kuando @{name} publike", + "account.endorse": "Avalia en profil", + "account.featured_tags.last_status_at": "Ultima publikasyon de {date}", + "account.featured_tags.last_status_never": "\"No ay publikasyones", + "account.featured_tags.title": "Etiketas avaliadas de {name}", + "account.follow": "Sige", + "account.followers": "Suivantes", + "account.followers.empty": "Por agora dingun no sige a este utilizador.", + "account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}", + "account.following": "Sigiendo", + "account.following_counter": "{count, plural, other {Sigiendo a {counter}}}", + "account.follows.empty": "Este utilizador ainda no sige a ningun.", + "account.follows_you": "Te sige", + "account.go_to_profile": "Va al profil", + "account.hide_reblogs": "Eskonde repartajasyones de @{name}", + "account.joined_short": "Adjunto", + "account.languages": "Troka linguas suskrividas", + "account.link_verified_on": "La propriedad de este atadijo fue verifikada el {date}", + "account.locked_info": "El estado de privasita de este konto esta konfigurado komo serado. El proprietario reviza manualmente kien le puede segir.", + "account.media": "Multimedia", + "account.mention": "Enmenta a @{name}", + "account.moved_to": "{name} tiene endikado ke su muevo kuento agora es:", + "account.mute": "Silensia a @{name}", + "account.mute_notifications_short": "Silensia avizos de @{name}", + "account.mute_short": "Silensia", + "account.muted": "Silensiado", + "account.open_original_page": "Avre pajina orijnala", + "account.posts": "Publikasyones", + "account.posts_with_replies": "Kon repuestas", + "account.report": "Raporta @{name}", + "account.requested": "Asperando achetasion. Klika para anular la solisitud de segimiento", + "account.requested_follow": "{name} tiene solisitado segirte", + "account.share": "Partaja el profil de @{name}", + "account.show_reblogs": "Amostra repartajasyones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", + "account.unblock": "Dezbloka @{name}", + "account.unblock_domain": "Dezbloka domeno {domain}", + "account.unblock_short": "Dezbloka", + "account.unendorse": "No avalia en profil", + "account.unfollow": "Desige", + "account.unmute": "Desilensia a @{name}", + "account.unmute_notifications_short": "Desilensia avizos", + "account.unmute_short": "Desilensia", + "account_note.placeholder": "Klika para adjustar nota", + "admin.dashboard.daily_retention": "Proporsyon de retensyon de utilizadores por diya dempues de enrejistrasyon", + "admin.dashboard.monthly_retention": "Proporsyon de retensyon de utilizadores por mez dempues de enrejistrasyon", + "admin.dashboard.retention.average": "Media", + "admin.dashboard.retention.cohort": "Mez de enrejistrasyon", + "admin.dashboard.retention.cohort_size": "Muevos utilizadores", + "alert.rate_limited.message": "Por favor aprova dempues de {retry_time, time, medium}.", + "alert.rate_limited.title": "Trafiko limitado", + "alert.unexpected.message": "Afito un yerro no asperado.", + "alert.unexpected.title": "Atyo!", + "announcement.announcement": "Pregon", + "attachments_list.unprocessed": "(no prosesado)", + "audio.hide": "Eskonder audio", + "autosuggest_hashtag.per_week": "{count} por semana", + "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", + "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", + "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", + "bundle_column_error.error.title": "Atyo, no!", + "bundle_column_error.network.body": "Uvo un yerro kon la prova de eskargar esta pajina. Esto puede ser por un problem temporal kon tu koneksyon a la internet o a este sirvidor.", + "bundle_column_error.network.title": "Yerro de red", + "bundle_column_error.retry": "Aprova de muevo", + "bundle_column_error.return": "Volta a la linya prinsipala", + "bundle_column_error.routing.body": "No se pudo trokar la pajina solisitada. Estas siguro ke el adreso URL en la vara de adreso es djusto?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Serra", + "bundle_modal_error.message": "Algo negro afito al eskargar este komponente.", + "bundle_modal_error.retry": "Aprova de muevo", + "closed_registrations.other_server_instructions": "Deke Mastodon es desentralizado, puedes kriyar un kuento en otro sirvidor i ainda enteraktuar kon este.", + "closed_registrations_modal.description": "Aktualmente no es posivle kriyar un kuento en {domain}, ama por favor akodrate de ke no ay menester de tener un kuento espesifikamente en {domain} para kulanear Mastodon.", + "closed_registrations_modal.find_another_server": "Bushka otro sirvidor", + "closed_registrations_modal.preamble": "Mastodon es desentralizado, estonses sin emportansya ande kriyas tu kuento, podras segir i enteraktuar kon kualseker persona en este sirvidor. Tamyen puedes balabayarlo tu mezmo!", + "closed_registrations_modal.title": "Enrerjistrate en Mastodon", + "column.about": "Sovre mozotros", + "column.blocks": "Utilizadores blokados", + "column.bookmarks": "Markadores", + "column.community": "Linya de tiempo lokala", + "column.direct": "Enmentaduras privadas", + "column.directory": "Eksplora profiles", + "column.domain_blocks": "Domenos blokados", + "column.favourites": "Te plazen", + "column.firehose": "Linyas en bivo", + "column.follow_requests": "Solisitudes de segimiento", + "column.home": "Linya prinsipala", + "column.lists": "Listas", + "column.mutes": "Utilizadores silensiados", + "column.notifications": "Avizos", + "column.pins": "Publikasyones fiksadas", + "column.public": "Linya de tiempo federada", + "column_back_button.label": "Atras", + "column_header.hide_settings": "Eskonde opsyones", + "column_header.moveLeft_settings": "Move kolumna a la siedra", + "column_header.moveRight_settings": "Move kolumna a la derecha", + "column_header.pin": "Fiksa", + "column_header.show_settings": "Amostra opsyones", + "column_header.unpin": "Defiksar", + "column_subheading.settings": "Opsyones", + "community.column_settings.local_only": "Solo lokalas", + "community.column_settings.media_only": "Solo multimedia", + "community.column_settings.remote_only": "Solo remotas", + "compose.language.change": "Troka lingua", + "compose.language.search": "Bushka linguas...", + "compose_form.direct_message_warning_learn_more": "Ambezate mas", + "compose_form.encryption_warning": "Publikasyones en Mastodon no son shifradas de lado a lado. No partajes dinguna enformasyon sensivle por Mastodon.", + "compose_form.hashtag_warning": "Esta publikasyon no sera amostrada debasho de dinguna etiketa si no es publika. Solo publikasyones publikas se pueden bushkar por la etiketa.", + "compose_form.lock_disclaimer": "Tu kuento no esta {locked}. Todos pueden segirte para ver tus publikasyones solo para suivantes.", + "compose_form.lock_disclaimer.lock": "serrado", + "compose_form.placeholder": "Ke haber?" +} diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 7faf279719..708d8c3e98 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -1,25 +1,39 @@ { "about.contact": "ਸੰਪਰਕ:", + "about.domain_blocks.silenced.title": "ਸੀਮਿਤ", "about.domain_blocks.suspended.title": "ਮੁਅੱਤਲ ਕੀਤੀ", + "about.rules": "ਸਰਵਰ ਨਿਯਮ", "account.account_note_header": "ਨੋਟ", - "account.badges.bot": "Bot", + "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.cancel_follow_request": "Withdraw follow request", - "account.follow": "ਪ੍ਰਸ਼ੰਸਕ ਬਣੋ", - "account.followers": "ਪ੍ਰਸ਼ੰਸਕ", - "account.following": "ਪ੍ਰਸ਼ੰਸਕ ਹਾਂ", + "account.cancel_follow_request": "ਫ਼ਾਲੋ ਕਰਨ ਨੂੰ ਰੱਦ ਕਰੋ", + "account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ", + "account.follow": "ਫ਼ਾਲੋ", + "account.followers": "ਫ਼ਾਲੋਅਰ", + "account.followers.empty": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਾਲੇ ਕੋਈ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।", + "account.following": "ਫ਼ਾਲੋ ਕੀਤਾ", + "account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।", + "account.follows_you": "ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", "account.media": "ਮੀਡੀਆ", "account.muted": "ਮੌਨ ਕੀਤੀਆਂ", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.requested": "Awaiting approval", + "account.posts": "ਪੋਸਟਾਂ", + "account.posts_with_replies": "ਪੋਸਤਾਂ ਅਤੇ ਜਵਾਬ", + "account.requested": "ਮਨਜ਼ੂਰੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", + "account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", "account.unblock_short": "ਪਾਬੰਦੀ ਹਟਾਓ", - "account.unfollow": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ", + "account.unfollow": "ਅਣ-ਫ਼ਾਲੋ", "account.unmute_short": "ਮੌਨ-ਰਹਿਤ ਕਰੋ", "account_note.placeholder": "Click to add a note", "admin.dashboard.retention.average": "ਔਸਤ", + "admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ", "alert.unexpected.title": "ਓਹੋ!", "announcement.announcement": "ਹੋਕਾ", "bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ", @@ -27,35 +41,50 @@ "bundle_modal_error.close": "ਬੰਦ ਕਰੋ", "bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ", "column.about": "ਸਾਡੇ ਬਾਰੇ", + "column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "column.bookmarks": "ਬੁੱਕਮਾਰਕ", - "column.home": "ਮੁੱਖ ਪੰਨਾ", + "column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ", + "column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ", + "column.favourites": "ਮਨਪਸੰਦ", + "column.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ", + "column.home": "ਮੁੱਖ ਸਫ਼ਾ", "column.lists": "ਸੂਚੀਆਂ", "column.notifications": "ਸੂਚਨਾਵਾਂ", - "column.pins": "Pinned toot", + "column.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ", "column_back_button.label": "ਪਿੱਛੇ", + "column_header.pin": "ਟੰਗੋ", + "column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ", + "column_header.unpin": "ਲਾਹੋ", "column_subheading.settings": "ਸੈਟਿੰਗਾਂ", - "community.column_settings.media_only": "Media only", + "community.column_settings.local_only": "ਸਿਰਫ ਲੋਕਲ ਹੀ", + "community.column_settings.media_only": "ਸਿਰਫ ਮੀਡੀਆ ਹੀ", + "community.column_settings.remote_only": "ਸਿਰਫ਼ ਰਿਮੋਟ ਹੀ", + "compose.language.change": "ਭਾਸ਼ਾ ਬਦਲੋ", + "compose.language.search": "ਭਾਸ਼ਾਵਾਂ ਦੀ ਖੋਜ...", + "compose.published.open": "ਖੋਲ੍ਹੋ", + "compose.saved.body": "ਪੋਸਟ ਸੰਭਾਲੀ ਗਈ।", "compose_form.direct_message_warning_learn_more": "ਹੋਰ ਜਾਣੋ", "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.", + "compose_form.lock_disclaimer.lock": "ਲਾਕ ਹੈ", "compose_form.placeholder": "What is on your mind?", "compose_form.publish": "ਪ੍ਰਕਾਸ਼ਨ ਕਰੋ", "compose_form.publish_form": "Publish", "compose_form.save_changes": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler.marked": "ਸਮੱਗਰੀ ਚੇਤਾਵਨੀ ਨੂੰ ਹਟਾਓ", + "compose_form.spoiler.unmarked": "ਸਮੱਗਰੀ ਬਾਰੇ ਚੇਤਾਵਨੀ ਜੋੜੋ", "confirmation_modal.cancel": "ਰੱਦ ਕਰੋ", - "confirmations.block.confirm": "ਬਲਾਕ", - "confirmations.delete.confirm": "ਮਿਟਾਓ", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "ਮਿਟਾਓ", + "confirmations.block.confirm": "ਪਾਬੰਦੀ", + "confirmations.delete.confirm": "ਹਟਾਓ", + "confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.delete_list.confirm": "ਹਟਾਓ", "confirmations.discard_edit_media.confirm": "ਰੱਦ ਕਰੋ", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "ਪੂਰੀ ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", "confirmations.edit.confirm": "ਸੋਧ", "confirmations.logout.confirm": "ਬਾਹਰ ਹੋਵੋ", "confirmations.mute.confirm": "ਮੌਨ ਕਰੋ", "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ", - "confirmations.unfollow.confirm": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ", + "confirmations.unfollow.confirm": "ਅਣ-ਫ਼ਾਲੋ", "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ", "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ", "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ", @@ -63,165 +92,252 @@ "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "embed.instructions": "Embed this status on your website by copying the code below.", - "emoji_button.activity": "ਗਤੀਵਿਧੀਆਂ", - "emoji_button.clear": "ਸਾਫ਼ ਕਰੋ", + "emoji_button.activity": "ਗਤੀਵਿਧੀ", + "emoji_button.clear": "ਮਿਟਾਓ", "emoji_button.custom": "ਕਸਟਮ", "emoji_button.flags": "ਝੰਡੀਆਂ", "emoji_button.food": "ਖਾਣਾ-ਪੀਣਾ", "emoji_button.nature": "ਕੁਦਰਤ", "emoji_button.objects": "ਇਕਾਈ", "emoji_button.people": "ਲੋਕ", - "empty_column.account_timeline": "No toots here!", + "emoji_button.search": "ਖੋਜ ਕਰੋ...", + "emoji_button.search_results": "ਖੋਜ ਨਤੀਜੇ", + "emoji_button.symbols": "ਚਿੰਨ੍ਹ", + "emoji_button.travel": "ਸੈਰ ਸਪਾਟਾ ਤੇ ਥਾਵਾਂ", + "empty_column.account_timeline": "ਇੱਥੇ ਕੋਈ ਪੋਸਟ ਨਹੀਂ ਹੈ!", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", + "empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ", "explore.suggested_follows": "ਲੋਕ", "explore.title": "ਪੜਚੋਲ ਕਰੋ", "explore.trending_links": "ਖ਼ਬਰਾਂ", - "explore.trending_statuses": "ਸੰਪਾਦਨਾਵਾਂ", - "follow_request.reject": "ਅਸਵੀਕਾਰ ਕਰੋ", + "explore.trending_statuses": "ਪੋਸਟਾਂ", + "explore.trending_tags": "ਹੈਸ਼ਟੈਗ", + "filter_modal.added.settings_link": "ਸੈਟਿੰਗਾਂ ਸਫ਼ਾ", + "firehose.all": "ਸਭ", + "firehose.local": "ਇਹ ਸਰਵਰ", + "firehose.remote": "ਹੋਰ ਸਰਵਰ", + "follow_request.reject": "ਰੱਦ ਕਰੋ", "footer.about": "ਸਾਡੇ ਬਾਰੇ", + "footer.get_app": "ਐਪ ਲਵੋ", + "footer.invite": "ਲੋਕਾਂ ਨੂੰ ਸੱਦਾ ਭੇਜੋ", "footer.keyboard_shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", + "footer.privacy_policy": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", + "footer.source_code": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ", "footer.status": "ਹਾਲਤ", "generic.saved": "ਸਾਂਭੀ ਗਈ", + "getting_started.heading": "ਸ਼ੁਰੂ ਕਰੀਏ", + "hashtag.column_header.tag_mode.all": "ਅਤੇ {additional}", + "hashtag.column_header.tag_mode.any": "ਜਾਂ {additional}", + "hashtag.column_header.tag_mode.none": "{additional} ਬਿਨਾਂ", + "hashtag.column_settings.tag_mode.any": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ", + "hashtag.column_settings.tag_mode.none": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", + "hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", "home.column_settings.basic": "ਆਮ", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", + "interaction_modal.title.follow": "{name} ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", + "keyboard_shortcuts.back": "ਪਿੱਛੇ ਜਾਓ", + "keyboard_shortcuts.blocked": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਸੂਚੀ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.boost": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ", + "keyboard_shortcuts.column": "ਫੋਕਸ ਕਾਲਮ", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "ਵਰਣਨ", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.heading": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", "keyboard_shortcuts.home": "to open home timeline", "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": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਕਾਲਮ ਖੋਲ੍ਹੋ", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.profile": "ਲੇਖਕ ਦਾ ਪਰੋਫਾਈਲ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.reply": "ਪੋਸਟ ਨੂੰ ਜਵਾਬ ਦਿਓ", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ", + "keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "ਬੰਦ ਕਰੋ", "lightbox.next": "ਅਗਲੀ", "lightbox.previous": "ਪਿਛਲੀ", - "lists.delete": "ਸੂਚੀ ਮਿਟਾਓ", + "link_preview.author": "{name} ਵਲੋਂ", + "lists.account.add": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ", + "lists.account.remove": "ਸੂਚੀ ਵਿਚੋਂ ਹਟਾਓ", + "lists.delete": "ਸੂਚੀ ਹਟਾਓ", + "lists.replies_policy.followed": "ਕੋਈ ਵੀ ਫ਼ਾਲੋ ਕੀਤਾ ਵਰਤੋਂਕਾਰ", + "lists.replies_policy.none": "ਕੋਈ ਨਹੀਂ", + "loading_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ…", "mute_modal.duration": "ਮਿਆਦ", - "navigation_bar.about": "ਸਾਡੇ ਬਾਰੇ", + "navigation_bar.about": "ਇਸ ਬਾਰੇ", + "navigation_bar.advanced_interface": "ਤਕਨੀਕੀ ਵੈੱਬ ਇੰਟਰਫੇਸ ਵਿੱਚ ਖੋਲ੍ਹੋ", + "navigation_bar.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "navigation_bar.bookmarks": "ਬੁੱਕਮਾਰਕ", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.community_timeline": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ", + "navigation_bar.compose": "ਨਵੀਂ ਪੋਸਟ ਲਿਖੋ", + "navigation_bar.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ", "navigation_bar.discover": "ਖੋਜ", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ", + "navigation_bar.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ", "navigation_bar.explore": "ਪੜਚੋਲ ਕਰੋ", + "navigation_bar.favourites": "ਮਨਪਸੰਦ", + "navigation_bar.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ", + "navigation_bar.followed_tags": "ਫ਼ਾਲੋ ਕੀਤੇ ਹੈਸ਼ਟੈਗ", + "navigation_bar.follows_and_followers": "ਫ਼ਾਲੋ ਅਤੇ ਫ਼ਾਲੋ ਕਰਨ ਵਾਲੇ", "navigation_bar.lists": "ਸੂਚੀਆਂ", - "navigation_bar.logout": "ਲਾੱਗ ਆਊਟ, ਬਾਹਰ ਆਉਣਾ", + "navigation_bar.logout": "ਲਾਗ ਆਉਟ", "navigation_bar.personal": "ਨਿੱਜੀ", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "ਤਰਜੀਹਾਂ", + "navigation_bar.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ", + "navigation_bar.preferences": "ਪਸੰਦਾਂ", "navigation_bar.search": "ਖੋਜੋ", "navigation_bar.security": "ਸੁਰੱਖਿਆ", - "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", + "not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।", + "notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ", + "notification.follow_request": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", "notification.reblog": "{name} boosted your status", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.follow": "ਨਵੇਂ ਫ਼ਾਲੋਅਰ:", + "notifications.column_settings.follow_request": "ਨਵੀਆਂ ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ:", + "notifications.column_settings.status": "ਨਵੀਆਂ ਪੋਸਟਾਂ:", + "notifications.column_settings.update": "ਸੋਧ:", "notifications.filter.all": "ਸਭ", - "notifications.filter.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "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", + "notifications.filter.boosts": "ਬੂਸਟ", + "notifications.filter.favourites": "ਮਨਪਸੰਦ", + "notifications.filter.follows": "ਫ਼ਾਲੋ", + "notifications.filter.mentions": "ਜ਼ਿਕਰ", + "onboarding.actions.go_to_explore": "ਮੈਨੂੰ ਰੁਝਾਨ ਵੇਖਾਓ", + "onboarding.actions.go_to_home": "ਮੇਰੀ ਮੁੱਖ ਫੀਡ ਉੱਤੇ ਲੈ ਜਾਓ", + "onboarding.follows.lead": "", + "onboarding.follows.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ", + "onboarding.profile.note": "ਜਾਣਕਾਰੀ", + "onboarding.profile.save_and_continue": "ਸੰਭਾਲੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ", + "onboarding.profile.title": "ਪਰੋਫਾਈਲ ਸੈਟਅੱਪ", + "onboarding.profile.upload_avatar": "ਪਰੋਫਾਈਲ ਤਸਵੀਰ ਅੱਪਲੋਡ ਕਰੋ", + "onboarding.share.title": "ਆਪਣਾ ਪਰੋਫਾਈਲ ਸਾਂਝਾ ਕਰੋ", "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.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.start.skip": "ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਦਦ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ?", + "onboarding.start.title": "ਤੁਸੀਂ ਪੂਰਾ ਕਰਨ ਲਿਆ!", + "onboarding.steps.follow_people.body": "ਦਿਲਚਸਪ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ, ਇਹ ਤਾਂ ਮਸਟਾਡੋਨ ਹੈ।", + "onboarding.steps.follow_people.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ", "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.title": "ਆਪਣੀ ਪਹਿਲੀ ਪੋਸਟ ਕਰੋ", "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", - "poll.closed": "ਬੰਦ ਹੋਇਆ", + "onboarding.steps.setup_profile.title": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਆਪਣਾ ਬਣਾਓ", + "onboarding.steps.share_profile.body": "ਆਪਣੇ ਮਿੱਤਰਾਂ ਨੂੰ ਦੱਸੋ ਤੁਹਾਨੂੰ ਮਸਟਾਡੋਨ ਕਿਵੇਂ ਲੱਗਿਆ", + "onboarding.steps.share_profile.title": "ਆਪਣੇ ਮਸਟਾਡੋਨ ਪਰੋਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰੋ", + "poll.closed": "ਬੰਦ ਹੈ", "poll.refresh": "ਤਾਜ਼ਾ ਕਰੋ", "poll.vote": "ਵੋਟ ਪਾਓ", - "privacy.change": "Adjust status privacy", - "privacy.direct.short": "Direct", - "privacy.private.short": "Followers-only", + "privacy.change": "ਪੋਸਟ ਦੀ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਦਲੋ", + "privacy.direct.short": "ਸਿੱਧਾ ਲੋਕਾਂ ਦਾ ਜ਼ਿਕਰ ਕਰੋ", + "privacy.private.short": "ਸਿਰਫ਼ ਫ਼ਾਲੋਅਰ", "privacy.public.short": "ਜਨਤਕ", "privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", "refresh": "ਤਾਜ਼ਾ ਕਰੋ", "regeneration_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...", "relative_time.full.just_now": "ਹੁਣੇ ਹੀ", + "relative_time.just_now": "ਹੁਣੇ", + "relative_time.minutes": "{number}ਮਿੰ", + "relative_time.seconds": "{number}ਸ", "relative_time.today": "ਅੱਜ", "reply_indicator.cancel": "ਰੱਦ ਕਰੋ", "report.block": "ਬਲਾਕ", + "report.categories.legal": "ਕਨੂੰਨੀ", "report.categories.other": "ਬਾਕੀ", - "report.categories.spam": "ਸਪਾਮ", - "report.category.title_status": "ਸੰਪਾਦਨਾ", + "report.categories.spam": "ਸਪੈਮ", + "report.category.title_account": "ਪਰੋਫਾਈਲ", + "report.category.title_status": "ਪੋਸਟ", "report.close": "ਮੁਕੰਮਲ", "report.mute": "ਮੌਨ ਕਰੋ", "report.next": "ਅਗਲੀ", - "report.placeholder": "Type or paste additional comments", - "report.submit": "Submit report", - "report.target": "Report {target}", + "report.placeholder": "ਵਧੀਕ ਟਿੱਪਣੀਆਂ", + "report.reasons.dislike": "ਮੈਨੂੰ ਇਹ ਪਸੰਦ ਨਹੀਂ ਹੈ", + "report.reasons.spam": "ਇਹ ਸਪੈਮ ਹੈ", + "report.submit": "ਭੇਜੋ", + "report.target": "{target} ਰਿਪੋਰਟ", + "report.unfollow": "@{name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "ਬਾਕੀ", - "report_notification.categories.spam": "ਸਪਾਮ", + "report_notification.categories.spam": "ਸਪੈਮ", + "report_notification.categories.violation": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ", "search.placeholder": "ਖੋਜੋ", + "search_popout.quick_actions": "ਫੌਰੀ ਕਾਰਵਾਈਆਂ", + "search_popout.specific_date": "ਖਾਸ ਤਾਰੀਖ", + "search_popout.user": "ਵਰਤੋਂਕਾਰ", + "search_results.accounts": "ਪਰੋਫਾਈਲ", "search_results.all": "ਸਭ", - "search_results.statuses": "Toots", + "search_results.hashtags": "ਹੈਸ਼ਟੈਗ", + "search_results.statuses": "ਪੋਸਟਾਂ", "server_banner.learn_more": "ਹੋਰ ਜਾਣੋ", "sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ", - "sign_in_banner.sign_in": "Sign in", - "status.admin_status": "Open this status in the moderation interface", - "status.copy": "Copy link to status", - "status.delete": "ਮਿਟਾਓ", + "sign_in_banner.sign_in": "ਲਾਗਇਨ", + "status.admin_status": "", + "status.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "status.bookmark": "ਬੁੱਕਮਾਰਕ", + "status.copy": "ਪੋਸਟ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", + "status.delete": "ਹਟਾਓ", "status.edit": "ਸੋਧ", + "status.edited": "{date} ਨੂੰ ਸੋਧਿਆ", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", "status.embed": "ਮੜ੍ਹੋ", + "status.favourite": "ਪਸੰਦ", + "status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ", + "status.history.edited": "{name} ਨੇ {date} ਨੂੰ ਸੋਧਿਆ", "status.load_more": "ਹੋਰ ਦਿਖਾਓ", + "status.media.open": "ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "status.media.show": "ਵੇਖਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "status.mention": "@{name} ਦਾ ਜ਼ਿਕਰ", "status.more": "ਹੋਰ", - "status.open": "Expand this status", - "status.pinned": "Pinned toot", + "status.open": "ਇਹ ਪੋਸਟ ਨੂੰ ਫੈਲਾਓ", + "status.pin": "ਪਰੋਫਾਈਲ ਉੱਤੇ ਟੰਗੋ", + "status.pinned": "ਟੰਗੀ ਹੋਈ ਪੋਸਟ", "status.read_more": "ਹੋਰ ਪੜ੍ਹੋ", "status.reblog": "ਵਧਾਓ", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.replied_to": "{name} ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ", "status.reply": "ਜਵਾਬ ਦੇਵੋ", + "status.replyAll": "ਮਾਮਲੇ ਨੂੰ ਜਵਾਬ ਦਿਓ", + "status.report": "@{name} ਦੀ ਰਿਪੋਰਟ ਕਰੋ", + "status.sensitive_warning": "ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ", "status.share": "ਸਾਂਝਾ ਕਰੋ", + "status.show_filter_reason": "ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ", "status.show_less": "ਘੱਟ ਦਿਖਾਓ", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", - "subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ", - "tabs_bar.home": "ਮੁੱਖ ਪੰਨਾ", + "status.show_more": "ਹੋਰ ਦਿਖਾਓ", + "status.title.with_attachments": "{user} ਨੇ {attachmentCount, plural,one {ਅਟੈਚਮੈਂਟ} other {{attachmentCount}ਅਟੈਚਮੈਂਟਾਂ}} ਪੋਸਟ ਕੀਤੀਆਂ", + "status.translate": "ਉਲੱਥਾ ਕਰੋ", + "subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੋ", + "tabs_bar.home": "ਘਰ", "tabs_bar.notifications": "ਸੂਚਨਾਵਾਂ", - "timeline_hint.resources.followers": "ਪ੍ਰਸ਼ੰਸਕ", - "timeline_hint.resources.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ", - "timeline_hint.resources.statuses": "Older toots", + "timeline_hint.resources.followers": "ਫ਼ਾਲੋਅਰ", + "timeline_hint.resources.follows": "ਫ਼ਾਲੋ", + "timeline_hint.resources.statuses": "ਪੂਰਾਣੀਆਂ ਪੋਸਟਾਂ", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "units.short.billion": "{count}ਿਬ", + "units.short.million": "{count}ਮਿ", + "units.short.thousand": "{count}ਹਜ਼ਾਰ", + "upload_form.audio_description": "ਬੋਲ਼ੇ ਜਾਂ ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", + "upload_form.description": "ਅੰਨ੍ਹੇ ਜਾਂ ਦੇਖਣ ਲਈ ਮੁਸ਼ਕਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", "upload_form.edit": "ਸੋਧ", - "upload_form.undo": "ਮਿਟਾਓ", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.undo": "ਹਟਾਓ", + "upload_form.video_description": "ਬੋਲ਼ੇ, ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ, ਅੰਨ੍ਹੇ ਜਾਂ ਘੱਟ ਨਿਗ੍ਹਾ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵਾ", "upload_modal.apply": "ਲਾਗੂ ਕਰੋ", + "upload_modal.applying": "ਲਾਗੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…", "upload_modal.choose_image": "ਤਸਵੀਰ ਚੁਣੋ", "upload_modal.edit_media": "ਮੀਡੀਆ ਸੋਧੋ", - "upload_progress.label": "Uploading…", - "upload_progress.processing": "ਕਾਰਜ ਅਧੀਨ ਹੈ…", + "upload_progress.label": "ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...", + "upload_progress.processing": "ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ…", "video.exit_fullscreen": "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚੋਂ ਬਾਹਰ ਨਿਕਲੋ", "video.fullscreen": "ਪੂਰੀ ਸਕਰੀਨ", - "video.pause": "ਰਹਾਉ", + "video.pause": "ਠਹਿਰੋ", "video.play": "ਚਲਾਓ" } diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 46fcc01160..0eb4041988 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -488,6 +488,7 @@ "onboarding.profile.note": "O tebe", "onboarding.profile.note_hint": "Môžeš @spomenúť iných ľudí, alebo #haštagy…", "onboarding.profile.save_and_continue": "Ulož a pokračuj", + "onboarding.profile.title": "Nastavenie profilu", "onboarding.profile.upload_avatar": "Nahraj profilový obrázok", "onboarding.profile.upload_header": "Nahraj profilové záhlavie", "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0be9bf6d7a..67b920393a 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -496,7 +496,7 @@ "onboarding.share.message": "ฉันคือ {username} ใน #Mastodon! มาติดตามฉันที่ {url}", "onboarding.share.next_steps": "ขั้นตอนถัดไปที่เป็นไปได้:", "onboarding.share.title": "แชร์โปรไฟล์ของคุณ", - "onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมที่มีเอกลักษณ์เฉพาะตัว กระจายศูนย์ ที่ซึ่งคุณ—ไม่ใช่อัลกอริทึม—เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:", + "onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมแบบกระจายศูนย์ที่มีเอกลักษณ์เฉพาะตัว ที่ซึ่งคุณ ไม่ใช่อัลกอริทึม เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:", "onboarding.start.skip": "ไม่ต้องการความช่วยเหลือในการเริ่มต้นใช้งาน?", "onboarding.start.title": "คุณทำสำเร็จแล้ว!", "onboarding.steps.follow_people.body": "การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 4d2452e12d..6bb5ba0ebf 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -1,4 +1,6 @@ { + "about.blocks": "ئوتتۇراھال مۇلازىمېتىر", + "about.contact": "ئالاقىلاشقۇچى:", "account.badges.bot": "Bot", "account.cancel_follow_request": "Withdraw follow request", "account.posts": "Toots", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 4fb5a12de3..8484e00c83 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -8,7 +8,7 @@ "about.domain_blocks.silenced.title": "已受限", "about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法與此伺服器上的使用者互動或交流。", "about.domain_blocks.suspended.title": "已停權", - "about.not_available": "無法於此伺服器上使用此資訊。", + "about.not_available": "無法於本伺服器上使用此資訊。", "about.powered_by": "由 {mastodon} 提供的去中心化社群媒體", "about.rules": "伺服器規則", "account.account_note_header": "備註", @@ -207,14 +207,14 @@ "dismissable_banner.explore_statuses": "這些於此伺服器以及去中心化網路中其他伺服器發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。", "dismissable_banner.explore_tags": "這些主題標籤正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。", "dismissable_banner.public_timeline": "這些是來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。", - "embed.instructions": "如要將此嘟文嵌入您的網站,請複製以下程式碼。", + "embed.instructions": "若您欲於您的網站嵌入此嘟文,請複製以下程式碼。", "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", "emoji_button.clear": "清除", "emoji_button.custom": "自訂", "emoji_button.flags": "旗幟", "emoji_button.food": "食物 & 飲料", - "emoji_button.label": "插入表情圖案", + "emoji_button.label": "插入表情符號", "emoji_button.nature": "自然", "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", @@ -353,11 +353,11 @@ "keyboard_shortcuts.legend": "顯示此說明選單", "keyboard_shortcuts.local": "開啟本站時間軸", "keyboard_shortcuts.mention": "提及作者", - "keyboard_shortcuts.muted": "開啟靜音使用者清單", + "keyboard_shortcuts.muted": "開啟靜音使用者列表", "keyboard_shortcuts.my_profile": "開啟個人檔案頁面", "keyboard_shortcuts.notifications": "開啟通知欄", "keyboard_shortcuts.open_media": "開啟媒體", - "keyboard_shortcuts.pinned": "開啟釘選的嘟文清單", + "keyboard_shortcuts.pinned": "開啟釘選的嘟文列表", "keyboard_shortcuts.profile": "開啟作者的個人檔案頁面", "keyboard_shortcuts.reply": "回應嘟文", "keyboard_shortcuts.requests": "開啟跟隨請求列表", @@ -386,7 +386,7 @@ "lists.new.create": "新增列表", "lists.new.title_placeholder": "新列表標題", "lists.replies_policy.followed": "任何跟隨的使用者", - "lists.replies_policy.list": "成員清單", + "lists.replies_policy.list": "列表成員", "lists.replies_policy.none": "沒有人", "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您跟隨的使用者", @@ -477,7 +477,7 @@ "onboarding.actions.back": "返回", "onboarding.actions.go_to_explore": "看看發生什麼新鮮事", "onboarding.actions.go_to_home": "前往您的首頁時間軸", - "onboarding.compose.template": "你好 #Mastodon!", + "onboarding.compose.template": "哈囉 #Mastodon!", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "客製化您的首頁時間軸", @@ -687,7 +687,7 @@ "status.translated_from_with": "透過 {provider} 翻譯 {lang}", "status.uncached_media_warning": "無法預覽", "status.unmute_conversation": "解除此對話的靜音", - "status.unpin": "從個人檔案頁面取消釘選", + "status.unpin": "自個人檔案頁面取消釘選", "subscribed_languages.lead": "僅選定語言的嘟文才會出現於您的首頁上,並於變更後列出時間軸。選取「無」以接收所有語言的嘟文。", "subscribed_languages.save": "儲存變更", "subscribed_languages.target": "變更 {target} 的訂閱語言", diff --git a/config/locales/activerecord.ia.yml b/config/locales/activerecord.ia.yml new file mode 100644 index 0000000000..480fd56f63 --- /dev/null +++ b/config/locales/activerecord.ia.yml @@ -0,0 +1,8 @@ +--- +ia: + activerecord: + attributes: + user: + password: Contrasigno + user/account: + username: Nomine de usator diff --git a/config/locales/activerecord.ie.yml b/config/locales/activerecord.ie.yml new file mode 100644 index 0000000000..09926d0d73 --- /dev/null +++ b/config/locales/activerecord.ie.yml @@ -0,0 +1 @@ +ie: diff --git a/config/locales/activerecord.lad.yml b/config/locales/activerecord.lad.yml new file mode 100644 index 0000000000..625d897d0b --- /dev/null +++ b/config/locales/activerecord.lad.yml @@ -0,0 +1,51 @@ +--- +lad: + activerecord: + attributes: + poll: + expires_at: Limito temporal + options: Opsyones + user: + agreement: Akodro de servisyo + email: Adreso de posta elektronika + locale: Lingua + password: Kod + user/account: + username: Nombre de uzador + user/invite_request: + text: Razon + errors: + models: + account: + attributes: + username: + invalid: solo puede kontener letras, shifras i sulinyados + reserved: esta rezervado + admin/webhook: + attributes: + url: + invalid: no es adreso URL valido + doorkeeper/application: + attributes: + website: + invalid: no es adreso URL valido + import: + attributes: + data: + malformed: tiene formato yerrado + user: + attributes: + email: + blocked: uza un prokurador de posta no autorizado + unreachable: no parese existir + role_id: + elevated: no puede ser mas alto ke tu rolo aktual + user_role: + attributes: + permissions_as_keys: + dangerous: inkluir permisos ke no son siguros para el rolo de baza + elevated: no se puede inkluir permisos kualos no tiene tu rolo aktual + own_role: no se puede trokar kon tu rolo aktual + position: + elevated: no puede ser mas alto ke tu rolo aktual + own_role: no se puede trokar kon tu rolo aktual diff --git a/config/locales/activerecord.pa.yml b/config/locales/activerecord.pa.yml index bb8a6c834d..ea95c89477 100644 --- a/config/locales/activerecord.pa.yml +++ b/config/locales/activerecord.pa.yml @@ -1 +1,23 @@ +--- pa: + activerecord: + attributes: + poll: + expires_at: ਆਖਰੀ ਤਾਰੀਖ + options: ਚੋਣਾਂ + user: + agreement: ਸੇਵਾ ਸਮਝੌਤਾ + email: ਈਮੇਲ ਪਤਾ + locale: ਲੋਕੇਲ + password: ਪਾਸਵਰਡ + user/account: + username: ਵਰਤੋਂਕਾਰ-ਨਾਂ + user/invite_request: + text: ਕਾਰਨ + errors: + models: + account: + attributes: + username: + invalid: ਸਿਰਫ਼ ਅੱਖਰ, ਅੰਕ ਅਤੇ ਹੇਠਾਂ-ਰੇਖਾ ਹੀ ਹੋੋਣੀ ਚਾਹੀਦੀ ਹੈ + reserved: ਰਾਖਵਾਂ ਹੈ diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/devise.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml new file mode 100644 index 0000000000..09926d0d73 --- /dev/null +++ b/config/locales/devise.ie.yml @@ -0,0 +1 @@ +ie: diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 7d5668c920..fb90c08c7f 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -13,7 +13,7 @@ io: locked: Tua konto esas extingita. not_found_in_database: Nejusta %{authentication_keys}. pending: Vua konti ankore kontrolesas. - timeout: Tua kunsido expiris. Voluntez rienirar por durar. + timeout: Vua kunsido expiris. Voluntez rienirar por avancar. unauthenticated: Tu devas enirar o membreskar por durar. unconfirmed: Tu devas konfirmar tua konto por durar. mailer: @@ -102,7 +102,7 @@ io: unlocks: send_instructions: Tu recevos retpost-mesajo kun instrucioni por riacendar tua konto pos kelka minuti. send_paranoid_instructions: Se tua retpost-adreso existas en nia datumbazo, tu recevos ligilo por riacendar tua konto per retpost-meajo. - unlocked: Tua konto riacendesis senprobleme, tu nun esas enirinta. + unlocked: Vua konto desklefagesis senprobleme. Voluntez enirar por avancar. errors: messages: already_confirmed: ja konfirmesis, voluntez probar enirar diff --git a/config/locales/devise.lad.yml b/config/locales/devise.lad.yml new file mode 100644 index 0000000000..eeaa3294e2 --- /dev/null +++ b/config/locales/devise.lad.yml @@ -0,0 +1 @@ +lad: diff --git a/config/locales/devise.pa.yml b/config/locales/devise.pa.yml index bb8a6c834d..7d56361f63 100644 --- a/config/locales/devise.pa.yml +++ b/config/locales/devise.pa.yml @@ -1 +1,18 @@ +--- pa: + devise: + confirmations: + confirmed: ਤੁਹਾਡੇ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ ਹੈ। + failure: + inactive: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਸਰਗਰਮ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। + invalid: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ। + last_attempt: ਤੁਹਾਡੇ ਖਾਤੇ ਦੇ ਲਾਕ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਹੋਰ ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। + locked: ਤੁਹਾਡਾ ਖਾਤਾ ਲਾਕ ਹੋ ਗਿਆ ਹੈ। + not_found_in_database: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ। + pending: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਵੀ ਪੜਤਾਲ ਅਧੀਨ ਹੈ। + timeout: ਤੁਹਾਡੇ ਸ਼ੈਸ਼ਨ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਫੇਰ ਲਾਗਇਨ ਕਰੋ। + unauthenticated: ਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਜਾਂ ਸਾਈਨ ਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। + sessions: + already_signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ। + signed_in: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਇਨ ਕੀਤਾ। + signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ। diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/doorkeeper.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/doorkeeper.ie.yml b/config/locales/doorkeeper.ie.yml new file mode 100644 index 0000000000..83c9cc564f --- /dev/null +++ b/config/locales/doorkeeper.ie.yml @@ -0,0 +1,11 @@ +--- +ie: + doorkeeper: + grouped_scopes: + title: + follow: Seques, silentias e bloccas + mutes: Silentias + scopes: + read:mutes: vider tui silentias + write:conversations: silentiar e deleter conversationes + write:mutes: silentiar persones e conversationes diff --git a/config/locales/doorkeeper.io.yml b/config/locales/doorkeeper.io.yml index e2418e4c77..a71fa95841 100644 --- a/config/locales/doorkeeper.io.yml +++ b/config/locales/doorkeeper.io.yml @@ -122,12 +122,14 @@ io: admin/accounts: Administrar di konti admin/all: Omna administrofuncioni admin/reports: Administro di raporti + all: Kompleta aceso a vua Mastodon-konto blocks: Restriktita bookmarks: Libromarki conversations: Konversi crypto: Intersequanta chifro favourites: Favoriziti filters: Filtrili + follow: Sequati, silencigati e blokusati follows: Sequati lists: Listi media: Mediatachaji diff --git a/config/locales/doorkeeper.lad.yml b/config/locales/doorkeeper.lad.yml new file mode 100644 index 0000000000..eeaa3294e2 --- /dev/null +++ b/config/locales/doorkeeper.lad.yml @@ -0,0 +1 @@ +lad: diff --git a/config/locales/doorkeeper.pa.yml b/config/locales/doorkeeper.pa.yml index bb8a6c834d..4ed0c7db65 100644 --- a/config/locales/doorkeeper.pa.yml +++ b/config/locales/doorkeeper.pa.yml @@ -1 +1,85 @@ +--- pa: + activerecord: + attributes: + doorkeeper/application: + name: ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਨਾਂ + website: ਐਪਲੀਕੇਸ਼ਨ ਵੈੱਬਸਾਈਟ + doorkeeper: + applications: + buttons: + authorize: ਪਰਮਾਣਿਤ + cancel: ਰੱਦ ਕਰੋ + destroy: ਖਾਰਜ + edit: ਸੋਧੋ + submit: ਭੇਜੋ + confirmations: + destroy: ਪੱਕਾ? + edit: + title: ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸੋਧੋ + form: + error: ਓਹ ਹੋ! ਸੰਭਾਵਿਤ ਗਲਤੀਆਂ ਲਈ ਆਪਣੇ ਫਾਰਮ ਦੀ ਜਾਂਚ ਕਰੋ + index: + application: ਐਪਲੀਕੇਸ਼ਨ + callback_url: ਕਾਲਬੈਕ URL + delete: ਹਟਾਓ + empty: ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ। + name: ਨਾਂ + new: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ + scopes: ਸਕੋਪ + show: ਵੇਖਾਓ + title: ਤੁਹਾਡੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ + new: + title: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ + show: + actions: ਕਾਰਵਾਈਆਂ + application_id: ਕਲਾਈਂਟ ਕੁੰਜੀ + callback_urls: ਕਾਲਬੈਕ URL + scopes: ਸਕੋਪ + secret: ਕਲਾਈਂਟ ਭੇਤ + title: 'ਐਪਲੀਕੇਸ਼ਨ: %{name}' + authorizations: + buttons: + authorize: ਪਰਮਾਣਿਤ + deny: ਇਨਕਾਰ ਕਰੋ + error: + title: ਗਲਤੀ ਆਈ ਹੈ + new: + review_permissions: ਇਜਾਜ਼ਤਾਂ ਦੀ ਪੜਤਾਲ ਕਰੋ + title: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ + authorized_applications: + buttons: + revoke: ਮਨਸੂਖ ਕਰੋ + confirmations: + revoke: ਪੱਕਾ? + index: + authorized_at: "%{date} ਨੂੰ ਪਰਮਾਣਿਤ ਕੀਤਾ" + last_used_at: "%{date} ਨੂੰ ਆਖਰੀ ਵਾਰ ਵਰਤਿਆ" + never_used: ਕਦੀ ਨਹੀਂ ਵਰਤਿਆ + scopes: ਇਜਾਜ਼ਤਾਂ + superapp: ਅੰਦਰੂਨੀ + grouped_scopes: + title: + accounts: ਖਾਤੇ + blocks: ਪਾਬੰਦੀਸ਼ੁਦਾ + bookmarks: ਬੁੱਕਮਾਰਕ + crypto: ਸਿਰੇ-ਤੋਂ-ਸਿਰੇ ਤੱਕ ਇੰਕ੍ਰਿਪਸ਼ਨ + favourites: ਮਨਪਸੰਦ + filters: ਫਿਲਟਰ + follow: ਫ਼ਾਲੋ, ਮੌਨ ਅਤੇ ਪਾਬੰਦੀ ਲਾਏ + follows: ਫ਼ਾਲੋ + lists: ਸੂਚੀਆਂ + media: ਨੱਥੀ ਕੀਤਾ ਮੀਡੀਆ + mutes: ਮੌਨ + notifications: ਨੋਟੀਫਿਕੇਸ਼ਨ + reports: ਰਿਪੋਰਟਾਂ + search: ਖੋਜੋ + statuses: ਪੋਸਟਾਂ + layouts: + admin: + nav: + applications: ਐਪਲੀਕੇਸ਼ਨਾਂ + scopes: + write:follows: ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ + write:lists: ਸੂਚੀਆਂ ਬਣਾਓ + write:media: ਮੀਡੀਆ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ diff --git a/config/locales/eu.yml b/config/locales/eu.yml index e3062d9dff..bcf8540e74 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -777,6 +777,8 @@ eu: open: Edonork eman dezake izena security: authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik + authorized_fetch_hint: Zerbitzari federatuen autentifikazioa eskatzeak erabiltzaile-mailako zein zerbitzari-mailako blokeak zorrotzago betearaztea ahalbidetzen du. Hala ere, horrek errendimendu galera dakar, zure erantzunen irismena murrizten du eta baliteke federatutako zerbitzu batzuekin bateragarritasun-arazoak sortu ahal izatea. Horrez gain, horrek ez du eragotziko aktore dedikatuek zure mezu eta kontu publikoak eskuratzea. + authorized_fetch_overridden_hint: Une honetan ezin duzu ezarpen hau aldatu ingurune-aldagai batek gainidazten duelako. federation_authentication: Federazio autentifikazioaren betearaztea title: Zerbitzariko ezarpenak site_uploads: @@ -784,6 +786,7 @@ eu: destroyed_msg: Guneko igoera ongi ezabatu da! software_updates: critical_update: Kritikoa — mesedez, eguneratu azkar + description: Zure Mastodon instalazioa eguneratuta mantentzea gomendatzen da azken konponketa eta hobekuntzak edukitzeko. Gainera, batzuetan funtsezkoa da Mastodon garaiz eguneratzea segurtasun-arazoak saihesteko. Arrazoi horiengatik, Mastodonek eguneratzeak egiaztatzen ditu 30 minuturo, eta zure posta elektronikoko jakinarazpen-hobespenen arabera jakinaraziko dizu. documentation_link: Informazio gehiago release_notes: Bertsio oharrak title: Eguneraketak eskuragarri @@ -791,6 +794,7 @@ eu: types: major: Argitalpen handia minor: Argitalpen txikia + patch: Partxe eguneraketa — akatsen konponketa eta aplikatzeko aldaketa errazak version: Bertsioa statuses: account: Egilea @@ -976,6 +980,7 @@ eu: next_steps: Apelazioa onartu dezakezu moderazio erabakia desegiteko, edo ez ikusia egin. subject: "%{username} erabiltzailea %{instance} instantziako moderazio erabaki bat apelatzen ari da" new_critical_software_updates: + body: Mastodon-en bertsio kritiko berriak kaleratu dira, agian lehenbailehen eguneratu nahi duzu! subject: "%{instance} ek eguneraketa kritikoak eskuragarri ditu!" new_pending_account: body: Kontu berriaren xehetasunak azpian daude. Eskaera hau onartu edo ukatu dezakezu. @@ -1037,10 +1042,12 @@ eu: hint_html: Azken kontu bat! Gizakia zarela berretsi behar dugu (zabor-kontuak kanpoan mantentzeko baino ez da!) Ebatzi azpiko CAPTCHA eta sakatu "Jarraitu". title: Segurtasun txekeoa confirmations: + awaiting_review: Zure helbide elektronikoa baieztatu da! %{domain} lan taldea zure erregistroa berrikusten ari da. Mezu elektroniko bat jasoko duzu zure kontua onartzen badute! awaiting_review_title: Zure izen-ematea berrikusten ari da clicking_this_link: lotura hau klikatzen login_link: hasi saioa proceed_to_login_html: Orain jarraitu dezakezu %{login_link} -era. + redirect_to_app_html: "%{app_name} aplikaziora berbideratua izan beharko zenuke. Hori gertatu ez bada, saiatu %{clicking_this_link} edo eskuz itzuli." registration_complete: Osatuta dago orain zure izen-ematea %{domain} -en! welcome_title: Ongi etorri, %{name}! wrong_email_hint: Helbide-elektroniko hori zuzena ez bada, kontuaren ezarpenetan alda dezakezu. diff --git a/config/locales/ia.yml b/config/locales/ia.yml new file mode 100644 index 0000000000..64315d177f --- /dev/null +++ b/config/locales/ia.yml @@ -0,0 +1,52 @@ +--- +ia: + admin: + accounts: + delete: Deler datos + deleted: Delite + display_name: Nomine visibile + enabled: Activate + location: + all: Toto + title: Location + moderation: + disabled: Disactivate + reset: Reinitialisar + reset_password: Reinitialisar contrasigno + search: Cercar + security: Securitate + username: Nomine de usator + custom_emojis: + copy: Copiar + create_new_category: Crear nove categoria + delete: Deler + domain_blocks: + confirm_suspension: + cancel: Cancellar + export: Exportar + import: Importar + email_domain_blocks: + add_new: Adder nove + delete: Deler + export_domain_allows: + no_file: Necun file seligite + follow_recommendations: + language: Per lingua + status: Stato + instances: + dashboard: + instance_languages_dimension: Linguas principal + delivery: + unavailable: Non disponibile + private_comment: Commento private + public_comment: Commento public + invites: + filter: + available: Disponibile + ip_blocks: + delete: Deler + expires_in: + '1209600': 2 septimanas + '15778476': 6 menses + '2629746': 1 mense + '86400': 1 die diff --git a/config/locales/ie.yml b/config/locales/ie.yml new file mode 100644 index 0000000000..c5668edbd6 --- /dev/null +++ b/config/locales/ie.yml @@ -0,0 +1,68 @@ +--- +ie: + accounts: + pin_errors: + following: Tu deve ja sequer li person quem tu vole indossar + admin: + action_logs: + action_types: + create_announcement: Crear un proclamation + destroy_announcement: Deleter un proclamation + update_announcement: Actualisar un proclamation + actions: + create_announcement_html: "%{name} creat li nov proclamation %{target}" + destroy_announcement_html: "%{name} deletet li proclamation %{target}" + update_announcement_html: "%{name} actualisat li proclamation %{target}" + announcements: + destroyed_msg: Proclamation deletet successosimen! + edit: + title: Redacter proclamation + empty: Null proclamationes trovat. + live: Activ + new: + create: Crear un proclamation + title: Nov proclamation + publish: Publicar + published_msg: Proclamation publicat successosimen! + scheduled_for: Planat por %{time} + scheduled_msg: Proclamation planat por publication! + title: Proclamationes + unpublish: Despublicar + unpublished_msg: Proclamation despublicat successosimen! + updated_msg: Proclamation actualisat successosimen! + roles: + privileges: + manage_announcements: Tractar proclamationes + manage_announcements_description: Permisse usatores tractar proclamationes sur li servitor + exports: + mutes: Tu silentia + featured_tags: + hint_html: "Pinglar tui max important hashtags sur tui profil. Un bonissim maniere de mantener un registre de tui ovres e projectes, pinglat hashtags es monstrat prominentmen sur tui profil e permisse rapid accesse a tui propri postas." + imports: + overwrite_preambles: + muting_html: Tu va remplazzar tui liste de silentiat contos per til %{total_items} contos de %{filename}. + preambles: + muting_html: Tu va silentiar til %{total_items} contos de %{filename}. + titles: + muting: Importation de silentiat contos + type_groups: + destructive: Bloccas & silentias + move_handler: + carry_mutes_over_text: Ti-ci usator movet se de %{acct}, quel tu hat silentiat. + notification_mailer: + follow_request: + action: Tractar petitiones de sequer + body: "%{name} ha petit sequer te" + subject: 'Pendent sequitor: %{name}' + title: Nov petition de sequer + mention: + action: Responder + statuses: + pin_errors: + direct: On ne posse pinglar postas queles es visibil solmen a mentionat usatores + limit: Tu ja ha pinglat li maxim númere de postas + ownership: On ne posse pinglar li posta de un altri person + reblog: On ne posse pinglar un boost + statuses_cleanup: + keep_pinned: Conservar pinglat postas + keep_pinned_hint: Delete null de tui pinglat postas diff --git a/config/locales/io.yml b/config/locales/io.yml index c9a0dcd736..eb5fcc709d 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -91,6 +91,7 @@ io: moderation: active: Aktiva all: Omna + disabled: Desaktivigita pending: Vartanta silenced: Limitizita suspended: Restriktita @@ -116,12 +117,16 @@ io: redownloaded_msg: Sucesoze rifreshis profilo di %{username} de origino reject: Refuzez rejected_msg: Sucesoze refuzis registroapliko di %{username} + remote_suspension_irreversible: La datumi di ca konto esas nerenversebla efacita. + remote_suspension_reversible_hint_html: Ca konto restriktesis che lua servilo, e la datumi tota efacesos ye %{date}. Ante ta tempo, la fora servilo povos restaurar ca konto sen irga mala efecti. Se vu volas efacar omna datumi dil konto quik, vu povas facar lo sube. remove_avatar: Efacez profilimajo remove_header: Efacez kapimajo removed_avatar_msg: Sucesoze efacis profilimajo di %{username} removed_header_msg: Sucesoze efacis kapimajo di %{username} resend_confirmation: already_confirmed: Ca uzanto ja konfirmesis + send: Risendez konfirmligilo + success: Konfirmligilo sucesoze sendesas! reset: Richanjez reset_password: Richanjez pasvorto resubscribe: Riabonez @@ -129,6 +134,7 @@ io: search: Trovez search_same_email_domain: Altra uzanti kun sama retpostodomeno search_same_ip: Altra uzanti kun sama IP + security: Sekureso security_measures: only_password: Nur pasvorto password_and_2fa: Pasvorto e 2FA @@ -205,6 +211,7 @@ io: reject_user: Refuzez uzanto remove_avatar_user: Efacez profilimajo reopen_report: Riapertez raporto + resend_user: Risendez konfirmretposto reset_password_user: Richanjez pasvorto resolve_report: Rezolvez raporto sensitive_account: Forcsentoza konto @@ -263,6 +270,7 @@ io: reject_user_html: "%{name} refuzis registro de %{target}" remove_avatar_user_html: "%{name} efacis profilimajo de %{target}" reopen_report_html: "%{name} riapertis raporto %{target}" + resend_user_html: "%{name} risendis konfirmretposto por %{target}" reset_password_user_html: "%{name} richanjis pasvorto de uzanto %{target}" resolve_report_html: "%{name} rezolvis raporto %{target}" sensitive_account_html: "%{name} markizis medii di %{target} quale sentoza" @@ -279,6 +287,7 @@ io: update_ip_block_html: "%{name} kreis regulo por IP %{target}" update_status_html: "%{name} novigis posto da %{target}" update_user_role_html: "%{name} chanjis rolo di %{target}" + deleted_account: konto efacita empty: Nula logi. filter_by_action: Filtrez segun ago filter_by_user: Filtrez segun uzanto @@ -300,6 +309,7 @@ io: unpublish: Depublikigez unpublished_msg: Anunco sucesoze depublikigesas! updated_msg: Anunco sucesoza novigesas! + critical_update_pending: Urjanta aktualigo vartesas custom_emojis: assign_category: Insertez kategorio by_domain: Domeno @@ -373,6 +383,15 @@ io: undo: Despermisez federato kun domeno domain_blocks: add_new: Add new + confirm_suspension: + cancel: Anulez + confirm: Restriktez + permanent_action: Desrestriktar la servilo ne restaurar irga datumi o relati. + preamble_html: Vu restriktos %{domain} e lua subdomeni. + remove_all_data: Co efacos omna kontenaji, imaji, videi e profildatumi por la konti di ca domeno de vua servilo. + stop_communication: Vua servilo haltos komunikar kun ca servili. + title: Konfirmez domenoblokuso por %{domain} + undo_relationships: Co desfacos irga sequorelato inter konti di ca servili e vua. created_msg: Domenobstrukto nun procedesas destroyed_msg: Domenobstrukto desagesis domain: Domeno @@ -385,6 +404,7 @@ io: create: Kreez obstrukto hint: Domenobstrukto ne preventos kreo di kontrekordaji en datumaturo, ma retroaktive e automate aplikos partikulara jermetodi a ta konti. severity: + desc_html: "Limitizez facos la posti dil konti di ca domeno nevidebla da irgu qua ne sequas li. Restriktez efacos omna kontenaji, imaji, videi e profildatumi dil konti di ca domeno de vua servilo. Uzez Nulo se vu volas nur refuzar imaji e videi." noop: Nulo silence: Limito suspend: Restriktez @@ -419,9 +439,23 @@ io: resolve: Rezolvez domeno title: Obstruktez nova retpostodomeno no_email_domain_block_selected: Retpostodomenobstrukti ne chanjesis por ke nulo selektesis + not_permitted: Ne permisata resolved_dns_records_hint_html: Ca domennomo rezolvesas a ca MX-domeni, quale esas ultime responsanta por ganar retposto. Obstruktar MX-domeno obstruktos registri de irga retpostoadreso quo uzas sama MX-domeni, mem se la videbla domennomo esas diferanta. Sorgemez e ne obstruktez majora retpostositi. resolved_through_html: Rezolvesis tra %{domain} title: Obstruktita retpostodomeni + export_domain_allows: + no_file: Nula dosiero selektesas + export_domain_blocks: + import: + description_html: Vu importacos listo de domenoblokusi. Voluntez kontrolar la listo sorgoze, partikulare se vu ne kreis la listo personale. + existing_relationships_warning: Existanta sequo-relati + private_comment_description_html: 'Por helpar vu savar de ube importacita blokusi venis, importacita blokusi kreesos kun la sequanta komento privata: %{comment}' + private_comment_template: Importacita de %{source} ye %{date} + title: Importacar domenoblokusi + invalid_domain_block: 'Un o plu kam un domenoblokuso omisesis pro la sequanta eroro(-i): %{error}' + new: + title: Importacar domenoblokusi + no_file: Nula dosiero selektesas follow_recommendations: description_html: "Sequorekomendi helpas nova uzanti rapide trovar interesanta kontenajo. Se uzanto ne interagas kun altra personi sate por igar personaligita sequorekomendi, ca konti rekomendas. Oli rikalkulesas die de mixo di konti kun maxim alta recenta interagi e maxim altra lokala sequantoquanto segun selektita linguo." language: Por linguo @@ -450,6 +484,7 @@ io: content_policies: comment: Interna noto description_html: Vu povas fixar kontenajguidili quo aplikesos a omna konti de ca domeno e irga oli subdomeni. + limited_federation_mode_description_html: Vu povas selektar ka vu permisos federar kun ca domeno. policies: reject_media: Refusez medii reject_reports: Refusez raporti @@ -497,6 +532,7 @@ io: total_reported: Raporti pri oli total_storage: Mediiatachaji totals_time_period_hint_html: Sumi quo montresas sube inkluzas informi de pos la komenco. + unknown_instance: Prezente ne esas registrago pri ta domeno che ca servilo. invites: deactivate_all: Deaktivigez omno filter: @@ -553,20 +589,27 @@ io: mark_as_sensitive_description_html: Medii en raportizita posti markizesos quale sentoza e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto. other_description_html: Videz plu multa opcioni por dominacar konduto di konto e kustumizar komuniko a raportizita konto. resolve_description_html: Nulo agesos kontre raportizita konto, streko ne rekordizesos e raporto klozesos. + silence_description_html: Konto esos videbla nur por personi qui ja sequas lo o manuale serchas lo, severe limitizante lua atingo. On sempre povas desfacar co. Klozas omna raporti kontra ca konto. + suspend_description_html: Ca konto e omna kontenaji esos neacesebla e efacota, e interagar kun ol esos neposibla. Desfacebla dum 30 dii. Klozas omna raporti kontra ca konto. actions_description_html: Decidez ago por rezolvar ca raporto. Se vu decidar puniso kontre raportizesis konto, retpostoavizo sendesos a ol, ecepte kande Spam kategorio selektesis. + actions_description_remote_html: Selektez quo vu agos por solvar ca raporto. Co nur efektigos quale vua servilo komunikas kun ca fora konto e traktas lua kontenaji. add_to_report: Insertez pluse a raporto are_you_sure: Ka vu esas certa? assign_to_self: Taskigez me assigned: Taskigita jerero by_target_domain: Domeno di raportizita konto + cancel: Anulez category: Kategorio category_description_html: La motivo ke ca konto e kontenajo raportizesis citesos por komuniko kun raportizita konto comment: none: Nulo comment_description_html: 'Por donar plu multa informo, %{name} skribis:' + confirm: Konfirmez + confirm_action: Konfirmez jero-ago kontra @%{acct} created_at: Raportizesis delete_and_resolve: Efacez posti forwarded: Sendesis + forwarded_replies_explanation: Ca raporto esas de fora uzanto e pri fora kontenajo. Esis dissemata a vu pro ke la raportita kontenajo es respondo a un ek vua uzanti. forwarded_to: Sendesis a %{domain} mark_as_resolved: Markizez quale rezolvita mark_as_sensitive: Markizez quale sentoza @@ -580,6 +623,7 @@ io: placeholder: Deskriptez quo agesis o irga relatita novaji... title: Noti notes_description_html: Videz e pozez noti a altra jereri e vua su en futuro + processed_msg: 'Raporto #%{id} sucesoze traktita' quick_actions_description_html: 'Agetez o volvez base por vidar raportizita kontenajo:' remote_user_placeholder: nelokala uzanti de %{instance} reopen: Riapertez raporto @@ -592,9 +636,28 @@ io: status: Stando statuses: Raportizita kontenajo statuses_description_html: Ofensanta kontenajo citesos en komuniko kun raportizita konto + summary: + action_preambles: + delete_html: 'Vu efacos kelka posti di @%{acct}. Co facos lo sequanta:' + mark_as_sensitive_html: 'Vu markizos kelka posti di @%{acct} quale provokema. Co facos lo sequanta:' + silence_html: 'Vu limitizos la konto di @%{acct}. Co facos lo sequanta:' + suspend_html: 'Vu restriktos la konto di @%{acct}. Co facos lo sequanta:' + actions: + delete_html: Efacar la ofensiva posti + mark_as_sensitive_html: Markizar la atachuri dil posti quale provokema + silence_html: Severe limitizar la atingo dil konto di @%{acct} per facar ke lua profilo e posti es videbla nur a personi qui ja sequas lu o qui manuale serchas lua profilo + suspend_html: Restriktar @%{acct}, facante ke lua profilo e kontenaji neacesibla e neposibla por interagado + close_report: 'Markizar raporto #%{id} quale solvita' + close_reports_html: Markizar omna raporti contra @%{acct} quale solvita + delete_data_html: Efacor la profilo e kontenaji di @%{acct} ye 30 dii de nun ecepte ke lu esus desrestrikita ante ta tempe + preview_preamble_html: "@%{acct} recevos averto kun la sequanta kontenajo:" + record_strike_html: Registrar punto kontra @%{acct} por helpar vu traktar futura reguloviolaci di ca konto + send_email_html: Sendez a @%{acct} avertala retposto + warning_placeholder: Neobligata plusa expliko por la jero-ago. target_origin: Fonto di raportizita konto title: Raporti unassign: Detaskigez + unknown_action_msg: 'Nekonocata ago: %{action}' unresolved: Nerezolvita updated_at: Novigesis view_profile: Videz profilo @@ -676,14 +739,21 @@ io: branding: preamble: Fabrikmarko di ca servilo diferentigas lu de altra servili en la reto. Ca informi forsan montresas che diversa loki. Do, ca informi debas esar klara. title: Fabrikmarkeso + captcha_enabled: + title: Postular ke nova uzanti solvos CAPTCHA por konfirmar lia konti content_retention: preamble: Dominacez quale uzantigita kontenajo retenesar en Mastodon. title: Kontenajreteneso + default_noindex: + desc_html: Efektigas omna uzanti qui ne personale chanjis ca opciono + title: Despartoprenigez uzanti de serchilo-indexi quale originala stando discovery: follow_recommendations: Sequez rekomendaji preamble: Montrar interesanta kontenajo esas importanta ye voligar nova uzanti quo forsan ne savas irgu. Dominacez quale ca deskovrotraiti funcionar en ca servilo. profile_directory: Profilcheflisto public_timelines: Publika tempolinei + publish_discovered_servers: Publikar deskovrita servili + publish_statistics: Publikar statistiki title: Deskovro trends: Tendenci domain_blocks: @@ -698,20 +768,51 @@ io: approved: Aprobo bezonesas por registro none: Nulu povas registrar open: Irgu povas registrar + security: + authorized_fetch: Postular autentikigo de federata servili + authorized_fetch_hint: Postular autentikigo de federata servili kapabligar plu strikta enforcigo dil blokusi di uzanti e dil servilo. Tamen, co enduktos exekutado-lentigo, diminutos la atingebleso di via respondi, e forsan enduktos koncilieblesoproblemi kun kelka softwari federata. Pluse, co ne preventos aganti dedikita de acesar vua publika posti e konti. + authorized_fetch_overridden_hint: Vu prezente ne povas chanjar ca opciono pro ke ol es remplasata da environmentala varieblo. + federation_authentication: Enforcigo di federado-autentikigo + title: Servilopcioni site_uploads: delete: Efacez adchargita failo destroyed_msg: Sitadchargito sucesoze efacesis! + software_updates: + critical_update: Urjanta — voluntez aktualigar rapide + description: On rekomendas ke vu sempre aktualigas vua Mastodon-instaluro por profitar la maxim nova solvuri e novaji. Pluse, kelkafoye es importantega aktualigar Mastodon rapide por evitar sekuresoproblemi. Pro ca motivi, Mastodon serchas aktualigi mihorale, e notifikos vu segun vua opcioni pri retposto-notifiki. + documentation_link: Lernez pluse + release_notes: Emiso-noti + title: Aktualigi disponebla + type: Tipo + types: + major: Majora emiso + minor: Minora emiso + patch: Mikra emiso — problemosolvuri e chanji facila a facar + version: Versiono statuses: + account: Skribinto + application: Apliko back_to_account: Retrovenez a kontopagino back_to_report: Retrovenez a raportpagino batch: remove_from_report: Efacez de raporto report: Raportizez deleted: Efacesis + favourites: Favoriziti + history: Historio di versioni + in_reply_to: Respondante a + language: Linguo media: title: Medii + metadata: Metadatumi no_status_selected: Nula posti chanjesis pro ke nulo selektesis + open: Apertez posto + original_status: Originala posto + reblogs: Dissemi + status_changed: Posto chanjita title: Kontoposti + trending: Populara + visibility: Videbleso with_media: Kun medii strikes: actions: @@ -724,9 +825,14 @@ io: suspend: "%{name} restriktis konto di %{target}" appeal_approved: Apelis appeal_pending: Vartata apelo + appeal_rejected: Apelo refuzita system_checks: database_schema_check: message_html: Existas vartanta datamaturmigri. Startez por certigar ke la softwaro kondutar quale expektita + elasticsearch_preset: + action: Videz la dokumentajo + elasticsearch_preset_single_node: + action: Videz la dokumentajo elasticsearch_running_check: message_html: Ne povas konektas a Elasticsearch. Kontrolez ke ol functionas o desaktivigez textokompleta trovo elasticsearch_version_check: @@ -737,6 +843,18 @@ io: message_html: Vu ne fixis irga servilreguli. sidekiq_process_check: message_html: Sidekiq procedo ne funcionas ye %{value} fask(o). Kontrolez vua opciono di Sidekiq + software_version_critical_check: + action: Videz la aktualigi disponebla + message_html: Urjanta Mastodon-aktualigo es disponebla, voluntez aktualigar la servilo tam rapide kam es posibla. + software_version_patch_check: + action: Videz la aktualigi disponebla + message_html: Problemosolvanta Mastodon-aktualigo es disponebla. + upload_check_privacy_error: + action: Konsultez hike por plu multa informo + message_html: "Vua retservilo es misfigurizita. La privateso di vua uzanti es domajebla." + upload_check_privacy_error_object_storage: + action: Konsultez hike por plu multa informo + message_html: "Vua dosierokonservo es misfigurizita. La privateso di vua uzanti es domajebla." tags: review: Kontrolez stando updated_msg: Hashtagopcioni novigesis sucesoze @@ -759,6 +877,7 @@ io: other: Partigesis da %{count} personi de pos antea semano title: Tendencoza ligili usage_comparison: Partigesis %{today} foyi hodie, la nombro esas %{yesterday} hiere + not_allowed_to_trend: Ne permisita quale popularo only_allowed: Nur permisato pending_review: Vartas kontrolo preview_card_providers: @@ -843,6 +962,9 @@ io: body: "%{target} apelas jerdecido da %{action_taken_by} de %{date}, quale esis %{type}. Oli skribis:" next_steps: Vu povas aprobar apelo por deagar jerdecido o ignorar. subject: "%{username} apela jerdecido che %{instance}" + new_critical_software_updates: + body: Nova urjanta versioni di Mastodon emisesis, vu forsan volas aktualigar tam balde kam es posibla! + subject: Urjanta Mastodon-aktualigi es disponebla por %{instance}! new_pending_account: body: Detali de nova konto esas la subo. Vu povas aprobar o refuzar ca apliko. subject: Nova konto bezonas kontrolesar che %{instance} (%{username}) @@ -850,6 +972,9 @@ io: body: "%{reporter} raportizis %{target}" body_remote: Ulu de %{domain} raportizis %{target} subject: Nova raporto por %{instance} (#%{id}) + new_software_updates: + body: Nova Mastodon-versioni emisesis, vu forsan volas aktualigar! + subject: Nova Mastodon-versioni es disponebla por %{instance}! new_trends: body: 'Ca kozi bezonas kontrol ante ol povas montresar publike:' new_trending_links: @@ -881,23 +1006,41 @@ io: notification_preferences: Chanjez retpostopreferaji salutation: "%{name}," settings: 'Chanjar la retpost-mesajala preferi: %{link}' + unsubscribe: Desabonez view: 'Vidar:' view_profile: Videz profilo view_status: Videz posto applications: created: Apliko sucesoze kreesas destroyed: Apliko sucesoze efacesas + logout: Ekirez regenerate_token: Rifacez acesficho token_regenerated: Acesficho sucesoze riganesas warning: Sorgemez per ca informi. Ne partigez kun irgu! your_token: Vua acesficho auth: + apply_for_account: Demandar konto + captcha_confirmation: + help_html: Se vu ne povas solvar la CAPTCHA, vu povas kontaktar ni per %{email} e ni povas helpar vu. + hint_html: Nur un plusa kozo! Ni postulas ke vu konfirmez ke vu esas homo (co es por ke ni povas preventar mesajachi!). Solvez la suba CAPTCHA e pulsez "Avancez". + title: Sekuresokontrolo + confirmations: + awaiting_review: Vua retpostadreso es konfirmita! La jeraro che %{domain} revuos vua apliko. Vu recevos retposto se li aprobas vua konto! + awaiting_review_title: Vua apliko vartas revuo + clicking_this_link: pulsante ca ligilo + login_link: enirar + proceed_to_login_html: Nun vu povas avancar a %{login_link}. + redirect_to_app_html: Vu devas sendesir al apliko %{app_name}. Se to ne evenis, probez %{clicking_this_link} o retroirez manuale al apliko. + registration_complete: Vua registrago che %{domain} nun es kompleta! + welcome_title: Bonvenez, %{name}! + wrong_email_hint: Se ta retpostadreso ne es korekta, vu povas chanjar lo en la konto-opcioni. delete_account: Efacez konto delete_account_html: Se vu volas efacar vua konto, vu povas irar hike. Vu demandesos konfirmar. description: prefix_invited_by_user: "@%{name} invitas vu juntar ca servilo di Mastodon!" prefix_sign_up: Registrez che Mastodon hodie! suffix: Per konto, vu povos sequar personi, postigar novaji e interchanjar mesaji kun uzanti de irga servilo di Mastodon e pluse! + didnt_get_confirmation: Ka vu ne recevis konfirmoligilo? dont_have_your_security_key: Ka vu ne havas sekuresklefo? forgot_password: Pasvorto obliviita? invalid_reset_password_token: Pasvorto richanjoficho esas nevalida o expirita. Demandez novo. @@ -910,18 +1053,39 @@ io: migrate_account_html: Se vu volas ridirektar ca konto a diferanto, vu povas ajustar hike. or_log_in_with: O eniras per privacy_policy_agreement_html: Me lektis e konsentis privatesguidilo + progress: + confirm: Konfirmar retpostoadreso + details: Vua detali + review: Nia revuo + rules: Aceptar reguli providers: cas: CAS saml: SAML register: Membreskar registration_closed: "%{instance} ne aceptas nova membri" + resend_confirmation: Risendez konfirmligilo reset_password: Chanjar la pasvorto rules: + accept: Aceptar + back: Retro + invited_by: 'Vu darfas krear konto che %{domain} pro ke vu recevis invito de:' preamble: Co igesas e exekutesas da jereri di %{domain}. + preamble_invited: Ante ke vu avancos, voluntez konsiderar la reguli kreita dal jeraro di %{domain}. title: Kelka bazala reguli. + title_invited: Vu esas invitita. security: Chanjar pasvorto set_new_password: Selektar nova pasvorto + setup: + email_below_hint_html: Kontrolez vua spam-dosieruro, o demandez altra ligilo. Vu povas korektigar vua retpostadreso se esas nekorekta. + email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike. + link_not_received: Ka vu ne recevis ligilo? + new_confirmation_instructions_sent: Vu recevos nova retposto kun la konfirmligilo pos kelka minuti! + title: Kontrolez vua retposti + sign_in: + preamble_html: Enirez per vua %{domain} detali. Se vua konto esas che altra servilo, vu ne povos enirar hike. + title: Enirez a %{domain} sign_up: + manual_review: Registragi che %{domain} es revuata da nia personaro. Por helpar ni traktar vua aplikajo, skribez kelko pri vu e pro quo vu volas konto che %{domain}. preamble: Per konto en ca servilo di Mastodon, on povas sequar irga persono en ca reto, ne ye ube ona konto hostagisas. title: Ni komencigez vu en %{domain}. status: @@ -930,14 +1094,15 @@ io: functional: Vua konto esas tote funcionoza. pending: Vua apliko bezonas kontrolo da nia laborero. Co forsan esas nekurta. Vu ganos retposto se vua apliko aprobesas. redirecting_to: Vua konto esas neaktiva pro ke ol nun ridirektesos a %{acct}. + self_destruct: Pro ke %{domain} balde klozos, vu havas nur aceso limitizata a vua konto. view_strikes: Videz antea streki kontre vua konto too_fast: Formulario sendesis tro rapide, probez itere. use_security_key: Uzes sekuresklefo challenge: - confirm: Durez + confirm: Avancez hint_html: "Guidilo: Ni ne demandos vua pasvorto itere til 1 horo." invalid_password: Nevalida pasvorto - prompt: Konfirmez pasvorto por durar + prompt: Konfirmez pasvorto por avancar crypto: errors: invalid_key: ne esas valida klefo Ed25519 o Curve25519 @@ -1009,6 +1174,9 @@ io: your_appeal_rejected: Vua apelo refuzesis domain_validator: invalid_domain: ne esas valida domennomo + edit_profile: + basic_information: Fundamentala informo + other: Altra errors: '400': Demando quon vu sendis esas nevalida o malstrukturala. '403': Vu ne havas permiso por vidar ca pagino. @@ -1044,6 +1212,8 @@ io: storage: Konservado di kontenajo featured_tags: add_new: Insertez novo + errors: + limit: Vu ja pinglizis la maxima nombro de hastagi hint_html: "Quo esas estelita hashtagi? Ol montresas eminente che vua publika profilo e povigas personi vidar vua publika posti partikulare kun ta hashtagi. Oli esas bona utensilo por jeretar kreiva agaji e longa projetaji." filters: contexts: @@ -1095,7 +1265,9 @@ io: all_matching_items_selected_html: one: "%{count} kozo quo parigesas kun vua trovato selektesas." other: Omna %{count} kozi quo parigesas kun vua trovato selektesas. + cancel: Anulez changes_saved_msg: Chanji senprobleme konservita! + confirm: Konfirmez copy: Kopiez delete: Efacez deselect: Deselektez omno @@ -1111,19 +1283,59 @@ io: other: Ulo ne eventis senprobleme! Voluntez konsultar la suba %{count} eror-raporti imports: errors: + empty: CSV-dosiero vakua + invalid_csv_file: 'Nevalida CSV-dosiero. Eroro: %{error}' over_rows_processing_limit: kontenas plu kam %{count} horizontala lineo + too_large: Dosiero es tro granda + failures: Falii + imported: Importacita + mismatched_types_warning: Semblas ke vu forsan selektis la nekorekta tipo por ca importaco, voluntez kontrolar itere. modes: merge: Kombinez merge_long: Retenez displonebla rekordi e insertez novi overwrite: Remplasez overwrite_long: Remplasez nuna rekordi per novi + overwrite_preambles: + blocking_html: Vu substitucos vua blokusolisto per til %{total_items} konti de %{filename}. + bookmarks_html: Vu substitucos vua libromarki per til %{total_items} posti de %{filename}. + domain_blocking_html: Vu substitucos vua domenoblokusolisto per til %{total_items} domeni de %{filename}. + following_html: Vu sequos til %{total_items} konti de %{filename} e haltar sequar irga altra konto. + lists_html: Vu substitucos vua listi kun la kontenaji di %{filename}. Til %{total_items} konti adjuntesos a nova listi. + muting_html: Vu substitucos vua listo di konti silencigita per til %{total_items} konti de %{filename}. + preambles: + blocking_html: Vu blokusos til %{total_items} konti de %{filename}. + bookmarks_html: Vu adjuntos %{total_items} posti de %{filename} a vua libromarki. + domain_blocking_html: Vu blokusos til %{total_items} domeni de %{filename}. + following_html: Vu sequos til %{total_items} konti de %{filename}. + lists_html: Vu adjuntos til %{total_items} konti de %{filename} a vua listi. Nova listi kreesos se ne existas listo a quo adjuntar. + muting_html: Vu silencigos til %{total_items} konti en %{filename}. preface: Tu povas importacar kelka datumi, tal quala listi de omna homi quin tu sequas o blokusas, a tua konto di ca instaluro, per dosiero exportacita de altra instaluro. + recent_imports: Importacaji recenta + states: + finished: Finita + in_progress: Progresanta + scheduled: Projetita + unconfirmed: Nekonfirmata + status: Stando success: Tua datumi esis senprobleme importacita ed esos traktita quale projetita + time_started: Komencita ye + titles: + blocking: Importacante konti blokusata + bookmarks: Importacante libromarki + domain_blocking: Importacante domeni blokusata + following: Importacante konti sequata + lists: Importacante listi + muting: Importacante konti silencigata + type: Tipo di importaco + type_groups: + constructive: Sequati & libromarki + destructive: Blokusati e silencigati types: blocking: Listo de blokusiti bookmarks: Libromarki domain_blocking: Domenobstruktolisto following: Listo de sequati + lists: Listi muting: Silenciglisto upload: Kargar invites: @@ -1138,6 +1350,7 @@ io: '86400': 1 dio expires_in_prompt: Nulatempe generate: Facez invitligilo + invalid: Ca invito ne es valida invited_by: 'Vu invitesis da:' max_uses: one: 1 uzo @@ -1148,6 +1361,9 @@ io: expires_at: Expiros uses: Uzi title: Invitez personi + lists: + errors: + limit: Vu atingis la maxima nombro de listi login_activities: authentication_methods: otp: 2-faktoryurizessoftwaro @@ -1159,6 +1375,21 @@ io: failed_sign_in_html: Falita enirprob per %{method} de %{ip} (%{browser}) successful_sign_in_html: Sucesoza eniro per %{method} de %{ip} (%{browser}) title: Yurizeshistorio + mail_subscriptions: + unsubscribe: + action: Yes, desabonez + complete: Desabonita + confirmation_html: Ka vu esas certa ke vu volas desabonar de recevar %{type} por Mastodon che %{domain} a vua retpostoadreso %{email}? Vu sempre povas riabonar che vua opcioni pri restposto-notifiki. + emails: + notification_emails: + favourite: notifiko-retposti pri favoriziti + follow: retposti pri sequo-notifiki + follow_request: retposti pri sequo-demandi + mention: retposti pri menciono-notifiki + reblog: retposti pri repeto-notifiki + resubscribe_html: Se vu desabonis eroroze, vu povas riabonar en vua opcioni pri retposto-notifiki. + success_html: Vu ne plus recevos %{type} por Mastodon che %{domain} a vua retpostadreso %{email}. + title: Desabonez media_attachments: validations: images_and_video: Ne povas atachar video a posto quo ja kontenar imaji @@ -1230,14 +1461,15 @@ io: poll: subject: Votposto di %{name} finis reblog: - body: "%{name} diskonocigis tua mesajo:" - subject: "%{name} diskonocigis tua mesajo" - title: Nova busto + body: "%{name} repetis vua posto:" + subject: "%{name} repetis vua posto" + title: Nova repeto status: subject: "%{name} nove postigis" update: subject: "%{name} modifikis posto" notifications: + administration_emails: Jerala retpostonotifiki email_events: Eventi por retpostoavizi email_events_hint: 'Selektez eventi quon vu volas ganar avizi:' other_settings: Altra avizopcioni @@ -1274,12 +1506,18 @@ io: expired: Votposto ja finis invalid_choice: Selektita votselektajo ne existas over_character_limit: ne povas esar plu longa kam %{max} literi por sing + self_vote: On ne povas votar en sua propra inquesti too_few_options: mustas havar kozi too_many_options: ne povas havar plu kam %{max} kozi preferences: other: Altra posting_defaults: Originala postoopcioni public_timelines: Publika tempolinei + privacy: + privacy: Privateso + reach: Atingo + search: Sercho + title: Privateso e atingo privacy_policy: title: Privatesguidilo reactions: @@ -1288,7 +1526,11 @@ io: unrecognized_emoji: ne esas rikonocita emocimajo relationships: activity: Kontoaktiveso + confirm_follow_selected_followers: Ka vu es certa ke vu volas sequar la selektata sequati? + confirm_remove_selected_followers: Ka vu es certa ke vu volas revokar la selektata sequati? + confirm_remove_selected_follows: Ka vu es certa ke vu volas revokar la selektata sequanti? dormant: Neaktiva + follow_failure: Ne esis posibla sequar kelka ek la selektita konti. follow_selected_followers: Sequez kelka sequanti followers: Sequanti following: Sequati @@ -1317,6 +1559,9 @@ io: over_daily_limit: Vu ecesas limito quale esas %{limit} projetita posti por hodio over_total_limit: Vu ecesas limito quale esas %{limit} projetita posti too_soon: Projetita dato mustas esar en futuro + self_destruct: + lead_html: Desfortunoze, %{domain} balde klozos. Se vu havis konto ibe, vu ne plus povas uzar it, ma vu ankore povas demandar exportacajo de vua datumi. + title: Ca servilo balde klozos sessions: activity: Antea aktiveso browser: Vidilo @@ -1328,6 +1573,7 @@ io: electron: Electron firefox: Firefox generic: Nesavita vidilo + huawei_browser: Navigilo Huawei ie: Internet Explorer micro_messenger: MicroMessenger nokia: Vidilo Nokia S40 Ovi @@ -1337,6 +1583,7 @@ io: qq: Vidilo QQ safari: Safari uc_browser: UC Browser + unknown_browser: Nekonocata Navigilo weibo: Weibo current_session: Nuna sesiono description: "%{browser} che %{platform}" @@ -1349,8 +1596,10 @@ io: chrome_os: ChromeOS firefox_os: Firefox OS ios: iOS + kai_os: KaiOS linux: Linux mac: macOS + unknown_platform: Nekonocata Platformo windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone @@ -1393,7 +1642,7 @@ io: video: one: "%{count} video" other: "%{count} videi" - boosted_from_html: Bustesis de %{acct_link} + boosted_from_html: Repetis de %{acct_link} content_warning: 'Kontenajaverto: %{warning}' default_language: Sama quale intervizajlinguo disallowed_hashtags: @@ -1408,7 +1657,7 @@ io: direct: Posti quo povas videsar nur mencionita uzanti ne povas pinglagesar limit: Vu ja pinglagis maxima posti ownership: Posto di altra persono ne povas pinglagesar - reblog: Busto ne povas pinglagesar + reblog: Repeto ne povas pinglizesar poll: total_people: one: "%{count} persono" @@ -1436,9 +1685,9 @@ io: exceptions: Ecepti explanation: Pro ke efacar posti esas nechipa procedo, co agas lente progresive kande servilo ne esas okupata. Do, vua posti forsan efacesos kurte pos oli atingas oldeslimito. ignore_favs: Ignorez favorati - ignore_reblogs: Ignorez busti + ignore_reblogs: Ignorez repeti interaction_exceptions: Ecepti segun interagi - interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub favorato o bustlimito pos iras super ol. + interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub la favoratala o repetala solii pos iras super oli. keep_direct: Retenez direta mesaji keep_direct_hint: Ne efacas irga vua direta mesaji keep_media: Retenez posti kun mediiatachaji @@ -1462,8 +1711,9 @@ io: '7889238': 3 monati min_age_label: Oldeslimito min_favs: Retenez favorizita posti mine - min_reblogs: Retenez bustita posti mine - min_reblogs_hint: Ne efacas irga vua posti quo bustigesos mine ca foyoquanto. Restez quale vakua por efacar posti sen suciar olia foyoquanto + min_favs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de favoriziti. Restez vakua por efacar posti senegarde la nombro de favoriziti + min_reblogs: Retenez posti repetita adminime + min_reblogs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de repeti. Restez vakua por efacar posti senegarde la nombro de repeti stream_entries: sensitive_content: Titiliva kontenajo strikes: @@ -1564,7 +1814,10 @@ io: seamless_external_login: Vu enirar tra externa serveso, do pasvorto e retpostoopcioni ne esas disponebla. signed_in_as: 'Eniris quale:' verification: + here_is_how: Yen quale + instructions_html: Kopiez e glutinez la kodexo suba en la HTML di vua retsituo. Pose adjuntez la adreso di vua retsituo en un ek la textobuxi di vua profilo per la "Modifikar profilo" pagino e konservez chanji. verification: Verifikeso + verified_links: Vua ligili verifikata webauthn_credentials: add: Insertez nova sekuresklefo create: diff --git a/config/locales/lad.yml b/config/locales/lad.yml new file mode 100644 index 0000000000..eeaa3294e2 --- /dev/null +++ b/config/locales/lad.yml @@ -0,0 +1 @@ +lad: diff --git a/config/locales/pa.yml b/config/locales/pa.yml index bb8a6c834d..7a34358ddb 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -1 +1,161 @@ +--- pa: + about: + about_mastodon_html: ਭਵਿੱਖ ਦਾ ਸ਼ੋਸ਼ਲ ਨੈੱਟਵਰਕ ਹੈ। ਕੋਈ ਇਸ਼ਤਿਹਾਰ ਨਹੀਂ, ਕੋਈ ਵਪਾਰਕ ਨਿਗਰਾਨੀ ਨਹੀਂ, ਨੈਤਿਕ ਡਿਜ਼ਾਇਨ ਅਤੇ ਖਿੰਡਿਆ ਹੋਇਆ ਨੈੱਟਵਰਕ! ਮਸਟੋਡੋਨ ਨਾਲ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਆਪਣਾ ਹੀ ਰੱਖੋ! + contact_missing: ਸੈੱਟ ਨਹੀਂ ਹੈ + contact_unavailable: ਲਾਗ ਨਹੀਂ + hosted_on: "%{domain} ਉੱਤੇ ਹੋਸਟ ਕੀਤਾ ਮਸਟਾਡੋਨ" + title: ਇਸ ਬਾਰੇ + accounts: + follow: ਫ਼ਾਲੋ + following: ਫ਼ਾਲੋ ਕੀਤੇ ਜਾ ਰਹੇ + posts_tab_heading: ਪੋਸਟਾਂ + admin: + account_moderation_notes: + create: ਨੋਟ ਭੇਜੋ + accounts: + approve: ਮਨਜ਼ੂਰ + are_you_sure: ਪੱਕਾ? + avatar: ਅਵਤਾਰ + by_domain: ਡੋਮੇਨ + change_email: + changed_msg: ਈਮੇਲ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਬਦਲਿਆ ਗਿਆ! + current_email: ਮੌਜੂਦਾ ਈਮੇਲ + label: ਈਮੇਲ ਬਦਲੋ + new_email: ਨਵੀਂ ਈਮੇਲ + submit: ਈਮੇਲ ਨੂੰ ਬਦਲੋ + title: "%{username} ਲਈ ਈਮੇਲ ਨੂੰ ਬਦਲੋ" + confirm: ਤਸਦੀਕ + confirmed: ਤਸਦੀਕ ਕੀਤਾ + confirming: ਤਸਦੀਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ + custom: ਕਸਟਮ + delete: ਡਾਟੇ ਨੂੰ ਹਟਾਓ + deleted: ਹਟਾਇਆ + display_name: ਦਿਖਾਇਆ ਜਾਣ ਵਾਲਾ ਨਾਂ + domain: ਡੋਮੇਨ + moderation: + all: ਸਭ + suspended: ਸਸਪੈਂਡ ਕੀਤਾ + title: ਖਾਤੇ + username: ਵਰਤੋਂਕਾਰ-ਨਾਂ + ip_blocks: + delete: ਹਟਾਓ + expires_in: + '1209600': 2 ਹਫ਼ਤੇ + '15778476': 6 ਮਹੀਨੇ + '2629746': 1 ਮਹੀਨਾ + '31556952': 1 ਸਾਲ + '86400': 1 ਦਿਨ + '94670856': 3 ਸਾਲ + relays: + enable: ਸਮਰੱਥ + enabled: ਸਮਰੱਥ ਹੈ + save_and_enable: ਸੰਭਾਲੋ ਅਤੇ ਸਮਰੱਥ ਕਰੋ + reports: + are_you_sure: ਪੱਕਾ? + cancel: ਰੱਦ ਕਰੋ + comment: + none: ਕੋਈ ਨਹੀਂ + notes: + delete: ਹਟਾਓ + settings: + about: + title: ਇਸ ਬਾਰੇ + statuses: + deleted: ਹਟਾਏ + favourites: ਮਨਪਸੰਦ + history: ਵਰਜ਼ਨ ਅਤੀਤ + in_reply_to: ਇਸ ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ + language: ਭਾਸ਼ਾ + media: + title: ਮੀਡੀਆ + metadata: ਮੇਟਾਡਾਟਾ + webhooks: + delete: ਹਟਾਓ + disable: ਅਸਮਰੱਥ + disabled: ਅਸਮਰੱਥ ਹੈ + enable: ਸਮਰੱਥ + application_mailer: + salutation: "%{name}," + applications: + logout: ਲਾਗ ਆਉਟ + your_token: ਤੁਹਾਡਾ ਪਹੁੰਚ ਟੋਕਨ + auth: + apply_for_account: ਖਾਤੇ ਲਈ ਬੇਨਤੀ + confirmations: + login_link: ਲਾਗ ਇਨ + welcome_title: "%{name}, ਜੀ ਆਇਆਂ ਨੂੰ!" + delete_account: ਖਾਤੇ ਨੂੰ ਹਟਾਓ + forgot_password: ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ? + log_in_with: ਇਸ ਨਾਲ ਲਾਗਇਨ ਕਰੋ + login: ਲਾਗ ਇਨ + logout: ਲਾਗ ਆਉਟ + rules: + accept: ਮਨਜ਼ੂਰ + back: ਪਿੱਛੇ + challenge: + confirm: ਜਾਰੀ ਰੱਖੋ + date: + formats: + default: "%d %b %Y" + with_month_name: "%d %B %Y" + datetime: + distance_in_words: + about_x_hours: "%{count}ਘੰ" + about_x_months: "%{count}ਮਹੀ" + about_x_years: "%{count}ਸਾ" + almost_x_years: "%{count}ਸ" + half_a_minute: ਹੁਣੇ ਹੀ + less_than_x_minutes: "%{count}ਮਿੰ" + less_than_x_seconds: ਹੁਣੇ ਹੀ + over_x_years: "%{count}ਸਾ" + x_days: "%{count}ਦਿ" + x_minutes: "%{count}ਮਿੰ" + deletes: + proceed: ਖਾਤੇ ਨੂੰ ਹਟਾਓ + disputes: + strikes: + title: "%{date} ਨੂੰ %{action}" + exports: + archive_takeout: + date: ਤਾਰੀਖ + filters: + contexts: + account: ਪਰੋਫਾਈਲ + home: ਹੋਮ ਅਤੇ ਸੂਚੀਆਂ + notifications: ਨੋਟੀਫਿਕੇਸ਼ਨ + thread: ਗੱਲਾਂਬਾਤਾਂ + index: + delete: ਹਟਾਓ + generic: + all: ਸਭ + copy: ਕਾਪੀ ਕਰੋ + delete: ਹਟਾਓ + today: ਅੱਜ + invites: + expires_in: + '43200': 12 ਘੰਟੇ + '604800': 1 ਹਫਤਾ + '86400': 1 ਦਿਨ + expires_in_prompt: ਕਦੇ ਨਹੀਂ + login_activities: + authentication_methods: + password: ਪਾਸਵਰਡ + notification_mailer: + follow: + subject: "%{name} ਹੁਣ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਦੇ ਹਨ" + title: ਨਵੇਂ ਫ਼ਾਲੋਅਰ + follow_request: + body: "%{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ" + mention: + action: ਜਵਾਬ ਦਿਓ + number: + human: + decimal_units: + format: "%n%u" + units: + billion: ਬਿ + million: ਮਿ + otp_authentication: + enable: ਸਮਰੱਥ + setup: ਸੈਟ ਅੱਪ diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml new file mode 100644 index 0000000000..6ab26788bd --- /dev/null +++ b/config/locales/simple_form.ia.yml @@ -0,0 +1 @@ +ia: diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml new file mode 100644 index 0000000000..256d80c881 --- /dev/null +++ b/config/locales/simple_form.ie.yml @@ -0,0 +1,23 @@ +--- +ie: + simple_form: + hints: + account: + unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores. + announcement: + all_day: Si ti-ci es marcat, solmen li dates del periode de témpor va esser monstrat + ends_at: Ínobligatori. Li proclamation va esser despublicat automaticmen ye ti-ci témpor + scheduled_at: Lassar vacui por publicar li proclamation strax + starts_at: Ínobligatori. In li casu que tui proclamation es ligat a un specific periode de témpor + text: Tu posse usar post-sintaxe. Ples considerar li spacie quel li proclamation va plenar sur li ecran del usator + form_admin_settings: + bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores. + labels: + announcement: + all_day: Eveniment del tot die + ends_at: Fine del eveniment + scheduled_at: Planar publication + starts_at: Comense del eveniment + text: Proclamation + notification_emails: + follow_request: Alqui petit sequer te diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index b21b86723c..eef2014d19 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -2,6 +2,14 @@ io: simple_form: hints: + account: + discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. + display_name: Vua tota nomo o vua gaya nomo. + fields: Vua retsituo, pronomi, evo, irgo quan vu volas. + indexable: Vua posta publika povos aparar en rezultaji di serchi che Mastodon. Personi qui interagis kun vua posti povos serchar oli irgakaze. + note: 'Vu povas @mencionar altra personi o #hashtagi.' + show_collections: Personi povos navigar tra vua sequati e sequanti. Personi quin vu sequas, vidos ke vu sequas li irgakaze. + unlocked: Personi povos sequar vu sen demandar aprobo. Deselektez se vu volas revuar sequadodemandi e selektez aceptar o refuzar nova sequati. account_alias: acct: Partikulare pozez uzantonomo@domeno di konto quon vua volas ektransferesar account_migration: @@ -18,6 +26,8 @@ io: disable: Preventez uzanto de uzar olia konto ma ne efacez o celez olia kontenaji. none: Uzez co por sendar averto a la uzanto sen eventigar irga altra ago. sensitive: Koaktez omna mediiatachaji da ca uzanto markizesar quale sentoza. + silence: Preventez la uzanto de povar postar per publika videbleso, celez lua posti e avizi de personi qui ne sequas lu. Co klozas omna raporto kontra ca konto. + suspend: Preventez irga interago de o a ca konto e efacez lua kontenaji. Inversebla til 30 dii. Co klozas omna raporti kontra ca konto. warning_preset_id: Neobligata. Vu povas ankore insertar kustume texto a extremajo di fixito announcement: all_day: Kande kontrolesas, nur tempoporteodato montresos @@ -43,7 +53,7 @@ io: 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. - setting_aggregate_reblogs: Ne montrez nova busti di posti quo recente bustesas (nova busti) + setting_aggregate_reblogs: Ne montrez nova repeti di posti qui ja repetesis recente (nur efektigas repeti recevata nove) setting_always_send_emails: Normale retpostoavizi ne sendesas kande vu aktiva uzas Mastodon setting_default_sensitive: Sentoza medii originala celesas e povas revelesar per klikto setting_display_media_default: Celez medii quo markizesis quale sentoza @@ -51,25 +61,30 @@ io: setting_display_media_show_all: Sempre montrez medii 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 + username: Vu darfas uzar literi, nombri, e sublinei whole_word: Kande klefvorto o fraz esas nur litera e nombra, ol nur aplikesos se ol parigesas la tota vorto domain_allow: domain: Ca domeno povas ganar informi de ca servilo e venanta informo de ol procedagesos e sparesos email_domain_block: domain: Co povas esas domennomo quo montresas che retposto o registrajo MX quon ol uzas. Oli kontrolesos kande registro. with_dns_records: Probo di rezolvar registri DNS di la domeno agesos e rezulti anke preventesos + featured_tag: + name: 'Yen kelka hashtagi quin vu uzis maxim recente:' filters: action: Selektez ago kande posto parigas filtrilo actions: hide: Komplete celez filtrita kontenajo quale ol ne existas warn: Celez filtrita kontenajo dop avert quo montras titulo di filtrilo form_admin_settings: + activity_api_enabled: Quanto de lokale publikigita posti, aktiva uzanti e nova registri, donita semanope backups_retention_period: Retenez igita uzantoarkivi por la diiquanto. bootstrap_timeline_accounts: Ca konti pinglagesos a super sequorekomendi di nova uzanti. closed_registrations_message: Montresas kande registradi klozesas - content_cache_retention_period: Posti de altra servili efacesos pos la diiquanto kande fixesas a positiva nombro. Co darfas desagesar. + content_cache_retention_period: Omna posti e repeti de altra servili efacesos pos la specigita nombro de dii. Kelka posti forsan ne esos restaurebla. Omna relata libromarki, favoriziti e repeti anke esos perdita e neposible restaurota. custom_css: Vu povas pozar kustumizita staili en retverso di Mastodon. mascot: Remplas montreso en avanca retintervizajo. media_cache_retention_period: Deschargita mediifaili efacesos pos la diiquanto kande fixesas a positiva nombro, e rideschargesas irgatempe. + peers_api_enabled: Listo di domeni quin ca servilo trovis en la fediverso. Nula informo inkluzesas hike pri ka vu federas kun partikulara servilo, nur ke vua servilo savas pri lo. Co es uzata da enti qui kolektas statistiki pri federeso generale. profile_directory: La profilcheflisto montras omna uzanti quo voluntale volas esar deskovrebla. require_invite_text: Kande registradi bezonas manuala aprobo, ol kauzigas "Por quo vu volas juntas?" textoenpozo esar obliganta site_contact_email: Quale personi povas kontaktar vu por legala o suportquestioni. @@ -78,11 +93,13 @@ io: site_short_description: Kurta deskripto por helpar unala identifikar ca servilo. Qua funcionigar lu e por qua? site_terms: Uzez vua sua privatesguidilo o ignorez por uzar la originalo. Povas strukturigesar per sintaxo di Markdown. site_title: Quale personi vokas ca servilo se ne uzas domennomo. + status_page_url: URL di pagino ube personi povas vidar la stando di ca servilo kande la servilo ne funcionas theme: Temo quo videsas da ekirita vizitanti e nova uzanti. thumbnail: Cirkum 2:1 imajo montresar kun informo di ca servilo. timeline_preview: Ekirita vizitanti videsos maxim recenta publika posti quo esas displonebla en la servilo. trendable_by_default: Ignorez manuala kontrolar di tendencoza kontenajo. Singla kozi povas ankore efacesar de tendenci pose. trends: Tendenci montras quala posti, hashtagi e niuzrakonti famozeskas en ca servilo. + trends_as_landing_page: Montrez populara posti a uzanti neeniriti e vizitanti vice deskriptajo pri ca servilo. Bezonas ke populari es aktivita. form_challenge: current_password: Vu eniras sekura areo imports: @@ -103,6 +120,9 @@ io: sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. webauthn: Se ol esas klefo di USB, certigar ke vu insertas e se bezonesas, tushetez. + settings: + indexable: Vua profilpagino povas aparar en serchorezultaji che Google, Bing, e altri. + show_application: Vu sempre povos vidar qua apliko publikigis vua posto irgakaze. tag: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: @@ -119,9 +139,13 @@ io: url: Ibe eventi sendesos labels: account: + discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo value: Kontenajo + indexable: Inkluzar publika posti en serchorezultaji + show_collections: Montrar sequati e sequanti en la profilo + unlocked: Automate aceptar nova sequanti account_alias: acct: Nomo di olda konto account_migration: @@ -175,10 +199,10 @@ io: password: Pasvorto phrase: Klefvorto o frazo setting_advanced_layout: Aktivigez avancata retintervizajo - setting_aggregate_reblogs: Grupbusti en tempolinei + setting_aggregate_reblogs: Grupigar repeti en tempolinei setting_always_send_emails: Sempre sendez retpostoavizi setting_auto_play_gif: Automate pleez animigita GIFi - setting_boost_modal: Montrez konfirmdialogo ante bustar + setting_boost_modal: Montrez konfirmdialogo ante repetar setting_default_language: Postolinguo setting_default_privacy: Videbleso di la mesaji setting_default_sensitive: Sempre markizez medii quale sentoza @@ -213,6 +237,7 @@ io: hide: Tote celez warn: Celez kun averto form_admin_settings: + activity_api_enabled: Publikigez rezumstatistiko pri uzantoaktiveso en API backups_retention_period: Uzantoarkivretendurtempo bootstrap_timeline_accounts: Sempre rekomendez ca konti a nova uzanti closed_registrations_message: Kustumizita mesajo kande registradi ne esas disponebla @@ -220,6 +245,7 @@ io: custom_css: Kustumizita CSS mascot: Kustumizita reprezentimajo (oldo) media_cache_retention_period: Mediimemorajretendurtempo + peers_api_enabled: Publikigez listo di deskovrita servili en API profile_directory: Aktivigez profilcheflisto registrations_mode: Qua povas registragar require_invite_text: Mustez pozar motivo por juntar @@ -231,11 +257,13 @@ io: site_short_description: Servildeskripto site_terms: Privatesguidilo site_title: Servilnomo + status_page_url: URL dil stando-pagino theme: Originala temo thumbnail: Servilimajeto timeline_preview: Permisez neyurizita aceso a publika tempolineo trendable_by_default: Permisez tendenci sen bezonar kontrolo trends: Aktivigez tendenci + trends_as_landing_page: Uzar populari quale la iniciala pagino interactions: must_be_follower: Celar la savigi da homi, qui ne sequas tu must_be_following: Celar la savigi da homi, quin tu ne sequas @@ -260,11 +288,20 @@ io: follow_request: Sendar retpost-mesajo, kande ulu diskonocigas mesajo da tu mention: Sendar retpost-mesajo, kande ulu mencionas tu pending_account: Nova konto bezonas kontrolo - reblog: Sendar retpost-mesajo, kande ulu diskonocigas mesajo da tu + reblog: Ulu repetis vua posto report: Nova raport sendesas + software_updates: + all: Notifikar pri omna aktualigi + critical: Notifikar pri nur urjanta aktualigi + label: Nova Mastodon-versiono es disponebla + none: Nultempe notifikar pri aktualigi (ne rekomendata) + patch: Notifikar pri problemosolvanta aktualigi trending_tag: Nova tendenco bezonas kontrolo rule: text: Regulo + settings: + indexable: Inkluzar profilopagino en serchili + show_application: Montrar la apliko de qua vu sendis posto tag: listable: Permisez ca hashtago aparar en trovaji e sugestaji name: Hashtago @@ -272,6 +309,7 @@ io: usable: Permisez posti uzar ca hashtago user: role: Rolo + time_zone: Klokozono user_role: color: Insignokoloro highlighted: Montrez rolo quale insigno en uzantoprofili diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml new file mode 100644 index 0000000000..eeaa3294e2 --- /dev/null +++ b/config/locales/simple_form.lad.yml @@ -0,0 +1 @@ +lad: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index caf253c69c..ab2bc51553 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -119,6 +119,7 @@ sk: reject: Zamietni rejected_msg: Úspešne zamietnutá prihláška %{username} remote_suspension_irreversible: Údaje tohto účtu boli nenávratne zmazané. + remote_suspension_reversible_hint_html: Účet bol pozastavený na ich serveri a údaje budú úplne odstránené dňa %{date}. Dovtedy môže vzdialený server účet obnoviť bez akýchkoľvek nepriaznivých účinkov. Ak chceš odstrániť všetky údaje účtu ihneď, môžeš tak urobiť nižšie. remove_avatar: Vymaž avatar remove_header: Vymaž záhlavie removed_avatar_msg: Úspešne odstránený obrázok avatara %{username} diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index e17228da32..61650f8943 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1273,7 +1273,7 @@ zh-TW: other: 選取 %{count} 個符合您搜尋的項目。 today: 今天 validation_errors: - other: 恩...似乎發生了點錯誤?請檢查以下 %{count} 項錯誤 + other: 恩...似乎不太對勁耶?請檢查以下 %{count} 項錯誤 imports: errors: empty: 空的 CSV 檔案 @@ -1805,7 +1805,7 @@ zh-TW: title: "%{name} 誠摯歡迎您的加入!" users: follow_limit_reached: 您無法跟隨多於 %{limit} 個人 - go_to_sso_account_settings: 前往您的身分識別提供者(IdP)之帳號設定 + go_to_sso_account_settings: 前往您的身分提供商 (identity provider) 之帳號設定 invalid_otp_token: 兩階段認證碼不正確 otp_lost_help_html: 如果您無法存取這兩者,您可以透過 %{email} 與我們聯繫 seamless_external_login: 由於您是由外部系統登入,所以不能設定密碼與電子郵件。