From 3bdfa3eb4c8e4ec16bff03928a5a8073e4d6e494 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Sat, 4 Jan 2025 13:42:27 -0600 Subject: [PATCH 01/21] Added validator for extra profile field values with empty name (#33421) --- app/models/account.rb | 3 ++- .../empty_profile_field_names_validator.rb | 15 +++++++++++++++ config/locales/activerecord.en.yml | 2 ++ spec/models/account_spec.rb | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 app/validators/empty_profile_field_names_validator.rb diff --git a/app/models/account.rb b/app/models/account.rb index 206529301e4b57..d42da2e9af1b7e 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -118,6 +118,7 @@ class Account < ApplicationRecord validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? } validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? } validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? } + validates_with EmptyProfileFieldNamesValidator, if: -> { local? && will_save_change_to_fields? } with_options on: :create do validates :uri, absence: true, if: :local? validates :inbox_url, absence: true, if: :local? @@ -300,7 +301,7 @@ def fields_attributes=(attributes) if attributes.is_a?(Hash) attributes.each_value do |attr| - next if attr[:name].blank? + next if attr[:name].blank? && attr[:value].blank? previous = old_fields.find { |item| item['value'] == attr[:value] } diff --git a/app/validators/empty_profile_field_names_validator.rb b/app/validators/empty_profile_field_names_validator.rb new file mode 100644 index 00000000000000..c979f9f567395c --- /dev/null +++ b/app/validators/empty_profile_field_names_validator.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class EmptyProfileFieldNamesValidator < ActiveModel::Validator + def validate(account) + return if account.fields.empty? + + account.errors.add(:fields, :fields_with_values_missing_labels) if fields_with_values_missing_names?(account) + end + + private + + def fields_with_values_missing_names?(account) + account.fields.any? { |field| field.name.blank? && field.value.present? } + end +end diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index 569c4c4d687a45..57404d26483d4e 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -24,6 +24,8 @@ en: models: account: attributes: + fields: + fields_with_values_missing_labels: contains values with missing labels username: invalid: must contain only letters, numbers and underscores reserved: is reserved diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 77341b778644da..5ba39848b79969 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -822,6 +822,10 @@ it { is_expected.to validate_length_of(:display_name).is_at_most(described_class::DISPLAY_NAME_LENGTH_LIMIT) } it { is_expected.to_not allow_values(account_note_over_limit).for(:note) } + + it { is_expected.to allow_value(fields_empty_name_value).for(:fields) } + it { is_expected.to_not allow_value(fields_over_limit).for(:fields) } + it { is_expected.to_not allow_value(fields_empty_name).for(:fields) } end context 'when account is remote' do @@ -854,6 +858,18 @@ def display_name_over_limit def account_note_over_limit 'a' * described_class::NOTE_LENGTH_LIMIT * 2 end + + def fields_empty_name_value + Array.new(4) { { 'name' => '', 'value' => '' } } + end + + def fields_over_limit + Array.new(5) { { 'name' => 'Name', 'value' => 'Value', 'verified_at' => '01/01/1970' } } + end + + def fields_empty_name + [{ 'name' => '', 'value' => 'Value', 'verified_at' => '01/01/1970' }] + end end describe 'scopes' do From f16fbc069a7d07f2b60a79ba624ee452951457e5 Mon Sep 17 00:00:00 2001 From: zunda Date: Sun, 5 Jan 2025 18:47:10 -1000 Subject: [PATCH 02/21] Use configured limit for number of profile fields (#33463) --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 5ba39848b79969..967809b8e1c202 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -864,7 +864,7 @@ def fields_empty_name_value end def fields_over_limit - Array.new(5) { { 'name' => 'Name', 'value' => 'Value', 'verified_at' => '01/01/1970' } } + Array.new(described_class::DEFAULT_FIELDS_SIZE + 1) { { 'name' => 'Name', 'value' => 'Value', 'verified_at' => '01/01/1970' } } end def fields_empty_name From 081244f692c495722f48272279795f576d6c55b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 08:55:37 +0100 Subject: [PATCH 03/21] Update dependency sass to v1.83.1 (#33453) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8f948e76090f43..7014e88c499527 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15628,8 +15628,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.83.0 - resolution: "sass@npm:1.83.0" + version: 1.83.1 + resolution: "sass@npm:1.83.1" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15640,7 +15640,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/4415361229879a9041d77c953da85482e89032aa4321ba13250a9987d39c80fac6c88af3777f2a2d76a4e8b0c8afbd21c1970fdbe84e0b3ec25fb26741f92beb + checksum: 10c0/9772506cd8290df7b5e800055098e91a8a65100840fd9e90c660deb74b248b3ddbbd1a274b8f7f09777d472d2c873575357bd87939a40fb5a80bdf654985486f languageName: node linkType: hard From c0f5705c34fdd6bba6e9351c317ca07bad19fa71 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 08:01:22 +0000 Subject: [PATCH 04/21] Update dependency uuid to v11.0.4 (#33464) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7014e88c499527..8278a45d404073 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17848,11 +17848,11 @@ __metadata: linkType: hard "uuid@npm:^11.0.0": - version: 11.0.3 - resolution: "uuid@npm:11.0.3" + version: 11.0.4 + resolution: "uuid@npm:11.0.4" bin: uuid: dist/esm/bin/uuid - checksum: 10c0/cee762fc76d949a2ff9205770334699e0043d52bb766472593a25f150077c9deed821230251ea3d6ab3943a5ea137d2826678797f1d5f6754c7ce5ce27e9f7a6 + checksum: 10c0/3c13591c4dedaa3741f925e284df5974e3d6e0b1cb0f6f75f98c36f9c01d2a414350364fd067613ef600a21c6973dab0506530d4f499ff878f32a06f84569ead languageName: node linkType: hard From c93c1f38b73fcfa2ed68daf5a6bba36ec93237c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 09:13:39 +0100 Subject: [PATCH 05/21] New Crowdin Translations (automated) (#33451) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/az.json | 4 +- app/javascript/mastodon/locales/bg.json | 2 + app/javascript/mastodon/locales/ca.json | 2 + app/javascript/mastodon/locales/cs.json | 95 ++++++++++++++++++++++ app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/de.json | 1 + app/javascript/mastodon/locales/el.json | 2 +- app/javascript/mastodon/locales/eo.json | 1 + app/javascript/mastodon/locales/es-AR.json | 1 + app/javascript/mastodon/locales/es-MX.json | 1 + app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/fi.json | 2 + app/javascript/mastodon/locales/fil.json | 10 +++ app/javascript/mastodon/locales/fo.json | 1 + app/javascript/mastodon/locales/fr-CA.json | 1 + app/javascript/mastodon/locales/fr.json | 1 + app/javascript/mastodon/locales/gl.json | 2 + app/javascript/mastodon/locales/he.json | 2 + app/javascript/mastodon/locales/hu.json | 2 +- app/javascript/mastodon/locales/is.json | 2 + app/javascript/mastodon/locales/ko.json | 1 + app/javascript/mastodon/locales/la.json | 65 +++++++++------ app/javascript/mastodon/locales/lt.json | 1 + app/javascript/mastodon/locales/lv.json | 13 ++- app/javascript/mastodon/locales/nl.json | 1 + app/javascript/mastodon/locales/nn.json | 1 + app/javascript/mastodon/locales/sk.json | 3 + app/javascript/mastodon/locales/sq.json | 1 + app/javascript/mastodon/locales/th.json | 12 +++ app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/uk.json | 38 ++++++++- app/javascript/mastodon/locales/vi.json | 2 + app/javascript/mastodon/locales/zh-CN.json | 3 +- app/javascript/mastodon/locales/zh-TW.json | 1 + config/locales/activerecord.bg.yml | 2 + config/locales/activerecord.ca.yml | 2 + config/locales/activerecord.da.yml | 2 + config/locales/activerecord.eo.yml | 2 + config/locales/activerecord.es-AR.yml | 2 + config/locales/activerecord.es-MX.yml | 2 + config/locales/activerecord.es.yml | 2 + config/locales/activerecord.fi.yml | 2 + config/locales/activerecord.fil.yml | 8 ++ config/locales/activerecord.fo.yml | 2 + config/locales/activerecord.fr-CA.yml | 2 + config/locales/activerecord.fr.yml | 2 + config/locales/activerecord.he.yml | 2 + config/locales/activerecord.is.yml | 2 + config/locales/activerecord.lt.yml | 2 + config/locales/activerecord.nan.yml | 15 ++++ config/locales/activerecord.nl.yml | 2 + config/locales/activerecord.nn.yml | 2 + config/locales/activerecord.sq.yml | 2 + config/locales/activerecord.sv.yml | 5 ++ config/locales/activerecord.th.yml | 5 ++ config/locales/activerecord.tr.yml | 2 + config/locales/activerecord.uk.yml | 3 + config/locales/activerecord.vi.yml | 2 + config/locales/activerecord.zh-TW.yml | 2 + config/locales/cs.yml | 12 +++ config/locales/devise.nan.yml | 14 ++++ config/locales/doorkeeper.cs.yml | 1 + config/locales/doorkeeper.nan.yml | 16 ++++ config/locales/lv.yml | 6 ++ config/locales/nan.yml | 41 ++++++++++ config/locales/simple_form.cs.yml | 14 ++++ config/locales/simple_form.eo.yml | 10 +++ config/locales/simple_form.nan.yml | 10 +++ config/locales/simple_form.sv.yml | 1 + config/locales/simple_form.uk.yml | 21 ++++- config/locales/sv.yml | 40 +++++++++ config/locales/uk.yml | 66 +++++++++++++-- 72 files changed, 565 insertions(+), 40 deletions(-) diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index 39801e7b2ea490..5f1efe3d7273a5 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -240,5 +240,7 @@ "dismissable_banner.community_timeline": "Bunlar, hesabları {domain} serverində yerləşən insanların ən son ictimai paylaşımlarıdır.", "dismissable_banner.dismiss": "Bağla", "dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.", - "dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır." + "dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.", + "domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla", + "domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər." } diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 0951cce712ea90..7b6d205045b163 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Показване/скриване на текст зад предупреждение на съдържание", "keyboard_shortcuts.toggle_sensitivity": "Показване/скриване на мултимедията", "keyboard_shortcuts.toot": "Начало на нова публикация", + "keyboard_shortcuts.translate": "за превод на публикация", "keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене", "keyboard_shortcuts.up": "Преместване нагоре в списъка", "lightbox.close": "Затваряне", @@ -836,6 +837,7 @@ "status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.", "status.redraft": "Изтриване и преработване", "status.remove_bookmark": "Премахване на отметката", + "status.remove_favourite": "Премахване от любими", "status.replied_in_thread": "Отговорено в нишката", "status.replied_to": "В отговор до {name}", "status.reply": "Отговор", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5aba9327d637ec..0e9a9051a86df2 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Mostra/amaga el text marcat com a sensible", "keyboard_shortcuts.toggle_sensitivity": "Mostra/amaga contingut", "keyboard_shortcuts.toot": "Escriu un nou tut", + "keyboard_shortcuts.translate": "per a traduir una publicació", "keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "Apuja a la llista", "lightbox.close": "Tanca", @@ -836,6 +837,7 @@ "status.reblogs.empty": "Encara no ha impulsat ningú aquest tut. Quan algú ho faci, apareixerà aquí.", "status.redraft": "Esborra i reescriu", "status.remove_bookmark": "Elimina el marcador", + "status.remove_favourite": "Elimina dels preferits", "status.replied_in_thread": "Respost al fil", "status.replied_to": "En resposta a {name}", "status.reply": "Respon", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 4b4236e3fb69ba..ba58b998f1f572 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -85,7 +85,26 @@ "alert.rate_limited.title": "Spojení omezena", "alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.title": "Jejda!", + "alt_text_badge.title": "Popisek", "announcement.announcement": "Oznámení", + "annual_report.summary.archetype.booster": "Lovec obsahu", + "annual_report.summary.archetype.lurker": "Špión", + "annual_report.summary.archetype.oracle": "Vědma", + "annual_report.summary.archetype.pollster": "Průzkumník", + "annual_report.summary.archetype.replier": "Sociální motýlek", + "annual_report.summary.followers.followers": "sledujících", + "annual_report.summary.followers.total": "{count} celkem", + "annual_report.summary.here_it_is": "Zde je tvůj {year} v přehledu:", + "annual_report.summary.highlighted_post.by_favourites": "nejvíce oblíbený příspěvek", + "annual_report.summary.highlighted_post.by_reblogs": "nejvíce boostovaný příspěvek", + "annual_report.summary.highlighted_post.by_replies": "příspěvek s nejvíce odpověďmi", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "nejpoužívanější aplikace", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "nejpoužívanější hashtag", + "annual_report.summary.most_used_hashtag.none": "Žádné", + "annual_report.summary.new_posts.new_posts": "nové příspěvky", + "annual_report.summary.percentile.text": "To vás umisťuje do vrcholu{domain} uživatelů.", + "annual_report.summary.thanks": "Děkujeme, že jste součástí Mastodonu!", "attachments_list.unprocessed": "(nezpracováno)", "audio.hide": "Skrýt zvuk", "block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou stále být viditelné pro nepřihlášené uživatele.", @@ -109,6 +128,7 @@ "bundle_column_error.routing.body": "Požadovaná stránka nebyla nalezena. Opravdu je URL v adresním řádku správně?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zavřít", + "bundle_modal_error.message": "Něco se pokazilo při načítání této obrazovky.", "bundle_modal_error.retry": "Zkusit znovu", "closed_registrations.other_server_instructions": "Protože Mastodon je decentralizovaný, můžete si vytvořit účet na jiném serveru a přesto komunikovat s tímto serverem.", "closed_registrations_modal.description": "V současné době není možné vytvořit účet na {domain}, ale mějte prosím na paměti, že k používání Mastodonu nepotřebujete účet konkrétně na {domain}.", @@ -119,13 +139,16 @@ "column.blocks": "Blokovaní uživatelé", "column.bookmarks": "Záložky", "column.community": "Místní časová osa", + "column.create_list": "Vytvořit seznam", "column.direct": "Soukromé zmínky", "column.directory": "Prozkoumat profily", "column.domain_blocks": "Blokované domény", + "column.edit_list": "Upravit seznam", "column.favourites": "Oblíbené", "column.firehose": "Živé kanály", "column.follow_requests": "Žádosti o sledování", "column.home": "Domů", + "column.list_members": "Spravovat členy seznamu", "column.lists": "Seznamy", "column.mutes": "Skrytí uživatelé", "column.notifications": "Oznámení", @@ -138,6 +161,7 @@ "column_header.pin": "Připnout", "column_header.show_settings": "Zobrazit nastavení", "column_header.unpin": "Odepnout", + "column_search.cancel": "Zrušit", "column_subheading.settings": "Nastavení", "community.column_settings.local_only": "Pouze místní", "community.column_settings.media_only": "Pouze média", @@ -179,6 +203,8 @@ "confirmations.edit.confirm": "Upravit", "confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?", "confirmations.edit.title": "Přepsat příspěvek?", + "confirmations.follow_to_list.confirm": "Sledovat a přidat do seznamu", + "confirmations.follow_to_list.title": "Sledovat uživatele?", "confirmations.logout.confirm": "Odhlásit se", "confirmations.logout.message": "Opravdu se chcete odhlásit?", "confirmations.logout.title": "Odhlásit se?", @@ -193,6 +219,8 @@ "confirmations.unfollow.message": "Opravdu chcete {name} přestat sledovat?", "confirmations.unfollow.title": "Přestat sledovat uživatele?", "content_warning.hide": "Skrýt příspěvek", + "content_warning.show": "Přesto zobrazit", + "content_warning.show_more": "Zobrazit více", "conversation.delete": "Smazat konverzaci", "conversation.mark_as_read": "Označit jako přečtené", "conversation.open": "Zobrazit konverzaci", @@ -293,6 +321,7 @@ "filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii", "filter_modal.select_filter.title": "Filtrovat tento příspěvek", "filter_modal.title.status": "Filtrovat příspěvek", + "filter_warning.matches_filter": "Odpovídá filtru “{title}”", "filtered_notifications_banner.title": "Filtrovaná oznámení", "firehose.all": "Vše", "firehose.local": "Tento server", @@ -323,6 +352,7 @@ "footer.privacy_policy": "Zásady ochrany osobních údajů", "footer.source_code": "Zobrazit zdrojový kód", "footer.status": "Stav", + "footer.terms_of_service": "Obchodní podmínky", "generic.saved": "Uloženo", "getting_started.heading": "Začínáme", "hashtag.column_header.tag_mode.all": "a {additional}", @@ -340,6 +370,10 @@ "hashtag.follow": "Sledovat hashtag", "hashtag.unfollow": "Přestat sledovat hashtag", "hashtags.and_other": "…a {count, plural, one {# další} few {# další} other {# dalších}}", + "hints.profiles.see_more_followers": "Zobrazit více sledujících na {domain}", + "hints.profiles.see_more_follows": "Zobrazit další sledování na {domain}", + "hints.profiles.see_more_posts": "Zobrazit další příspěvky na {domain}", + "hints.threads.see_more": "Zobrazit další odpovědi na {domain}", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", "home.hide_announcements": "Skrýt oznámení", @@ -347,12 +381,17 @@ "home.pending_critical_update.link": "Zobrazit aktualizace", "home.pending_critical_update.title": "K dispozici je kritická bezpečnostní aktualizace!", "home.show_announcements": "Zobrazit oznámení", + "ignore_notifications_modal.ignore": "Ignorovat oznámení", + "interaction_modal.go": "Přejít", + "interaction_modal.no_account_yet": "Ještě nemáte účet?", "interaction_modal.on_another_server": "Na jiném serveru", "interaction_modal.on_this_server": "Na tomto serveru", "interaction_modal.title.favourite": "Oblíbit si příspěvek od uživatele {name}", "interaction_modal.title.follow": "Sledovat {name}", "interaction_modal.title.reblog": "Boostnout příspěvek uživatele {name}", "interaction_modal.title.reply": "Odpovědět na příspěvek uživatele {name}", + "interaction_modal.title.vote": "Hlasujte v anketě {name}", + "interaction_modal.username_prompt": "např. {example}", "intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dní} other {# dní}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodin} other {# hodin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", @@ -388,6 +427,7 @@ "keyboard_shortcuts.toggle_hidden": "Zobrazit/skrýt text za varováním o obsahu", "keyboard_shortcuts.toggle_sensitivity": "Zobrazit/skrýt média", "keyboard_shortcuts.toot": "Začít nový příspěvek", + "keyboard_shortcuts.translate": "k přeložení příspěvku", "keyboard_shortcuts.unfocus": "Zrušit zaměření na nový příspěvek/hledání", "keyboard_shortcuts.up": "Posunout v seznamu nahoru", "lightbox.close": "Zavřít", @@ -398,13 +438,29 @@ "link_preview.author": "Podle {name}", "link_preview.more_from_author": "Více od {name}", "link_preview.shares": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} many {{counter} příspěvků} other {{counter} příspěvků}}", + "lists.add_member": "Přidat", + "lists.add_to_lists": "Přidat {name} do seznamů", + "lists.create": "Vytvořit", + "lists.create_list": "Vytvořit seznam", "lists.delete": "Smazat seznam", + "lists.done": "Hotovo", "lists.edit": "Upravit seznam", + "lists.find_users_to_add": "Najít uživatele, které chcete přidat", + "lists.list_members": "Členové seznamu", + "lists.list_name": "Název seznamu", + "lists.new_list_name": "Název nového seznamu", + "lists.no_lists_yet": "Zatím žádné seznamy.", + "lists.no_members_yet": "Zatím žádní členové.", + "lists.no_results_found": "Nebyly nalezeny žádné výsledky.", + "lists.remove_member": "Odstranit", "lists.replies_policy.followed": "Sledovaným uživatelům", "lists.replies_policy.list": "Členům seznamu", "lists.replies_policy.none": "Nikomu", + "lists.save": "Uložit", + "lists.search": "Hledat", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", "loading_indicator.label": "Načítání…", + "media_gallery.hide": "Skrýt", "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.", "mute_modal.hide_from_notifications": "Skrýt z notifikací", "mute_modal.hide_options": "Skrýt možnosti", @@ -416,6 +472,7 @@ "mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.", "mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.", "navigation_bar.about": "O aplikaci", + "navigation_bar.administration": "Administrace", "navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", @@ -432,6 +489,7 @@ "navigation_bar.follows_and_followers": "Sledovaní a sledující", "navigation_bar.lists": "Seznamy", "navigation_bar.logout": "Odhlásit se", + "navigation_bar.moderation": "Moderace", "navigation_bar.mutes": "Skrytí uživatelé", "navigation_bar.opened_in_classic_interface": "Příspěvky, účty a další specifické stránky jsou ve výchozím nastavení otevřeny v klasickém webovém rozhraní.", "navigation_bar.personal": "Osobní", @@ -448,6 +506,11 @@ "notification.favourite": "Uživatel {name} si oblíbil váš příspěvek", "notification.follow": "Uživatel {name} vás začal sledovat", "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat", + "notification.label.mention": "Zmínka", + "notification.label.private_mention": "Soukromá zmínka", + "notification.label.reply": "Odpověď", + "notification.mention": "Zmínka", + "notification.mentioned_you": "{name} vás zmínil", "notification.moderation-warning.learn_more": "Zjistit více", "notification.moderation_warning": "Obdrželi jste moderační varování", "notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.", @@ -468,11 +531,15 @@ "notification.status": "Uživatel {name} právě přidal příspěvek", "notification.update": "Uživatel {name} upravil příspěvek", "notification_requests.accept": "Přijmout", + "notification_requests.confirm_accept_multiple.title": "Přijmout žádosti o oznámení?", "notification_requests.dismiss": "Zamítnout", + "notification_requests.edit_selection": "Upravit", + "notification_requests.exit_selection": "Hotovo", "notification_requests.maximize": "Maximalizovat", "notification_requests.minimize_banner": "Minimalizovat banner filtrovaných oznámení", "notification_requests.notifications_from": "Oznámení od {name}", "notification_requests.title": "Vyfiltrovaná oznámení", + "notification_requests.view": "Zobrazit oznámení", "notifications.clear": "Vyčistit oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", "notifications.clear_title": "Vyčistit oznámení?", @@ -484,6 +551,7 @@ "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", "notifications.column_settings.follow": "Noví sledující:", "notifications.column_settings.follow_request": "Nové žádosti o sledování:", + "notifications.column_settings.group": "Skupina", "notifications.column_settings.mention": "Zmínky:", "notifications.column_settings.poll": "Výsledky anket:", "notifications.column_settings.push": "Push oznámení", @@ -507,6 +575,13 @@ "notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat", "notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto", "notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.", + "notifications.policy.accept": "Přijmout", + "notifications.policy.accept_hint": "Zobrazit v oznámeních", + "notifications.policy.drop": "Ignorovat", + "notifications.policy.filter": "Filtrovat", + "notifications.policy.filter_hint": "Odeslat do filtrované schránky oznámení", + "notifications.policy.filter_limited_accounts_hint": "Omezeno moderátory serveru", + "notifications.policy.filter_limited_accounts_title": "Moderované účty", "notifications.policy.filter_new_accounts.hint": "Vytvořeno během {days, plural, one {včerejška} few {posledních # dnů} many {posledních # dní} other {posledních # dní}}", "notifications.policy.filter_new_accounts_title": "Nové účty", "notifications.policy.filter_not_followers_hint": "Včetně lidí, kteří vás sledovali méně než {days, plural, one {jeden den} few {# dny} many {# dní} other {# dní}}", @@ -515,10 +590,15 @@ "notifications.policy.filter_not_following_title": "Lidé, které nesledujete", "notifications.policy.filter_private_mentions_hint": "Vyfiltrováno, pokud to není odpověď na vaši zmínku nebo pokud sledujete odesílatele", "notifications.policy.filter_private_mentions_title": "Nevyžádané soukromé zmínky", + "notifications.policy.title": "Spravovat oznámení od…", "notifications_permission_banner.enable": "Povolit oznámení na ploše", "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.", "notifications_permission_banner.title": "Nenechte si nic uniknout", + "onboarding.follows.back": "Zpět", + "onboarding.follows.done": "Hotovo", "onboarding.follows.empty": "Bohužel, žádné výsledky nelze momentálně zobrazit. Můžete zkusit vyhledat nebo procházet stránku s průzkumem a najít lidi, kteří budou sledovat, nebo to zkuste znovu později.", + "onboarding.follows.search": "Hledat", + "onboarding.follows.title": "Sledujte lidi a začněte", "onboarding.profile.discoverable": "Udělat svůj profil vyhledatelným", "onboarding.profile.discoverable_hint": "Když se rozhodnete být vyhledatelný na Mastodonu, vaše příspěvky se mohou objevit ve výsledcích vyhledávání a v populárních, a váš profil může být navrhován lidem s podobnými zájmy.", "onboarding.profile.display_name": "Zobrazované jméno", @@ -556,6 +636,8 @@ "privacy_policy.title": "Zásady ochrany osobních údajů", "recommended": "Doporučeno", "refresh": "Obnovit", + "regeneration_indicator.please_stand_by": "Počkej prosím.", + "regeneration_indicator.preparing_your_home_feed": "Připravujeme vaší domovskou stránku…", "relative_time.days": "{number} d", "relative_time.full.days": "před {number, plural, one {# dnem} few {# dny} many {# dny} other {# dny}}", "relative_time.full.hours": "před {number, plural, one {# hodinou} few {# hodinami} many {# hodinami} other {# hodinami}}", @@ -639,8 +721,11 @@ "search_results.accounts": "Profily", "search_results.all": "Vše", "search_results.hashtags": "Hashtagy", + "search_results.no_results": "Nelze najít.", + "search_results.no_search_yet": "Zkuste vyhledat příspěvky, profily nebo hashtagy.", "search_results.see_all": "Zobrazit vše", "search_results.statuses": "Příspěvky", + "search_results.title": "Hledat \"{q}\"", "server_banner.about_active_users": "Lidé používající tento server během posledních 30 dní (měsíční aktivní uživatelé)", "server_banner.active_users": "aktivní uživatelé", "server_banner.administered_by": "Spravováno:", @@ -658,6 +743,7 @@ "status.bookmark": "Přidat do záložek", "status.cancel_reblog_private": "Zrušit boostnutí", "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý", + "status.continued_thread": "Pokračuje ve vlákně", "status.copy": "Zkopírovat odkaz na příspěvek", "status.delete": "Smazat", "status.detailed_status": "Podrobné zobrazení konverzace", @@ -666,6 +752,7 @@ "status.edit": "Upravit", "status.edited": "Naposledy upraveno {date}", "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", + "status.embed": "Získejte kód pro vložení", "status.favourite": "Oblíbit", "status.favourites": "{count, plural, one {oblíbený} few {oblíbené} many {oblíbených} other {oblíbených}}", "status.filter": "Filtrovat tento příspěvek", @@ -690,6 +777,8 @@ "status.reblogs.empty": "Tento příspěvek ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.", "status.redraft": "Smazat a přepsat", "status.remove_bookmark": "Odstranit ze záložek", + "status.remove_favourite": "Odebrat z oblíbených", + "status.replied_in_thread": "Odpověděli ve vlákně", "status.replied_to": "Odpověděl/a uživateli {name}", "status.reply": "Odpovědět", "status.replyAll": "Odpovědět na vlákno", @@ -710,6 +799,7 @@ "subscribed_languages.target": "Změnit odebírané jazyky na {target}", "tabs_bar.home": "Domů", "tabs_bar.notifications": "Oznámení", + "terms_of_service.title": "Podmínky služby", "time_remaining.days": "{number, plural, one {Zbývá # den} few {Zbývají # dny} many {Zbývá # dní} other {Zbývá # dní}}", "time_remaining.hours": "{number, plural, one {Zbývá # hodina} few {Zbývají # hodiny} many {Zbývá # hodin} other {Zbývá # hodin}}", "time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minut} other {Zbývá # minut}}", @@ -727,6 +817,11 @@ "upload_error.poll": "Nahrávání souborů není povoleno s anketami.", "upload_form.audio_description": "Popis pro sluchově postižené", "upload_form.description": "Popis pro zrakově postižené", + "upload_form.drag_and_drop.instructions": "Chcete-li zvednout přílohu, stiskněte mezerník nebo enter. Při přetažení použijte klávesnicové šipky k přesunutí mediální přílohy v libovolném směru. Stiskněte mezerník nebo enter pro vložení přílohy do nové pozice, nebo stiskněte Esc pro ukončení.", + "upload_form.drag_and_drop.on_drag_cancel": "Přetažení bylo zrušeno. Příloha {item} byla vrácena.", + "upload_form.drag_and_drop.on_drag_end": "Příloha {item} byla vrácena.", + "upload_form.drag_and_drop.on_drag_over": "Příloha {item} byla přesunuta.", + "upload_form.drag_and_drop.on_drag_start": "Zvednuta příloha {item}.", "upload_form.edit": "Upravit", "upload_form.thumbnail": "Změnit miniaturu", "upload_form.video_description": "Popis pro sluchově či zrakově postižené", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 335f80557617ab..92cfb62f51da94 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag CW", "keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier", "keyboard_shortcuts.toot": "Påbegynd nyt indlæg", + "keyboard_shortcuts.translate": "for at oversætte et indlæg", "keyboard_shortcuts.unfocus": "Fjern fokus fra tekstskrivningsområde/søgning", "keyboard_shortcuts.up": "Flyt opad på listen", "lightbox.close": "Luk", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 967e7a1fe8e65b..f7e64d034d6fd6 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden", "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden", "keyboard_shortcuts.toot": "Neuen Beitrag erstellen", + "keyboard_shortcuts.translate": "Beitrag übersetzen", "keyboard_shortcuts.unfocus": "Eingabefeld/Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "Ansicht nach oben bewegen", "lightbox.close": "Schließen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 6d8a2cd4e5c980..293dcc8205413e 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -863,7 +863,7 @@ "time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}", "time_remaining.moments": "Στιγμές που απομένουν", "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}", - "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} other {{counter} άτομα} }{days, plural, one { την τελευταία ημέρα} other { τις τελευταίες {days} ημέρες}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} other {{counter} άτομα}} {days, plural, one {την τελευταία ημέρα} other {τις τελευταίες {days} ημέρες}}", "trends.trending_now": "Δημοφιλή τώρα", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "units.short.billion": "{count}Δις", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 6f5da03daf789f..6408ce4b65da30 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ CW", "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion", "keyboard_shortcuts.toot": "Komencu novan afiŝon", + "keyboard_shortcuts.translate": "Traduki afiŝon", "keyboard_shortcuts.unfocus": "Senfokusigi verki tekstareon/serĉon", "keyboard_shortcuts.up": "Movu supren en la listo", "lightbox.close": "Fermi", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 3e2e7966913657..721e47c27140a2 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de la advertencia de contenido (\"CW\")", "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar medios", "keyboard_shortcuts.toot": "Comenzar un mensaje nuevo", + "keyboard_shortcuts.translate": "para traducir un mensaje", "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "Subir en la lista", "lightbox.close": "Cerrar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index ab65bbb6d45778..5324d3d3fc669f 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", "keyboard_shortcuts.toot": "Comenzar una nueva publicación", + "keyboard_shortcuts.translate": "para traducir una publicación", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 82f858f6673c74..f580822cd7af21 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", "keyboard_shortcuts.toot": "Comienza una nueva publicación", + "keyboard_shortcuts.translate": "para traducir una publicación", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index e445473d05daab..9abeeea9bfcc63 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -104,6 +104,7 @@ "annual_report.summary.most_used_hashtag.none": "Ei mitään", "annual_report.summary.new_posts.new_posts": "uutta julkaisua", "annual_report.summary.percentile.text": "Olet osa huippujoukkoa, johon kuuluu{domain}-käyttäjistä.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Emme kerro Bernie Sandersille.", "annual_report.summary.thanks": "Kiitos, että olet osa Mastodonia!", "attachments_list.unprocessed": "(käsittelemätön)", "audio.hide": "Piilota ääni", @@ -456,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Näytä tai piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toggle_sensitivity": "Näytä tai piilota media", "keyboard_shortcuts.toot": "Luo uusi julkaisu", + "keyboard_shortcuts.translate": "Käännä julkaisu", "keyboard_shortcuts.unfocus": "Poistu kirjoitus- tai hakukentästä", "keyboard_shortcuts.up": "Siirry luettelossa taaksepäin", "lightbox.close": "Sulje", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 827758f7260509..492ad38bac86a3 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -34,7 +34,9 @@ "account.follow_back": "Sundan pabalik", "account.followers": "Mga tagasunod", "account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.", + "account.followers_counter": "{count, plural, one {{counter} tagasunod} other {{counter} tagasunod}}", "account.following": "Sinusundan", + "account.following_counter": "{count, plural, one {{counter} sinusundan} other {{counter} sinusundan}}", "account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.", "account.go_to_profile": "Pumunta sa profile", "account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}", @@ -46,14 +48,21 @@ "account.media": "Medya", "account.mention": "Banggitin si @{name}", "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "account.mute": "I-mute si @{name}", + "account.mute_notifications_short": "I-mute ang mga abiso", + "account.mute_short": "I-mute", + "account.muted": "Naka-mute", + "account.mutual": "Ka-mutual", "account.no_bio": "Walang nakalaan na paglalarawan.", "account.open_original_page": "Buksan ang pinagmulang pahina", "account.posts": "Mga post", "account.report": "I-ulat si/ang @{name}", + "account.requested": "Naghihintay ng pag-apruba. I-click upang ikansela ang hiling sa pagsunod", "account.requested_follow": "Hinihiling ni {name} na sundan ka", "account.share": "Ibahagi ang profile ni @{name}", "account.show_reblogs": "Ipakita ang mga pagpapalakas mula sa/kay {name}", "account.unendorse": "Huwag itampok sa profile", + "account.unfollow": "Huwag nang sundan", "admin.dashboard.retention.cohort_size": "Mga bagong tagagamit", "alert.rate_limited.message": "Mangyaring subukan muli pagkatapos ng {retry_time, time, medium}.", "audio.hide": "Itago ang tunog", @@ -355,6 +364,7 @@ "status.more": "Higit pa", "status.read_more": "Basahin ang higit pa", "status.reblogs.empty": "Wala pang nagpalakas ng post na ito. Kung may sinumang nagpalakas, makikita sila rito.", + "status.remove_favourite": "Tanggalin sa mga paborito", "status.reply": "Tumugon", "status.report": "I-ulat si/ang @{name}", "status.sensitive_warning": "Sensitibong nilalaman", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index ff354adf7fb4d3..c4d5f7296a6cab 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -456,6 +456,7 @@ "keyboard_shortcuts.toggle_hidden": "Vís/fjal tekst handan CW", "keyboard_shortcuts.toggle_sensitivity": "Vís ella fjal innihald", "keyboard_shortcuts.toot": "Byrja nýggjan post", + "keyboard_shortcuts.translate": "at umseta ein post", "keyboard_shortcuts.unfocus": "Tak skrivi-/leiti-økið úr miðdeplinum", "keyboard_shortcuts.up": "Flyt upp á listanum", "lightbox.close": "Lat aftur", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 488a5f3eef3901..d73e9dcf5dbf00 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Déplier/replier texte derrière avertissement", "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher médias", "keyboard_shortcuts.toot": "Commencer un nouveau message", + "keyboard_shortcuts.translate": "traduire un message", "keyboard_shortcuts.unfocus": "Ne plus se concentrer sur la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 731c15e36c778c..f6c45ad7060e30 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Déplier/replier le texte derrière un CW", "keyboard_shortcuts.toggle_sensitivity": "Afficher/cacher les médias", "keyboard_shortcuts.toot": "Commencer un nouveau message", + "keyboard_shortcuts.translate": "traduire un message", "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 469bad98daf214..02682335efc5c2 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Para mostrar o texto tras Aviso de Contido (CW)", "keyboard_shortcuts.toggle_sensitivity": "Para amosar/agochar contido multimedia", "keyboard_shortcuts.toot": "Para escribir unha nova publicación", + "keyboard_shortcuts.translate": "para traducir unha publicación", "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "Para mover cara arriba na listaxe", "lightbox.close": "Fechar", @@ -836,6 +837,7 @@ "status.reblogs.empty": "Aínda ninguén promoveu esta publicación. Cando alguén o faga, amosarase aquí.", "status.redraft": "Eliminar e reescribir", "status.remove_bookmark": "Eliminar marcador", + "status.remove_favourite": "Retirar das favoritas", "status.replied_in_thread": "Respondeu nun fío", "status.replied_to": "Respondeu a {name}", "status.reply": "Responder", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index fbfde8272728c9..71ced7e0df1025 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "הצגת/הסתרת טקסט מוסתר מאחורי אזהרת תוכן", "keyboard_shortcuts.toggle_sensitivity": "הצגת/הסתרת מדיה", "keyboard_shortcuts.toot": "להתחיל חיצרוץ חדש", + "keyboard_shortcuts.translate": "לתרגם הודעה", "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", @@ -836,6 +837,7 @@ "status.reblogs.empty": "עוד לא הידהדו את ההודעה הזו. כאשר זה יקרה, ההדהודים יופיעו כאן.", "status.redraft": "מחיקה ועריכה מחדש", "status.remove_bookmark": "הסרת סימניה", + "status.remove_favourite": "להסיר מרשימת המועדפים", "status.replied_in_thread": "תגובה לשרשור", "status.replied_to": "בתגובה לחשבון {name}", "status.reply": "תגובה", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index c07b7c48cbadad..d1ae388675cca7 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -440,7 +440,7 @@ "keyboard_shortcuts.heading": "Gyorsbillentyűk", "keyboard_shortcuts.home": "Saját idővonal megnyitása", "keyboard_shortcuts.hotkey": "Gyorsbillentyű", - "keyboard_shortcuts.legend": "jelmagyarázat megjelenítése", + "keyboard_shortcuts.legend": "Jelmagyarázat megjelenítése", "keyboard_shortcuts.local": "Helyi idővonal megnyitása", "keyboard_shortcuts.mention": "Szerző megemlítése", "keyboard_shortcuts.muted": "Némított felhasználók listájának megnyitása", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 3043eb323f6e7a..9a5c287f1c695d 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Birta/fela texta á bak við aðvörun vegna efnis", "keyboard_shortcuts.toggle_sensitivity": "Birta/fela myndir", "keyboard_shortcuts.toot": "Byrja nýja færslu", + "keyboard_shortcuts.translate": "að þýða færslu", "keyboard_shortcuts.unfocus": "Taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "Fara ofar í listanum", "lightbox.close": "Loka", @@ -836,6 +837,7 @@ "status.reblogs.empty": "Enginn hefur ennþá endurbirt þessa færslu. Þegar einhver gerir það, mun það birtast hér.", "status.redraft": "Eyða og endurvinna drög", "status.remove_bookmark": "Fjarlægja bókamerki", + "status.remove_favourite": "Fjarlægja úr eftirlætum", "status.replied_in_thread": "Svaraði í samtali", "status.replied_to": "Svaraði til {name}", "status.reply": "Svara", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 4d9952ccb61f8c..9593744e4bb375 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -449,6 +449,7 @@ "keyboard_shortcuts.toggle_hidden": "CW로 가려진 텍스트를 표시/비표시", "keyboard_shortcuts.toggle_sensitivity": "미디어 보이기/숨기기", "keyboard_shortcuts.toot": "새 게시물 작성", + "keyboard_shortcuts.translate": "게시물 번역", "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index cdba82612618fc..f3fba6757f53f5 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -1,14 +1,25 @@ { + "about.blocks": "Servī moderātī", "about.contact": "Ratio:", + "about.disclaimer": "Mastodon est software līberum, apertum fontem, et nōtam commercium Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Ratio abdere est", + "about.domain_blocks.preamble": "Mastodon genērāliter sinit tē contentum ex aliīs servientibus in fedīversō vidēre et cum usoribus ab iīs interāgere. Haē sunt exceptionēs quae in hōc particulārī servientē factae sunt.", "about.domain_blocks.silenced.explanation": "Tua profilia atque tuum contentum ab hac serve praecipue non videbis, nisi explōrēs expresse aut subsequeris et optēs.", + "about.domain_blocks.silenced.title": "Limitātus", + "about.domain_blocks.suspended.explanation": "Nulla data ab hōc servientē processābuntur, servābuntur aut commūtābuntur, faciendumque omnem interactionem aut communicātiōnem cum usoribus ab hōc servientē impossibilem.", + "about.domain_blocks.suspended.title": "suspensus", + "about.not_available": "Haec informātiō in hōc servientē nōn praebita est.", + "about.powered_by": "Nuntii socīālēs decentralizātī ā {mastodon} sustentātī.", + "about.rules": "Servo praecepta", + "account.account_note_header": "Nota personalia", "account.add_or_remove_from_list": "Adde aut ēripe ex tabellīs", "account.badges.bot": "Robotum", "account.badges.group": "Congregatio", "account.block": "Impedire @{name}", "account.block_domain": "Imperire dominium {domain}", + "account.block_short": "Imperire", "account.blocked": "Impeditum est", - "account.cancel_follow_request": "Withdraw follow request", + "account.cancel_follow_request": "Petitio sequī retrāhere", "account.domain_blocked": "Dominium impeditum", "account.edit_profile": "Recolere notionem", "account.featured_tags.last_status_never": "Nulla contributa", @@ -105,30 +116,30 @@ "keyboard_shortcuts.compose": "TextArea Compositi Attendere", "keyboard_shortcuts.description": "Descriptio", "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.down": "In īndice dēscend", "keyboard_shortcuts.enter": "Aperire contributum", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.federated": "Aperī chrōnologiam foederātam", "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned posts list", - "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.home": "Aperī chrōnologiam domesticam", + "keyboard_shortcuts.legend": "Hanc legendam ostende", + "keyboard_shortcuts.local": "Aperī chrōnologiam locālem", + "keyboard_shortcuts.mention": "Memēntō auctōris", + "keyboard_shortcuts.muted": "Aperī indicem ūtentium silentiōrum", + "keyboard_shortcuts.my_profile": "Aperī prōfilum tuum", + "keyboard_shortcuts.notifications": "Aperī columnam nūntiātiōnum", + "keyboard_shortcuts.open_media": "Aperi media", + "keyboard_shortcuts.pinned": "Aperī indicem nūntiōrum affixōrum", + "keyboard_shortcuts.profile": "Aperi auctoris profile", "keyboard_shortcuts.reply": "Respondere ad contributum", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new post", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.requests": "Aperī indicem petītiōnum sequendī", + "keyboard_shortcuts.search": "Fōcum in tabellam quaerendī", + "keyboard_shortcuts.spoilers": "Ostende / celare CW agri", + "keyboard_shortcuts.start": "Aperī columnam 'īncipere'", + "keyboard_shortcuts.toggle_hidden": "Monstrare / celare textum post CW", + "keyboard_shortcuts.toggle_sensitivity": "Ostende / celare media", + "keyboard_shortcuts.toot": "Incipe nōvum nūntium.", + "keyboard_shortcuts.unfocus": "Desinēre fōcum in ārēā componendī/inquīrendī", + "keyboard_shortcuts.up": "Sumē sūrsum in īndice", "lightbox.close": "Claudere", "lightbox.next": "Secundum", "load_pending": "{count, plural, one {# novum item} other {# nova itema}}", @@ -142,7 +153,7 @@ "notification.favourite": "{name} nuntium tuum favit", "notification.follow": "{name} te secutus est", "notification.follow_request": "{name} postulavit ut te sequeretur", - "notification.moderation_warning": "Accepistī monitionem moderationis.", + "notification.moderation_warning": "Accepistī monitionem moderationis", "notification.moderation_warning.action_disable": "Ratio tua debilitata est.", "notification.moderation_warning.action_none": "Tua ratiō monitum moderātiōnis accēpit.", "notification.moderation_warning.action_sensitive": "Tua nuntia hinc sensibiliter notabuntur.", @@ -160,7 +171,7 @@ "notification_requests.confirm_dismiss_multiple.message": "Tu {count, plural, one {unam petitionem notificationis} other {# petitiones notificationum}} abrogāre prōximum es. {count, plural, one {Illa} other {Eae}} facile accessū nōn erit. Certus es tē procedere velle?", "notifications.filter.all": "Omnia", "notifications.filter.polls": "Eventus electionis", - "notifications.group": "Notificātiōnēs", + "notifications.group": "{count} Notificātiōnēs", "onboarding.profile.display_name_hint": "Tuum nomen completum aut tuum nomen ludens…", "onboarding.profile.note_hint": "Alios hominēs vel #hashtags @nōmināre potes…", "poll.closed": "Clausum", @@ -191,7 +202,7 @@ "report.mute_explanation": "Non videbis eōrum nuntiōs. Possunt adhuc tē sequī et tuōs nuntiōs vidēre, nec sciēbunt sē tacitōs esse.", "report.next": "Secundum", "report.placeholder": "Commentāriī adiūnctī", - "report.reasons.legal_description": "Putās id legem tuae aut servientis patriae violāre.", + "report.reasons.legal_description": "Putās id legem tuae aut servientis patriae violāre", "report.reasons.violation_description": "Scis quod certa praecepta frangit", "report.submit": "Mittere", "report.target": "Report {target}", @@ -200,7 +211,7 @@ "report_notification.categories.other": "Altera", "search.placeholder": "Quaerere", "search_results.all": "Omnis", - "server_banner.active_users": "Usūrāriī āctīvī", + "server_banner.active_users": "usūāriī āctīvī", "server_banner.administered_by": "Administratur:", "server_banner.is_one_of_many": "{domain} est unum ex multis independentibus servientibus Mastodon quos adhibere potes ut participes in fediverso.", "sign_in_banner.sign_in": "Sign in", @@ -210,7 +221,7 @@ "status.copy": "Copy link to status", "status.delete": "Oblitterare", "status.edit": "Recolere", - "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", + "status.edited_x_times": "Emendatum est {count, plural, one {{count} tempus} other {{count} tempora}}", "status.favourites": "{count, plural, one {favoritum} other {favorita}}", "status.history.created": "{name} creatum {date}", "status.history.edited": "{name} correxit {date}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index d83c7fae1435f6..3940aa630cf6d8 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -453,6 +453,7 @@ "keyboard_shortcuts.toggle_hidden": "Rodyti / slėpti tekstą po TĮ", "keyboard_shortcuts.toggle_sensitivity": "Rodyti / slėpti mediją", "keyboard_shortcuts.toot": "Pradėti naują įrašą", + "keyboard_shortcuts.translate": "išversti įrašą", "keyboard_shortcuts.unfocus": "Nebefokusuoti rengykles teksto sritį / paiešką", "keyboard_shortcuts.up": "Perkelti į viršų sąraše", "lightbox.close": "Uždaryti", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index cf6796c2f5067a..1bc3c683828fc2 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -86,6 +86,7 @@ "alert.unexpected.message": "Radās negaidīta kļūda.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Paziņojums", + "annual_report.summary.archetype.oracle": "Orākuls", "annual_report.summary.archetype.replier": "Sabiedriskais tauriņš", "annual_report.summary.followers.followers": "sekotāji", "annual_report.summary.followers.total": "pavisam {count}", @@ -401,13 +402,20 @@ "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.", - "link_preview.author": "Pēc {name}", + "link_preview.author": "No {name}", "link_preview.more_from_author": "Vairāk no {name}", + "lists.add_member": "Pievienot", + "lists.add_to_list": "Pievienot sarakstam", + "lists.create": "Izveidot", + "lists.create_list": "Izveidot sarakstu", "lists.delete": "Izdzēst sarakstu", + "lists.done": "Gatavs", "lists.edit": "Labot sarakstu", + "lists.remove_member": "Noņemt", "lists.replies_policy.followed": "Jebkuram sekotajam lietotājam", "lists.replies_policy.list": "Saraksta dalībniekiem", "lists.replies_policy.none": "Nevienam", + "lists.save": "Saglabāt", "load_pending": "{count, plural, zero{# jaunu vienumu} one {# jauns vienums} other {# jauni vienumi}}", "loading_indicator.label": "Ielādē…", "media_gallery.hide": "Paslēpt", @@ -466,6 +474,8 @@ "notification.update": "{name} laboja ierakstu", "notification_requests.accept": "Pieņemt", "notification_requests.dismiss": "Noraidīt", + "notification_requests.edit_selection": "Labot", + "notification_requests.exit_selection": "Gatavs", "notification_requests.notifications_from": "Paziņojumi no {name}", "notification_requests.title": "Atlasītie paziņojumi", "notifications.clear": "Notīrīt paziņojumus", @@ -501,6 +511,7 @@ "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", + "notifications.policy.accept": "Pieņemt", "notifications.policy.filter_new_accounts_title": "Jauni konti", "notifications.policy.filter_not_followers_title": "Cilvēki, kuri Tev neseko", "notifications.policy.filter_not_following_hint": "Līdz tos pašrocīgi apstiprināsi", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index c99c92eceb4f69..f9b631c0e2b7ab 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Inhoudswaarschuwing tonen/verbergen", "keyboard_shortcuts.toggle_sensitivity": "Media tonen/verbergen", "keyboard_shortcuts.toot": "Nieuw bericht schrijven", + "keyboard_shortcuts.translate": "om een bericht te vertalen", "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen", "keyboard_shortcuts.up": "Naar boven in de lijst bewegen", "lightbox.close": "Sluiten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 0d9a6601192007..6091f1679fc0be 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Vis/gøym tekst bak innhaldsvarsel", "keyboard_shortcuts.toggle_sensitivity": "Vis/gøym media", "keyboard_shortcuts.toot": "Lag nytt tut", + "keyboard_shortcuts.translate": "å omsetje eit innlegg", "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "Flytt opp på lista", "lightbox.close": "Lukk", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index e1e8dd9ede35d7..f59e7b96bc4fad 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -236,6 +236,7 @@ "domain_block_modal.they_cant_follow": "Nikto z tohoto servera ťa nemôže nasledovať.", "domain_block_modal.they_wont_know": "Nebude vedieť, že bol/a zablokovaný/á.", "domain_block_modal.title": "Blokovať doménu?", + "domain_block_modal.you_will_lose_relationships": "Stratíš všetkých sledovateľov a ľudí, ktorých ty na tomto serveri nasleduješ.", "domain_block_modal.you_wont_see_posts": "Neuvidíš príspevky, ani oboznámenia od užívateľov na tomto serveri.", "domain_pill.activitypub_like_language": "ActivityPub je ako jazyk, ktorým Mastodon hovorí s ostatnými sociálnymi sieťami.", "domain_pill.server": "Server", @@ -379,6 +380,7 @@ "ignore_notifications_modal.private_mentions_title": "Nevšímať si oznámenia o nevyžiadaných súkromných spomínaniach?", "interaction_modal.action.reply": "Pre pokračovanie musíš odpovedať s tvojho účtu.", "interaction_modal.action.vote": "Pre pokračovanie musíš hlasovať s tvojho účtu.", + "interaction_modal.go": "Prejdi", "interaction_modal.no_account_yet": "Ešte nemáš účet?", "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", @@ -422,6 +424,7 @@ "keyboard_shortcuts.toggle_hidden": "Zobraziť/skryť text za varovaním o obsahu", "keyboard_shortcuts.toggle_sensitivity": "Zobraziť/skryť médiá", "keyboard_shortcuts.toot": "Vytvoriť nový príspevok", + "keyboard_shortcuts.translate": "preložiť príspevok", "keyboard_shortcuts.unfocus": "Odísť z textového poľa", "keyboard_shortcuts.up": "Posunúť sa vyššie v zozname", "lightbox.close": "Zatvoriť", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 8bf529e0d4c42d..ce2ec137405233 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -452,6 +452,7 @@ "keyboard_shortcuts.toggle_hidden": "Për shfaqje/fshehje teksti pas CW", "keyboard_shortcuts.toggle_sensitivity": "Për shfaqje/fshehje mediash", "keyboard_shortcuts.toot": "Për të filluar një mesazh të ri", + "keyboard_shortcuts.translate": "për të përkthyer një postim", "keyboard_shortcuts.unfocus": "Për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "Për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 7746a731e56067..d8f1b0b2f356b9 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -400,6 +400,13 @@ "ignore_notifications_modal.not_followers_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่ไม่ได้ติดตามคุณ?", "ignore_notifications_modal.not_following_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม?", "ignore_notifications_modal.private_mentions_title": "เพิกเฉยการแจ้งเตือนจากการกล่าวถึงแบบส่วนตัวที่ไม่พึงประสงค์?", + "interaction_modal.action.favourite": "เพื่อดำเนินการต่อ คุณจำเป็นต้องชื่นชอบจากบัญชีของคุณ", + "interaction_modal.action.follow": "เพื่อดำเนินการต่อ คุณจำเป็นต้องติดตามจากบัญชีของคุณ", + "interaction_modal.action.reblog": "เพื่อดำเนินการต่อ คุณจำเป็นต้องดันจากบัญชีของคุณ", + "interaction_modal.action.reply": "เพื่อดำเนินการต่อ คุณจำเป็นต้องตอบกลับจากบัญชีของคุณ", + "interaction_modal.action.vote": "เพื่อดำเนินการต่อ คุณจำเป็นต้องลงคะแนนจากบัญชีของคุณ", + "interaction_modal.go": "ไป", + "interaction_modal.no_account_yet": "ยังไม่มีบัญชี?", "interaction_modal.on_another_server": "ในเซิร์ฟเวอร์อื่น", "interaction_modal.on_this_server": "ในเซิร์ฟเวอร์นี้", "interaction_modal.title.favourite": "ชื่นชอบโพสต์ของ {name}", @@ -407,6 +414,7 @@ "interaction_modal.title.reblog": "ดันโพสต์ของ {name}", "interaction_modal.title.reply": "ตอบกลับโพสต์ของ {name}", "interaction_modal.title.vote": "ลงคะแนนในการสำรวจความคิดเห็นของ {name}", + "interaction_modal.username_prompt": "เช่น {example}", "intervals.full.days": "{number, plural, other {# วัน}}", "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", "intervals.full.minutes": "{number, plural, other {# นาที}}", @@ -442,6 +450,7 @@ "keyboard_shortcuts.toggle_hidden": "แสดง/ซ่อนข้อความที่อยู่หลังคำเตือนเนื้อหา", "keyboard_shortcuts.toggle_sensitivity": "แสดง/ซ่อนสื่อ", "keyboard_shortcuts.toot": "เริ่มโพสต์ใหม่", + "keyboard_shortcuts.translate": "เพื่อแปลโพสต์", "keyboard_shortcuts.unfocus": "เลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "ย้ายขึ้นในรายการ", "lightbox.close": "ปิด", @@ -679,6 +688,8 @@ "privacy_policy.title": "นโยบายความเป็นส่วนตัว", "recommended": "แนะนำ", "refresh": "รีเฟรช", + "regeneration_indicator.please_stand_by": "โปรดรอสักครู่", + "regeneration_indicator.preparing_your_home_feed": "กำลังเตรียมฟีดหน้าแรกของคุณ…", "relative_time.days": "{number} วัน", "relative_time.full.days": "{number, plural, other {# วัน}}ที่แล้ว", "relative_time.full.hours": "{number, plural, other {# ชั่วโมง}}ที่แล้ว", @@ -817,6 +828,7 @@ "status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่", "status.redraft": "ลบแล้วร่างใหม่", "status.remove_bookmark": "เอาที่คั่นหน้าออก", + "status.remove_favourite": "เอาออกจากรายการโปรด", "status.replied_in_thread": "ตอบกลับในกระทู้", "status.replied_to": "ตอบกลับ {name}", "status.reply": "ตอบกลับ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index d57bf5e22f5543..9ce76a03d58d5c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", "keyboard_shortcuts.toggle_sensitivity": "Medyayı göstermek/gizlemek için", "keyboard_shortcuts.toot": "Yeni bir gönderi başlat", + "keyboard_shortcuts.translate": "bir gönderiyi çevirmek için", "keyboard_shortcuts.unfocus": "Aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "Listede yukarıya çıkmak için", "lightbox.close": "Kapat", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 9d20c27fd08558..af72998fd94781 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -103,6 +103,7 @@ "annual_report.summary.most_used_hashtag.most_used_hashtag": "найчастіший хештег", "annual_report.summary.most_used_hashtag.none": "Немає", "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": "(не оброблено)", @@ -148,6 +149,7 @@ "column.firehose": "Стрічка новин", "column.follow_requests": "Запити на підписку", "column.home": "Головна", + "column.list_members": "Керувати учасниками списку", "column.lists": "Списки", "column.mutes": "Приховані користувачі", "column.notifications": "Сповіщення", @@ -237,6 +239,10 @@ "disabled_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений.", "dismissable_banner.community_timeline": "Це останні публічні дописи від людей, чиї облікові записи розміщені на {domain}.", "dismissable_banner.dismiss": "Відхилити", + "dismissable_banner.explore_links": "Ці новини сьогодні найбільше поширюють у fediverse. Свіжіші новини, опубліковані більшою кількістю різних людей, оцінюються вище.", + "dismissable_banner.explore_statuses": "Ці дописи з усього fediverse сьогодні набирають популярності. Новіші дописи з більшою кількістю посилень і додавань у вибрані мають вищий рейтинг.", + "dismissable_banner.explore_tags": "Ці гештеґи сьогодні набувають популярності у fediverse. Гештеґи, якими користується більше людей, займають вищі позиції.", + "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей у федіверсі, на яких підписані люди в {domain}.", "domain_block_modal.block": "Блокувати сервер", "domain_block_modal.block_account_instead": "Блокувати @{name} натомість", "domain_block_modal.they_can_interact_with_old_posts": "Люди з цього сервера можуть взаємодіяти зі своїми старими дописами.", @@ -325,7 +331,7 @@ "filter_modal.select_filter.title": "Фільтрувати цей допис", "filter_modal.title.status": "Фільтрувати допис", "filter_warning.matches_filter": "Збігається з фільтром “{title}”", - "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати", + "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, яких ви можете знати", "filtered_notifications_banner.title": "Відфільтровані сповіщення", "firehose.all": "Всі", "firehose.local": "Цей сервер", @@ -402,6 +408,10 @@ "ignore_notifications_modal.not_following_title": "Ігнорувати сповіщення від людей, на яких ви не підписалися?", "ignore_notifications_modal.private_mentions_title": "Ігнорувати сповіщення від небажаних приватних згадок?", "interaction_modal.action.favourite": "Щоб продовжити, потрібно додати улюблене з вашого облікового запису.", + "interaction_modal.action.follow": "Щоб іти далі, потрібно підписатися з вашого облікового запису.", + "interaction_modal.action.reblog": "Щоб іти далі, потрібно зробити реблог з вашого облікового запису.", + "interaction_modal.action.reply": "Щоб іти далі, потрібно відповісти з вашого облікового запису.", + "interaction_modal.action.vote": "Щоб іти далі, потрібно проголосувати з вашим обліковим записом.", "interaction_modal.go": "Вперед", "interaction_modal.no_account_yet": "Ще не зареєстровані?", "interaction_modal.on_another_server": "На іншому сервері", @@ -411,6 +421,7 @@ "interaction_modal.title.reblog": "Поширити допис {name}", "interaction_modal.title.reply": "Відповісти на допис {name}", "interaction_modal.title.vote": "Проголосувати в опитуванні {name}", + "interaction_modal.username_prompt": "Наприклад, %{example}", "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", @@ -446,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "Показати/приховати текст під попередженням про вміст", "keyboard_shortcuts.toggle_sensitivity": "Показати/приховати медіа", "keyboard_shortcuts.toot": "Створити новий допис", + "keyboard_shortcuts.translate": "для перекладу повідомлення", "keyboard_shortcuts.unfocus": "Розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "Рухатися вгору списком", "lightbox.close": "Закрити", @@ -458,12 +470,32 @@ "link_preview.author": "Від {name}", "link_preview.more_from_author": "Більше від {name}", "link_preview.shares": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}", + "lists.add_member": "Додати", + "lists.add_to_list": "Додати до списку", + "lists.add_to_lists": "Додати {name} до списку", + "lists.create": "Створити", + "lists.create_a_list_to_organize": "Створіть новий список, щоб упорядкувати домашню стрічку", + "lists.create_list": "Створити список", "lists.delete": "Видалити список", + "lists.done": "Готово", "lists.edit": "Редагувати список", + "lists.exclusive": "Сховати учасників на головній сторінці", + "lists.exclusive_hint": "Якщо хтось є у цьому списку, сховайте їх на своїй домашній сторінці, щоб не бачити їхні дописи двічі.", + "lists.find_users_to_add": "Знайти користувачів, щоб додати їх", + "lists.list_members": "Учасники списку", + "lists.list_members_count": "{count, plural, one {# member} other {# members}}", + "lists.list_name": "Назва списку", + "lists.new_list_name": "Нова назва списку", + "lists.no_lists_yet": "Поки що немає списків.", + "lists.no_members_yet": "Ще немає учасників.", + "lists.no_results_found": "Результатів не знайдено.", + "lists.remove_member": "Видалити", "lists.replies_policy.followed": "Будь-який відстежуваний користувач", "lists.replies_policy.list": "Учасники списку", "lists.replies_policy.none": "Ніхто", + "lists.save": "Зберегти", "lists.search": "Пошук", + "lists.show_replies_to": "Включати відповіді також зі списку учасників", "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}", "loading_indicator.label": "Завантаження…", "media_gallery.hide": "Сховати", @@ -516,6 +548,8 @@ "notification.annual_report.view": "Переглянути #Wrapstodon", "notification.favourite": "Ваш допис сподобався {name}", "notification.favourite.name_and_others_with_link": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} вподобали ваш допис", + "notification.favourite_pm": "{name} додав вашу особисту згадку до вибраного", + "notification.favourite_pm.name_and_others_with_link": "{name} та {count, plural, one {# other} other {# others}} додали вашу особисту згадку до вибраного", "notification.follow": "{name} підписалися на вас", "notification.follow.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} стежать за вами", "notification.follow_request": "{name} відправили запит на підписку", @@ -663,6 +697,7 @@ "recommended": "Рекомендовано", "refresh": "Оновити", "regeneration_indicator.please_stand_by": "Будь ласка, очікуйте.", + "regeneration_indicator.preparing_your_home_feed": "Готування вашої головної стрічки новин…", "relative_time.days": "{number}д", "relative_time.full.days": "{number, plural, one {# день} few {# дні} other {# днів}} тому", "relative_time.full.hours": "{number, plural, one {# година} few {# години} other {# годин}} тому", @@ -824,6 +859,7 @@ "subscribed_languages.target": "Змінити підписані мови для {target}", "tabs_bar.home": "Головна", "tabs_bar.notifications": "Сповіщення", + "terms_of_service.title": "Умови використання", "time_remaining.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "time_remaining.hours": "{number, plural, one {# година} few {# години} other {# годин}}", "time_remaining.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index d8314de9fc3a42..834c74eb777177 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "ẩn/hiện nội dung ẩn", "keyboard_shortcuts.toggle_sensitivity": "ẩn/hiện ảnh hoặc video", "keyboard_shortcuts.toot": "soạn tút mới", + "keyboard_shortcuts.translate": "dịch tút", "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", @@ -836,6 +837,7 @@ "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", + "status.remove_favourite": "Bỏ thích", "status.replied_in_thread": "Trả lời thảo luận", "status.replied_to": "Trả lời {name}", "status.reply": "Trả lời", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 3e4530f44bc4ab..558df23eb05339 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -186,7 +186,7 @@ "compose_form.poll.switch_to_single": "将投票改为单选", "compose_form.poll.type": "类型", "compose_form.publish": "发布", - "compose_form.publish_form": "新嘟文", + "compose_form.publish_form": "新建嘟文", "compose_form.reply": "回复", "compose_form.save_changes": "更改", "compose_form.spoiler.marked": "移除内容警告", @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "显示或隐藏被折叠的正文", "keyboard_shortcuts.toggle_sensitivity": "显示/隐藏媒体", "keyboard_shortcuts.toot": "发送新嘟文", + "keyboard_shortcuts.translate": "翻译嘟文", "keyboard_shortcuts.unfocus": "取消输入/搜索", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 05f23a43ea32ce..0010c687c0e137 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -457,6 +457,7 @@ "keyboard_shortcuts.toggle_hidden": "顯示或隱藏於內容警告之後的嘟文", "keyboard_shortcuts.toggle_sensitivity": "顯示或隱藏媒體", "keyboard_shortcuts.toot": "發個新嘟文", + "keyboard_shortcuts.translate": "翻譯嘟文", "keyboard_shortcuts.unfocus": "跳離文字撰寫區塊或搜尋框", "keyboard_shortcuts.up": "向上移動", "lightbox.close": "關閉", diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml index 198029ac0cc9de..68c7369033dfcc 100644 --- a/config/locales/activerecord.bg.yml +++ b/config/locales/activerecord.bg.yml @@ -24,6 +24,8 @@ bg: models: account: attributes: + fields: + fields_with_values_missing_labels: съдържа стойности с липсващи етикети username: invalid: трябва да е само буквено-цифрено и долни черти reserved: е запазено diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml index ad7c63b3877cf6..09b6366b555d38 100644 --- a/config/locales/activerecord.ca.yml +++ b/config/locales/activerecord.ca.yml @@ -24,6 +24,8 @@ ca: models: account: attributes: + fields: + fields_with_values_missing_labels: conté valors sense etiqueta username: invalid: només pot contenir lletres, números i guions baixos reserved: està reservat diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index 56dd3aa2c0abd1..e611442a1bc886 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -24,6 +24,8 @@ da: models: account: attributes: + fields: + fields_with_values_missing_labels: indeholder værdier med manglende etiketter username: invalid: må kun indeholde cifre, bogstaver og understreger reserved: er reserveret diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml index d07a717d3169da..f5e291be8f6846 100644 --- a/config/locales/activerecord.eo.yml +++ b/config/locales/activerecord.eo.yml @@ -24,6 +24,8 @@ eo: models: account: attributes: + fields: + fields_with_values_missing_labels: enhavas valorojn kun mankantaj etikedoj username: invalid: devas enhavi nur literojn, ciferojn kaj substrekojn reserved: rezervita diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml index b8e2b57c8646de..bc889337341f39 100644 --- a/config/locales/activerecord.es-AR.yml +++ b/config/locales/activerecord.es-AR.yml @@ -24,6 +24,8 @@ es-AR: models: account: attributes: + fields: + fields_with_values_missing_labels: contiene valores con etiquetas faltantes username: invalid: sólo letras, números y subguiones ("_") reserved: está reservado diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index f5c8080189e3aa..c2d27a65b852a8 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -24,6 +24,8 @@ es-MX: models: account: attributes: + fields: + fields_with_values_missing_labels: contiene valores a los que les faltan etiquetas username: invalid: debe contener sólo letras, números y guiones bajos reserved: está reservado diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 081f87ef15cae3..d7b25a9042e7e5 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -24,6 +24,8 @@ es: models: account: attributes: + fields: + fields_with_values_missing_labels: contiene valores con etiquetas que faltan username: invalid: solo puede contener letras, números y guiones bajos reserved: está reservado diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index e64c2fb80e9797..bf98beb6a37018 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -24,6 +24,8 @@ fi: models: account: attributes: + fields: + fields_with_values_missing_labels: sisältää arvoja, joista puuttuu nimike username: invalid: saa sisältää vain kirjaimia, numeroita ja alaviivoja reserved: on varattu diff --git a/config/locales/activerecord.fil.yml b/config/locales/activerecord.fil.yml index 4084bf2f90e213..5250a30bdb0cb3 100644 --- a/config/locales/activerecord.fil.yml +++ b/config/locales/activerecord.fil.yml @@ -1 +1,9 @@ +--- fil: + activerecord: + errors: + models: + account: + attributes: + fields: + fields_with_values_missing_labels: may mga value na walang label diff --git a/config/locales/activerecord.fo.yml b/config/locales/activerecord.fo.yml index 3491480110fded..c419173ef07aa6 100644 --- a/config/locales/activerecord.fo.yml +++ b/config/locales/activerecord.fo.yml @@ -24,6 +24,8 @@ fo: models: account: attributes: + fields: + fields_with_values_missing_labels: inniheldur virði við manglandi spjøldrum username: invalid: kann bara innihalda bókstavir, tøl og botnstriku reserved: er umbiðið diff --git a/config/locales/activerecord.fr-CA.yml b/config/locales/activerecord.fr-CA.yml index 7699adc43a1708..41ac187b9469b4 100644 --- a/config/locales/activerecord.fr-CA.yml +++ b/config/locales/activerecord.fr-CA.yml @@ -24,6 +24,8 @@ fr-CA: models: account: attributes: + fields: + fields_with_values_missing_labels: contient des valeurs avec des étiquettes manquantes username: invalid: doit ne contenir que des lettres, des nombres et des tirets bas reserved: est réservé diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 4235404859bc12..e6d5bc1addfea8 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -24,6 +24,8 @@ fr: models: account: attributes: + fields: + fields_with_values_missing_labels: contient des valeurs avec des étiquettes manquantes username: invalid: seulement des lettres, des chiffres et des tirets bas reserved: est réservé diff --git a/config/locales/activerecord.he.yml b/config/locales/activerecord.he.yml index 3696b4ce18818a..b63b41c74e9418 100644 --- a/config/locales/activerecord.he.yml +++ b/config/locales/activerecord.he.yml @@ -24,6 +24,8 @@ he: models: account: attributes: + fields: + fields_with_values_missing_labels: שדות המכילים ערכים אך חסרים תווית username: invalid: ספרות, אותיות לטיניות וקו תחתי בלבד reserved: שמור diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml index 4d90a7d8088387..966d8fa9e89fb5 100644 --- a/config/locales/activerecord.is.yml +++ b/config/locales/activerecord.is.yml @@ -24,6 +24,8 @@ is: models: account: attributes: + fields: + fields_with_values_missing_labels: inniheldur gildi sem vantar merkingar username: invalid: má aðeins innihalda bókstafi, tölur og undirstrik reserved: er frátekið diff --git a/config/locales/activerecord.lt.yml b/config/locales/activerecord.lt.yml index 86c9be52185e71..5171249d575454 100644 --- a/config/locales/activerecord.lt.yml +++ b/config/locales/activerecord.lt.yml @@ -24,6 +24,8 @@ lt: models: account: attributes: + fields: + fields_with_values_missing_labels: turi reikšmių su trūkstamomis etiketėmis. username: invalid: turi būti tik raidės, skaičiai ir pabraukimai. reserved: užimtas. diff --git a/config/locales/activerecord.nan.yml b/config/locales/activerecord.nan.yml index 512c65fe8b0f15..b1e9dc67bfa5a1 100644 --- a/config/locales/activerecord.nan.yml +++ b/config/locales/activerecord.nan.yml @@ -1 +1,16 @@ +--- nan: + activerecord: + attributes: + poll: + expires_at: 期限 + options: 選項 + user: + agreement: 服務協議 + email: 電子phue地址 + locale: 在地化 + password: 密碼 + user/account: + username: 用者ê名 + user/invite_request: + text: 原因 diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml index b25da381f29705..530e7187d48609 100644 --- a/config/locales/activerecord.nl.yml +++ b/config/locales/activerecord.nl.yml @@ -24,6 +24,8 @@ nl: models: account: attributes: + fields: + fields_with_values_missing_labels: bevat waarden met ontbrekende labels username: invalid: alleen letters, nummers en underscores reserved: gereserveerd diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml index 0fe06205225f98..2b5b6dd581b81a 100644 --- a/config/locales/activerecord.nn.yml +++ b/config/locales/activerecord.nn.yml @@ -24,6 +24,8 @@ nn: models: account: attributes: + fields: + fields_with_values_missing_labels: inneheld verdiar med manglande etikettar username: invalid: kan berre innehalda bokstavar, tal og understrekar reserved: er reservert diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml index 9e3780668ac74e..7e53b36b87ffd3 100644 --- a/config/locales/activerecord.sq.yml +++ b/config/locales/activerecord.sq.yml @@ -24,6 +24,8 @@ sq: models: account: attributes: + fields: + fields_with_values_missing_labels: përmban vlera me etiketa që mungojnë username: invalid: duhet të përmbajë vetëm shkronja, numra dhe nënvija reserved: është i rezervuar diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml index 6ac96d9ea9a1e8..f05161992c833a 100644 --- a/config/locales/activerecord.sv.yml +++ b/config/locales/activerecord.sv.yml @@ -39,6 +39,11 @@ sv: attributes: data: malformed: är felformad + list_account: + attributes: + account_id: + taken: finns redan i listan + must_be_following: måste vara ett följt konto status: attributes: reblog: diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index e1021b8afa8785..6575d30a22a791 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -39,6 +39,11 @@ th: attributes: data: malformed: ผิดรูปแบบ + list_account: + attributes: + account_id: + taken: อยู่ในรายการอยู่แล้ว + must_be_following: ต้องเป็นบัญชีที่ติดตาม status: attributes: reblog: diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index e780e366b93617..095aa72e67e9bd 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -24,6 +24,8 @@ tr: models: account: attributes: + fields: + fields_with_values_missing_labels: değerleri eksik etiketler içeriyor username: invalid: sadece harfler, sayılar ve alt çizgiler reserved: kullanılamaz diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 118ca7b8fd9c40..3e82b5ac3d8e5a 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -24,6 +24,8 @@ uk: models: account: attributes: + fields: + fields_with_values_missing_labels: містить значення з відсутніми мітками username: invalid: має містити лише літери, цифри та підкреслення reserved: зарезервовано @@ -43,6 +45,7 @@ uk: attributes: account_id: taken: вже в списку + must_be_following: має бути відстежуваним обліковим записом status: attributes: reblog: diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index 878ba2770f551d..16f106a8bbde6d 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -24,6 +24,8 @@ vi: models: account: attributes: + fields: + fields_with_values_missing_labels: chứa giá trị thiếu nhãn username: invalid: chỉ chấp nhận ký tự, số và dấu gạch dưới reserved: bị cấm sử dụng diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index aaa7007311b0c1..29c2c86af00182 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -24,6 +24,8 @@ zh-TW: models: account: attributes: + fields: + fields_with_values_missing_labels: 包含缺少標籤之值 username: invalid: 只能有字母、數字及底線 reserved: 是保留關鍵字 diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 5c7943bc1cd03a..c9deb24ee1e757 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -25,15 +25,19 @@ cs: one: Příspěvek other: Příspěvků posts_tab_heading: Příspěvky + self_follow_error: Sledování vašeho vlastního účtu není povoleno admin: account_actions: action: Vykonat akci + already_silenced: Tento účet je již omezený. + already_suspended: Tento účet již byl pozastaven. title: Vykonat moderátorskou akci pro účet %{acct} account_moderation_notes: create: Zanechat poznámku created_msg: Moderátorská poznámka byla úspěšně vytvořena! destroyed_msg: Moderátorská poznámka byla úspěšně zničena! accounts: + add_email_domain_block: Blokovat e-mailovou doménu approve: Schválit approved_msg: Žádost o registraci uživatele %{username} úspěšně schválena are_you_sure: Opravdu? @@ -48,6 +52,7 @@ cs: title: Změnit e-mail uživateli %{username} change_role: changed_msg: Role úspěšně změněna! + edit_roles: Správa uživatelských rolí label: Změnit roli no_role: Žádná role title: Změnit roli pro %{username} @@ -60,6 +65,7 @@ cs: demote: Degradovat destroyed_msg: Data účtu %{username} jsou nyní ve frontě k okamžitému smazání disable: Zmrazit + disable_sign_in_token_auth: Zrušit ověřování e-mailovým tokenem disable_two_factor_authentication: Vypnout 2FA disabled: Zmrazen display_name: Zobrazované jméno @@ -68,6 +74,7 @@ cs: email: E-mail email_status: Stav e-mailu enable: Rozmrazit + enable_sign_in_token_auth: Povolit ověřování e-mailovým tokenem enabled: Povoleno enabled_msg: Účet %{username} byl úspěšně rozmrazen followers: Sledující @@ -134,6 +141,7 @@ cs: resubscribe: Znovu odebírat role: Role search: Hledat + search_same_email_domain: Ostatní uživatelé se stejnou e-mailovou doménou search_same_ip: Další uživatelé se stejnou IP adresou security: Zabezpečení security_measures: @@ -174,6 +182,7 @@ cs: approve_appeal: Schválit odvolání approve_user: Schválit uživatele assigned_to_self_report: Přiřadit hlášení + change_email_user: Změnit e-mail uživatele change_role_user: Změnit roli uživatele confirm_user: Potvrdit uživatele create_account_warning: Vytvořit varování @@ -435,8 +444,10 @@ cs: new: create: Přidat doménu resolve: Přeložit doménu + title: Blokovat novou e-mailovou doménu not_permitted: Nepovoleno resolved_through_html: Přeložena přes %{domain} + title: Blokované e-mailové domény export_domain_allows: new: title: Importovat povolené domény @@ -813,6 +824,7 @@ cs: batch: remove_from_report: Odebrat z hlášení report: Nahlásit + contents: Obsah deleted: Smazáno favourites: Oblíbené history: Historie verzí diff --git a/config/locales/devise.nan.yml b/config/locales/devise.nan.yml index 512c65fe8b0f15..6f47b4f6521861 100644 --- a/config/locales/devise.nan.yml +++ b/config/locales/devise.nan.yml @@ -1 +1,15 @@ +--- nan: + devise: + failure: + locked: Lí ê口座hőng鎖定ah。 + not_found_in_database: Bô ha̍p規定ê %{authentication_keys} á是密碼。 + pending: Lí ê口座iáu teh審查。 + timeout: Lí ê作業階段kàu期ah。請koh登入,繼續完成。 + mailer: + two_factor_disabled: + title: 2FA關掉ah + two_factor_enabled: + title: 2FA啟用ah + two_factor_recovery_codes_changed: + title: 2FA驗證碼改ah diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index 882be66ee0c3d6..1ee73c2cb9579c 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -60,6 +60,7 @@ cs: error: title: Vyskytla se chyba new: + prompt_html: "%{client_name} by chtěl oprávnění k přístupu k vašemu účtu. Schvalte tuto žádost pouze pokud rozpoznáte a důvěřujete tomuto zdroji." review_permissions: Zkontrolujte oprávnění title: Je vyžadována autorizace show: diff --git a/config/locales/doorkeeper.nan.yml b/config/locales/doorkeeper.nan.yml index 512c65fe8b0f15..554d991641ed13 100644 --- a/config/locales/doorkeeper.nan.yml +++ b/config/locales/doorkeeper.nan.yml @@ -1 +1,17 @@ +--- nan: + activerecord: + attributes: + doorkeeper/application: + name: 應用程式ê名 + redirect_uri: 重轉ê URI + scopes: 範圍 + website: 應用程式ê網站 + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + invalid_uri: Tio̍h愛是合規定ê URI。 + relative_uri: Tio̍h愛是絕對ê URI。 + secured_uri: Tio̍h愛是HTTPS/SSL URI。 diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 2102e84c9907de..0f757c6370c6ce 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -912,6 +912,11 @@ lv: search: Meklēt title: Tēmturi updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti + terms_of_service: + changelog: Kas ir mainījies + history: Vēsture + publish: Publicēt + published_on_html: Publicēts %{date} title: Pārvaldība trends: allow: Atļaut @@ -1609,6 +1614,7 @@ lv: scheduled_statuses: over_daily_limit: Tu esi pārsniedzis šodien ieplānoto %{limit} ziņu ierobežojumu over_total_limit: Tu esi pārsniedzis ieplānoto %{limit} ziņu ierobežojumu + too_soon: datumam jābūt nākotnē self_destruct: lead_html: Diemžēl domēns %{domain} tiek neatgriezeniski slēgts. Ja tev tur bija konts, tu nevarēsi turpināt to lietot, taču joprojām vari pieprasīt savu datu kopiju. title: Šis serveris tiek slēgts diff --git a/config/locales/nan.yml b/config/locales/nan.yml index d46de7249ccfc1..9180b7b0641863 100644 --- a/config/locales/nan.yml +++ b/config/locales/nan.yml @@ -1,6 +1,44 @@ --- nan: + about: + about_mastodon_html: 社交網路ê未來:Bô廣告、bô企業監控、設計有道德,兼非中心化!加入Mastodon,保有lí ê資料! + contact_missing: Iáu bē設定 + contact_unavailable: 無開放 + hosted_on: 佇 %{domain} 運作 ê Mastodon站 + title: 關係本站 + accounts: + followers: + other: 跟tuè ê + following: Leh跟tuè + last_active: 頂kái活動ê時間 + link_verified_on: Tsit ê連結ê所有權佇 %{date} 受檢查 + posts: + other: PO文 + posts_tab_heading: PO文 admin: + account_moderation_notes: + create: 留記錄 + created_msg: 管理記錄成功建立! + destroyed_msg: 管理記錄成功thâi掉! + accounts: + deleted: Thâi掉ah + demote: 降級 + destroyed_msg: Teh-beh thâi掉 %{username} ê資料 + disable: 冷凍 + disable_sign_in_token_auth: 停止用電子phue ê token認證 + disable_two_factor_authentication: 停止用2FA + disabled: 冷凍起來ah + display_name: 顯示ê名 + domain: 域名 + edit: 編輯 + email: 電子phue箱 + email_status: 電子phue ê狀態 + enable: 取消冷凍 + location: + all: Kui ê + local: 本地 + remote: 別ê站 + title: 位置 instances: dashboard: instance_languages_dimension: Tsia̍p用ê語言 @@ -14,3 +52,6 @@ nan: too_soon: Tio̍h用未來ê日期。 statuses: default_language: Kap界面ê語言sio kâng + user_mailer: + welcome: + sign_in_action: 登入 diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index ef82b3232a7486..0bfeacd9cd935a 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -127,6 +127,9 @@ cs: show_application: I tak budete vždy moci vidět, která aplikace zveřejnila váš příspěvek. tag: name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti + terms_of_service: + changelog: Může být strukturováno pomocí Markdown syntaxu. + text: Může být strukturováno pomocí Markdown syntaxu. user: chosen_languages: Po zaškrtnutí budou ve veřejných časových osách zobrazeny pouze příspěvky ve zvolených jazycích user_role: @@ -313,6 +316,17 @@ cs: name: Hashtag trendable: Povolit zobrazení tohoto hashtagu mezi populárními usable: Povolit příspěvkům používat tento hashtag lokálně + terms_of_service: + changelog: Co se změnilo? + text: Podmínky užití + terms_of_service_generator: + admin_email: E-mailová adresa pro právní upozornění + arbitration_address: Fyzická adresa pro upozornění na arbitrační řízení + arbitration_website: Webová stránka pro zasílání arbitračních upozornění + dmca_address: Fyzická adresa pro oznámení DMCA/porušení autorských práv + dmca_email: E-mailová adresa pro oznámení DMCA/porušení autorských práv + domain: Doména + jurisdiction: Právní příslušnost user: role: Role time_zone: Časové pásmo diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index a741040477aada..be2ed2135efdb8 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -130,6 +130,16 @@ eo: show_application: Vi ĉiam povos vidi kiu aplikaĵo publikigis vian afiŝon ĉiaokaze. tag: name: Vi povas ŝanĝi nur la majuskladon de la literoj, ekzemple, por igi ĝin pli legebla + terms_of_service: + changelog: Povas esti strukturita per sintakso Markdown-a. + text: Povas esti strukturita per sintakso Markdown-a. + terms_of_service_generator: + admin_email: Legalaj sciigoj povas esti kontraŭsciigoj, postulaĵoj de tribunalo, postulaĵoj pri forigo, kaj postulaĵoj de la policaro. + arbitration_address: Povas esti la sama kiel Fizika adreso supre, aŭ "N/A" se oni uzas retpoŝton + arbitration_website: Povas esti retformo, aŭ "N/A" se oni uzas retpoŝton + dmca_address: Por tenantoj en Usono, uzu la adreson registritan en la DMCA Designated Agenŭ Directory. Registrolibro de poŝtskatoloj haveblas per direkta postulo, uzu la DMCA Designated Agent Post Office Box Waiver Request por retpoŝti la Ofico de Kopirajto kaj priskribu, ke vi estas hejm-trovigita administranto por enhavo kaj devas uzi Poŝtskatolon por forigi vian hejmadreson de publika vido. + dmca_email: Povas esti la sama retpoŝtadreso uzita por "Retpoŝtadreso por legalaj sciigoj" supre + domain: Unika identigilo de la retaj servicoj, ke vi provizas. user: chosen_languages: Kun tio markita nur mesaĝoj en elektitaj lingvoj aperos en publikaj tempolinioj role: La rolo kontrolas kiujn permesojn la uzanto havas. diff --git a/config/locales/simple_form.nan.yml b/config/locales/simple_form.nan.yml index 512c65fe8b0f15..d9049a784b485e 100644 --- a/config/locales/simple_form.nan.yml +++ b/config/locales/simple_form.nan.yml @@ -1 +1,11 @@ +--- nan: + simple_form: + hints: + account: + display_name: Lí ê全名á是別號。 + fields: Lí ê頭頁、代名詞、年歲,kap其他beh分享ê。 + defaults: + password: 用 8 ê字元以上 + setting_display_media_hide_all: 一直khàm掉媒體 + setting_display_media_show_all: 一直展示媒體 diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 72c3f000f60cac..0815170fcc78bb 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -60,6 +60,7 @@ sv: setting_display_media_default: Dölj media markerad som känslig setting_display_media_hide_all: Dölj alltid all media setting_display_media_show_all: Visa alltid media markerad som känslig + setting_system_scrollbars_ui: Gäller endast för webbläsare som är baserade på Safari och Chrome setting_use_blurhash: Gradienter är baserade på färgerna av de dolda objekten men fördunklar alla detaljer setting_use_pending_items: Dölj tidslinjeuppdateringar bakom ett klick istället för att automatiskt bläddra i flödet username: Du kan använda bokstäver, siffror och understreck diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 49f191bcdd9bda..9ecd12517b8949 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -130,6 +130,17 @@ uk: show_application: Ви завжди зможете побачити, з якого застосунку опубліковано ваш допис. tag: name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність + terms_of_service: + changelog: Можна структурувати за допомогою синтаксису Markdown. + text: Можна структурувати за допомогою синтаксису Markdown. + terms_of_service_generator: + admin_email: Юридичні повідомлення містять зустрічні повідомлення, ухвали суду, запити на видалення та запити правоохоронних органів. + arbitration_address: Може бути таким самим, як і фізична адреса вище, або "N/A", якщо використано електронну пошту + arbitration_website: Може бути вебформою або "N/A", якщо використано електронну пошту + dmca_address: Для американських операторів використовуйте адресу, зареєстровану в довіднику призначених агентів DMCA. П.О. Перелік скриньок доступний за прямим запитом. Скористайтеся запитом на відмову від поштової скриньки призначеного агента Закону про захист авторських прав у цифрову епоху, щоб надіслати електронний лист до Бюро авторських прав, і опишіть, що ви домашній модератор вмісту, який боїться помсти чи відплати за свої дії та потребує використання P.O. Box, щоб видалити вашу домашню адресу з публічного перегляду. + dmca_email: Це може бути та сама адреса електронної пошти, яку використано в розділі «Електронна адреса для юридичних повідомлень» вище + domain: Унікальна ідентифікація онлайн-сервісу, який ви надаєте. + jurisdiction: Укажіть країну, де живе той, хто платить за рахунками. Якщо це компанія чи інша організація, вкажіть країну, де вона зареєстрована, а також місто, регіон, територію чи штат відповідно. user: chosen_languages: У глобальних стрічках будуть показані дописи тільки вибраними мовами role: Роль визначає, які права має користувач. @@ -214,7 +225,7 @@ uk: setting_default_privacy: Видимість дописів setting_default_sensitive: Позначати медіа делікатними setting_delete_modal: Показувати діалог підтвердження під час видалення допису - setting_disable_hover_cards: Вимкнути попередній перегляд профілю при наведенні + setting_disable_hover_cards: Вимкнути попередній перегляд профілю під час наведення мишки setting_disable_swiping: Вимкнути рух посування setting_display_media: Показ медіа setting_display_media_default: За промовчанням @@ -318,12 +329,18 @@ uk: listable: Дозволити появу цього хештеґа у каталозі пошуку і пропозицій name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів - usable: Дозволити дописам використовувати цей хештег локально + usable: Дозволити дописам використовувати цей гештеґ локально terms_of_service: changelog: Що змінилося? text: Умови використання terms_of_service_generator: + admin_email: Адреса електронної пошти для юридичних повідомлень + arbitration_address: Фізична адреса для арбітражних повідомлень + arbitration_website: Сайт для надсилання арбітражних повідомлень + dmca_address: Фізична адреса для сповіщень про DMCA/авторські права + dmca_email: Фізична адреса для сповіщень про DMCA/авторські права domain: Домен + jurisdiction: Правова юрисдикція user: role: Роль time_zone: Часовий пояс diff --git a/config/locales/sv.yml b/config/locales/sv.yml index aa2de7de328de9..7855c911d125eb 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -214,6 +214,7 @@ sv: enable_user: Aktivera användare memorialize_account: Minnesmärk konto promote_user: Befordra användare + publish_terms_of_service: Publicera användarvillkor reject_appeal: Avvisa överklagande reject_user: Avvisa användare remove_avatar_user: Ta bort avatar @@ -278,6 +279,7 @@ sv: enable_user_html: "%{name} aktiverade inloggning för användaren %{target}" memorialize_account_html: "%{name} gjorde %{target}s konto till en minnessida" promote_user_html: "%{name} befordrade användaren %{target}" + publish_terms_of_service_html: "%{name} publicerade uppdateringar till användarvillkoren" reject_appeal_html: "%{name} avvisade överklagande av modereringsbeslut från %{target}" reject_user_html: "%{name} avvisade registrering från %{target}" remove_avatar_user_html: "%{name} tog bort %{target}s avatar" @@ -926,8 +928,33 @@ sv: title: Hashtaggar updated_msg: Hashtagg-inställningarna har uppdaterats terms_of_service: + back: Tillbaka till användarvillkoren + changelog: Vad har ändrats + create: Använd dina egna + current: Nuvarande draft: Utkast + generate: Använd mall + generates: + action: Generera + chance_to_review_html: "De genererade villkoren för tjänsten kommer inte att publiceras automatiskt. Du kommer att ha en chans att granska resultatet. Vänligen fyll i nödvändig information för att fortsätta." + explanation_html: Användarvillkorsmallen tillhandahålls endast i informationssyfte, och skall inte tolkas som juridisk rådgivning i något ämne. Rådgör med ditt eget juridiska ombud om din situation och specifika juridiska frågor du har. + title: Inställningar för användarvillkor + history: Historik + live: Aktuella + no_history: Det finns inga sparade ändringar i användarvillkoren ännu. + no_terms_of_service_html: Du har för närvarande inte några användarvillkor. Användarvillkoren är avsedda att ge klarhet och skydda dig i tvister med dina användare. + notified_on_html: Användare meddelade på %{date} + notify_users: Meddela användare + preview: + explanation_html: 'E-postmeddelandet kommer att skickas till %{display_count} användare som har registrerat sig före %{date}. Följande text kommer att inkluderas i meddelandet:' + send_preview: Skicka till %{email} för förhandsgranskning + send_to_all: + one: Skicka %{display_count} meddelande + other: Skicka %{display_count} meddelanden + title: Förhandsgranska användarvillkorsmeddelande publish: Publicera + published_on_html: Publicerade den %{date} + save_draft: Spara utkast title: Användarvillkor title: Administration trends: @@ -1160,6 +1187,7 @@ sv: set_new_password: Skriv in nytt lösenord setup: email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel. + email_settings_hint_html: Klicka på länken vi skickade till %{email} för att börja använda Mastodon. Vi väntar här. link_not_received: Fick du ingen länk? new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter! title: Kolla din inkorg @@ -1168,6 +1196,7 @@ sv: title: Logga in på %{domain} sign_up: manual_review: Registreringar på %{domain} går igenom manuell granskning av våra moderatorer. För att hjälpa oss att hantera din registrering, skriv lite om dig själv och varför du vill ha ett konto på %{domain}. + preamble: Med ett konto på denna Mastodon-server kan du följa alla andra personer i fediversum, oavsett vilken server deras konto tillhör. title: Låt oss få igång dig på %{domain}. status: account_status: Kontostatus @@ -1179,6 +1208,7 @@ sv: view_strikes: Visa tidigare prickar på ditt konto too_fast: Formuläret har skickats för snabbt, försök igen. use_security_key: Använd säkerhetsnyckel + user_agreement_html: Jag har läst och godkänner användarvillkoren och integritetspolicy author_attribution: example_title: Exempeltext hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon. @@ -1677,6 +1707,7 @@ sv: scheduled_statuses: over_daily_limit: Du har överskridit dygnsgränsen på %{limit} schemalagda inlägg over_total_limit: Du har överskridit gränsen på %{limit} schemalagda inlägg + too_soon: datumet måste vara i framtiden self_destruct: lead_html: Tyvärr stänger %{domain} för gott. Om du hade ett konto där kommer du inte längre kunna använda det, men du kan fortfarande begära en säkerhetskopia av din data. title: Denna server stänger ned @@ -1901,6 +1932,15 @@ sv: 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. subject: Ditt konto har nåtts från en ny IP-adress title: En ny inloggning + terms_of_service_changed: + agreement: Genom att fortsätta använda %{domain} godkänner du dessa villkor. Om du inte håller med om de uppdaterade villkoren kan du när som helst säga upp ditt avtal med %{domain} genom att radera ditt konto. + changelog: 'I korthet, här är vad denna uppdatering innebär för dig:' + description: 'Du får detta e-postmeddelande eftersom vi gör vissa ändringar i våra användarvillkor på %{domain}. Vi uppmanar dig att granska de uppdaterade villkoren i sin helhet här:' + description_html: Du får detta e-postmeddelande eftersom vi gör vissa ändringar i våra användarvillkor på %{domain}. Vi uppmanar dig att granska de uppdaterade villkoren i sin helhet här. + sign_off: "%{domain} teamet" + subject: Uppdateringar till våra användarvillkor + subtitle: Villkoren för tjänsten på %{domain} ändras + title: Viktig uppdatering warning: appeal: Skicka överklagan appeal_description: Om du anser detta felaktigt kan du skicka överklagan till administratörerna av %{instance}. diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 0478ce6d3bb3c3..6f0ddbd81f1746 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -58,7 +58,7 @@ uk: title: Змінити роль для %{username} confirm: Зберегти confirmed: Підтверджено - confirming: Зберігається + confirming: Підтверджується custom: Власне delete: Видалити дані deleted: Видалено @@ -92,8 +92,8 @@ uk: title: Розміщення login_status: Стан входу media_attachments: Мультимедійні вкладення - memorialize: Меморіалізувати - memorialized: Перетворено на пам'ятник + memorialize: Увічнити + memorialized: Увічнено memorialized_msg: "%{username} успішно перетворено на пам'ятний обліковий запис" moderation: active: Активний @@ -193,6 +193,7 @@ uk: create_domain_block: Створити блокування домену create_email_domain_block: Створити блокування домену е-пошти create_ip_block: Створити правило IP + create_relay: Створити реле create_unavailable_domain: Створити недоступний домен create_user_role: Створити роль demote_user: Понизити користувача @@ -204,18 +205,22 @@ uk: destroy_email_domain_block: Видалити блокування домену е-пошти destroy_instance: Очистити домен destroy_ip_block: Видалити правило IP + destroy_relay: Видалити реле destroy_status: Видалити допис destroy_unavailable_domain: Видалити недоступний домен destroy_user_role: Знищити роль disable_2fa_user: Вимкнути 2FA disable_custom_emoji: Вимкнути користувацькі емодзі + disable_relay: Вимкнути реле disable_sign_in_token_auth_user: Вимкнути автентифікацію за допомогою токена е-пошти для користувача disable_user: Відключити користувача enable_custom_emoji: Увімкнути користувацькі емодзі + enable_relay: Увімкнути реле enable_sign_in_token_auth_user: Увімкнути автентифікацію за допомогою токена е-пошти для користувача enable_user: Активувати користувача memorialize_account: Меморіалізувати акаунт promote_user: Підвищити користувача + publish_terms_of_service: Опублікувати Умови використання reject_appeal: Відхилити апеляцію reject_user: Відхилити користувача remove_avatar_user: Видалити аватар @@ -253,6 +258,7 @@ uk: create_domain_block_html: "%{name} блокує домен %{target}" create_email_domain_block_html: "%{name} блокує домен електронної пошти %{target}" create_ip_block_html: "%{name} створює правило для IP %{target}" + create_relay_html: "%{name} створив реле %{target}" create_unavailable_domain_html: "%{name} зупиняє доставляння на домен %{target}" create_user_role_html: "%{name} створює роль %{target}" demote_user_html: "%{name} понижує користувача %{target}" @@ -264,18 +270,22 @@ uk: destroy_email_domain_block_html: "%{name} розблоковує домен електронної пошти %{target}" destroy_instance_html: "%{name} очищує домен %{target}" destroy_ip_block_html: "%{name} видаляє правило для IP %{target}" + destroy_relay_html: "%{name} видалив реле %{target}" destroy_status_html: "%{name} вилучає допис %{target}" destroy_unavailable_domain_html: "%{name} відновлює доставляння на домен %{target}" destroy_user_role_html: "%{name} видаляє роль %{target}" disable_2fa_user_html: "%{name} вимикає двоетапну перевірку для користувача %{target}" disable_custom_emoji_html: "%{name} вимикає емодзі %{target}" + disable_relay_html: "%{name} вимкнув реле %{target}" disable_sign_in_token_auth_user_html: "%{name} вимикає автентифікацію через токен е-пошти для %{target}" disable_user_html: "%{name} вимикає вхід для користувача %{target}" enable_custom_emoji_html: "%{name} вмикає емодзі %{target}" + enable_relay_html: "%{name} увімкнув реле %{target}" enable_sign_in_token_auth_user_html: "%{name} вмикає автентифікацію через токен е-пошти для %{target}" enable_user_html: "%{name} вмикає вхід для користувача %{target}" memorialize_account_html: "%{name} перетворює обліковий запис %{target} на сторінку пам'яті" promote_user_html: "%{name} підвищує користувача %{target}" + publish_terms_of_service_html: "%{name} опублікував оновлення умов використання" reject_appeal_html: "%{name} відхилили звернення на оскарження рішення від %{target}" reject_user_html: "%{name} відхиляє реєстрацію від %{target}" remove_avatar_user_html: "%{name} прибирає аватар %{target}" @@ -846,8 +856,10 @@ uk: back_to_account: Назад до сторінки облікового запису back_to_report: Повернутися до сторінки скарги batch: + add_to_report: 'Додати до звіту #%{id}' remove_from_report: Вилучити зі скарги report: Скарга + contents: Вміст deleted: Видалено favourites: Вподобане history: Історія версій @@ -856,12 +868,17 @@ uk: media: title: Медіа metadata: Метадані + no_history: Цей допис ще не редагували no_status_selected: Жодного допису не було змінено, оскільки жодного з них не було вибрано open: Відкрити допис original_status: Оригінальний допис reblogs: Поширення + replied_to_html: Відповів %{acct_link} status_changed: Допис змінено + status_title: "@%{name} опублікував допис" + title: Дописи облікового запису - @%{name} trending: Популярне + view_publicly: Переглянути привселюдно visibility: Видимість with_media: З медіа strikes: @@ -922,7 +939,7 @@ uk: moderation: not_trendable: Не трендові not_usable: Невикористовувані - pending_review: Очікує розгляду + pending_review: Очікує на розгляд review_requested: Запит на розгляд reviewed: Розглянуто title: Статус @@ -936,8 +953,34 @@ uk: reset: Скинути review: Переглянути допис search: Пошук - title: Хештеги + title: Гештеґи updated_msg: Параметри хештеґів успішно оновлені + terms_of_service: + back: Назад до умов використання + changelog: Що змінилося + create: Використовувати власний + current: Поточний + draft: Чернетка + generate: Використовувати шаблон + generates: + action: Згенерувати + chance_to_review_html: "Створені умови використання не опублікуються автоматично. Ви матимете змогу переглянути результати. Будь ласка, заповніть потрібні дані, щоб перейти далі." + explanation_html: Наданий шаблон умов надання послуг призначений лише для інформаційних цілей і не має розглядатися як юридична консультація з будь-якого питання. Проконсультуйтеся зі своїм юридичним радником щодо вашої ситуації та конкретних юридичних питань, які у вас постали. + title: Налаштування Умов обслуговування + history: Історія + live: Наживо + no_history: Змін умов обслуговування поки що не зафіксовано. + no_terms_of_service_html: Наразі у вас не налаштовано умов використання. Умови використання призначені для забезпечення ясності та захисту від потенційних зобов’язань у суперечках із користувачами. + notified_on_html: Користувачі сповіщені %{date} + notify_users: Сповістити користувачів + preview: + explanation_html: 'Електронний лист буде надіслано %{display_count} користувачам, які зареєструвалися до %{date}. Розміщений нижче текст додасться до електронного листа:' + send_preview: Надіслати попередній перегляд на %{email} + title: Попередній перегляд сповіщення про умови використання + publish: Опублікувати + published_on_html: Опубліковано %{date} + save_draft: Зберегти чернетку + title: Умови використання title: Адміністрування trends: allow: Дозволити @@ -1186,6 +1229,7 @@ uk: title: Увійти до %{domain} sign_up: manual_review: Реєстрація на %{domain} проходить через ручний розгляд нашими модераторами. Щоб допомогти нам завершити вашу реєстрацію, напишіть трохи про себе і чому ви хочете зареєструватися на %{domain}. + preamble: За допомогою облікового запису на цьому сервері Mastodon ви зможете стежити за будь-якою іншою людиною у федіверсі незалежно від того, де розміщений обліковий запис. title: Налаштуймо вас на %{domain}. status: account_status: Стан облікового запису @@ -1197,6 +1241,7 @@ uk: view_strikes: Переглянути попередні попередження вашому обліковому запису too_fast: Форму подано занадто швидко, спробуйте ще раз. use_security_key: Використовувати ключ безпеки + user_agreement_html: Я прочитав і приймаю умови використання та політику конфіденційності< /a> author_attribution: example_title: Зразок тексту hint_html: Ви пишете новини чи статті в блозі за межами Mastodon? Контролюйте, як вони підписуються, коли ними діляться на Mastodon. @@ -1844,6 +1889,8 @@ uk: too_late: Запізно оскаржувати це попередження tags: does_not_match_previous_name: не збігається з попереднім ім'ям + terms_of_service: + title: Умови використання themes: contrast: Mastodon (Висока контрастність) default: Mastodon (Темна) @@ -1904,6 +1951,15 @@ uk: further_actions_html: Якщо це були не ви. Радимо вам негайно %{action} й увімкнути двоетапну перевірку, щоб уберегти свій обліковий запис. subject: До вашого облікового запису отримано доступ з нової IP-адреси title: Новий вхід + terms_of_service_changed: + agreement: Далі використовуючи %{domain}, ви погоджуєтеся з цими умовами. Якщо ви не згодні з оновленими умовами, ви можете припинити свою угоду з %{domain} будь-якої миті, видаливши ваш обліковий запис. + changelog: 'Коротко, ось що це оновлення означає для вас:' + description: 'Ви отримали цього електронного листа, тому що ми впроваджуємо деякі зміни в наші умови обслуговування в %{domain}. Радимо переглянути оновлені умови повністю тут:' + description_html: Ви отримали цього електронного листа, тому що ми впроваджуємо деякі зміни до наших умов обслуговування в %{domain}. Радимо переглянути повністю оновлені умови тут. + sign_off: Команда %{domain} + subject: Оновлення до наших умов обслуговування + subtitle: Умови використання %{domain} змінюються + title: Важливе оновлення warning: appeal: Подати апеляцію appeal_description: Якщо ви вважаєте, що це помилка, ви можете надіслати оскаржити дії персоналу %{instance}. From 612d6182e47ea132de21a1b769ce7d599cb4d85d Mon Sep 17 00:00:00 2001 From: Jeremy Kescher Date: Mon, 6 Jan 2025 09:14:11 +0100 Subject: [PATCH 06/21] Fix `/share` not using server-set characters limit (#33459) --- app/javascript/mastodon/containers/compose_container.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/mastodon/containers/compose_container.jsx b/app/javascript/mastodon/containers/compose_container.jsx index 171f14d3b2c780..a2513cc552da1d 100644 --- a/app/javascript/mastodon/containers/compose_container.jsx +++ b/app/javascript/mastodon/containers/compose_container.jsx @@ -1,6 +1,7 @@ import { Provider } from 'react-redux'; import { fetchCustomEmojis } from 'mastodon/actions/custom_emojis'; +import { fetchServer } from 'mastodon/actions/server'; import { hydrateStore } from 'mastodon/actions/store'; import { Router } from 'mastodon/components/router'; import Compose from 'mastodon/features/standalone/compose'; @@ -13,6 +14,7 @@ if (initialState) { } store.dispatch(fetchCustomEmojis()); +store.dispatch(fetchServer()); const ComposeContainer = () => ( From 08dd11f8d4c281b8b564df0548d3d991d3eaee68 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 03:18:05 -0500 Subject: [PATCH 07/21] Use `in_order_of` with `filter: false` in `AccountSummary.localized` (#33446) --- app/models/account_summary.rb | 2 +- spec/models/account_summary_spec.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 spec/models/account_summary_spec.rb diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb index 327c0ef305ab7c..7522a7019345f8 100644 --- a/app/models/account_summary.rb +++ b/app/models/account_summary.rb @@ -17,6 +17,6 @@ class AccountSummary < ApplicationRecord has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false, dependent: nil scope :safe, -> { where(sensitive: false) } - scope :localized, ->(locale) { order(Arel::Nodes::Case.new.when(arel_table[:language].eq(locale)).then(1).else(0).desc) } + scope :localized, ->(locale) { in_order_of(:language, [locale], filter: false) } scope :filtered, -> { where.missing(:follow_recommendation_suppressions) } end diff --git a/spec/models/account_summary_spec.rb b/spec/models/account_summary_spec.rb new file mode 100644 index 00000000000000..cede8cda553275 --- /dev/null +++ b/spec/models/account_summary_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountSummary do + describe 'Scopes' do + describe '.localized' do + let(:first) { Fabricate :account } + let(:last) { Fabricate :account } + + before do + Fabricate :status, account: first, language: 'en' + Fabricate :status, account: last, language: 'es' + described_class.refresh + end + + it 'returns records in order of language' do + expect(described_class.localized('en')) + .to contain_exactly( + have_attributes(account_id: first.id, language: 'en'), + have_attributes(account_id: last.id, language: 'es') + ) + end + end + end +end From dbbf450ef5e43431e962ea35c0f6042c094d179a Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 11:04:25 +0100 Subject: [PATCH 08/21] Fix `fediverse:creator` metadata not showing up in REST API (#33466) --- app/models/preview_card.rb | 2 +- .../rest/preview_card_serializer_spec.rb | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index f6f37c8c82d8aa..56fe48363551ac 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -170,7 +170,7 @@ def image_styles(file) private def serialized_authors - if author_name? || author_url? + if author_name? || author_url? || author_account_id? PreviewCard::Author .new(self) end diff --git a/spec/serializers/rest/preview_card_serializer_spec.rb b/spec/serializers/rest/preview_card_serializer_spec.rb index 6dbc33786564df..41ba305b7ce285 100644 --- a/spec/serializers/rest/preview_card_serializer_spec.rb +++ b/spec/serializers/rest/preview_card_serializer_spec.rb @@ -21,7 +21,24 @@ end end - context 'when preview card has author data' do + context 'when preview card has fediverse author data' do + let(:preview_card) { Fabricate.build :preview_card, author_account: Fabricate(:account) } + + it 'includes populated authors array' do + expect(subject.deep_symbolize_keys) + .to include( + authors: be_an(Array).and( + contain_exactly( + include( + account: be_present + ) + ) + ) + ) + end + end + + context 'when preview card has non-fediverse author data' do let(:preview_card) { Fabricate.build :preview_card, author_name: 'Name', author_url: 'https://host.example/123' } it 'includes populated authors array' do From ea9b10d112d62bfa7a60886a00f9774fff0da3d7 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 11:16:42 +0100 Subject: [PATCH 09/21] Fix error 500 when passing an invalid `lang` parameter (#33467) --- app/controllers/concerns/localized.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/localized.rb b/app/controllers/concerns/localized.rb index ede299d5a4d859..14742e3b5c25d7 100644 --- a/app/controllers/concerns/localized.rb +++ b/app/controllers/concerns/localized.rb @@ -25,7 +25,7 @@ def http_accept_language end def available_locale_or_nil(locale_name) - locale_name.to_sym if locale_name.present? && I18n.available_locales.include?(locale_name.to_sym) + locale_name.to_sym if locale_name.respond_to?(:to_sym) && I18n.available_locales.include?(locale_name.to_sym) end def content_locale From c692f69dbab7df442463e68ed3629896d3c6767c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 17:24:32 +0100 Subject: [PATCH 10/21] Fix color contrast in report modal (#33468) --- app/javascript/styles/mastodon/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f070fa6fbb4516..d21175595dd3d3 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1590,7 +1590,7 @@ body > [data-popper-placement] { padding: 0 10px; .detailed-status__display-name { - color: lighten($inverted-text-color, 16%); + color: $dark-text-color; span { display: inline; From e8672e27e8372d4e76838771d47c40bd67c504bf Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 19:22:07 +0100 Subject: [PATCH 11/21] Further remove old notifications code (#33465) --- .../mastodon/actions/notifications.js | 42 ++----------------- .../containers/column_settings_container.js | 6 +-- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 3266df5a59d907..2499b8da1d716b 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -7,26 +7,18 @@ import { requestNotificationPermission } from '../utils/notifications'; import { fetchFollowRequests } from './accounts'; import { importFetchedAccount, - importFetchedStatus, } from './importer'; import { submitMarkers } from './markers'; import { notificationsUpdate } from "./notifications_typed"; import { register as registerPushNotifications } from './push_notifications'; -import { saveSettings } from './settings'; export * from "./notifications_typed"; -export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; - export const NOTIFICATIONS_FILTER_SET = 'NOTIFICATIONS_FILTER_SET'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; -export const NOTIFICATION_REQUESTS_DISMISS_REQUEST = 'NOTIFICATION_REQUESTS_DISMISS_REQUEST'; -export const NOTIFICATION_REQUESTS_DISMISS_SUCCESS = 'NOTIFICATION_REQUESTS_DISMISS_SUCCESS'; -export const NOTIFICATION_REQUESTS_DISMISS_FAIL = 'NOTIFICATION_REQUESTS_DISMISS_FAIL'; - defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -34,8 +26,6 @@ defineMessages({ export function updateNotifications(notification, intlMessages, intlLocale) { return (dispatch, getState) => { - const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); - const showInColumn = activeFilter === 'all' ? getState().getIn(['settings', 'notifications', 'shows', notification.type], true) : activeFilter === notification.type; const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); @@ -57,24 +47,9 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch(submitMarkers()); - if (showInColumn) { - dispatch(importFetchedAccount(notification.account)); - - if (notification.status) { - dispatch(importFetchedStatus(notification.status)); - } - - if (notification.report) { - dispatch(importFetchedAccount(notification.report.target_account)); - } - - dispatch(notificationsUpdate({ notification, playSound: playSound && !filtered})); - } else if (playSound && !filtered) { - dispatch({ - type: NOTIFICATIONS_UPDATE_NOOP, - meta: { sound: 'boop' }, - }); - } + // `notificationsUpdate` is still used in `user_lists` and `relationships` reducers + dispatch(importFetchedAccount(notification.account)); + dispatch(notificationsUpdate({ notification, playSound: playSound && !filtered})); // Desktop notifications if (typeof window.Notification !== 'undefined' && showAlert && !filtered) { @@ -93,17 +68,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) { const noOp = () => {}; -export function setFilter (filterType) { - return dispatch => { - dispatch({ - type: NOTIFICATIONS_FILTER_SET, - path: ['notifications', 'quickFilter', 'active'], - value: filterType, - }); - dispatch(saveSettings()); - }; -} - // Browser support export function setupBrowserNotifications() { return dispatch => { diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index f061060ec7c4e2..eddd35df4a2fe0 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -3,10 +3,10 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; import { openModal } from 'mastodon/actions/modal'; -import { fetchNotifications } from 'mastodon/actions/notification_groups'; +import { fetchNotifications , setNotificationsFilter } from 'mastodon/actions/notification_groups'; import { showAlert } from '../../../actions/alerts'; -import { setFilter, requestBrowserPermission } from '../../../actions/notifications'; +import { requestBrowserPermission } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { changeSetting } from '../../../actions/settings'; import ColumnSettings from '../components/column_settings'; @@ -43,7 +43,7 @@ const mapDispatchToProps = (dispatch) => ({ } } else if (path[0] === 'quickFilter') { dispatch(changeSetting(['notifications', ...path], checked)); - dispatch(setFilter('all')); + dispatch(setNotificationsFilter('all')); } else if (path[0] === 'alerts' && checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { dispatch(requestBrowserPermission((permission) => { From 1eb752fb38d48ecd42248a733d2cfd9246a77e6c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:22:32 -0500 Subject: [PATCH 12/21] Extract constants for `AnnualReport::*` minimum thresholds (#33469) --- app/lib/annual_report/commonly_interacted_with_accounts.rb | 7 ++++++- app/lib/annual_report/most_reblogged_accounts.rb | 7 ++++++- app/lib/annual_report/top_hashtags.rb | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/lib/annual_report/commonly_interacted_with_accounts.rb b/app/lib/annual_report/commonly_interacted_with_accounts.rb index 2316789f2adfd7..c2aee44dea48a1 100644 --- a/app/lib/annual_report/commonly_interacted_with_accounts.rb +++ b/app/lib/annual_report/commonly_interacted_with_accounts.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source + MINIMUM_INTERACTIONS = 1 SET_SIZE = 40 def generate @@ -17,6 +18,10 @@ def generate private def commonly_interacted_with_accounts - report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count + report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count + end + + def minimum_interaction_count + Arel.star.count.gt(MINIMUM_INTERACTIONS) end end diff --git a/app/lib/annual_report/most_reblogged_accounts.rb b/app/lib/annual_report/most_reblogged_accounts.rb index 69e247f2a6b01b..a23734fce3c6ab 100644 --- a/app/lib/annual_report/most_reblogged_accounts.rb +++ b/app/lib/annual_report/most_reblogged_accounts.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class AnnualReport::MostRebloggedAccounts < AnnualReport::Source + MINIMUM_REBLOGS = 1 SET_SIZE = 10 def generate @@ -17,6 +18,10 @@ def generate private def most_reblogged_accounts - report_statuses.where.not(reblog_of_id: nil).joins(reblog: :account).group(accounts: [:id]).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count + report_statuses.where.not(reblog_of_id: nil).joins(reblog: :account).group(accounts: [:id]).having(minimum_reblog_count).order(count_all: :desc).limit(SET_SIZE).count + end + + def minimum_reblog_count + Arel.star.count.gt(MINIMUM_REBLOGS) end end diff --git a/app/lib/annual_report/top_hashtags.rb b/app/lib/annual_report/top_hashtags.rb index ae000a8beba5a7..42420a27707120 100644 --- a/app/lib/annual_report/top_hashtags.rb +++ b/app/lib/annual_report/top_hashtags.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class AnnualReport::TopHashtags < AnnualReport::Source + MINIMUM_TAGGINGS = 1 SET_SIZE = 40 def generate @@ -17,7 +18,11 @@ def generate private def top_hashtags - Tag.joins(:statuses).where(statuses: { id: report_statuses.select(:id) }).group(coalesced_tag_names).having('count(*) > 1').order(count_all: :desc).limit(SET_SIZE).count + Tag.joins(:statuses).where(statuses: { id: report_statuses.select(:id) }).group(coalesced_tag_names).having(minimum_taggings_count).order(count_all: :desc).limit(SET_SIZE).count + end + + def minimum_taggings_count + Arel.star.count.gt(MINIMUM_TAGGINGS) end def coalesced_tag_names From 4cf031ee13b8bda88fdf2ae23a7d6632deeac90c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:23:05 -0500 Subject: [PATCH 13/21] Extricate `Invite` constants for code generation (#33472) --- app/models/invite.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/invite.rb b/app/models/invite.rb index ea095a3ac17747..d1981f16ad7642 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -20,6 +20,9 @@ class Invite < ApplicationRecord include Expireable COMMENT_SIZE_LIMIT = 420 + ELIGIBLE_CODE_CHARACTERS = [*('a'..'z'), *('A'..'Z'), *('0'..'9')].freeze + HOMOGLYPHS = %w(0 1 I l O).freeze + VALID_CODE_CHARACTERS = ELIGIBLE_CODE_CHARACTERS - HOMOGLYPHS belongs_to :user, inverse_of: :invites has_many :users, inverse_of: :invite, dependent: nil @@ -38,7 +41,7 @@ def valid_for_use? def set_code loop do - self.code = ([*('a'..'z'), *('A'..'Z'), *('0'..'9')] - %w(0 1 I l O)).sample(8).join + self.code = VALID_CODE_CHARACTERS.sample(8).join break if Invite.find_by(code: code).nil? end end From ef39398b82449440872d899cc5902b8eb7f7c26c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:23:57 -0500 Subject: [PATCH 14/21] Add `urgent` scope and `by_version` method to `SoftwareUpdate` (#33470) --- .../admin/software_updates_controller.rb | 2 +- app/mailers/admin_mailer.rb | 4 ++-- app/models/software_update.rb | 6 +++++ spec/models/software_update_spec.rb | 23 +++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/software_updates_controller.rb b/app/controllers/admin/software_updates_controller.rb index 52d8cb41e6dd94..d7b114a1009303 100644 --- a/app/controllers/admin/software_updates_controller.rb +++ b/app/controllers/admin/software_updates_controller.rb @@ -6,7 +6,7 @@ class SoftwareUpdatesController < BaseController def index authorize :software_update, :index? - @software_updates = SoftwareUpdate.all.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.by_version end private diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index fffbbb3c6db2df..cc2a537b3c862e 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -48,7 +48,7 @@ def new_trends(links, tags, statuses) end def new_software_updates - @software_updates = SoftwareUpdate.all.to_a.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.by_version locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) @@ -56,7 +56,7 @@ def new_software_updates end def new_critical_software_updates - @software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version) + @software_updates = SoftwareUpdate.urgent.by_version locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) diff --git a/app/models/software_update.rb b/app/models/software_update.rb index 7e2b15656e2591..4c868f6f597948 100644 --- a/app/models/software_update.rb +++ b/app/models/software_update.rb @@ -18,6 +18,8 @@ class SoftwareUpdate < ApplicationRecord enum :type, { patch: 0, minor: 1, major: 2 }, suffix: :type + scope :urgent, -> { where(urgent: true) } + def gem_version Gem::Version.new(version) end @@ -35,6 +37,10 @@ def check_enabled? Rails.configuration.x.mastodon.software_update_url.present? end + def by_version + all.sort_by(&:gem_version) + end + def pending_to_a return [] unless check_enabled? diff --git a/spec/models/software_update_spec.rb b/spec/models/software_update_spec.rb index 43e9cd058fb0e9..8c698e51b3a8e9 100644 --- a/spec/models/software_update_spec.rb +++ b/spec/models/software_update_spec.rb @@ -3,6 +3,29 @@ require 'rails_helper' RSpec.describe SoftwareUpdate do + describe 'Scopes' do + describe '.urgent' do + let!(:urgent_update) { Fabricate :software_update, urgent: true } + let!(:non_urgent_update) { Fabricate :software_update, urgent: false } + + it 'returns records that are urgent' do + expect(described_class.urgent) + .to include(urgent_update) + .and not_include(non_urgent_update) + end + end + end + + describe '.by_version' do + let!(:latest_update) { Fabricate :software_update, version: '4.0.0' } + let!(:older_update) { Fabricate :software_update, version: '3.0.0' } + + it 'returns record in gem version order' do + expect(described_class.by_version) + .to eq([older_update, latest_update]) + end + end + describe '#pending?' do subject { described_class.new(version: update_version) } From 24554bb6b967e8ed80137d72b45233c4e706db8f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:24:04 -0500 Subject: [PATCH 15/21] Use `ubuntu-latest` for all GH actions runners (#33473) --- .github/workflows/check-i18n.yml | 2 +- .github/workflows/test-ruby.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index 4f87f0fe5f5928..c46090c1b565bc 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -18,7 +18,7 @@ permissions: jobs: check-i18n: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 08b50e26808613..900faad07f47ea 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -174,7 +174,7 @@ jobs: test-libvips: name: Libvips tests - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest needs: - build From fbd283329ed8d7bae7ef1affd9be68531127549e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:24:39 -0500 Subject: [PATCH 16/21] Avoid "double icon" near each other in nav sidebar (#33449) --- config/navigation.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/navigation.rb b/config/navigation.rb index de9e530f583c89..225106592ca88d 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -17,7 +17,7 @@ n.item :preferences, safe_join([material_symbol('settings'), t('settings.preferences')]), settings_preferences_path, if: -> { current_user.functional? && !self_destruct } do |s| s.item :appearance, safe_join([material_symbol('computer'), t('settings.appearance')]), settings_preferences_appearance_path s.item :notifications, safe_join([material_symbol('mail'), t('settings.notifications')]), settings_preferences_notifications_path - s.item :other, safe_join([material_symbol('settings'), t('preferences.other')]), settings_preferences_other_path + s.item :other, safe_join([material_symbol('tune'), t('preferences.other')]), settings_preferences_other_path end n.item :relationships, safe_join([material_symbol('groups'), t('settings.relationships')]), relationships_path, if: -> { current_user.functional? && !self_destruct } do |s| @@ -65,7 +65,7 @@ n.item :admin, safe_join([material_symbol('manufacturing'), t('admin.title')]), nil, if: -> { current_user.can?(:view_dashboard, :manage_settings, :manage_rules, :manage_announcements, :manage_custom_emojis, :manage_webhooks, :manage_federation) && !self_destruct } do |s| s.item :dashboard, safe_join([material_symbol('speed'), t('admin.dashboard.title')]), admin_dashboard_path, if: -> { current_user.can?(:view_dashboard) } - s.item :settings, safe_join([material_symbol('manufacturing'), t('admin.settings.title')]), admin_settings_path, if: -> { current_user.can?(:manage_settings) }, highlights_on: %r{/admin/settings} + s.item :settings, safe_join([material_symbol('tune'), t('admin.settings.title')]), admin_settings_path, if: -> { current_user.can?(:manage_settings) }, highlights_on: %r{/admin/settings} s.item :terms_of_service, safe_join([material_symbol('description'), t('admin.terms_of_service.title')]), admin_terms_of_service_index_path, highlights_on: %r{/admin/terms_of_service}, if: -> { current_user.can?(:manage_rules) } s.item :rules, safe_join([material_symbol('gavel'), t('admin.rules.title')]), admin_rules_path, highlights_on: %r{/admin/rules}, if: -> { current_user.can?(:manage_rules) } s.item :warning_presets, safe_join([material_symbol('warning'), t('admin.warning_presets.title')]), admin_warning_presets_path, highlights_on: %r{/admin/warning_presets}, if: -> { current_user.can?(:manage_settings) } From 82d2ce293d98a2b9e024bc5396c3586904d46ae5 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 6 Jan 2025 13:24:54 -0500 Subject: [PATCH 17/21] Convert `admin/warning_presets` spec controller->system (#33474) --- .../admin/warning_presets_controller_spec.rb | 85 ------------------- spec/system/admin/warning_presets_spec.rb | 81 ++++++++++++++++++ 2 files changed, 81 insertions(+), 85 deletions(-) delete mode 100644 spec/controllers/admin/warning_presets_controller_spec.rb create mode 100644 spec/system/admin/warning_presets_spec.rb diff --git a/spec/controllers/admin/warning_presets_controller_spec.rb b/spec/controllers/admin/warning_presets_controller_spec.rb deleted file mode 100644 index d416b9c3cf1c7c..00000000000000 --- a/spec/controllers/admin/warning_presets_controller_spec.rb +++ /dev/null @@ -1,85 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::WarningPresetsController do - render_views - - let(:user) { Fabricate(:admin_user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - it 'returns http success' do - get :index - - expect(response).to have_http_status(:success) - end - end - - describe 'GET #edit' do - let(:account_warning_preset) { Fabricate(:account_warning_preset) } - - it 'returns http success and renders edit' do - get :edit, params: { id: account_warning_preset.id } - - expect(response).to have_http_status(:success) - expect(response).to render_template(:edit) - end - end - - describe 'POST #create' do - context 'with valid data' do - it 'creates a new account_warning_preset and redirects' do - expect do - post :create, params: { account_warning_preset: { text: 'The account_warning_preset text.' } } - end.to change(AccountWarningPreset, :count).by(1) - - expect(response).to redirect_to(admin_warning_presets_path) - end - end - - context 'with invalid data' do - it 'does creates a new account_warning_preset and renders index' do - expect do - post :create, params: { account_warning_preset: { text: '' } } - end.to_not change(AccountWarningPreset, :count) - - expect(response).to render_template(:index) - end - end - end - - describe 'PUT #update' do - let(:account_warning_preset) { Fabricate(:account_warning_preset, text: 'Original text') } - - context 'with valid data' do - it 'updates the account_warning_preset and redirects' do - put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: 'Updated text.' } } - - expect(response).to redirect_to(admin_warning_presets_path) - end - end - - context 'with invalid data' do - it 'does not update the account_warning_preset and renders index' do - put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: '' } } - - expect(response).to render_template(:edit) - end - end - end - - describe 'DELETE #destroy' do - let!(:account_warning_preset) { Fabricate(:account_warning_preset) } - - it 'destroys the account_warning_preset and redirects' do - delete :destroy, params: { id: account_warning_preset.id } - - expect { account_warning_preset.reload }.to raise_error(ActiveRecord::RecordNotFound) - expect(response).to redirect_to(admin_warning_presets_path) - end - end -end diff --git a/spec/system/admin/warning_presets_spec.rb b/spec/system/admin/warning_presets_spec.rb new file mode 100644 index 00000000000000..f1ab690981292f --- /dev/null +++ b/spec/system/admin/warning_presets_spec.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Warning Presets' do + describe 'Managing warning presets' do + before { sign_in Fabricate(:admin_user) } + + describe 'Viewing warning presets' do + let!(:account_warning_preset) { Fabricate :account_warning_preset, text: 'This is a preset' } + + it 'lists existing records' do + visit admin_warning_presets_path + + expect(page) + .to have_content(I18n.t('admin.warning_presets.title')) + .and have_content(account_warning_preset.text) + end + end + + describe 'Creating a new account warning preset' do + it 'creates new record with valid attributes' do + visit admin_warning_presets_path + + # Invalid submission + fill_in 'account_warning_preset_text', with: '' + expect { submit_form } + .to_not change(AccountWarningPreset, :count) + expect(page) + .to have_content(/error below/) + + # Valid submission + fill_in 'account_warning_preset_text', with: 'You cant do that here' + expect { submit_form } + .to change(AccountWarningPreset, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.warning_presets.title')) + end + + def submit_form + click_on I18n.t('admin.warning_presets.add_new') + end + end + + describe 'Editing an existing account warning preset' do + let!(:account_warning_preset) { Fabricate :account_warning_preset, text: 'Preset text' } + + it 'updates with valid attributes' do + visit admin_warning_presets_path + + # Invalid submission + click_on account_warning_preset.text + fill_in 'account_warning_preset_text', with: '' + expect { submit_form } + .to_not change(account_warning_preset.reload, :updated_at) + + # Valid update + fill_in 'account_warning_preset_text', with: 'Updated text' + expect { submit_form } + .to(change { account_warning_preset.reload.text }) + end + + def submit_form + click_on I18n.t('generic.save_changes') + end + end + + describe 'Destroy an account warning preset' do + let!(:account_warning_preset) { Fabricate :account_warning_preset } + + it 'removes the record' do + visit admin_warning_presets_path + + expect { click_on I18n.t('admin.warning_presets.delete') } + .to change(AccountWarningPreset, :count).by(-1) + expect { account_warning_preset.reload } + .to raise_error(ActiveRecord::RecordNotFound) + end + end + end +end From 32567a6d8d774d53701141f08e3e33cca94021b0 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 17:24:32 +0100 Subject: [PATCH 18/21] [Glitch] Fix color contrast in report modal Port c692f69dbab7df442463e68ed3629896d3c6767c to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 2d65c2f9e964ae..d4e0cded965a56 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1641,7 +1641,7 @@ body > [data-popper-placement] { padding: 0 10px; .detailed-status__display-name { - color: lighten($inverted-text-color, 16%); + color: $dark-text-color; span { display: inline; From 412a0dd6616ba80ae4e1970b1e658f6dc7980e89 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 6 Jan 2025 19:22:07 +0100 Subject: [PATCH 19/21] [Glitch] Further remove old notifications code Port e8672e27e8372d4e76838771d47c40bd67c504bf to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 42 ++----------------- .../containers/column_settings_container.js | 6 +-- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 3266df5a59d907..2499b8da1d716b 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -7,26 +7,18 @@ import { requestNotificationPermission } from '../utils/notifications'; import { fetchFollowRequests } from './accounts'; import { importFetchedAccount, - importFetchedStatus, } from './importer'; import { submitMarkers } from './markers'; import { notificationsUpdate } from "./notifications_typed"; import { register as registerPushNotifications } from './push_notifications'; -import { saveSettings } from './settings'; export * from "./notifications_typed"; -export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; - export const NOTIFICATIONS_FILTER_SET = 'NOTIFICATIONS_FILTER_SET'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; -export const NOTIFICATION_REQUESTS_DISMISS_REQUEST = 'NOTIFICATION_REQUESTS_DISMISS_REQUEST'; -export const NOTIFICATION_REQUESTS_DISMISS_SUCCESS = 'NOTIFICATION_REQUESTS_DISMISS_SUCCESS'; -export const NOTIFICATION_REQUESTS_DISMISS_FAIL = 'NOTIFICATION_REQUESTS_DISMISS_FAIL'; - defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -34,8 +26,6 @@ defineMessages({ export function updateNotifications(notification, intlMessages, intlLocale) { return (dispatch, getState) => { - const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); - const showInColumn = activeFilter === 'all' ? getState().getIn(['settings', 'notifications', 'shows', notification.type], true) : activeFilter === notification.type; const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); @@ -57,24 +47,9 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch(submitMarkers()); - if (showInColumn) { - dispatch(importFetchedAccount(notification.account)); - - if (notification.status) { - dispatch(importFetchedStatus(notification.status)); - } - - if (notification.report) { - dispatch(importFetchedAccount(notification.report.target_account)); - } - - dispatch(notificationsUpdate({ notification, playSound: playSound && !filtered})); - } else if (playSound && !filtered) { - dispatch({ - type: NOTIFICATIONS_UPDATE_NOOP, - meta: { sound: 'boop' }, - }); - } + // `notificationsUpdate` is still used in `user_lists` and `relationships` reducers + dispatch(importFetchedAccount(notification.account)); + dispatch(notificationsUpdate({ notification, playSound: playSound && !filtered})); // Desktop notifications if (typeof window.Notification !== 'undefined' && showAlert && !filtered) { @@ -93,17 +68,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) { const noOp = () => {}; -export function setFilter (filterType) { - return dispatch => { - dispatch({ - type: NOTIFICATIONS_FILTER_SET, - path: ['notifications', 'quickFilter', 'active'], - value: filterType, - }); - dispatch(saveSettings()); - }; -} - // Browser support export function setupBrowserNotifications() { return dispatch => { diff --git a/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js index 6a933237f9344f..92ea81877c672b 100644 --- a/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js +++ b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js @@ -3,10 +3,10 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; import { openModal } from 'flavours/glitch/actions/modal'; -import { fetchNotifications } from 'flavours/glitch/actions/notification_groups'; +import { fetchNotifications , setNotificationsFilter } from 'flavours/glitch/actions/notification_groups'; import { showAlert } from '../../../actions/alerts'; -import { setFilter, requestBrowserPermission } from '../../../actions/notifications'; +import { requestBrowserPermission } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { changeSetting } from '../../../actions/settings'; import ColumnSettings from '../components/column_settings'; @@ -43,7 +43,7 @@ const mapDispatchToProps = (dispatch) => ({ } } else if (path[0] === 'quickFilter') { dispatch(changeSetting(['notifications', ...path], checked)); - dispatch(setFilter('all')); + dispatch(setNotificationsFilter('all')); } else if (path[0] === 'alerts' && checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { if (checked && typeof window.Notification !== 'undefined' && Notification.permission !== 'granted') { dispatch(requestBrowserPermission((permission) => { From dc14695f8a46fd60c4f39223afbfaf55e95bf077 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 8 Jan 2025 18:24:57 +0100 Subject: [PATCH 20/21] Fix extraneous margins below CW in absence of mentions (#2936) --- .../flavours/glitch/components/mentions_placeholder.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/components/mentions_placeholder.jsx b/app/javascript/flavours/glitch/components/mentions_placeholder.jsx index dde4d77a8494db..0829bcc101fd32 100644 --- a/app/javascript/flavours/glitch/components/mentions_placeholder.jsx +++ b/app/javascript/flavours/glitch/components/mentions_placeholder.jsx @@ -3,7 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { Permalink } from 'flavours/glitch/components/permalink'; export const MentionsPlaceholder = ({ status }) => { - if (status.get('spoiler_text').length === 0 || !status.get('mentions')) { + if (status.get('spoiler_text').length === 0 || !status.get('mentions') || status.get('mentions').isEmpty()) { return null; } From 10e24113a8bf3103a42512657342dd8ca5de92cd Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 8 Jan 2025 18:25:09 +0100 Subject: [PATCH 21/21] =?UTF-8?q?Fix=20issue=20with=20=E2=80=9CTranslate?= =?UTF-8?q?=E2=80=9D=20button=20being=20overlayed=20on=20text=20(#2935)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #2932 --- app/javascript/flavours/glitch/styles/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index d4e0cded965a56..9418a456172360 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1344,7 +1344,7 @@ body > [data-popper-placement] { } } -.status__content.status__content--collapsed .status__content__text { +.status__content.status__content--collapsed { max-height: 20px * 15; // 15 lines is roughly above 500 characters }