diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fc5291d72..0696f0b31c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,48 @@
All notable changes to this project will be documented in this file.
+## [4.3.1] - 2024-10-21
+
+### Added
+
+- Add more explicit explanations about author attribution and `fediverse:creator` (#32383 by @ClearlyClaire)
+- Add ability to group follow notifications in WebUI, can be disabled in the column settings (#32520 by @renchap)
+- Add back a 6 hours mute duration option (#32522 by @renchap)
+- Add note about not changing ActiveRecord encryption secrets once they are set (#32413, #32476, #32512, and #32537 by @ClearlyClaire and @mjankowski)
+
+### Changed
+
+- Change translation feature to translate to selected regional variant (e.g. pt-BR) if available (#32428 by @c960657)
+
+### Removed
+
+- Remove ability to get embed code for remote posts (#32578 by @ClearlyClaire)\
+ Getting the embed code is only reliable for local posts.\
+ It never worked for non-Mastodon servers, and stopped working correctly with the changes made in 4.3.0.\
+ We have therefore decided to remove the menu entry while we investigate solutions.
+
+### Fixed
+
+- Fix follow recommendation moderation page default language when using regional variant (#32580 by @ClearlyClaire)
+- Fix column-settings spacing in local timeline in advanced view (#32567 by @lindwurm)
+- Fix broken i18n in text welcome mailer tags area (#32571 by @mjankowski)
+- Fix missing or incorrect cache-control headers for Streaming server (#32551 by @ThisIsMissEm)
+- Fix only the first paragraph being displayed in some notifications (#32348 by @ClearlyClaire)
+- Fix reblog icons on account media view (#32506 by @tribela)
+- Fix Content-Security-Policy not allowing OpenStack SWIFT object storage URI (#32439 by @kenkiku1021)
+- Fix back arrow pointing to the incorrect direction in RTL languages (#32485 by @renchap)
+- Fix streaming server using `REDIS_USERNAME` instead of `REDIS_USER` (#32493 by @ThisIsMissEm)
+- Fix follow recommendation carrousel scrolling on RTL layouts (#32462 and #32505 by @ClearlyClaire)
+- Fix follow recommendation suppressions not applying immediately (#32392 by @ClearlyClaire)
+- Fix language of push notifications (#32415 by @ClearlyClaire)
+- Fix mute duration not being shown in list of muted accounts in web UI (#32388 by @ClearlyClaire)
+- Fix “Mark every notification as read” not updating the read marker if scrolled down (#32385 by @ClearlyClaire)
+- Fix “Mention” appearing for otherwise filtered posts (#32356 by @ClearlyClaire)
+- Fix notification requests from suspended accounts still being listed (#32354 by @ClearlyClaire)
+- Fix list edition modal styling (#32358 and #32367 by @ClearlyClaire and @vmstan)
+- Fix 4 columns barely not fitting on 1920px screen (#32361 by @ClearlyClaire)
+- Fix icon alignment in applications list (#32293 by @mjankowski)
+
## [4.3.0] - 2024-10-08
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.
diff --git a/Gemfile b/Gemfile
index 690e2a59d2..47506929b0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,7 +6,7 @@ ruby '>= 3.2.0'
gem 'propshaft'
gem 'puma', '~> 6.3'
gem 'rack', '~> 2.2.7'
-gem 'rails', '~> 7.1.1'
+gem 'rails', '~> 7.2.0'
gem 'thor', '~> 1.2'
gem 'dotenv'
@@ -63,6 +63,7 @@ gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0'
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'mime-types', '~> 3.6.0', require: 'mime/types/columnar'
+gem 'mutex_m'
gem 'nokogiri', '~> 1.15'
gem 'oj', '~> 3.14'
gem 'ox', '~> 2.14'
@@ -221,7 +222,7 @@ gem 'concurrent-ruby', require: false
gem 'connection_pool', require: false
gem 'xorcist', '~> 1.1'
-gem 'net-http', '~> 0.4.0'
+gem 'net-http', '~> 0.5.0'
gem 'rubyzip', '~> 2.3'
gem 'hcaptcha', '~> 7.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 844eb1b6b2..743a78ad54 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,51 +10,46 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.1.4.2)
- actionpack (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ actioncable (7.2.2)
+ actionpack (= 7.2.2)
+ activesupport (= 7.2.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.1.4.2)
- actionpack (= 7.1.4.2)
- activejob (= 7.1.4.2)
- activerecord (= 7.1.4.2)
- activestorage (= 7.1.4.2)
- activesupport (= 7.1.4.2)
- mail (>= 2.7.1)
- net-imap
- net-pop
- net-smtp
- actionmailer (7.1.4.2)
- actionpack (= 7.1.4.2)
- actionview (= 7.1.4.2)
- activejob (= 7.1.4.2)
- activesupport (= 7.1.4.2)
- mail (~> 2.5, >= 2.5.4)
- net-imap
- net-pop
- net-smtp
+ actionmailbox (7.2.2)
+ actionpack (= 7.2.2)
+ activejob (= 7.2.2)
+ activerecord (= 7.2.2)
+ activestorage (= 7.2.2)
+ activesupport (= 7.2.2)
+ mail (>= 2.8.0)
+ actionmailer (7.2.2)
+ actionpack (= 7.2.2)
+ actionview (= 7.2.2)
+ activejob (= 7.2.2)
+ activesupport (= 7.2.2)
+ mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.1.4.2)
- actionview (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ actionpack (7.2.2)
+ actionview (= 7.2.2)
+ activesupport (= 7.2.2)
nokogiri (>= 1.8.5)
racc
- rack (>= 2.2.4)
+ rack (>= 2.2.4, < 3.2)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- actiontext (7.1.4.2)
- actionpack (= 7.1.4.2)
- activerecord (= 7.1.4.2)
- activestorage (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ useragent (~> 0.16)
+ actiontext (7.2.2)
+ actionpack (= 7.2.2)
+ activerecord (= 7.2.2)
+ activestorage (= 7.2.2)
+ activesupport (= 7.2.2)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.4.2)
- activesupport (= 7.1.4.2)
+ actionview (7.2.2)
+ activesupport (= 7.2.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -64,31 +59,33 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
- activejob (7.1.4.2)
- activesupport (= 7.1.4.2)
+ activejob (7.2.2)
+ activesupport (= 7.2.2)
globalid (>= 0.3.6)
- activemodel (7.1.4.2)
- activesupport (= 7.1.4.2)
- activerecord (7.1.4.2)
- activemodel (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ activemodel (7.2.2)
+ activesupport (= 7.2.2)
+ activerecord (7.2.2)
+ activemodel (= 7.2.2)
+ activesupport (= 7.2.2)
timeout (>= 0.4.0)
- activestorage (7.1.4.2)
- actionpack (= 7.1.4.2)
- activejob (= 7.1.4.2)
- activerecord (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ activestorage (7.2.2)
+ actionpack (= 7.2.2)
+ activejob (= 7.2.2)
+ activerecord (= 7.2.2)
+ activesupport (= 7.2.2)
marcel (~> 1.0)
- activesupport (7.1.4.2)
+ activesupport (7.2.2)
base64
+ benchmark (>= 0.3)
bigdecimal
- concurrent-ruby (~> 1.0, >= 1.0.2)
+ concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
+ logger (>= 1.4.2)
minitest (>= 5.1)
- mutex_m
- tzinfo (~> 2.0)
+ securerandom (>= 0.3)
+ tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
aes_key_wrap (1.1.0)
@@ -100,8 +97,8 @@ GEM
attr_required (1.0.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
- aws-partitions (1.997.0)
- aws-sdk-core (3.211.0)
+ aws-partitions (1.1001.0)
+ aws-sdk-core (3.212.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -109,7 +106,7 @@ GEM
aws-sdk-kms (1.95.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sigv4 (~> 1.5)
- aws-sdk-s3 (1.169.0)
+ aws-sdk-s3 (1.170.1)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
@@ -120,6 +117,7 @@ GEM
base64 (0.2.0)
bcp47_spec (0.2.1)
bcrypt (3.1.20)
+ benchmark (0.4.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
rack (>= 0.9.0)
@@ -416,7 +414,7 @@ GEM
msgpack (1.7.3)
multi_json (1.15.0)
mutex_m (0.2.0)
- net-http (0.4.1)
+ net-http (0.5.0)
uri
net-imap (0.5.0)
date
@@ -613,20 +611,20 @@ GEM
rackup (1.0.0)
rack (< 3)
webrick
- rails (7.1.4.2)
- actioncable (= 7.1.4.2)
- actionmailbox (= 7.1.4.2)
- actionmailer (= 7.1.4.2)
- actionpack (= 7.1.4.2)
- actiontext (= 7.1.4.2)
- actionview (= 7.1.4.2)
- activejob (= 7.1.4.2)
- activemodel (= 7.1.4.2)
- activerecord (= 7.1.4.2)
- activestorage (= 7.1.4.2)
- activesupport (= 7.1.4.2)
+ rails (7.2.2)
+ actioncable (= 7.2.2)
+ actionmailbox (= 7.2.2)
+ actionmailer (= 7.2.2)
+ actionpack (= 7.2.2)
+ actiontext (= 7.2.2)
+ actionview (= 7.2.2)
+ activejob (= 7.2.2)
+ activemodel (= 7.2.2)
+ activerecord (= 7.2.2)
+ activestorage (= 7.2.2)
+ activesupport (= 7.2.2)
bundler (>= 1.15.0)
- railties (= 7.1.4.2)
+ railties (= 7.2.2)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -641,10 +639,10 @@ GEM
rails-i18n (7.0.10)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (7.1.4.2)
- actionpack (= 7.1.4.2)
- activesupport (= 7.1.4.2)
- irb
+ railties (7.2.2)
+ actionpack (= 7.2.2)
+ activesupport (= 7.2.2)
+ irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
@@ -755,6 +753,7 @@ GEM
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
+ securerandom (0.3.2)
selenium-webdriver (4.26.0)
base64 (~> 0.2)
logger (~> 1.4)
@@ -796,7 +795,7 @@ GEM
stoplight (4.1.0)
redlock (~> 1.0)
stringio (3.1.1)
- strong_migrations (2.0.2)
+ strong_migrations (2.1.0)
activerecord (>= 6.1)
swd (1.3.0)
activesupport (>= 3)
@@ -811,7 +810,7 @@ GEM
test-prof (1.4.2)
thor (1.3.2)
tilt (2.4.0)
- timeout (0.4.1)
+ timeout (0.4.2)
tpm-key_attestation (0.12.1)
bindata (~> 2.4)
openssl (> 2.0)
@@ -838,6 +837,7 @@ GEM
unf_ext (0.0.9.1)
unicode-display_width (2.6.0)
uri (0.13.1)
+ useragent (0.16.10)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
@@ -946,7 +946,8 @@ DEPENDENCIES
mario-redis-lock (~> 1.2)
memory_profiler
mime-types (~> 3.6.0)
- net-http (~> 0.4.0)
+ mutex_m
+ net-http (~> 0.5.0)
net-ldap (~> 0.18)
nokogiri (~> 1.15)
oj (~> 3.14)
@@ -984,7 +985,7 @@ DEPENDENCIES
rack-attack (~> 6.6)
rack-cors (~> 2.0)
rack-test (~> 2.1)
- rails (~> 7.1.1)
+ rails (~> 7.2.0)
rails-controller-testing (~> 1.0)
rails-i18n (~> 7.0)
rdf-normalize (~> 0.5)
diff --git a/Rakefile b/Rakefile
index e51cf0e17e..488c551fee 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,6 +3,6 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
-require File.expand_path('config/application', __dir__)
+require_relative 'config/application'
Rails.application.load_tasks
diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb
index faa0a061a6..fe822d8c99 100644
--- a/app/controllers/admin/email_domain_blocks_controller.rb
+++ b/app/controllers/admin/email_domain_blocks_controller.rb
@@ -5,7 +5,7 @@ module Admin
def index
authorize :email_domain_block, :index?
- @email_domain_blocks = EmailDomainBlock.where(parent_id: nil).includes(:children).order(id: :desc).page(params[:page])
+ @email_domain_blocks = EmailDomainBlock.parents.includes(:children).order(id: :desc).page(params[:page])
@form = Form::EmailDomainBlockBatch.new
end
diff --git a/app/controllers/admin/invites_controller.rb b/app/controllers/admin/invites_controller.rb
index dabfe97655..614e2a32d0 100644
--- a/app/controllers/admin/invites_controller.rb
+++ b/app/controllers/admin/invites_controller.rb
@@ -32,7 +32,7 @@ module Admin
def deactivate_all
authorize :invite, :deactivate_all?
- Invite.available.in_batches.update_all(expires_at: Time.now.utc)
+ Invite.available.in_batches.touch_all(:expires_at)
redirect_to admin_invites_path
end
diff --git a/app/controllers/admin/relays_controller.rb b/app/controllers/admin/relays_controller.rb
index c893802159..f05255adb6 100644
--- a/app/controllers/admin/relays_controller.rb
+++ b/app/controllers/admin/relays_controller.rb
@@ -21,6 +21,7 @@ module Admin
@relay = Relay.new(resource_params)
if @relay.save
+ log_action :create, @relay
@relay.enable!
redirect_to admin_relays_path
else
@@ -31,18 +32,21 @@ module Admin
def destroy
authorize :relay, :update?
@relay.destroy
+ log_action :destroy, @relay
redirect_to admin_relays_path
end
def enable
authorize :relay, :update?
@relay.enable!
+ log_action :enable, @relay
redirect_to admin_relays_path
end
def disable
authorize :relay, :update?
@relay.disable!
+ log_action :disable, @relay
redirect_to admin_relays_path
end
diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb
index 54a99dec29..07381cc6ad 100644
--- a/app/helpers/admin/action_logs_helper.rb
+++ b/app/helpers/admin/action_logs_helper.rb
@@ -35,6 +35,8 @@ module Admin::ActionLogsHelper
else
I18n.t('admin.action_logs.deleted_account')
end
+ when 'Relay'
+ link_to log.human_identifier, admin_relays_path
end
end
diff --git a/app/helpers/registration_helper.rb b/app/helpers/registration_helper.rb
index c3db46c027..f387a48309 100644
--- a/app/helpers/registration_helper.rb
+++ b/app/helpers/registration_helper.rb
@@ -18,6 +18,6 @@ module RegistrationHelper
end
def ip_blocked?(remote_ip)
- IpBlock.where(severity: :sign_up_block).exists?(['ip >>= ?', remote_ip.to_s])
+ IpBlock.severity_sign_up_block.containing(remote_ip.to_s).exists?
end
end
diff --git a/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx b/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx
index 0e4c78f639..4b59b89737 100644
--- a/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx
+++ b/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx
@@ -7,16 +7,17 @@ export const MostUsedHashtag: React.FC<{
}> = ({ data }) => {
const hashtag = data[0];
- if (!hashtag) {
- return (
-
- );
- }
-
return (
- #{hashtag.name}
+ {hashtag ? (
+ <>#{hashtag.name}>
+ ) : (
+
+ )}
(
),
diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx
index a8f40a31d0..7d651f2ca6 100644
--- a/app/javascript/mastodon/features/follow_requests/index.jsx
+++ b/app/javascript/mastodon/features/follow_requests/index.jsx
@@ -68,7 +68,7 @@ class FollowRequests extends ImmutablePureComponent {
);
return (
-
+
{
+ handleHotkeyBack = e => {
+ e.preventDefault();
+
const { history } = this.props;
if (history.location?.state?.fromMastodon) {
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 97d4dc4b4c..06d86a0e85 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -154,7 +154,7 @@
"compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, бо ён не публічны. Толькі публічныя допісы можна знайсці па хэштэгу.",
"compose_form.lock_disclaimer": "Ваш уліковы запіс не {locked}. Усе могуць падпісацца на вас, каб бачыць допісы толькі для падпісчыкаў.",
"compose_form.lock_disclaimer.lock": "закрыты",
- "compose_form.placeholder": "Што здарылася?",
+ "compose_form.placeholder": "Што ў вас новага?",
"compose_form.poll.duration": "Працягласць апытання",
"compose_form.poll.multiple": "Множны выбар",
"compose_form.poll.option_placeholder": "Варыянт {number}",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 675f7a203e..ca83af9215 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -87,11 +87,29 @@
"alert.unexpected.title": "Wps!",
"alt_text_badge.title": "Testun Amgen",
"announcement.announcement": "Cyhoeddiad",
+ "annual_report.summary.archetype.booster": "Y hyrwyddwr",
+ "annual_report.summary.archetype.lurker": "Yr arsylwr",
+ "annual_report.summary.archetype.oracle": "Yr oracl",
+ "annual_report.summary.archetype.pollster": "Yr arholwr",
+ "annual_report.summary.archetype.replier": "Y sbardunwr",
+ "annual_report.summary.followers.followers": "dilynwyr",
+ "annual_report.summary.followers.total": "{count} cyfanswm",
+ "annual_report.summary.here_it_is": "Dyma eich {year} yn gryno:",
+ "annual_report.summary.highlighted_post.by_favourites": "postiad wedi'i ffefrynu fwyaf",
+ "annual_report.summary.highlighted_post.by_reblogs": "postiad wedi'i hybu fwyaf",
+ "annual_report.summary.highlighted_post.by_replies": "postiad gyda'r ymatebion mwyaf",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "ap a ddefnyddiwyd fwyaf",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashnod a ddefnyddiwyd fwyaf",
+ "annual_report.summary.new_posts.new_posts": "postiadau newydd",
+ "annual_report.summary.percentile.text": "Rydych chi yn y mwyaf o ddefnyddwyr Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Ni fyddwn yn dweud wrth Bernie.",
+ "annual_report.summary.thanks": "Diolch am fod yn rhan o Mastodon!",
"attachments_list.unprocessed": "(heb eu prosesu)",
"audio.hide": "Cuddio sain",
"block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystro mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.",
"block_modal.show_less": "Dangos llai",
- "block_modal.show_more": "Dangos mwy",
+ "block_modal.show_more": "Dangos rhagor",
"block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.",
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
"block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
@@ -163,9 +181,9 @@
"compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis",
"compose_form.poll.type": "Arddull",
"compose_form.publish": "Postiad",
- "compose_form.publish_form": "Cyhoeddi",
+ "compose_form.publish_form": "Postiad newydd",
"compose_form.reply": "Ateb",
- "compose_form.save_changes": "Diweddariad",
+ "compose_form.save_changes": "Diweddaru",
"compose_form.spoiler.marked": "Dileu rhybudd cynnwys",
"compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys",
"compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "Adroddodd {name} {target}",
"notification.admin.sign_up": "Cofrestrodd {name}",
"notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}",
+ "notification.annual_report.message": "Mae eich #Wrapstodon {year} yn aros i chi! Gwelwch eich uchafbwyntiau ac amseroedd i'w cofio o'r flwyddyn hon ar Mastodon!",
+ "notification.annual_report.view": "Gweld #Wrapstodon",
"notification.favourite": "Ffafriodd {name} eich postiad",
"notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad",
"notification.follow": "Dilynodd {name} chi",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 5531576447..927d0a7cb8 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Alt text",
"announcement.announcement": "Bekendtgørelse",
+ "annual_report.summary.archetype.booster": "Cool-hunter",
+ "annual_report.summary.archetype.lurker": "Lurker",
+ "annual_report.summary.archetype.oracle": "Oracle",
+ "annual_report.summary.archetype.pollster": "Pollster",
+ "annual_report.summary.archetype.replier": "Social butterfly",
+ "annual_report.summary.followers.followers": "følgere",
+ "annual_report.summary.followers.total": "{count} i alt",
+ "annual_report.summary.here_it_is": "Her er {year} i sammendrag:",
+ "annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerede indlæg",
+ "annual_report.summary.highlighted_post.by_reblogs": "mest boostede indlæg",
+ "annual_report.summary.highlighted_post.by_replies": "indlæg med flest svar",
+ "annual_report.summary.highlighted_post.possessive": "{name}s",
+ "annual_report.summary.most_used_app.most_used_app": "mest benyttede app",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag",
+ "annual_report.summary.new_posts.new_posts": "nye indlæg",
+ "annual_report.summary.percentile.text": "Det betyder, at man er i topaf Mastodon-brugere.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Vi fortæller det ikke til Bernie.",
+ "annual_report.summary.thanks": "Tak for at være en del af Mastodon!",
"attachments_list.unprocessed": "(ubehandlet)",
"audio.hide": "Skjul lyd",
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
@@ -158,6 +176,7 @@
"compose_form.poll.duration": "Afstemningens varighed",
"compose_form.poll.multiple": "Multivalg",
"compose_form.poll.option_placeholder": "Valgmulighed {number}",
+ "compose_form.poll.single": "Enkeltvalg",
"compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype",
"compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype",
"compose_form.poll.type": "Stil",
@@ -507,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} anmeldte {target}",
"notification.admin.sign_up": "{name} tilmeldte sig",
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig",
+ "notification.annual_report.message": "{year} #Wrapstodon venter! Afslør årets højdepunkter og mindeværdige øjeblikke på Mastodon!",
+ "notification.annual_report.view": "Vis #Wrapstodon",
"notification.favourite": "{name} favoritmarkerede dit indlæg",
"notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit",
"notification.follow": "{name} begyndte at følge dig",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index d048a191e3..e7679a363c 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -525,15 +525,15 @@
"notification.admin.report_statuses": "{name} meldete {target} wegen {category}",
"notification.admin.report_statuses_other": "{name} meldete {target}",
"notification.admin.sign_up": "{name} registrierte sich",
- "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} registrierten sich",
+ "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} registrierten sich",
"notification.annual_report.message": "Dein {year} #Wrapstodon erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!",
"notification.annual_report.view": "#Wrapstodon ansehen",
"notification.favourite": "{name} favorisierte deinen Beitrag",
- "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} favorisierten deinen Beitrag",
+ "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deinen Beitrag",
"notification.follow": "{name} folgt dir",
- "notification.follow.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} folgen dir",
+ "notification.follow.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} folgen dir",
"notification.follow_request": "{name} möchte dir folgen",
- "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} möchten dir folgen",
+ "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} möchten dir folgen",
"notification.label.mention": "Erwähnung",
"notification.label.private_mention": "Private Erwähnung",
"notification.label.private_reply": "Private Antwort",
@@ -552,7 +552,7 @@
"notification.own_poll": "Deine Umfrage ist beendet",
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
"notification.reblog": "{name} teilte deinen Beitrag",
- "notification.reblog.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} teilten deinen Beitrag",
+ "notification.reblog.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} teilten deinen Beitrag",
"notification.relationships_severance_event": "Verbindungen mit {name} verloren",
"notification.relationships_severance_event.account_suspension": "Ein Admin von {from} hat {target} gesperrt. Du wirst von diesem Profil keine Updates mehr erhalten und auch nicht mit ihm interagieren können.",
"notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 40517f8340..2920968e6a 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Ουπς!",
"alt_text_badge.title": "Εναλλακτικό κείμενο",
"announcement.announcement": "Ανακοίνωση",
+ "annual_report.summary.archetype.booster": "Ο κυνηγός των φοβερών",
+ "annual_report.summary.archetype.lurker": "Ο διακριτικός",
+ "annual_report.summary.archetype.oracle": "Η Πυθία",
+ "annual_report.summary.archetype.pollster": "Ο δημοσκόπος",
+ "annual_report.summary.archetype.replier": "Η κοινωνική πεταλούδα",
+ "annual_report.summary.followers.followers": "ακόλουθοι",
+ "annual_report.summary.followers.total": "{count} συνολικά",
+ "annual_report.summary.here_it_is": "Εδώ είναι το {year} σου σε ανασκόπηση:",
+ "annual_report.summary.highlighted_post.by_favourites": "πιο αγαπημένη ανάρτηση",
+ "annual_report.summary.highlighted_post.by_reblogs": "πιο ενισχυμένη ανάρτηση",
+ "annual_report.summary.highlighted_post.by_replies": "ανάρτηση με τις περισσότερες απαντήσεις",
+ "annual_report.summary.highlighted_post.possessive": "του χρήστη {name}",
+ "annual_report.summary.most_used_app.most_used_app": "πιο χρησιμοποιημένη εφαρμογή",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "πιο χρησιμοποιημένη ετικέτα",
+ "annual_report.summary.new_posts.new_posts": "νέες αναρτήσεις",
+ "annual_report.summary.percentile.text": "Αυτό σε βάζει στην κορυφή του των χρηστών του Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Δεν θα το πούμε στον Bernie.",
+ "annual_report.summary.thanks": "Ευχαριστούμε που συμμετέχεις στο Mastodon!",
"attachments_list.unprocessed": "(μη επεξεργασμένο)",
"audio.hide": "Απόκρυψη αρχείου ήχου",
"block_modal.remote_users_caveat": "Θα ζητήσουμε από τον διακομιστή {domain} να σεβαστεί την απόφασή σου. Ωστόσο, η συμμόρφωση δεν είναι εγγυημένη δεδομένου ότι ορισμένοι διακομιστές ενδέχεται να χειρίζονται τους αποκλεισμούς διαφορετικά. Οι δημόσιες αναρτήσεις ενδέχεται να είναι ορατές σε μη συνδεδεμένους χρήστες.",
@@ -158,6 +176,7 @@
"compose_form.poll.duration": "Διάρκεια δημοσκόπησης",
"compose_form.poll.multiple": "Πολλαπλή επιλογή",
"compose_form.poll.option_placeholder": "Επιλογή {number}",
+ "compose_form.poll.single": "Μονή επιλογή",
"compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές",
"compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή",
"compose_form.poll.type": "Στυλ",
@@ -196,6 +215,7 @@
"confirmations.unfollow.title": "Άρση ακολούθησης;",
"content_warning.hide": "Απόκρυψη ανάρτησης",
"content_warning.show": "Εμφάνιση ούτως ή άλλως",
+ "content_warning.show_more": "Εμφάνιση περισσότερων",
"conversation.delete": "Διαγραφή συζήτησης",
"conversation.mark_as_read": "Σήμανση ως αναγνωσμένο",
"conversation.open": "Προβολή συνομιλίας",
@@ -304,6 +324,7 @@
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
+ "filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”",
"filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις",
"filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις",
"firehose.all": "Όλα",
@@ -383,9 +404,10 @@
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
"interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.",
- "interaction_modal.login.action": "Take me home\nΠήγαινέ με στην αρχική σελίδα",
+ "interaction_modal.description.vote": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σ' αυτή την ανάρτηση.",
+ "interaction_modal.login.action": "Πήγαινέ με στην αρχική σελίδα",
"interaction_modal.login.prompt": "Τομέας του οικιακού σου διακομιστή, πχ. mastodon.social",
- "interaction_modal.no_account_yet": "Not on Mastodon?\nΔεν είστε στο Mastodon;",
+ "interaction_modal.no_account_yet": "Δεν είστε στο Mastodon;",
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
"interaction_modal.sign_in": "Δεν είσαι συνδεδεμένος σε αυτόν το διακομιστή. Πού φιλοξενείται ο λογαριασμός σου;",
@@ -394,6 +416,7 @@
"interaction_modal.title.follow": "Ακολούθησε {name}",
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
"interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",
+ "interaction_modal.title.vote": "Ψήφισε στη δημοσκόπηση του χρήστη {name}",
"intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}",
"intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}",
"intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}",
@@ -503,9 +526,12 @@
"notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}",
"notification.admin.sign_up": "{name} έχει εγγραφεί",
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
+ "notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
+ "notification.annual_report.view": "Προβολή #Wrapstodon",
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
"notification.favourite.name_and_others_with_link": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} αγάπησαν την ανάρτησή σου",
"notification.follow": "Ο/Η {name} σε ακολούθησε",
+ "notification.follow.name_and_others": "Ο χρήστης {name} και {count, plural, one {# ακόμη} other {# ακόμη}} σε ακολούθησαν",
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
"notification.label.mention": "Επισήμανση",
@@ -513,6 +539,7 @@
"notification.label.private_reply": "Ιδιωτική απάντηση",
"notification.label.reply": "Απάντηση",
"notification.mention": "Επισήμανση",
+ "notification.mentioned_you": "Ο χρήστης {name} σε επισήμανε",
"notification.moderation-warning.learn_more": "Μάθε περισσότερα",
"notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού",
"notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.",
@@ -563,6 +590,7 @@
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
"notifications.column_settings.follow": "Νέοι ακόλουθοι:",
"notifications.column_settings.follow_request": "Νέο αίτημα ακολούθησης:",
+ "notifications.column_settings.group": "Ομάδα",
"notifications.column_settings.mention": "Επισημάνσεις:",
"notifications.column_settings.poll": "Αποτελέσματα δημοσκόπησης:",
"notifications.column_settings.push": "Ειδοποιήσεις Push",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index fd4376307a..d446539e5a 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -114,6 +114,7 @@
"annual_report.summary.highlighted_post.possessive": "{name}'s",
"annual_report.summary.most_used_app.most_used_app": "most used app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag",
+ "annual_report.summary.most_used_hashtag.none": "None",
"annual_report.summary.new_posts.new_posts": "new posts",
"annual_report.summary.percentile.text": "That puts you in the topof Mastodon users.",
"annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 6cfc94d139..757bb39866 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -87,6 +87,9 @@
"alert.unexpected.title": "Aj!",
"alt_text_badge.title": "Alt-teksto",
"announcement.announcement": "Anonco",
+ "annual_report.summary.archetype.replier": "La plej societema",
+ "annual_report.summary.followers.followers": "sekvantoj",
+ "annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj",
"annual_report.summary.new_posts.new_posts": "novaj afiŝoj",
"annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!",
"attachments_list.unprocessed": "(neprilaborita)",
@@ -510,6 +513,7 @@
"notification.admin.report_statuses_other": "{name} raportis {target}",
"notification.admin.sign_up": "{name} kreis konton",
"notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton",
+ "notification.annual_report.view": "Vidu #Wrapstodon",
"notification.favourite": "{name} stelumis vian afiŝon",
"notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon",
"notification.follow": "{name} eksekvis vin",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index b7e5b919af..9dc7b0d6c0 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -87,14 +87,23 @@
"alert.unexpected.title": "¡Epa!",
"alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anuncio",
+ "annual_report.summary.archetype.booster": "Corrió la voz",
+ "annual_report.summary.archetype.lurker": "El acechador",
+ "annual_report.summary.archetype.oracle": "El oráculo",
+ "annual_report.summary.archetype.pollster": "Estuvo consultando",
+ "annual_report.summary.archetype.replier": "Respondió un montón",
"annual_report.summary.followers.followers": "seguidores",
- "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
- "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
- "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
- "annual_report.summary.highlighted_post.possessive": "de {name}",
- "annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
- "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
- "annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
+ "annual_report.summary.followers.total": "{count} en total",
+ "annual_report.summary.here_it_is": "Acá está tu resumen de {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "el mensaje más veces marcado como favorito",
+ "annual_report.summary.highlighted_post.by_reblogs": "el mensaje que más adhesiones recibió",
+ "annual_report.summary.highlighted_post.by_replies": "el mensaje que más respuestas recibió",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "la aplicación más usada",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "la etiqueta más usada",
+ "annual_report.summary.new_posts.new_posts": "nuevos mensajes",
+ "annual_report.summary.percentile.text": "Eso te pone en la cimade los usuarios de Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
"attachments_list.unprocessed": "[sin procesar]",
"audio.hide": "Ocultar audio",
@@ -517,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} denunció a {target}",
"notification.admin.sign_up": "Se registró {name}",
"notification.admin.sign_up.name_and_others": "Se registraron {name} y {count, plural, one {# cuenta más} other {# cuentas más}}",
+ "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!",
+ "notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó tu mensaje como favorito",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito",
"notification.follow": "{name} te empezó a seguir",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index 40061d1cf2..4faa35e5c8 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -87,14 +87,23 @@
"alert.unexpected.title": "¡Ups!",
"alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anuncio",
+ "annual_report.summary.archetype.booster": "El cazador de tendencias",
+ "annual_report.summary.archetype.lurker": "El acechador",
+ "annual_report.summary.archetype.oracle": "El oráculo",
+ "annual_report.summary.archetype.pollster": "El encuestador",
+ "annual_report.summary.archetype.replier": "El más sociable",
"annual_report.summary.followers.followers": "seguidores",
+ "annual_report.summary.followers.total": "{count} en total",
"annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos",
"annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
"annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
"annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
+ "annual_report.summary.percentile.text": "Eso te pone en el topde usuarios de Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
"attachments_list.unprocessed": "(sin procesar)",
"audio.hide": "Ocultar audio",
@@ -517,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} reportó {target}",
"notification.admin.sign_up": "{name} se unio",
"notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} se registraron",
+ "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!",
+ "notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó como favorita tu publicación",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita",
"notification.follow": "{name} te empezó a seguir",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 2de5a4136a..d14b718016 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -87,14 +87,23 @@
"alert.unexpected.title": "¡Ups!",
"alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anuncio",
+ "annual_report.summary.archetype.booster": "El cazador de tendencias",
+ "annual_report.summary.archetype.lurker": "El acechador",
+ "annual_report.summary.archetype.oracle": "El oráculo",
+ "annual_report.summary.archetype.pollster": "El encuestador",
+ "annual_report.summary.archetype.replier": "El más sociable",
"annual_report.summary.followers.followers": "seguidores",
+ "annual_report.summary.followers.total": "{count} en total",
"annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos",
"annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
"annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
"annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
+ "annual_report.summary.percentile.text": "Eso te pone en el topde usuarios de Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
"attachments_list.unprocessed": "(sin procesar)",
"audio.hide": "Ocultar audio",
@@ -517,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} informó de {target}",
"notification.admin.sign_up": "{name} se registró",
"notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# más} other {# más}} se registraron",
+ "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!",
+ "notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó como favorita tu publicación",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita",
"notification.follow": "{name} te empezó a seguir",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index e15385725a..6b26ed84fd 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Annar tekstur",
"announcement.announcement": "Kunngerð",
+ "annual_report.summary.archetype.booster": "Kuli jagarin",
+ "annual_report.summary.archetype.lurker": "Lúrarin",
+ "annual_report.summary.archetype.oracle": "Oraklið",
+ "annual_report.summary.archetype.pollster": "Spyrjarin",
+ "annual_report.summary.archetype.replier": "Sosiali firvaldurin",
+ "annual_report.summary.followers.followers": "fylgjarar",
+ "annual_report.summary.followers.total": "{count} íalt",
+ "annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur",
+ "annual_report.summary.highlighted_post.by_reblogs": "oftast lyfti postur",
+ "annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum",
+ "annual_report.summary.highlighted_post.possessive": "hjá {name}",
+ "annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brúkta frámerki",
+ "annual_report.summary.new_posts.new_posts": "nýggir postar",
+ "annual_report.summary.percentile.text": "Tað fær teg í toppav Mastodon brúkarum.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Vit fara ikki at fortelja Bernie tað.",
+ "annual_report.summary.thanks": "Takk fyri at tú er partur av Mastodon!",
"attachments_list.unprocessed": "(óviðgjørt)",
"audio.hide": "Fjal ljóð",
"block_modal.remote_users_caveat": "Vit biðja ambætaran {domain} virða tína avgerð. Kortini er eingin vissa um samsvar, av tí at fleiri ambætarar handfara blokkar ymiskt. Almennir postar kunnu framvegis vera sjónligir fyri brúkarar, sum ikki eru innritaðir.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} meldaði {target}",
"notification.admin.sign_up": "{name} meldaði seg til",
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} teknaðu seg",
+ "notification.annual_report.message": "Títt {year} #Wrapstodon bíðar! Avdúka hæddarpunktini og minniligu løturnar á Mastodon!",
+ "notification.annual_report.view": "Sí #Wrapstodon",
"notification.favourite": "{name} dámdi postin hjá tær",
"notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær",
"notification.follow": "{name} fylgdi tær",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 06a7ac8ca4..23f444715b 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -97,6 +97,8 @@
"annual_report.summary.most_used_app.most_used_app": "app que mais usaches",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado",
"annual_report.summary.new_posts.new_posts": "novas publicacións",
+ "annual_report.summary.percentile.text": "Sitúante no top das usuarias de Mastodon.",
+ "annual_report.summary.thanks": "Grazas por ser parte de Mastodon!",
"attachments_list.unprocessed": "(sen procesar)",
"audio.hide": "Agochar audio",
"block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index ed08a9aba3..48ea869dd2 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "אופס!",
"alt_text_badge.title": "כיתוב חלופי",
"announcement.announcement": "הכרזה",
+ "annual_report.summary.archetype.booster": "ההד-וניסט(ית)",
+ "annual_report.summary.archetype.lurker": "השורץ.ת השקט.ה",
+ "annual_report.summary.archetype.oracle": "כבוד הרב.ה",
+ "annual_report.summary.archetype.pollster": "הסקרן.ית",
+ "annual_report.summary.archetype.replier": "הפרפר.ית החברתי.ת",
+ "annual_report.summary.followers.followers": "עוקבים",
+ "annual_report.summary.followers.total": "{count} בסך הכל",
+ "annual_report.summary.here_it_is": "והנה סיכום {year} שלך:",
+ "annual_report.summary.highlighted_post.by_favourites": "התות הכי מחובב",
+ "annual_report.summary.highlighted_post.by_reblogs": "התות הכי מהודהד",
+ "annual_report.summary.highlighted_post.by_replies": "התות עם מספר התשובות הגבוה ביותר",
+ "annual_report.summary.highlighted_post.possessive": "של {name}",
+ "annual_report.summary.most_used_app.most_used_app": "היישומון שהכי בשימוש",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "התג בשימוש הרב ביותר",
+ "annual_report.summary.new_posts.new_posts": "הודעות חדשות",
+ "annual_report.summary.percentile.text": "ממקם אותך באחוזון של משמשי מסטודון.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "לא נגלה לברני.",
+ "annual_report.summary.thanks": "תודה על היותך חלק ממסטודון!",
"attachments_list.unprocessed": "(לא מעובד)",
"audio.hide": "השתק",
"block_modal.remote_users_caveat": "אנו נבקש מהשרת {domain} לכבד את החלטתך. עם זאת, ציות למוסכמות איננו מובטח כיוון ששרתים מסויימים עשויים לטפל בחסימות בצורה אחרת. הודעות פומביות עדיין יהיו גלויות לעיני משתמשים שאינם מחוברים.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} דיווח.ה על {target}",
"notification.admin.sign_up": "{name} נרשמו",
"notification.admin.sign_up.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} נרשמו",
+ "notification.annual_report.message": "ה- #סיכומודון שלך לשנת {year} מחכה! גלו את רגעי השיא והזכרונות ממסטודון!",
+ "notification.annual_report.view": "לצפייה ב- #סיכומודון",
"notification.favourite": "הודעתך חובבה על ידי {name}",
"notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך",
"notification.follow": "{name} במעקב אחרייך",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 0933a7c256..cdc113d8d7 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Hoppá!",
"alt_text_badge.title": "Helyettesítő szöveg",
"announcement.announcement": "Közlemény",
+ "annual_report.summary.archetype.booster": "A cool-vadász",
+ "annual_report.summary.archetype.lurker": "A settenkedő",
+ "annual_report.summary.archetype.oracle": "Az orákulum",
+ "annual_report.summary.archetype.pollster": "A közvélemény-kutató",
+ "annual_report.summary.archetype.replier": "A társasági pillangó",
+ "annual_report.summary.followers.followers": "követő",
+ "annual_report.summary.followers.total": "{count} összesen",
+ "annual_report.summary.here_it_is": "Itt a {year}. év értékelése:",
+ "annual_report.summary.highlighted_post.by_favourites": "legkedvencebb bejegyzés",
+ "annual_report.summary.highlighted_post.by_reblogs": "legtöbbet megtolt bejegyzés",
+ "annual_report.summary.highlighted_post.by_replies": "bejegyzés a legtöbb válasszal",
+ "annual_report.summary.highlighted_post.possessive": "{name} fióktól",
+ "annual_report.summary.most_used_app.most_used_app": "legtöbbet használt app",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "legtöbbet használt hashtag",
+ "annual_report.summary.new_posts.new_posts": "új bejegyzés",
+ "annual_report.summary.percentile.text": "Ezzel acsúcs Mastodon felhasználó között vagy.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Nem mondjuk el Bernie-nek.",
+ "annual_report.summary.thanks": "Kösz, hogy a Mastodon része vagy!",
"attachments_list.unprocessed": "(feldolgozatlan)",
"audio.hide": "Hang elrejtése",
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} jelentette: {target}",
"notification.admin.sign_up": "{name} regisztrált",
"notification.admin.sign_up.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} regisztrált",
+ "notification.annual_report.message": "Vár a {year}. év #Wrapstodon jelentése! Fedd fel az éved jelentős eseményeit és emlékezetes pillanatait a Mastodonon!",
+ "notification.annual_report.view": "#Wrapstodon Megtekintése",
"notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet",
"notification.favourite.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a bejegyzésedet",
"notification.follow": "{name} követ téged",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index a692fb7fd3..bf179ea2f2 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -87,6 +87,20 @@
"alert.unexpected.title": "Oops!",
"alt_text_badge.title": "Testo alternativo",
"announcement.announcement": "Annuncio",
+ "annual_report.summary.archetype.oracle": "L'oracolo",
+ "annual_report.summary.followers.followers": "seguaci",
+ "annual_report.summary.followers.total": "{count} in totale",
+ "annual_report.summary.here_it_is": "Ecco il tuo {year} in sintesi:",
+ "annual_report.summary.highlighted_post.by_favourites": "il post più apprezzato",
+ "annual_report.summary.highlighted_post.by_reblogs": "il post più condiviso",
+ "annual_report.summary.highlighted_post.by_replies": "il post con più risposte",
+ "annual_report.summary.highlighted_post.possessive": "di {name}",
+ "annual_report.summary.most_used_app.most_used_app": "l'app più utilizzata",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'hashtag più usato",
+ "annual_report.summary.new_posts.new_posts": "nuovi post",
+ "annual_report.summary.percentile.text": "Questo ti colloca tra ildei migliori utenti Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Non lo diremo a Bernie.",
+ "annual_report.summary.thanks": "Grazie per far parte di Mastodon!",
"attachments_list.unprocessed": "(non elaborato)",
"audio.hide": "Nascondi audio",
"block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.",
@@ -508,6 +522,8 @@
"notification.admin.report_statuses_other": "{name} ha segnalato {target}",
"notification.admin.sign_up": "{name} si è iscritto",
"notification.admin.sign_up.name_and_others": "Si sono iscritti: {name} e {count, plural, one {# altro utente} other {altri # utenti}}",
+ "notification.annual_report.message": "Il tuo #Wrapstodon {year} ti aspetta! Scopri i momenti salienti e memorabili del tuo anno su Mastodon!",
+ "notification.annual_report.view": "Visualizza #Wrapstodon",
"notification.favourite": "{name} ha aggiunto il tuo post ai preferiti",
"notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti",
"notification.follow": "{name} ha iniziato a seguirti",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 3c64e72737..4f29071894 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -99,6 +99,24 @@
"alert.unexpected.title": "エラー!",
"alt_text_badge.title": "代替テキスト",
"announcement.announcement": "お知らせ",
+ "annual_report.summary.archetype.booster": "トレンドハンター",
+ "annual_report.summary.archetype.lurker": "ROM専",
+ "annual_report.summary.archetype.oracle": "予言者",
+ "annual_report.summary.archetype.pollster": "調査員",
+ "annual_report.summary.archetype.replier": "社交家",
+ "annual_report.summary.followers.followers": "フォロワー",
+ "annual_report.summary.followers.total": "合計{count}",
+ "annual_report.summary.here_it_is": "こちらがあなたの{year}年の振り返りです",
+ "annual_report.summary.highlighted_post.by_favourites": "最もお気に入りされた投稿",
+ "annual_report.summary.highlighted_post.by_reblogs": "最もブーストされた投稿",
+ "annual_report.summary.highlighted_post.by_replies": "最も返信が多かった投稿",
+ "annual_report.summary.highlighted_post.possessive": "{name}の",
+ "annual_report.summary.most_used_app.most_used_app": "最も使用されているアプリ",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "最も使用されたハッシュタグ",
+ "annual_report.summary.new_posts.new_posts": "新しい投稿",
+ "annual_report.summary.percentile.text": "それにより、あなたは上位に位置しています。Mastodonユーザーの中で。",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "バー二ーには秘密にしておくよ。",
+ "annual_report.summary.thanks": "Mastodonの一員になってくれてありがとう!",
"antennas.account.add": "アンテナに追加",
"antennas.account.remove": "アンテナから外す",
"antennas.accounts": "{count} のアカウント",
@@ -612,6 +630,8 @@
"notification.admin.report_statuses_other": "{name}さんが{target}さんを通報しました",
"notification.admin.sign_up": "{name}さんがサインアップしました",
"notification.admin.sign_up.name_and_others": "{name}さんとほか{count, plural, other {#人}}がサインアップしました",
+ "notification.annual_report.message": "「あなたの{year}年の#Wrapstodonが待っています!Mastodonであなたの年のハイライトや思い出の瞬間を公開しましょう!」と訳せます。",
+ "notification.annual_report.view": "#Wrapstodon を表示",
"notification.emoji_reaction": "{name}さんがあなたの投稿に絵文字をつけました",
"notification.emoji_reaction.name_and_others_with_link": "{name}さんと{count, plural, other {他#名}}があなたの投稿に絵文字をつけました",
"notification.favourite": "{name}さんがお気に入りしました",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index dbdb5062cf..b5c8d4bd21 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "앗!",
"alt_text_badge.title": "대체 문구",
"announcement.announcement": "공지사항",
+ "annual_report.summary.archetype.booster": "연쇄부스트마",
+ "annual_report.summary.archetype.lurker": "은둔자",
+ "annual_report.summary.archetype.oracle": "예언자",
+ "annual_report.summary.archetype.pollster": "여론조사원",
+ "annual_report.summary.archetype.replier": "인싸",
+ "annual_report.summary.followers.followers": "팔로워",
+ "annual_report.summary.followers.total": "총 {count}",
+ "annual_report.summary.here_it_is": "{year}년 결산입니다:",
+ "annual_report.summary.highlighted_post.by_favourites": "가장 많은 좋아요를 받은 게시물",
+ "annual_report.summary.highlighted_post.by_reblogs": "가장 많이 부스트된 게시물",
+ "annual_report.summary.highlighted_post.by_replies": "가장 많은 답글을 받은 게시물",
+ "annual_report.summary.highlighted_post.possessive": "{name} 님의",
+ "annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그",
+ "annual_report.summary.new_posts.new_posts": "새 게시물",
+ "annual_report.summary.percentile.text": "마스토돈 사용자의 상위입니다.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "엄마한테 말 안 할게요.",
+ "annual_report.summary.thanks": "마스토돈과 함께 해주셔서 감사합니다!",
"attachments_list.unprocessed": "(처리 안 됨)",
"audio.hide": "소리 숨기기",
"block_modal.remote_users_caveat": "우리는 {domain} 서버가 당신의 결정을 존중해 주길 부탁할 것입니다. 하지만 몇몇 서버는 차단을 다르게 취급할 수 있기 때문에 규정이 준수되는 것을 보장할 수는 없습니다. 공개 게시물은 로그인 하지 않은 사용자들에게 여전히 보여질 수 있습니다.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다",
"notification.admin.sign_up": "{name} 님이 가입했습니다",
"notification.admin.sign_up.name_and_others": "{name} 외 {count, plural, other {# 명}}이 가입했습니다",
+ "notification.annual_report.message": "{year} #Wrapstodon 이 기다리고 있습니다! 올 해 마스토돈에서 있었던 최고의 순간과 기억들을 열어보세요!",
+ "notification.annual_report.view": "#Wrapstodon 보기",
"notification.favourite": "{name} 님이 내 게시물을 좋아합니다",
"notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다",
"notification.follow": "{name} 님이 나를 팔로우했습니다",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index a4f2e27401..a06d259be2 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -85,7 +85,11 @@
"alert.rate_limited.title": "Limite de tentativas",
"alert.unexpected.message": "Ocorreu um erro inesperado.",
"alert.unexpected.title": "Bolas!",
+ "alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anúncio",
+ "annual_report.summary.followers.total": "{count} total",
+ "annual_report.summary.here_it_is": "Aqui está o seu {year} em revisão:",
+ "annual_report.summary.new_posts.new_posts": "novas publicações",
"attachments_list.unprocessed": "(não processado)",
"audio.hide": "Ocultar áudio",
"block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 9d937939a9..f5617550e1 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -40,7 +40,7 @@
"account.follows.empty": "Этот пользователь пока ни на кого не подписался.",
"account.go_to_profile": "Перейти к профилю",
"account.hide_reblogs": "Скрыть продвижения от @{name}",
- "account.in_memoriam": "В Памяти.",
+ "account.in_memoriam": "Вечная память.",
"account.joined_short": "Присоединился",
"account.languages": "Изменить языки подписки",
"account.link_verified_on": "Владение этой ссылкой было проверено {date}",
@@ -62,13 +62,13 @@
"account.requested_follow": "{name} отправил(а) вам запрос на подписку",
"account.share": "Поделиться профилем @{name}",
"account.show_reblogs": "Показывать продвижения от @{name}",
- "account.statuses_counter": "{count, plural, one {# пост} few {# поста} many {# постов} other {# постов}}",
+ "account.statuses_counter": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
"account.unblock": "Разблокировать @{name}",
"account.unblock_domain": "Разблокировать {domain}",
"account.unblock_short": "Разблокировать",
"account.unendorse": "Не рекомендовать в профиле",
"account.unfollow": "Отписаться",
- "account.unmute": "Убрать {name} из игнорируемых",
+ "account.unmute": "Перестать игнорировать @{name}",
"account.unmute_notifications_short": "Включить уведомления",
"account.unmute_short": "Не игнорировать",
"account_note.placeholder": "Текст заметки",
@@ -87,6 +87,20 @@
"alert.unexpected.title": "Ой!",
"alt_text_badge.title": "Альтернативный текст",
"announcement.announcement": "Объявление",
+ "annual_report.summary.archetype.booster": "Репостер",
+ "annual_report.summary.archetype.lurker": "Молчун",
+ "annual_report.summary.archetype.pollster": "Опросчик",
+ "annual_report.summary.archetype.replier": "Душа компании",
+ "annual_report.summary.followers.followers": "подписчиков",
+ "annual_report.summary.here_it_is": "Вот ваши итоги {year} года:",
+ "annual_report.summary.highlighted_post.by_favourites": "пост с наибольшим количеством звёздочек",
+ "annual_report.summary.highlighted_post.by_reblogs": "пост с наибольшим количеством продвижений",
+ "annual_report.summary.highlighted_post.by_replies": "пост с наибольшим количеством ответов",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "наиболее часто используемое приложение",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "наиболее часто используемый хэштег",
+ "annual_report.summary.new_posts.new_posts": "новых постов",
+ "annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
"attachments_list.unprocessed": "(не обработан)",
"audio.hide": "Скрыть аудио",
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение. Однако, соблюдение требований не гарантировано, поскольку некоторые серверы могут работать с блокировками по-разному. Публичные записи по-прежнему могут быть видны неавторизованным пользователям.",
@@ -146,10 +160,10 @@
"community.column_settings.remote_only": "Только удалённые",
"compose.language.change": "Сменить язык",
"compose.language.search": "Поиск языков...",
- "compose.published.body": "Запись опубликована.",
+ "compose.published.body": "Пост опубликован.",
"compose.published.open": "Открыть",
- "compose.saved.body": "Запись сохранена.",
- "compose_form.direct_message_warning_learn_more": "Подробнее",
+ "compose.saved.body": "Пост отредактирован.",
+ "compose_form.direct_message_warning_learn_more": "Узнать больше",
"compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь конфиденциальной информацией через Mastodon.",
"compose_form.hashtag_warning": "Этот пост не будет виден ни под одним из хэштегов, так как он не публичный. Только публичные посты можно найти по хэштегу.",
"compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.",
@@ -161,14 +175,14 @@
"compose_form.poll.single": "Один вариант ответа",
"compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов",
"compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа",
- "compose_form.poll.type": "Стиль",
+ "compose_form.poll.type": "Тип",
"compose_form.publish": "Опубликовать",
"compose_form.publish_form": "Опубликовать",
"compose_form.reply": "Ответить",
"compose_form.save_changes": "Сохранить",
"compose_form.spoiler.marked": "Текст скрыт за предупреждением",
"compose_form.spoiler.unmarked": "Текст не скрыт",
- "compose_form.spoiler_placeholder": "Предупреждение о контенте (опционально)",
+ "compose_form.spoiler_placeholder": "Предупреждение о содержимом (необязательно)",
"confirmation_modal.cancel": "Отмена",
"confirmations.block.confirm": "Заблокировать",
"confirmations.delete.confirm": "Удалить",
@@ -178,17 +192,17 @@
"confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?",
"confirmations.delete_list.title": "Удалить список?",
"confirmations.discard_edit_media.confirm": "Отменить",
- "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?",
+ "confirmations.discard_edit_media.message": "У вас имеются несохранённые изменения превью и описания медиафайла, отменить их?",
"confirmations.edit.confirm": "Редактировать",
- "confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?",
- "confirmations.edit.title": "Перепишем сообщение?",
+ "confirmations.edit.message": "При редактировании, текст набираемого поста будет очищен. Продолжить?",
+ "confirmations.edit.title": "Переписать сообщение?",
"confirmations.logout.confirm": "Выйти",
"confirmations.logout.message": "Вы уверены, что хотите выйти?",
"confirmations.logout.title": "Выйти?",
"confirmations.mute.confirm": "Игнорировать",
"confirmations.redraft.confirm": "Удалить и исправить",
- "confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут удалены.",
- "confirmations.redraft.title": "Удалим и исправим пост?",
+ "confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут потеряны.",
+ "confirmations.redraft.title": "Создать пост заново?",
"confirmations.reply.confirm": "Ответить",
"confirmations.reply.message": "При ответе, текст набираемого поста будет очищен. Продолжить?",
"confirmations.reply.title": "Перепишем пост?",
@@ -243,7 +257,7 @@
"embed.preview": "Так это будет выглядеть:",
"emoji_button.activity": "Занятия",
"emoji_button.clear": "Очистить",
- "emoji_button.custom": "С этого узла",
+ "emoji_button.custom": "С этого сервера",
"emoji_button.flags": "Флаги",
"emoji_button.food": "Еда и напитки",
"emoji_button.label": "Вставить эмодзи",
@@ -350,12 +364,12 @@
"hashtag.column_settings.tag_mode.any": "Любой из списка",
"hashtag.column_settings.tag_mode.none": "Ни один из списка",
"hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки",
- "hashtag.counter_by_accounts": "{count, plural, one {{counter} участник} few {{counter} участников} many {{counter} участников} other {{counter} участников}}",
- "hashtag.counter_by_uses": "{count, plural, one {{counter} сообщение} few {{counter} сообщения} many {{counter} сообщения} other {{counter} сообщения}}",
- "hashtag.counter_by_uses_today": "{count, plural, one {{counter} сообщение} other {{counter} сообщений}} сегодня",
+ "hashtag.counter_by_accounts": "{count, plural, one {{counter} пользователь} few {{counter} пользователя} other {{counter} пользователей}}",
+ "hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
+ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня",
"hashtag.follow": "Подписаться на новые посты",
"hashtag.unfollow": "Отписаться",
- "hashtags.and_other": "...и {count, plural, other {# ещё}}",
+ "hashtags.and_other": "…и {count, plural, other {ещё #}}",
"hints.profiles.followers_may_be_missing": "Подписчики у этого профиля могут отсутствовать.",
"hints.profiles.follows_may_be_missing": "Фолловеры для этого профиля могут отсутствовать.",
"hints.profiles.posts_may_be_missing": "Некоторые сообщения из этого профиля могут отсутствовать.",
@@ -404,15 +418,15 @@
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
"keyboard_shortcuts.back": "перейти назад",
"keyboard_shortcuts.blocked": "чтобы открыть список заблокированных",
- "keyboard_shortcuts.boost": "Репостнуть",
+ "keyboard_shortcuts.boost": "продвинуть пост",
"keyboard_shortcuts.column": "фокус на одном из столбцов",
"keyboard_shortcuts.compose": "фокус на поле ввода",
"keyboard_shortcuts.description": "Описание",
"keyboard_shortcuts.direct": "чтобы открыть столбец личных упоминаний",
"keyboard_shortcuts.down": "вниз по списку",
"keyboard_shortcuts.enter": "открыть пост",
- "keyboard_shortcuts.favourite": "Добавить пост в избранное",
- "keyboard_shortcuts.favourites": "Открыть «Избранное»",
+ "keyboard_shortcuts.favourite": "добавить пост в избранное",
+ "keyboard_shortcuts.favourites": "открыть «Избранные»",
"keyboard_shortcuts.federated": "перейти к глобальной ленте",
"keyboard_shortcuts.heading": "Сочетания клавиш",
"keyboard_shortcuts.home": "перейти к домашней ленте",
@@ -420,7 +434,7 @@
"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": "открыть вложение",
@@ -432,7 +446,7 @@
"keyboard_shortcuts.spoilers": "показать/скрыть поле предупреждения о содержании",
"keyboard_shortcuts.start": "Перейти к разделу \"Начать\"",
"keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением",
- "keyboard_shortcuts.toggle_sensitivity": "Показать/скрыть медиафайлы",
+ "keyboard_shortcuts.toggle_sensitivity": "показать/скрыть медиафайлы",
"keyboard_shortcuts.toot": "начать писать новый пост",
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
"keyboard_shortcuts.up": "вверх по списку",
@@ -470,12 +484,12 @@
"mute_modal.show_options": "Показать опции",
"mute_modal.they_can_mention_and_follow": "Они могут упоминать и следить за вами, но вы не будете их видеть.",
"mute_modal.they_wont_know": "Они не будут знать, что их заглушили.",
- "mute_modal.title": "Заткнуть пользователя?",
+ "mute_modal.title": "Заглушить пользователя?",
"mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.",
"mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.",
"navigation_bar.about": "О проекте",
- "navigation_bar.administration": "Администрация",
- "navigation_bar.advanced_interface": "Включить многоколоночный интерфейс",
+ "navigation_bar.administration": "Администрирование",
+ "navigation_bar.advanced_interface": "Открыть в многоколоночном интерфейсе",
"navigation_bar.blocks": "Заблокированные пользователи",
"navigation_bar.bookmarks": "Закладки",
"navigation_bar.community_timeline": "Локальная лента",
@@ -501,27 +515,29 @@
"navigation_bar.search": "Поиск",
"navigation_bar.security": "Безопасность",
"not_signed_in_indicator.not_signed_in": "Вам нужно войти, чтобы иметь доступ к этому ресурсу.",
- "notification.admin.report": "{name} сообщил о {target}",
- "notification.admin.report_account": "{name} сообщил {count, plural, one {один пост} other {# постов}} от {target} для {category}",
- "notification.admin.report_account_other": "{name} сообщил {count, plural, one {одно сообщение} other {# сообщений}} от {target}",
- "notification.admin.report_statuses": "{name} сообщил {target} для {category}",
- "notification.admin.report_statuses_other": "{name} сообщает {target}",
- "notification.admin.sign_up": "{name} зарегистрирован",
- "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались",
+ "notification.admin.report": "{name} пожаловался на {target}",
+ "notification.admin.report_account": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target} по причине: {category}",
+ "notification.admin.report_account_other": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target}",
+ "notification.admin.report_statuses": "{name} пожаловался на {target} по причине: {category}",
+ "notification.admin.report_statuses_other": "{name} пожаловался на {target}",
+ "notification.admin.sign_up": "{name} зарегистрировался",
+ "notification.admin.sign_up.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} зарегистрировались",
+ "notification.annual_report.message": "#Wrapstodon за {year} год ждёт вас! Откройте для себя итоги и памятные моменты этого года в Mastodon!",
+ "notification.annual_report.view": "Перейти к #Wrapstodon",
"notification.favourite": "{name} добавил(а) ваш пост в избранное",
"notification.favourite.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваш пост в избранное",
"notification.follow": "{name} подписался (-лась) на вас",
- "notification.follow.name_and_others": "{name} и {count, plural, one {# other} few {# others} many {# others} other {# others}} подписались на вас",
+ "notification.follow.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} подписались на вас",
"notification.follow_request": "{name} отправил запрос на подписку",
"notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас",
"notification.label.mention": "Упоминание",
- "notification.label.private_mention": "Частное упоминание",
- "notification.label.private_reply": "Частный ответ",
- "notification.label.reply": "Ответить",
+ "notification.label.private_mention": "Личное упоминание",
+ "notification.label.private_reply": "Приватный ответ",
+ "notification.label.reply": "Ответ",
"notification.mention": "Упоминание",
- "notification.mentioned_you": "{name} упоминает вас",
+ "notification.mentioned_you": "{name} упомянул(а) вас",
"notification.moderation-warning.learn_more": "Узнать больше",
- "notification.moderation_warning": "Вы получили предупреждение от модерации",
+ "notification.moderation_warning": "Модераторы вынесли вам предупреждение",
"notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.",
"notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые из ваших сообщений были отмечены как деликатные.",
@@ -561,16 +577,16 @@
"notification_requests.view": "Просмотр уведомлений",
"notifications.clear": "Очистить уведомления",
"notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?",
- "notifications.clear_title": "Сбросить уведомления?",
+ "notifications.clear_title": "Очистить уведомления?",
"notifications.column_settings.admin.report": "Новые жалобы:",
"notifications.column_settings.admin.sign_up": "Новые регистрации:",
"notifications.column_settings.alert": "Уведомления на рабочем столе",
- "notifications.column_settings.favourite": "Избранные:",
- "notifications.column_settings.filter_bar.advanced": "Отображать все категории",
+ "notifications.column_settings.favourite": "Ваш пост добавили в избранные:",
+ "notifications.column_settings.filter_bar.advanced": "Показать все категории",
"notifications.column_settings.filter_bar.category": "Панель сортировки",
"notifications.column_settings.follow": "У вас новый подписчик:",
"notifications.column_settings.follow_request": "Новые запросы на подписку:",
- "notifications.column_settings.group": "Группа",
+ "notifications.column_settings.group": "Группировать",
"notifications.column_settings.mention": "Вас упомянули в посте:",
"notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:",
"notifications.column_settings.push": "Пуш-уведомления",
@@ -590,27 +606,27 @@
"notifications.filter.statuses": "Обновления от людей, на которых вы подписаны",
"notifications.grant_permission": "Предоставить разрешение.",
"notifications.group": "{count} уведомл.",
- "notifications.mark_as_read": "Отмечать все уведомления прочитанными",
+ "notifications.mark_as_read": "Отметить все уведомления прочитанными",
"notifications.permission_denied": "Уведомления на рабочем столе недоступны, так как вы запретили их отправку в браузере. Проверьте настройки для сайта, чтобы включить их обратно.",
"notifications.permission_denied_alert": "Уведомления на рабочем столе недоступны, так как вы ранее отклонили запрос на их отправку.",
"notifications.permission_required": "Чтобы включить уведомления на рабочем столе, необходимо разрешить их в браузере.",
- "notifications.policy.accept": "Принять",
- "notifications.policy.accept_hint": "Показать в уведомлениях",
- "notifications.policy.drop": "Игнорируем",
- "notifications.policy.drop_hint": "Отправить в пустоту, чтобы никогда больше не увидеть",
- "notifications.policy.filter": "Фильтр",
- "notifications.policy.filter_hint": "Отправка в папку фильтрованных уведомлений",
- "notifications.policy.filter_limited_accounts_hint": "Ограничено модераторами сервера",
- "notifications.policy.filter_limited_accounts_title": "Модерируемые аккаунты",
- "notifications.policy.filter_new_accounts.hint": "Создано в течение последних {days, plural, one {один день} few {# дней} many {# дней} other {# дня}}",
+ "notifications.policy.accept": "Принимать",
+ "notifications.policy.accept_hint": "Показывать в уведомлениях",
+ "notifications.policy.drop": "Игнорировать",
+ "notifications.policy.drop_hint": "Отправлять в пустоту, чтобы никогда больше не увидеть",
+ "notifications.policy.filter": "Фильтровать",
+ "notifications.policy.filter_hint": "Отправлять в раздел отфильтрованных уведомлений",
+ "notifications.policy.filter_limited_accounts_hint": "Ограниченные модераторами сервера",
+ "notifications.policy.filter_limited_accounts_title": "Модерируемые учётные записи",
+ "notifications.policy.filter_new_accounts.hint": "Созданные в течение {days, plural, one {последнего # дня} other {последних # дней}}",
"notifications.policy.filter_new_accounts_title": "Новые учётные записи",
"notifications.policy.filter_not_followers_hint": "Включая людей, которые подписаны на вас меньше чем {days, plural, one {# день} few {# дня} other {# дней}}",
"notifications.policy.filter_not_followers_title": "Люди, не подписанные на вас",
"notifications.policy.filter_not_following_hint": "Пока вы не одобрите их вручную",
"notifications.policy.filter_not_following_title": "Люди, на которых вы не подписаны",
- "notifications.policy.filter_private_mentions_hint": "Фильтруется, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя",
+ "notifications.policy.filter_private_mentions_hint": "Фильтруются, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя",
"notifications.policy.filter_private_mentions_title": "Нежелательные личные упоминания",
- "notifications.policy.title": "………Управлять уведомлениями от…",
+ "notifications.policy.title": "Управление уведомлениями",
"notifications_permission_banner.enable": "Включить уведомления",
"notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.",
"notifications_permission_banner.title": "Будьте в курсе происходящего",
@@ -679,7 +695,7 @@
"privacy_policy.title": "Политика конфиденциальности",
"recommended": "Рекомендуется",
"refresh": "Обновить",
- "regeneration_indicator.label": "Грузим…",
+ "regeneration_indicator.label": "Загрузка…",
"regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!",
"relative_time.days": "{number} д",
"relative_time.full.days": "{number, plural, one {# день} many {# дней} other {# дня}} назад",
@@ -692,15 +708,15 @@
"relative_time.minutes": "{number} мин",
"relative_time.seconds": "{number} с",
"relative_time.today": "сегодня",
- "reply_indicator.attachments": "{count, plural, one {# вложение} other {# вложения}}",
+ "reply_indicator.attachments": "{count, plural, one {# вложение} few {# вложения} other {# вложений}}",
"reply_indicator.cancel": "Отмена",
"reply_indicator.poll": "Опрос",
"report.block": "Заблокировать",
"report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.",
- "report.categories.legal": "Правовая информация",
+ "report.categories.legal": "Нарушение закона",
"report.categories.other": "Другое",
"report.categories.spam": "Спам",
- "report.categories.violation": "Содержимое нарушает одно или несколько правил узла",
+ "report.categories.violation": "Содержимое нарушает одно или несколько правил сервера",
"report.category.subtitle": "Выберите наиболее подходящее",
"report.category.title": "Расскажите нам, что не так с {type}",
"report.category.title_account": "этим профилем",
@@ -771,32 +787,32 @@
"server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)",
"server_banner.active_users": "активные пользователи",
"server_banner.administered_by": "Управляется:",
- "server_banner.is_one_of_many": "{domain} - это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в fediverse.",
+ "server_banner.is_one_of_many": "{domain} — это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в сети Fediverse.",
"server_banner.server_stats": "Статистика сервера:",
"sign_in_banner.create_account": "Зарегистрироваться",
- "sign_in_banner.follow_anyone": "Следите за любым человеком в федеральной вселенной и смотрите все в хронологическом порядке. Никаких алгоритмов, рекламы или клик бейта.",
- "sign_in_banner.mastodon_is": "Mastodon - лучший способ быть в курсе всего происходящего.",
+ "sign_in_banner.follow_anyone": "Подписывайтесь на кого угодно в федивёрсе и смотрите ленту в хронологическом порядке. Никаких алгоритмов, рекламы или кликбейта.",
+ "sign_in_banner.mastodon_is": "Mastodon — лучший способ быть в курсе всего происходящего.",
"sign_in_banner.sign_in": "Войти",
"sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь",
"status.admin_account": "Открыть интерфейс модератора для @{name}",
- "status.admin_domain": "Открыть интерфейс модерации {domain}",
+ "status.admin_domain": "Открыть интерфейс модератора для {domain}",
"status.admin_status": "Открыть этот пост в интерфейсе модератора",
"status.block": "Заблокировать @{name}",
- "status.bookmark": "Сохранить в закладки",
+ "status.bookmark": "Добавить в закладки",
"status.cancel_reblog_private": "Не продвигать",
"status.cannot_reblog": "Этот пост не может быть продвинут",
"status.continued_thread": "Продолжение темы",
"status.copy": "Скопировать ссылку на пост",
"status.delete": "Удалить",
"status.detailed_status": "Подробный просмотр обсуждения",
- "status.direct": "Лично упоминать @{name}",
- "status.direct_indicator": "Личные упоминания",
+ "status.direct": "Упомянуть @{name} лично",
+ "status.direct_indicator": "Личное упоминание",
"status.edit": "Изменить",
"status.edited": "Дата последнего изменения: {date}",
"status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}",
"status.embed": "Получить код для встраивания",
- "status.favourite": "Избранное",
- "status.favourites": "{count, plural, one {в избранном} other {в избранном}}",
+ "status.favourite": "Добавить в избранное",
+ "status.favourites": "{count, plural, other {в избранном}}",
"status.filter": "Фильтровать этот пост",
"status.history.created": "{name} создал {date}",
"status.history.edited": "{name} отредактировал(а) {date}",
@@ -829,13 +845,13 @@
"status.show_less_all": "Свернуть все спойлеры в ветке",
"status.show_more_all": "Развернуть все спойлеры в ветке",
"status.show_original": "Показать оригинал",
- "status.title.with_attachments": "{user} размещено {attachmentCount, plural, one {вложение} other {{attachmentCount} вложений}}",
+ "status.title.with_attachments": "{user} опубликовал {attachmentCount, plural, one {{attachmentCount} вложение} few {{attachmentCount} вложения} other {{attachmentCount} вложений}}",
"status.translate": "Перевод",
- "status.translated_from_with": "Переведено с {lang}, используя {provider}",
- "status.uncached_media_warning": "Прослушивание недоступно",
+ "status.translated_from_with": "Переведено с {lang} с помощью {provider}",
+ "status.uncached_media_warning": "Предварительный просмотр недоступен",
"status.unmute_conversation": "Не игнорировать обсуждение",
"status.unpin": "Открепить от профиля",
- "subscribed_languages.lead": "Посты только на выбранных языках будут отображаться на вашей домашней странице и в списке лент после изменения. Выберите «Нет», чтобы получать посты на всех языках.",
+ "subscribed_languages.lead": "Посты лишь на выбранных языках будут появляться в вашей домашней ленте и в списках после изменения. Снимите выбор, чтобы получать посты на всех языках.",
"subscribed_languages.save": "Сохранить изменения",
"subscribed_languages.target": "Изменить языки подписки для {target}",
"tabs_bar.home": "Главная",
@@ -845,7 +861,7 @@
"time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}",
"time_remaining.moments": "остались считанные мгновения",
"time_remaining.seconds": "{number, plural, one {# секунда} many {# секунд} other {# секунды}}",
- "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний день} few {последние {days} дня} other {последние {days} дней}}",
+ "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний {days} день} few {последние {days} дня} other {последние {days} дней}}",
"trends.trending_now": "Самое актуальное",
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
"units.short.billion": "{count} млрд",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index dc31f6100f..8a01263eb2 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -87,11 +87,21 @@
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Alternatívny popis",
"announcement.announcement": "Oznámenie",
+ "annual_report.summary.followers.followers": "sledovatelia",
+ "annual_report.summary.followers.total": "{count} celkovo",
+ "annual_report.summary.highlighted_post.by_favourites": "najviac obľúbený príspevok",
+ "annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok",
+ "annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami",
+ "annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "najviac užívaný hashtag",
+ "annual_report.summary.new_posts.new_posts": "nové príspevky",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Nepovieme Berniemu.",
"attachments_list.unprocessed": "(nespracované)",
"audio.hide": "Skryť zvuk",
"block_modal.show_less": "Zobraziť menej",
"block_modal.show_more": "Zobraziť viac",
"block_modal.they_cant_mention": "Nemôžu ťa spomenúť, alebo nasledovať.",
+ "block_modal.they_cant_see_posts": "On/a nemôže vidieť tvoje príspevky a ty neuvidíš jej/ho.",
"block_modal.they_will_know": "Môžu vidieť, že sú zablokovaní/ý.",
"block_modal.title": "Blokovať užívateľa?",
"block_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ich spomínajú.",
@@ -338,6 +348,7 @@
"hashtag.follow": "Sledovať hashtag",
"hashtag.unfollow": "Prestať sledovať hashtag",
"hashtags.and_other": "…a {count, plural, other {# ďalších}}",
+ "hints.threads.see_more": "Pozri viac odpovedí na {domain}",
"home.column_settings.show_reblogs": "Zobraziť zdieľania",
"home.column_settings.show_replies": "Zobraziť odpovede",
"home.hide_announcements": "Skryť oznámenia",
@@ -345,6 +356,9 @@
"home.pending_critical_update.link": "Zobraziť aktualizácie",
"home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia.",
"home.show_announcements": "Zobraziť oznámenia",
+ "ignore_notifications_modal.filter_instead": "Radšej triediť",
+ "ignore_notifications_modal.filter_to_act_users": "Stále budeš môcť akceptovať, odmietnuť, alebo nahlásiť užívateľov",
+ "ignore_notifications_modal.filter_to_avoid_confusion": "Triedenie pomáha vyvarovať sa možnému zmäteniu",
"ignore_notifications_modal.ignore": "Ignoruj upozornenia",
"interaction_modal.description.favourite": "S účtom na Mastodone môžete tento príspevok ohviezdičkovať, tak dať autorovi vedieť, že sa vám páči, a uložiť si ho na neskôr.",
"interaction_modal.description.follow": "S účtom na Mastodone môžete {name} sledovať a vidieť ich príspevky vo svojom domovskom kanáli.",
@@ -361,6 +375,7 @@
"interaction_modal.title.follow": "Sledovať {name}",
"interaction_modal.title.reblog": "Zdieľať príspevok od {name}",
"interaction_modal.title.reply": "Odpovedať na príspevok od {name}",
+ "interaction_modal.title.vote": "Hlasuj v ankete od {name}",
"intervals.full.days": "{number, plural, one {# deň} few {# dni} many {# dní} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodín} other {# hodín}}",
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minúty} many {# minút} other {# minút}}",
@@ -401,6 +416,7 @@
"lightbox.close": "Zatvoriť",
"lightbox.next": "Ďalej",
"lightbox.previous": "Späť",
+ "lightbox.zoom_out": "Priblížiť na mieru",
"limited_account_hint.action": "Aj tak zobraziť profil",
"limited_account_hint.title": "Tento profil bol skrytý správcami servera {domain}.",
"link_preview.author": "Autor: {name}",
@@ -428,7 +444,11 @@
"mute_modal.hide_options": "Skryť možnosti",
"mute_modal.indefinite": "Pokiaľ ich neodtíšim",
"mute_modal.show_options": "Zobraziť možnosti",
+ "mute_modal.they_can_mention_and_follow": "Môže ťa spomenúť a nasledovať, ale ty ho/ju neuvidíš.",
+ "mute_modal.they_wont_know": "Nebude vedieť, že bol/a stíšený/á.",
"mute_modal.title": "Stíšiť užívateľa?",
+ "mute_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ho/ju spomínajú.",
+ "mute_modal.you_wont_see_posts": "Stále uvidí tvoje príspevky, ale ty neuvidíš jeho/jej.",
"navigation_bar.about": "O tomto serveri",
"navigation_bar.administration": "Spravovanie",
"navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní",
@@ -468,12 +488,15 @@
"notification.label.private_reply": "Súkromná odpoveď",
"notification.label.reply": "Odpoveď",
"notification.mention": "Zmienka",
+ "notification.mentioned_you": "{name} ťa spomenul/a",
"notification.moderation-warning.learn_more": "Zisti viac",
+ "notification.moderation_warning": "Dostal/a si varovanie od moderátora",
"notification.moderation_warning.action_delete_statuses": "Niektoré z tvojich príspevkov boli odstránené.",
"notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.",
"notification.moderation_warning.action_silence": "Tvoj účet bol obmedzený.",
"notification.moderation_warning.action_suspend": "Tvoj účet bol pozastavený.",
"notification.own_poll": "Vaša anketa sa skončila",
+ "notification.poll": "Anketa, v ktorej si hlasoval/a, skončila",
"notification.reblog": "{name} zdieľa váš príspevok",
"notification.relationships_severance_event": "Stratené prepojenia s {name}",
"notification.relationships_severance_event.account_suspension": "Správca z {from} pozastavil/a {target}, čo znamená, že od nich viac nemôžeš dostávať aktualizácie, alebo s nimi interaktovať.",
@@ -520,6 +543,8 @@
"notifications.permission_denied": "Upozornenia na ploche sú nedostupné pre už skôr zamietnutú požiadavku prehliadača",
"notifications.permission_denied_alert": "Upozornenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá",
"notifications.permission_required": "Upozornenia na ploche sú nedostupné, pretože neboli udelené potrebné povolenia.",
+ "notifications.policy.accept": "Prijať",
+ "notifications.policy.accept_hint": "Ukáž v oznámeniach",
"notifications.policy.drop": "Ignoruj",
"notifications.policy.filter": "Triediť",
"notifications.policy.filter_limited_accounts_title": "Moderované účty",
@@ -527,6 +552,7 @@
"notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú",
"notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ",
"notifications.policy.filter_private_mentions_title": "Nevyžiadané priame spomenutia",
+ "notifications.policy.title": "Spravuj oznámenia od…",
"notifications_permission_banner.enable": "Povoliť upozornenia na ploche",
"notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.",
"notifications_permission_banner.title": "Nenechajte si nič ujsť",
@@ -697,6 +723,7 @@
"status.bookmark": "Pridať záložku",
"status.cancel_reblog_private": "Zrušiť zdieľanie",
"status.cannot_reblog": "Tento príspevok nie je možné zdieľať",
+ "status.continued_thread": "Pokračujúce vlákno",
"status.copy": "Kopírovať odkaz na príspevok",
"status.delete": "Vymazať",
"status.detailed_status": "Podrobný náhľad celej konverzácie",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 088b48a3f3..0faee304c6 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -526,6 +526,7 @@
"notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer",
"notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer",
"notification.follow": "{name} zuri t’ju ndjekë",
+ "notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}",
"notification.follow_request": "{name} ka kërkuar t’ju ndjekë",
"notification.follow_request.name_and_others": "Ka kërkuar t’ju ndjekë {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}",
"notification.label.mention": "Përmendje",
@@ -584,6 +585,7 @@
"notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta",
"notifications.column_settings.follow": "Ndjekës të rinj:",
"notifications.column_settings.follow_request": "Kërkesa të reja për ndjekje:",
+ "notifications.column_settings.group": "Grupoji",
"notifications.column_settings.mention": "Përmendje:",
"notifications.column_settings.poll": "Përfundime pyetësori:",
"notifications.column_settings.push": "Njoftime Push",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 5f551fc4cd..ef2d912c00 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -87,10 +87,22 @@
"alert.unexpected.title": "Hoppsan!",
"alt_text_badge.title": "Alt-Text",
"announcement.announcement": "Meddelande",
+ "annual_report.summary.archetype.booster": "Häftighetsjägaren",
+ "annual_report.summary.archetype.lurker": "Smygaren",
+ "annual_report.summary.archetype.oracle": "Oraklet",
+ "annual_report.summary.archetype.pollster": "Frågaren",
+ "annual_report.summary.archetype.replier": "Den sociala fjärilen",
"annual_report.summary.followers.followers": "följare",
"annual_report.summary.followers.total": "{count} totalt",
+ "annual_report.summary.here_it_is": "Här är en tillbakablick på ditt {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerat inlägg",
+ "annual_report.summary.highlighted_post.by_reblogs": "mest boostat inlägg",
"annual_report.summary.highlighted_post.by_replies": "inlägg med flest svar",
+ "annual_report.summary.highlighted_post.possessive": "{name}s",
+ "annual_report.summary.most_used_app.most_used_app": "mest använda app",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag",
"annual_report.summary.new_posts.new_posts": "nya inlägg",
+ "annual_report.summary.percentile.text": "Det placerar dig i toppav Mastodon-användare.",
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.",
"annual_report.summary.thanks": "Tack för att du är en del av Mastodon!",
"attachments_list.unprocessed": "(obehandlad)",
@@ -412,7 +424,7 @@
"keyboard_shortcuts.blocked": "Öppna listan över blockerade användare",
"keyboard_shortcuts.boost": "Boosta inlägg",
"keyboard_shortcuts.column": "Fokusera kolumn",
- "keyboard_shortcuts.compose": "för att fokusera skrivfältet",
+ "keyboard_shortcuts.compose": "Fokusera skrivfältet",
"keyboard_shortcuts.description": "Beskrivning",
"keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen",
"keyboard_shortcuts.down": "Flytta ner i listan",
@@ -421,20 +433,20 @@
"keyboard_shortcuts.favourites": "Öppna favoritlistan",
"keyboard_shortcuts.federated": "Öppna federerad tidslinje",
"keyboard_shortcuts.heading": "Tangentbordsgenvägar",
- "keyboard_shortcuts.home": "för att öppna Hem-tidslinjen",
+ "keyboard_shortcuts.home": "Öppna Hemtidslinjen",
"keyboard_shortcuts.hotkey": "Kommando",
- "keyboard_shortcuts.legend": "för att visa denna översikt",
- "keyboard_shortcuts.local": "för att öppna Lokal tidslinje",
- "keyboard_shortcuts.mention": "för att nämna skaparen",
+ "keyboard_shortcuts.legend": "Visa denna översikt",
+ "keyboard_shortcuts.local": "Öppna lokal tidslinje",
+ "keyboard_shortcuts.mention": "Nämna skaparen",
"keyboard_shortcuts.muted": "Öppna listan över tystade användare",
- "keyboard_shortcuts.my_profile": "för att öppna din profil",
- "keyboard_shortcuts.notifications": "för att öppna Meddelanden",
- "keyboard_shortcuts.open_media": "öppna media",
+ "keyboard_shortcuts.my_profile": "Öppna din profil",
+ "keyboard_shortcuts.notifications": "Öppna meddelanden",
+ "keyboard_shortcuts.open_media": "Öppna media",
"keyboard_shortcuts.pinned": "Öppna listan över fästa inlägg",
- "keyboard_shortcuts.profile": "för att öppna skaparens profil",
+ "keyboard_shortcuts.profile": "Öppna författarens profil",
"keyboard_shortcuts.reply": "Svara på inlägg",
- "keyboard_shortcuts.requests": "för att öppna Följförfrågningar",
- "keyboard_shortcuts.search": "för att fokusera sökfältet",
+ "keyboard_shortcuts.requests": "Öppna följförfrågningar",
+ "keyboard_shortcuts.search": "Fokusera sökfältet",
"keyboard_shortcuts.spoilers": "Visa/dölja CW-fält",
"keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen",
"keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW",
@@ -514,6 +526,7 @@
"notification.admin.report_statuses_other": "{name} rapporterade {target}",
"notification.admin.sign_up": "{name} registrerade sig",
"notification.admin.sign_up.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har registrerat sig",
+ "notification.annual_report.message": "Din {year} #Wrapstodon väntar! Upptäck ditt års höjdpunkter och minnesvärda stunder på Mastodon!",
"notification.annual_report.view": "Visa #Wrapstodon",
"notification.favourite": "{name} favoritmarkerade ditt inlägg",
"notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 5cf95554bc..95e3e1e52b 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -87,6 +87,13 @@
"alert.unexpected.title": "อุปส์!",
"alt_text_badge.title": "ข้อความแสดงแทน",
"announcement.announcement": "ประกาศ",
+ "annual_report.summary.followers.followers": "ผู้ติดตาม",
+ "annual_report.summary.highlighted_post.by_favourites": "โพสต์ที่ได้รับการชื่นชอบมากที่สุด",
+ "annual_report.summary.highlighted_post.by_reblogs": "โพสต์ที่ได้รับการดันมากที่สุด",
+ "annual_report.summary.highlighted_post.by_replies": "โพสต์ที่มีการตอบกลับมากที่สุด",
+ "annual_report.summary.new_posts.new_posts": "โพสต์ใหม่",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "เราจะไม่บอก Bernie",
+ "annual_report.summary.thanks": "ขอบคุณสำหรับการเป็นส่วนหนึ่งของ Mastodon!",
"attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)",
"audio.hide": "ซ่อนเสียง",
"block_modal.remote_users_caveat": "เราจะขอให้เซิร์ฟเวอร์ {domain} เคารพการตัดสินใจของคุณ อย่างไรก็ตาม ไม่รับประกันการปฏิบัติตามข้อกำหนดเนื่องจากเซิร์ฟเวอร์บางแห่งอาจจัดการการปิดกั้นแตกต่างกัน โพสต์สาธารณะอาจยังคงปรากฏแก่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบ",
@@ -508,6 +515,7 @@
"notification.admin.report_statuses_other": "{name} ได้รายงาน {target}",
"notification.admin.sign_up": "{name} ได้ลงทะเบียน",
"notification.admin.sign_up.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ลงทะเบียน",
+ "notification.annual_report.view": "ดู #Wrapstodon",
"notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ",
"notification.favourite.name_and_others_with_link": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ชื่นชอบโพสต์ของคุณ",
"notification.follow": "{name} ได้ติดตามคุณ",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 5ac5a3368b..4699b9f4bd 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Hay aksi!",
"alt_text_badge.title": "Alternatif metin",
"announcement.announcement": "Duyuru",
+ "annual_report.summary.archetype.booster": "Trend takipçisi",
+ "annual_report.summary.archetype.lurker": "Gizli meraklı",
+ "annual_report.summary.archetype.oracle": "Kahin",
+ "annual_report.summary.archetype.pollster": "Anketör",
+ "annual_report.summary.archetype.replier": "Sosyal kelebek",
+ "annual_report.summary.followers.followers": "takipçiler",
+ "annual_report.summary.followers.total": "{count} toplam",
+ "annual_report.summary.here_it_is": "İşte {year} yılı değerlendirmeniz:",
+ "annual_report.summary.highlighted_post.by_favourites": "en çok beğenilen gönderi",
+ "annual_report.summary.highlighted_post.by_reblogs": "en çok paylaşılan gönderi",
+ "annual_report.summary.highlighted_post.by_replies": "en çok yanıt alan gönderi",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "en çok kullanılan uygulama",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "en çok kullanılan etiket",
+ "annual_report.summary.new_posts.new_posts": "yeni gönderiler",
+ "annual_report.summary.percentile.text": "Mastodon kullanıcılarınınüst dilimindesiniz.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Bernie'ye söylemeyiz.",
+ "annual_report.summary.thanks": "Mastodon'un bir parçası olduğunuz için teşekkürler!",
"attachments_list.unprocessed": "(işlenmemiş)",
"audio.hide": "Sesi gizle",
"block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name}, {target} kişisini bildirdi",
"notification.admin.sign_up": "{name} kaydoldu",
"notification.admin.sign_up.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} kaydoldu",
+ "notification.annual_report.message": "{year} yılı #Wrapstodon'unuz bekliyor! Yılınızın Mastodon'daki öne çıkanlarını ve anılarınızı gösterin!",
+ "notification.annual_report.view": "#Wrapstodon'u Görüntüle",
"notification.favourite": "{name} gönderinizi beğendi",
"notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi",
"notification.follow": "{name} seni takip etti",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index fc396aa933..dcbf8cec58 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Ой!",
"alt_text_badge.title": "Альтернативний текст",
"announcement.announcement": "Оголошення",
+ "annual_report.summary.archetype.booster": "Мисливець на дописи",
+ "annual_report.summary.archetype.lurker": "Причаєнець",
+ "annual_report.summary.archetype.oracle": "Оракул",
+ "annual_report.summary.archetype.pollster": "Опитувач",
+ "annual_report.summary.archetype.replier": "Душа компанії",
+ "annual_report.summary.followers.followers": "підписники",
+ "annual_report.summary.followers.total": "Загалом {count}",
+ "annual_report.summary.here_it_is": "Ось ваші підсумки {year} року:",
+ "annual_report.summary.highlighted_post.by_favourites": "найуподобаніші дописи",
+ "annual_report.summary.highlighted_post.by_reblogs": "найпоширюваніші дописи",
+ "annual_report.summary.highlighted_post.by_replies": "найкоментованіші дописи",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "найчастіше використовуваний застосунок",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "найчастіший хештег",
+ "annual_report.summary.new_posts.new_posts": "нові дописи",
+ "annual_report.summary.percentile.text": "Це виводить вас в топ користувачів Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Ми не скажемо Bernie.",
+ "annual_report.summary.thanks": "Дякуємо, що ви є частиною Mastodon!",
"attachments_list.unprocessed": "(не оброблено)",
"audio.hide": "Сховати аудіо",
"block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} повідомляє про {target}",
"notification.admin.sign_up": "{name} приєдналися",
"notification.admin.sign_up.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} зареєструвалися",
+ "notification.annual_report.message": "#Wrapstodon за {year} чекає на вас! Дізнайтеся про найяскравіші та пам'ятні моменти вашого року на Mastodon!",
+ "notification.annual_report.view": "Переглянути #Wrapstodon",
"notification.favourite": "Ваш допис сподобався {name}",
"notification.favourite.name_and_others_with_link": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} вподобали ваш допис",
"notification.follow": "{name} підписалися на вас",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 7ae955c1b0..2b5401a878 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -87,6 +87,24 @@
"alert.unexpected.title": "Ốiii!",
"alt_text_badge.title": "Văn bản thay thế",
"announcement.announcement": "Có gì mới?",
+ "annual_report.summary.archetype.booster": "Hiệp sĩ ngầu",
+ "annual_report.summary.archetype.lurker": "Kẻ rình mò",
+ "annual_report.summary.archetype.oracle": "Nhà tiên tri",
+ "annual_report.summary.archetype.pollster": "Chuyên gia khảo sát",
+ "annual_report.summary.archetype.replier": "Bướm xã hội",
+ "annual_report.summary.followers.followers": "người theo dõi",
+ "annual_report.summary.followers.total": "tổng {count}",
+ "annual_report.summary.here_it_is": "Nhìn lại năm {year} của bạn:",
+ "annual_report.summary.highlighted_post.by_favourites": "tút được thích nhiều nhất",
+ "annual_report.summary.highlighted_post.by_reblogs": "tút được đăng lại nhiều nhất",
+ "annual_report.summary.highlighted_post.by_replies": "tút được trả lời nhiều nhất",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "app dùng nhiều nhất",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag dùng nhiều nhất",
+ "annual_report.summary.new_posts.new_posts": "tút mới",
+ "annual_report.summary.percentile.text": "Bạn nằm trong topthành viên Mastodon.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Chúng tôi sẽ không kể cho Bernie.",
+ "annual_report.summary.thanks": "Cảm ơn đã trở thành một phần của Mastodon!",
"attachments_list.unprocessed": "(chưa xử lí)",
"audio.hide": "Ẩn âm thanh",
"block_modal.remote_users_caveat": "Chúng tôi sẽ yêu cầu {domain} tôn trọng quyết định của bạn. Tuy nhiên, việc tuân thủ không được đảm bảo vì một số máy chủ có thể xử lý việc chặn theo cách khác nhau. Các tút công khai vẫn có thể hiển thị đối với người dùng chưa đăng nhập.",
@@ -508,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} báo cáo {target}",
"notification.admin.sign_up": "{name} tham gia máy chủ của bạn",
"notification.admin.sign_up.name_and_others": "{name} và {count, plural, other {# người}} đã đăng ký",
+ "notification.annual_report.message": "#Wrapstodon {year} của bạn có rồi đây! Hãy chia sẻ những điểm nhấn và khoảnh khắc đáng nhớ trên Mastodon của bạn trong năm qua!",
+ "notification.annual_report.view": "Xem #Wrapstodon",
"notification.favourite": "{name} thích tút của bạn",
"notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn",
"notification.follow": "{name} theo dõi bạn",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index e1f9eeb210..91d7f6e45d 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -87,15 +87,15 @@
"alert.unexpected.title": "哎呀!",
"alt_text_badge.title": "ALT 說明文字",
"announcement.announcement": "公告",
- "annual_report.summary.archetype.booster": "酷炫的獵人",
- "annual_report.summary.archetype.lurker": "潛伏者",
+ "annual_report.summary.archetype.booster": "酷炫獵人",
+ "annual_report.summary.archetype.lurker": "潛水高手",
"annual_report.summary.archetype.oracle": "先知",
- "annual_report.summary.archetype.pollster": "民調人員",
+ "annual_report.summary.archetype.pollster": "民調專家",
"annual_report.summary.archetype.replier": "社交菁英",
"annual_report.summary.followers.followers": "跟隨者",
"annual_report.summary.followers.total": "總共 {count}",
- "annual_report.summary.here_it_is": "以下是您的{year}年度回顧:",
- "annual_report.summary.highlighted_post.by_favourites": "最愛的嘟文",
+ "annual_report.summary.here_it_is": "以下是您的 {year} 年度回顧:",
+ "annual_report.summary.highlighted_post.by_favourites": "最多被加到最愛的嘟文",
"annual_report.summary.highlighted_post.by_reblogs": "最多轉嘟的嘟文",
"annual_report.summary.highlighted_post.by_replies": "最多回覆的嘟文",
"annual_report.summary.highlighted_post.possessive": "{name} 的",
@@ -103,7 +103,8 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "最常使用的主題標籤",
"annual_report.summary.new_posts.new_posts": "新嘟文",
"annual_report.summary.percentile.text": "這讓您成為前Mastodon 的使用者。",
- "annual_report.summary.thanks": "感謝您成為 Mastodon 的一員!",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "我們不會告訴 Bernie。",
+ "annual_report.summary.thanks": "感謝您成為 Mastodon 的一份子!",
"attachments_list.unprocessed": "(未經處理)",
"audio.hide": "隱藏音訊",
"block_modal.remote_users_caveat": "我們會要求 {domain} 伺服器尊重您的決定。然而,我們無法保證所有伺服器皆會遵守,某些伺服器可能以不同方式處理封鎖。未登入之使用者仍可能看見您的公開嘟文。",
@@ -525,6 +526,8 @@
"notification.admin.report_statuses_other": "{name} 已檢舉 {target}",
"notification.admin.sign_up": "{name} 已經註冊",
"notification.admin.sign_up.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已註冊",
+ "notification.annual_report.message": "您的 {year} #Wrapstodon 正等著您!揭開您 Mastodon 上的年度精彩時刻與值得回憶的難忘時光!",
+ "notification.annual_report.view": "檢視 #Wrapstodon",
"notification.favourite": "{name} 已將您的嘟文加入最愛",
"notification.favourite.name_and_others_with_link": "{name} 與{count, plural, other {其他 # 個人}}已將您的嘟文加入最愛",
"notification.follow": "{name} 已跟隨您",
diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss
index 45da56994c..3d4539bb9d 100644
--- a/app/javascript/styles/mastodon-light/diff.scss
+++ b/app/javascript/styles/mastodon-light/diff.scss
@@ -535,3 +535,10 @@ a.sparkline {
::-webkit-scrollbar-thumb {
opacity: 0.25;
}
+
+.notification-group--annual-report {
+ .notification-group__icon,
+ .notification-group__main .link-button {
+ color: var(--indigo-3);
+ }
+}
diff --git a/app/javascript/styles/mastodon/annual_reports.scss b/app/javascript/styles/mastodon/annual_reports.scss
index 39784e3b5e..dff1c76eca 100644
--- a/app/javascript/styles/mastodon/annual_reports.scss
+++ b/app/javascript/styles/mastodon/annual_reports.scss
@@ -103,6 +103,11 @@
background-color: var(--goldenrod-2);
}
}
+
+ .status-card,
+ .hashtag-bar {
+ display: none;
+ }
}
&__followers {
@@ -237,7 +242,7 @@
}
&__number {
- font-size: 61px;
+ font-size: 54px;
font-weight: 600;
line-height: 73px;
color: var(--goldenrod-2);
@@ -306,7 +311,7 @@
}
.annual-report-modal {
- max-width: 480px;
+ max-width: 600px;
background: var(--indigo-1);
border-radius: 16px;
display: flex;
diff --git a/app/lib/account_reach_finder.rb b/app/lib/account_reach_finder.rb
index 481e254396..19464024a6 100644
--- a/app/lib/account_reach_finder.rb
+++ b/app/lib/account_reach_finder.rb
@@ -1,6 +1,10 @@
# frozen_string_literal: true
class AccountReachFinder
+ RECENT_LIMIT = 2_000
+ STATUS_LIMIT = 200
+ STATUS_SINCE = 2.days
+
def initialize(account)
@account = account
end
@@ -20,13 +24,27 @@ class AccountReachFinder
end
def recently_mentioned_inboxes
- cutoff_id = Mastodon::Snowflake.id_at(2.days.ago, with_random: false)
- recent_statuses = @account.statuses.recent.where(id: cutoff_id...).limit(200)
-
- Account.joins(:mentions).where(mentions: { status: recent_statuses }).inboxes.take(2000)
+ Account
+ .joins(:mentions)
+ .where(mentions: { status: recent_statuses })
+ .inboxes
+ .take(RECENT_LIMIT)
end
def relay_inboxes
Relay.enabled.pluck(:inbox_url)
end
+
+ def oldest_status_id
+ Mastodon::Snowflake
+ .id_at(STATUS_SINCE.ago, with_random: false)
+ end
+
+ def recent_statuses
+ @account
+ .statuses
+ .recent
+ .where(id: oldest_status_id...)
+ .limit(STATUS_LIMIT)
+ end
end
diff --git a/app/lib/admin/system_check/database_schema_check.rb b/app/lib/admin/system_check/database_schema_check.rb
index c2f01fd55b..a3ef0613ea 100644
--- a/app/lib/admin/system_check/database_schema_check.rb
+++ b/app/lib/admin/system_check/database_schema_check.rb
@@ -6,7 +6,7 @@ class Admin::SystemCheck::DatabaseSchemaCheck < Admin::SystemCheck::BaseCheck
end
def pass?
- !ActiveRecord::Base.connection.migration_context.needs_migration?
+ !ActiveRecord::Base.connection_pool.migration_context.needs_migration?
end
def message
diff --git a/app/lib/request.rb b/app/lib/request.rb
index d7da9fe63c..a12e6e3747 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -334,14 +334,10 @@ class Request
def check_private_address(address, host)
addr = IPAddr.new(address.to_s)
- return if Rails.env.development? || private_address_exceptions.any? { |range| range.include?(addr) }
+ return if Rails.env.development? || Rails.configuration.x.private_address_exceptions.any? { |range| range.include?(addr) }
raise Mastodon::PrivateNetworkAddressError, host if PrivateAddressCheck.private_address?(addr)
end
-
- def private_address_exceptions
- @private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(/(?:\s*,\s*|\s+)/).map { |addr| IPAddr.new(addr) }
- end
end
end
diff --git a/app/lib/suspicious_sign_in_detector.rb b/app/lib/suspicious_sign_in_detector.rb
index 74f49aa558..60e5fdad4f 100644
--- a/app/lib/suspicious_sign_in_detector.rb
+++ b/app/lib/suspicious_sign_in_detector.rb
@@ -19,7 +19,7 @@ class SuspiciousSignInDetector
end
def previously_seen_ip?(request)
- @user.ips.exists?(['ip <<= ?', masked_ip(request)])
+ @user.ips.contained_by(masked_ip(request)).exists?
end
def freshly_signed_up?
diff --git a/app/lib/vacuum/imports_vacuum.rb b/app/lib/vacuum/imports_vacuum.rb
index b67865194f..7f101c4506 100644
--- a/app/lib/vacuum/imports_vacuum.rb
+++ b/app/lib/vacuum/imports_vacuum.rb
@@ -9,10 +9,16 @@ class Vacuum::ImportsVacuum
private
def clean_unconfirmed_imports!
- BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).in_batches.delete_all
+ BulkImport
+ .confirmation_missed
+ .in_batches
+ .delete_all
end
def clean_old_imports!
- BulkImport.where(created_at: ..1.week.ago).in_batches.delete_all
+ BulkImport
+ .archival_completed
+ .in_batches
+ .delete_all
end
end
diff --git a/app/models/account.rb b/app/models/account.rb
index ffcba91fbd..cb323e259c 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -94,6 +94,8 @@ class Account < ApplicationRecord
include Account::Interactions
include Account::Merging
include Account::Search
+ include Account::Sensitizes
+ include Account::Silences
include Account::StatusesSearch
include Account::OtherSettings
include Account::MasterSettings
@@ -136,9 +138,6 @@ class Account < ApplicationRecord
scope :remote, -> { where.not(domain: nil) }
scope :local, -> { where(domain: nil) }
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
- scope :silenced, -> { where.not(silenced_at: nil) }
- scope :sensitized, -> { where.not(sensitized_at: nil) }
- scope :without_silenced, -> { where(silenced_at: nil) }
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
scope :recent, -> { reorder(id: :desc) }
scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) }
@@ -271,30 +270,6 @@ class Account < ApplicationRecord
ResolveAccountService.new.call(acct) unless local?
end
- def silenced?
- silenced_at.present?
- end
-
- def silence!(date = Time.now.utc)
- update!(silenced_at: date)
- end
-
- def unsilence!
- update!(silenced_at: nil)
- end
-
- def sensitized?
- sensitized_at.present?
- end
-
- def sensitize!(date = Time.now.utc)
- update!(sensitized_at: date)
- end
-
- def unsensitize!
- update!(sensitized_at: nil)
- end
-
def memorialize!
update!(memorial: true)
end
diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb
index 73b4bfbb1f..7e5cfbbe02 100644
--- a/app/models/account_statuses_cleanup_policy.rb
+++ b/app/models/account_statuses_cleanup_policy.rb
@@ -136,7 +136,7 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
end
def without_direct_scope
- Status.where.not(visibility: :direct)
+ Status.not_direct_visibility
end
def old_enough_scope(max_id = nil)
diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb
index b156cd49fe..54a9ee8021 100644
--- a/app/models/admin/action_log_filter.rb
+++ b/app/models/admin/action_log_filter.rb
@@ -33,6 +33,7 @@ class Admin::ActionLogFilter
create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze,
create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze,
create_ip_block: { target_type: 'IpBlock', action: 'create' }.freeze,
+ create_relay: { target_type: 'Relay', action: 'create' }.freeze,
create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze,
create_user_role: { target_type: 'UserRole', action: 'create' }.freeze,
create_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'create' }.freeze,
@@ -42,6 +43,7 @@ class Admin::ActionLogFilter
destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze,
destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze,
destroy_ip_block: { target_type: 'IpBlock', action: 'destroy' }.freeze,
+ destroy_relay: { target_type: 'Relay', action: 'destroy' }.freeze,
destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze,
destroy_instance: { target_type: 'Instance', action: 'destroy' }.freeze,
destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze,
@@ -51,8 +53,10 @@ class Admin::ActionLogFilter
disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze,
disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze,
disable_user: { target_type: 'User', action: 'disable' }.freeze,
+ disable_relay: { target_type: 'Relay', action: 'disable' }.freeze,
enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze,
enable_user: { target_type: 'User', action: 'enable' }.freeze,
+ enable_relay: { target_type: 'Relay', action: 'enable' }.freeze,
memorialize_account: { target_type: 'Account', action: 'memorialize' }.freeze,
promote_user: { target_type: 'User', action: 'promote' }.freeze,
remove_avatar_user: { target_type: 'User', action: 'remove_avatar' }.freeze,
diff --git a/app/models/admin/status_filter.rb b/app/models/admin/status_filter.rb
index 8d20e4f6ab..fd4d0ef59d 100644
--- a/app/models/admin/status_filter.rb
+++ b/app/models/admin/status_filter.rb
@@ -32,7 +32,7 @@ class Admin::StatusFilter
def scope_for(key, _value)
case key.to_s
when 'media'
- Status.joins(:media_attachments).merge(@account.media_attachments).group(:id).reorder('statuses.id desc')
+ Status.joins(:media_attachments).merge(@account.media_attachments).group(:id).recent
else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
diff --git a/app/models/bulk_import.rb b/app/models/bulk_import.rb
index 9b3f4c8a3a..e3e46d7b1c 100644
--- a/app/models/bulk_import.rb
+++ b/app/models/bulk_import.rb
@@ -21,6 +21,9 @@
class BulkImport < ApplicationRecord
self.inheritance_column = false
+ ARCHIVE_PERIOD = 1.week
+ CONFIRM_PERIOD = 10.minutes
+
belongs_to :account
has_many :rows, class_name: 'BulkImportRow', inverse_of: :bulk_import, dependent: :delete_all
@@ -42,6 +45,9 @@ class BulkImport < ApplicationRecord
validates :type, presence: true
+ scope :archival_completed, -> { where(created_at: ..ARCHIVE_PERIOD.ago) }
+ scope :confirmation_missed, -> { state_unconfirmed.where(created_at: ..CONFIRM_PERIOD.ago) }
+
def self.progress!(bulk_import_id, imported: false)
# Use `increment_counter` so that the incrementation is done atomically in the database
BulkImport.increment_counter(:processed_items, bulk_import_id)
diff --git a/app/models/concerns/account/sensitizes.rb b/app/models/concerns/account/sensitizes.rb
new file mode 100644
index 0000000000..3bb74324a8
--- /dev/null
+++ b/app/models/concerns/account/sensitizes.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module Account::Sensitizes
+ extend ActiveSupport::Concern
+
+ included do
+ scope :sensitized, -> { where.not(sensitized_at: nil) }
+ end
+
+ def sensitized?
+ sensitized_at.present?
+ end
+
+ def sensitize!(date = Time.now.utc)
+ update!(sensitized_at: date)
+ end
+
+ def unsensitize!
+ update!(sensitized_at: nil)
+ end
+end
diff --git a/app/models/concerns/account/silences.rb b/app/models/concerns/account/silences.rb
new file mode 100644
index 0000000000..bd785df311
--- /dev/null
+++ b/app/models/concerns/account/silences.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+module Account::Silences
+ extend ActiveSupport::Concern
+
+ included do
+ scope :silenced, -> { where.not(silenced_at: nil) }
+ scope :without_silenced, -> { where(silenced_at: nil) }
+ end
+
+ def silenced?
+ silenced_at.present?
+ end
+
+ def silence!(date = Time.now.utc)
+ update!(silenced_at: date)
+ end
+
+ def unsilence!
+ update!(silenced_at: nil)
+ end
+end
diff --git a/app/models/concerns/inet_container.rb b/app/models/concerns/inet_container.rb
new file mode 100644
index 0000000000..da03bcc5d7
--- /dev/null
+++ b/app/models/concerns/inet_container.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module InetContainer
+ extend ActiveSupport::Concern
+
+ included do
+ scope :containing, ->(value) { where('ip >>= ?', value) }
+ scope :contained_by, ->(value) { where('ip <<= ?', value) }
+ end
+end
diff --git a/app/models/concerns/status/safe_reblog_insert.rb b/app/models/concerns/status/safe_reblog_insert.rb
index 60ddb78e52..48d585ea18 100644
--- a/app/models/concerns/status/safe_reblog_insert.rb
+++ b/app/models/concerns/status/safe_reblog_insert.rb
@@ -15,7 +15,9 @@ module Status::SafeReblogInsert
#
# The code is kept similar to ActiveRecord::Persistence code and calls it
# directly when we are not handling a reblog.
- def _insert_record(values, returning)
+ #
+ # https://github.com/rails/rails/blob/v7.2.1.1/activerecord/lib/active_record/persistence.rb#L238-L263
+ def _insert_record(connection, values, returning)
return super unless values.is_a?(Hash) && values['reblog_of_id']&.value.present?
primary_key = self.primary_key
@@ -30,14 +32,19 @@ module Status::SafeReblogInsert
# The following line departs from stock ActiveRecord
# Original code was:
- # im.insert(values.transform_keys { |name| arel_table[name] })
+ # im = Arel::InsertManager.new(arel_table)
# Instead, we use a custom builder when a reblog is happening:
im = _compile_reblog_insert(values)
- connection.insert(im, "#{self} Create", primary_key || false, primary_key_value, returning: returning).tap do |result|
- # Since we are using SELECT instead of VALUES, a non-error `nil` return is possible.
- # For our purposes, it's equivalent to a foreign key constraint violation
- raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil?
+ with_connection do |_c|
+ connection.insert(
+ im, "#{self} Create", primary_key || false, primary_key_value,
+ returning: returning
+ ).tap do |result|
+ # Since we are using SELECT instead of VALUES, a non-error `nil` return is possible.
+ # For our purposes, it's equivalent to a foreign key constraint violation
+ raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil?
+ end
end
end
diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb
index f3a86eae8f..583d2e6c1b 100644
--- a/app/models/email_domain_block.rb
+++ b/app/models/email_domain_block.rb
@@ -28,6 +28,8 @@ class EmailDomainBlock < ApplicationRecord
validates :domain, presence: true, uniqueness: true, domain: true
+ scope :parents, -> { where(parent_id: nil) }
+
# Used for adding multiple blocks at once
attr_accessor :other_domains
diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb
index 5ed4d2a846..416ae38382 100644
--- a/app/models/ip_block.rb
+++ b/app/models/ip_block.rb
@@ -17,6 +17,7 @@ class IpBlock < ApplicationRecord
CACHE_KEY = 'blocked_ips'
include Expireable
+ include InetContainer
include Paginable
enum :severity, {
diff --git a/app/models/relay.rb b/app/models/relay.rb
index f652b4864b..1a8fdebc7f 100644
--- a/app/models/relay.rb
+++ b/app/models/relay.rb
@@ -25,6 +25,10 @@ class Relay < ApplicationRecord
alias enabled? accepted?
+ def to_log_human_identifier
+ inbox_url
+ end
+
def enable!
activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
payload = Oj.dump(follow_activity(activity_id))
diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb
index 27f0cbd280..cb49e90705 100644
--- a/app/models/scheduled_status.rb
+++ b/app/models/scheduled_status.rb
@@ -15,6 +15,7 @@ class ScheduledStatus < ApplicationRecord
TOTAL_LIMIT = 300
DAILY_LIMIT = 25
+ MINIMUM_OFFSET = 5.minutes.freeze
belongs_to :account, inverse_of: :scheduled_statuses
has_many :media_attachments, inverse_of: :scheduled_status, dependent: :nullify
@@ -26,7 +27,7 @@ class ScheduledStatus < ApplicationRecord
private
def validate_future_date
- errors.add(:scheduled_at, I18n.t('scheduled_statuses.too_soon')) if scheduled_at.present? && scheduled_at <= Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET
+ errors.add(:scheduled_at, I18n.t('scheduled_statuses.too_soon')) if scheduled_at.present? && scheduled_at <= Time.now.utc + MINIMUM_OFFSET
end
def validate_total_limit
diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb
index 31f18fd7ef..d99ecf8adb 100644
--- a/app/models/session_activation.rb
+++ b/app/models/session_activation.rb
@@ -30,6 +30,8 @@ class SessionActivation < ApplicationRecord
DEFAULT_SCOPES = %w(read write follow).freeze
+ scope :latest, -> { order(id: :desc) }
+
class << self
def active?(id)
id && exists?(session_id: id)
@@ -48,7 +50,7 @@ class SessionActivation < ApplicationRecord
end
def purge_old
- order('created_at desc').offset(Rails.configuration.x.max_session_activations).destroy_all
+ latest.offset(Rails.configuration.x.max_session_activations).destroy_all
end
def exclusive(id)
diff --git a/app/models/software_update.rb b/app/models/software_update.rb
index 80ea493eb3..391fa2d4a6 100644
--- a/app/models/software_update.rb
+++ b/app/models/software_update.rb
@@ -24,7 +24,7 @@ class SoftwareUpdate < ApplicationRecord
class << self
def check_enabled?
- ENV['UPDATE_CHECK_URL'] != ''
+ Rails.configuration.x.mastodon.software_update_url.present?
end
def pending_to_a
diff --git a/app/models/status.rb b/app/models/status.rb
index 62744ca05d..9fed69be96 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -163,6 +163,7 @@ class Status < ApplicationRecord
scope :distributable_visibility, -> { where(visibility: %i(public public_unlisted login unlisted)) }
scope :distributable_visibility_for_anonymous, -> { where(visibility: %i(public public_unlisted unlisted)) }
scope :list_eligible_visibility, -> { where(visibility: %i(public public_unlisted login unlisted private)) }
+ scope :not_direct_visibility, -> { where.not(visibility: :direct) }
after_create_commit :trigger_create_webhooks
after_update_commit :trigger_update_webhooks
diff --git a/app/models/user.rb b/app/models/user.rb
index a2fbd6ac08..1255aebb4c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -130,7 +130,7 @@ class User < ApplicationRecord
scope :signed_in_recently, -> { where(current_sign_in_at: ACTIVE_DURATION.ago..) }
scope :not_signed_in_recently, -> { where(current_sign_in_at: ...ACTIVE_DURATION.ago) }
scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) }
- scope :matches_ip, ->(value) { left_joins(:ips).where('user_ips.ip <<= ?', value).group('users.id') }
+ scope :matches_ip, ->(value) { left_joins(:ips).merge(IpBlock.contained_by(value)).group('users.id') }
before_validation :sanitize_role
before_create :set_approved
@@ -363,7 +363,7 @@ class User < ApplicationRecord
Doorkeeper::AccessGrant.by_resource_owner(self).update_all(revoked_at: Time.now.utc)
Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch|
- batch.update_all(revoked_at: Time.now.utc)
+ batch.touch_all(:revoked_at)
Web::PushSubscription.where(access_token_id: batch).delete_all
# Revoke each access token for the Streaming API, since `update_all``
@@ -467,7 +467,7 @@ class User < ApplicationRecord
end
def sign_up_from_ip_requires_approval?
- sign_up_ip.present? && IpBlock.severity_sign_up_requires_approval.exists?(['ip >>= ?', sign_up_ip.to_s])
+ sign_up_ip.present? && IpBlock.severity_sign_up_requires_approval.containing(sign_up_ip.to_s).exists?
end
def sign_up_email_requires_approval?
diff --git a/app/models/user_ip.rb b/app/models/user_ip.rb
index a6da2c0740..25aa81ccd4 100644
--- a/app/models/user_ip.rb
+++ b/app/models/user_ip.rb
@@ -11,6 +11,7 @@
class UserIp < ApplicationRecord
include DatabaseViewRecord
+ include InetContainer
self.primary_key = :user_id
diff --git a/app/serializers/rest/credential_application_serializer.rb b/app/serializers/rest/credential_application_serializer.rb
index bfec7d03e8..0532390c9a 100644
--- a/app/serializers/rest/credential_application_serializer.rb
+++ b/app/serializers/rest/credential_application_serializer.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class REST::CredentialApplicationSerializer < REST::ApplicationSerializer
- attributes :client_id, :client_secret
+ attributes :client_id, :client_secret, :client_secret_expires_at
def client_id
object.uid
@@ -10,4 +10,10 @@ class REST::CredentialApplicationSerializer < REST::ApplicationSerializer
def client_secret
object.secret
end
+
+ # Added for future forwards compatibility when we may decide to expire OAuth
+ # Applications. Set to zero means that the client_secret never expires.
+ def client_secret_expires_at
+ 0
+ end
end
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index 44ba50ae39..58cfc6b050 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -6,8 +6,6 @@ class PostStatusService < BaseService
include DtlHelper
include NgRuleHelper
- MIN_SCHEDULE_OFFSET = 5.minutes.freeze
-
class UnexpectedMentionsError < StandardError
attr_reader :accounts
diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb
index 16b242d25e..0643390384 100644
--- a/app/services/software_update_check_service.rb
+++ b/app/services/software_update_check_service.rb
@@ -27,7 +27,7 @@ class SoftwareUpdateCheckService < BaseService
end
def api_url
- ENV.fetch('UPDATE_CHECK_URL', 'https://kmy.blue/update-check')
+ Rails.configuration.x.mastodon.software_update_url
end
def version
diff --git a/app/services/unallow_domain_service.rb b/app/services/unallow_domain_service.rb
index bdc71b1c08..bbe9571450 100644
--- a/app/services/unallow_domain_service.rb
+++ b/app/services/unallow_domain_service.rb
@@ -12,7 +12,7 @@ class UnallowDomainService < BaseService
private
def suspend_accounts!(domain)
- Account.where(domain: domain).in_batches.update_all(suspended_at: Time.now.utc)
+ Account.where(domain: domain).in_batches.touch_all(:suspended_at)
AfterUnallowDomainWorker.perform_async(domain)
end
end
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 2b4d02fa67..c3b7933293 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -16,7 +16,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: @time_period.last,
- href: admin_accounts_path(origin: 'local'),
+ href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'local') : nil,
label: t('admin.dashboard.new_users'),
measure: 'new_users',
start_at: @time_period.first
@@ -24,7 +24,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: @time_period.last,
- href: admin_accounts_path(origin: 'local'),
+ href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'local') : nil,
label: t('admin.dashboard.active_users'),
measure: 'active_users',
start_at: @time_period.first
@@ -39,7 +39,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: @time_period.last,
- href: admin_reports_path,
+ href: current_user.can?(:manage_reports) ? admin_reports_path : nil,
label: t('admin.dashboard.opened_reports'),
measure: 'opened_reports',
start_at: @time_period.first
@@ -47,7 +47,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: @time_period.last,
- href: admin_reports_path(resolved: '1'),
+ href: current_user.can?(:manage_reports) ? admin_reports_path(resolved: '1') : nil,
label: t('admin.dashboard.resolved_reports'),
measure: 'resolved_reports',
start_at: @time_period.first
diff --git a/app/views/admin/instances/_dashboard.html.haml b/app/views/admin/instances/_dashboard.html.haml
index ef8500103b..16dcb051a2 100644
--- a/app/views/admin/instances/_dashboard.html.haml
+++ b/app/views/admin/instances/_dashboard.html.haml
@@ -7,7 +7,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: period_end_at,
- href: admin_accounts_path(origin: 'remote', by_domain: instance_domain),
+ href: current_user.can?(:manage_users) ? admin_accounts_path(origin: 'remote', by_domain: instance_domain) : nil,
label: t('admin.instances.dashboard.instance_accounts_measure'),
measure: 'instance_accounts',
params: { domain: instance_domain },
@@ -43,7 +43,7 @@
.dashboard__item
= react_admin_component :counter,
end_at: period_end_at,
- href: admin_reports_path(by_target_domain: instance_domain),
+ href: current_user.can?(:manage_reports) ? admin_reports_path(by_target_domain: instance_domain) : nil,
label: t('admin.instances.dashboard.instance_reports_measure'),
measure: 'instance_reports',
params: { domain: instance_domain },
diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb
index 14397bfa93..ef68890230 100644
--- a/app/workers/scheduler/scheduled_statuses_scheduler.rb
+++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb
@@ -27,7 +27,7 @@ class Scheduler::ScheduledStatusesScheduler
end
def due_statuses
- ScheduledStatus.where(scheduled_at: ..Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET)
+ ScheduledStatus.where(scheduled_at: ..time_due_at)
end
def expired_statuses
@@ -41,7 +41,7 @@ class Scheduler::ScheduledStatusesScheduler
end
def due_announcements
- Announcement.unpublished.where('scheduled_at IS NOT NULL AND scheduled_at <= ?', Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET)
+ Announcement.unpublished.where('scheduled_at IS NOT NULL AND scheduled_at <= ?', time_due_at)
end
def unpublish_expired_announcements!
@@ -51,4 +51,8 @@ class Scheduler::ScheduledStatusesScheduler
def expired_announcements
Announcement.published.where('ends_at IS NOT NULL AND ends_at <= ?', Time.now.utc)
end
+
+ def time_due_at
+ Time.now.utc + ScheduledStatus::MINIMUM_OFFSET
+ end
end
diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb
index 824e7b5940..3629904fa7 100644
--- a/app/workers/web/push_notification_worker.rb
+++ b/app/workers/web/push_notification_worker.rb
@@ -13,6 +13,8 @@ class Web::PushNotificationWorker
@subscription = Web::PushSubscription.find(subscription_id)
@notification = Notification.find(notification_id)
+ return if @notification.updated_at < TTL.ago
+
# Polymorphically associated activity could have been deleted
# in the meantime, so we have to double-check before proceeding
return unless @notification.activity.present? && @subscription.pushable?(@notification)
diff --git a/config.ru b/config.ru
index afd13e2112..842bccc340 100644
--- a/config.ru
+++ b/config.ru
@@ -2,5 +2,6 @@
# This file is used by Rack-based servers to start the application.
-require File.expand_path('config/environment', __dir__)
+require_relative 'config/environment'
+
run Rails.application
diff --git a/config/application.rb b/config/application.rb
index f94366d36f..cfeed02e98 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -52,8 +52,6 @@ require_relative '../lib/action_dispatch/remote_ip_extensions'
require_relative '../lib/stoplight/redis_data_store_extensions'
require_relative '../lib/active_record/database_tasks_extensions'
require_relative '../lib/active_record/batches'
-require_relative '../lib/active_record/with_recursive'
-require_relative '../lib/arel/union_parenthesizing'
require_relative '../lib/simple_navigation/item_extensions'
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
@@ -61,10 +59,7 @@ Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
module Mastodon
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 7.1
-
- # Explicitly set the cache format version to align with Rails version
- config.active_support.cache_format_version = 7.1
+ config.load_defaults 7.2
# Please, add to the `ignore` list any other `lib` subdirectories that do
# not contain `.rb` files, or that should not be reloaded or eager loaded.
@@ -110,6 +105,7 @@ module Mastodon
end
config.x.captcha = config_for(:captcha)
+ config.x.mastodon = config_for(:mastodon)
config.x.translation = config_for(:translation)
config.to_prepare do
diff --git a/config/environments/development.rb b/config/environments/development.rb
index f5f22a3c1f..8533935a88 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -37,11 +37,6 @@ Rails.application.configure do
config.action_controller.forgery_protection_origin_check = ENV['DISABLE_FORGERY_REQUEST_PROTECTION'].nil?
- ActiveSupport::Logger.new($stdout).tap do |logger|
- logger.formatter = config.log_formatter
- config.logger = ActiveSupport::TaggedLogging.new(logger)
- end
-
# Generate random VAPID keys
Webpush.generate_key.tap do |vapid_key|
config.x.vapid_private_key = vapid_key.private_key
@@ -51,6 +46,8 @@ Rails.application.configure do
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
# Print deprecation notices to the Rails logger.
@@ -89,6 +86,9 @@ Rails.application.configure do
# Raise error when a before_action's only/except options reference missing actions.
config.action_controller.raise_on_missing_callback_actions = true
+
+ # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
+ config.generators.apply_rubocop_autocorrect_after_generate!
end
Redis.raise_deprecations = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 1cf752f3b2..6d4c30cd20 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -17,7 +17,6 @@ Rails.application.configure do
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
- config.action_controller.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present?
# Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
# key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
@@ -26,8 +25,11 @@ Rails.application.configure do
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
+ # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.
+ # config.public_file_server.enabled = false
+
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
- # config.asset_host = "http://assets.example.com"
+ config.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present?
# Specifies the header that your server uses for sending files.
config.action_dispatch.x_sendfile_header = ENV['SENDFILE_HEADER'] if ENV['SENDFILE_HEADER'].present?
@@ -37,6 +39,10 @@ Rails.application.configure do
# Allow to specify public IP of reverse proxy if it's needed
config.action_dispatch.trusted_proxies = ENV['TRUSTED_PROXY_IP'].split(/(?:\s*,\s*|\s+)/).map { |item| IPAddr.new(item) } if ENV['TRUSTED_PROXY_IP'].present?
+ # Assume all access to the app is happening through a SSL-terminating reverse proxy.
+ # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
+ # config.assume_ssl = true
+
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
# Skip http-to-https redirect for the default health check endpoint.
@@ -46,14 +52,19 @@ Rails.application.configure do
},
}
- # Info include generic and useful information about system operation, but avoids logging too much
- # information to avoid inadvertent exposure of personally identifiable information (PII). If you
- # want to log everything, set the level to "debug".
- config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info').to_sym
+ # Log to STDOUT by default
+ config.logger = ActiveSupport::Logger.new($stdout)
+ .tap { |logger| logger.formatter = ::Logger::Formatter.new }
+ .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
config.log_tags = [:request_id]
+ # "info" includes generic and useful information about system operation, but avoids logging too much
+ # information to avoid inadvertent exposure of personally identifiable information (PII). If you
+ # want to log everything, set the level to "debug".
+ config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info')
+
# Use a different cache store in production.
config.cache_store = :redis_cache_store, REDIS_CONFIGURATION.cache
@@ -61,6 +72,8 @@ Rails.application.configure do
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "mastodon_production"
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
@@ -87,18 +100,8 @@ Rails.application.configure do
{ key: controller.signature_key_id } if controller.respond_to?(:signed_request?) && controller.signed_request?
end
- # Use a different logger for distributed setups.
- # require "syslog/logger"
- # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
-
- # Log to STDOUT by default
- config.logger = ActiveSupport::Logger.new($stdout)
- .tap { |logger| logger.formatter = ::Logger::Formatter.new }
- .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
-
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
-
config.action_mailer.perform_caching = false
# E-mails
diff --git a/config/environments/test.rb b/config/environments/test.rb
index eb29ab1e17..5406eac9ec 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -19,8 +19,6 @@ Rails.application.configure do
# loading is working properly before deploying your code.
config.eager_load = ENV['CI'].present?
- config.assets_digest = false
-
# Show full error reports and disable caching.
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
@@ -32,6 +30,8 @@ Rails.application.configure do
# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
config.action_mailer.default_options = { from: 'notifications@localhost' }
@@ -41,6 +41,10 @@ Rails.application.configure do
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
+ # Unlike controllers, the mailer instance doesn't have any context about the
+ # incoming request so you'll need to provide the :host parameter yourself.
+ config.action_mailer.default_url_options = { host: 'www.example.com' }
+
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
@@ -58,7 +62,6 @@ Rails.application.configure do
# Raise exceptions for disallowed deprecations.
config.active_support.disallowed_deprecation = :raise
- config.i18n.default_locale = :en
config.i18n.fallbacks = true
# Tell Active Support which deprecation messages to disallow.
diff --git a/config/initializers/allowed_private_addresses.rb b/config/initializers/allowed_private_addresses.rb
new file mode 100644
index 0000000000..65c7af03b4
--- /dev/null
+++ b/config/initializers/allowed_private_addresses.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+Rails.application.configure do
+ config.x.private_address_exceptions = (ENV['ALLOWED_PRIVATE_ADDRESSES'] || '').split(/(?:\s*,\s*|\s+)/).map { |addr| IPAddr.new(addr) }
+end
diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml
index 9c02501eff..08b7c3fa8d 100644
--- a/config/locales/doorkeeper.ro.yml
+++ b/config/locales/doorkeeper.ro.yml
@@ -60,6 +60,7 @@ ro:
error:
title: A apărut o eroare
new:
+ prompt_html: "%{client_name} ar dori să vă acceseze contul. Aprobați această solicitare numai dacă recunoașteți și aveți încredere în această sursă."
review_permissions: Revizuiți permisiunile
title: Autorizare necesară
show:
@@ -82,6 +83,7 @@ ro:
access_denied: Proprietarul de resurse sau serverul de autorizare a refuzat cererea.
credential_flow_not_configured: Fluxul Resurselor de Acreditări Parole a eșuat din cauza faptului că Doorkeeper.configure.resource_owner_from_credentials nu este configurat.
invalid_client: Autentificarea clientului a eșuat din cauza unui client necunoscut, nici o autentificare client inclusă, sau metodă de autentificare nesuportată.
+ invalid_code_challenge_method: Metoda de provocare a codului trebuie să fie S256, simplu nu este acceptată.
invalid_grant: Acordarea autorizației furnizată este invalidă, expirată, revocată, nu corespunde URI-ului de redirecționare folosit în cererea de autorizare, sau a fost eliberat altui client.
invalid_redirect_uri: Uri-ul de redirecționare inclus nu este valid.
invalid_request:
@@ -134,6 +136,7 @@ ro:
media: Atașamente media
mutes: Pus pe silențios
notifications: Notificări
+ profile: Profilul tău Mastodon
push: Notificări push
reports: Rapoarte
search: Căutare
@@ -148,12 +151,23 @@ ro:
scopes:
admin:read: citește toate datele de pe server
admin:read:accounts: citește informații sensibile ale tuturor conturilor
+ admin:read:canonical_email_blocks: citește informații sensibile ale tuturor blocurilor de e-mail canonice
+ admin:read:domain_allows: citește informații sensibile ale tuturor domeniilor permise
+ admin:read:domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu
+ admin:read:email_domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu de e-mail
+ admin:read:ip_blocks: citește informații sensibile ale tuturor blocurilor IP
admin:read:reports: citește informații sensibile din toate rapoartele și conturile raportate
admin:write: modifică toate datele de pe server
admin:write:accounts: efectuează acțiuni de moderare pe conturi
+ admin:write:canonical_email_blocks: efectuează acțiuni de moderare pe blocurile de e-mail canonice
+ admin:write:domain_allows: efectuează acțiuni de moderare pe domeniile permise
+ admin:write:domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu
+ admin:write:email_domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu de e-mail
+ admin:write:ip_blocks: efectuează acțiuni de moderare pe blocurile IP
admin:write:reports: efectuează acțiuni de moderare pe rapoarte
crypto: utilizează criptare la ambele capete
follow: modifică relațiile contului
+ profile: citește doar informațiile de profil ale contului tău
push: primește notificările tale push
read: citește toate datele contului tău
read:accounts: vede informațiile privind conturile
diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml
index ca8271ebf1..3c8b08ff26 100644
--- a/config/locales/doorkeeper.sv.yml
+++ b/config/locales/doorkeeper.sv.yml
@@ -72,7 +72,7 @@ sv:
revoke: Är du säker?
index:
authorized_at: Godkändes den %{date}
- description_html: Dessa applikationer har åtkomst till ditt konto genom API:et. Om det finns applikationer du inte känner igen här, eller om en applikation inte fungerar, kan du återkalla dess åtkomst.
+ description_html: Detta är program som kan komma åt ditt konto med hjälp av API. Om det finns program som du inte känner igen här, eller om ett program är inte fungerar kan du återkalla dess åtkomst.
last_used_at: Användes senast %{date}
never_used: Aldrig använd
scopes: Behörigheter
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 0df31b246f..3a145cbdab 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -21,6 +21,7 @@ el:
one: Ανάρτηση
other: Αναρτήσεις
posts_tab_heading: Αναρτήσεις
+ self_follow_error: Δεν επιτρέπεται να ακολουθήσεις τον δικό σου λογαριασμό
admin:
account_actions:
action: Εκτέλεση ενέργειας
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 89c4e5cce2..22793924c6 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -193,6 +193,7 @@ en:
create_domain_block: Create Domain Block
create_email_domain_block: Create Email Domain Block
create_ip_block: Create IP rule
+ create_relay: Create Relay
create_unavailable_domain: Create Unavailable Domain
create_user_role: Create Role
demote_user: Demote User
@@ -204,14 +205,17 @@ en:
destroy_email_domain_block: Delete Email Domain Block
destroy_instance: Purge Domain
destroy_ip_block: Delete IP rule
+ destroy_relay: Delete Relay
destroy_status: Delete Post
destroy_unavailable_domain: Delete Unavailable Domain
destroy_user_role: Destroy Role
disable_2fa_user: Disable 2FA
disable_custom_emoji: Disable Custom Emoji
+ disable_relay: Disable Relay
disable_sign_in_token_auth_user: Disable Email Token Authentication for User
disable_user: Disable User
enable_custom_emoji: Enable Custom Emoji
+ enable_relay: Enable Relay
enable_sign_in_token_auth_user: Enable Email Token Authentication for User
enable_user: Enable User
force_cw_status: Add CW to Post
@@ -257,6 +261,7 @@ en:
create_domain_block_html: "%{name} blocked domain %{target}"
create_email_domain_block_html: "%{name} blocked email domain %{target}"
create_ip_block_html: "%{name} created rule for IP %{target}"
+ create_relay_html: "%{name} created a relay %{target}"
create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
create_user_role_html: "%{name} created %{target} role"
demote_user_html: "%{name} demoted user %{target}"
@@ -268,14 +273,17 @@ en:
destroy_email_domain_block_html: "%{name} unblocked email domain %{target}"
destroy_instance_html: "%{name} purged domain %{target}"
destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
+ destroy_relay_html: "%{name} deleted the relay %{target}"
destroy_status_html: "%{name} removed post by %{target}"
destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}"
destroy_user_role_html: "%{name} deleted %{target} role"
disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
disable_custom_emoji_html: "%{name} disabled emoji %{target}"
+ disable_relay_html: "%{name} disabled the relay %{target}"
disable_sign_in_token_auth_user_html: "%{name} disabled email token authentication for %{target}"
disable_user_html: "%{name} disabled login for user %{target}"
enable_custom_emoji_html: "%{name} enabled emoji %{target}"
+ enable_relay_html: "%{name} enabled the relay %{target}"
enable_sign_in_token_auth_user_html: "%{name} enabled email token authentication for %{target}"
enable_user_html: "%{name} enabled login for user %{target}"
force_cw_status_html: "%{name} turned post by %{target} cw"
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index 3ade3007f4..1060ee1609 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -1368,6 +1368,44 @@ fo:
merge_long: Varðveit verandi teigarøð og legg nýggjar afturat
overwrite: Skriva omaná
overwrite_long: Legg nýggj teigarøð inn fyri tey verandi
+ overwrite_preambles:
+ blocking_html:
+ one: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontum frá %{filename}.
+ bookmarks_html:
+ one: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} posti frá %{filename}.
+ other: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} postum frá %{filename}.
+ domain_blocking_html:
+ one: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøki frá %{filename}.
+ other: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøkjum frá %{filename}.
+ following_html:
+ one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename} og at gevast at fylgja øðrum.
+ other: Tú ert í ferð við at fylgja upp til %{count} kontum frá %{filename} og at gevast at fylgja øðrum.
+ lists_html:
+ one: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} konta verður løgd afturat nýggjum listum.
+ other: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} kontur verða lagdar afturat nýggjum listum.
+ muting_html:
+ one: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontum frá %{filename}.
+ preambles:
+ blocking_html:
+ one: Tú ert í ferð við at blokera upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at blokera upp til %{count} kontur frá %{filename}.
+ bookmarks_html:
+ one: Tú ert í ferð við at leggja upp til %{count} post frá %{filename} afturat tínum bókamerkjum.
+ other: Tú ert í ferð við at leggja upp til %{count} postar frá %{filename} afturat tínum bókamerkjum.
+ domain_blocking_html:
+ one: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}.
+ other: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}.
+ following_html:
+ one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at fylgja upp til %{count} kontur frá %{filename}.
+ lists_html:
+ one: Tú ert í ferð við at leggja upp til %{count} kontu frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat.
+ other: Tú ert í ferð við at leggja upp til %{count} kontur frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat.
+ muting_html:
+ one: Tú ert í ferð við at doyva upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at doyva upp til %{count} kontur frá %{filename}.
preface: Tú kanst innlesa dátur, sum tú hevur útlisið frá einum øðrum ambætara, so sum listar av fólki, sum tú fylgir ella blokerar.
recent_imports: Feskar innflytingar
states:
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 9e95155110..3e5a1db00e 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -447,6 +447,7 @@ lv:
resolve: Atrisināt domēnu
not_permitted: Nav atļauta
resolved_through_html: Atrisināts, izmantojot %{domain}
+ title: Bloķētie e-pasta domēni
export_domain_allows:
new:
title: Importēt domēnu atļaujas
@@ -872,6 +873,8 @@ lv:
message_html: Tu neesi definējis nevienu servera nosacījumu.
sidekiq_process_check:
message_html: Rindā(s) %{value} nedarbojas neviens Sidekiq process. Lūdzu, pārskati savu Sidekiq konfigurāciju
+ software_version_check:
+ action: Skatīt pieejamos atjauninājumus
software_version_critical_check:
action: Skatīt pieejamos atjauninājumus
message_html: Ir pieejams kritisks Mastodon atjauninājums. Lūdzu, atjaunini to pēc iespējas ātrāk.
@@ -1668,6 +1671,8 @@ lv:
webauthn_authentication: Drošības atslēgas
severed_relationships:
download: Lejupielādēt (%{count})
+ event_type:
+ user_domain_block: Jūs bloķējāt %{target_name}
lost_followers: Zaudētie sekotāji
lost_follows: Zaudētie sekojumi
type: Notikums
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 41b74c8cb4..831f68b24b 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -65,7 +65,7 @@ ru:
demote: Разжаловать
destroyed_msg: Данные %{username} поставлены в очередь на удаление
disable: Заморозка
- disable_sign_in_token_auth: Отключите аутентификацию с помощью маркера электронной почты
+ disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам
disable_two_factor_authentication: Отключить 2FA
disabled: Отключено
display_name: Отображаемое имя
@@ -74,7 +74,7 @@ ru:
email: E-mail
email_status: Статус e-mail
enable: Включить
- enable_sign_in_token_auth: Включите аутентификацию с помощью маркера электронной почты
+ enable_sign_in_token_auth: Включить аутентификацию по e-mail кодам
enabled: Включен
enabled_msg: Учётная запись %{username} успешно разморожена
followers: Подписчики
@@ -147,8 +147,8 @@ ru:
security_measures:
only_password: Только пароль
password_and_2fa: Пароль и 2FA
- sensitive: Отметить как «деликатного содержания»
- sensitized: отмечено как «деликатного характера»
+ sensitive: Деликатный
+ sensitized: отмечено как деликатный контент
shared_inbox_url: URL общих входящих
show:
created_reports: Жалобы, отправленные с этой учётной записи
@@ -166,7 +166,7 @@ ru:
unblock_email: Разблокировать e-mail адрес
unblocked_email_msg: E-mail адрес %{username} разблокирован
unconfirmed_email: Неподтверждённый e-mail
- undo_sensitized: Убрать отметку «деликатного содержания»
+ undo_sensitized: Снять отметку "деликатный"
undo_silenced: Отменить скрытие
undo_suspension: Снять блокировку
unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно
@@ -1316,7 +1316,7 @@ ru:
csv: CSV
domain_blocks: Доменные блокировки
lists: Списки
- mutes: Ваши игнорируете
+ mutes: Ваши игнорируемые
storage: Ваши файлы
featured_tags:
add_new: Добавить
@@ -1439,6 +1439,47 @@ ru:
many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих.
one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename} и отписаться от всех прочих.
other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих.
+ lists_html:
+ few: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунта.
+ many: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов.
+ one: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будет добавлен %{count} аккаунт.
+ other: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов.
+ muting_html:
+ few: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ many: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунта из файла %{filename}.
+ other: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ preambles:
+ blocking_html:
+ few: Вы собираетесь заблокировать %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь заблокировать %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}.
+ bookmarks_html:
+ few: Вы собираетесь добавить %{count} поста из файла %{filename} в свои закладки.
+ many: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки.
+ one: Вы собираетесь добавить %{count} пост из файла %{filename} в свои закладки.
+ other: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки.
+ domain_blocking_html:
+ few: Вы собираетесь заблокировать %{count} домена из файла %{filename}.
+ many: Вы собираетесь заблокировать %{count} доменов из файла %{filename}.
+ one: Вы собираетесь заблокировать %{count} домен из файла %{filename}.
+ other: Вы собираетесь заблокировать %{count} доменов из файла %{filename}.
+ following_html:
+ few: Вы собираетесь подписаться на %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}.
+ lists_html:
+ few: Вы собираетесь добавить %{count} аккаунта из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ many: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ one: Вы собираетесь добавить %{count} аккаунт из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ other: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ muting_html:
+ few: Вы собираетесь начать игнорировать %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь начать игнорировать %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}.
preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла.
recent_imports: Недавно импортированное
states:
@@ -1511,6 +1552,7 @@ ru:
unsubscribe:
action: Да, отписаться
complete: Подписка отменена
+ confirmation_html: Вы точно желаете отписаться от всех уведомления типа «%{type}», доставляемых из сервера Mastodon %{domain} на ваш адрес электронной почты %{email}? Вы всегда сможете подписаться снова в настройках e-mail уведомлений.
emails:
notification_emails:
favourite: любимые электронные письма с уведомлениями
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 0a665fb784..f5be51f9c3 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -9,7 +9,6 @@ ar:
indexable: قد تظهر منشوراتك الموجهة للعامة في نتائج البحث على ماستدون. فالأشخاص الذين تفاعلوا مع منشوراتك قد يكون بمقدورهم البحث عنها بغظ النظر عن ذلك.
note: 'يمكنك @ذكر أشخاص آخرين أو استعمال #الوسوم.'
show_collections: سيستطيع الناس من تصفح متابعيك و متابعاتك. سيرى الأشخاص الذين تتبعهم أنك تتبعهم دون أي شك.
- unlocked: سيتمكن الآخرون من متابعتك دون طلب الموافقة. قم بتعطيله إن كنت ترغب في مراجعة تلك الطلبات يدويا باختيار قبول أو رفض المتابعين الجدد.
account_alias:
acct: ادخِل عنون الحساب username@domain الذي تودّ مغادرته
account_migration:
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 00617c4e3c..997423449d 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -4,7 +4,6 @@ ast:
hints:
account:
note: 'Pues @mentar a otros perfiles o poner #etiquetes.'
- unlocked: Los perfiles van ser a siguite ensin solicitar la to aprobación. Desmarca esta opción si quies revisar les solicitúes de siguimientu y escoyer si aceptales o refugales.
admin_account_action:
text_html: Opcional. Pues usar la sintaxis de los artículos y amestar alvertencies preconfiguraes p'aforrar tiempu
type_html: Escueyi qué facer con %{acct}
diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml
index db6a94f8eb..d7be72b876 100644
--- a/config/locales/simple_form.be.yml
+++ b/config/locales/simple_form.be.yml
@@ -9,7 +9,6 @@ be:
indexable: Вашыя публічныя допісы могуць з'яўляцца ў рэзультатах пошуку Mastodon. Людзі, якія ўзаемадзейнічалі з вашымі допісамі, усё роўна маюць магчымасць іх знаходзіць.
note: 'Вы можаце @згадаць іншых людзей або выкарыстоўваць #хэштэгі.'
show_collections: Людзі змогуць праглядаць спіс вашых падпісак і падпісчыкаў. Людзі, на якіх вы падпісаны ў любым выпадку будуць бачыць, што вы іх чытаеце.
- unlocked: Людзі змогуць сачыць за вамі, не запытваючы пацвярджэння. Зніміце сцяжок, калі вы хочаце праглядаць запыты на падпіску і выбіраць, прымаць ці адхіляць новых падпісчыкаў.
account_alias:
acct: Прызначце карыстальнік@дамен уліковага запісу з якога вы хочаце пераехаць
account_migration:
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 2690f07141..5540942d93 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -9,7 +9,6 @@ bg:
indexable: Вашите обществени публикации може да се появят в резултатите от търсене в Mastodon. Взаимодействалите с публикациите ви може да ги търсят независимо.
note: 'Може да @споменавате други хора или #хаштагове.'
show_collections: Хората ще може да разглеждат през вашите последвания и последователи. Хората, които сте следвали, ще видят, че ги следвате независимо от това.
- unlocked: Хората ще могат да ви последват без изискване на одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи.
account_alias:
acct: Посочете потребителско_име@домейн на акаунта си, от който искате да се преместите
account_migration:
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index c628bebaad..defb13325b 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -9,7 +9,7 @@ ca:
indexable: Els teus tuts públics poden aparèixer en els resultats de cerca de Mastodon. Les persones que han interaccionat amb el teus tuts seran sempre capaços de cercar-los.
note: 'Pots @mencionar altra gent o #etiquetes.'
show_collections: La gent podrà navegar pels teus seguits i seguidors. Qui segueixis sí que veurà que els segueixes.
- unlocked: La gent serà capaç de seguir-te sense sol·licitar-ho. Desmarca si vols revisar les sol·licituds i triar si acceptes o no els nous seguidors.
+ unlocked: Us podran seguir sense la vostra aprovació. Desmarqueu si voleu moderar les peticions de seguiment i decidir quines autoritzeu o denegueu.
account_alias:
acct: Especifica l'usuari@domini del compte des d'on et vols traslladar
account_migration:
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 6242b1ca6e..ef82b3232a 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -9,7 +9,6 @@ cs:
indexable: Vaše veřejné příspěvky se mohou objevit ve výsledcích vyhledávání na Mastodonu. Lidé, kteří s vašimi příspěvky interagovaly, je mohou stále vyhledávat.
note: 'Můžete @zmínit jiné osoby nebo #hashtagy.'
show_collections: Lidé budou moci procházet skrz sledující. Lidé, které sledujete, uvidí, že je sledujete bezohledně.
- unlocked: Lidé vás budou moci sledovat, aniž by vás žádali o schválení. Zrušte zaškrtnutí, pokud chcete zkontrolovat požadavky a zvolte, zda přijmete nebo odmítněte nové následovníky.
account_alias:
acct: Zadejte svůj účet, ze kterého se chcete přesunout jinam, ve formátu přezdívka@doména
account_migration:
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index dedd50504b..5f3ac2818c 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -10,7 +10,6 @@ cy:
indexable: Mae'n bosib y bydd eich postiadau cyhoeddus yn ymddangos yng nghanlyniadau chwilio ar Mastodon. Mae'n bosibl y bydd pobl sydd wedi rhyngweithio â'ch postiadau yn dal i allu eu chwilio.
note: 'Gallwch @grybwyll pobl eraill neu #hashnodau.'
show_collections: Bydd pobl yn gallu pori trwy'r rhai rydych yn eu dilyn a'ch dilynwyr. Bydd y bobl rydych chi'n eu dilyn yn gweld eich bod chi'n eu dilyn beth bynnag.
- unlocked: Bydd pobl yn gallu eich dilyn heb ofyn am ganiatâd. Dad-diciwch os ydych am adolygu ceisiadau dilyn a dewis a ydych am dderbyn neu wrthod dilynwyr newydd.
account_alias:
acct: Rhowch enwdefnyddiwr@parth y cyfrif y hoffech chi symud ohono
account_migration:
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 25cf670ea9..32e8e90b85 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -10,7 +10,7 @@ da:
indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset.
note: 'Du kan @omtale andre personer eller #hashtags.'
show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette.
- unlocked: Folk vil kunne følge dig uden krav om godkendelse. Fjern markeringen, såfremt du ønsker at tjekke Følg-anmodninger og individuelt acceptere eller afvise nye Følgere.
+ unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen.
account_alias:
acct: Angiv brugernavn@domain for den konto, hvorfra du vil flytte
account_migration:
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 9dcac5c160..a04db4b228 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -9,7 +9,6 @@ el:
indexable: Οι δημόσιες δημοσιεύσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης στο Mastodon. Άτομα που έχουν αλληλεπιδράσει με τις δημοσιεύσεις σου μπορεί να είναι σε θέση να τις αναζητήσουν όπως και να 'χει.
note: 'Μπορείς να @επισημάνεις άλλα άτομα ή #ετικέτες.'
show_collections: Οι χρήστες θα είναι σε θέση να περιηγηθούν στα άτομα που ακολουθείς και στους ακόλουθούς σου. Άτομα που ακολουθείς θα βλέπουν ότι τους ακολουθείς όπως και να 'χει.
- unlocked: Οι χρήστες θα είναι σε θέση να σε ακολουθήσουν χωρίς να ζητούν έγκριση. Κατάργησε την επιλογή αν θες να αξιολογείς τα αιτήματα ακολούθησης και να επιλέξεις αν θα αποδεχθείς ή απορρίψεις νέους ακόλουθους.
account_alias:
acct: Όρισε το username@domain του λογαριασμού από τον οποίο θέλεις να μετακινηθείς
account_migration:
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index e20249e6bc..ef252d8aeb 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -9,7 +9,6 @@ en-GB:
indexable: Your public posts may appear in search results on Mastodon. People who have interacted with your posts may be able to search them regardless.
note: 'You can @mention other people or #hashtags.'
show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless.
- unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers.
account_alias:
acct: Specify the username@domain of the account you want to move from
account_migration:
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 9f3b7e7fd1..d8152a7031 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -12,7 +12,7 @@ en:
locked: People will request to follow you and you will be able to either accept or reject new followers.
note: 'You can @mention other people or #hashtags.'
show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless.
- unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers.
+ unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and choose whether to accept or reject new followers.
account_alias:
acct: Specify the username@domain of the account you want to move from
account_migration:
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index f8a5776835..f39eb18f61 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -10,7 +10,7 @@ eo:
indexable: Viaj publikaj afiŝoj povas aperi en serĉrezultoj ĉe Mastodon. Homoj, kiuj interagis kun viaj afiŝoj, eble povos serĉi ilin sendepende.
note: 'Vi povas @mencii aliajn homojn aŭ #haŝetikedoj.'
show_collections: Homoj povos foliumi viajn sekvatojn kaj sekvantojn. Homoj, kiujn vi sekvas, vidos, ke vi sekvas ilin ĉiaokaze.
- unlocked: Homoj povos sekvi vin sen peto de aprobo. Malelektu se vi volas kontroli petojn de sekvado kaj elekti, ĉu akcepti aŭ malakcepti novajn sekvantojn.
+ unlocked: Homoj povos sekvi vin sen peti aprobon. Malmarku ĉu vi volas revizii sekvajn petojn kaj elektu ĉu akcepti aŭ malakcepti novajn sekvantojn.
account_alias:
acct: Specifu la uzantnomon@domajnon de la konto el kiu vi volas translokiĝi
account_migration:
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index 98254c5e99..dada648d5a 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -10,7 +10,7 @@ es-AR:
indexable: Tus mensajes públicos pueden aparecer en los resultados de la búsqueda en Mastodon. La gente que interactuó con tus mensajes puede ser capaz de buscarlos sin importar el momento.
note: 'Podés @mencionar otras cuentas o usar #etiquetas.'
show_collections: La gente podrá navegar a través de tus seguidos y seguidores. Sin embargo, la gente que sigás, sabrá que lo estás haciendo.
- unlocked: La gente podrá seguirte sin solicitar aprobación. Desmarcá si querés revisar las solicitudes de seguimiento y elegir si aceptar o rechazar nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especificá el nombredeusuario@dominio de la cuenta desde la que querés mudarte
account_migration:
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 2b5d22aee8..3c340b3005 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -10,7 +10,7 @@ es-MX:
indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden buscarlas en cualquier momento.
note: 'Puedes @mencionar a otra gente o #hashtags.'
show_collections: Las personas pueden navegar a través de tus seguidos y seguidores. Las personas que te siguen pueden ver que las sigues.
- unlocked: Las personas pueden seguirte sin solicitar la aprobación. No lo selecciones si quieres revisar las solicitudes de seguimiento y elegir si aceptas o rechazas a nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar
account_migration:
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 8bc2c5f65c..a0338a3029 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -10,7 +10,7 @@ es:
indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden ser capaces de buscarlas sin importar su visibilidad.
note: Puedes mencionar a otras personas o etiquetas.
show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo.
- unlocked: Las personas podrán seguirte sin pedir aprobación. Desmarca si deseas revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especifica el nombre_de_usuario@dominio de la cuenta desde donde deseas migrar
account_migration:
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
index a2ebf63b11..690661cd49 100644
--- a/config/locales/simple_form.et.yml
+++ b/config/locales/simple_form.et.yml
@@ -10,7 +10,6 @@ et:
indexable: Sinu avalikud postitused võivad ilmuda Mastodoni otsingutulemustes. Inimesed, kes on sinu postitustele reageerinud, saavad neid otsida nii või naa.
note: 'Saad @mainida teisi inimesi või #silte.'
show_collections: Inimesed saavad sirvida su jälgijaid ja jälgitavaid. Inimesed, keda sa jälgid, näevad seda sõltumata häälestuse valikust.
- unlocked: Inimesed saavad sind jälgima hakata kinnitamist taotlemata. Eemalda märge, kui soovid jälgimistaotlusi üle vaadata ja valida, kas nõustuda või keelduda uute jälgijatega.
account_alias:
acct: Sisesta konto kasutajanimi@domeen, mille soovid siia ümber kolida
account_migration:
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 7647e187ec..f6c4f14915 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -9,7 +9,6 @@ eu:
indexable: Zure argitalpen publikoak bilaketa-emaitzetan ager daitezke Mastodonen. Zure argitalpenekin elkarregin duten jendeak ikusi ahal izango dituzte, hala ere.
note: 'Beste pertsona edo #traola batzuk @aipatu ditzakezu.'
show_collections: Pertsonek zuk jarraitzen dituzunak eta zure jarraitzaileak arakatu ahal izango dute. Jarraitzen dituzun pertsonak jarraitzen dituzula ikusi ahal izando dute, hala ere.
- unlocked: Pertsonek zuri jarraitu ahal izango dizute onarpen-eskaerarik gabe. Desgaitu jarraipen-eskaerak berrikusi nahi badituzu eta hauek onartu edo ez erabaki nahi baduzu.
account_alias:
acct: Zehaztu migrazioaren jatorri den kontuaren erabiltzailea@domeinua
account_migration:
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index f51a4ce8bf..9872de222f 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -10,7 +10,6 @@ fa:
indexable: ممکن است فرستههای عمومیتان در نتیجههای جستوجوی ماستودون ظاهر شود. افرادی که با فرستههایتان تعامل داشتند در هر صورت میتوانند جستوجویشان کنند.
note: 'میتوانید افراد دیگر را @نام برده یا #برچسب بزنید.'
show_collections: افراد خواهند توانست پیگیران و پیگرفته شدههایتان را مرور کنند. افرادی که پیمیگیریدشان در هر صورت خواهند دید که پیمیگیریدشان.
- unlocked: افراد خواهند توانست بدون درخواست تأیید پیبگیرندتان. اگر میخواهید درخواستهای پیگیری را بازبینی کرده و بگزینید که پیگیران جدید را بپذیرید یا رد کنید، علامت را بردارید.
account_alias:
acct: مشخّص کردن username@domain حسابی که میخواهید از آن منتقل شوید
account_migration:
diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml
index d2ce30ec8e..d38aeaa414 100644
--- a/config/locales/simple_form.fr-CA.yml
+++ b/config/locales/simple_form.fr-CA.yml
@@ -9,7 +9,6 @@ fr-CA:
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
- unlocked: Les gens pourront vous suivre sans demander d'approbation. Décochez cette option si vous voulez valider les demandes d'abonnement et choisir d'accepter ou de rejeter les nouveaux abonnés.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte que vous souhaitez faire migrer
account_migration:
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 626032600a..b601bf0b66 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -9,7 +9,6 @@ fr:
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
- unlocked: Les gens pourront vous suivre sans demander d'approbation. Décochez cette option si vous voulez valider les demandes d'abonnement et choisir d'accepter ou de rejeter les nouveaux abonnés.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte à partir duquel vous souhaitez migrer
account_migration:
diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml
index c840342db5..6a37a09201 100644
--- a/config/locales/simple_form.fy.yml
+++ b/config/locales/simple_form.fy.yml
@@ -10,7 +10,6 @@ fy:
indexable: Jo iepenbiere berjochten kinne ferskine yn de sykresultaten op Mastodon. Minsken dy’t reagearre hawwe op jo berjochten kinne se hoe dan ek trochsykje.
note: 'Jo kinne oare minsken @fermelde of #hashtags brûke.'
show_collections: Minsken kinne sjen wa’t jo folgje en wa’t jo folget.
- unlocked: Minsken kinne jo folgje sûnder dêrfoar tastimming freegje te hoegen. Wannear’t jo nije folgers hânmjittich goedkarre wolle, moatte jo dizze opsje deselektearje.
account_alias:
acct: Fermeld de brûkersnamme@domein fan de account fan wêr’t jo ferhúzje wolle
account_migration:
diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml
index f8257a9da9..62d59235bf 100644
--- a/config/locales/simple_form.ga.yml
+++ b/config/locales/simple_form.ga.yml
@@ -10,7 +10,6 @@ ga:
indexable: Seans go mbeidh do phostálacha poiblí le feiceáil sna torthaí cuardaigh ar Mastodon. Seans go mbeidh daoine a d’idirghníomhaigh le do phostálacha in ann iad a chuardach beag beann ar.
note: 'Is féidir leat @trá a dhéanamh ar dhaoine eile nó #hashtags.'
show_collections: Beidh daoine in ann brabhsáil trí do seo a leanas agus do leanúna. Feicfidh na daoine a leanann tú go leanann tú iad beag beann ar.
- unlocked: Beidh daoine in ann tú a leanúint gan cead a iarraidh. Díthiceáil an dteastaíonn uait athbhreithniú a dhéanamh ar iarratais leantacha agus roghnaigh cé acu an nglacfaidh nó an diúltóidh tú do leantóirí nua.
account_alias:
acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú uaidh
account_migration:
diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml
index af1f06a316..4083469b63 100644
--- a/config/locales/simple_form.gd.yml
+++ b/config/locales/simple_form.gd.yml
@@ -10,7 +10,6 @@ gd:
indexable: Faodaidh na postaichean poblach agad a nochdadh am measg toraidhean luirg air Mastodon. ’S urrainn dhan fheadhainn a rinn eadar-ghabhail leis na postaichean agad lorg annta air a h-uile dòigh.
note: "’S urrainn dhut @iomradh a thoirt air càch no air #tagaicheanHais."
show_collections: "’S urrainn do chàch na dàimhean leantainn agad a rùrachadh. Chì daoine a leanas tu gu bheil thu ’gan leantainn air a h-uile dòigh."
- unlocked: "’S urrainnear do leantainn gun aontachadh iarraidh. Thoir a’ chromag far a’ bhogsa nam bu mhiann leat lèirmheas a dhèanamh air na h-iarrtasan leantainn agus taghadh an aontaich thu ri neach-leantainn ùr no an dhiùlt thu iad."
account_alias:
acct: Sònraich ainm-cleachdaiche@àrainn dhen chunntas a tha thu airson imrich uaithe
account_migration:
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 85fa74f1ed..5ac75aafb1 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -9,7 +9,6 @@ ia:
indexable: Tu messages public pote apparer in le resultatos de recerca sur Mastodon. Le personas qui ha interagite con tu messages pote cercar los in omne caso.
note: 'Tu pote @mentionar altere personas o #hashtags.'
show_collections: Le gente potera percurrer le listas de personas que tu seque e qui te seque. Le personas que tu seque videra que tu les seque in omne caso.
- unlocked: Le personas potera sequer te sin requestar approbation. Dismarca si tu vole revider le requestas de sequimento e seliger si acceptar o rejectar nove sequitores.
account_alias:
acct: Specifica le nomine_de_usator@dominio del conto desde le qual tu vole migrar
account_migration:
diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml
index 771e341616..56e737172d 100644
--- a/config/locales/simple_form.ie.yml
+++ b/config/locales/simple_form.ie.yml
@@ -9,7 +9,6 @@ ie:
indexable: Tui public postas posse aparir in sercha-resultates sur Mastodon. E in omni casu, tis qui ha interactet con tui postas va posser serchar e trovar les.
note: 'Tu posse @mentionar altri persones o #hashtags.'
show_collections: Gente va posser navigar tra tui sequentes e sequitores. Gente quem tu seque va vider que tu seque les sin egarda.
- 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.
account_alias:
acct: Specificar li usatornomine@dominia del conto ex quel tu vole translocar
account_migration:
diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml
index 1df5008195..631e7182fd 100644
--- a/config/locales/simple_form.io.yml
+++ b/config/locales/simple_form.io.yml
@@ -9,7 +9,6 @@ io:
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:
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index c36fce36f7..b1fb6c3fc1 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -10,7 +10,7 @@ it:
indexable: I tuoi post pubblici potrebbero apparire nei risultati di ricerca su Mastodon. Le persone che hanno interagito con i tuoi post potrebbero essere in grado di cercarli anche se non hai attivato questa impostazione.
note: 'Puoi @menzionare altre persone o usare gli #hashtags.'
show_collections: Le persone saranno in grado di navigare attraverso i tuoi seguaci e seguaci. Le persone che segui vedranno che li seguirai indipendentemente dalle tue impostazioni.
- unlocked: Le persone saranno in grado di seguirti senza richiedere l'approvazione. Deseleziona se vuoi controllare le richieste di seguirti e scegli se accettare o rifiutare nuovi follower.
+ unlocked: Le persone potranno seguirti senza richiedere l'approvazione. Deseleziona questa opzione, se vuoi rivedere le richieste per poterti seguire e scegliere se accettare o rifiutare i nuovi seguaci.
account_alias:
acct: Indica il nomeutente@dominio dell'account dal quale vuoi trasferirti
account_migration:
diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml
index de37005312..712c2f4e8a 100644
--- a/config/locales/simple_form.lad.yml
+++ b/config/locales/simple_form.lad.yml
@@ -9,7 +9,6 @@ lad:
indexable: Tus publikasyones publikas pueden apareser en rezultados de bushkeda en Mastodon. Personas ke enteraktuaron kon tus publikasyones syempre pueden bushkarlas inkluzo si trokes esta preferensya.
note: 'Puedes @enmentar a otra djente o #etiketas.'
show_collections: Otra djente podra ver tus segidos i suivantes. Personas a las kualas siges siempre podran ver que las estas sigiendo.
- unlocked: Djente va poder segirte sin solisitar tu achetasyon. Deseleksyona si keres revizar solisitasyones de segimyento i dechidir si keres achetar o refuzar a muevos suivantes.
account_alias:
acct: Espesifika tu nombre de utilizador@domeno del kuento de ande keres migrar
account_migration:
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index de3dd2f31c..d9204efaaa 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -10,7 +10,6 @@ lt:
indexable: Tavo vieši įrašai gali būti rodomi Mastodon paieškos rezultatuose. Žmonės, kurie bendravo su tavo įrašais, gali jų ieškoti nepriklausomai nuo to.
note: 'Gali @paminėti kitus žmones arba #saitažodžius.'
show_collections: Žmonės galės peržiūrėti tavo sekimus ir sekėjus. Žmonės, kuriuos seki, matys, kad juos seki, nepaisant to.
- unlocked: Žmonės galės tave sekti nepaprašę patvirtinimo. Panaikink žymėjimą, jei nori peržiūrėti sekimo prašymus ir pasirinkti, ar priimti, ar atmesti naujus sekėjus.
account_alias:
acct: Nurodyk paskyros, iš kurios nori perkelti, naudotojo vardą@domeną
account_migration:
diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml
index 106e29d2de..da8dac3c22 100644
--- a/config/locales/simple_form.lv.yml
+++ b/config/locales/simple_form.lv.yml
@@ -10,7 +10,6 @@ lv:
indexable: Tavi publiskie ieraksti var tikt parādīti Mastodon meklēšanas iznākumā. Cilvēki, kuri ir mijiedarbojušies ar Taviem ierakstiem, var tos meklēt neatkarīgi no tā.
note: 'Tu vari @minēt citus cilvēkus vai #mirkļbirkas.'
show_collections: Cilvēki varēs pārlūkot Tavus sekotājus un sekojamos. Cilvēki, kuriem Tu seko, redzēs, ka Tu seko viņiem neatkarīgi no tā.
- unlocked: Cilvēki varēs tev sekot, neprasot apstiprinājumu. Noņem atzīmi, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, pieņemt vai noraidīt jaunus sekotājus.
account_alias:
acct: Norādi konta lietotājvārdu@domēnu, no kura vēlies pārvākties
account_migration:
@@ -183,7 +182,7 @@ lv:
autofollow: Uzaicini sekot tavam kontam
avatar: Profila attēls
bot: Šis ir automatizēts konts
- chosen_languages: Filtrēt valodas
+ chosen_languages: Atlasīt valodas
confirm_new_password: Apstiprināt jauno paroli
confirm_password: Apstiprināt paroli
context: Filtrēt kontekstus
diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml
index ecc3588d67..96c6002aa4 100644
--- a/config/locales/simple_form.ms.yml
+++ b/config/locales/simple_form.ms.yml
@@ -9,7 +9,6 @@ ms:
indexable: Kiriman awam anda mungkin muncul dalam hasil carian di Mastodon. Orang yang telah berinteraksi dengan kiriman anda mungkin boleh mencarinya.
note: 'Anda boleh @menyebut orang lain atau #hashtags.'
show_collections: Orang akan dapat menyemak imbas ikutan dan pengikut anda. Orang yang anda ikuti akan melihat bahawa anda tetap mengikuti mereka.
- unlocked: Orang akan dapat mengikuti anda tanpa meminta kelulusan. Nyahtanda jika anda ingin menyemak permintaan ikutan dan pilih sama ada untuk menerima atau menolak pengikut baharu.
account_alias:
acct: Tentukan namapengguna@domain akaun yang ingin anda alihkan daripada
account_migration:
diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml
index abcb11bdaa..474b0f6cb4 100644
--- a/config/locales/simple_form.my.yml
+++ b/config/locales/simple_form.my.yml
@@ -9,7 +9,6 @@ my:
indexable: သင်၏ အများမြင်ပို့စ်များသည် Mastodon ရှိ ရှာဖွေမှုရလဒ်များတွင် ပေါ်လာနိုင်သည်။ သင့်ပို့စ်များမှတစ်ဆင့် အပြန်အလှန်တုံ့ပြန်ပြီး ရှာဖွေနိုင်ပါမည်။
note: 'သင်သည် အခြားသူများ သို့မဟုတ် #hashtag များကို @mention ဖြင့် ဖော်ပြနိုင်သည်။'
show_collections: သင်စောင့်ကြည့်သူများနှင့် သင့်ကိုစောင့်ကြည့်သူများမှတစ်ဆင့် ရှာဖွေနိုင်မည်ဖြစ်သည်။ သင်စောင့်ကြည့်သူများသည် သင်သူတို့ကို မည်သို့စောင့်ကြည့်သည်ကို တွေ့ရလိမ့်မည်။
- unlocked: ခွင့်ပြုချက်မတောင်းဘဲ လူများက သင့်ကိုစောင့်ကြည့်နိုင်ပါမည်။ စောင့်ကြည့်ရန်အတွက် တောင်းဆိုချက်များထားရှိလိုပါက အမှန်ခြစ်ဖြုတ်ပြီး စောင့်ကြည့်သူသစ်များကို လက်ခံခြင်း သို့မဟုတ် ငြင်းပယ်ခြင်းလည်း အမှန်ခြစ်ဖြုတ်နိုင်ပါသည်။
account_alias:
acct: ပြောင်းရွှေ့မည့်အကောင့်မှ username@domain ကို သတ်မှတ်ပါ
account_migration:
diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml
index 46b7af4bdb..008af2c5ac 100644
--- a/config/locales/simple_form.nn.yml
+++ b/config/locales/simple_form.nn.yml
@@ -10,7 +10,6 @@ nn:
indexable: Dei offentlege innlegga dine kan dukka opp i søkjeresultat på Mastodon. Folk som har reagert på oinnlegga dine kan uansett søkja gjennom dei.
note: 'Du kan @nemne folk eller #emneknaggar.'
show_collections: Andre kan sjå kven du fylgjer og kven som fylgjer deg. Dei du fylgjer kan alltid sjå at du fylgjer dei.
- unlocked: Alle kan fylgja deg utan å måtta be om det. Vel bort dersom du vil gå gjennom førespurnader om å fylgja deg og seia ja eller nei til kvar av dei.
account_alias:
acct: Angi brukarnamn@domene til brukaren du ynskjer å flytta frå
account_migration:
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index 73ba17cd4c..fb7a808876 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -9,7 +9,6 @@
indexable: Dine offentlige innlegg kan vises i søkeresultat på Mastodon. Personer som har samhandlet med innleggene dine kan finne de uansett.
note: 'Du kan @nevne andre eller #emneknagger.'
show_collections: Folk vil kunne bla gjennom de du følger og dine følgere. Folk du følger vil uansett se at du følger dem.
- unlocked: Folk vil kunne følge deg uten å be om godkjenning. Fjern markeringen om du vil gjennomgå følge-forespørsler og velge om du vil akseptere eller avvise nye følgere.
account_alias:
acct: Spesifiser brukernavn@domene til kontoen du vil flytte fra
account_migration:
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index c5ff55c15d..4fba45098d 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -10,7 +10,6 @@ pl:
indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy wchodzili w interakcje z twoimi wpisami będą mogli je znaleźć niezależnie od tego ustawienia.
note: 'Możesz @wspomnieć użytkowników albo #hasztagi.'
show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli.
- unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie.
account_alias:
acct: Określ nazwę@domenę konta z którego chcesz się przenieść
account_migration:
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 16d7cfe445..0c6be63aaa 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -10,7 +10,6 @@ pt-BR:
indexable: Suas publicações públicas podem aparecer nos resultados da pesquisa em Mastodon. As pessoas que interagiram com suas publicações podem conseguir pesquisá-las independentemente disso.
note: 'Você pode @mencionar outras pessoas ou #hashtags.'
show_collections: As pessoas poderão navegar entre os seus seguidores e seguidores. As pessoas que você segue verão que você as segue independentemente disso.
- unlocked: As pessoas poderão te seguir sem pedir aprovação. Desmarque se você deseja revisar pedidos e escolher se aceita ou rejeita novos seguidores.
account_alias:
acct: Especifique o usuário@domínio de onde veio
account_migration:
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 3b606df032..a172ed2752 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -9,7 +9,6 @@ pt-PT:
indexable: As suas mensagens públicas podem aparecer nos resultados da pesquisa no Mastodon. Independentemente disso, as pessoas que interagiram com as suas publicações podem ser capazes de as pesquisar.
note: 'Pode @mencionar outras pessoas ou #hashtags.'
show_collections: As pessoas podem navegar pelas listas das pessoas que segue e dos seus seguidores. Independentemente disso, as pessoas que segue verão que você as segue.
- unlocked: As pessoas podem segui-lo/a sem pedir a sua aprovação. Desmarque se quiser rever os pedidos para seguir e escolher se aceita ou rejeita os novos seguidores.
account_alias:
acct: Especifique o utilizador@domínio da conta de onde você deseja migrar
account_migration:
diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml
index 458638ddec..63dcf91343 100644
--- a/config/locales/simple_form.ro.yml
+++ b/config/locales/simple_form.ro.yml
@@ -3,11 +3,14 @@ ro:
simple_form:
hints:
account:
+ attribution_domains_as_text: Una pe linie. Protejează împotriva atribuirilor false.
discoverable: Este posibil ca postările și profilul tău să fie recomandate în diferite zone ale Mastodon, iar profilul tău ar poate fi sugerat altor utilizatori.
+ display_name: Numele dvs. complet sau numele dvs. amuzant.
fields: Pagina ta principală, pronumele tale, vârsta, sau orice îți dorești.
indexable: Postările tale publice pot apărea în rezultatele căutărilor pe Mastodon. Persoanele care au interacționat cu postările tale vor putea să le caute oricând.
note: 'Poți @menționa alte persoane sau #hashtag-uri.'
- unlocked: Alte persoane vă vor putea urmări fără a solicita aprobare. Debifați dacă doriți să revizuiți cererile și să alegeți dacă doriți să acceptați sau să respingeți noii urmăritori.
+ show_collections: Oamenii vor putea să răsfoiască urmăriți și urmăritorii dvs. Oamenii pe care îi urmăriți vor vedea că îi urmăriți indiferent.
+ unlocked: Alte persoane vă vor putea urmări fără a solicita aprobare. Debifați dacă doriți să revizuiți cererile de urmărire și să alegeți dacă doriți să acceptați sau să respingeți noii urmăritori.
account_alias:
acct: Specificați numele de utilizator@domeniu al contului de la care doriți să treceți
account_migration:
@@ -20,6 +23,12 @@ ro:
send_email_notification: Utilizatorul va primi o explicație cu privire la ceea ce sa întâmplat cu contul lui
text_html: Opțional. Poți utiliza sintaxe. Poți adăuga avertismente predefinite pentru a salva timp
type_html: Alege ce se întâmplă cu %{acct}
+ types:
+ disable: Împiedicați utilizatorul să-și folosească contul, dar nu ștergeți sau ascundeți conținutul acestuia.
+ none: Utilizați acest lucru pentru a trimite o avertizare utilizatorului, fără a declanșa nicio altă acțiune.
+ sensitive: Forțează toate atașamentele media ale acestui utilizator să fie marcate ca sensibile.
+ silence: Împiedicați utilizatorul să poată posta cu vizibilitate publică, ascundeți postările și notificările de la persoanele care nu le urmăresc. Închide toate rapoartele pentru acest cont.
+ suspend: Preveniți orice interacțiune din sau către acest cont și ștergeți conținutul acestuia. Reversibil în 30 de zile. Închide toate rapoartele pentru acest cont.
warning_preset_id: Opțional. Poți adăuga text personalizat la sfârșitul presetului
announcement:
all_day: Când este bifat, numai datele intervalului de timp vor fi afișate
@@ -27,6 +36,8 @@ ro:
scheduled_at: Lăsați necompletat pentru a publica anunțul imediat
starts_at: Opțional. În cazul în care anunțul tău este legat de un anumit interval de timp
text: Poți folosi sintaxa de postare. Te rugăm să fii atent la spațiul pe care anunțul îl va ocupa pe ecranul utilizatorului
+ appeal:
+ text: Puteți contesta un avertisment o singură dată
defaults:
autofollow: Persoanele care se înregistrează datorită invitației tale te vor urmări automat
avatar: WEBP, PNG, GIF sau JPG. Cel mult %{size}. Va fi redimensionată la %{dimensions}px
@@ -65,18 +76,64 @@ ro:
actions:
hide: Ascunde complet conținutul filtrat, ca și cum nu ar exista
warn: Ascunde conținutul filtrat în spatele unui avertisment care menționează titlul filtrului
+ form_admin_settings:
+ activity_api_enabled: Numărul de postări publicate local, utilizatori activi și înregistrări noi în grupe săptămânale
+ app_icon: WEBP, PNG, GIF sau JPG. Înlocuiește pictograma implicită a aplicației pe dispozitivele mobile cu o pictogramă personalizată.
+ backups_retention_period: Utilizatorii au posibilitatea de a genera arhive ale postărilor lor pentru a le descărca mai târziu. Când este setat la o valoare pozitivă, aceste arhive vor fi șterse automat din spațiul dvs. de stocare după numărul de zile specificat.
+ bootstrap_timeline_accounts: Aceste conturi vor fi fixate în partea de sus a recomandărilor de urmărire ale noilor utilizatori.
+ closed_registrations_message: Afișat când înscrierile sunt închise
+ content_cache_retention_period: Toate postările de pe alte servere (inclusiv amplificarea și răspunsurile) vor fi șterse după numărul specificat de zile, fără a ține cont de interacțiunea utilizatorului local cu acele postări. Aceasta include postările în care un utilizator local le-a marcat ca marcaje sau favorite. Mențiunile private între utilizatorii din diferite instanțe se vor pierde și vor fi imposibil de restaurat. Utilizarea acestei setări este destinată cazurilor cu scop special și încalcă multe așteptări ale utilizatorilor atunci când este implementată pentru uz general.
+ custom_css: Puteți aplica stiluri personalizate pe versiunea web a Mastodon.
+ favicon: WEBP, PNG, GIF sau JPG. Suprascrie favicon-ul implicit Mastodon cu o pictogramă personalizată.
+ mascot: Suprascrie ilustrația din interfața web avansată.
+ media_cache_retention_period: Fișierele media din postările făcute de utilizatorii la distanță sunt stocate în cache pe serverul dvs. Când este setată la o valoare pozitivă, fișierele media vor fi ștearse după numărul specificat de zile. Dacă datele media sunt solicitate după ce sunt șterse, acestea vor fi re-descărcate, dacă conținutul sursă este încă disponibil. Din cauza restricțiilor cu privire la frecvența cu care cardurile de previzualizare a linkurilor interogează site-urile terțelor părți, se recomandă să setați această valoare la cel puțin 14 zile, sau cardurile de previzualizare a linkurilor nu vor fi actualizate la cerere înainte de această oră.
+ peers_api_enabled: O listă de nume de domenii pe care acest server le-a întâlnit în fediverse. Nu sunt incluse aici date despre dacă vă federați cu un anumit server, doar că serverul dvs. știe despre asta. Acesta este folosit de serviciile care colectează statistici despre federație în sens general.
+ profile_directory: Directorul de profil listează toți utilizatorii care au optat pentru a fi descoperibili.
+ require_invite_text: Când înscrierile necesită aprobare manuală, faceți introducerea textului „De ce doriți să vă alăturați?” obligatorie și nu opțională
+ site_contact_email: Cum vă pot contacta oamenii pentru întrebări juridice sau de asistență.
+ site_contact_username: Cum vă pot contacta oamenii pe Mastodon.
+ site_extended_description: Orice informație suplimentară care poate fi utilă vizitatorilor și utilizatorilor dvs. Poate fi structurată cu sintaxa Markdown.
+ site_short_description: O descriere scurtă pentru a ajuta la identificarea unică a serverului dvs. Cine-l conduce, pentru cine este?
+ site_terms: Utilizați propria politică de confidențialitate sau lăsați necompletat pentru a o utiliza pe cea implicit. Poate fi structurată cu sintaxa Markdown.
+ site_title: Cum se pot referi oamenii la serverul dvs. în afară de numele său de domeniu.
+ status_page_url: URL-ul unei pagini unde oamenii pot vedea starea acestui server în timpul unei întreruperi
+ theme: Tema pe care vizitatorii deconectați și utilizatorii noi o văd.
+ thumbnail: O imagine de aproximativ 2:1 afișată alături de informațiile serverului dvs.
+ timeline_preview: Vizitatorii deconectați vor putea să răsfoiască cele mai recente postări publice disponibile pe server.
+ trendable_by_default: Omiteți revizuirea manuală a conținutului în tendințe. Elementele individuale pot fi în continuare eliminate din tendințe după fapt.
+ trends: Tendințele arată ce postări, hashtag-uri și știri câștigă teren pe serverul dvs.
+ trends_as_landing_page: Afișați conținut în tendințe utilizatorilor deconectați și vizitatorilor în loc de o descriere a acestui server. Necesită ca tendințele să fie activate.
form_challenge:
current_password: Ați intrat într-o zonă securizată
imports:
data: Fișierul CSV exportat de la o altă instanță
invite_request:
text: Acest lucru ne va ajuta să revizuim cererea dvs
+ ip_block:
+ comment: Opțional. Amintiți-vă de ce ați adăugat această regulă.
+ expires_in: Adresele IP sunt o resursă finită, uneori sunt partajate și adesea se schimbă. Din acest motiv, blocurile IP nedefinite nu sunt recomandate.
+ ip: Introduceți o adresă IPv4 sau IPv6. Puteți bloca întregul spectru folosind sintaxa CIDR. Aveți grijă să nu vă blocați!
+ severities:
+ no_access: Blocați accesul la toate resursele
+ sign_up_block: Nu vor fi posibile înscrieri noi
+ sign_up_requires_approval: Înscrierile noi vor necesita aprobarea dvs.
+ severity: Alegeți ce se va întâmpla cu cererile de la acestă adresă IP
+ rule:
+ hint: Opțional. Oferiți mai multe detalii despre regulă
+ text: Descrieți o regulă sau o cerință pentru utilizatorii de pe acest server. Încercați să o faceți scurtă și simplă
sessions:
otp: 'Introdu codul pentru dubla protecție generat de telefonul mobil sau unul din codurile de rezervă:'
+ webauthn: Dacă este o cheie USB, asigurați-vă că o introduceți și, dacă este necesar, atingeți-o.
+ settings:
+ indexable: Pagina dvs. de profil poate apărea în rezultatele căutării pe Google, Bing și altele.
+ show_application: Veți putea întotdeauna să vedeți ce aplicație v-a publicat postarea.
tag:
name: Poți doar să schimbi caseta literelor, de exemplu, pentru a o face mai lizibilă
user:
chosen_languages: Doar postările în limbile selectate vor fi afișate în fluxurile publice
+ role: Rolul controlează ce permisiuni are utilizatorul.
+ user_role:
+ color: Culoare care va fi folosită pentru rol în întreaga interfață, ca RGB în format hexazecimal
labels:
account:
fields:
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 37626ff9fd..d8822d35b9 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -10,7 +10,6 @@ ru:
indexable: Ваши публичные сообщения могут появляться в результатах поиска на Mastodon. Люди, которые взаимодействовали с вашими сообщениями, могут искать их независимо от этого.
note: 'Вы можете @упоминать других людей или #хэштеги.'
show_collections: Люди смогут просматривать список ваших подписок и подписчиков. Люди, за которыми вы следуете, будут видеть, что вы подписаны на них, несмотря ни на что.
- unlocked: Люди смогут подписываться на вас, не запрашивая подтверждения. Снимите флажок, если вы хотите просматривать запросы на подписку и выбирать, принимать или отклонять новых подписчиков.
account_alias:
acct: Укажите имя_пользователя@домен учётной записи, с которой вы собираетесь мигрировать
account_migration:
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index d1ae553c8c..1f1867854e 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -9,7 +9,6 @@ sl:
indexable: Vaše javne objave se lahko pojavijo v rezultatih iskanja na Mastodonu. Ljudje, ki so bili v interakciji z vašimi objavami, jih bodo lahko iskali ne glede na to.
note: 'Druge osebe lahko @omenite ali #ključnite.'
show_collections: Ljudje bodo lahko brskali po vaših sledilcih in sledenih. Ljudje, ki jim sledite, bodo videli, da jim sledite ne glede na to.
- unlocked: Ljudje vam bodo lahko sledili, ne da bi zahtevali odobritev. Ne potrdite, če želite pregledati prošnje za sledenje, in izbirajte, ali želite nove sledilce sprejeti ali zavrniti.
account_alias:
acct: Določite uporabniškoime@domena računa, od katerega se želite preseliti
account_migration:
diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml
index 1dec901340..fee7600074 100644
--- a/config/locales/simple_form.sr-Latn.yml
+++ b/config/locales/simple_form.sr-Latn.yml
@@ -9,7 +9,6 @@ sr-Latn:
indexable: Vaše javne objave se mogu pojaviti u rezultatima pretrage na Mastodon-u. Ljudi koji su stupili u interakciju sa vašim objavama će možda moći da ih pretražuju.
note: 'Možete da @pomenete druge ljude ili #heš oznake.'
show_collections: Ljudi će moći da pregledaju vaše pratioce i pratioce. Ljudi koje pratite videće da ih pratite.
- unlocked: Ljudi će moći da vas prate bez zahtevanja odobrenja. Opozovite izbor ako želite da pregledate zahteve za praćenje i izaberite da li da prihvatite ili odbijete nove pratioce.
account_alias:
acct: Navedite korisničko_ime@domen naloga sa kojeg želite da se preselite
account_migration:
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index 9566e09475..7161627e28 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -9,7 +9,6 @@ sr:
indexable: Ваше јавне објаве се могу појавити у резултатима претраге на Mastodon-у. Људи који су ступили у интеракцију са вашим објавама ће можда моћи да их претражују.
note: 'Можете да @поменете друге људе или #хеш ознаке.'
show_collections: Људи ће моћи да прегледају ваше пратиоце и пратиоце. Људи које пратите видеће да их пратите.
- unlocked: Људи ће моћи да вас прате без захтевања одобрења. Опозовите избор ако желите да прегледате захтеве за праћење и изаберите да ли да прихватите или одбијете нове пратиоце.
account_alias:
acct: Наведите корисничко_име@домен налога са којег желите да се преселите
account_migration:
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index 72c3f000f6..b8303e2945 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -10,7 +10,6 @@ sv:
indexable: Dina offentliga inlägg kan visas i sökresultat på Mastodon. Personer som har interagerat med dina inlägg kan söka dem oavsett.
note: 'Du kan @nämna andra personer eller #hashtaggar.'
show_collections: Andra kan se vem du följer och vem som följer dig. De du följer kan alltid se att du följer dem.
- unlocked: Andra kommer att kunna följa dig utan att begära godkännande. Avmarkera om du vill granska följeslagare och välja om du vill acceptera eller avvisa nya följare.
account_alias:
acct: Ange användarnamn@domän för kontot som du vill flytta från
account_migration:
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index f8f4d3f119..0ba54e26ce 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -10,7 +10,6 @@ th:
indexable: โพสต์สาธารณะของคุณอาจปรากฏในผลลัพธ์การค้นหาใน Mastodon ผู้คนที่ได้โต้ตอบกับโพสต์ของคุณอาจสามารถค้นหาโพสต์เหล่านั้นได้ไม่ว่าอย่างไรก็ตาม
note: 'คุณสามารถ @กล่าวถึง ผู้คนอื่น ๆ หรือ #แฮชแท็ก'
show_collections: ผู้คนจะสามารถเรียกดูการติดตามและผู้ติดตามของคุณ ผู้คนที่คุณติดตามจะเห็นว่าคุณติดตามเขาไม่ว่าอย่างไรก็ตาม
- unlocked: ผู้คนจะสามารถติดตามคุณได้โดยไม่ต้องขอการอนุมัติ เลิกกาเครื่องหมายหากคุณต้องการตรวจทานคำขอติดตามและเลือกว่าจะยอมรับหรือปฏิเสธผู้ติดตามใหม่
account_alias:
acct: ระบุ username@domain ของบัญชีที่คุณต้องการย้ายจาก
account_migration:
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 6586c372ef..5f98d73be6 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -10,7 +10,7 @@ zh-CN:
indexable: 您的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与您的嘟文有过交互的人都可能通过搜索找到它们。
note: '你可以提及 @其他人 或 #标签 。'
show_collections: 人们将能够浏览您的关注和追随者。您关注的人会看到您关注他们。
- unlocked: 人们将能够在不请求批准的情况下关注你。如果你希望审核关注请求并选择接受或拒绝新的粉丝,请取消勾选此项。
+ unlocked: 人们将能够在不请求批准的情况下关注你。如果你希望审核关注请求并选择接受或拒绝新的关注者,请取消勾选此项。
account_alias:
acct: 指定你想要迁移过来的原账号:用户名@站点域名
account_migration:
diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml
index dd134a58fb..c77de84e4a 100644
--- a/config/locales/simple_form.zh-HK.yml
+++ b/config/locales/simple_form.zh-HK.yml
@@ -9,7 +9,6 @@ zh-HK:
indexable: 你的公開帖文可能會出現在 Mastodon 的搜尋結果中。無論如何,與你帖文互動過的人都能搜尋到它。
note: '你可以 @提及他人 或使用 #主題標籤。'
show_collections: 大家可瀏覽你追蹤的人和你的追蹤者。你追蹤的人無論如何都會看到你追蹤了他們。
- unlocked: 大家毋須獲得批准即可追蹤你。如果你想審核追蹤請求,來接受或拒絕新追蹤者,請取消勾選。
account_alias:
acct: 指定欲移動之帳戶的「使用者名稱@域名」
account_migration:
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 980eff1aa5..6cff74fb50 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -645,6 +645,7 @@ sq:
report: 'Raportim #%{id}'
reported_account: Llogari e raportuar
reported_by: Raportuar nga
+ reported_with_application: Raportuar me aplikacion
resolved: I zgjidhur
resolved_msg: Raportimi u zgjidh me sukses!
skip_to_actions: Kaloni te veprimet
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index bd33e837bd..b2ec21b82e 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -60,10 +60,10 @@ sv:
deleted: Raderad
demote: Degradera
destroyed_msg: "%{username}s data har nu lagts till kön för att raderas omedelbart"
- disable: inaktivera
+ disable: Inaktivera
disable_sign_in_token_auth: Inaktivera autentisering med pollett via e-post
disable_two_factor_authentication: Inaktivera 2FA
- disabled: inaktiverad
+ disabled: Inaktiverad
display_name: Visningsnamn
domain: Domän
edit: Redigera
@@ -142,7 +142,7 @@ sv:
only_password: Endast lösenord
password_and_2fa: Lösenord och 2FA
sensitive: Känsligt
- sensitized: markerad som känsligt
+ sensitized: Markerad som känsligt
shared_inbox_url: Delad inkorg URL
show:
created_reports: Anmälningar som skapats av det här kontot
@@ -836,7 +836,7 @@ sv:
title: Kontoinlägg
trending: Trendande
visibility: Synlighet
- with_media: med media
+ with_media: Med media
strikes:
actions:
delete_statuses: "%{name} raderade %{target}s inlägg"
@@ -1494,7 +1494,7 @@ sv:
not_ready: Kan inte bifoga filer som inte har behandlats färdigt. Försök igen om ett ögonblick!
too_many: Det går inte att bifoga mer än 4 filer
migrations:
- acct: användarnamn@domän av det nya kontot
+ acct: Flyttad till
cancel: Avbryt omdirigering
cancel_explanation: Avstängning av omdirigeringen kommer att återaktivera ditt nuvarande konto, men kommer inte att återskapa följare som har flyttats till det kontot.
cancelled_msg: Avbröt omdirigeringen.
@@ -1703,7 +1703,7 @@ sv:
ios: iOS
kai_os: KaiOS
linux: Linux
- mac: Mac
+ mac: macOS
unknown_platform: Okänd plattform
windows: Windows
windows_mobile: Windows Mobile
@@ -1879,7 +1879,7 @@ sv:
subject: Andra faktorns autentiseringsfel
title: Misslyckad tvåfaktorsautentisering
suspicious_sign_in:
- change_password: Ändra ditt lösenord
+ change_password: ändra ditt lösenord
details: 'Här är inloggningsdetaljerna:'
explanation: Vi har upptäckt en inloggning till ditt konto från en ny IP-adress.
further_actions_html: Om detta inte var du, rekommenderar vi att du snarast %{action} och aktiverar tvåfaktorsautentisering för att hålla ditt konto säkert.
diff --git a/config/mastodon.yml b/config/mastodon.yml
new file mode 100644
index 0000000000..9796159fa4
--- /dev/null
+++ b/config/mastodon.yml
@@ -0,0 +1,3 @@
+---
+shared:
+ software_update_url: <%= ENV.fetch('UPDATE_CHECK_URL', 'https://kmy.blue/update-check') %>
diff --git a/config/navigation.rb b/config/navigation.rb
index ebcbf10275..de0673426b 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -6,7 +6,7 @@ SimpleNavigation::Configuration.run do |navigation|
navigation.items do |n|
n.item :web, safe_join([material_symbol('chevron_left'), t('settings.back')]), root_path
- if ENV['UPDATE_CHECK_URL'] != '' && current_user.can?(:view_devops)
+ if Rails.configuration.x.mastodon.software_update_url.present? && current_user.can?(:view_devops)
n.item :software_updates, safe_join([material_symbol('report'), t('admin.critical_update_pending')]), admin_software_updates_path, if: -> { SoftwareUpdate.urgent_pending? }, html: { class: 'warning' }
n.item :software_updates, safe_join([material_symbol('report'), t('admin.update_pendings.major')]), admin_software_updates_path, if: -> { !SoftwareUpdate.urgent_pending? && SoftwareUpdate.major_pending? }, html: { class: 'warning' }
n.item :software_updates, safe_join([material_symbol('report'), t('admin.update_pendings.patch')]), admin_software_updates_path, if: -> { !SoftwareUpdate.urgent_pending? && SoftwareUpdate.patch_pending? }, html: { class: 'warning' }
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 9f6da976dd..0802be319b 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -55,8 +55,10 @@ namespace :admin do
end
end
- get '/settings', to: redirect('/admin/settings/branding')
- get '/settings/edit', to: redirect('/admin/settings/branding')
+ with_options to: redirect('/admin/settings/branding') do
+ get '/settings'
+ get '/settings/edit'
+ end
namespace :settings do
resource :branding, only: [:show, :update], controller: 'branding'
diff --git a/config/routes/api.rb b/config/routes/api.rb
index 97d035fa33..8cfea92cc0 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -54,8 +54,10 @@ namespace :api, format: false do
resources :antenna, only: :show
end
- get '/streaming', to: 'streaming#index'
- get '/streaming/(*any)', to: 'streaming#index'
+ with_options to: 'streaming#index' do
+ get '/streaming'
+ get '/streaming/(*any)'
+ end
resources :custom_emojis, only: [:index]
resources :reaction_deck, only: [:index, :create]
@@ -258,7 +260,7 @@ namespace :api, format: false do
resources :featured_tags, only: [:index, :create, :destroy]
- resources :polls, only: [:create, :show] do
+ resources :polls, only: [:show] do
resources :votes, only: :create, module: :polls
end
diff --git a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
index 4271f8c08a..c35ad80028 100644
--- a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
+++ b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
@@ -15,21 +15,10 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1]
private
- def supports_concurrent_reindex?
- @supports_concurrent_reindex ||= begin
- ActiveRecord::Base.connection.database_version >= 120_000
- end
- end
-
def deduplicate_and_reindex!
deduplicate_preview_cards!
- if supports_concurrent_reindex?
- safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
- else
- remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey
- add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true
- end
+ safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
rescue ActiveRecord::RecordNotUnique
retry
end
diff --git a/db/schema.rb b/db/schema.rb
index 91931eeba7..c003716540 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.1].define(version: 2024_11_04_082851) do
+ActiveRecord::Schema[7.2].define(version: 2024_11_04_082851) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
diff --git a/lib/active_record/with_recursive.rb b/lib/active_record/with_recursive.rb
deleted file mode 100644
index 4bd3e81eed..0000000000
--- a/lib/active_record/with_recursive.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# frozen_string_literal: true
-
-# Add support for writing recursive CTEs in ActiveRecord
-
-# Initially from Lorin Thwaits (https://github.com/lorint) as per comment:
-# https://github.com/vlado/activerecord-cte/issues/16#issuecomment-1433043310
-
-# Modified from the above code to change the signature to
-# `with_recursive(hash)` and extending CTE hash values to also includes arrays
-# of values that get turned into UNION ALL expressions.
-
-# This implementation has been merged in Rails: https://github.com/rails/rails/pull/51601
-
-module ActiveRecord
- module QueryMethodsExtensions
- def with_recursive(*args)
- @with_is_recursive = true
- check_if_method_has_arguments!(__callee__, args)
- spawn.with_recursive!(*args)
- end
-
- # Like #with_recursive but modifies the relation in place.
- def with_recursive!(*args) # :nodoc:
- self.with_values += args
- @with_is_recursive = true
- self
- end
-
- private
-
- def build_with(arel)
- return if with_values.empty?
-
- with_statements = with_values.map do |with_value|
- raise ArgumentError, "Unsupported argument type: #{with_value} #{with_value.class}" unless with_value.is_a?(Hash)
-
- build_with_value_from_hash(with_value)
- end
-
- # Was: arel.with(with_statements)
- @with_is_recursive ? arel.with(:recursive, with_statements) : arel.with(with_statements)
- end
-
- def build_with_value_from_hash(hash)
- hash.map do |name, value|
- Arel::Nodes::TableAlias.new(build_with_expression_from_value(value), name)
- end
- end
-
- def build_with_expression_from_value(value)
- case value
- when Arel::Nodes::SqlLiteral then Arel::Nodes::Grouping.new(value)
- when ActiveRecord::Relation then value.arel
- when Arel::SelectManager then value
- when Array then value.map { |e| build_with_expression_from_value(e) }.reduce { |result, value| Arel::Nodes::UnionAll.new(result, value) }
- else
- raise ArgumentError, "Unsupported argument type: `#{value}` #{value.class}"
- end
- end
- end
-end
-
-ActiveSupport.on_load(:active_record) do
- ActiveRecord::QueryMethods.prepend(ActiveRecord::QueryMethodsExtensions)
-end
diff --git a/lib/arel/union_parenthesizing.rb b/lib/arel/union_parenthesizing.rb
deleted file mode 100644
index 852d8e92d8..0000000000
--- a/lib/arel/union_parenthesizing.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-# Fix an issue with `LIMIT` ocurring on the left side of a `UNION` causing syntax errors.
-# See https://github.com/rails/rails/issues/40181
-
-# The fix has been merged in ActiveRecord: https://github.com/rails/rails/pull/51549
-# TODO: drop this when available in ActiveRecord
-
-# rubocop:disable all -- This is a mostly vendored file
-
-module Arel
- module Visitors
- class ToSql
- private
-
- def infix_value_with_paren(o, collector, value, suppress_parens = false)
- collector << "( " unless suppress_parens
- collector = if o.left.class == o.class
- infix_value_with_paren(o.left, collector, value, true)
- else
- select_parentheses o.left, collector, false # Changed from `visit o.left, collector`
- end
- collector << value
- collector = if o.right.class == o.class
- infix_value_with_paren(o.right, collector, value, true)
- else
- select_parentheses o.right, collector, false # Changed from `visit o.right, collector`
- end
- collector << " )" unless suppress_parens
- collector
- end
-
- def select_parentheses(o, collector, always_wrap_selects = true)
- if o.is_a?(Nodes::SelectStatement) && (always_wrap_selects || require_parentheses?(o))
- collector << "("
- visit o, collector
- collector << ")"
- collector
- else
- visit o, collector
- end
- end
-
- def require_parentheses?(o)
- !o.orders.empty? || o.limit || o.offset
- end
- end
- end
-end
-
-# rubocop:enable all
diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb
index 23c907543f..c8e91224cf 100644
--- a/lib/mastodon/cli/accounts.rb
+++ b/lib/mastodon/cli/accounts.rb
@@ -321,7 +321,9 @@ module Mastodon::CLI
unless skip_domains.empty?
say('The following domains were not available during the check:', :yellow)
- skip_domains.each { |domain| say(" #{domain}") }
+ shell.indent(2) do
+ skip_domains.each { |domain| say(domain) }
+ end
end
end
diff --git a/lib/mastodon/cli/cache.rb b/lib/mastodon/cli/cache.rb
index 0edc4b01d6..4152037587 100644
--- a/lib/mastodon/cli/cache.rb
+++ b/lib/mastodon/cli/cache.rb
@@ -52,7 +52,7 @@ module Mastodon::CLI
account.account_stat.tap do |account_stat|
account_stat.following_count = account.active_relationships.count
account_stat.followers_count = account.passive_relationships.count
- account_stat.statuses_count = account.statuses.where.not(visibility: :direct).count
+ account_stat.statuses_count = account.statuses.not_direct_visibility.count
account_stat.save if account_stat.changed?
end
@@ -60,7 +60,7 @@ module Mastodon::CLI
def recount_status_stats(status)
status.status_stat.tap do |status_stat|
- status_stat.replies_count = status.replies.where.not(visibility: :direct).count
+ status_stat.replies_count = status.replies.not_direct_visibility.count
status_stat.reblogs_count = status.reblogs.count
status_stat.favourites_count = status.favourites.count
status_stat.emoji_reactions = status.generate_emoji_reactions_grouped_by_name
diff --git a/lib/mastodon/cli/email_domain_blocks.rb b/lib/mastodon/cli/email_domain_blocks.rb
index 6b9107c8ad..7b2da8ef9f 100644
--- a/lib/mastodon/cli/email_domain_blocks.rb
+++ b/lib/mastodon/cli/email_domain_blocks.rb
@@ -7,11 +7,13 @@ module Mastodon::CLI
class EmailDomainBlocks < Base
desc 'list', 'List blocked e-mail domains'
def list
- EmailDomainBlock.where(parent_id: nil).find_each do |entry|
- say(entry.domain.to_s, :white)
+ EmailDomainBlock.parents.find_each do |parent|
+ say(parent.domain.to_s, :white)
- EmailDomainBlock.where(parent_id: entry.id).find_each do |child|
- say(" #{child.domain}", :cyan)
+ shell.indent do
+ EmailDomainBlock.where(parent_id: parent.id).find_each do |child|
+ say(child.domain, :cyan)
+ end
end
end
end
diff --git a/lib/mastodon/cli/emoji.rb b/lib/mastodon/cli/emoji.rb
index f43e6fdf9d..ecfa33c419 100644
--- a/lib/mastodon/cli/emoji.rb
+++ b/lib/mastodon/cli/emoji.rb
@@ -62,7 +62,9 @@ module Mastodon::CLI
failed += 1
say('Failure/Error: ', :red)
say(entry.full_name)
- say(" #{custom_emoji.errors[:image].join(', ')}", :red)
+ shell.indent(2) do
+ say(custom_emoji.errors[:image].join(', '), :red)
+ end
end
end
end
diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb
index ef24f2e047..f1f40c99ce 100644
--- a/lib/mastodon/cli/ip_blocks.rb
+++ b/lib/mastodon/cli/ip_blocks.rb
@@ -80,9 +80,9 @@ module Mastodon::CLI
end
ip_blocks = if options[:force]
- IpBlock.where('ip >>= ?', address)
+ IpBlock.containing(address)
else
- IpBlock.where('ip <<= ?', address)
+ IpBlock.contained_by(address)
end
if ip_blocks.empty?
diff --git a/lib/mastodon/cli/progress_helper.rb b/lib/mastodon/cli/progress_helper.rb
index 5634343796..da9527ffd7 100644
--- a/lib/mastodon/cli/progress_helper.rb
+++ b/lib/mastodon/cli/progress_helper.rb
@@ -5,7 +5,7 @@ dev_null = Logger.new('/dev/null')
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
ActiveJob::Base.logger = dev_null
-HttpLog.configuration.logger = dev_null
+HttpLog.configuration.logger = dev_null if defined?(HttpLog)
Paperclip.options[:log] = false
Chewy.logger = dev_null
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index b5d4861328..948a18ab98 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -596,7 +596,7 @@ def disable_log_stdout!
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
- HttpLog.configuration.logger = dev_null
+ HttpLog.configuration.logger = dev_null if defined?(HttpLog)
Paperclip.options[:log] = false
end
diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake
index 539c44273f..c8f977f651 100644
--- a/lib/tasks/repo.rake
+++ b/lib/tasks/repo.rake
@@ -18,7 +18,7 @@ namespace :repo do
url = "https://api.github.com/repos/#{REPOSITORY_NAME}/contributors?anon=1"
- HttpLog.config.compact_log = true
+ HttpLog.config.compact_log = true if defined?(HttpLog)
while url.present?
response = HTTP.get(url)
@@ -43,7 +43,7 @@ namespace :repo do
path = Rails.root.join('CHANGELOG.md')
tmp = Tempfile.new
- HttpLog.config.compact_log = true
+ HttpLog.config.compact_log = true if defined?(HttpLog)
begin
File.open(path, 'r') do |file|
diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake
index 076d8f2e5e..c64b75691e 100644
--- a/lib/tasks/tests.rake
+++ b/lib/tasks/tests.rake
@@ -11,7 +11,7 @@ namespace :tests do
'3_3_0' => 2020_12_18_054746,
}.each do |release, version|
ActiveRecord::Tasks::DatabaseTasks
- .migration_connection
+ .migration_connection_pool
.migration_context
.migrate(version)
Rake::Task["tests:migrations:populate_v#{release}"]
diff --git a/spec/lib/admin/system_check/database_schema_check_spec.rb b/spec/lib/admin/system_check/database_schema_check_spec.rb
index 311d524956..3dc5763f92 100644
--- a/spec/lib/admin/system_check/database_schema_check_spec.rb
+++ b/spec/lib/admin/system_check/database_schema_check_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe Admin::SystemCheck::DatabaseSchemaCheck do
context 'when database needs migration' do
before do
context = instance_double(ActiveRecord::MigrationContext, needs_migration?: true)
- allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context)
+ allow(ActiveRecord::Base.connection_pool).to receive(:migration_context).and_return(context)
end
it 'returns false' do
@@ -24,7 +24,7 @@ RSpec.describe Admin::SystemCheck::DatabaseSchemaCheck do
context 'when database does not need migration' do
before do
context = instance_double(ActiveRecord::MigrationContext, needs_migration?: false)
- allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context)
+ allow(ActiveRecord::Base.connection_pool).to receive(:migration_context).and_return(context)
end
it 'returns true' do
diff --git a/spec/lib/admin/system_check/software_version_check_spec.rb b/spec/lib/admin/system_check/software_version_check_spec.rb
index 8460d90668..75dc1a4732 100644
--- a/spec/lib/admin/system_check/software_version_check_spec.rb
+++ b/spec/lib/admin/system_check/software_version_check_spec.rb
@@ -27,9 +27,10 @@ RSpec.describe Admin::SystemCheck::SoftwareVersionCheck do
context 'when checks are disabled' do
around do |example|
- ClimateControl.modify UPDATE_CHECK_URL: '' do
- example.run
- end
+ original = Rails.configuration.x.mastodon.software_update_url
+ Rails.configuration.x.mastodon.software_update_url = ''
+ example.run
+ Rails.configuration.x.mastodon.software_update_url = original
end
it 'returns true' do
diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb
index fc1776d776..1b30939480 100644
--- a/spec/lib/feed_manager_spec.rb
+++ b/spec/lib/feed_manager_spec.rb
@@ -380,16 +380,16 @@ RSpec.describe FeedManager do
end
describe '#push_to_list' do
- let(:owner) { Fabricate(:account, username: 'owner') }
+ let(:list_owner) { Fabricate(:account, username: 'list_owner') }
let(:alice) { Fabricate(:account, username: 'alice') }
let(:bob) { Fabricate(:account, username: 'bob') }
let(:eve) { Fabricate(:account, username: 'eve') }
- let(:list) { Fabricate(:list, account: owner) }
+ let(:list) { Fabricate(:list, account: list_owner) }
before do
- owner.follow!(alice)
- owner.follow!(bob)
- owner.follow!(eve)
+ list_owner.follow!(alice)
+ list_owner.follow!(bob)
+ list_owner.follow!(eve)
list.accounts << alice
list.accounts << bob
@@ -414,7 +414,7 @@ RSpec.describe FeedManager do
end
it 'pushes statuses that are replies to list owner' do
- status = Fabricate(:status, text: 'Hello world', account: owner)
+ status = Fabricate(:status, text: 'Hello world', account: list_owner)
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
expect(subject.push_to_list(list, reply)).to be true
end
@@ -437,7 +437,7 @@ RSpec.describe FeedManager do
end
it 'pushes statuses that are replies to list owner' do
- status = Fabricate(:status, text: 'Hello world', account: owner)
+ status = Fabricate(:status, text: 'Hello world', account: list_owner)
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
expect(subject.push_to_list(list, reply)).to be true
end
@@ -466,7 +466,7 @@ RSpec.describe FeedManager do
end
it 'pushes statuses that are replies to list owner' do
- status = Fabricate(:status, text: 'Hello world', account: owner)
+ status = Fabricate(:status, text: 'Hello world', account: list_owner)
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
expect(subject.push_to_list(list, reply)).to be true
end
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index 9a8132ed34..9087063763 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -1206,14 +1206,6 @@ RSpec.describe Account do
end
end
- describe 'silenced' do
- it 'returns an array of accounts who are silenced' do
- silenced_account = Fabricate(:account, silenced: true)
- _account = Fabricate(:account, silenced: false)
- expect(described_class.silenced).to contain_exactly(silenced_account)
- end
- end
-
describe 'searchable' do
let!(:suspended_local) { Fabricate(:account, suspended: true, username: 'suspended_local') }
let!(:suspended_remote) { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') }
diff --git a/spec/models/bulk_import_spec.rb b/spec/models/bulk_import_spec.rb
new file mode 100644
index 0000000000..a3bd01d2a8
--- /dev/null
+++ b/spec/models/bulk_import_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe BulkImport do
+ describe 'Associations' do
+ it { is_expected.to belong_to(:account).required }
+ it { is_expected.to have_many(:rows).class_name('BulkImportRow').inverse_of(:bulk_import).dependent(:delete_all) }
+ end
+
+ describe 'Validations' do
+ subject { Fabricate.build :bulk_import }
+
+ it { is_expected.to validate_presence_of(:type) }
+ end
+
+ describe 'Scopes' do
+ describe '.archival_completed' do
+ let!(:old_import) { Fabricate :bulk_import, created_at: 1.month.ago }
+ let!(:new_import) { Fabricate :bulk_import, created_at: 1.day.ago }
+
+ it 'returns imports which have passed the archive window period' do
+ expect(described_class.archival_completed)
+ .to include(old_import)
+ .and not_include(new_import)
+ end
+ end
+
+ describe '.confirmation_missed' do
+ let!(:old_unconfirmed_import) { Fabricate :bulk_import, created_at: 1.week.ago, state: :unconfirmed }
+ let!(:old_scheduled_import) { Fabricate :bulk_import, created_at: 1.week.ago, state: :scheduled }
+ let!(:new_unconfirmed_import) { Fabricate :bulk_import, created_at: 1.minute.ago, state: :unconfirmed }
+
+ it 'returns imports which have passed the confirmation window without confirming' do
+ expect(described_class.confirmation_missed)
+ .to include(old_unconfirmed_import)
+ .and not_include(old_scheduled_import)
+ .and not_include(new_unconfirmed_import)
+ end
+ end
+ end
+end
diff --git a/spec/models/concerns/account/interactions_spec.rb b/spec/models/concerns/account/interactions_spec.rb
index 5515643884..e8215a27ab 100644
--- a/spec/models/concerns/account/interactions_spec.rb
+++ b/spec/models/concerns/account/interactions_spec.rb
@@ -3,10 +3,10 @@
require 'rails_helper'
RSpec.describe Account::Interactions do
- let(:account) { Fabricate(:account, username: 'account') }
+ let(:account) { Fabricate(:account) }
let(:account_id) { account.id }
let(:account_ids) { [account_id] }
- let(:target_account) { Fabricate(:account, username: 'target') }
+ let(:target_account) { Fabricate(:account) }
let(:target_account_id) { target_account.id }
let(:target_account_ids) { [target_account_id] }
let(:follower_account) { Fabricate(:account, username: 'follower') }
diff --git a/spec/models/concerns/account/sensitizes_spec.rb b/spec/models/concerns/account/sensitizes_spec.rb
new file mode 100644
index 0000000000..3596c9a126
--- /dev/null
+++ b/spec/models/concerns/account/sensitizes_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Account::Sensitizes do
+ describe 'Scopes' do
+ describe '.sensitized' do
+ let(:sensitized_account) { Fabricate :account, sensitized_at: 2.days.ago }
+
+ before { Fabricate :account, sensitized_at: false }
+
+ it 'returns an array of accounts who are sensitized' do
+ expect(Account.sensitized)
+ .to contain_exactly(sensitized_account)
+ end
+ end
+ end
+end
diff --git a/spec/models/concerns/account/silences_spec.rb b/spec/models/concerns/account/silences_spec.rb
new file mode 100644
index 0000000000..0d8337ce1d
--- /dev/null
+++ b/spec/models/concerns/account/silences_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Account::Silences do
+ describe 'Scopes' do
+ describe '.silenced' do
+ let(:silenced_account) { Fabricate :account, silenced: true }
+
+ before { Fabricate :account, silenced: false }
+
+ it 'returns an array of accounts who are silenced' do
+ expect(Account.silenced)
+ .to contain_exactly(silenced_account)
+ end
+ end
+ end
+end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index d2ad40be73..574d543844 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -32,7 +32,7 @@ end
STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020')
ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}"
-require File.expand_path('../config/environment', __dir__)
+require_relative '../config/environment'
abort('The Rails environment is running in production mode!') if Rails.env.production?
diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb
index 8e5fa14b7e..3aca53ed0a 100644
--- a/spec/requests/api/v1/apps/credentials_spec.rb
+++ b/spec/requests/api/v1/apps/credentials_spec.rb
@@ -44,6 +44,7 @@ RSpec.describe 'Credentials' do
expect(response.parsed_body)
.to not_include(client_id: be_present)
.and not_include(client_secret: be_present)
+ .and not_include(client_secret_expires_at: be_present)
end
end
diff --git a/spec/requests/api/v1/apps_spec.rb b/spec/requests/api/v1/apps_spec.rb
index cf43e14d62..4e9147ba32 100644
--- a/spec/requests/api/v1/apps_spec.rb
+++ b/spec/requests/api/v1/apps_spec.rb
@@ -42,6 +42,7 @@ RSpec.describe 'Apps' do
id: app.id.to_s,
client_id: app.uid,
client_secret: app.secret,
+ client_secret_expires_at: 0,
name: client_name,
website: website,
scopes: ['read', 'write'],
diff --git a/spec/serializers/activitypub/actor_serializer_spec.rb b/spec/serializers/activitypub/actor_serializer_spec.rb
new file mode 100644
index 0000000000..ad24455953
--- /dev/null
+++ b/spec/serializers/activitypub/actor_serializer_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::ActorSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe '#type' do
+ context 'with the instance actor' do
+ let(:record) { Account.find(Account::INSTANCE_ACTOR_ID) }
+
+ it { is_expected.to include('type' => 'Application') }
+ end
+
+ context 'with an application actor' do
+ let(:record) { Fabricate :account, actor_type: 'Application' }
+
+ it { is_expected.to include('type' => 'Service') }
+ end
+
+ context 'with a service actor' do
+ let(:record) { Fabricate :account, actor_type: 'Service' }
+
+ it { is_expected.to include('type' => 'Service') }
+ end
+
+ context 'with a Group actor' do
+ let(:record) { Fabricate :account, actor_type: 'Group' }
+
+ it { is_expected.to include('type' => 'Group') }
+ end
+
+ context 'with a Person actor' do
+ let(:record) { Fabricate :account, actor_type: 'Person' }
+
+ it { is_expected.to include('type' => 'Person') }
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/add_serializer_spec.rb b/spec/serializers/activitypub/add_serializer_spec.rb
new file mode 100644
index 0000000000..3b3eaeb1b0
--- /dev/null
+++ b/spec/serializers/activitypub/add_serializer_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::AddSerializer do
+ describe '.serializer_for' do
+ subject { described_class.serializer_for(model, {}) }
+
+ context 'with a Status model' do
+ let(:model) { Status.new }
+
+ it { is_expected.to eq(described_class::UriSerializer) }
+ end
+
+ context 'with a FeaturedTag model' do
+ let(:model) { FeaturedTag.new }
+
+ it { is_expected.to eq(ActivityPub::HashtagSerializer) }
+ end
+
+ context 'with an Array' do
+ let(:model) { [] }
+
+ it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) }
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/collection_serializer_spec.rb b/spec/serializers/activitypub/collection_serializer_spec.rb
new file mode 100644
index 0000000000..7726df914f
--- /dev/null
+++ b/spec/serializers/activitypub/collection_serializer_spec.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::CollectionSerializer do
+ describe '.serializer_for' do
+ subject { described_class.serializer_for(model, {}) }
+
+ context 'with a Status model' do
+ let(:model) { Status.new }
+
+ it { is_expected.to eq(ActivityPub::NoteSerializer) }
+ end
+
+ context 'with a FeaturedTag model' do
+ let(:model) { FeaturedTag.new }
+
+ it { is_expected.to eq(ActivityPub::HashtagSerializer) }
+ end
+
+ context 'with an ActivityPub::CollectionPresenter' do
+ let(:model) { ActivityPub::CollectionPresenter.new }
+
+ it { is_expected.to eq(described_class) }
+ end
+
+ context 'with a String' do
+ let(:model) { '' }
+
+ it { is_expected.to eq(described_class::StringSerializer) }
+ end
+
+ context 'with an Array' do
+ let(:model) { [] }
+
+ it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) }
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/remove_serializer_spec.rb b/spec/serializers/activitypub/remove_serializer_spec.rb
new file mode 100644
index 0000000000..0e4b199838
--- /dev/null
+++ b/spec/serializers/activitypub/remove_serializer_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::RemoveSerializer do
+ describe '.serializer_for' do
+ subject { described_class.serializer_for(model, {}) }
+
+ context 'with a Status model' do
+ let(:model) { Status.new }
+
+ it { is_expected.to eq(described_class::UriSerializer) }
+ end
+
+ context 'with a FeaturedTag model' do
+ let(:model) { FeaturedTag.new }
+
+ it { is_expected.to eq(ActivityPub::HashtagSerializer) }
+ end
+
+ context 'with an Array' do
+ let(:model) { [] }
+
+ it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) }
+ end
+ end
+end
diff --git a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
new file mode 100644
index 0000000000..95b4d7dcd2
--- /dev/null
+++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 }
+
+ describe 'serialization' do
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'id' => be_a(String).and(eq('123'))
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb
new file mode 100644
index 0000000000..0f335d1215
--- /dev/null
+++ b/spec/serializers/rest/account_warning_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AccountWarningSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate :account_warning, id: 123, status_ids: [456, 789] }
+
+ describe 'serialization' do
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'id' => be_a(String).and(eq('123')),
+ 'status_ids' => be_a(Array).and(eq(['456', '789']))
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb
new file mode 100644
index 0000000000..58f58a997b
--- /dev/null
+++ b/spec/serializers/rest/admin/account_serializer_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::AccountSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe 'created_by_application_id' do
+ context 'when account is application-created' do
+ let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) }
+ let(:application) { Fabricate :application }
+
+ it { is_expected.to include('created_by_application_id' => application.id.to_s) }
+ end
+ end
+
+ describe 'invited_by_account_id' do
+ context 'when account was invited' do
+ let(:record) { Fabricate :account, user: Fabricate(:user, invite: invite) }
+ let(:invite) { Fabricate :invite }
+
+ it { is_expected.to include('invited_by_account_id' => invite.user.account.id.to_s) }
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb
new file mode 100644
index 0000000000..ed6067c0d2
--- /dev/null
+++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::CohortSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Admin::Metrics::Retention.new('2024-01-01', '2024-01-02', 'day').cohorts.first }
+
+ describe 'serialization' do
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'data' => be_a(Array),
+ 'period' => /2024-01-01/
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/webhook_event_serializer_spec.rb b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb
new file mode 100644
index 0000000000..3cbfbd92a3
--- /dev/null
+++ b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::WebhookEventSerializer do
+ describe '.serializer_for' do
+ subject { described_class.serializer_for(model, {}) }
+
+ context 'with an Account model' do
+ let(:model) { Account.new }
+
+ it { is_expected.to eq(REST::Admin::AccountSerializer) }
+ end
+
+ context 'with a Report model' do
+ let(:model) { Report.new }
+
+ it { is_expected.to eq(REST::Admin::ReportSerializer) }
+ end
+
+ context 'with a Status model' do
+ let(:model) { Status.new }
+
+ it { is_expected.to eq(REST::StatusSerializer) }
+ end
+
+ context 'with an Array' do
+ let(:model) { [] }
+
+ it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) }
+ end
+ end
+end
diff --git a/spec/serializers/rest/appeal_serializer_spec.rb b/spec/serializers/rest/appeal_serializer_spec.rb
new file mode 100644
index 0000000000..1ae6617de5
--- /dev/null
+++ b/spec/serializers/rest/appeal_serializer_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AppealSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe 'state' do
+ context 'when appeal is approved' do
+ let(:record) { Fabricate.build :appeal, approved_at: 2.days.ago }
+
+ it { is_expected.to include('state' => 'approved') }
+ end
+
+ context 'when appeal is rejected' do
+ let(:record) { Fabricate.build :appeal, rejected_at: 2.days.ago }
+
+ it { is_expected.to include('state' => 'rejected') }
+ end
+
+ context 'when appeal is not approved or rejected' do
+ let(:record) { Fabricate.build :appeal, approved_at: nil, rejected_at: nil }
+
+ it { is_expected.to include('state' => 'pending') }
+ end
+ end
+end
diff --git a/spec/serializers/rest/custom_emoji_serializer_spec.rb b/spec/serializers/rest/custom_emoji_serializer_spec.rb
index 10f84278af..116325e7dc 100644
--- a/spec/serializers/rest/custom_emoji_serializer_spec.rb
+++ b/spec/serializers/rest/custom_emoji_serializer_spec.rb
@@ -3,15 +3,18 @@
require 'rails_helper'
RSpec.describe REST::CustomEmojiSerializer do
- let(:serialization) { serialized_record_json(record, described_class) }
- let(:record) do
- Fabricate(:custom_emoji, shortcode: 'ohagi', aliases: aliases)
- end
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate.build :custom_emoji, id: 123, category: Fabricate(:custom_emoji_category, name: 'Category Name'), aliases: aliases }
let(:aliases) { [] }
- context 'when empty aliases' do
- it 'returns normalized aliases' do
- expect(serialization['aliases']).to eq []
+ describe 'serialization' do
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'category' => be_a(String).and(eq('Category Name')),
+ 'aliases' => be_a(Array).and(eq([]))
+ )
end
end
@@ -19,7 +22,7 @@ RSpec.describe REST::CustomEmojiSerializer do
let(:aliases) { nil }
it 'returns normalized aliases' do
- expect(serialization['aliases']).to eq []
+ expect(subject['aliases']).to eq []
end
end
@@ -27,7 +30,7 @@ RSpec.describe REST::CustomEmojiSerializer do
let(:aliases) { [nil] }
it 'returns normalized aliases' do
- expect(serialization['aliases']).to eq []
+ expect(subject['aliases']).to eq []
end
end
@@ -35,7 +38,7 @@ RSpec.describe REST::CustomEmojiSerializer do
let(:aliases) { ['neko'] }
it 'returns normalized aliases' do
- expect(serialization['aliases']).to eq ['neko']
+ expect(subject['aliases']).to eq ['neko']
end
end
end
diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb
new file mode 100644
index 0000000000..d7bd078e1d
--- /dev/null
+++ b/spec/serializers/rest/extended_description_serializer_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::ExtendedDescriptionSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe 'serialization' do
+ context 'with text present' do
+ let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) }
+
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'content' => eq(<<~HTML),
+ Hello world
+ HTML
+ 'updated_at' => eq('2024-01-01')
+ )
+ end
+ end
+
+ context 'with text missing' do
+ let(:record) { ExtendedDescription.new text: nil, updated_at: Date.new(2024, 1, 1) }
+
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'content' => eq(''),
+ 'updated_at' => eq('2024-01-01')
+ )
+ end
+ end
+ end
+end
diff --git a/spec/serializers/rest/rule_serializer_spec.rb b/spec/serializers/rest/rule_serializer_spec.rb
new file mode 100644
index 0000000000..4d801e77d3
--- /dev/null
+++ b/spec/serializers/rest/rule_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::RuleSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate.build :rule, id: 123 }
+
+ describe 'serialization' do
+ it 'returns expected values' do
+ expect(subject)
+ .to include(
+ 'id' => be_a(String).and(eq('123'))
+ )
+ end
+ end
+end
diff --git a/spec/services/software_update_check_service_spec.rb b/spec/services/software_update_check_service_spec.rb
index c864e3120d..a181700b13 100644
--- a/spec/services/software_update_check_service_spec.rb
+++ b/spec/services/software_update_check_service_spec.rb
@@ -124,9 +124,10 @@ RSpec.describe SoftwareUpdateCheckService do
context 'when update checking is disabled' do
around do |example|
- ClimateControl.modify UPDATE_CHECK_URL: '' do
- example.run
- end
+ original = Rails.configuration.x.mastodon.software_update_url
+ Rails.configuration.x.mastodon.software_update_url = ''
+ example.run
+ Rails.configuration.x.mastodon.software_update_url = original
end
before do
@@ -148,9 +149,10 @@ RSpec.describe SoftwareUpdateCheckService do
let(:update_check_url) { 'https://api.example.com/update_check' }
around do |example|
- ClimateControl.modify UPDATE_CHECK_URL: 'https://api.example.com/update_check' do
- example.run
- end
+ original = Rails.configuration.x.mastodon.software_update_url
+ Rails.configuration.x.mastodon.software_update_url = 'https://api.example.com/update_check'
+ example.run
+ Rails.configuration.x.mastodon.software_update_url = original
end
it_behaves_like 'when the feature is enabled'
diff --git a/yarn.lock b/yarn.lock
index a751392ecc..1c1823c168 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1480,26 +1480,26 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-calc@npm:^2.0.4":
- version: 2.0.4
- resolution: "@csstools/css-calc@npm:2.0.4"
+"@csstools/css-calc@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "@csstools/css-calc@npm:2.1.0"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.4
"@csstools/css-tokenizer": ^3.0.3
- checksum: 10c0/ecb68fc9f8d930b861d5c9c5d4fc6eb43dabc619a4cd6c82dc18034ee746f907dba106fa6cdb909ac727fbfc9b1f7ceac1f356641542faeb2fab99c5fcd52a2e
+ checksum: 10c0/c707bb533a6ea63ed5bb4b8f1ffcbf3cd2daf970a6d76d42b684243426f5aa7513179a8f34d2e3c5a85df3870f44d3bc2850ca40b085c5fe00b41a291a2ecae2
languageName: node
linkType: hard
-"@csstools/css-color-parser@npm:^3.0.5":
- version: 3.0.5
- resolution: "@csstools/css-color-parser@npm:3.0.5"
+"@csstools/css-color-parser@npm:^3.0.6":
+ version: 3.0.6
+ resolution: "@csstools/css-color-parser@npm:3.0.6"
dependencies:
"@csstools/color-helpers": "npm:^5.0.1"
- "@csstools/css-calc": "npm:^2.0.4"
+ "@csstools/css-calc": "npm:^2.1.0"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.4
"@csstools/css-tokenizer": ^3.0.3
- checksum: 10c0/535e2a38222ad7ee9e1143c3ef09ba07b2e70a4214bbdf7ca13398388b8d2db9ee295fe15d9d306342036e554d97dd235567a8c8ee03fea6825483f1c4dbbf7e
+ checksum: 10c0/7c4f42a704c8c44cece75f5dcd647a83634dec0f44d398ae1fbdc6e8527d4fbdc3a809eaaba3b739edf8e3c09d62c28234636f250f9b0b0d52a599e824c22047
languageName: node
linkType: hard
@@ -1551,33 +1551,33 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-color-function@npm:^4.0.5":
- version: 4.0.5
- resolution: "@csstools/postcss-color-function@npm:4.0.5"
+"@csstools/postcss-color-function@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@csstools/postcss-color-function@npm:4.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/b47cc4567445eb12dd3e67a4298470d62a449a4d754fd4dd32eb78b23615ba6bd1fe8dacccc6c95087ce8749a6552bace8de0b9b6eee0c9a7b7202a0bcb8fcac
+ checksum: 10c0/facbae01fd58898a176219cfcffee9ffb06fb466a2c439fd28403819e48778b682621b86a69682c0f758c659f8ec5f14eca1a9612b12b8777a2198173f386b49
languageName: node
linkType: hard
-"@csstools/postcss-color-mix-function@npm:^3.0.5":
- version: 3.0.5
- resolution: "@csstools/postcss-color-mix-function@npm:3.0.5"
+"@csstools/postcss-color-mix-function@npm:^3.0.6":
+ version: 3.0.6
+ resolution: "@csstools/postcss-color-mix-function@npm:3.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/a17d20dcc42d2c1ccd7a5ceb8d1413133ae9461bf973a9aad997a5782bf4cbbd847aef06accc20fa391ac6fbd44a1003e18c30a621d7c77052d4256fe39619aa
+ checksum: 10c0/66b906b2425ed137b1c2ef3d166036719ae69039668385dccce4e02bd91e41733b37dd3c884b74a2999067bfe8a8d8d1afa4082ef21a0bf044ba7e7fffb77e01
languageName: node
linkType: hard
@@ -1595,16 +1595,16 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-exponential-functions@npm:^2.0.4":
- version: 2.0.4
- resolution: "@csstools/postcss-exponential-functions@npm:2.0.4"
+"@csstools/postcss-exponential-functions@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "@csstools/postcss-exponential-functions@npm:2.0.5"
dependencies:
- "@csstools/css-calc": "npm:^2.0.4"
+ "@csstools/css-calc": "npm:^2.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/b174faa8782b7b3f3a9636412f90963740ff033c6506acf662f002fa07f59b370eb23937dbe3f1a05d7df277373f662d6970237d34ae938cf282a0b8dbde9a47
+ checksum: 10c0/8935cb69f70d7448aa5a3dcdfd188bdcfbc34e9a99131306947df8847126272773212011dcff85e10bcee4c9d01f94f7f8557ef93933122a0b82743185684ab1
languageName: node
linkType: hard
@@ -1620,46 +1620,46 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-gamut-mapping@npm:^2.0.5":
- version: 2.0.5
- resolution: "@csstools/postcss-gamut-mapping@npm:2.0.5"
+"@csstools/postcss-gamut-mapping@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "@csstools/postcss-gamut-mapping@npm:2.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/a9d7365bed5c323dddad06d53c137ef3508870e541c6275dbdf3a73a50d44437830c22fa62c510d9316441d1e9f3b5552730778d1b73d083422245673bd00dac
+ checksum: 10c0/8a3f012774ab261924cc9f3519caa87a25a6abcd70d78f622144d8e7126a687bddbdaa92995fc30f53355759cd5971e71ac099b6b8cb85c89d8ca86455588e3b
languageName: node
linkType: hard
-"@csstools/postcss-gradients-interpolation-method@npm:^5.0.5":
- version: 5.0.5
- resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.5"
+"@csstools/postcss-gradients-interpolation-method@npm:^5.0.6":
+ version: 5.0.6
+ resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/0ef258478270005ab3a879132dc6dbf2bf80788c79861515c826607953c551df1c2ef7005ba9592c31c6dad332d12ee247928a9fdd1569a51927a18a75dcc865
+ checksum: 10c0/0d97be76837f972ea323b58189ded2310b618ad94b40777464d0d8ac050b557ca9fd1f20af5ada105d61574cc9d8c119ae0daf294a3aacaaa89926f864d9d674
languageName: node
linkType: hard
-"@csstools/postcss-hwb-function@npm:^4.0.5":
- version: 4.0.5
- resolution: "@csstools/postcss-hwb-function@npm:4.0.5"
+"@csstools/postcss-hwb-function@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@csstools/postcss-hwb-function@npm:4.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/9ce0a66bf288c9ec7f1fc28323d56ec54d38a30cb2ab722d1afbd46ec070cc5e61121bacb503803cb00293fc5ed117269969ac21071d7f4ce94b385c96168445
+ checksum: 10c0/e7bcc98095ef2873a7b1a7326f1618bbeecc1c78660b23805bbefd8ec067bf2f35f2a2d4675be51a02d2280046f36f74d55f6af78e3ce107b82624d1a421ffcf
languageName: node
linkType: hard
@@ -1761,17 +1761,17 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-media-minmax@npm:^2.0.4":
- version: 2.0.4
- resolution: "@csstools/postcss-media-minmax@npm:2.0.4"
+"@csstools/postcss-media-minmax@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "@csstools/postcss-media-minmax@npm:2.0.5"
dependencies:
- "@csstools/css-calc": "npm:^2.0.4"
+ "@csstools/css-calc": "npm:^2.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/media-query-list-parser": "npm:^4.0.2"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/f9fe1e99b83a0724250f9426335da6f13bfbc28be6d10ebfafbf037766fc5245240ec33be7e68c9c5b60c013fbc2fa0be96fbed0d41383c919ee9e6f1b8225ce
+ checksum: 10c0/0d17782076fcaba2c3c85bd769fc102d95809e9ee6141ad9de706ee116466cada62424fd68623c58cc2456771725291c356e550377ba73a102ab6fe628931e30
languageName: node
linkType: hard
@@ -1811,18 +1811,18 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-oklab-function@npm:^4.0.5":
- version: 4.0.5
- resolution: "@csstools/postcss-oklab-function@npm:4.0.5"
+"@csstools/postcss-oklab-function@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@csstools/postcss-oklab-function@npm:4.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/a49e2ee60066f7da18316c7c80e5b2ced286ec962052f83c01f1952a1c5fe5b65ba9803a04698260125270a1dd47416f0b287a8f42e591f0d88c9a660ae844ce
+ checksum: 10c0/74ec74eb7171881deeff7a79e0dc696097fb53dcdcd9627d9559cd7be63f41adecec06c1e88ddd5d8a37f4705715d1c0c135ca2b001fb70fdc0b76ab1e491b66
languageName: node
linkType: hard
@@ -1837,18 +1837,31 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-relative-color-syntax@npm:^3.0.5":
- version: 3.0.5
- resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.5"
+"@csstools/postcss-random-function@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "@csstools/postcss-random-function@npm:1.0.1"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-calc": "npm:^2.1.0"
+ "@csstools/css-parser-algorithms": "npm:^3.0.4"
+ "@csstools/css-tokenizer": "npm:^3.0.3"
+ peerDependencies:
+ postcss: ^8.4
+ checksum: 10c0/5e8f29c024aa6ed1f89ee8b9c8ece39c8e72602d63faa82d9684e3183828f01971cf2f760b7d5b773605d44a4ea661d6d4389ec03f7e21002f9aa9e8db613a61
+ languageName: node
+ linkType: hard
+
+"@csstools/postcss-relative-color-syntax@npm:^3.0.6":
+ version: 3.0.6
+ resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.6"
+ dependencies:
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/505da97e7b219095a9fb6fa0ad6c6a1358ce1f5debada00564e635e1aa11d034c588be9ce2f76263172a8d1bd07d90647fde826f4565de22dcfc0a76beb68ff1
+ checksum: 10c0/207ae711831f8ae9170093dbea3727cd6f32ca31d22c1231b5b678592679eb49e329e87ea403714b8e10feb5b9137780364cc7e1e7d8cc4c90d47483a42132dc
languageName: node
linkType: hard
@@ -1863,16 +1876,29 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-stepped-value-functions@npm:^4.0.4":
- version: 4.0.4
- resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.4"
+"@csstools/postcss-sign-functions@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "@csstools/postcss-sign-functions@npm:1.0.0"
dependencies:
- "@csstools/css-calc": "npm:^2.0.4"
+ "@csstools/css-calc": "npm:^2.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/c8413a855a5ee9ad5b800263545d24d1bbd815f5ae0693c7dfd10c5f5b47bae5a9d985efdb2c46b03194ed3cae39f3d82c3ccfde502dee0b35d620fa539906be
+ checksum: 10c0/ec745b2f1e714ffead43ade5964234dfc1750c3a71d2e29df862ab3f79ba4a1275187b270b4c226bbb1155bee8e9e63c35597b4f4cb3effaa632e5e07e422344
+ languageName: node
+ linkType: hard
+
+"@csstools/postcss-stepped-value-functions@npm:^4.0.5":
+ version: 4.0.5
+ resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.5"
+ dependencies:
+ "@csstools/css-calc": "npm:^2.1.0"
+ "@csstools/css-parser-algorithms": "npm:^3.0.4"
+ "@csstools/css-tokenizer": "npm:^3.0.3"
+ peerDependencies:
+ postcss: ^8.4
+ checksum: 10c0/76f1f60c24b9e6a80b044eb19f37c1816788a2335fbf7c25f3fbea1cd7104857f424a451dcff60e4f8841618c6b6ffa6091f8b840d6d5930c1c7100c2f8ae74b
languageName: node
linkType: hard
@@ -1888,16 +1914,16 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-trigonometric-functions@npm:^4.0.4":
- version: 4.0.4
- resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.4"
+"@csstools/postcss-trigonometric-functions@npm:^4.0.5":
+ version: 4.0.5
+ resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.5"
dependencies:
- "@csstools/css-calc": "npm:^2.0.4"
+ "@csstools/css-calc": "npm:^2.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/344c07961d24894f315faebf43c0128167fb2e33964c70d0d39d99a051c045678511d7378959105d672c5286a5360fde28fe390cdebfe823f3949e3cd1d50c4e
+ checksum: 10c0/b8518c8b81da047448dcee12a5f3716dbc19671333387a4a673991a16f1a120441d2768de8a30ce1e2ef8d0d76509b9509f506ef1e8630da84834451414b23a3
languageName: node
linkType: hard
@@ -2206,8 +2232,8 @@ __metadata:
linkType: hard
"@formatjs/cli@npm:^6.1.1":
- version: 6.3.6
- resolution: "@formatjs/cli@npm:6.3.6"
+ version: 6.3.8
+ resolution: "@formatjs/cli@npm:6.3.8"
peerDependencies:
"@glimmer/env": ^0.1.7
"@glimmer/reference": ^0.91.1 || ^0.92.0
@@ -2236,7 +2262,7 @@ __metadata:
optional: true
bin:
formatjs: bin/formatjs
- checksum: 10c0/55f10699644c8b879d7fcf38660e7d9b0642c5f40ca59076c25ba190f350b48d7edb7f3d8481cc6139d3a708ee73f877c2c0a7d1865f15e80a73667270c9b7e3
+ checksum: 10c0/61fb0e56a2da26befad5ca6ff5a8bcf9c383d22634cf288f3cab5661bece7686e6f064adaa500954b37726a7745c73134b459d115d52c931b76d68d998c7b22d
languageName: node
linkType: hard
@@ -6742,10 +6768,10 @@ __metadata:
languageName: node
linkType: hard
-"cssdb@npm:^8.1.2":
- version: 8.1.2
- resolution: "cssdb@npm:8.1.2"
- checksum: 10c0/056149e713a78921f56d9ef0cd734577cedb93c27966c3d0eab01956a2aa8d3c260a911766064b57ded8b4d9c55dd5275626cbb022ccd8d2d0b93b53fefd1603
+"cssdb@npm:^8.2.1":
+ version: 8.2.1
+ resolution: "cssdb@npm:8.2.1"
+ checksum: 10c0/d27d7db0a39e1105181aac119a98d6c92cd5ceba2e8bd349cdf2ba4a8d9ead149b685a1dba9542ca24f094cc70eca4a3e02973fe1f74c11a373b508606e5e1c0
languageName: node
linkType: hard
@@ -13081,10 +13107,10 @@ __metadata:
languageName: node
linkType: hard
-"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0":
- version: 1.1.0
- resolution: "picocolors@npm:1.1.0"
- checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023
+"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "picocolors@npm:1.1.1"
+ checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
languageName: node
linkType: hard
@@ -13298,18 +13324,18 @@ __metadata:
languageName: node
linkType: hard
-"postcss-color-functional-notation@npm:^7.0.5":
- version: 7.0.5
- resolution: "postcss-color-functional-notation@npm:7.0.5"
+"postcss-color-functional-notation@npm:^7.0.6":
+ version: 7.0.6
+ resolution: "postcss-color-functional-notation@npm:7.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/5e1771b8a43abd3cb18142842e8ac100b205f37a6757d6686da49e0c61ecf33d09244d256f3802962105e7ef79fbde2dffbfc1eedf1700198c54d2d5e48f3dc1
+ checksum: 10c0/15f6dfc9a24d6f5186fb054623a92bcf9e804f4eaa35b339551a8048cdb0c7bd2e4655fdbb09a0c9a89f854e9fb1d71e298e8749597660ac034e79bd0d38d7dd
languageName: node
linkType: hard
@@ -13520,18 +13546,18 @@ __metadata:
languageName: node
linkType: hard
-"postcss-lab-function@npm:^7.0.5":
- version: 7.0.5
- resolution: "postcss-lab-function@npm:7.0.5"
+"postcss-lab-function@npm:^7.0.6":
+ version: 7.0.6
+ resolution: "postcss-lab-function@npm:7.0.6"
dependencies:
- "@csstools/css-color-parser": "npm:^3.0.5"
+ "@csstools/css-color-parser": "npm:^3.0.6"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/b688f6332ac12974452c97c5a40f4d0a604ce16b074124a1106add9cf9c25fbe7717d23423d6e92d937dc6e288e03e885b70e0793b96f41d28d2f7403bce7bf5
+ checksum: 10c0/8b8d498dbc939ee79737b29232b39d09cbda26cc92e8926fb74fe56a1bb05af1198e85a67a822f39cc69109ac6757a6ff7b20842ba5ffafce891abc9bc1c3c68
languageName: node
linkType: hard
@@ -13852,18 +13878,18 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.0.0":
- version: 10.0.9
- resolution: "postcss-preset-env@npm:10.0.9"
+ version: 10.1.0
+ resolution: "postcss-preset-env@npm:10.1.0"
dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.1"
- "@csstools/postcss-color-function": "npm:^4.0.5"
- "@csstools/postcss-color-mix-function": "npm:^3.0.5"
+ "@csstools/postcss-color-function": "npm:^4.0.6"
+ "@csstools/postcss-color-mix-function": "npm:^3.0.6"
"@csstools/postcss-content-alt-text": "npm:^2.0.4"
- "@csstools/postcss-exponential-functions": "npm:^2.0.4"
+ "@csstools/postcss-exponential-functions": "npm:^2.0.5"
"@csstools/postcss-font-format-keywords": "npm:^4.0.0"
- "@csstools/postcss-gamut-mapping": "npm:^2.0.5"
- "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.5"
- "@csstools/postcss-hwb-function": "npm:^4.0.5"
+ "@csstools/postcss-gamut-mapping": "npm:^2.0.6"
+ "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.6"
+ "@csstools/postcss-hwb-function": "npm:^4.0.6"
"@csstools/postcss-ic-unit": "npm:^4.0.0"
"@csstools/postcss-initial": "npm:^2.0.0"
"@csstools/postcss-is-pseudo-class": "npm:^5.0.1"
@@ -13873,27 +13899,29 @@ __metadata:
"@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0"
"@csstools/postcss-logical-resize": "npm:^3.0.0"
"@csstools/postcss-logical-viewport-units": "npm:^3.0.3"
- "@csstools/postcss-media-minmax": "npm:^2.0.4"
+ "@csstools/postcss-media-minmax": "npm:^2.0.5"
"@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.4"
"@csstools/postcss-nested-calc": "npm:^4.0.0"
"@csstools/postcss-normalize-display-values": "npm:^4.0.0"
- "@csstools/postcss-oklab-function": "npm:^4.0.5"
+ "@csstools/postcss-oklab-function": "npm:^4.0.6"
"@csstools/postcss-progressive-custom-properties": "npm:^4.0.0"
- "@csstools/postcss-relative-color-syntax": "npm:^3.0.5"
+ "@csstools/postcss-random-function": "npm:^1.0.0"
+ "@csstools/postcss-relative-color-syntax": "npm:^3.0.6"
"@csstools/postcss-scope-pseudo-class": "npm:^4.0.1"
- "@csstools/postcss-stepped-value-functions": "npm:^4.0.4"
+ "@csstools/postcss-sign-functions": "npm:^1.0.0"
+ "@csstools/postcss-stepped-value-functions": "npm:^4.0.5"
"@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1"
- "@csstools/postcss-trigonometric-functions": "npm:^4.0.4"
+ "@csstools/postcss-trigonometric-functions": "npm:^4.0.5"
"@csstools/postcss-unset-value": "npm:^4.0.0"
autoprefixer: "npm:^10.4.19"
browserslist: "npm:^4.23.1"
css-blank-pseudo: "npm:^7.0.1"
css-has-pseudo: "npm:^7.0.1"
css-prefers-color-scheme: "npm:^10.0.0"
- cssdb: "npm:^8.1.2"
+ cssdb: "npm:^8.2.1"
postcss-attribute-case-insensitive: "npm:^7.0.1"
postcss-clamp: "npm:^4.1.0"
- postcss-color-functional-notation: "npm:^7.0.5"
+ postcss-color-functional-notation: "npm:^7.0.6"
postcss-color-hex-alpha: "npm:^10.0.0"
postcss-color-rebeccapurple: "npm:^10.0.0"
postcss-custom-media: "npm:^11.0.5"
@@ -13906,7 +13934,7 @@ __metadata:
postcss-font-variant: "npm:^5.0.0"
postcss-gap-properties: "npm:^6.0.0"
postcss-image-set-function: "npm:^7.0.0"
- postcss-lab-function: "npm:^7.0.5"
+ postcss-lab-function: "npm:^7.0.6"
postcss-logical: "npm:^8.0.0"
postcss-nesting: "npm:^13.0.1"
postcss-opacity-percentage: "npm:^3.0.0"
@@ -13918,7 +13946,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/985ef4cfd2dd6a94d8a802db8e392c4b4c47ae0de8fd5224c60d8172cac3d7ce9011e63ab80470cddc77f21f09b2be850f97ac2478f651bc0a8956b538b079fe
+ checksum: 10c0/bd157dbed38c3c125b3bf86f5437a8094539ec5bf24428487c7bbf29da393731e48053afc695494cc9dbe4d182cfe405c398fcf0b22eb326b6db395e7315f892
languageName: node
linkType: hard
@@ -14052,13 +14080,13 @@ __metadata:
linkType: hard
"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.47":
- version: 8.4.47
- resolution: "postcss@npm:8.4.47"
+ version: 8.4.49
+ resolution: "postcss@npm:8.4.49"
dependencies:
nanoid: "npm:^3.3.7"
- picocolors: "npm:^1.1.0"
+ picocolors: "npm:^1.1.1"
source-map-js: "npm:^1.2.1"
- checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44
+ checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3
languageName: node
linkType: hard
@@ -14689,8 +14717,8 @@ __metadata:
linkType: hard
"react-select@npm:^5.7.3":
- version: 5.8.2
- resolution: "react-select@npm:5.8.2"
+ version: 5.8.3
+ resolution: "react-select@npm:5.8.3"
dependencies:
"@babel/runtime": "npm:^7.12.0"
"@emotion/cache": "npm:^11.4.0"
@@ -14704,7 +14732,7 @@ __metadata:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
- checksum: 10c0/3089b8bfb23f556a7b1de07ea654fc5f5976f531a731a0231bbcbc195afb9294c36f49d712712f2deefc13eb6d7ede4aa1d80cb45b80afd3e26fde2f09db35eb
+ checksum: 10c0/25aaf0ad964a31dcf991be8b9eb478f94b2ff5dfd2e74a894f692c6dec9247f6ded6258fbf875984d2ada5aeb0ee742b85c6a94f58fae89112e913526cfd0577
languageName: node
linkType: hard