From a3bdcc71e74e66d1607d2490e197e675ae8b2b7b Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 24 Mar 2026 17:42:57 +0100 Subject: [PATCH 01/17] Fix serialization when an account is missing (#38370) --- .../collection_with_accounts_serializer.rb | 2 +- ...ollection_with_accounts_serializer_spec.rb | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/serializers/rest/collection_with_accounts_serializer.rb b/app/serializers/rest/collection_with_accounts_serializer.rb index 5d05a32d68..be0b955022 100644 --- a/app/serializers/rest/collection_with_accounts_serializer.rb +++ b/app/serializers/rest/collection_with_accounts_serializer.rb @@ -10,6 +10,6 @@ class REST::CollectionWithAccountsSerializer < ActiveModel::Serializer end def accounts - [object.account] + object.collection_items.map(&:account) + [object.account] + object.collection_items.filter_map(&:account) end end diff --git a/spec/serializers/rest/collection_with_accounts_serializer_spec.rb b/spec/serializers/rest/collection_with_accounts_serializer_spec.rb index 6a2b868397..205674737d 100644 --- a/spec/serializers/rest/collection_with_accounts_serializer_spec.rb +++ b/spec/serializers/rest/collection_with_accounts_serializer_spec.rb @@ -26,11 +26,14 @@ RSpec.describe REST::CollectionWithAccountsSerializer do discoverable: false, tag:) end - - before do - accounts[1..2].each do |account| + let(:collection_items) do + accounts[1..2].map do |account| Fabricate(:collection_item, collection:, account:) end + end + + before do + collection_items collection.reload end @@ -56,4 +59,14 @@ RSpec.describe REST::CollectionWithAccountsSerializer do ) expect(subject['accounts'].size).to eq 3 end + + context 'when collection includes pending items without account' do + let(:collection_items) do + [Fabricate(:collection_item, collection:, account: nil, object_uri: 'https://example.com/actor/1', state: :pending)] + end + + it 'renders successfully' do + expect(subject).to be_a Hash + end + end end From c6691e77bd6f11cb4e43e4e59eb2abb15ee72a12 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:51:42 +0100 Subject: [PATCH 02/17] New Crowdin Translations (automated) (#38380) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 33 ++++++++++++------ app/javascript/mastodon/locales/ca.json | 2 ++ app/javascript/mastodon/locales/cy.json | 10 ------ app/javascript/mastodon/locales/da.json | 33 ++++++++++++------ app/javascript/mastodon/locales/de.json | 33 ++++++++++++------ app/javascript/mastodon/locales/el.json | 33 ++++++++++++------ app/javascript/mastodon/locales/en-GB.json | 8 ----- app/javascript/mastodon/locales/eo.json | 1 - app/javascript/mastodon/locales/es-AR.json | 33 ++++++++++++------ app/javascript/mastodon/locales/es-MX.json | 33 ++++++++++++------ app/javascript/mastodon/locales/es.json | 10 ------ app/javascript/mastodon/locales/fi.json | 33 ++++++++++++------ app/javascript/mastodon/locales/fo.json | 5 --- app/javascript/mastodon/locales/fr-CA.json | 13 ++----- app/javascript/mastodon/locales/fr.json | 13 ++----- app/javascript/mastodon/locales/ga.json | 33 ++++++++++++------ app/javascript/mastodon/locales/gl.json | 20 +++++------ app/javascript/mastodon/locales/he.json | 13 ++----- app/javascript/mastodon/locales/hu.json | 38 +++++++++++++++------ app/javascript/mastodon/locales/is.json | 33 ++++++++++++------ app/javascript/mastodon/locales/it.json | 33 ++++++++++++------ app/javascript/mastodon/locales/ko.json | 3 -- app/javascript/mastodon/locales/nan-TW.json | 10 ------ app/javascript/mastodon/locales/nl.json | 10 ------ app/javascript/mastodon/locales/nn.json | 10 ------ app/javascript/mastodon/locales/no.json | 4 --- app/javascript/mastodon/locales/oc.json | 1 - app/javascript/mastodon/locales/pt-BR.json | 33 +++++++++++++----- app/javascript/mastodon/locales/pt-PT.json | 10 ------ app/javascript/mastodon/locales/sq.json | 37 ++++++++++++++------ app/javascript/mastodon/locales/sv.json | 10 ++---- app/javascript/mastodon/locales/tr.json | 13 ++----- app/javascript/mastodon/locales/vi.json | 33 ++++++++++++------ app/javascript/mastodon/locales/zh-CN.json | 33 ++++++++++++------ app/javascript/mastodon/locales/zh-TW.json | 33 ++++++++++++------ config/locales/ca.yml | 1 + config/locales/fi.yml | 1 + config/locales/hu.yml | 8 +++-- config/locales/sv.yml | 1 + 39 files changed, 414 insertions(+), 300 deletions(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index aa510b681f..888834b3b7 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -141,34 +141,39 @@ "account.unmute": "Не ігнараваць @{name}", "account.unmute_notifications_short": "Апавяшчаць", "account.unmute_short": "Не ігнараваць", + "account_edit.bio.edit_label": "Змяніць апісанне", + "account_edit.bio.label": "хто я", "account_edit.bio.placeholder": "Коратка апішыце сябе, каб дапамагчы іншым пазнаць Вас.", "account_edit.bio.title": "Хто я", "account_edit.bio_modal.add_title": "Апісаць сябе", "account_edit.bio_modal.edit_title": "Змяніць апісанне", - "account_edit.button.add": "Дадаць {item}", - "account_edit.button.delete": "Выдаліць {item}", - "account_edit.button.edit": "Змяніць {item}", "account_edit.column_button": "Гатова", "account_edit.column_title": "Рэдагаваць профіль", - "account_edit.custom_fields.name": "поле", + "account_edit.custom_fields.add_label": "Дадаць поле", + "account_edit.custom_fields.edit_label": "Рэдагаваць поле", "account_edit.custom_fields.placeholder": "Дадайце свае займеннікі, знешнія спасылкі ці нешта іншае, чым Вы хацелі б падзяліцца.", "account_edit.custom_fields.reorder_button": "Змяніць парадак палёў", "account_edit.custom_fields.tip_content": "Вы можаце лёгка дадаць даверу да свайго ўліковага запісу Mastodon пацвярджэннем спасылак на любы з Вашых сайтаў.", "account_edit.custom_fields.tip_title": "Падказка: Дадаванне пацверджаных спасылак", "account_edit.custom_fields.title": "Адвольныя палі", "account_edit.custom_fields.verified_hint": "Як мне дадаць пацверджаную спасылку?", + "account_edit.display_name.add_label": "Дадаць бачнае імя", + "account_edit.display_name.edit_label": "Рэдагаваць бачнае імя", "account_edit.display_name.placeholder": "Вашае бачнае імя — гэта імя, якое іншыя людзі бачаць у Вашым профілі і ў стужках.", "account_edit.display_name.title": "Бачнае імя", - "account_edit.featured_hashtags.item": "хэштэгі", + "account_edit.featured_hashtags.edit_label": "Дадаць хэштэгі", "account_edit.featured_hashtags.placeholder": "Дапамажыце іншым зразумець, якія тэмы Вас цікавяць, і атрымаць доступ да іх.", "account_edit.featured_hashtags.title": "Выбраныя хэштэгі", + "account_edit.field_actions.delete": "Выдаліць поле", + "account_edit.field_actions.edit": "Рэдагаваць поле", "account_edit.field_delete_modal.confirm": "Вы ўпэўненыя, што хочаце выдаліць гэтае адвольнае поле? Гэтае дзеянне будзе незваротным.", "account_edit.field_delete_modal.delete_button": "Выдаліць", "account_edit.field_delete_modal.title": "Выдаліць адвольнае поле?", "account_edit.field_edit_modal.add_title": "Дадаць адвольнае поле", + "account_edit.field_edit_modal.discard_confirm": "Адхіліць", + "account_edit.field_edit_modal.discard_message": "У Вас ёсць незахаваныя змены. Вы сапраўды хочаце адхіліць іх?", "account_edit.field_edit_modal.edit_title": "Рэдагаваць адвольнае поле", - "account_edit.field_edit_modal.limit_header": "Перавышаная рэкамендаваная колькасць сімвалаў", - "account_edit.field_edit_modal.limit_message": "Карыстальнікі мабільных прылад могуць не ўбачыць Вашае поле цалкам.", + "account_edit.field_edit_modal.limit_warning": "Перавышаны рэкамендаваны ліміт сімвалаў. Карыстальнікі мабільных прылад могуць не пабачыць Вашае поле цалкам.", "account_edit.field_edit_modal.link_emoji_warning": "Мы раім не ўжываць адвольныя эмодзі разам з url-спасылкамі. Адвольныя палі, якія ўтрымліваюць і тое, і другое, будуць адлюстраваныя выключна як тэкст, а не спасылкі, каб не блытаць карыстальнікаў.", "account_edit.field_edit_modal.name_hint": "Напрыклад, \"Асабісты Сайт\"", "account_edit.field_edit_modal.name_label": "Назва", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Рэдагаваць альт. тэкст", "account_edit.image_edit.remove_button": "Прыбраць відарыс", "account_edit.image_edit.replace_button": "Замяніць відарыс", + "account_edit.item_list.delete": "Выдаліць {name}", + "account_edit.item_list.edit": "Рэдагаваць {name}", "account_edit.name_modal.add_title": "Дадаць бачнае імя", "account_edit.name_modal.edit_title": "Змяніць бачнае імя", "account_edit.profile_tab.button_label": "Змяніць", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Перацягн. сюды, каб запамп.", "account_edit.upload_modal.step_upload.header": "Выбраць відарыс", "account_edit.upload_modal.step_upload.hint": "Фармату WEBP, PNG, GIF або JPG, да {limit} МБ.{br}Відарыс будзе сціснуты да памеру {width}x{height} пікселяў.", - "account_edit.upload_modal.title_add": "Дадаць фота профілю", - "account_edit.upload_modal.title_replace": "Замяніць фота профілю", + "account_edit.upload_modal.title_add.avatar": "Дадаць фота профілю", + "account_edit.upload_modal.title_add.header": "Дадаць фота вокладкі", + "account_edit.upload_modal.title_replace.avatar": "Замяніць фота профілю", + "account_edit.upload_modal.title_replace.header": "Замяніць фота вокладкі", "account_edit.verified_modal.details": "Дадайце даверу да Вашага профілю Mastodon, пацвярджэннем спасылак на ўласныя сайты. Вось як гэта працуе:", "account_edit.verified_modal.invisible_link.details": "Дадайце спасылку ў свой загаловак. Важнай часткай з'яўляецца rel=\"me\", яна прадухіляе выдачу сябе за іншую асобу на сайтах з карыстальніцкім кантэнтам. Вы нават можаце выкарыстоўваць тэг link у загалоўку старонкі замест {tag}, але HTML код павінен быць даступным без выканання JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Як мне зрабіць спасылку нябачнай?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Дадаць свой сайт як адвольнае поле", "account_edit.verified_modal.title": "Як дадаць пацверджаную спасылку", "account_edit_tags.add_tag": "Дадаць #{tagName}", - "account_edit_tags.column_title": "Змяніць выбраныя хэштэгі", + "account_edit_tags.column_title": "Рэдагаваць тэгі", "account_edit_tags.help_text": "Выбраныя хэштэгі дапамагаюць карыстальнікам знаходзіць Ваш профіль і ўзаемадзейнічаць з ім. Яны дзейнічаюць як фільтры пры праглядзе актыўнасці на Вашай старонцы.", + "account_edit_tags.max_tags_reached": "Вы выкарысталі максімальную колькасць рэкамендаваных хэштэгаў.", "account_edit_tags.search_placeholder": "Увядзіце хэштэг…", "account_edit_tags.suggestions": "Прапановы:", "account_edit_tags.tag_status_count": "{count, plural, one {допіс} few {допісы} many {допісаў} other {допісаў}}", + "account_list.total": "{total, plural,one {# уліковы запіс} few{# уліковыя запісы} other {# уліковых запісаў}}", "account_note.placeholder": "Націсніце, каб дадаць нататку", "admin.dashboard.daily_retention": "Штодзённы паказчык утрымання карыстальнікаў пасля рэгістрацыі", "admin.dashboard.monthly_retention": "Штомесячны паказчык утрымання карыстальнікаў пасля рэгістрацыі", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "На каго падпісацца", "followed_tags": "Падпіскі на хэштэгі", "followers.hide_other_followers": "Гэты карыстальнік вырашыў не паказваць сваіх іншых падпісчыкаў", + "followers.title": "Падпісаны(-ая) на {name}", "following.hide_other_following": "Гэты карыстальнік вырашыў не паказваць свае іншыя падпіскі", + "following.title": "Падпісаны(-ая) {name}", "footer.about": "Пра нас", "footer.about_mastodon": "Пра Mastodon", "footer.about_server": "Пра {domain}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 08b644dd52..5e8e42371e 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -205,6 +205,7 @@ "closed_registrations_modal.find_another_server": "Troba un altre servidor", "closed_registrations_modal.preamble": "Mastodon és descentralitzat. Per tant, tinguis on tinguis el compte, seràs capaç de seguir i interactuar amb tothom des d'aquest servidor. Fins i tot pots tenir el compte en el teu propi servidor!", "closed_registrations_modal.title": "Registrant-se a Mastodon", + "collections.account_count": "{count, plural, one {# compte} other {# comptes}}", "collections.collection_description": "Descripció", "collections.collection_name": "Nom", "collections.collection_topic": "Tema", @@ -213,6 +214,7 @@ "collections.delete_collection": "Elimina la coŀlecció", "collections.description_length_hint": "Límit de 100 caràcters", "collections.error_loading_collections": "Hi ha hagut un error en carregar les vostres coŀleccions.", + "collections.last_updated_at": "Última actualització: {date}", "collections.mark_as_sensitive": "Marcar com a sensible", "collections.mark_as_sensitive_hint": "Amaga la descripció i els comptes de la coŀlecció rere un avís de contingut. El nom de la coŀlecció serà encara visible.", "collections.no_collections_yet": "Encara no hi ha coŀleccions.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index ccb9375d7f..637534fa1e 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Cyflwyniad", "account_edit.bio_modal.add_title": "Ychwanegu cyflwyniad", "account_edit.bio_modal.edit_title": "Golygu'r cyflwyniad", - "account_edit.button.add": "Ychwanegu {item}", - "account_edit.button.delete": "Dileu {item}", - "account_edit.button.edit": "Golygu {item}", "account_edit.column_button": "Gorffen", "account_edit.column_title": "Golygu Proffil", - "account_edit.custom_fields.name": "maes", "account_edit.custom_fields.placeholder": "Ychwanegwch eich rhagenwau, dolenni allanol, neu unrhyw beth arall hoffech ei rannu.", "account_edit.custom_fields.reorder_button": "Ail-drefnu meysydd", "account_edit.custom_fields.tip_content": "Gallwch chi ychwanegu hygrededd at eich cyfrif Mastodon yn hawdd trwy wirio dolenni i unrhyw wefannau rydych chi'n berchen arnyn nhw.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Sut ydw i'n ychwanegu dolen wedi'i gwirio?", "account_edit.display_name.placeholder": "Eich enw dangos yw sut mae'ch enw'n ymddangos ar eich proffil ac mewn llinellau amser.", "account_edit.display_name.title": "Enw dangos", - "account_edit.featured_hashtags.item": "hashnodau", "account_edit.featured_hashtags.placeholder": "Helpwch eraill i adnabod, a chael mynediad cyflym at eich hoff bynciau.", "account_edit.featured_hashtags.title": "Hashnodau dan sylw", "account_edit.field_delete_modal.confirm": "Ydych chi'n siŵr eich bod chi eisiau dileu'r maes cyfaddas hwn? Does dim modd dadwneud y weithred hon.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Dileu maes cyfaddas?", "account_edit.field_edit_modal.add_title": "Ychwanegu maes cyfaddas", "account_edit.field_edit_modal.edit_title": "Golygu maes cyfaddas", - "account_edit.field_edit_modal.limit_header": "Wedi mynd dros y terfyn nodau sy'n cael eu hargymell", - "account_edit.field_edit_modal.limit_message": "Efallai na fydd defnyddwyr symudol yn gweld eich maes yn llawn.", "account_edit.field_edit_modal.link_emoji_warning": "Rydym yn argymell yn erbyn defnyddio emoji personol ar y cyd ag URLau. Bydd meysydd personol sy'n cynnwys y ddau yn cael eu harddangos fel testun yn unig yn hytrach nag fel dolen, er mwyn atal dryswch ymhlith defnyddwyr.", "account_edit.field_edit_modal.name_hint": "e.e. “Gwefan bersonol”", "account_edit.field_edit_modal.url_warning": "I ychwanegu dolen, cofiwch gynnwys {protocol} ar y dechrau.", @@ -218,8 +211,6 @@ "account_edit.upload_modal.step_upload.dragging": "Gollwng i lwytho i fyny", "account_edit.upload_modal.step_upload.header": "Dewiswch ddelwedd", "account_edit.upload_modal.step_upload.hint": "Fformat WEBP, PNG, GIF neu JPG, hyd at {limit}MB.{br}Bydd y ddelwedd yn cael ei haddasu i {width}x{height}px.", - "account_edit.upload_modal.title_add": "Ychwanegu llun proffil", - "account_edit.upload_modal.title_replace": "Amnewid llun proffil", "account_edit.verified_modal.details": "Ychwanegwch hygrededd at eich proffil Mastodon trwy wirio dolenni i wefannau personol. Dyma sut mae'n gweithio:", "account_edit.verified_modal.invisible_link.details": "Ychwanegwch y ddolen at eich pennyn. Y rhan bwysig yw rel=\"me\" sy'n atal dynwared ar wefannau gyda chynnwys sy'n cael ei gynhyrchu gan ddefnyddwyr. Gallwch hyd yn oed ddefnyddio tag dolen ym mhennyn y dudalen yn lle {tag}, ond rhaid bod yr HTML yn hygyrch ac heb weithredu JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Sut ydw i'n gwneud y ddolen yn anweledig?", @@ -228,7 +219,6 @@ "account_edit.verified_modal.step2.header": "Ychwanegwch eich gwefan fel maes cyfaddas", "account_edit.verified_modal.title": "Sut i ychwanegu dolen wedi'i gwirio", "account_edit_tags.add_tag": "Ychwanegu #{tagName}", - "account_edit_tags.column_title": "Golygu hashnodau dan sylw", "account_edit_tags.help_text": "Mae hashnodau dan sylw yn helpu defnyddwyr i ddarganfod a rhyngweithio â'ch proffil. Maen nhw'n ymddangos fel hidlwyr ar olwg Gweithgaredd eich tudalen Proffil.", "account_edit_tags.search_placeholder": "Rhowch hashnod…", "account_edit_tags.suggestions": "Awgrymiadau:", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 8eb992fd4e..512f9cbdf9 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -141,34 +141,39 @@ "account.unmute": "Vis @{name} igen", "account.unmute_notifications_short": "Vis notifikationer igen", "account.unmute_short": "Vis igen", + "account_edit.bio.edit_label": "Rediger bio", + "account_edit.bio.label": "bio", "account_edit.bio.placeholder": "Tilføj en kort introduktion, så andre kan få et indtryk af, hvem du er.", "account_edit.bio.title": "Bio", "account_edit.bio_modal.add_title": "Tilføj bio", "account_edit.bio_modal.edit_title": "Rediger bio", - "account_edit.button.add": "Tilføj {item}", - "account_edit.button.delete": "Slet {item}", - "account_edit.button.edit": "Rediger {item}", "account_edit.column_button": "Færdig", "account_edit.column_title": "Rediger profil", - "account_edit.custom_fields.name": "felt", + "account_edit.custom_fields.add_label": "Tilføj felt", + "account_edit.custom_fields.edit_label": "Rediger felt", "account_edit.custom_fields.placeholder": "Tilføj dine pronominer, eksterne links eller andet, du gerne vil dele.", "account_edit.custom_fields.reorder_button": "Omsorter felter", "account_edit.custom_fields.tip_content": "Du kan nemt øge troværdigheden af din Mastodon-konto ved at verificere links til alle websteder, du ejer.", "account_edit.custom_fields.tip_title": "Tip: Tilføjelse af bekræftede links", "account_edit.custom_fields.title": "Brugerdefinerede felter", "account_edit.custom_fields.verified_hint": "Hvordan tilføjer jeg et bekræftet link?", + "account_edit.display_name.add_label": "Tilføj visningsnavn", + "account_edit.display_name.edit_label": "Rediger visningsnavn", "account_edit.display_name.placeholder": "Dit visningsnavn er det navn, der vises på din profil og i tidslinjer.", "account_edit.display_name.title": "Visningsnavn", - "account_edit.featured_hashtags.item": "hashtags", + "account_edit.featured_hashtags.edit_label": "Tilføj hashtags", "account_edit.featured_hashtags.placeholder": "Hjælp andre med at identificere og få hurtig adgang til dine yndlingsemner.", "account_edit.featured_hashtags.title": "Fremhævede hashtags", + "account_edit.field_actions.delete": "Slet felt", + "account_edit.field_actions.edit": "Rediger felt", "account_edit.field_delete_modal.confirm": "Er du sikker på, at du vil slette dette brugerdefinerede felt? Denne handling kan ikke fortrydes.", "account_edit.field_delete_modal.delete_button": "Slet", "account_edit.field_delete_modal.title": "Slet brugerdefineret felt?", "account_edit.field_edit_modal.add_title": "Tilføj brugerdefineret felt", + "account_edit.field_edit_modal.discard_confirm": "Kassér", + "account_edit.field_edit_modal.discard_message": "Du har ændringer, der ikke er gemt. Er du sikker på, at du vil kassere dem?", "account_edit.field_edit_modal.edit_title": "Rediger brugerdefineret felt", - "account_edit.field_edit_modal.limit_header": "Anbefalet tegngrænse overskredet", - "account_edit.field_edit_modal.limit_message": "Mobilbrugere kan muligvis ikke se hele dit felt.", + "account_edit.field_edit_modal.limit_warning": "Anbefalet tegngrænse overskredet. Mobilbrugere kan muligvis ikke se hele dit felt.", "account_edit.field_edit_modal.link_emoji_warning": "Vi fraråder brug af brugerdefinerede emoji i kombination med url'er. Brugerdefinerede felter, der indeholder begge dele, vises kun som tekst i stedet for som et link for at undgå forvirring hos brugerne.", "account_edit.field_edit_modal.name_hint": "F.eks. “Personligt websted”", "account_edit.field_edit_modal.name_label": "Etiket", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Rediger alt-tekst", "account_edit.image_edit.remove_button": "Fjern billede", "account_edit.image_edit.replace_button": "Erstat billede", + "account_edit.item_list.delete": "Slet {name}", + "account_edit.item_list.edit": "Rediger {name}", "account_edit.name_modal.add_title": "Tilføj visningsnavn", "account_edit.name_modal.edit_title": "Rediger visningsnavn", "account_edit.profile_tab.button_label": "Tilpas", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Slip for at uploade", "account_edit.upload_modal.step_upload.header": "Vælg et billede", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF eller JPG-format, op til {limit} MB.{br}Billede vil blive skaleret til {width}x{height} px.", - "account_edit.upload_modal.title_add": "Tilføj profilfoto", - "account_edit.upload_modal.title_replace": "Erstat profilfoto", + "account_edit.upload_modal.title_add.avatar": "Tilføj profilfoto", + "account_edit.upload_modal.title_add.header": "Tilføj coverfoto", + "account_edit.upload_modal.title_replace.avatar": "Erstat profilfoto", + "account_edit.upload_modal.title_replace.header": "Erstat coverfoto", "account_edit.verified_modal.details": "Øg troværdigheden af din Mastodon-profil ved at verificere links til personlige websteder. Sådan fungerer det:", "account_edit.verified_modal.invisible_link.details": "Føj linket til din header. Det vigtige er rel=\"me\", som forhindrer imitatorer på websteder med brugergenereret indhold. Du kan endda bruge et link-tag i sidens header i stedet for {tag}, men HTML-koden skal være tilgængelig uden at afvikle JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Hvordan gør jeg linket usynligt?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Tilføj dit websted som et brugerdefineret felt", "account_edit.verified_modal.title": "Sådan tilføjes et bekræftet link", "account_edit_tags.add_tag": "Tilføj #{tagName}", - "account_edit_tags.column_title": "Rediger fremhævede hashtags", + "account_edit_tags.column_title": "Rediger etiket", "account_edit_tags.help_text": "Fremhævede hashtags hjælper brugere med at finde og interagere med din profil. De vises som filtre i aktivitetsvisningen på din profilside.", + "account_edit_tags.max_tags_reached": "Du har nået det maksimale antal fremhævede hashtags.", "account_edit_tags.search_placeholder": "Angiv et hashtag…", "account_edit_tags.suggestions": "Forslag:", "account_edit_tags.tag_status_count": "{count, plural, one {# indlæg} other {# indlæg}}", + "account_list.total": "{total, plural, one {# konto} other {# konti}}", "account_note.placeholder": "Klik for at tilføje notat", "admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding", "admin.dashboard.monthly_retention": "Brugerfastholdelsesrate pr. måned efter tilmelding", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Profiler, du kan følge", "followed_tags": "Hashtags, som følges", "followers.hide_other_followers": "Denne bruger har valgt ikke at gøre sine øvrige følgere synlige", + "followers.title": "Følger {name}", "following.hide_other_following": "Denne bruger har valgt at skjule resten af sine fulgte konti", + "following.title": "Følges af {name}", "footer.about": "Om", "footer.about_mastodon": "Om Mastodon", "footer.about_server": "Om {domain}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index a0f9b9f06b..0346c0b017 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -141,34 +141,39 @@ "account.unmute": "Stummschaltung von @{name} aufheben", "account.unmute_notifications_short": "Stummschaltung der Benachrichtigungen aufheben", "account.unmute_short": "Stummschaltung aufheben", + "account_edit.bio.edit_label": "Biografie bearbeiten", + "account_edit.bio.label": "Biografie", "account_edit.bio.placeholder": "Gib anderen einen Einblick über dich, damit sie wissen, wer du bist.", "account_edit.bio.title": "Über mich", "account_edit.bio_modal.add_title": "Biografie hinzufügen", "account_edit.bio_modal.edit_title": "Biografie bearbeiten", - "account_edit.button.add": "{item} hinzufügen", - "account_edit.button.delete": "{item} löschen", - "account_edit.button.edit": "{item} bearbeiten", "account_edit.column_button": "Erledigt", "account_edit.column_title": "Profil bearbeiten", - "account_edit.custom_fields.name": "Feld", + "account_edit.custom_fields.add_label": "Zusatzfeld hinzufügen", + "account_edit.custom_fields.edit_label": "Zusatzfeld bearbeiten", "account_edit.custom_fields.placeholder": "Ergänze deine Pronomen, weiterführenden Links oder etwas anderes, das du teilen möchtest.", "account_edit.custom_fields.reorder_button": "Felder neu anordnen", "account_edit.custom_fields.tip_content": "Du kannst deine Echtheit im Mastodon-Profil beweisen, wenn du verifizierte Links zu deinen Websites bereitstellst.", "account_edit.custom_fields.tip_title": "Tipp: Ergänze verifizierte Links", "account_edit.custom_fields.title": "Zusatzfelder", "account_edit.custom_fields.verified_hint": "Wie erstelle ich einen verifizierten Link?", + "account_edit.display_name.add_label": "Anzeigenamen hinzufügen", + "account_edit.display_name.edit_label": "Anzeigenamen bearbeiten", "account_edit.display_name.placeholder": "Dein Anzeigename wird auf deinem Profil und in Timelines angezeigt.", "account_edit.display_name.title": "Anzeigename", - "account_edit.featured_hashtags.item": "Hashtags", + "account_edit.featured_hashtags.edit_label": "Hashtags hinzufügen", "account_edit.featured_hashtags.placeholder": "Präsentiere deine Lieblingsthemen und ermögliche anderen einen schnellen Zugriff darauf.", "account_edit.featured_hashtags.title": "Vorgestellte Hashtags", + "account_edit.field_actions.delete": "Zusatzfeld löschen", + "account_edit.field_actions.edit": "Zusatzfeld bearbeiten", "account_edit.field_delete_modal.confirm": "Möchtest du dieses Zusatzfeld wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", "account_edit.field_delete_modal.delete_button": "Löschen", "account_edit.field_delete_modal.title": "Zusatzfeld löschen?", "account_edit.field_edit_modal.add_title": "Zusatzfeld hinzufügen", + "account_edit.field_edit_modal.discard_confirm": "Verwerfen", + "account_edit.field_edit_modal.discard_message": "Du hast Änderungen vorgenommen, die noch nicht gespeichert sind. Trotzdem verwerfen?", "account_edit.field_edit_modal.edit_title": "Zusatzfeld bearbeiten", - "account_edit.field_edit_modal.limit_header": "Empfohlenes Zeichenlimit überschritten", - "account_edit.field_edit_modal.limit_message": "Auf mobilen Endgeräten wird das Feld möglicherweise nicht vollständig angezeigt.", + "account_edit.field_edit_modal.limit_warning": "Empfohlenes Zeichenlimit überschritten. Auf mobilen Endgeräten wird der Inhalt möglicherweise nicht vollständig angezeigt.", "account_edit.field_edit_modal.link_emoji_warning": "Das Verwenden von Emojis wird bei URLs nicht empfohlen. Die Zusatzfelder werden bei dieser Kombination nur als Text und nicht als Link dargestellt.", "account_edit.field_edit_modal.name_hint": "z. B. „Meine Website“", "account_edit.field_edit_modal.name_label": "Beschriftung", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Bildbeschreibung bearbeiten", "account_edit.image_edit.remove_button": "Bild entfernen", "account_edit.image_edit.replace_button": "Bild ersetzen", + "account_edit.item_list.delete": "{name} löschen", + "account_edit.item_list.edit": "{name} bearbeiten", "account_edit.name_modal.add_title": "Anzeigenamen hinzufügen", "account_edit.name_modal.edit_title": "Anzeigenamen bearbeiten", "account_edit.profile_tab.button_label": "Anpassen", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Zum Hochladen hier ablegen", "account_edit.upload_modal.step_upload.header": "Wähle ein Bild", "account_edit.upload_modal.step_upload.hint": "WebP, PNG, GIF oder JPG. Höchstens {limit} MB groß.{br}Das Bild wird auf {width}x{height} px skaliert.", - "account_edit.upload_modal.title_add": "Profilbild hinzufügen", - "account_edit.upload_modal.title_replace": "Profilbild ändern", + "account_edit.upload_modal.title_add.avatar": "Profilbild hinzufügen", + "account_edit.upload_modal.title_add.header": "Titelbild hinzufügen", + "account_edit.upload_modal.title_replace.avatar": "Profilbild ersetzen", + "account_edit.upload_modal.title_replace.header": "Titelbild ersetzen", "account_edit.verified_modal.details": "Beweise die Echtheit deines Mastodon-Profils, indem du verifizierte Links zu deinen persönlichen Websites ergänzt. So funktioniert’s:", "account_edit.verified_modal.invisible_link.details": "Füge den Link in den Header ein. Der wichtige Teil ist rel=\"me\". Du kannst auch den Tag link im Header (statt {tag}) verwenden, jedoch muss die Internetseite ohne JavaScript abrufbar sein.", "account_edit.verified_modal.invisible_link.summary": "Wie blende ich den Link aus?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Ergänze deine Website in ein Zusatzfeld", "account_edit.verified_modal.title": "So erstellst du einen verifizierten Link", "account_edit_tags.add_tag": "#{tagName} hinzufügen", - "account_edit_tags.column_title": "Vorgestellte Hashtags bearbeiten", + "account_edit_tags.column_title": "Hashtags bearbeiten", "account_edit_tags.help_text": "Vorgestellte Hashtags können dabei helfen, dein Profil zu entdecken und besser mit dir zu interagieren. Sie dienen als Filter in der Aktivitätenübersicht deines Profils.", + "account_edit_tags.max_tags_reached": "Du hast die maximale Anzahl an vorgestellten Hashtags erreicht.", "account_edit_tags.search_placeholder": "Gib einen Hashtag ein …", "account_edit_tags.suggestions": "Vorschläge:", "account_edit_tags.tag_status_count": "{count, plural, one {# Beitrag} other {# Beiträge}}", + "account_list.total": "{total, plural, one {# Konto} other {# Konten}}", "account_note.placeholder": "Klicken, um private Anmerkung hinzuzufügen", "admin.dashboard.daily_retention": "Verweildauer der Nutzer*innen pro Tag seit der Registrierung", "admin.dashboard.monthly_retention": "Verweildauer der Nutzer*innen pro Monat seit der Registrierung", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Wem folgen?", "followed_tags": "Abonnierte Hashtags", "followers.hide_other_followers": "Dieses Profil möchte die weiteren Follower geheim halten", + "followers.title": "Folgt {name}", "following.hide_other_following": "Dieses Profil möchte die gefolgten Profile geheim halten", + "following.title": "Gefolgt von {name}", "footer.about": "Über", "footer.about_mastodon": "Über Mastodon", "footer.about_server": "Über {domain}", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 16b51552fd..a4e9077801 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -141,34 +141,39 @@ "account.unmute": "Άρση σίγασης @{name}", "account.unmute_notifications_short": "Σίγαση ειδοποιήσεων", "account.unmute_short": "Κατάργηση σίγασης", + "account_edit.bio.edit_label": "Επεξεργασία βιογραφικού", + "account_edit.bio.label": "βιογραφικό", "account_edit.bio.placeholder": "Προσθέστε μια σύντομη εισαγωγή για να βοηθήσετε άλλους να σας αναγνωρίσουν.", "account_edit.bio.title": "Βιογραφικό", "account_edit.bio_modal.add_title": "Προσθήκη βιογραφικού", "account_edit.bio_modal.edit_title": "Επεξεργασία βιογραφικού", - "account_edit.button.add": "Προσθήκη {item}", - "account_edit.button.delete": "Διαγραφή {item}", - "account_edit.button.edit": "Επεξεργασία {item}", "account_edit.column_button": "Έγινε", "account_edit.column_title": "Επεξεργασία Προφίλ", - "account_edit.custom_fields.name": "πεδίο", + "account_edit.custom_fields.add_label": "Προσθήκη πεδίου", + "account_edit.custom_fields.edit_label": "Επεξεργασία πεδίου", "account_edit.custom_fields.placeholder": "Προσθέστε τις αντωνυμίες σας, εξωτερικούς συνδέσμους ή οτιδήποτε άλλο θέλετε να μοιραστείτε.", "account_edit.custom_fields.reorder_button": "Αναδιάταξη πεδίων", "account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους σε οποιεσδήποτε ιστοσελίδες κατέχεις.", "account_edit.custom_fields.tip_title": "Συμβουλή: Προσθήκη επαληθευμένων συνδέσμων", "account_edit.custom_fields.title": "Προσαρμοσμένα πεδία", "account_edit.custom_fields.verified_hint": "Πώς προσθέτω έναν επαληθευμένο σύνδεσμο;", + "account_edit.display_name.add_label": "Προσθήκη εμφανιζόμενου ονόματος", + "account_edit.display_name.edit_label": "Επεξεργασία εμφανιζόμενου ονόματος", "account_edit.display_name.placeholder": "Το εμφανιζόμενο όνομα σας είναι πως εμφανίζεται το όνομά σας στο προφίλ σας και στα χρονοδιαγράμματα.", "account_edit.display_name.title": "Εμφανιζόμενο όνομα", - "account_edit.featured_hashtags.item": "ετικέτες", + "account_edit.featured_hashtags.edit_label": "Προσθήκη ετικετών", "account_edit.featured_hashtags.placeholder": "Βοηθήστε τους άλλους να εντοπίσουν και να έχουν γρήγορη πρόσβαση στα αγαπημένα σας θέματα.", "account_edit.featured_hashtags.title": "Αναδεδειγμένες ετικέτες", + "account_edit.field_actions.delete": "Διαγραφή πεδίου", + "account_edit.field_actions.edit": "Επεξεργασία πεδίου", "account_edit.field_delete_modal.confirm": "Σίγουρα θέλετε να διαγράψετε αυτό το προσαρμοσμένο πεδίο; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", "account_edit.field_delete_modal.delete_button": "Διαγραφή", "account_edit.field_delete_modal.title": "Διαγραφή προσαρμοσμένου πεδίου;", "account_edit.field_edit_modal.add_title": "Προσθήκη προσαρμοσμένου πεδίου", + "account_edit.field_edit_modal.discard_confirm": "Απόρριψη", + "account_edit.field_edit_modal.discard_message": "Έχετε μη αποθηκευμένες αλλαγές. Σίγουρα θέλετε να τις απορρίψετε;", "account_edit.field_edit_modal.edit_title": "Επεξεργασία προσαρμοσμένου πεδίου", - "account_edit.field_edit_modal.limit_header": "Ξεπεράστηκε το συνιστώμενο όριο χαρακτήρων", - "account_edit.field_edit_modal.limit_message": "Οι χρήστες κινητών ενδέχεται να μην βλέπουν πλήρως το πεδίο σας.", + "account_edit.field_edit_modal.limit_warning": "Υπέρβαση του συνιστώμενου ορίου χαρακτήρων. Οι χρήστες κινητών ενδέχεται να μην βλέπουν το πεδίο σας πλήρες.", "account_edit.field_edit_modal.link_emoji_warning": "Δεν συνιστούμε τη χρήση προσαρμοσμένων emoji σε συνδυασμό με URL. Τα προσαρμοσμένα πεδία που περιέχουν και τα δύο θα εμφανίζονται ως κείμενο μόνο αντί ως σύνδεσμος, προκειμένου να αποφευχθεί η σύγχυση του χρήστη.", "account_edit.field_edit_modal.name_hint": "Π.χ. “Προσωπική ιστοσελίδα”", "account_edit.field_edit_modal.name_label": "Ετικέτα", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Επεξεργασία εναλλακτικού κειμένου", "account_edit.image_edit.remove_button": "Αφαίρεση εικόνας", "account_edit.image_edit.replace_button": "Αντικατάσταση εικόνας", + "account_edit.item_list.delete": "Διαγραφή {name}", + "account_edit.item_list.edit": "Επεξεργασία {name}", "account_edit.name_modal.add_title": "Προσθήκη εμφανιζόμενου ονόματος", "account_edit.name_modal.edit_title": "Επεξεργασία εμφανιζόμενου ονόματος", "account_edit.profile_tab.button_label": "Προσαρμογή", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Αποθέστε εδώ για ανέβασμα", "account_edit.upload_modal.step_upload.header": "Επιλέξτε μια εικόνα", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF ή JPG μορφή, μέχρι {limit}MB.{br}Η ανάλυση της εικόνας θα προσαρμοστεί στα {width}x{height}px.", - "account_edit.upload_modal.title_add": "Προσθήκη εικόνας προφίλ", - "account_edit.upload_modal.title_replace": "Αντικατάσταση εικόνας προφίλ", + "account_edit.upload_modal.title_add.avatar": "Προσθήκη εικόνας προφίλ", + "account_edit.upload_modal.title_add.header": "Προσθήκη εικόνας εξωφύλλου", + "account_edit.upload_modal.title_replace.avatar": "Αντικατάσταση εικόνας προφίλ", + "account_edit.upload_modal.title_replace.header": "Αντικατάσταση εικόνας εξωφύλλου", "account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:", "account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Πρόσθεσε την ιστοσελίδα σου ως προσαρμοσμένο πεδίο", "account_edit.verified_modal.title": "Πώς να προσθέσεις έναν επαληθευμένο σύνδεσμο", "account_edit_tags.add_tag": "Προσθήκη #{tagName}", - "account_edit_tags.column_title": "Επεξεργασία αναδεδειγμένων ετικετών", + "account_edit_tags.column_title": "Επεξεργασία Ετικετών", "account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην προβολή Δραστηριότητας της σελίδας προφίλ σας.", + "account_edit_tags.max_tags_reached": "Έχετε φτάσει τον μέγιστο αριθμό των προτεινόμενων ετικετών.", "account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…", "account_edit_tags.suggestions": "Προτάσεις:", "account_edit_tags.tag_status_count": "{count, plural, one {# ανάρτηση} other {# αναρτήσεις}}", + "account_list.total": "{total, plural, one {# λογαριασμός} other {# λογαριασμοί}}", "account_note.placeholder": "Κάνε κλικ για να προσθέσεις σημείωση", "admin.dashboard.daily_retention": "Ποσοστό χρηστών που παραμένουν μετά την εγγραφή, ανά ημέρα", "admin.dashboard.monthly_retention": "Ποσοστό χρηστών που παραμένουν μετά την εγγραφή, ανά μήνα", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις", "followed_tags": "Ακολουθούμενες ετικέτες", "followers.hide_other_followers": "Αυτός ο χρήστης έχει επιλέξει να μην κάνει τους άλλους ακολούθους του ορατούς", + "followers.title": "Ακολουθούν {name}", "following.hide_other_following": "Αυτός ο χρήστης έχει επιλέξει να μην κάνει τους υπόλοιπους που ακολουθεί ορατούς", + "following.title": "Ακολουθούνται από {name}", "footer.about": "Σχετικά με", "footer.about_mastodon": "Σχετικά με το Mastodon", "footer.about_server": "Σχετικά με το {domain}", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 59bed6624b..8946539592 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Bio", "account_edit.bio_modal.add_title": "Add bio", "account_edit.bio_modal.edit_title": "Edit bio", - "account_edit.button.add": "Add {item}", - "account_edit.button.delete": "Delete {item}", - "account_edit.button.edit": "Edit {item}", "account_edit.column_button": "Done", "account_edit.column_title": "Edit Profile", - "account_edit.custom_fields.name": "field", "account_edit.custom_fields.placeholder": "Add your pronouns, external links, or anything else you’d like to share.", "account_edit.custom_fields.reorder_button": "Reorder fields", "account_edit.custom_fields.tip_content": "You can easily add credibility to your Mastodon account by verifying links to any websites you own.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "How do I add a verified link?", "account_edit.display_name.placeholder": "Your display name is how your name appears on your profile and in timelines.", "account_edit.display_name.title": "Display name", - "account_edit.featured_hashtags.item": "hashtags", "account_edit.featured_hashtags.placeholder": "Help others identify, and have quick access to, your favourite topics.", "account_edit.featured_hashtags.title": "Featured hashtags", "account_edit.field_delete_modal.confirm": "Are you sure you want to delete this custom field? This action can’t be undone.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Delete custom field?", "account_edit.field_edit_modal.add_title": "Add custom field", "account_edit.field_edit_modal.edit_title": "Edit custom field", - "account_edit.field_edit_modal.limit_header": "Recommended character limit exceeded", - "account_edit.field_edit_modal.limit_message": "Mobile users might not see your field in full.", "account_edit.field_edit_modal.link_emoji_warning": "We recommend against the use of custom emoji in combination with URLs. Custom fields containing both will display as text only instead of as a link, in order to prevent user confusion.", "account_edit.field_edit_modal.name_hint": "Eg “Personal website”", "account_edit.field_edit_modal.name_label": "Label", @@ -210,7 +203,6 @@ "account_edit.verified_modal.step2.header": "Add your website as a custom field", "account_edit.verified_modal.title": "How to add a verified link", "account_edit_tags.add_tag": "Add #{tagName}", - "account_edit_tags.column_title": "Edit Tags", "account_edit_tags.help_text": "Featured hashtags help users discover and interact with your profile. They appear as filters on your Profile page’s Activity view.", "account_edit_tags.search_placeholder": "Enter a hashtag…", "account_edit_tags.suggestions": "Suggestions:", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 67de7b360b..81d280f382 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -91,7 +91,6 @@ "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications_short": "Malsilentigu sciigojn", "account.unmute_short": "Ne plu silentigi", - "account_edit.featured_hashtags.item": "kradvortoj", "account_edit.featured_hashtags.title": "Elstarigitaj kradvortoj", "account_edit.save": "Konservi", "account_edit_tags.add_tag": "Aldoni #{tagName}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 67106dc618..7372b4baea 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -141,34 +141,39 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications_short": "Dejar de silenciar notificaciones", "account.unmute_short": "Dejar de silenciar", + "account_edit.bio.edit_label": "Editar biografía", + "account_edit.bio.label": "biografía", "account_edit.bio.placeholder": "Agregá una breve introducción para ayudar a otras personas a identificarte.", "account_edit.bio.title": "Biografía", "account_edit.bio_modal.add_title": "Agregar biografía", "account_edit.bio_modal.edit_title": "Editar biografía", - "account_edit.button.add": "Agregar {item}", - "account_edit.button.delete": "Eliminar {item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Listo", "account_edit.column_title": "Editar perfil", - "account_edit.custom_fields.name": "campo", + "account_edit.custom_fields.add_label": "Agregar campo", + "account_edit.custom_fields.edit_label": "Editar campo", "account_edit.custom_fields.placeholder": "Agregá tus pronombres personales, enlaces externos o cualquier otra cosa que quisieras compartir.", "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Podés agregar fácilmente credibilidad a tu cuenta de Mastodon verificando enlaces a cualquier sitio web que tengas.", "account_edit.custom_fields.tip_title": "Consejo: Agregá enlaces verificados", "account_edit.custom_fields.title": "Campos personalizados", "account_edit.custom_fields.verified_hint": "¿Cómo agrego un enlace verificado?", + "account_edit.display_name.add_label": "Agregar nombre a mostrar", + "account_edit.display_name.edit_label": "Editar nombre a mostrar", "account_edit.display_name.placeholder": "Tu nombre a mostrar es cómo aparecerá tu nombre en tu perfil y en las líneas temporales.", "account_edit.display_name.title": "Nombre a mostrar", - "account_edit.featured_hashtags.item": "etiquetas", + "account_edit.featured_hashtags.edit_label": "Agregar etiquetas", "account_edit.featured_hashtags.placeholder": "Ayudá a otras personas a identificarte y a tener un rápido acceso a tus temas favoritos.", "account_edit.featured_hashtags.title": "Etiquetas destacadas", + "account_edit.field_actions.delete": "Eliminar campo", + "account_edit.field_actions.edit": "Editar campo", "account_edit.field_delete_modal.confirm": "¿De verdad querés eliminar este campo personalizado? Esta acción no se puede deshacer.", "account_edit.field_delete_modal.delete_button": "Eliminar", "account_edit.field_delete_modal.title": "¿Eliminar campo personalizado?", "account_edit.field_edit_modal.add_title": "Agregar campo personalizado", + "account_edit.field_edit_modal.discard_confirm": "Descartar", + "account_edit.field_edit_modal.discard_message": "Tenés cambios sin guardar. ¿De verdad querés descartarlos?", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", - "account_edit.field_edit_modal.limit_header": "Se excedió el límite de caracteres recomendado", - "account_edit.field_edit_modal.limit_message": "Es posible que los usuarios en dispositivos móviles no vean tu campo completamente.", + "account_edit.field_edit_modal.limit_warning": "Se excedió el límite recomendado de caracteres. Es posible que los usuarios en dispositivos móviles no vean tu campo completo.", "account_edit.field_edit_modal.link_emoji_warning": "No recomendamos el uso de emojis personalizados en combinación con direcciones web. Los campos personalizados que contengan ambos solo se mostrarán como texto en lugar de como enlace, con el fin de evitar la confusión del usuario.", "account_edit.field_edit_modal.name_hint": "Por ejemplo: «Sitio web personal»", "account_edit.field_edit_modal.name_label": "Etiqueta", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Editar texto alternativo", "account_edit.image_edit.remove_button": "Quitar imagen", "account_edit.image_edit.replace_button": "Reemplazar imagen", + "account_edit.item_list.delete": "Eliminar {name}", + "account_edit.item_list.edit": "Editar {name}", "account_edit.name_modal.add_title": "Agregar nombre a mostrar", "account_edit.name_modal.edit_title": "Editar nombre a mostrar", "account_edit.profile_tab.button_label": "Personalizar", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Arrastrá para subir", "account_edit.upload_modal.step_upload.header": "Elegí una imagen", "account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, hasta {limit} MB.{br}La imagen será escalada a {width}x{height} píxeles.", - "account_edit.upload_modal.title_add": "Agregar imagen de perfil", - "account_edit.upload_modal.title_replace": "Reemplazar imagen de perfil", + "account_edit.upload_modal.title_add.avatar": "Agregar imagen de perfil", + "account_edit.upload_modal.title_add.header": "Agregar imagen de cubierta", + "account_edit.upload_modal.title_replace.avatar": "Reemplazar imagen de perfil", + "account_edit.upload_modal.title_replace.header": "Reemplazar imagen de cubierta", "account_edit.verified_modal.details": "Agregá credibilidad a tu perfil de Mastodon verificando enlaces a sitios web personales. Así es cómo funciona:", "account_edit.verified_modal.invisible_link.details": "Agregá el enlace a tu encabezado. La parte importante es rel=\"yo\" que evita la suplantación en sitios web con contenido generado por el usuario. Incluso podés usar una etiqueta de enlace en el encabezado de la página en lugar de {tag}, pero el código HTML debe ser accesible sin ejecutar JavaScript.", "account_edit.verified_modal.invisible_link.summary": "¿Cómo hago el enlace invisible?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Agregá tu sitio web como un campo personalizado", "account_edit.verified_modal.title": "¿Cómo agregar un enlace verificado?", "account_edit_tags.add_tag": "Agregar #{tagName}", - "account_edit_tags.column_title": "Editar etiquetas destacadas", + "account_edit_tags.column_title": "Editar etiquetas", "account_edit_tags.help_text": "Las etiquetas destacadas ayudan a los usuarios a descubrir e interactuar con tu perfil. Las etiquetas destacadas aparecen como filtros en la vista de actividad de la página de tu perfil.", + "account_edit_tags.max_tags_reached": "Alcanzaste el número máximo de etiquetas destacadas.", "account_edit_tags.search_placeholder": "Ingresá una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", "account_edit_tags.tag_status_count": "{count, plural, one {voto} other {votos}}", + "account_list.total": "{total, plural, one {# hora} other {# horas}}", "account_note.placeholder": "Hacé clic par agregar una nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día, después del registro", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes, después del registro", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "A quién seguir", "followed_tags": "Etiquetas seguidas", "followers.hide_other_followers": "Este usuario eligió no hacer visibles a sus otros seguidores", + "followers.title": "Seguiendo a {name}", "following.hide_other_following": "Este usuario eligió no hacer visibles al resto de quienes lo siguen", + "following.title": "Seguido por {name}", "footer.about": "Información", "footer.about_mastodon": "Acerca de Mastodon", "footer.about_server": "Acerca de {domain}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 6057084391..9dd92e8585 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -141,34 +141,39 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications_short": "Dejar de silenciar notificaciones", "account.unmute_short": "Dejar de silenciar", + "account_edit.bio.edit_label": "Editar biografía", + "account_edit.bio.label": "biografía", "account_edit.bio.placeholder": "Añade una breve introducción para ayudar a los demás a identificarte.", "account_edit.bio.title": "Biografía", "account_edit.bio_modal.add_title": "Añadir biografía", "account_edit.bio_modal.edit_title": "Editar biografía", - "account_edit.button.add": "Añadir {item}", - "account_edit.button.delete": "Eliminar {item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Hecho", "account_edit.column_title": "Editar perfil", - "account_edit.custom_fields.name": "campo", + "account_edit.custom_fields.add_label": "Añadir campo", + "account_edit.custom_fields.edit_label": "Editar campo", "account_edit.custom_fields.placeholder": "Añade tus pronombres, enlaces externos o cualquier otra información que quieras compartir.", "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Puedes añadir fácilmente credibilidad a tu cuenta de Mastodon verificando los enlaces a cualquier sitio web que poseas.", "account_edit.custom_fields.tip_title": "Consejo: Añadir enlaces verificados", "account_edit.custom_fields.title": "Campos personalizados", "account_edit.custom_fields.verified_hint": "¿Cómo agrego un enlace verificado?", + "account_edit.display_name.add_label": "Añadir nombre para mostrar", + "account_edit.display_name.edit_label": "Editar nombre para mostrar", "account_edit.display_name.placeholder": "Tu nombre de usuario es el nombre que aparece en tu perfil y en las líneas de tiempo.", "account_edit.display_name.title": "Nombre para mostrar", - "account_edit.featured_hashtags.item": "etiquetas", + "account_edit.featured_hashtags.edit_label": "Añadir etiquetas", "account_edit.featured_hashtags.placeholder": "Ayuda a otros a identificar tus temas favoritos y a acceder rápidamente a ellos.", "account_edit.featured_hashtags.title": "Etiquetas destacadas", + "account_edit.field_actions.delete": "Eliminar campo", + "account_edit.field_actions.edit": "Editar campo", "account_edit.field_delete_modal.confirm": "¿Estás seguro de que deseas eliminar este campo personalizado? Esta acción no se puede deshacer.", "account_edit.field_delete_modal.delete_button": "Eliminar", "account_edit.field_delete_modal.title": "¿Eliminar campo personalizado?", "account_edit.field_edit_modal.add_title": "Agregar campo personalizado", + "account_edit.field_edit_modal.discard_confirm": "Descartar", + "account_edit.field_edit_modal.discard_message": "Tienes cambios sin guardar. ¿Estás seguro/a de que quieres descartarlos?", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", - "account_edit.field_edit_modal.limit_header": "Se ha superado el límite de caracteres recomendado", - "account_edit.field_edit_modal.limit_message": "Es posible que los usuarios de dispositivos móviles no vean tu campo completo.", + "account_edit.field_edit_modal.limit_warning": "Se ha superado el límite de caracteres recomendado. Es posible que los usuarios de dispositivos móviles no vean el campo completo.", "account_edit.field_edit_modal.link_emoji_warning": "No recomendamos el uso de emojis personalizados en combinación con direcciones URL. Los campos personalizados que contengan ambos se mostrarán solo como texto en lugar de como un enlace, con el fin de evitar confusiones al usuario.", "account_edit.field_edit_modal.name_hint": "Por ejemplo, «sitio web personal»", "account_edit.field_edit_modal.name_label": "Etiqueta", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Editar texto alternativo", "account_edit.image_edit.remove_button": "Eliminar imagen", "account_edit.image_edit.replace_button": "Reemplazar imagen", + "account_edit.item_list.delete": "Eliminar {name}", + "account_edit.item_list.edit": "Editar {name}", "account_edit.name_modal.add_title": "Añadir nombre para mostrar", "account_edit.name_modal.edit_title": "Editar nombre para mostrar", "account_edit.profile_tab.button_label": "Personalizar", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Arrastrar para subir", "account_edit.upload_modal.step_upload.header": "Elegir una imagen", "account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, con un tamaño máximo de {limit} MB.{br}La imagen se redimensionará a {width} x {height} píxeles.", - "account_edit.upload_modal.title_add": "Agregar foto de perfil", - "account_edit.upload_modal.title_replace": "Reemplazar foto de perfil", + "account_edit.upload_modal.title_add.avatar": "Añadir foto de perfil", + "account_edit.upload_modal.title_add.header": "Añadir foto de cabecera", + "account_edit.upload_modal.title_replace.avatar": "Reemplazar foto de perfil", + "account_edit.upload_modal.title_replace.header": "Reemplazar foto de cabecera", "account_edit.verified_modal.details": "Agrega credibilidad a tu perfil de Mastodon verificando los enlaces a sitios web personales. Así es como funciona:", "account_edit.verified_modal.invisible_link.details": "Agrega el enlace a tu encabezado. La parte importante es rel=\"me\", que evita la suplantación de identidad en sitios web con contenido generado por los usuarios. Incluso puedes usar una etiqueta de enlace en el encabezado de la página en lugar de {tag}, pero el HTML debe ser accesible sin ejecutar JavaScript.", "account_edit.verified_modal.invisible_link.summary": "¿Cómo hago para que el enlace sea invisible?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Agrega tu sitio web como campo personalizado", "account_edit.verified_modal.title": "Cómo agregar un enlace verificado", "account_edit_tags.add_tag": "Añadir #{tagName}", - "account_edit_tags.column_title": "Editar etiquetas destacadas", + "account_edit_tags.column_title": "Editar etiquetas", "account_edit_tags.help_text": "Las etiquetas destacadas ayudan a los usuarios a descubrir tu perfil e interactuar con él. Aparecen como filtros en la vista Actividad de tu página de perfil.", + "account_edit_tags.max_tags_reached": "Has alcanzado el número máximo de etiquetas destacadas.", "account_edit_tags.search_placeholder": "Introduce una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", "account_edit_tags.tag_status_count": "{count, plural,one {# publicación} other {# publicaciones}}", + "account_list.total": "{total, plural,one {# cuenta} other {# cuentas}}", "account_note.placeholder": "Haz clic para añadir una nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después de unirse", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después de unirse", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Recomendamos seguir", "followed_tags": "Etiquetas seguidas", "followers.hide_other_followers": "Este usuario ha elegido no hacer visibles a sus otros seguidores", + "followers.title": "Siguiendo a {name}", "following.hide_other_following": "Este usuario ha elegido no hacer visible el resto de personas a las que sigue", + "following.title": "Seguido por {name}", "footer.about": "Acerca de", "footer.about_mastodon": "Acerca de Mastodon", "footer.about_server": "Acerca de {domain}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index c04df9cfd1..4d8f4caa28 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Biografía", "account_edit.bio_modal.add_title": "Añadir biografía", "account_edit.bio_modal.edit_title": "Editar biografía", - "account_edit.button.add": "Añadir {item}", - "account_edit.button.delete": "Eliminar {item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Hecho", "account_edit.column_title": "Editar perfil", - "account_edit.custom_fields.name": "campo", "account_edit.custom_fields.placeholder": "Añade tus pronombres, enlaces externos o cualquier otra cosa que quieras compartir.", "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Puedes añadir credibilidad fácilmente a tu cuenta de Mastodon verificando los enlaces a tus propias webs.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "¿Cómo añado un enlace verificado?", "account_edit.display_name.placeholder": "Tu nombre de usuario es el nombre que aparece en tu perfil y en las cronologías.", "account_edit.display_name.title": "Nombre para mostrar", - "account_edit.featured_hashtags.item": "etiquetas", "account_edit.featured_hashtags.placeholder": "Ayuda a otros a identificar tus temas favoritos y a acceder rápidamente a ellos.", "account_edit.featured_hashtags.title": "Etiquetas destacadas", "account_edit.field_delete_modal.confirm": "¿Estás seguro de que quieres borrar este campo personalizado? La acción no se puede deshacer.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "¿Borrar campo personalizado?", "account_edit.field_edit_modal.add_title": "Añadir campo personalizado", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", - "account_edit.field_edit_modal.limit_header": "Se ha sobrepasado el límite de caracteres recomendado", - "account_edit.field_edit_modal.limit_message": "Los usuarios de móviles no verán tu campo entero.", "account_edit.field_edit_modal.link_emoji_warning": "Recomendamos no usar emojis personalizados combinados con enlaces. Los campos personalizados que contengan ambos solo se mostrarán como texto en vez de un enlace, para evitar confusiones.", "account_edit.field_edit_modal.name_hint": "Ej. \"Web personal\"", "account_edit.field_edit_modal.name_label": "Etiqueta", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Suelta para subir", "account_edit.upload_modal.step_upload.header": "Elige una imagen", "account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, hasta {limit}MB.{br}La imagen será escalada a {width}x{height}px.", - "account_edit.upload_modal.title_add": "Añadir foto de perfil", - "account_edit.upload_modal.title_replace": "Reemplazar foto de perfil", "account_edit.verified_modal.details": "Añade credibilidad a tu perfil de Mastodon verificando enlaces a tus webs personales. Así es como funciona:", "account_edit.verified_modal.invisible_link.details": "Añade el enlace en el encabezado. La parte importante es rel=\"me\", que evita la suplantación de identidad en webs con contenido generado por usuarios. Incluso puedes utilizar un enlace con etiqueta en el encabezado de la página en vez de {tag}, pero el HTML debe ser accesible sin ejecutar JavaScript.", "account_edit.verified_modal.invisible_link.summary": "¿Cómo puedo hacer el enlace invisible?", @@ -229,7 +220,6 @@ "account_edit.verified_modal.step2.header": "Añade tu web como un campo personalizado", "account_edit.verified_modal.title": "Cómo añadir un enlace verificado", "account_edit_tags.add_tag": "Agregar #{tagName}", - "account_edit_tags.column_title": "Editar etiquetas destacadas", "account_edit_tags.help_text": "Las etiquetas destacadas ayudan a los usuarios a descubrir e interactuar con tu perfil. Aparecen como filtros en la vista de actividad de tu página de perfil.", "account_edit_tags.search_placeholder": "Introduce una etiqueta…", "account_edit_tags.suggestions": "Sugerencias:", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index ffec8d59e8..0fa0d632f0 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -141,34 +141,39 @@ "account.unmute": "Kumoa käyttäjän @{name} mykistys", "account.unmute_notifications_short": "Kumoa ilmoitusten mykistys", "account.unmute_short": "Kumoa mykistys", + "account_edit.bio.edit_label": "Muokkaa elämäkertaa", + "account_edit.bio.label": "elämäkerta", "account_edit.bio.placeholder": "Lisää lyhyt esittely, joka auttaa muita tunnistamaan sinut.", "account_edit.bio.title": "Elämäkerta", "account_edit.bio_modal.add_title": "Lisää elämäkerta", "account_edit.bio_modal.edit_title": "Muokkaa elämäkertaa", - "account_edit.button.add": "Lisää {item}", - "account_edit.button.delete": "Poista {item}", - "account_edit.button.edit": "Muokkaa {item}", "account_edit.column_button": "Valmis", "account_edit.column_title": "Muokkaa profiilia", - "account_edit.custom_fields.name": "kenttä", + "account_edit.custom_fields.add_label": "Lisää kenttä", + "account_edit.custom_fields.edit_label": "Muokkaa kenttää", "account_edit.custom_fields.placeholder": "Lisää pronominisi, ulkoisia linkkejä tai mitä tahansa muuta, jonka haluat jakaa.", "account_edit.custom_fields.reorder_button": "Järjestele kenttiä", "account_edit.custom_fields.tip_content": "Voit helposti lisätä Mastodon-tilisi uskottavuutta vahvistamalla mihin tahansa omistamaasi verkkosivustoon ohjaavat linkit.", "account_edit.custom_fields.tip_title": "Vinkki: Vahvistettujen linkkien lisääminen", "account_edit.custom_fields.title": "Mukautetut kentät", "account_edit.custom_fields.verified_hint": "Miten lisään vahvistetun linkin?", + "account_edit.display_name.add_label": "Lisää näyttönimi", + "account_edit.display_name.edit_label": "Muokkaa näyttönimeä", "account_edit.display_name.placeholder": "Näyttönimesi on nimi, joka näkyy profiilissasi ja aikajanoilla.", "account_edit.display_name.title": "Näyttönimi", - "account_edit.featured_hashtags.item": "aihetunnisteet", + "account_edit.featured_hashtags.edit_label": "Lisää aihetunnisteita", "account_edit.featured_hashtags.placeholder": "Auta muita tunnistamaan suosikkiaiheesi ja saamaan nopea pääsy niihin.", "account_edit.featured_hashtags.title": "Esiteltävät aihetunnisteet", + "account_edit.field_actions.delete": "Poista kenttä", + "account_edit.field_actions.edit": "Muokkaa kenttää", "account_edit.field_delete_modal.confirm": "Haluatko varmasti poistaa tämän mukautetun kentän? Tätä toimea ei voi peruuttaa.", "account_edit.field_delete_modal.delete_button": "Poista", "account_edit.field_delete_modal.title": "Poistetaanko mukautettu kenttä?", "account_edit.field_edit_modal.add_title": "Lisää mukautettu kenttä", + "account_edit.field_edit_modal.discard_confirm": "Hylkää", + "account_edit.field_edit_modal.discard_message": "Sinulla on tallentamattomia muutoksia. Haluatko varmasti hylätä ne?", "account_edit.field_edit_modal.edit_title": "Muokkaa mukautettua kenttää", - "account_edit.field_edit_modal.limit_header": "Suositeltu merkkiraja ylitetty", - "account_edit.field_edit_modal.limit_message": "Mobiilikäyttäjät eivät välttämättä näe kenttää kokonaan.", + "account_edit.field_edit_modal.limit_warning": "Suositeltava merkkimäärä ylitetty. Mobiilikäyttäjät eivät välttämättä näe kenttää kokonaan.", "account_edit.field_edit_modal.link_emoji_warning": "Emme suosittele käyttämään mukautettuja emojeita URL-osoitteiden kanssa. Molempia sisältävät mukautetut kentät näkyvät vain tekstinä linkin sijaan, jotta estetään käyttäjien sekaannus.", "account_edit.field_edit_modal.name_hint": "Esim. ”Henkilökohtainen verkkosivusto”", "account_edit.field_edit_modal.name_label": "Nimike", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Muokkaa tekstivastinetta", "account_edit.image_edit.remove_button": "Poista kuva", "account_edit.image_edit.replace_button": "Korvaa kuva", + "account_edit.item_list.delete": "Poista {name}", + "account_edit.item_list.edit": "Muokkaa kohdetta {name}", "account_edit.name_modal.add_title": "Lisää näyttönimi", "account_edit.name_modal.edit_title": "Muokkaa näyttönimeä", "account_edit.profile_tab.button_label": "Mukauta", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Lähetä pudottamalla", "account_edit.upload_modal.step_upload.header": "Valitse kuva", "account_edit.upload_modal.step_upload.hint": "WEBP-, PNG-, GIF- tai JPG-muotoinen, enintään {limit} Mt.{br}Kuva skaalautuu kokoon {width}×{height} px.", - "account_edit.upload_modal.title_add": "Lisää profiilikuva", - "account_edit.upload_modal.title_replace": "Korvaa profiilikuva", + "account_edit.upload_modal.title_add.avatar": "Lisää profiilikuva", + "account_edit.upload_modal.title_add.header": "Lisää kansikuva", + "account_edit.upload_modal.title_replace.avatar": "Korvaa profiilikuva", + "account_edit.upload_modal.title_replace.header": "Korvaa kansikuva", "account_edit.verified_modal.details": "Lisää Mastodon-profiiliisi uskottavuutta vahvistamalla linkit henkilökohtaisiin verkkosivustoihin. Näin se toimii:", "account_edit.verified_modal.invisible_link.details": "Lisää linkki HTML:n head-osaan. Tärkeä kohta on rel=\"me\", joka estää toiseksi tekeytymisen sivustoilla, joilla on käyttäjien luomaa sisältöä. Voit jopa käyttää link-tunnistetta sivun head-osassa {tag}-tunnisteen sijaan, mutta HTML:n tulee olla saatavilla suorittamatta JavaScriptia.", "account_edit.verified_modal.invisible_link.summary": "Miten teen linkistä näkymättömän?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Lisää verkkosivustosi mukautettuna kenttänä", "account_edit.verified_modal.title": "Miten lisätä vahvistettu linkki", "account_edit_tags.add_tag": "Lisää #{tagName}", - "account_edit_tags.column_title": "Muokkaa esiteltäviä aihetunnisteita", + "account_edit_tags.column_title": "Muokkaa tunnisteita", "account_edit_tags.help_text": "Esiteltävät aihetunnisteet auttavat käyttäjiä löytämään profiilisi ja olemaan vuorovaikutuksessa sen kanssa. Ne näkyvät suodattimina profiilisivusi Toiminta-näkymässä.", + "account_edit_tags.max_tags_reached": "Sinulla on enimmäismäärä esiteltäviä aihetunnisteita.", "account_edit_tags.search_placeholder": "Syötä aihetunniste…", "account_edit_tags.suggestions": "Ehdotuksia:", "account_edit_tags.tag_status_count": "{count, plural, one {# julkaisu} other {# julkaisua}}", + "account_list.total": "{total, plural, one {# tili} other {# tiliä}}", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjien pysyvyys päivittäin rekisteröitymisen jälkeen", "admin.dashboard.monthly_retention": "Käyttäjien pysyvyys kuukausittain rekisteröitymisen jälkeen", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Seurantaehdotuksia", "followed_tags": "Seurattavat aihetunnisteet", "followers.hide_other_followers": "Käyttäjä on päättänyt piilottaa muut seuraajansa", + "followers.title": "Seurattavana {name}", "following.hide_other_following": "Käyttäjä on päättänyt piilottaa muut seurattavansa", + "following.title": "Seuraajana {name}", "footer.about": "Tietoja", "footer.about_mastodon": "Tietoja Mastodonista", "footer.about_server": "Tietoja palvelimesta {domain}", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 110cdd1e7f..5b46131729 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -145,16 +145,12 @@ "account_edit.bio.title": "Ævilýsing", "account_edit.bio_modal.add_title": "Legg ævilýsing afturat", "account_edit.bio_modal.edit_title": "Rætta ævilýsing", - "account_edit.button.add": "Legg afturat {item}", - "account_edit.button.delete": "Strika {item}", - "account_edit.button.edit": "Broyt {item}", "account_edit.column_button": "Liðugt", "account_edit.column_title": "Rætta vanga", "account_edit.custom_fields.placeholder": "Legg tíni forheiti, uttanhýsis leinki ella okkurt annað, sum tú kundi hugsað tær at deilt.", "account_edit.custom_fields.title": "Serfelt", "account_edit.display_name.placeholder": "Títt vísta navn er soleiðis sum navnið hjá tær verður víst á vanganum og á tíðarrásum.", "account_edit.display_name.title": "Víst navn", - "account_edit.featured_hashtags.item": "frámerki", "account_edit.featured_hashtags.placeholder": "Hjálp øðrum at eyðmekja og hava skjóta atgongd til tíni yndisevni.", "account_edit.featured_hashtags.title": "Sermerkt frámerki", "account_edit.name_modal.add_title": "Legg víst navn afturat", @@ -172,7 +168,6 @@ "account_edit.profile_tab.title": "Stillingar fyri spjøldur á vanga", "account_edit.save": "Goym", "account_edit_tags.add_tag": "Legg #{tagName} afturat", - "account_edit_tags.column_title": "Rætta sermerkt frámerki", "account_edit_tags.help_text": "Sermerkt frámerki hjálpa brúkarum at varnast og virka saman við vanga tínum. Tey síggjast sum filtur á virksemisvísingini av vanga tínum.", "account_edit_tags.search_placeholder": "Áset eitt frámerki…", "account_edit_tags.suggestions": "Uppskot:", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 23ab79e596..13923aa50c 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Présentation", "account_edit.bio_modal.add_title": "Ajouter une présentation", "account_edit.bio_modal.edit_title": "Modifier la présentation", - "account_edit.button.add": "Ajouter {item}", - "account_edit.button.delete": "Supprimer {item}", - "account_edit.button.edit": "Modifier {item}", "account_edit.column_button": "Terminé", "account_edit.column_title": "Modifier le profil", - "account_edit.custom_fields.name": "champ", "account_edit.custom_fields.placeholder": "Ajouter vos pronoms, vos sites, ou tout ce que vous voulez partager.", "account_edit.custom_fields.reorder_button": "Réorganiser les champs", "account_edit.custom_fields.tip_content": "Vous pouvez facilement ajouter de la crédibilité à votre compte Mastodon en vérifiant les liens vers tous les sites Web que vous possédez.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Comment ajouter un lien vérifié ?", "account_edit.display_name.placeholder": "Votre nom public est le nom qui apparaît sur votre profil et dans les fils d'actualités.", "account_edit.display_name.title": "Nom public", - "account_edit.featured_hashtags.item": "hashtags", "account_edit.featured_hashtags.placeholder": "Aider les autres à identifier et à accéder rapidement à vos sujets préférés.", "account_edit.featured_hashtags.title": "Hashtags mis en avant", "account_edit.field_delete_modal.confirm": "Voulez-vous vraiment supprimer ce champ personnalisé ? Cette action ne peut pas être annulée.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Supprimer le champ personnalisé ?", "account_edit.field_edit_modal.add_title": "Ajouter un champ personnalisé", "account_edit.field_edit_modal.edit_title": "Modifier un champ personnalisé", - "account_edit.field_edit_modal.limit_header": "Limite de caractères recommandée dépassée", - "account_edit.field_edit_modal.limit_message": "L'affichage du champ peut être tronqué sur les téléphones.", "account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.", "account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »", "account_edit.field_edit_modal.name_label": "Libellé", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Déposer pour téléverser", "account_edit.upload_modal.step_upload.header": "Choisir une image", "account_edit.upload_modal.step_upload.hint": "Format WebP, PNG, GIF ou JPEG, jusqu'à {limit} Mo.{br}L'image sera redimensionnée à {width} × {height} px.", - "account_edit.upload_modal.title_add": "Ajouter une photo de profil", - "account_edit.upload_modal.title_replace": "Remplacer la photo de profil", "account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :", "account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?", @@ -229,11 +220,11 @@ "account_edit.verified_modal.step2.header": "Ajouter votre site Web en tant que champ personnalisé", "account_edit.verified_modal.title": "Comment ajouter un lien vérifié ?", "account_edit_tags.add_tag": "Ajouter #{tagName}", - "account_edit_tags.column_title": "Modifier les hashtags mis en avant", "account_edit_tags.help_text": "Les hashtags mis en avant aident les personnes à découvrir et interagir avec votre profil. Ils apparaissent comme des filtres dans la vue « Activité » de votre profil.", "account_edit_tags.search_placeholder": "Saisir un hashtag…", "account_edit_tags.suggestions": "Suggestions :", "account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}", + "account_list.total": "{total, plural, one {# compte} other {# comptes}}", "account_note.placeholder": "Cliquez pour ajouter une note", "admin.dashboard.daily_retention": "Taux de rétention des comptes par jour après inscription", "admin.dashboard.monthly_retention": "Taux de rétention des comptes par mois après inscription", @@ -674,7 +665,9 @@ "follow_suggestions.who_to_follow": "Qui suivre", "followed_tags": "Hashtags suivis", "followers.hide_other_followers": "Ce compte a choisi de ne pas rendre visible ses autres abonné·e·s", + "followers.title": "Suit {name}", "following.hide_other_following": "Ce compte a choisi de ne pas rendre visible ses autres abonnements", + "following.title": "Suivi·e par {name}", "footer.about": "À propos", "footer.about_mastodon": "À propos de Mastodon", "footer.about_server": "À propos de {domain}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9f0c6e78bc..951d25fa2f 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Présentation", "account_edit.bio_modal.add_title": "Ajouter une présentation", "account_edit.bio_modal.edit_title": "Modifier la présentation", - "account_edit.button.add": "Ajouter {item}", - "account_edit.button.delete": "Supprimer {item}", - "account_edit.button.edit": "Modifier {item}", "account_edit.column_button": "Terminé", "account_edit.column_title": "Modifier le profil", - "account_edit.custom_fields.name": "champ", "account_edit.custom_fields.placeholder": "Ajouter vos pronoms, vos sites, ou tout ce que vous voulez partager.", "account_edit.custom_fields.reorder_button": "Réorganiser les champs", "account_edit.custom_fields.tip_content": "Vous pouvez facilement ajouter de la crédibilité à votre compte Mastodon en vérifiant les liens vers tous les sites Web que vous possédez.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Comment ajouter un lien vérifié ?", "account_edit.display_name.placeholder": "Votre nom public est le nom qui apparaît sur votre profil et dans les fils d'actualités.", "account_edit.display_name.title": "Nom public", - "account_edit.featured_hashtags.item": "hashtags", "account_edit.featured_hashtags.placeholder": "Aider les autres à identifier et à accéder rapidement à vos sujets préférés.", "account_edit.featured_hashtags.title": "Hashtags mis en avant", "account_edit.field_delete_modal.confirm": "Voulez-vous vraiment supprimer ce champ personnalisé ? Cette action ne peut pas être annulée.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Supprimer le champ personnalisé ?", "account_edit.field_edit_modal.add_title": "Ajouter un champ personnalisé", "account_edit.field_edit_modal.edit_title": "Modifier un champ personnalisé", - "account_edit.field_edit_modal.limit_header": "Limite de caractères recommandée dépassée", - "account_edit.field_edit_modal.limit_message": "L'affichage du champ peut être tronqué sur les téléphones.", "account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.", "account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »", "account_edit.field_edit_modal.name_label": "Libellé", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Déposer pour téléverser", "account_edit.upload_modal.step_upload.header": "Choisir une image", "account_edit.upload_modal.step_upload.hint": "Format WebP, PNG, GIF ou JPEG, jusqu'à {limit} Mo.{br}L'image sera redimensionnée à {width} × {height} px.", - "account_edit.upload_modal.title_add": "Ajouter une photo de profil", - "account_edit.upload_modal.title_replace": "Remplacer la photo de profil", "account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :", "account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?", @@ -229,11 +220,11 @@ "account_edit.verified_modal.step2.header": "Ajouter votre site Web en tant que champ personnalisé", "account_edit.verified_modal.title": "Comment ajouter un lien vérifié ?", "account_edit_tags.add_tag": "Ajouter #{tagName}", - "account_edit_tags.column_title": "Modifier les hashtags mis en avant", "account_edit_tags.help_text": "Les hashtags mis en avant aident les personnes à découvrir et interagir avec votre profil. Ils apparaissent comme des filtres dans la vue « Activité » de votre profil.", "account_edit_tags.search_placeholder": "Saisir un hashtag…", "account_edit_tags.suggestions": "Suggestions :", "account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}", + "account_list.total": "{total, plural, one {# compte} other {# comptes}}", "account_note.placeholder": "Cliquez pour ajouter une note", "admin.dashboard.daily_retention": "Taux de rétention des utilisateur·rice·s par jour après inscription", "admin.dashboard.monthly_retention": "Taux de rétention des utilisateur·rice·s par mois après inscription", @@ -674,7 +665,9 @@ "follow_suggestions.who_to_follow": "Qui suivre", "followed_tags": "Hashtags suivis", "followers.hide_other_followers": "Ce compte a choisi de ne pas rendre visible ses autres abonné·e·s", + "followers.title": "Suit {name}", "following.hide_other_following": "Ce compte a choisi de ne pas rendre visible ses autres abonnements", + "following.title": "Suivi·e par {name}", "footer.about": "À propos", "footer.about_mastodon": "À propos de Mastodon", "footer.about_server": "À propos de {domain}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 0ce04407a7..c6b3b1371e 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -141,34 +141,39 @@ "account.unmute": "Díbhalbhaigh @{name}", "account.unmute_notifications_short": "Díbhalbhaigh fógraí", "account.unmute_short": "Díbhalbhaigh", + "account_edit.bio.edit_label": "Cuir beathaisnéis in eagar", + "account_edit.bio.label": "beathaisnéis", "account_edit.bio.placeholder": "Cuir réamhrá gearr leis chun cabhrú le daoine eile tú a aithint.", "account_edit.bio.title": "Beathaisnéis", "account_edit.bio_modal.add_title": "Cuir beathaisnéis leis", "account_edit.bio_modal.edit_title": "Cuir beathaisnéis in eagar", - "account_edit.button.add": "Cuir {item} leis", - "account_edit.button.delete": "Scrios {item}", - "account_edit.button.edit": "Cuir {item} in eagar", "account_edit.column_button": "Déanta", "account_edit.column_title": "Cuir Próifíl in Eagar", - "account_edit.custom_fields.name": "réimse", + "account_edit.custom_fields.add_label": "Cuir réimse leis", + "account_edit.custom_fields.edit_label": "Cuir réimse in eagar", "account_edit.custom_fields.placeholder": "Cuir do fhorainmneacha, naisc sheachtracha, nó aon rud eile ar mhaith leat a roinnt leis.", "account_edit.custom_fields.reorder_button": "Athordaigh réimsí", "account_edit.custom_fields.tip_content": "Is féidir leat creidiúnacht a chur le do chuntas Mastodon go héasca trí naisc chuig aon suíomhanna Gréasáin ar leatsa iad a fhíorú.", "account_edit.custom_fields.tip_title": "Leid: Ag cur naisc fhíoraithe leis", "account_edit.custom_fields.title": "Réimsí saincheaptha", "account_edit.custom_fields.verified_hint": "Conas a chuirim nasc fíoraithe leis?", + "account_edit.display_name.add_label": "Cuir ainm taispeána leis", + "account_edit.display_name.edit_label": "Cuir ainm taispeána in eagar", "account_edit.display_name.placeholder": "Is é d’ainm taispeána an chaoi a bhfeictear d’ainm ar do phróifíl agus in amlínte.", "account_edit.display_name.title": "Ainm taispeána", - "account_edit.featured_hashtags.item": "haischlibeanna", + "account_edit.featured_hashtags.edit_label": "Cuir haischlibanna leis", "account_edit.featured_hashtags.placeholder": "Cabhraigh le daoine eile do thopaicí is fearr leat a aithint, agus rochtain thapa a bheith acu orthu.", "account_edit.featured_hashtags.title": "Haischlibeanna Réadmhaoine", + "account_edit.field_actions.delete": "Scrios réimse", + "account_edit.field_actions.edit": "Cuir réimse in eagar", "account_edit.field_delete_modal.confirm": "An bhfuil tú cinnte gur mhaith leat an réimse saincheaptha seo a scriosadh? Ní féidir an gníomh seo a chealú.", "account_edit.field_delete_modal.delete_button": "Scrios", "account_edit.field_delete_modal.title": "An bhfuil fonn ort an réimse saincheaptha a scriosadh?", "account_edit.field_edit_modal.add_title": "Cuir réimse saincheaptha leis", + "account_edit.field_edit_modal.discard_confirm": "Caith uait", + "account_edit.field_edit_modal.discard_message": "Tá athruithe neamhshábháilte agat. An bhfuil tú cinnte gur mian leat iad a chaitheamh amach?", "account_edit.field_edit_modal.edit_title": "Cuir réimse saincheaptha in eagar", - "account_edit.field_edit_modal.limit_header": "Sáraíodh an teorainn carachtar molta", - "account_edit.field_edit_modal.limit_message": "B’fhéidir nach bhfeicfidh úsáideoirí soghluaiste do réimse ina iomláine.", + "account_edit.field_edit_modal.limit_warning": "Sáraíodh an teorainn carachtar molta. B’fhéidir nach bhfeicfeadh úsáideoirí soghluaiste do réimse ina iomláine.", "account_edit.field_edit_modal.link_emoji_warning": "Molaimid gan emoji saincheaptha a úsáid i gcomhar le Urlanna. Taispeánfar réimsí saincheaptha ina bhfuil an dá cheann mar théacs amháin seachas mar nasc, chun mearbhall úsáideoirí a sheachaint.", "account_edit.field_edit_modal.name_hint": "M.sh. “Suíomh Gréasáin pearsanta”", "account_edit.field_edit_modal.name_label": "Lipéad", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Cuir téacs alt in eagar", "account_edit.image_edit.remove_button": "Bain íomhá", "account_edit.image_edit.replace_button": "Athsholáthair íomhá", + "account_edit.item_list.delete": "Scrios {name}", + "account_edit.item_list.edit": "Cuir {name} in eagar", "account_edit.name_modal.add_title": "Cuir ainm taispeána leis", "account_edit.name_modal.edit_title": "Cuir ainm taispeána in eagar", "account_edit.profile_tab.button_label": "Saincheap", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Scaoil le huaslódáil", "account_edit.upload_modal.step_upload.header": "Roghnaigh íomhá", "account_edit.upload_modal.step_upload.hint": "Formáid WEBP, PNG, GIF nó JPG, suas le {limit}MB.{br}Scálfar an íomhá go {width}x{height}px.", - "account_edit.upload_modal.title_add": "Cuir grianghraf próifíle leis", - "account_edit.upload_modal.title_replace": "Athsholáthar grianghraf próifíle", + "account_edit.upload_modal.title_add.avatar": "Cuir grianghraf próifíle leis", + "account_edit.upload_modal.title_add.header": "Cuir grianghraf clúdaigh leis", + "account_edit.upload_modal.title_replace.avatar": "Athsholáthar grianghraf próifíle", + "account_edit.upload_modal.title_replace.header": "Athsholáthar grianghraf clúdaigh", "account_edit.verified_modal.details": "Cuir creidiúnacht le do phróifíl Mastodon trí naisc chuig láithreáin ghréasáin phearsanta a fhíorú. Seo mar a oibríonn sé:", "account_edit.verified_modal.invisible_link.details": "Cuir an nasc le do cheanntásc. Is í an chuid thábhachtach ná rel=\"me\" a chuireann cosc ​​ar phearsanú ar shuíomhanna gréasáin a bhfuil inneachar a ghintear ag úsáideoirí. Is féidir leat clib nasc a úsáid fiú i gceanntásc an leathanaigh in ionad {tag}, ach caithfidh an HTML a bheith inrochtana gan JavaScript a chur i gcrích.", "account_edit.verified_modal.invisible_link.summary": "Conas a dhéanaim an nasc dofheicthe?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Cuir do shuíomh Gréasáin leis mar réimse saincheaptha", "account_edit.verified_modal.title": "Conas nasc fíoraithe a chur leis", "account_edit_tags.add_tag": "Cuir #{tagName} leis", - "account_edit_tags.column_title": "Cuir haischlibeanna le feiceáil in eagar", + "account_edit_tags.column_title": "Cuir Clibeanna in Eagar", "account_edit_tags.help_text": "Cuidíonn haischlibeanna le húsáideoirí do phróifíl a aimsiú agus idirghníomhú léi. Feictear iad mar scagairí ar radharc Gníomhaíochta do leathanaigh Phróifíle.", + "account_edit_tags.max_tags_reached": "Tá an líon uasta haischlibanna le feiceáil sroichte agat.", "account_edit_tags.search_placeholder": "Cuir isteach haischlib…", "account_edit_tags.suggestions": "Moltaí:", "account_edit_tags.tag_status_count": "{count, plural, one {# post} two {# poist} few {# poist} many {# poist} other {# poist}}", + "account_list.total": "{total, plural, one {# cuntas} two {# cuntais} few {# cuntais} many {# cuntais} other {# cuntais}}", "account_note.placeholder": "Cliceáil chun nóta a chuir leis", "admin.dashboard.daily_retention": "Ráta coinneála an úsáideora de réir an lae tar éis clárú", "admin.dashboard.monthly_retention": "Ráta coinneála na n-úsáideoirí de réir na míosa tar éis dóibh clárú", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Cé le leanúint", "followed_tags": "Hashtags le leanúint", "followers.hide_other_followers": "Tá an t-úsáideoir seo tar éis a roghnú gan a leantóirí eile a dhéanamh le feiceáil", + "followers.title": "Ag leanúint {name}", "following.hide_other_following": "Tá an t-úsáideoir seo tar éis a roghnú gan an chuid eile de na daoine a leanann siad a dhéanamh le feiceáil", + "following.title": "Ag leanúint {name}", "footer.about": "Maidir le", "footer.about_mastodon": "Maidir le Mastodon", "footer.about_server": "Maidir le {domain}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index af372edd2b..26b13a7d22 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -141,34 +141,37 @@ "account.unmute": "Deixar de silenciar a @{name}", "account.unmute_notifications_short": "Reactivar notificacións", "account.unmute_short": "Non silenciar", + "account_edit.bio.edit_label": "Editar biografía", + "account_edit.bio.label": "sobre ti", "account_edit.bio.placeholder": "Escribe unha breve presentación para que te coñezan mellor.", "account_edit.bio.title": "Sobre ti", "account_edit.bio_modal.add_title": "Engadir biografía", "account_edit.bio_modal.edit_title": "Editar biografía", - "account_edit.button.add": "Engadir {item}", - "account_edit.button.delete": "Eliminar {item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Feito", "account_edit.column_title": "Editar perfil", - "account_edit.custom_fields.name": "campo", + "account_edit.custom_fields.add_label": "Engadir un campo", + "account_edit.custom_fields.edit_label": "Edita o campo", "account_edit.custom_fields.placeholder": "Engade os teus pronomes, ligazóns externas, ou o que queiras compartir.", "account_edit.custom_fields.reorder_button": "Reordenar os campos", "account_edit.custom_fields.tip_content": "Podes darlle maior credibilidade á túa conta Mastodon se verificas as ligazóns a sitios web da túa propiedade.", "account_edit.custom_fields.tip_title": "Consello: Engadir ligazóns verificadas", "account_edit.custom_fields.title": "Campos personalizados", "account_edit.custom_fields.verified_hint": "Como engado unha ligazón verificada?", + "account_edit.display_name.add_label": "Engadir nome público", + "account_edit.display_name.edit_label": "Editar o nome público", "account_edit.display_name.placeholder": "O nome público é o nome que aparece no perfil e nas cronoloxías.", "account_edit.display_name.title": "Nome público", - "account_edit.featured_hashtags.item": "cancelos", + "account_edit.featured_hashtags.edit_label": "Engadir cancelos", "account_edit.featured_hashtags.placeholder": "Facilita que te identifiquen, e da acceso rápido aos teus intereses favoritos.", "account_edit.featured_hashtags.title": "Cancelos destacados", + "account_edit.field_actions.delete": "Eliminar campo", + "account_edit.field_actions.edit": "Edita o campo", "account_edit.field_delete_modal.confirm": "Tes certeza de querer eliminar este campo persoal? A acción non se pode desfacer.", "account_edit.field_delete_modal.delete_button": "Eliminar", "account_edit.field_delete_modal.title": "Eliminar campo persoal?", "account_edit.field_edit_modal.add_title": "Engadir campo persoal", + "account_edit.field_edit_modal.discard_confirm": "Desbotar", "account_edit.field_edit_modal.edit_title": "Editar campo persoal", - "account_edit.field_edit_modal.limit_header": "Superouse o límite de caracteres recomendado", - "account_edit.field_edit_modal.limit_message": "Nos dispositivos móbiles podería non verse o campo completo.", "account_edit.field_edit_modal.link_emoji_warning": "Non recomendamos o uso de emojis persoais combinados con URLs. Os campos persoais que conteñen ambos móstranse só como texto e non como unha ligazón, para evitar a confusión de quen os lea.", "account_edit.field_edit_modal.name_hint": "Ex. \"Páxina web persoal\"", "account_edit.field_edit_modal.name_label": "Etiqueta", @@ -219,8 +222,6 @@ "account_edit.upload_modal.step_upload.dragging": "Solta aquí para subir", "account_edit.upload_modal.step_upload.header": "Escoller unha imaxe", "account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF ou JPG, ata {limit}MB.{br}A imaxe será comprimida a {width}x{height}px.", - "account_edit.upload_modal.title_add": "Engadir foto do perfil", - "account_edit.upload_modal.title_replace": "Substituír foto do perfil", "account_edit.verified_modal.details": "Engade maior credibilidade ao teu perfil Mastodon verificando as ligazóns ás túas páxinas web persoais. Funciona así:", "account_edit.verified_modal.invisible_link.details": "Engade a ligazón ao «header» da páxina web. A parte importante é rel=\"me\", que evita a suplantación en sitios web con contido creado polas usuarias. Tamén podes usar a etiqueta «link» na cabeceira da páxina no lugar de {tag}, pero o HTML ten que ser accesible sen usar JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Como fago visible a ligazón?", @@ -229,7 +230,6 @@ "account_edit.verified_modal.step2.header": "Engade a túa páxina como campo persoal", "account_edit.verified_modal.title": "Como engadir unha ligazón verificada", "account_edit_tags.add_tag": "Engadir #{tagName}", - "account_edit_tags.column_title": "Editar cancelos destacados", "account_edit_tags.help_text": "Os cancelos destacados axúdanlle ás usuarias a atopar e interactuar co teu perfil. Aparecen como filtros na túa páxina de perfil na vista Actividade.", "account_edit_tags.search_placeholder": "Escribe un cancelo…", "account_edit_tags.suggestions": "Suxestións:", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 4034ce3e30..e56abf8fd6 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "ביוגרפיה", "account_edit.bio_modal.add_title": "הוסיפו ביוגרפיה", "account_edit.bio_modal.edit_title": "עריכת ביוגרפיה", - "account_edit.button.add": "הוספת {item}", - "account_edit.button.delete": "מחיקת {item}", - "account_edit.button.edit": "עריכת {item}", "account_edit.column_button": "סיום", "account_edit.column_title": "עריכת הפרופיל", - "account_edit.custom_fields.name": "שדה", "account_edit.custom_fields.placeholder": "הוסיפו צורת פניה, קישורים חיצוניים וכל דבר שתרצו לשתף.", "account_edit.custom_fields.reorder_button": "הגדרת סדר השדות", "account_edit.custom_fields.tip_content": "ניתן להוסיף אמינות לחשבון המסטודון שלך על ידי וידוא קישורים לאתרים שבבעלותך.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "כיצד תוסיפו קישורים מוודאים?", "account_edit.display_name.placeholder": "שם התצוגה שלכן הוא איך שהשם יופיע בפרופיל ובצירי הזמנים.", "account_edit.display_name.title": "שם תצוגה", - "account_edit.featured_hashtags.item": "תגיות", "account_edit.featured_hashtags.placeholder": "עזרו לאחרים לזהות ולגשת בקלות לנושאים החביבים עליכם.", "account_edit.featured_hashtags.title": "תגיות נבחרות", "account_edit.field_delete_modal.confirm": "האם אתם בטוחיםות שברצונכן למחוק את השדה המיוחד הזה? פעולה זו לא ניתנת לביטול.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "מחיקת שדה מתואם אישית?", "account_edit.field_edit_modal.add_title": "הוסף שדה מותאם אישית", "account_edit.field_edit_modal.edit_title": "עריכת שדה מותאם אישית", - "account_edit.field_edit_modal.limit_header": "עברת את מגבלת התווים המומלצת", - "account_edit.field_edit_modal.limit_message": "משתמשים מטלפון חכם עלולים לא לראות את השדה במלואו.", "account_edit.field_edit_modal.link_emoji_warning": "אנו ממליצים נגד שימוש באמוג'י ייחודיים ביחד עם URL. שדות מיוחדים שמכילים את שניהם יופיעו כמלל בלבד ולא כקישור, כדי למנוע בלבול משתמשים.", "account_edit.field_edit_modal.name_hint": "למשל \"אתר אישי\"", "account_edit.field_edit_modal.name_label": "תווית", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "גרור להעלאה", "account_edit.upload_modal.step_upload.header": "בחר/י תמונה", "account_edit.upload_modal.step_upload.hint": "תכנים בתקן WEBP, PNG, GIF או JPG, עד לגודל {limit} מ\"ב.{br}התמונה תתוקן לגודל {width} על {height} פיקסלים.", - "account_edit.upload_modal.title_add": "הוספת תמונת פרופיל", - "account_edit.upload_modal.title_replace": "החלפת תמונת פרופיל", "account_edit.verified_modal.details": "הוספת אמינות לחשבון המסטודון על ידי הוספת קישורים מוודאים לאתרים אישיים. כך זה עובד:", "account_edit.verified_modal.invisible_link.details": "הוסיפו את הקישור בכותרת. החלק החשוב הוא rel=\"me\" שמונע התחזות על אתרים עם תוכן משתמשים. ניתן גם ליצור תגית link בכותרת העמוד במקום קישור {tag} אבל קוד ה־HTML חייב להופיע שם ללא הרצה של ג'אווהסקריפט.", "account_edit.verified_modal.invisible_link.summary": "כיצד לגרום לקישור להיות בלתי נראה?", @@ -229,11 +220,11 @@ "account_edit.verified_modal.step2.header": "הוסיפו את אתרכן בשדה המיוחד", "account_edit.verified_modal.title": "כיצד תוסיפו קישורים מוודאים", "account_edit_tags.add_tag": "הוספת #{tagName}", - "account_edit_tags.column_title": "עריכת תגיות נבחרות", "account_edit_tags.help_text": "תגיות נבחרות עוזרות למשתמשים לגלות ולהשתמש בפרופיל שלך. הן יופיעו כסננים במבט הפעילויות על עמוד הפרופיל שלך.", "account_edit_tags.search_placeholder": "הזנת תגית…", "account_edit_tags.suggestions": "הצעות:", "account_edit_tags.tag_status_count": "{count, plural, one {הודעה אחת} two {הודעותיים} other {# הודעות}}", + "account_list.total": "{total, plural, one {חשבון אחד} other {# חשבונות}}", "account_note.placeholder": "יש ללחוץ כדי להוסיף הערות", "admin.dashboard.daily_retention": "קצב שימור משתמשים יומי אחרי ההרשמה", "admin.dashboard.monthly_retention": "קצב שימור משתמשים (פר חודש) אחרי ההרשמה", @@ -674,7 +665,9 @@ "follow_suggestions.who_to_follow": "אחרי מי לעקוב", "followed_tags": "התגיות שהחשבון שלך עוקב אחריהן", "followers.hide_other_followers": "משתשמש‎‏(ת) אלו החליטו לא לחשוף את עוקביהם האחרים", + "followers.title": "עוקבים אחרי {name}", "following.hide_other_following": "משתשמש‎‏(ת) אלו החליטו לא לחשוף את נעקביהם האחרים", + "following.title": "נעקבים על ידי {name}", "footer.about": "אודות", "footer.about_mastodon": "אודות מסטודון", "footer.about_server": "‮אודות ‭{domain}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index a97a7240c1..48fd189c40 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -141,34 +141,39 @@ "account.unmute": "@{name} némításának feloldása", "account.unmute_notifications_short": "Értesítések némításának feloldása", "account.unmute_short": "Némitás feloldása", + "account_edit.bio.edit_label": "Bemutatkozás szerkesztése", + "account_edit.bio.label": "bemutatkozás", "account_edit.bio.placeholder": "Adj meg egy rövid bemutatkozást, hogy mások könnyebben megtaláljanak.", "account_edit.bio.title": "Bemutatkozás", "account_edit.bio_modal.add_title": "Bemutatkozás hozzáadása", "account_edit.bio_modal.edit_title": "Bemutatkozás szerkesztése", - "account_edit.button.add": "{item} hozzáadása", - "account_edit.button.delete": "{item} törlése", - "account_edit.button.edit": "{item} szerkesztése", "account_edit.column_button": "Kész", "account_edit.column_title": "Profil szerkesztése", - "account_edit.custom_fields.name": "mező", + "account_edit.custom_fields.add_label": "Mező hozzáadása", + "account_edit.custom_fields.edit_label": "Mező szerkesztése", "account_edit.custom_fields.placeholder": "Add meg a névmásaidat, külső hivatkozásaidat vagy bármi mást, amelyet megosztanál.", "account_edit.custom_fields.reorder_button": "Mezők átrendezése", "account_edit.custom_fields.tip_content": "Könnyedén nagyobb hitelességet adhatsz a Mastodon-fiókodnak a saját weboldalaidra mutató hivatkozások megerősítésével.", "account_edit.custom_fields.tip_title": "Tipp: Ellenőrzött hivatkozások hozzáadása", "account_edit.custom_fields.title": "Egyéni mezők", "account_edit.custom_fields.verified_hint": "Hogyan kell ellenőrzött hivatkozást hozzáadni?", + "account_edit.display_name.add_label": "Megjelenítendő név hozzáadása", + "account_edit.display_name.edit_label": "Megjelenítendő név szerkesztése", "account_edit.display_name.placeholder": "A megjelenítendő név az, ahogy a neved megjelenik a profilodon és az idővonalakon.", "account_edit.display_name.title": "Megjelenítendő név", - "account_edit.featured_hashtags.item": "hashtagek", + "account_edit.featured_hashtags.edit_label": "Hashtagek hozzáadása", "account_edit.featured_hashtags.placeholder": "Segíts másoknak, hogy azonosíthassák a kedvenc témáid, és gyorsan elérjék azokat.", "account_edit.featured_hashtags.title": "Kiemelt hashtagek", + "account_edit.field_actions.delete": "Mező törlése", + "account_edit.field_actions.edit": "Mező szerkesztése", "account_edit.field_delete_modal.confirm": "Biztos, hogy törlöd ezt az egyéni mezőt? Ez a művelet nem vonható vissza.", "account_edit.field_delete_modal.delete_button": "Törlés", "account_edit.field_delete_modal.title": "Egyéni mező törlése?", "account_edit.field_edit_modal.add_title": "Egyéni mező hozzáadása", + "account_edit.field_edit_modal.discard_confirm": "Elvetés", + "account_edit.field_edit_modal.discard_message": "Nem mentett módosításaid vannak. Biztos, hogy elveted?", "account_edit.field_edit_modal.edit_title": "Egyéni mező szerkesztése", - "account_edit.field_edit_modal.limit_header": "Az ajánlott karakterkorlát túllépve", - "account_edit.field_edit_modal.limit_message": "A mobilos felhasználók lehet, hogy nem fogják a teljes mezőt látni.", + "account_edit.field_edit_modal.limit_warning": "Javasolt karakterkorlát túllépve. A mobilos felhasználók lehet, hogy nem fogják látni a teljes mezőt.", "account_edit.field_edit_modal.link_emoji_warning": "Nem javasoljuk az egyéni emodzsik és webcímek együttes használatát. A mindkettőt tartalmazó egyéni mezők a felhasználók megzavarásának elkerülése érdekében csak szövegként jelennek meg, nem hivatkozásként.", "account_edit.field_edit_modal.name_hint": "Például „Személyes webhely”", "account_edit.field_edit_modal.name_label": "Címke", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Helyettesítő szöveg szerkesztése", "account_edit.image_edit.remove_button": "Kép eltávolítása", "account_edit.image_edit.replace_button": "Kép cseréje", + "account_edit.item_list.delete": "{name} törlése", + "account_edit.item_list.edit": "{name} szerkesztése", "account_edit.name_modal.add_title": "Megjelenítendő név hozzáadása", "account_edit.name_modal.edit_title": "Megjelenítendő név szerkesztése", "account_edit.profile_tab.button_label": "Testreszabás", @@ -218,8 +225,11 @@ "account_edit.upload_modal.step_upload.button": "Fájlok tallózása", "account_edit.upload_modal.step_upload.dragging": "Ejtsd ide a feltöltéshez", "account_edit.upload_modal.step_upload.header": "Válassz egy képet", - "account_edit.upload_modal.title_add": "Profilkép hozzáadása", - "account_edit.upload_modal.title_replace": "Profilkép cseréje", + "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF vagy JPG formátum, legfeljebb {limit} MB.{br}A kép ekkorára lesz méretezve: {width}×{height} px.", + "account_edit.upload_modal.title_add.avatar": "Profilkép hozzáadása", + "account_edit.upload_modal.title_add.header": "Borítókép hozzáadása", + "account_edit.upload_modal.title_replace.avatar": "Profilkép cseréje", + "account_edit.upload_modal.title_replace.header": "Borítókép cseréje", "account_edit.verified_modal.details": "Növeld a Mastodon-profilod hitelességét a személyes webhelyekre mutató hivatkozások ellenőrzésével. Így működik:", "account_edit.verified_modal.invisible_link.details": "A hivatkozás hozzáadása a fejlécedhez. A fontos rész a rel=\"me\", mely megakadályozza, hogy mások a nevedben lépjenek fel olyan oldalakon, ahol van felhasználók által előállított tartalom. A(z) {tag} helyett a „link” címkét is használhatod az oldal fejlécében, de a HTML-nek elérhetőnek kell lennie JavaScript futtatása nélkül is.", "account_edit.verified_modal.invisible_link.summary": "Hogyan lehet egy hivatkozás láthatatlanná tenni?", @@ -228,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Saját webhely hozzáadása egyéni mezőként", "account_edit.verified_modal.title": "Hogyan kell ellenőrzött hivatkozást hozzáadni", "account_edit_tags.add_tag": "#{tagName} hozzáadása", - "account_edit_tags.column_title": "Kiemelt hashtagek szerkesztése", + "account_edit_tags.column_title": "Címkék szerkesztése", "account_edit_tags.help_text": "A kiemelt hashtagek segítenek a felhasználóknak abban, hogy interakcióba lépjenek a profiloddal. Szűrőként jelennek meg a Profil oldalad Tevékenység nézetében.", + "account_edit_tags.max_tags_reached": "Elérted a kiemelt hashtagek maximális számát.", "account_edit_tags.search_placeholder": "Hashtag megadása…", "account_edit_tags.suggestions": "Javaslatok:", "account_edit_tags.tag_status_count": "{count, plural, one {# bejegyzés} other {# bejegyzés}}", + "account_list.total": "{total, plural, one {# fiók} other {# fiók}}", "account_note.placeholder": "Kattintás jegyzet hozzáadásához", "admin.dashboard.daily_retention": "Napi regisztráció utáni felhasználómegtartási arány", "admin.dashboard.monthly_retention": "Havi regisztráció utáni felhasználómegtartási arány", @@ -627,6 +639,10 @@ "featured_carousel.header": "{count, plural, one {Kiemelt bejegyzés} other {Kiemelt bejegyzések}}", "featured_carousel.slide": "{current, number}. bejegyzés / {max, number}", "featured_tags.more_items": "+{count}", + "featured_tags.suggestions": "Mostanában ezekről osztottál meg dolgokat: {items}. Hozzáadod ezeket a kiemelt hashtagekhez?", + "featured_tags.suggestions.add": "Hozzáadás", + "featured_tags.suggestions.added": "Kezeld a kiemelt hashtageidet bármikor a Profil szerkesztése > Kiemelt hashtagek alatt.", + "featured_tags.suggestions.dismiss": "Nem, köszönöm", "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből elérted ezt a bejegyzést. Ha ebben a környezetben is szűrni szeretnéd a bejegyzést, akkor szerkesztened kell a szűrőt.", "filter_modal.added.context_mismatch_title": "Környezeti eltérés.", "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítanod kell az elévülési dátumot.", @@ -669,7 +685,9 @@ "follow_suggestions.who_to_follow": "Kit érdemes követni", "followed_tags": "Követett hashtagek", "followers.hide_other_followers": "Ez a felhasználó azt választotta, hogy ne legyenek láthatóak a követői", + "followers.title": "{name} követése", "following.hide_other_following": "Ez a felhasználó azt választotta, hogy ne legyenek láthatóak a követései", + "following.title": "{name} követi", "footer.about": "Névjegy", "footer.about_mastodon": "A Mastodonról", "footer.about_server": "A {domain} domainről", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 6606bef9b3..512102f6fa 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -141,34 +141,39 @@ "account.unmute": "Hætta að þagga niður í @{name}", "account.unmute_notifications_short": "Hætta að þagga í tilkynningum", "account.unmute_short": "Hætta að þagga niður", + "account_edit.bio.edit_label": "Breyta æviágripi", + "account_edit.bio.label": "æviágrip", "account_edit.bio.placeholder": "Settu inn stutta kynningu á þér svo aðrir eigi betur með að auðkenna þig.", "account_edit.bio.title": "Æviágrip", "account_edit.bio_modal.add_title": "Bættu við æviágripi", "account_edit.bio_modal.edit_title": "Breyta æviágripi", - "account_edit.button.add": "Bæta við {item}", - "account_edit.button.delete": "Eyða {item}", - "account_edit.button.edit": "Breyta {item}", "account_edit.column_button": "Lokið", "account_edit.column_title": "Breyta notandasniði", - "account_edit.custom_fields.name": "reitur", + "account_edit.custom_fields.add_label": "Bæta við reit", + "account_edit.custom_fields.edit_label": "Breyta reit", "account_edit.custom_fields.placeholder": "Settu inn fornöfn sem þú vilt nota, ytri tengla eða hvaðeina sem þú vilt deila með öðrum.", "account_edit.custom_fields.reorder_button": "Endurraða reitum", "account_edit.custom_fields.tip_content": "Þú getur á einfaldan hátt aukið trúverðugleika Mastodon-aðgangsins þíns með því að bæta við staðfestingartenglum sem vísa á vefsvæði sem þú átt.", "account_edit.custom_fields.tip_title": "Ábending: Bæta við staðfestingartenglum", "account_edit.custom_fields.title": "Sérsniðnir reitir", "account_edit.custom_fields.verified_hint": "Hvernig bæti ég við staðfestingartengli?", + "account_edit.display_name.add_label": "Bættu við birtingarnafni", + "account_edit.display_name.edit_label": "Breyta birtingarnafni", "account_edit.display_name.placeholder": "Birtingarnafn er það sem birtist sem nafnið þitt á notandasniðinu þínu og í tímalínum.", "account_edit.display_name.title": "Birtingarnafn", - "account_edit.featured_hashtags.item": "myllumerki", + "account_edit.featured_hashtags.edit_label": "Bæta við myllumerkjum", "account_edit.featured_hashtags.placeholder": "Hjálpaðu öðrum að sjá og komast í eftirlætis-umfjöllunarefnin þín.", "account_edit.featured_hashtags.title": "Myllumerki með aukið vægi", + "account_edit.field_actions.delete": "Eyða reit", + "account_edit.field_actions.edit": "Breyta reit", "account_edit.field_delete_modal.confirm": "Ertu viss um að þú viljir eyða þessum sérsniðna reit? Þessa aðgerð er ekki hægt að afturkalla.", "account_edit.field_delete_modal.delete_button": "Eyða", "account_edit.field_delete_modal.title": "Eyða sérsniðnum reit?", "account_edit.field_edit_modal.add_title": "Bæta við sérsniðnum reit", + "account_edit.field_edit_modal.discard_confirm": "Henda", + "account_edit.field_edit_modal.discard_message": "Þú ert með óvistaðar breytingar, ertu viss um að þú viljir henda þeim?", "account_edit.field_edit_modal.edit_title": "Breyta sérsniðnum reit", - "account_edit.field_edit_modal.limit_header": "Fór yfir takmörk á fjölda stafa", - "account_edit.field_edit_modal.limit_message": "Notendur á símtækjum gætu lent því að sjá ekki allan reitinn.", + "account_edit.field_edit_modal.limit_warning": "Hámarksfjölda stafa er náð. Farsímanotendur ná mögulega ekki að sjá allan reitinn hjá þér.", "account_edit.field_edit_modal.link_emoji_warning": "Við mælum gegn því að nota sérsniðin tjáningartákn saman með vefslóðum. Sérsniðnir reitir sem innihalda hvort tveggja munu birtast sem einungis texti í stað þess að vera tenglar, til að koma í veg fyrir að notendur taki annað í misgripum fyrir hitt.", "account_edit.field_edit_modal.name_hint": "T.d. \"Eigið vefsvæði\"", "account_edit.field_edit_modal.name_label": "Skýring", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Breyta hjálpartexta", "account_edit.image_edit.remove_button": "Fjarlægja mynd", "account_edit.image_edit.replace_button": "Skipta um mynd", + "account_edit.item_list.delete": "Eyða {name}", + "account_edit.item_list.edit": "Breyta {name}", "account_edit.name_modal.add_title": "Bættu við birtingarnafni", "account_edit.name_modal.edit_title": "Breyta birtingarnafni", "account_edit.profile_tab.button_label": "Sérsníða", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Slepptu til að senda inn", "account_edit.upload_modal.step_upload.header": "Veldu mynd", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF eða JPG-snið, allt að {limit}MB.{br}Mynd verður kvörðuð í {width}x{height}px.", - "account_edit.upload_modal.title_add": "Bæta við auðkennismynd", - "account_edit.upload_modal.title_replace": "Skipta um auðkennismynd", + "account_edit.upload_modal.title_add.avatar": "Bæta við auðkennismynd", + "account_edit.upload_modal.title_add.header": "Bæta við mynd í haus", + "account_edit.upload_modal.title_replace.avatar": "Skipta um auðkennismynd", + "account_edit.upload_modal.title_replace.header": "Skipta um mynd í haus", "account_edit.verified_modal.details": "Auktu trúverðugleika Mastodon-aðgangsins þíns með því að bæta við staðfestingartenglum sem vísa á vefsvæðin þín. Hérna sérðu hvernig það virkar:", "account_edit.verified_modal.invisible_link.details": "Bættu tenglinum í hausinn hjá þér. Mikilvægi hlutinn er rel=\"me\" sem kemur í veg fyrir blekkingu verðandi persónuauðkenni á vefsvæðum með notandaframleiddu efni. Þú getur jafnvel notað tengimerkið í haus síðunnar í staðinn fyrir {tag}, en HTML-kóðinn verður samt að vera aðgengilegur án þess að keyra þurfi JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Hvernig geri ég tengilinn ósýnilegan?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Bættu vefsvæðinu þínu inn sem sérsniðinn reit", "account_edit.verified_modal.title": "Hvernig er hægt að bæta við staðfestingartengli", "account_edit_tags.add_tag": "Bæta við #{tagName}", - "account_edit_tags.column_title": "Breyta myllumerkjum með aukið vægi", + "account_edit_tags.column_title": "Breyta merkjum", "account_edit_tags.help_text": "Myllumerki með aukið vægi hjálpa lesendum að finna og eiga við notandasíðuna þína. Þau birtast sem síur í virkniflipa notandasíðunnar þinnar.", + "account_edit_tags.max_tags_reached": "Þú hefur náð hámarksfjölda myllumerkja með aukið vægi.", "account_edit_tags.search_placeholder": "Settu inn myllumerki…", "account_edit_tags.suggestions": "Tillögur:", "account_edit_tags.tag_status_count": "{count, plural, one {# færsla} other {# færslur}}", + "account_list.total": "{total, plural, one {# aðgangur} other {# aðgangar}}", "account_note.placeholder": "Smelltu til að bæta við minnispunkti", "admin.dashboard.daily_retention": "Hlutfall virkra notenda eftir nýskráningu eftir dögum", "admin.dashboard.monthly_retention": "Hlutfall virkra notenda eftir nýskráningu eftir mánuðum", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Hverjum á að fylgjast með", "followed_tags": "Vöktuð myllumerki", "followers.hide_other_followers": "Þessi notandi hefur valið að gera ekki sýnilega aðra fylgjendur sína", + "followers.title": "Fylgist með {name}", "following.hide_other_following": "Þessi notandi hefur valið að gera ekki sýnilega aðra þá sem þeir fylgjast með", + "following.title": "Fylgt af {name}", "footer.about": "Nánari upplýsingar", "footer.about_mastodon": "Um Mastodon", "footer.about_server": "Um {domain}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 10c44a7b49..f8bd1f1039 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -141,34 +141,39 @@ "account.unmute": "Riattiva @{name}", "account.unmute_notifications_short": "Riattiva notifiche", "account.unmute_short": "Attiva audio", + "account_edit.bio.edit_label": "Modifica la biografia", + "account_edit.bio.label": "biografia", "account_edit.bio.placeholder": "Aggiungi una breve introduzione per aiutare gli altri a identificarti.", "account_edit.bio.title": "Biografia", "account_edit.bio_modal.add_title": "Aggiungi biografia", "account_edit.bio_modal.edit_title": "Modifica la biografia", - "account_edit.button.add": "Aggiungi {item}", - "account_edit.button.delete": "Elimina {item}", - "account_edit.button.edit": "Modifica {item}", "account_edit.column_button": "Fatto", "account_edit.column_title": "Modifica il profilo", - "account_edit.custom_fields.name": "campo", + "account_edit.custom_fields.add_label": "Aggiungi un campo", + "account_edit.custom_fields.edit_label": "Modifica il campo", "account_edit.custom_fields.placeholder": "Aggiungi i tuoi pronomi, collegamenti esterni o qualsiasi altra cosa desideri condividere.", "account_edit.custom_fields.reorder_button": "Riordina i campi", "account_edit.custom_fields.tip_content": "Puoi facilmente aggiungere credibilità al tuo account Mastodon, verificando i collegamenti a qualsiasi sito web di tua proprietà.", "account_edit.custom_fields.tip_title": "Suggerimento: aggiunta di collegamenti verificati", "account_edit.custom_fields.title": "Campi personalizzati", "account_edit.custom_fields.verified_hint": "Come aggiungo un collegamento verificato?", + "account_edit.display_name.add_label": "Aggiungi il nome visualizzato", + "account_edit.display_name.edit_label": "Modifica il nome visualizzato", "account_edit.display_name.placeholder": "Il tuo nome mostrato è il modo in cui il tuo nome appare sul tuo profilo e nelle timeline.", "account_edit.display_name.title": "Nome mostrato", - "account_edit.featured_hashtags.item": "hashtag", + "account_edit.featured_hashtags.edit_label": "Aggiungi hashtag", "account_edit.featured_hashtags.placeholder": "Aiuta gli altri a identificare e ad accedere rapidamente ai tuoi argomenti preferiti.", "account_edit.featured_hashtags.title": "Hashtag in evidenza", + "account_edit.field_actions.delete": "Elimina il campo", + "account_edit.field_actions.edit": "Modifica il campo", "account_edit.field_delete_modal.confirm": "Si è sicuri di voler eliminare questo campo personalizzato? Questa azione non può essere annullata.", "account_edit.field_delete_modal.delete_button": "Elimina", "account_edit.field_delete_modal.title": "Eliminare il campo personalizzato?", "account_edit.field_edit_modal.add_title": "Aggiungi campo personalizzato", + "account_edit.field_edit_modal.discard_confirm": "Abbandona", + "account_edit.field_edit_modal.discard_message": "Sono presenti modifiche non salvate. Vuoi davvero eliminarle?", "account_edit.field_edit_modal.edit_title": "Modifica campo personalizzato", - "account_edit.field_edit_modal.limit_header": "Superato il limite di caratteri consigliato", - "account_edit.field_edit_modal.limit_message": "Gli utenti dai dispositivi mobili potrebbero non visualizzare completamente il tuo campo.", + "account_edit.field_edit_modal.limit_warning": "Il limite di caratteri raccomandato è stato superato. Gli utenti da dispositivi mobili potrebbero non visualizzare il tuo campo per intero.", "account_edit.field_edit_modal.link_emoji_warning": "Sconsigliamo l'uso di emoji personalizzate in combinazione con gli URL. I campi personalizzati che contengono entrambi verranno visualizzati solo come testo anziché come link, in modo da evitare confusione nell'utente.", "account_edit.field_edit_modal.name_hint": "Per esempio: “Sito web personale”", "account_edit.field_edit_modal.name_label": "Etichetta", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Modifica il testo alternativo", "account_edit.image_edit.remove_button": "Rimuovi l'immagine", "account_edit.image_edit.replace_button": "Sostituisci l'immagine", + "account_edit.item_list.delete": "Elimina {name}", + "account_edit.item_list.edit": "Modifica {name}", "account_edit.name_modal.add_title": "Aggiungi il nome mostrato", "account_edit.name_modal.edit_title": "Modifica il nome mostrato", "account_edit.profile_tab.button_label": "Personalizza", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Trascina per caricare", "account_edit.upload_modal.step_upload.header": "Scegli un'immagine", "account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, fino a {limit}MB.{br}L'immagine verrà ridimensionata a {width}x{height}px.", - "account_edit.upload_modal.title_add": "Aggiungi la foto del profilo", - "account_edit.upload_modal.title_replace": "Sostituisci la foto del profilo", + "account_edit.upload_modal.title_add.avatar": "Aggiungi la foto del profilo", + "account_edit.upload_modal.title_add.header": "Aggiungi la foto di copertina", + "account_edit.upload_modal.title_replace.avatar": "Sostituisci la foto del profilo", + "account_edit.upload_modal.title_replace.header": "Sostituisci la foto di copertina", "account_edit.verified_modal.details": "Aggiungi credibilità al tuo profilo Mastodon verificando i collegamenti ai siti web personali. Ecco come funziona:", "account_edit.verified_modal.invisible_link.details": "Aggiungi il collegamento alla tua intestazione. La parte importante è rel=\"me\" che impedisce l'impersonificazione sui siti web con contenuti generati dagli utenti. Puoi anche utilizzare un link tag nell'intestazione della pagina al posto di {tag}, ma il codice HTML deve essere accessibile senza eseguire JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Come faccio a rendere il collegamento invisibile?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Aggiungi il tuo sito web come campo personalizzato", "account_edit.verified_modal.title": "Come aggiungere un collegamento verificato", "account_edit_tags.add_tag": "Aggiungi #{tagName}", - "account_edit_tags.column_title": "Modifica gli hashtag in evidenza", + "account_edit_tags.column_title": "Modifica i tag", "account_edit_tags.help_text": "Gli hashtag in evidenza aiutano gli utenti a scoprire e interagire con il tuo profilo. Appaiono come filtri nella visualizzazione Attività della tua pagina del profilo.", + "account_edit_tags.max_tags_reached": "Hai raggiunto il numero massimo di hashtag in evidenza.", "account_edit_tags.search_placeholder": "Inserisci un hashtag…", "account_edit_tags.suggestions": "Suggerimenti:", "account_edit_tags.tag_status_count": "{count, plural, one {# post} other {# post}}", + "account_list.total": "{total, plural, one {# account} other {# account}}", "account_note.placeholder": "Clicca per aggiungere una nota", "admin.dashboard.daily_retention": "Tasso di ritenzione dell'utente per giorno, dopo la registrazione", "admin.dashboard.monthly_retention": "Tasso di ritenzione dell'utente per mese, dopo la registrazione", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Chi seguire", "followed_tags": "Hashtag seguiti", "followers.hide_other_followers": "Questo/a utente ha scelto di non rendere visibili gli altri suoi follower", + "followers.title": "Stai seguendo {name}", "following.hide_other_following": "Questo/a utente ha scelto di non rendere visibile il resto dei profili che segue", + "following.title": "Seguito/a da {name}", "footer.about": "Info", "footer.about_mastodon": "Riguardo Mastodon", "footer.about_server": "Riguardo {domain}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 953fa1fb91..297ed3068e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -123,9 +123,6 @@ "account_edit.bio.title": "자기소개", "account_edit.bio_modal.add_title": "자기소개 추가", "account_edit.bio_modal.edit_title": "자기소개 편집", - "account_edit.button.add": "{item} 추가", - "account_edit.button.delete": "{item} 제거", - "account_edit.button.edit": "{item} 편집", "account_edit.column_button": "완료", "account_edit.column_title": "프로필 편집", "account_note.placeholder": "클릭하여 노트 추가", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index f26df41d4f..6da1010d08 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "個人紹介", "account_edit.bio_modal.add_title": "加添個人紹介", "account_edit.bio_modal.edit_title": "編個人紹介", - "account_edit.button.add": "加 {item}", - "account_edit.button.delete": "Thâi {item}", - "account_edit.button.edit": "編 {item}", "account_edit.column_button": "做好ah", "account_edit.column_title": "編輯個人資料", - "account_edit.custom_fields.name": "框á", "account_edit.custom_fields.placeholder": "加lí ê代名詞、外部連結,á是其他lí beh分享ê。", "account_edit.custom_fields.reorder_button": "重排框á", "account_edit.custom_fields.tip_content": "Lí通用驗證連kàu lí 所有ê網站ê連結,來增加lí ê Mastodon口座ê通信ê程度。", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "我beh án-tsuánn加驗證過ê連結?", "account_edit.display_name.placeholder": "Lí ê顯示ê名是lí ê名佇lí ê個人資料kap時間線出現ê方式。", "account_edit.display_name.title": "顯示ê名", - "account_edit.featured_hashtags.item": "hashtag", "account_edit.featured_hashtags.placeholder": "幫tsān別lâng認捌,kap緊緊接近使用lí收藏ê主題。", "account_edit.featured_hashtags.title": "特色ê hashtag", "account_edit.field_delete_modal.confirm": "Lí敢確定beh thâi掉tsit ê自訂ê框á?Tsit ê動作bē當改倒轉。", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "敢beh thâi掉自訂ê框á?", "account_edit.field_edit_modal.add_title": "加自訂ê框á", "account_edit.field_edit_modal.edit_title": "編自訂ê框á", - "account_edit.field_edit_modal.limit_header": "超過建議ê字數限制ah", - "account_edit.field_edit_modal.limit_message": "行動設備ê用者有可能bē當看著lí所有ê框á。", "account_edit.field_edit_modal.link_emoji_warning": "Lán無建議佇URL內底用自訂ê emoji。為著避免用者舞花去,自訂ê框á若包含自訂emoji kap URL,kan-ta ē顯示做文字。", "account_edit.field_edit_modal.name_hint": "例:「個人網站」", "account_edit.field_edit_modal.name_label": "標簽", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Giú kàu tsia傳上去", "account_edit.upload_modal.step_upload.header": "揀圖片", "account_edit.upload_modal.step_upload.hint": "WEBP、PNG、GIF á是 JPG 格式,上大 {limit}MB。{br}圖會伸kiu kàu {width}x{height} px。", - "account_edit.upload_modal.title_add": "加個人資料ê相", - "account_edit.upload_modal.title_replace": "替換個人資料ê相", "account_edit.verified_modal.details": "用驗證連kàu個人網站ê連結來加添lí ê Mastodon個人檔案ê通信ê程度。下kha是運作ê方法:", "account_edit.verified_modal.invisible_link.details": "加連結kàu lí ê網頁頭(header)。上重要ê部份是 rel=\"me\",伊防止通過用者生成ê網站內容來做假包。Lí甚至佇網頁ê header毋免用 {tag},反轉用link標簽,但是HTML定著佇無執行JavaScript ê時陣,就ē當接近使用。", "account_edit.verified_modal.invisible_link.summary": "Án-tsuánn khàm掉tsit ê連結?", @@ -229,7 +220,6 @@ "account_edit.verified_modal.step2.header": "Kā lí ê網站加做自訂ê框á", "account_edit.verified_modal.title": "Án-tsuánn加驗證過ê連結", "account_edit_tags.add_tag": "加 #{tagName}", - "account_edit_tags.column_title": "編收藏ê hashtag", "account_edit_tags.help_text": "收藏ê hashtag幫tsān用者發現kap hām lí ê個人資料互動。In會成做過濾器,佇lí ê個人資料頁ê活動內底出現。", "account_edit_tags.search_placeholder": "編輯hashtag……", "account_edit_tags.suggestions": "建議:", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 3be1d09814..d53f17eb65 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Biografie", "account_edit.bio_modal.add_title": "Biografie toevoegen", "account_edit.bio_modal.edit_title": "Biografie bewerken", - "account_edit.button.add": "{item} toevoegen", - "account_edit.button.delete": "{item} verwijderen", - "account_edit.button.edit": "{item} bewerken", "account_edit.column_button": "Klaar", "account_edit.column_title": "Profiel bewerken", - "account_edit.custom_fields.name": "veld", "account_edit.custom_fields.placeholder": "Voeg je voornaamwoorden, externe links of iets anders toe dat je wilt delen.", "account_edit.custom_fields.reorder_button": "Velden opnieuw ordenen", "account_edit.custom_fields.tip_content": "Je kunt gemakkelijk je Mastodon-account geloofwaardig maken door links naar websites die van jou zijn te laten verifiëren.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Hoe voeg ik een geverifieerde link toe?", "account_edit.display_name.placeholder": "Je weergavenaam wordt op jouw profiel en op tijdlijnen weergegeven.", "account_edit.display_name.title": "Weergavenaam", - "account_edit.featured_hashtags.item": "hashtags", "account_edit.featured_hashtags.placeholder": "Geef anderen een overzicht van en snel toegang tot je favoriete onderwerpen.", "account_edit.featured_hashtags.title": "Uitgelichte hashtags", "account_edit.field_delete_modal.confirm": "Weet je zeker dat je dit aangepaste veld wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Aangepast veld verwijderen?", "account_edit.field_edit_modal.add_title": "Aangepast veld toevoegen", "account_edit.field_edit_modal.edit_title": "Aangepast veld bewerken", - "account_edit.field_edit_modal.limit_header": "Aanbevolen tekenlimiet overschreden", - "account_edit.field_edit_modal.limit_message": "Mobiele gebruikers zien mogelijk het veld niet volledig.", "account_edit.field_edit_modal.link_emoji_warning": "We raden aan om geen lokale emoji in combinatie met URL's te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven, in plaats van als een link. Dit om verwarring voor de gebruiker te voorkomen.", "account_edit.field_edit_modal.name_hint": "Bijv. \"Persoonlijke website\"", "account_edit.field_edit_modal.name_label": "Label", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Hierheen slepen om te uploaden", "account_edit.upload_modal.step_upload.header": "Kies een afbeelding", "account_edit.upload_modal.step_upload.hint": "WEBP-, PNG-, GIF- of JPG-formaat, tot max. {limit}MB.{br}Afbeelding wordt geschaald naar {width}x{height}px.", - "account_edit.upload_modal.title_add": "Profielfoto toevoegen", - "account_edit.upload_modal.title_replace": "Profielfoto vervangen", "account_edit.verified_modal.details": "Maak je Mastodonprofiel geloofwaardig door links naar persoonlijke websites te verifiëren. Zo werkt het:", "account_edit.verified_modal.invisible_link.details": "Voeg de link aan de HTML van je website toe. Het belangrijkste onderdeel is rel=\"me\", waarmee wordt voorkomen dat websites met user-generated content geïmpersoneerd kunnen worden. Je kunt zelfs een -tag gebruiken binnen de -tag van je website in plaats van {tag}, maar de HTML moet zonder JavaScript toegankelijk zijn.", "account_edit.verified_modal.invisible_link.summary": "Hoe maak ik de link onzichtbaar?", @@ -229,7 +220,6 @@ "account_edit.verified_modal.step2.header": "Voeg je website toe als een aangepast veld", "account_edit.verified_modal.title": "Hoe voeg je een geverifieerde link toe", "account_edit_tags.add_tag": "#{tagName} toevoegen", - "account_edit_tags.column_title": "Uitgelichte hashtags bewerken", "account_edit_tags.help_text": "Uitgelichte hashtags helpen gebruikers je profiel te ontdekken en om er interactie mee te communiceren. Ze verschijnen als filters op je Profielpagina onder het tabblad Activiteit.", "account_edit_tags.search_placeholder": "Voer een hashtag in…", "account_edit_tags.suggestions": "Suggesties:", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index feb88565f8..ccbe737040 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Om meg", "account_edit.bio_modal.add_title": "Skriv om deg sjølv", "account_edit.bio_modal.edit_title": "Endre bio", - "account_edit.button.add": "Legg til {item}", - "account_edit.button.delete": "Slett {item}", - "account_edit.button.edit": "Rediger {item}", "account_edit.column_button": "Ferdig", "account_edit.column_title": "Rediger profil", - "account_edit.custom_fields.name": "felt", "account_edit.custom_fields.placeholder": "Legg til pronomen, lenkjer eller kva du elles vil dela.", "account_edit.custom_fields.reorder_button": "Omorganiser felt", "account_edit.custom_fields.tip_content": "Du kan auka truverdet til Mastodon-kontoen din ved å stadfesta lenker til nettstader du eig.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Korleis legg eg til ei stadfesta lenke?", "account_edit.display_name.placeholder": "Det synlege namnet ditt er det som syner på profilen din og i tidsliner.", "account_edit.display_name.title": "Synleg namn", - "account_edit.featured_hashtags.item": "emneknaggar", "account_edit.featured_hashtags.placeholder": "Hjelp andre å finna og få rask tilgang til favorittemna dine.", "account_edit.featured_hashtags.title": "Utvalde emneknaggar", "account_edit.field_delete_modal.confirm": "Vil du sletta dette tilpassa feltet? Du kan ikkje angra.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Slett tilpassa felt?", "account_edit.field_edit_modal.add_title": "Legg til eit tilpassa felt", "account_edit.field_edit_modal.edit_title": "Rediger tilpassa felt", - "account_edit.field_edit_modal.limit_header": "Over maksgrensa for teikn", - "account_edit.field_edit_modal.limit_message": "Det er ikkje sikkert mobilbrukarar ser heile feltet ditt.", "account_edit.field_edit_modal.link_emoji_warning": "Me rår frå å bruka eigne smilefjes kombinert med adresser. Tilpassa felt som inneheld båe, vil syna som berre tekst i staden for ei lenke, slik at lesarane ikkje blir forvirra.", "account_edit.field_edit_modal.name_hint": "Til dømes «Personleg nettstad»", "account_edit.field_edit_modal.name_label": "Etikett", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Slepp for å lasta opp", "account_edit.upload_modal.step_upload.header": "Vel eit bilete", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF eller JPG-format, opp til {limit}MB.{br}Biletet blir skalert til {width}*{height} punkt.", - "account_edit.upload_modal.title_add": "Legg til profilbilete", - "account_edit.upload_modal.title_replace": "Byt ut profilbilete", "account_edit.verified_modal.details": "Auk truverdet til Mastodon-profilen din ved å stadfesta lenker til personlege nettstader. Slik verkar det:", "account_edit.verified_modal.invisible_link.details": "Den viktige delen er rel=\"me\", som på nettstader med brukargenerert innhald vil hindra at andre kan låst som dei er deg. Du kan til og med bruka link i staden for {tag} i toppteksten til sida, men HTML-koden må vera tilgjengeleg utan å måtte køyra JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Korleis gjer eg lenka usynleg?", @@ -229,7 +220,6 @@ "account_edit.verified_modal.step2.header": "Legg til nettstaden din som eige felt", "account_edit.verified_modal.title": "Korleis legg eg til ei stadfesta lenke", "account_edit_tags.add_tag": "Legg til #{tagName}", - "account_edit_tags.column_title": "Rediger utvalde emneknaggar", "account_edit_tags.help_text": "Utvalde emneknaggar hjelper folk å oppdaga og samhandla med profilen din. Dei blir viste som filter på aktivitetsoversikta på profilsida di.", "account_edit_tags.search_placeholder": "Skriv ein emneknagg…", "account_edit_tags.suggestions": "Framlegg:", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index c1a1e33e84..7177317f32 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -139,12 +139,8 @@ "account.unmute_notifications_short": "Opphev demping av varsler", "account.unmute_short": "Opphev demping", "account_edit.bio.placeholder": "Legg til en kort introduksjon for å hjelpe andre med å identifisere deg.", - "account_edit.button.add": "Legg til {item}", - "account_edit.button.delete": "Slett {item}", - "account_edit.button.edit": "Rediger {item}", "account_edit.column_button": "Ferdig", "account_edit.column_title": "Rediger profil", - "account_edit.custom_fields.name": "felt", "account_edit.custom_fields.reorder_button": "Omorganiser felter", "account_edit.custom_fields.tip_content": "Du kan enkelt øke troverdighet til Mastodon-kontoen din ved å verifisere koblinger til nettsider du eier.", "account_edit.custom_fields.tip_title": "Legg til bekreftede lenker", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index a00a2ab6c1..d8a861bc37 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -90,7 +90,6 @@ "account.unmute_notifications_short": "Restablir las notificacions", "account.unmute_short": "Tornar afichar", "account_edit.column_title": "Modificar lo perfil", - "account_edit.custom_fields.name": "camp", "account_edit.field_delete_modal.delete_button": "Suprimir", "account_edit.field_edit_modal.value_label": "Valor", "account_note.placeholder": "Clicar per ajustar una nòta", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 03e356313e..b0b49bc117 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -141,34 +141,39 @@ "account.unmute": "Dessilenciar @{name}", "account.unmute_notifications_short": "Ativar som de notificações", "account.unmute_short": "Desativar silêncio", + "account_edit.bio.edit_label": "Editar Biografia", + "account_edit.bio.label": "biografia", "account_edit.bio.placeholder": "Insira uma breve introdução para ajudar os outros a lhe identificar.", "account_edit.bio.title": "Bio", "account_edit.bio_modal.add_title": "Adicionar biografia", "account_edit.bio_modal.edit_title": "Editar biografia", - "account_edit.button.add": "Adicionar {item}", - "account_edit.button.delete": "Remover {item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Feito", "account_edit.column_title": "Editar perfil", - "account_edit.custom_fields.name": "Campo", + "account_edit.custom_fields.add_label": "Acrescentar campo", + "account_edit.custom_fields.edit_label": "Editar campo", "account_edit.custom_fields.placeholder": "Insira seus pronomes, links externos ou qualquer coisa que queira compartilhar.", "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Você pode facilmente dar credibilidade à sua conta Mastodon verificando os links para os seus sites.", "account_edit.custom_fields.tip_title": "Dica: Adicionando links verificados", "account_edit.custom_fields.title": "Campos personalizados", "account_edit.custom_fields.verified_hint": "Como adiciono um link verificado?", + "account_edit.display_name.add_label": "Acrescentar nome de exibição", + "account_edit.display_name.edit_label": "Editar nome de exibição", "account_edit.display_name.placeholder": "Seu nome de exibição é a forma com que seu nome aparece em seu perfil e em suas linhas do tempo.", "account_edit.display_name.title": "Nome de exibição", - "account_edit.featured_hashtags.item": "hashtags", + "account_edit.featured_hashtags.edit_label": "Acrescentar hashtags", "account_edit.featured_hashtags.placeholder": "Ajude outros a identificar e ter acesso rápido a seus tópicos favoritos.", "account_edit.featured_hashtags.title": "Hashtags em destaque", + "account_edit.field_actions.delete": "Remover campo", + "account_edit.field_actions.edit": "Editar campo", "account_edit.field_delete_modal.confirm": "Tem certeza que deseja excluir este campo personalizado? Esta ação não pode ser desfeita.", "account_edit.field_delete_modal.delete_button": "Excluir", "account_edit.field_delete_modal.title": "Excluir campo personalizado?", "account_edit.field_edit_modal.add_title": "Adicionar campo personalizado", + "account_edit.field_edit_modal.discard_confirm": "Descartar", + "account_edit.field_edit_modal.discard_message": "Você possui alterações não salvas. Tem certeza de que deseja descartá-las?", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", - "account_edit.field_edit_modal.limit_header": "Limite recomendado de caracteres excedido", - "account_edit.field_edit_modal.limit_message": "Usuários de dispositivos móveis podem não ver seu campo completo.", + "account_edit.field_edit_modal.limit_warning": "Excedido o limite recomendado de caracteres. Usuários de dispositivos móveis podem não ver seu campo completamente.", "account_edit.field_edit_modal.link_emoji_warning": "Recomendamos não utilizar emojis personalizados combinados com URLs. Campos personalizados contendo ambos serão exibidos apenas como texto em vez de link, para evitar confusão dos usuários.", "account_edit.field_edit_modal.name_hint": "Ex. \"Site pessoal\"", "account_edit.field_edit_modal.name_label": "Descrição", @@ -177,6 +182,19 @@ "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "O arrasto foi cancelado. O campo \"{item}\" foi descartado.", "account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi descartado.", + "account_edit.field_reorder_modal.drag_instructions": "Para reordenar campos personalizados, pressione espaço ou enter. Enquanto arrasta, utilize as teclas de seta para mover o campo para cima ou para baixo. Pressione espaço ou enter novamente para colocar o campo em sua nova posição, ou pressione Esc para cancelar.", + "account_edit.field_reorder_modal.drag_move": "Campo \"{item}\" foi movido.", + "account_edit.field_reorder_modal.drag_over": "Campo \"{item}\" foi movido para \"{over}\".", + "account_edit.field_reorder_modal.drag_start": "Campo \"{item}\" foi pego.", + "account_edit.field_reorder_modal.handle_label": "Arrastar campo \"{item}\"", + "account_edit.field_reorder_modal.title": "Reordenar campos", + "account_edit.image_alt_modal.add_title": "Acrescentar texto alternativo", + "account_edit.image_alt_modal.details_content": "FAÇA: NÃO FAÇA: EXEMPLO:", + "account_edit.image_alt_modal.details_title": "Dicas: Texto alternativo para fotos", + "account_edit.image_alt_modal.edit_title": "Editar texto alternativo", + "account_edit.image_alt_modal.text_hint": "Texto alternativo ajuda leitores de tela a entender seu conteúdo.", + "account_edit.image_alt_modal.text_label": "Texto alternativo", + "account_edit.image_delete_modal.confirm": "Tem certeza de que deseja excluir esta imagem? Esta ação não pode ser desfeita.", "account_edit.name_modal.add_title": "Inserir nome de exibição", "account_edit.name_modal.edit_title": "Editar nome de exibição", "account_edit.profile_tab.button_label": "Personalizar", @@ -198,7 +216,6 @@ "account_edit.verified_modal.step2.header": "Adicione seu site como um campo personalizado", "account_edit.verified_modal.title": "Como adicionar um link verificado", "account_edit_tags.add_tag": "Adicionar #{tagName}", - "account_edit_tags.column_title": "Editar hashtags em destaque", "account_edit_tags.help_text": "Hashtags em destaque ajudam os usuários a descobrir e interagir com seu perfil. Elas aparecem como filtros na visualização de Atividade da sua página de Perfil.", "account_edit_tags.search_placeholder": "Insira uma hashtag…", "account_edit_tags.suggestions": "Sugestões:", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index d51565bb25..62339bf622 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Bio", "account_edit.bio_modal.add_title": "Adicionar biografia", "account_edit.bio_modal.edit_title": "Editar biografia", - "account_edit.button.add": "Adicionar {item}", - "account_edit.button.delete": "Eliminar \"{item}", - "account_edit.button.edit": "Editar {item}", "account_edit.column_button": "Concluído", "account_edit.column_title": "Editar Perfil", - "account_edit.custom_fields.name": "campo", "account_edit.custom_fields.placeholder": "Adicione os seus pronomes, hiperligações externas ou qualquer outra coisa que queira partilhar.", "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Pode adicionar facilmente credibilidade à sua conta Mastodon, verificando ligações para qualquer website que possua.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Como adiciono um link verificado?", "account_edit.display_name.placeholder": "O seu nome de exibição é como o seu nome aparece no seu perfil e nas linhas do tempo.", "account_edit.display_name.title": "Nome a mostrar", - "account_edit.featured_hashtags.item": "etiquetas", "account_edit.featured_hashtags.placeholder": "Ajude à sua identificação por outros e tenha acesso rápido aos seus tópicos favoritos.", "account_edit.featured_hashtags.title": "Etiquetas em destaque", "account_edit.field_delete_modal.confirm": "Tem certeza de que deseja excluir este campo personalizado? Esta ação não pode ser desfeita.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Excluir campo personalizado?", "account_edit.field_edit_modal.add_title": "Adicionar campo personalizado", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", - "account_edit.field_edit_modal.limit_header": "Limite de caracteres recomendado excedido", - "account_edit.field_edit_modal.limit_message": "Os utilizadores de dispositivos móveis podem não conseguir ver o seu campo na totalidade.", "account_edit.field_edit_modal.link_emoji_warning": "Não recomendamos o uso de emojis personalizados em combinação com URLs. Campos personalizados que contenham ambos serão exibidos apenas como texto, em vez de como hiperligação, para evitar confusão aos utilizadores.", "account_edit.field_edit_modal.name_hint": "Ex.: \"Site pessoal\"", "account_edit.field_edit_modal.name_label": "Rótulo", @@ -214,8 +207,6 @@ "account_edit.upload_modal.step_upload.button": "Explorar ficheiros", "account_edit.upload_modal.step_upload.dragging": "Solte para transferir", "account_edit.upload_modal.step_upload.header": "Escolha uma imagem", - "account_edit.upload_modal.title_add": "Adicionar foto de perfil", - "account_edit.upload_modal.title_replace": "Substituir foto de perfil", "account_edit.verified_modal.details": "Adicione credibilidade ao seu perfil no Mastodon verificando links para sites pessoais. Veja como funciona:", "account_edit.verified_modal.invisible_link.details": "Adicione o link ao seu cabeçalho. A parte importante é rel=\"me\", que evita a personificação em sites com conteúdo gerado por utilizadores. Você também pode usar uma tag de link no cabeçalho da página em vez de {tag}, mas o HTML deve ser acessível sem executar JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Como faço para tornar o link invisível?", @@ -224,7 +215,6 @@ "account_edit.verified_modal.step2.header": "Adicione o seu site como um campo personalizado", "account_edit.verified_modal.title": "Como adicionar um link verificado", "account_edit_tags.add_tag": "Adicionar #{tagName}", - "account_edit_tags.column_title": "Editar etiquetas em destaque", "account_edit_tags.help_text": "As etiquetas destacadas ajudam os utilizadores a descobrir e interagir com o seu perfil. Aparecem como filtros na vista de atividade da sua página de perfil.", "account_edit_tags.search_placeholder": "Insira uma etiqueta…", "account_edit_tags.suggestions": "Sugestões:", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 076830d3f3..b65762ddf6 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -141,34 +141,39 @@ "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications_short": "Shfaqi njoftimet", "account.unmute_short": "Çheshtoje", + "account_edit.bio.edit_label": "Përpunoni jetëshkrim", + "account_edit.bio.label": "jetëshkrim", "account_edit.bio.placeholder": "Shtoni një hyrje të shkurtër për të ndihmuar të tjerët t’ju identifikojnë.", "account_edit.bio.title": "Jetëshkrim", "account_edit.bio_modal.add_title": "Shtoni jetëshkrim", "account_edit.bio_modal.edit_title": "Përpunoni jetëshkrim", - "account_edit.button.add": "Shtoje {item}", - "account_edit.button.delete": "Fshije {item}", - "account_edit.button.edit": "Përpunojeni {item}", "account_edit.column_button": "U bë", "account_edit.column_title": "Përpunoni Profil", - "account_edit.custom_fields.name": "fushë", + "account_edit.custom_fields.add_label": "Shtoni fushë", + "account_edit.custom_fields.edit_label": "Përpunoni fushë", "account_edit.custom_fields.placeholder": "Shtoni përemrat tuaj, lidhje të jashme, ose gjithçka tjetë që do të donit të ndanit me të tjerë.", "account_edit.custom_fields.reorder_button": "Rirenditi fushat", "account_edit.custom_fields.tip_content": "Mundeni të shtoni kollak besueshmëri për llogarinë tuaj Mastodon duke verifikuar lidhje për te çfarëdo sajti që është pronë e juaja.", "account_edit.custom_fields.tip_title": "Ndihmëz: Duke shtuar lidhje të verifikuara", "account_edit.custom_fields.title": "Fusha vetjake", "account_edit.custom_fields.verified_hint": "Si të shtoj një lidhje të verifikuar?", + "account_edit.display_name.add_label": "Shtoni emër në ekran", + "account_edit.display_name.edit_label": "Përpunoni emër në ekran", "account_edit.display_name.placeholder": "Emri juaj në ekran është ajo si duket emri juaj në profilikin dhe rrjedhat tuaja kohore.", "account_edit.display_name.title": "Emër në ekran", - "account_edit.featured_hashtags.item": "hashtag-ë", + "account_edit.featured_hashtags.edit_label": "Shtoni hashtag-ë", "account_edit.featured_hashtags.placeholder": "Ndihmoni të tjerët të identifikojnë dhe të hyjnë shpejt e shpejt te subjektet tuaj të parapëlqyer.", "account_edit.featured_hashtags.title": "Hashtag-ë të zgjedhur", + "account_edit.field_actions.delete": "Fshije fushën", + "account_edit.field_actions.edit": "Përpunoni fushën", "account_edit.field_delete_modal.confirm": "Jeni i sigurt se doni të fshihet kjo fushë e përshtatur? Ky veprim s’mund të zhbëhet.", "account_edit.field_delete_modal.delete_button": "Fshije", "account_edit.field_delete_modal.title": "Të fshihet fushë e përshtatur?", "account_edit.field_edit_modal.add_title": "Shtoni fushë të përshtatur", + "account_edit.field_edit_modal.discard_confirm": "Hidhe tej", + "account_edit.field_edit_modal.discard_message": "Keni ndryshime të paruajtura. Jeni i sigurt se doni të hidhen tej?", "account_edit.field_edit_modal.edit_title": "Përpunoni fushë të përshtatur", - "account_edit.field_edit_modal.limit_header": "U tejkalua kufi i rekomanduar shenjash", - "account_edit.field_edit_modal.limit_message": "Përdorues me celular mund të mos e shohin të plotë fushën tuaj.", + "account_edit.field_edit_modal.limit_warning": "Është tejkaluar kufiri i rekomanduar i shenjave. Përdoruesit në celuilar mund të mos e shohin të plotë fushën tuaj.", "account_edit.field_edit_modal.link_emoji_warning": "Rekomandojmë të mos përdoren emoji të përshtatur tok me url-ra. Fusha të përshtatura që i përmbajnë të dyja llojetn do t’i shfaqin si tekst, në vend se si një lidhje, për të parandaluar ngatërrim të përdoruesve.", "account_edit.field_edit_modal.name_hint": "P.sh., “Sajt personal”", "account_edit.field_edit_modal.name_label": "Etiketë", @@ -196,6 +201,8 @@ "account_edit.image_edit.alt_edit_button": "Përpunoni tekst alternativ", "account_edit.image_edit.remove_button": "Hiqe figurën", "account_edit.image_edit.replace_button": "Zëvendësoje figurën", + "account_edit.item_list.delete": "Fshije {name}", + "account_edit.item_list.edit": "Përpunojeni {name}", "account_edit.name_modal.add_title": "Shtoni emër në ekran", "account_edit.name_modal.edit_title": "Përpunoni emër në ekran", "account_edit.profile_tab.button_label": "Përshtateni", @@ -218,8 +225,10 @@ "account_edit.upload_modal.step_upload.dragging": "Lëreni, që të ngarkohet", "account_edit.upload_modal.step_upload.header": "Zgjidhni një figurë", "account_edit.upload_modal.step_upload.hint": "Format WEBP, PNG, GIF ose JPG, deri në {limit}MB.{br}Figura do të ripërmasohet në {width}x{height}px.", - "account_edit.upload_modal.title_add": "Shtoni figurë profili", - "account_edit.upload_modal.title_replace": "Zëvendësoni figurë profili", + "account_edit.upload_modal.title_add.avatar": "Shtoni foto profili", + "account_edit.upload_modal.title_add.header": "Shtoni foto profili", + "account_edit.upload_modal.title_replace.avatar": "Zëvendësoni foto profili", + "account_edit.upload_modal.title_replace.header": "Zëvendësoni foto profili", "account_edit.verified_modal.details": "Shtoni besueshmëri te profili juaj Mastodon duke verifikuar lidhje për te sajte personalë. Ja se si funksionon:", "account_edit.verified_modal.invisible_link.details": "Shtojeni lidhjen te kryet tuaja. Pjesa e rëndësishme është rel=\"me\", e cila pengon imitime në sajte me lëndë të prodhuar nga përdoruesit. Mundeni madje të përdorni një etiketë lidhjeje te kryet e faqes në vend të {tag}, por HTML-ja duhet të jetë e përdorshme pa ekzekutim të JavaScript-it.", "account_edit.verified_modal.invisible_link.summary": "Si ta bëj lidhjen të padukshme?", @@ -228,11 +237,13 @@ "account_edit.verified_modal.step2.header": "Shtojeni sajtin tuaj si një fushë të përshtatur", "account_edit.verified_modal.title": "Si të shtohet një lidhje e verifikuar", "account_edit_tags.add_tag": "Shtoje #{tagName}", - "account_edit_tags.column_title": "Përpunoni hashtag-ë të zgjedhur", + "account_edit_tags.column_title": "Përpunoni Etiketa", "account_edit_tags.help_text": "Hashtag-ët e zgjedhur i ndihmojnë përdoruesit të zbulojnë dhe ndërveprojnë me profilin tuaj. Ata duken si filtra te pamja Veprimtari e faqes tuaj të Profilit.", + "account_edit_tags.max_tags_reached": "Keni mbërritur në numrin maksimum të hashtag-ëve të zgjedhur.", "account_edit_tags.search_placeholder": "Jepni një hashtag…", "account_edit_tags.suggestions": "Sugjerime:", "account_edit_tags.tag_status_count": "{count, plural, one {# postim} other {# postime}}", + "account_list.total": "{total, plural, one {# llogari} other {# llogari}}", "account_note.placeholder": "Klikoni për të shtuar shënim", "admin.dashboard.daily_retention": "Shkallë mbajtjeje përdoruesi, në ditë, pas regjistrimit", "admin.dashboard.monthly_retention": "Shkallë mbajtjeje përdoruesi, në muaj, pas regjistrimit", @@ -622,6 +633,10 @@ "featured_carousel.header": "{count, plural, one {Postim i Fiksuar} other {Postime të Fiksuar}}", "featured_carousel.slide": "Postimi {current, number} nga {max, number} gjithsej", "featured_tags.more_items": "+{count}", + "featured_tags.suggestions": "Tani së fundi keni postuar rreth {items}. Të shtohen këto si hashtag-ë të zgjedhur?", + "featured_tags.suggestions.add": "Shtoji", + "featured_tags.suggestions.added": "Administroni kurdo hashtag-ët tuaj të zgjedhur, nën Përpunoni Profil > Hashtag-ë të zgjedhur.", + "featured_tags.suggestions.dismiss": "Jo, faleminderit", "filter_modal.added.context_mismatch_explanation": "Kjo kategori filtrash nuk aplikohet për kontekstin nën të cilin po merreni me këtë postim. Nëse doni që postimi të filtrohet edhe në këtë kontekst, do t’ju duhet të përpunoni filtrin.", "filter_modal.added.context_mismatch_title": "Mospërputhje kontekstesh!", "filter_modal.added.expired_explanation": "Kjo kategori filtrash ka skaduar, do t’ju duhet të ndryshoni datën e skadimit për të, pa të aplikohet.", @@ -664,7 +679,9 @@ "follow_suggestions.who_to_follow": "Cilët të ndiqen", "followed_tags": "Hashtag-ë të ndjekur", "followers.hide_other_followers": "Ky përdorues ka zgjedhur të mos i bëjë të dukshëm ndjekësit e vet të tjerë", + "followers.title": "Ndjekje e {name}", "following.hide_other_following": "Ky përdorues ka zgjedhur të mos bëjë të dukshëm pjesën tjetër të përdoruesve që ndjek", + "following.title": "Ndjekur nga {name}", "footer.about": "Mbi", "footer.about_mastodon": "Mbi Mastodon-in", "footer.about_server": "Mbi {domain}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 17613601e9..9b0dae15ec 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -138,12 +138,8 @@ "account_edit.bio.title": "Biografi", "account_edit.bio_modal.add_title": "Lägg till biografi", "account_edit.bio_modal.edit_title": "Redigera biografi", - "account_edit.button.add": "Lägg till {item}", - "account_edit.button.delete": "Radera {item}", - "account_edit.button.edit": "Redigera {item}", "account_edit.column_button": "Klar", "account_edit.column_title": "Redigera profil", - "account_edit.custom_fields.name": "fält", "account_edit.custom_fields.placeholder": "Lägg till dina pronomen, externa länkar eller något annat du vill dela.", "account_edit.custom_fields.reorder_button": "Ändra ordning för fält", "account_edit.custom_fields.tip_content": "Du kan enkelt lägga till trovärdighet till ditt Mastodon-konto genom att verifiera länkar till alla webbplatser du äger.", @@ -152,7 +148,6 @@ "account_edit.custom_fields.verified_hint": "Hur lägger jag till en verifierad länk?", "account_edit.display_name.placeholder": "Visningsnamnet är hur ditt namn ser ut på din profil och i tidslinjer.", "account_edit.display_name.title": "Visningsnamn", - "account_edit.featured_hashtags.item": "hashtaggar", "account_edit.featured_hashtags.placeholder": "Hjälp andra att identifiera, och få snabb tillgång till, dina favoritämnen.", "account_edit.featured_hashtags.title": "Utvalda hashtaggar", "account_edit.field_delete_modal.confirm": "Är du säker på att du vill ta bort detta tilläggsfält? Denna åtgärd kan inte ångras.", @@ -160,8 +155,6 @@ "account_edit.field_delete_modal.title": "Radera tilläggsfält?", "account_edit.field_edit_modal.add_title": "Lägg till tilläggsfält", "account_edit.field_edit_modal.edit_title": "Redigera tilläggsfält", - "account_edit.field_edit_modal.limit_header": "Rekommenderad teckengräns överskriden", - "account_edit.field_edit_modal.limit_message": "Mobilanvändare kanske inte ser ditt fält i sin helhet.", "account_edit.field_edit_modal.name_hint": "T.ex. “Personlig webbplats”", "account_edit.field_edit_modal.name_label": "Etikett", "account_edit.field_edit_modal.url_warning": "För att lägga till en länk, vänligen inkludera {protocol} i början.", @@ -172,6 +165,7 @@ "account_edit.image_edit.remove_button": "Ta bort bild", "account_edit.image_edit.replace_button": "Ersätt bild", "account_edit.profile_tab.button_label": "Anpassa", + "account_list.total": "{total, plural, one {# konto} other {# konton}}", "account_note.placeholder": "Klicka för att lägga till anteckning", "admin.dashboard.daily_retention": "Användarlojalitet per dag efter registrering", "admin.dashboard.monthly_retention": "Användarlojalitet per månad efter registrering", @@ -549,7 +543,9 @@ "follow_suggestions.who_to_follow": "Rekommenderade profiler", "followed_tags": "Följda hashtags", "followers.hide_other_followers": "Denna användare har valt att inte göra sina andra följare synliga", + "followers.title": "Följer {name}", "following.hide_other_following": "Denna användare har valt att inte göra resten av vilka de följer synliga", + "following.title": "Följs av {name}", "footer.about": "Om", "footer.about_mastodon": "Om Mastodon", "footer.about_server": "Om {domain}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 9f93fbf24b..c30e20c867 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -145,12 +145,8 @@ "account_edit.bio.title": "Kişisel bilgiler", "account_edit.bio_modal.add_title": "Kişisel bilgi ekle", "account_edit.bio_modal.edit_title": "Kişisel bilgiyi düzenle", - "account_edit.button.add": "{item} ekle", - "account_edit.button.delete": "{item} sil", - "account_edit.button.edit": "{item} düzenle", "account_edit.column_button": "Tamamlandı", "account_edit.column_title": "Profili Düzenle", - "account_edit.custom_fields.name": "alan", "account_edit.custom_fields.placeholder": "Zamirlerinizi, harici bağlantılarınızı veya paylaşmak istediğiniz diğer bilgileri ekleyin.", "account_edit.custom_fields.reorder_button": "Alanları yeniden sırala", "account_edit.custom_fields.tip_content": "Sahip olduğunuz web sitelerine bağlantıları doğrulayarak Mastodon hesabınıza kolayca güvenilirlik katabilirsiniz.", @@ -159,7 +155,6 @@ "account_edit.custom_fields.verified_hint": "Doğrulanmış bir bağlantı nasıl eklerim?", "account_edit.display_name.placeholder": "Görünen adınız profilinizde ve zaman akışlarında adınızın nasıl göründüğüdür.", "account_edit.display_name.title": "Görünen ad", - "account_edit.featured_hashtags.item": "etiketler", "account_edit.featured_hashtags.placeholder": "Başkalarının favori konularınızı tanımlamasına ve bunlara hızlı bir şekilde erişmesine yardımcı olun.", "account_edit.featured_hashtags.title": "Öne çıkan etiketler", "account_edit.field_delete_modal.confirm": "Bu özel alanı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", @@ -167,8 +162,6 @@ "account_edit.field_delete_modal.title": "Özel alanı sil?", "account_edit.field_edit_modal.add_title": "Özel alan ekle", "account_edit.field_edit_modal.edit_title": "Özel alanı düzenle", - "account_edit.field_edit_modal.limit_header": "Önerilen karakter sınırı aşıldı", - "account_edit.field_edit_modal.limit_message": "Mobil cihaz kullanıcıları sahayı tam olarak görmeyebilir.", "account_edit.field_edit_modal.link_emoji_warning": "Url'lerle birlikte özel emoji kullanmamanızı öneririz. Her ikisini de içeren özel alanlar, kullanıcıların kafasını karıştırmamak için bağlantı yerine yalnızca metin olarak görüntülenir.", "account_edit.field_edit_modal.name_hint": "Örn. \"Kişisel web sitesi\"", "account_edit.field_edit_modal.name_label": "Etiket", @@ -219,8 +212,6 @@ "account_edit.upload_modal.step_upload.dragging": "Yüklemek için bırakın", "account_edit.upload_modal.step_upload.header": "Bir resim seç", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF veya JPG formatında, en fazla {limit} MB.{br}Görsel {width}x{height} piksel boyutuna getirilir.", - "account_edit.upload_modal.title_add": "Profil fotoğrafı ekle", - "account_edit.upload_modal.title_replace": "Profil fotoğrafını değiştir", "account_edit.verified_modal.details": "Kişisel web sitelerine bağlantıları doğrulayarak Mastodon profilinize güvenilirlik katın. İşte böyle çalışıyor:", "account_edit.verified_modal.invisible_link.details": "Bağlantıyı başlığınıza ekleyin. Önemli olan kısım, kullanıcı tarafından oluşturulan içeriğe sahip web sitelerinde kimlik sahtekarlığını önleyen rel=\"me\" özniteliğidir. {tag} yerine sayfanın başlığında bir bağlantı etiketi bile kullanabilirsiniz, ancak HTML, JavaScript çalıştırılmadan erişilebilir olmalıdır.", "account_edit.verified_modal.invisible_link.summary": "Bağlantıyı nasıl görünmez hale getirebilirim?", @@ -229,11 +220,11 @@ "account_edit.verified_modal.step2.header": "Web sitenizi özel bir alan olarak ekleyin", "account_edit.verified_modal.title": "Doğrulanmış bir bağlantı nasıl eklenir", "account_edit_tags.add_tag": "#{tagName} ekle", - "account_edit_tags.column_title": "Öne çıkarılmış etiketleri düzenle", "account_edit_tags.help_text": "Öne çıkan etiketler kullanıcıların profilinizi keşfetmesine ve etkileşim kurmasına yardımcı olur. Profil sayfanızın Etkinlik görünümünde filtreler olarak görünürler.", "account_edit_tags.search_placeholder": "Bir etiket girin…", "account_edit_tags.suggestions": "Öneriler:", "account_edit_tags.tag_status_count": "{count, plural, one {# gönderi} other {# gönderi}}", + "account_list.total": "{total, plural, one {# hesap} other {# hesap}}", "account_note.placeholder": "Not eklemek için tıklayın", "admin.dashboard.daily_retention": "Kayıttan sonra günlük kullanıcı saklama oranı", "admin.dashboard.monthly_retention": "Kayıttan sonra aylık kullanıcı saklama oranı", @@ -674,7 +665,9 @@ "follow_suggestions.who_to_follow": "Takip edebileceklerin", "followed_tags": "Takip edilen etiketler", "followers.hide_other_followers": "Bu kullanıcı diğer takipçilerini görünür kılmamayı seçmiştir", + "followers.title": "{name} takip ediliyor", "following.hide_other_following": "Bu kullanıcı takip ettiği diğer kişileri görünür kılmamayı seçmiştir", + "following.title": "{name} takip ediyor", "footer.about": "Hakkında", "footer.about_mastodon": "Mastodon Hakkında", "footer.about_server": "{domain} Hakkında", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index bbaae71d13..af8f7d186e 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -141,34 +141,39 @@ "account.unmute": "Bỏ phớt lờ @{name}", "account.unmute_notifications_short": "Bỏ phớt lờ thông báo", "account.unmute_short": "Bỏ phớt lờ", + "account_edit.bio.edit_label": "Sửa giới thiệu", + "account_edit.bio.label": "giới thiệu", "account_edit.bio.placeholder": "Thêm một dòng giới thiệu để giúp mọi người nhận ra bạn.", "account_edit.bio.title": "Giới thiệu", "account_edit.bio_modal.add_title": "Thêm giới thiệu", "account_edit.bio_modal.edit_title": "Sửa giới thiệu", - "account_edit.button.add": "Thêm {item}", - "account_edit.button.delete": "Xóa {item}", - "account_edit.button.edit": "Sửa {item}", "account_edit.column_button": "Xong", "account_edit.column_title": "Sửa hồ sơ", - "account_edit.custom_fields.name": "trường", + "account_edit.custom_fields.add_label": "Thêm trường", + "account_edit.custom_fields.edit_label": "Sửa trường", "account_edit.custom_fields.placeholder": "Thêm nghề nghiệp, liên kết ngoài hoặc bất kỳ gì mà bạn muốn.", "account_edit.custom_fields.reorder_button": "Sắp xếp trường", "account_edit.custom_fields.tip_content": "Bạn có thể dễ dàng tăng độ tin cậy cho tài khoản Mastodon của mình bằng cách xác minh liên kết đến bất kỳ trang web nào bạn sở hữu.", "account_edit.custom_fields.tip_title": "Mẹo: Thêm liên kết xác minh", "account_edit.custom_fields.title": "Trường tùy chỉnh", "account_edit.custom_fields.verified_hint": "Làm thế nào để thêm liên kết xác minh?", + "account_edit.display_name.add_label": "Thêm tên gọi", + "account_edit.display_name.edit_label": "Sửa tên gọi", "account_edit.display_name.placeholder": "Tên gọi là tên hiển thị trên hồ sơ của bạn, cũng như bảng tin.", "account_edit.display_name.title": "Tên gọi", - "account_edit.featured_hashtags.item": "hashtag", + "account_edit.featured_hashtags.edit_label": "Thêm hashtag", "account_edit.featured_hashtags.placeholder": "Giúp mọi người nhận diện và truy cập nhanh những chủ đề mà bạn thích.", "account_edit.featured_hashtags.title": "Hashtag thường dùng", + "account_edit.field_actions.delete": "Xóa trường", + "account_edit.field_actions.edit": "Sửa trường", "account_edit.field_delete_modal.confirm": "Bạn có chắc muốn xóa trường này? Hành động này không thể hoàn tác.", "account_edit.field_delete_modal.delete_button": "Xóa", "account_edit.field_delete_modal.title": "Xóa trường tùy chỉnh?", "account_edit.field_edit_modal.add_title": "Thêm trường tùy chỉnh", + "account_edit.field_edit_modal.discard_confirm": "Loại bỏ", + "account_edit.field_edit_modal.discard_message": "Bạn có các thay đổi chưa được lưu. Bạn có muốn loại bỏ chúng?", "account_edit.field_edit_modal.edit_title": "Sửa trường tùy chỉnh", - "account_edit.field_edit_modal.limit_header": "Đã vượt giới hạn ký tự đề xuất", - "account_edit.field_edit_modal.limit_message": "Người dùng di động sẽ không thể thấy đầy đủ trường.", + "account_edit.field_edit_modal.limit_warning": "Vượt quá giới hạn ký tự. Người dùng điện thoại sẽ không thể thấy đầy đủ.", "account_edit.field_edit_modal.link_emoji_warning": "Không nên dùng emoji tùy chỉnh với url. Trường tùy chỉnh chứa cả hai sẽ chỉ hiển thị văn bản, để ngăn chặn việc bối rối.", "account_edit.field_edit_modal.name_hint": "Vd: “Website cá nhân”", "account_edit.field_edit_modal.name_label": "Nhãn", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "Sửa văn bản thay thế", "account_edit.image_edit.remove_button": "Gỡ ảnh", "account_edit.image_edit.replace_button": "Thay thế ảnh", + "account_edit.item_list.delete": "Xóa {name}", + "account_edit.item_list.edit": "Sửa {name}", "account_edit.name_modal.add_title": "Thêm tên gọi", "account_edit.name_modal.edit_title": "Sửa tên gọi", "account_edit.profile_tab.button_label": "Tùy chỉnh", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "Thả để tải lên", "account_edit.upload_modal.step_upload.header": "Chọn ảnh", "account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF hoặc JPG, tối đa {limit}MB.{br}Sẽ bị thu xuống {width}x{height}px.", - "account_edit.upload_modal.title_add": "Thêm ảnh đại diện", - "account_edit.upload_modal.title_replace": "Thay thế ảnh đại diện", + "account_edit.upload_modal.title_add.avatar": "Thêm ảnh đại diện", + "account_edit.upload_modal.title_add.header": "Thêm ảnh bìa", + "account_edit.upload_modal.title_replace.avatar": "Thay thế ảnh đại diện", + "account_edit.upload_modal.title_replace.header": "Thay thế ảnh bìa", "account_edit.verified_modal.details": "Tăng độ tin cậy cho hồ sơ Mastodon của bạn bằng cách xác minh liên kết đến trang web cá nhân. Cách thức thực hiện như sau:", "account_edit.verified_modal.invisible_link.details": "Thêm liên kết trên header của trang. Quan trọng là rel=\"me\" giúp ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn cũng có thể sử dụng một thẻ link thay vì {tag}, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript.", "account_edit.verified_modal.invisible_link.summary": "Làm thế nào để ẩn liên kết?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "Thêm trang web của bạn dưới dạng trường tùy chỉnh", "account_edit.verified_modal.title": "Làm thế nào để thêm liên kết xác minh", "account_edit_tags.add_tag": "Thêm #{tagName}", - "account_edit_tags.column_title": "Sửa hashtag thường dùng", + "account_edit_tags.column_title": "Sửa nhãn", "account_edit_tags.help_text": "Hashtag thường dùng giúp bạn mọi người khám phá và tương tác với hồ sơ của bạn. Chúng xuất hiện như những bộ lọc trên phần Hoạt động hồ sơ.", + "account_edit_tags.max_tags_reached": "Bạn đã đạt số lượng hashtag thường dùng tối đa.", "account_edit_tags.search_placeholder": "Nhập một hashtag…", "account_edit_tags.suggestions": "Được đề xuất:", "account_edit_tags.tag_status_count": "{count, plural, other {# tút}}", + "account_list.total": "{total, plural, other {# tài khoản}}", "account_note.placeholder": "Nhấn để thêm", "admin.dashboard.daily_retention": "Tỉ lệ người dùng sau đăng ký ở lại theo ngày", "admin.dashboard.monthly_retention": "Tỉ lệ người dùng ở lại sau khi đăng ký", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "Gợi ý theo dõi", "followed_tags": "Hashtag theo dõi", "followers.hide_other_followers": "Tài khoản này đã ẩn người theo dõi của họ", + "followers.title": "Đang theo dõi {name}", "following.hide_other_following": "Tài khoản này đã ẩn người mà họ theo dõi", + "following.title": "Theo dõi bởi {name}", "footer.about": "Giới thiệu", "footer.about_mastodon": "Về Mastodon", "footer.about_server": "Về {domain}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index c49c882c29..9cf0de1a1a 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -141,34 +141,39 @@ "account.unmute": "不再隐藏 @{name}", "account.unmute_notifications_short": "恢复通知", "account.unmute_short": "取消隐藏", + "account_edit.bio.edit_label": "编辑个人简介", + "account_edit.bio.label": "简介", "account_edit.bio.placeholder": "添加一段简短介绍,帮助其他人认识你。", "account_edit.bio.title": "简介", "account_edit.bio_modal.add_title": "添加个人简介", "account_edit.bio_modal.edit_title": "编辑个人简介", - "account_edit.button.add": "添加 {item}", - "account_edit.button.delete": "删除 {item}", - "account_edit.button.edit": "编辑 {item}", "account_edit.column_button": "完成", "account_edit.column_title": "修改个人资料", - "account_edit.custom_fields.name": "字段", + "account_edit.custom_fields.add_label": "添加字段", + "account_edit.custom_fields.edit_label": "编辑字段", "account_edit.custom_fields.placeholder": "添加你的人称代词、外部链接,或其他你想分享的内容。", "account_edit.custom_fields.reorder_button": "重新排序字段", "account_edit.custom_fields.tip_content": "通过验证任意你拥有网站的链接,你可以轻松增加 Mastodon 账号的可信度。", "account_edit.custom_fields.tip_title": "小贴士:添加已验证的链接", "account_edit.custom_fields.title": "自定义字段", "account_edit.custom_fields.verified_hint": "我如何添加已验证的链接?", + "account_edit.display_name.add_label": "添加显示名称", + "account_edit.display_name.edit_label": "编辑显示名称", "account_edit.display_name.placeholder": "你的显示名称是指你的名字在个人资料及时间线上出现时的样子。", "account_edit.display_name.title": "显示名称", - "account_edit.featured_hashtags.item": "话题标签", + "account_edit.featured_hashtags.edit_label": "添加话题标签", "account_edit.featured_hashtags.placeholder": "帮助其他人认识并快速访问你最喜欢的话题。", "account_edit.featured_hashtags.title": "精选话题标签", + "account_edit.field_actions.delete": "删除字段", + "account_edit.field_actions.edit": "编辑字段", "account_edit.field_delete_modal.confirm": "你确定要删除此自定义字段吗?此操作无法撤消。", "account_edit.field_delete_modal.delete_button": "删除", "account_edit.field_delete_modal.title": "删除自定义字段?", "account_edit.field_edit_modal.add_title": "添加自定义字段", + "account_edit.field_edit_modal.discard_confirm": "丢弃", + "account_edit.field_edit_modal.discard_message": "你有尚未保存的更改。确定要丢弃这些更改吗?", "account_edit.field_edit_modal.edit_title": "编辑自定义字段", - "account_edit.field_edit_modal.limit_header": "已超过建议字数限制", - "account_edit.field_edit_modal.limit_message": "移动端用户可能无法完整看见字段内容。", + "account_edit.field_edit_modal.limit_warning": "已超过建议字数限制。移动端用户可能无法完整看见字段内容。", "account_edit.field_edit_modal.link_emoji_warning": "我们建议不要同时使用自定义表情和网址。同时包含两者的自定义字段将会显示为纯文本而不是链接形式,以避免用户混淆。", "account_edit.field_edit_modal.name_hint": "例如:“个人网站”", "account_edit.field_edit_modal.name_label": "标签", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "编辑替代文本", "account_edit.image_edit.remove_button": "移除图片", "account_edit.image_edit.replace_button": "替换图片", + "account_edit.item_list.delete": "删除 {name}", + "account_edit.item_list.edit": "编辑 {name}", "account_edit.name_modal.add_title": "添加显示名称", "account_edit.name_modal.edit_title": "编辑显示名称", "account_edit.profile_tab.button_label": "自定义", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "将文件拖放到此处开始上传", "account_edit.upload_modal.step_upload.header": "选择图片", "account_edit.upload_modal.step_upload.hint": "支持 WEBP、PNG、GIF 或 JPG 格式,最大 {limit} MB。{br}图片将被缩放至 {width}×{height}px。", - "account_edit.upload_modal.title_add": "添加头像", - "account_edit.upload_modal.title_replace": "替换头像", + "account_edit.upload_modal.title_add.avatar": "添加头像", + "account_edit.upload_modal.title_add.header": "添加封面图", + "account_edit.upload_modal.title_replace.avatar": "替换头像", + "account_edit.upload_modal.title_replace.header": "替换封面图", "account_edit.verified_modal.details": "要增加 Mastodon 个人资料的可信度,可以验证指向个人网站的链接。运作方式如下:", "account_edit.verified_modal.invisible_link.details": "将链接添加到标头(header)中。其中很重要的部分是 rel=\"me\",可以防止他人通过用户生成内容模仿。你甚至可以在页面标头中使用 link 标签而不是 {tag},但包含该部分的 HTML 必须在没有 JavaScript 执行环境下访问时依然存在。", "account_edit.verified_modal.invisible_link.summary": "如何隐藏此链接?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "将你的网站添加到自定义字段", "account_edit.verified_modal.title": "如何添加已验证的链接", "account_edit_tags.add_tag": "添加 #{tagName}", - "account_edit_tags.column_title": "编辑精选话题标签", + "account_edit_tags.column_title": "编辑标签​​​​​", "account_edit_tags.help_text": "精选话题标签可以帮助他人发现并与你的个人资料互动。这些标签会作为过滤器条件出现在你个人资料页面的活动视图中。", + "account_edit_tags.max_tags_reached": "你已达到精选话题标签数量的上限。", "account_edit_tags.search_placeholder": "输入话题标签…", "account_edit_tags.suggestions": "建议:", "account_edit_tags.tag_status_count": "{count, plural, other {# 条嘟文}}", + "account_list.total": "{total, plural, other {# 个账号}}", "account_note.placeholder": "点击添加备注", "admin.dashboard.daily_retention": "注册后用户留存率(按日计算)", "admin.dashboard.monthly_retention": "注册后用户留存率(按月计算)", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "推荐关注", "followed_tags": "已关注话题", "followers.hide_other_followers": "该用户选择不展示其他关注者", + "followers.title": "已关注 {name}", "following.hide_other_following": "该用户选择不展示其关注的其他人", + "following.title": "{name} 关注了此账号", "footer.about": "关于", "footer.about_mastodon": "关于 Mastodon", "footer.about_server": "关于 {domain}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 06fabfced7..15256077de 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -141,34 +141,39 @@ "account.unmute": "解除靜音 @{name}", "account.unmute_notifications_short": "解除靜音推播通知", "account.unmute_short": "解除靜音", + "account_edit.bio.edit_label": "編輯個人簡介", + "account_edit.bio.label": "個人簡介", "account_edit.bio.placeholder": "加入一段簡短介紹以幫助其他人識別您。", "account_edit.bio.title": "個人簡介", "account_edit.bio_modal.add_title": "新增個人簡介", "account_edit.bio_modal.edit_title": "編輯個人簡介", - "account_edit.button.add": "加入 {item}", - "account_edit.button.delete": "刪除 {item}", - "account_edit.button.edit": "編輯 {item}", "account_edit.column_button": "完成", "account_edit.column_title": "編輯個人檔案", - "account_edit.custom_fields.name": "欄位", + "account_edit.custom_fields.add_label": "新增欄位", + "account_edit.custom_fields.edit_label": "編輯欄位", "account_edit.custom_fields.placeholder": "加入您的稱謂、外部連結、或其他您想分享的。", "account_edit.custom_fields.reorder_button": "重新排序欄位", "account_edit.custom_fields.tip_content": "您能透過驗證任何您擁有網站之連結,以輕鬆增加您 Mastodon 帳號之可信度。", "account_edit.custom_fields.tip_title": "小撇步:新增驗證連結", "account_edit.custom_fields.title": "自訂欄位", "account_edit.custom_fields.verified_hint": "如何新增驗證連結?", + "account_edit.display_name.add_label": "新增顯示名稱", + "account_edit.display_name.edit_label": "編輯顯示名稱", "account_edit.display_name.placeholder": "您的顯示名稱是您將於個人檔案與時間軸的出現方式。", "account_edit.display_name.title": "顯示名稱", - "account_edit.featured_hashtags.item": "主題標籤", + "account_edit.featured_hashtags.edit_label": "新增主題標籤", "account_edit.featured_hashtags.placeholder": "協助其他人識別、以及快速存取您的最愛主題。", "account_edit.featured_hashtags.title": "推薦主題標籤", + "account_edit.field_actions.delete": "刪除欄位", + "account_edit.field_actions.edit": "編輯欄位", "account_edit.field_delete_modal.confirm": "您確定要刪除此自訂欄位嗎?此動作無法復原。", "account_edit.field_delete_modal.delete_button": "刪除", "account_edit.field_delete_modal.title": "是否刪除自訂欄位?", "account_edit.field_edit_modal.add_title": "新增自訂欄位", + "account_edit.field_edit_modal.discard_confirm": "捨棄", + "account_edit.field_edit_modal.discard_message": "您有尚未儲存之變更。您是否確定要捨棄這些變更?", "account_edit.field_edit_modal.edit_title": "編輯自訂欄位", - "account_edit.field_edit_modal.limit_header": "已超過建議字數限制", - "account_edit.field_edit_modal.limit_message": "行動裝置使用者可能無法看見您完整欄位。", + "account_edit.field_edit_modal.limit_warning": "已超過建議字數。行動裝置使用者可能無法檢視您的欄位完整內容。", "account_edit.field_edit_modal.link_emoji_warning": "我們不建議於 URL 中使用自訂 emoji 表情符號。為了避免使用者混淆,包含兩者之自訂欄位將僅顯示為文字,而不是顯示為連結。", "account_edit.field_edit_modal.name_hint": "例如:「個人網站」", "account_edit.field_edit_modal.name_label": "標籤", @@ -197,6 +202,8 @@ "account_edit.image_edit.alt_edit_button": "編輯 ALT 說明文字", "account_edit.image_edit.remove_button": "移除圖片", "account_edit.image_edit.replace_button": "替換圖片", + "account_edit.item_list.delete": "刪除 {name}", + "account_edit.item_list.edit": "編輯 {name}", "account_edit.name_modal.add_title": "新增顯示名稱", "account_edit.name_modal.edit_title": "編輯顯示名稱", "account_edit.profile_tab.button_label": "自訂", @@ -219,8 +226,10 @@ "account_edit.upload_modal.step_upload.dragging": "拖曳以上傳", "account_edit.upload_modal.step_upload.header": "選擇圖片", "account_edit.upload_modal.step_upload.hint": "WEBP、PNG、GIF 或 JPG 格式,最大 {limit}MB。{br}圖片將會縮放至 {width}x{height} 像素。", - "account_edit.upload_modal.title_add": "新增個人檔案照片", - "account_edit.upload_modal.title_replace": "更換個人檔案照片", + "account_edit.upload_modal.title_add.avatar": "新增個人檔案照片", + "account_edit.upload_modal.title_add.header": "新增封面圖片", + "account_edit.upload_modal.title_replace.avatar": "更換個人檔案照片", + "account_edit.upload_modal.title_replace.header": "更換封面圖片", "account_edit.verified_modal.details": "藉由驗證連結至個人網站增加您 Mastodon 個人檔案之可信度。運作方式如下:", "account_edit.verified_modal.invisible_link.details": "新增連結至您的標頭 (header)。其重要的部分是 rel=\"me\" ,防止透過使用者產生內容模擬。您甚至能使用頁面標頭之 link 標籤取代頁面中的 {tag},但 HTML 必須能於不執行 JavaScript 情況下所存取。", "account_edit.verified_modal.invisible_link.summary": "如何隱藏此連結?", @@ -229,11 +238,13 @@ "account_edit.verified_modal.step2.header": "將您的網站加入為自訂欄位", "account_edit.verified_modal.title": "如何新增驗證連結", "account_edit_tags.add_tag": "加入 #{tagName}", - "account_edit_tags.column_title": "編輯推薦主題標籤", + "account_edit_tags.column_title": "編輯主題標籤", "account_edit_tags.help_text": "推薦主題標籤幫助其他人發現並與您的個人檔案互動。它們將作為過濾器出現於您個人檔案頁面之動態中。", + "account_edit_tags.max_tags_reached": "您已達推薦主題標籤數量上限。", "account_edit_tags.search_placeholder": "請輸入主題標籤…", "account_edit_tags.suggestions": "建議:", "account_edit_tags.tag_status_count": "{count, plural, other {# 則嘟文}}", + "account_list.total": "{total, plural, other {# 個帳號}}", "account_note.placeholder": "點擊以新增備註", "admin.dashboard.daily_retention": "註冊後使用者存留率(日)", "admin.dashboard.monthly_retention": "註冊後使用者存留率(月)", @@ -674,7 +685,9 @@ "follow_suggestions.who_to_follow": "推薦跟隨帳號", "followed_tags": "已跟隨主題標籤", "followers.hide_other_followers": "此使用者選擇不公開跟隨者", + "followers.title": "正在跟隨 {name}", "following.hide_other_following": "此使用者選擇不公開跟隨中", + "following.title": "被 {name} 跟隨", "footer.about": "關於", "footer.about_mastodon": "關於 Mastodon", "footer.about_server": "關於 {domain}", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 32c8e723c2..a7ef2e7c38 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -793,6 +793,7 @@ ca: view_dashboard_description: Permet als usuaris accedir al tauler i a diverses mètriques view_devops: Operadors de desenvolupament view_devops_description: Permet als usuaris accedir als taulers de control de Sidekiq i pgHero + requires_2fa: Requereix autenticació en dues passes title: Rols rules: add_new: Afegir norma diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 850e68c218..77d938b6b7 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -779,6 +779,7 @@ fi: delete_user_data: Poistaa käyttäjän tiedot delete_user_data_description: Sallii käyttäjien poistaa muiden käyttäjien tiedot viipymättä invite_bypass_approval: Kutsu käyttäjiä arvioimatta + invite_bypass_approval_description: Sallii näiden käyttäjien tälle palvelimelle kutsumien henkilöiden ohittaa moderoinnin hyväksyntä invite_users: Kutsua käyttäjiä invite_users_description: Sallii käyttäjien kutsua uusia käyttäjiä palvelimelle manage_announcements: Hallita tiedotteita diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 8bce2ee529..f8cbce5cc3 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -447,7 +447,7 @@ hu: create: Tiltás létrehozása hint: A domain tiltása nem gátolja meg az új fiókok hozzáadását az abatbázishoz, de visszamenőlegesen és automatikusan aktivál bizonyos moderációs szabályokat ezen fiókok esetében. severity: - desc_html: A Korlátozás elrejti a domain fiókjaitól származó bejegyzéseket azok elől, akik nem követik őket. A Felfüggesztés eltávolítja a domain fiókjaitól származó összes tartalmat, médiafájlt és profiladatot. Használd a Nincs lehetőséget, ha csak a médiafájlokat akarod elutasítani. + desc_html: A Korlátozás elrejti a domain fiókjaitól származó bejegyzéseket azok elől, akik nem követik őket. A Felfüggesztés eltávolítja a domain fiókjaitól származó összes tartalmat, médiafájlt és profiladatot. Használd a Nincs lehetőséget, ha csak a médiafájlokat akarod elutasítani. noop: Egyik sem silence: Korlátozás suspend: Felfüggesztés @@ -675,7 +675,7 @@ hu: mark_as_sensitive_description_html: A bejelentett bejegyzések médaitartalmait érzékenynek jelöljük, és rögzítünk egy vétséget, hogy segítsük az eszkalációt a fiók későbbi kihágásai esetén. other_description_html: További lehetőségek megjelenítése a fiók viselkedésének szabályozásához, és a jelentett fiók kommunikációjának testreszabásához. resolve_description_html: Nem csinálunk semmit a bejelentett fiókkal, nem jegyzünk fel vétséget, és bezárjuk a bejelentést. - silence_description_html: A profil csak azok számára lesz látható, akik már követik, vagy kézzel rákeresnek, jelentősen korlátozva annak elérését. Ez a művelet bármikor visszafordítható. A fiókkal szemben indított minden bejelentést lezárunk. + silence_description_html: A profil csak azok számára lesz látható, akik már követik, vagy kézileg rákeresnek, ezzel jelentősen korlátozva az elérését. Ez a művelet bármikor visszafordítható. A fiókkal szemben indított minden bejelentést lezár. suspend_description_html: A fiók és minden tartalma elérhetetlenné válik és végül törlésre kerül. A fiókkal kapcsolatbalépni lehetetlen lesz. Ez a művelet 30 napig visszafordítható. A fiók ellen indított minden bejelentést lezárunk. actions_description_html: Döntsd el, mit csináljunk, hogy megoldjuk ezt a bejelentést. Ha valamilyen büntető intézkedést hozol a bejelentett fiók ellen, küldünk neki egy figyelmeztetést e-mailben, kivéve ha a Spam kategóriát választod. actions_description_remote_html: Döntsd el, mit tegyünk a bejelentés lezárásának érdekében. Ez csak azt befolyásolja, hogy a saját kiszolgálód hogyan kommunikál ezzel a távoli fiókkal és hogyan kezeli annak tartalmait. @@ -738,7 +738,7 @@ hu: actions: delete_html: Sértő bejegyzések eltávolítása mark_as_sensitive_html: Sértő bejegyzések médiatartalmainak érzékenyként történő megjelölése - silence_html: "@%{acct} fiók elérésének jelentős korlátozása azzal, hogy ennek profilja és tartalmai csak olyanoknak legyen látható, akik követik vagy manuálisan rákeresnek" + silence_html: A(z) @%{acct} fiók elérésének jelentős korlátozása azáltal, hogy a profilja és a tartalmai csak azoknak lesz látható, akik követik vagy kézileg rákeresnek suspend_html: "@%{acct} felfüggesztése a profil és tartalmainak elérhetetlenné tételével, a fiókkal való interakció ellehetetlenítésével" close_report: 'Bejelentés #%{id} megjelölése megoldottként' close_reports_html: "Minden @%{acct} ellen tett bejelentés megjelölése megoldottként" @@ -778,6 +778,8 @@ hu: administrator_description: A felhasználók ezzel a szereppel minden jogosultsággal rendelkeznek delete_user_data: Felhasználói adatok törlése delete_user_data_description: Lehetővé teszi a felhasználónak, hogy azonnal törölhesse más felhasználó adatait + invite_bypass_approval: Felhasználók meghívása ellenőrzés nélkül + invite_bypass_approval_description: Lehetővé teszi, hogy úgy hívjanak meg embereket a kiszolgálóra, hogy ezek a felhasználók kikerüljék a moderátori jóváhagyást invite_users: Felhasználók meghívása invite_users_description: Lehetővé teszi a felhasználónak, hogy új embereket hívjon meg a kiszolgálóra manage_announcements: Hirdetmények kezelése diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d1b61289dc..a514556ba9 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1278,6 +1278,7 @@ sv: progress: confirm: Bekräfta e-postadress details: Dina uppgifter + list: Registreringsframsteg review: Vår recension rules: Acceptera regler providers: From d42182d9a28268114d91fa840dafca9e48260bec Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Mar 2026 05:58:04 -0400 Subject: [PATCH 03/17] Use more granular content check via `parsed_body` (#38378) --- .../admin/accounts_controller_spec.rb | 9 +++++---- .../admin/disputes/appeals_controller_spec.rb | 8 +++++--- .../admin/instances_controller_spec.rb | 10 +++++----- .../auth/sessions_controller_spec.rb | 20 +++++++++---------- .../account_controller_concern_spec.rb | 4 ++-- .../settings/imports_controller_spec.rb | 4 ++-- .../confirmations_controller_spec.rb | 10 ++++++---- 7 files changed, 35 insertions(+), 30 deletions(-) diff --git a/spec/controllers/admin/accounts_controller_spec.rb b/spec/controllers/admin/accounts_controller_spec.rb index f8e78759cc..10b8d774cf 100644 --- a/spec/controllers/admin/accounts_controller_spec.rb +++ b/spec/controllers/admin/accounts_controller_spec.rb @@ -63,11 +63,12 @@ RSpec.describe Admin::AccountsController do note2 = Fabricate(:account_moderation_note, target_account: account, content: 'Note 2 remarks') get :show, params: { id: account.id } - expect(response).to have_http_status(200) - expect(response.body) - .to include(note1.content) - .and include(note2.content) + expect(response) + .to have_http_status(200) + expect(response.parsed_body) + .to have_css("#account_moderation_note_#{note1.id}", text: note1.content) + .and have_css("#account_moderation_note_#{note2.id}", text: note2.content) end end diff --git a/spec/controllers/admin/disputes/appeals_controller_spec.rb b/spec/controllers/admin/disputes/appeals_controller_spec.rb index b67ee30f74..6b955dd803 100644 --- a/spec/controllers/admin/disputes/appeals_controller_spec.rb +++ b/spec/controllers/admin/disputes/appeals_controller_spec.rb @@ -23,9 +23,11 @@ RSpec.describe Admin::Disputes::AppealsController do it 'returns a page that lists details of appeals' do get :index - expect(response).to have_http_status(:success) - expect(response.body).to include("#{strike.account.username}") - expect(response.body).to include("#{appeal.account.username}") + expect(response) + .to have_http_status(:success) + expect(response.parsed_body) + .to have_css('span.username', text: strike.account.username) + .and have_css('span.target', text: appeal.account.username) end end diff --git a/spec/controllers/admin/instances_controller_spec.rb b/spec/controllers/admin/instances_controller_spec.rb index b6508eb38b..3027c92fcf 100644 --- a/spec/controllers/admin/instances_controller_spec.rb +++ b/spec/controllers/admin/instances_controller_spec.rb @@ -47,11 +47,11 @@ RSpec.describe Admin::InstancesController do it 'shows an instance page' do get :show, params: { id: account_popular_main.domain } - expect(response).to have_http_status(200) - - expect(response.body) - .to include(I18n.t('admin.instances.totals_time_period_hint_html')) - .and include(I18n.t('accounts.nothing_here')) + expect(response) + .to have_http_status(200) + expect(response.parsed_body) + .to have_css('p', text: I18n.t('admin.instances.totals_time_period_hint_html')) + .and have_css('p', text: I18n.t('accounts.nothing_here')) expect(Admin::ActionLogFilter).to have_received(:new).with(target_domain: account_popular_main.domain) end diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 924122d161..d8d640a058 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -226,8 +226,8 @@ RSpec.describe Auth::SessionsController do end it 'renders two factor authentication page' do - expect(response.body) - .to include(I18n.t('simple_form.hints.sessions.otp')) + expect(response.parsed_body) + .to have_css('p.hint.authentication-hint', text: I18n.t('simple_form.hints.sessions.otp')) end end @@ -242,8 +242,8 @@ RSpec.describe Auth::SessionsController do end it 'renders two factor authentication page' do - expect(response.body) - .to include(I18n.t('simple_form.hints.sessions.otp')) + expect(response.parsed_body) + .to have_css('p.hint.authentication-hint', text: I18n.t('simple_form.hints.sessions.otp')) end end @@ -253,8 +253,8 @@ RSpec.describe Auth::SessionsController do end it 'renders two factor authentication page' do - expect(response.body) - .to include(I18n.t('simple_form.hints.sessions.otp')) + expect(response.parsed_body) + .to have_css('p.hint.authentication-hint', text: I18n.t('simple_form.hints.sessions.otp')) end end @@ -387,8 +387,8 @@ RSpec.describe Auth::SessionsController do end it 'renders webauthn authentication page' do - expect(response.body) - .to include(I18n.t('simple_form.title.sessions.webauthn')) + expect(response.parsed_body) + .to have_css('h3.title', text: I18n.t('simple_form.title.sessions.webauthn')) end end @@ -398,8 +398,8 @@ RSpec.describe Auth::SessionsController do end it 'renders webauthn authentication page' do - expect(response.body) - .to include(I18n.t('simple_form.title.sessions.webauthn')) + expect(response.parsed_body) + .to have_css('h3.title', text: I18n.t('simple_form.title.sessions.webauthn')) end end diff --git a/spec/controllers/concerns/account_controller_concern_spec.rb b/spec/controllers/concerns/account_controller_concern_spec.rb index b5c8c16643..2f7e230d48 100644 --- a/spec/controllers/concerns/account_controller_concern_spec.rb +++ b/spec/controllers/concerns/account_controller_concern_spec.rb @@ -59,8 +59,8 @@ RSpec.describe AccountControllerConcern do .to have_http_status(200) .and have_http_link_header(webfinger_url(resource: account.to_webfinger_s)).for(rel: 'lrdd', type: 'application/jrd+json') .and have_http_link_header(ActivityPub::TagManager.instance.uri_for(account)).for(rel: 'alternate', type: 'application/activity+json') - expect(response.body) - .to include(account.username) + expect(response.parsed_body) + .to eq(account.username) end end end diff --git a/spec/controllers/settings/imports_controller_spec.rb b/spec/controllers/settings/imports_controller_spec.rb index c2c6c353f3..0b399fcc40 100644 --- a/spec/controllers/settings/imports_controller_spec.rb +++ b/spec/controllers/settings/imports_controller_spec.rb @@ -22,8 +22,8 @@ RSpec.describe Settings::ImportsController do it 'assigns the expected imports', :aggregate_failures do expect(response).to have_http_status(200) expect(response.headers['Cache-Control']).to include('private, no-store') - expect(response.body) - .to include("bulk_import_#{import.id}") + expect(response.parsed_body) + .to have_css("#bulk_import_#{import.id}") .and not_include("bulk_import_#{other_import.id}") end end diff --git a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb index db4fb19411..a87c55364e 100644 --- a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb @@ -12,7 +12,8 @@ RSpec.describe Settings::TwoFactorAuthentication::ConfirmationsController do expect(response).to have_http_status(200) expect(response.body) .to include(qr_code_markup) - .and include(I18n.t('settings.two_factor_authentication')) + expect(response.parsed_body) + .to have_title(I18n.t('settings.two_factor_authentication')) end def qr_code_markup @@ -80,7 +81,8 @@ RSpec.describe Settings::TwoFactorAuthentication::ConfirmationsController do .to have_http_status(200) expect(response.body) .to include(*otp_backup_codes) - .and include(I18n.t('settings.two_factor_authentication')) + expect(response.parsed_body) + .to have_title(I18n.t('settings.two_factor_authentication')) end end @@ -98,8 +100,8 @@ RSpec.describe Settings::TwoFactorAuthentication::ConfirmationsController do it 'renders page with error message' do subject - expect(response.body) - .to include(I18n.t('otp_authentication.wrong_code')) + expect(response.parsed_body) + .to have_css('.flash-message', text: I18n.t('otp_authentication.wrong_code')) end it_behaves_like 'renders expected page' From 52a8bf4118deb36f75272cb2b5375ea6fb01bdf1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Mar 2026 05:59:38 -0400 Subject: [PATCH 04/17] Add constants for delay in services (#38375) --- app/lib/activitypub/activity/create.rb | 11 +++++++---- app/services/activitypub/process_account_service.rb | 9 ++++++--- .../activitypub/process_featured_item_service.rb | 4 +++- .../activitypub/process_status_update_service.rb | 11 +++++++---- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index aa0c7269d6..3b86d561c4 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class ActivityPub::Activity::Create < ActivityPub::Activity + DISTRIBUTE_DELAY = 1.minute + PROCESSING_DELAY = (30.seconds)..(10.minutes) + def perform @account.schedule_refresh_if_stale! @@ -73,7 +76,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def distribute # Spread out crawling randomly to avoid DDoSing the link - LinkCrawlWorker.perform_in(rand(1..59).seconds, @status.id) + LinkCrawlWorker.perform_in(rand(DISTRIBUTE_DELAY), @status.id) # Distribute into home and list feeds and notify mentioned accounts ::DistributionWorker.perform_async(@status.id, { 'silenced_account_ids' => @silenced_account_ids }) if @options[:override_timestamps] || @status.within_realtime_window? @@ -315,7 +318,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity media_attachment.download_thumbnail! media_attachment.save rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) + RedownloadMediaWorker.perform_in(rand(PROCESSING_DELAY), media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" RedownloadMediaWorker.perform_async(media_attachment.id) @@ -371,7 +374,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def resolve_unresolved_mentions(status) @unresolved_mentions.uniq.each do |uri| - MentionResolveWorker.perform_in(rand(30...600).seconds, status.id, uri, { 'request_id' => @options[:request_id] }) + MentionResolveWorker.perform_in(rand(PROCESSING_DELAY), status.id, uri, { 'request_id' => @options[:request_id] }) end end @@ -394,7 +397,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity embedded_quote = safe_prefetched_embed(@account, @status_parser.quoted_object, @json['context']) ActivityPub::VerifyQuoteService.new.call(@quote, @quote_approval_uri, fetchable_quoted_uri: @quote_uri, prefetched_quoted_object: embedded_quote, request_id: @options[:request_id], depth: @options[:depth]) rescue Mastodon::RecursionLimitExceededError, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, @quote.id, @quote_uri, { 'request_id' => @options[:request_id], 'approval_uri' => @quote_approval_uri }) + ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(PROCESSING_DELAY), @quote.id, @quote_uri, { 'request_id' => @options[:request_id], 'approval_uri' => @quote_approval_uri }) end def conversation_from_uri(uri) diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index ad59f0b46b..bececf4bac 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -10,6 +10,9 @@ class ActivityPub::ProcessAccountService < BaseService SUBDOMAINS_RATELIMIT = 10 DISCOVERIES_PER_REQUEST = 400 + PROCESSING_DELAY = (30.seconds)..(10.minutes) + VERIFY_DELAY = 10.minutes + VALID_URI_SCHEMES = %w(http https).freeze # Should be called with confirmed valid JSON @@ -152,7 +155,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.avatar = nil if @account.avatar_remote_url.blank? @account.avatar_description = avatar_description || '' rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - RedownloadAvatarWorker.perform_in(rand(30..600).seconds, @account.id) + RedownloadAvatarWorker.perform_in(rand(PROCESSING_DELAY), @account.id) end begin header_url, header_description = image_url_and_description('image') @@ -160,7 +163,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.header = nil if @account.header_remote_url.blank? @account.header_description = header_description || '' rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - RedownloadHeaderWorker.perform_in(rand(30..600).seconds, @account.id) + RedownloadHeaderWorker.perform_in(rand(PROCESSING_DELAY), @account.id) end @account.statuses_count = outbox_total_items if outbox_total_items.present? @account.following_count = following_total_items if following_total_items.present? @@ -210,7 +213,7 @@ class ActivityPub::ProcessAccountService < BaseService end def check_links! - VerifyAccountLinksWorker.perform_in(rand(10.minutes.to_i), @account.id) + VerifyAccountLinksWorker.perform_in(rand(VERIFY_DELAY), @account.id) end def process_duplicate_accounts! diff --git a/app/services/activitypub/process_featured_item_service.rb b/app/services/activitypub/process_featured_item_service.rb index 961de802c9..718a7d1f23 100644 --- a/app/services/activitypub/process_featured_item_service.rb +++ b/app/services/activitypub/process_featured_item_service.rb @@ -5,6 +5,8 @@ class ActivityPub::ProcessFeaturedItemService include Lockable include Redisable + PROCESSING_DELAY = (30.seconds)..(10.minutes) + def call(collection, uri_or_object, position: nil, request_id: nil) @collection = collection @request_id = request_id @@ -47,6 +49,6 @@ class ActivityPub::ProcessFeaturedItemService def verify_authorization! ActivityPub::VerifyFeaturedItemService.new.call(@collection_item, @approval_uri, request_id: @request_id) rescue Mastodon::RecursionLimitExceededError, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - ActivityPub::VerifyFeaturedItemWorker.perform_in(rand(30..600).seconds, @collection_item.id, @approval_uri, @request_id) + ActivityPub::VerifyFeaturedItemWorker.perform_in(rand(PROCESSING_DELAY), @collection_item.id, @approval_uri, @request_id) end end diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 2279ff126c..a76c49ca08 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -5,6 +5,9 @@ class ActivityPub::ProcessStatusUpdateService < BaseService include Redisable include Lockable + CRAWL_DELAY = 1.minute + PROCESSING_DELAY = (30.seconds)..(10.minutes) + def call(status, activity_json, object_json, request_id: nil) raise ArgumentError, 'Status has unsaved changes' if status.changed? @@ -128,7 +131,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService media_attachment.download_thumbnail! if media_attachment.thumbnail_remote_url_previously_changed? media_attachment.save rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) + RedownloadMediaWorker.perform_in(rand(PROCESSING_DELAY), media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" end @@ -279,7 +282,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService # Queue unresolved mentions for later unresolved_mentions.uniq.each do |uri| - MentionResolveWorker.perform_in(rand(30...600).seconds, @status.id, uri, { 'request_id' => @request_id }) + MentionResolveWorker.perform_in(rand(PROCESSING_DELAY), @status.id, uri, { 'request_id' => @request_id }) end end @@ -361,7 +364,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService embedded_quote = safe_prefetched_embed(@account, @status_parser.quoted_object, @activity_json['context']) ActivityPub::VerifyQuoteService.new.call(quote, approval_uri, fetchable_quoted_uri: quote_uri, prefetched_quoted_object: embedded_quote, request_id: @request_id) rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS - ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, quote.id, quote_uri, { 'request_id' => @request_id, 'approval_uri' => approval_uri }) + ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(PROCESSING_DELAY), quote.id, quote_uri, { 'request_id' => @request_id, 'approval_uri' => approval_uri }) end def update_counts! @@ -419,7 +422,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService def reset_preview_card! @status.reset_preview_card! - LinkCrawlWorker.perform_in(rand(1..59).seconds, @status.id) + LinkCrawlWorker.perform_in(rand(CRAWL_DELAY), @status.id) end def broadcast_updates! From ea54c266ed83ef46552acae7e5276f1213900c5d Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 25 Mar 2026 11:14:39 +0100 Subject: [PATCH 05/17] Update dependency `bcrypt` (#38381) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index fc2beaa711..cc3843b19b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -121,7 +121,7 @@ GEM rexml base64 (0.3.0) bcp47_spec (0.2.1) - bcrypt (3.1.21) + bcrypt (3.1.22) benchmark (0.5.0) better_errors (2.10.1) erubi (>= 1.0.0) From 5267a99fb8703116ff95f71ca1fe4a0b4facbf21 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 11:17:17 +0100 Subject: [PATCH 06/17] Update dependency ws to v8.20.0 (#38328) 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 1ba09cba4c..5ba601231d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15079,8 +15079,8 @@ __metadata: linkType: hard "ws@npm:^8.12.1, ws@npm:^8.18.0, ws@npm:^8.19.0": - version: 8.19.0 - resolution: "ws@npm:8.19.0" + version: 8.20.0 + resolution: "ws@npm:8.20.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -15089,7 +15089,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 + checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 languageName: node linkType: hard From d6da3bdf1f981fb77974c4c239868df58a9b3fc8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:18:14 +0000 Subject: [PATCH 07/17] Update dependency react-easy-crop to v5.5.7 (#38355) 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 5ba601231d..dde95e8d33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11786,15 +11786,15 @@ __metadata: linkType: hard "react-easy-crop@npm:^5.5.6": - version: 5.5.6 - resolution: "react-easy-crop@npm:5.5.6" + version: 5.5.7 + resolution: "react-easy-crop@npm:5.5.7" dependencies: normalize-wheel: "npm:^1.0.1" tslib: "npm:^2.0.1" peerDependencies: react: ">=16.4.0" react-dom: ">=16.4.0" - checksum: 10c0/ce623791d31559fc46f210ece7b22c0f659710d5de219ef9fb05650940f50445d5e6573ed229b66fad06dfda9651ae458c0f5efb8e1cabdf01511dc32942cdc8 + checksum: 10c0/446cc58157031af9638c88dc91bc4136d09e21c6562f030291e1e0d3a7808ce9fe29e2d44116c2ac70470c1a1fe2cd3947df3abc60c82faa550e8500c4bf443c languageName: node linkType: hard From b399dc3191552d9bb50f5435b43cd7bc39332111 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Mar 2026 06:23:45 -0400 Subject: [PATCH 08/17] Add coverage for "fields" feature of Account (#38369) --- spec/models/account/fields_spec.rb | 198 +++++++++++++++++++++++++++++ spec/models/account_spec.rb | 15 --- 2 files changed, 198 insertions(+), 15 deletions(-) create mode 100644 spec/models/account/fields_spec.rb diff --git a/spec/models/account/fields_spec.rb b/spec/models/account/fields_spec.rb new file mode 100644 index 0000000000..cca2d59e8b --- /dev/null +++ b/spec/models/account/fields_spec.rb @@ -0,0 +1,198 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account, '#fields' do + subject { Fabricate.build :account } + + describe 'Validations' do + context 'when account is local' do + subject { Fabricate.build :account, domain: nil } + + it { is_expected.to allow_value(fields_empty_name_value).for(:fields) } + it { is_expected.to_not allow_values(fields_over_limit, fields_empty_name).for(:fields) } + + def fields_empty_name_value + Array.new(4) { { 'name' => '', 'value' => '' } } + end + + def fields_over_limit + Array.new(described_class::DEFAULT_FIELDS_SIZE + 1) { { 'name' => 'Name', 'value' => 'Value', 'verified_at' => '01/01/1970' } } + end + + def fields_empty_name + [{ 'name' => '', 'value' => 'Value', 'verified_at' => '01/01/1970' }] + end + end + end + + describe '#fields' do + subject { account.fields } + + let(:account) { Fabricate.build :account } + + context 'when attribute is nil' do + before { account.fields = nil } + + it { is_expected.to be_empty } + end + + context 'when attribute has valid data' do + before { account.fields = [{ 'name' => 'Personal Web Site', 'value' => 'https://host.example' }] } + + it 'returns array of account field objects' do + expect(subject) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Personal/, value: /host.example/)) + ) + end + end + + context 'when attribute has invalid data' do + before { account.fields = [{ 'blurp' => 'zorp', '@@@@' => '###' }] } + + it { is_expected.to be_empty } + end + end + + describe '#fields_attributes=' do + let(:account) { Fabricate.build :account } + + context 'when sent empty hash' do + it 'assigns empty array to fields' do + account.fields_attributes = {} + + expect(account.fields) + .to be_empty + end + end + + context 'when sent indexed hash' do + it 'assigns fields array' do + account.fields_attributes = { + '0' => { name: 'Color', value: 'Red' }, + '1' => { name: 'Size', value: 'Medium' }, + } + + expect(account.fields) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Color/, value: /Red/)), + be_a(Account::Field).and(have_attributes(name: /Size/, value: /Medium/)) + ) + end + end + + context 'when sent indexed hash with missing values' do + it 'rejects blanks and assigns fields array' do + account.fields_attributes = { + '0' => { name: 'Color', value: 'Red' }, + '1' => { name: '', value: '' }, + } + + expect(account.fields) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Color/, value: /Red/)) + ) + end + end + + context 'when sent array of field hashes' do + it 'assigns fields array' do + account.fields_attributes = [ + { name: 'Color', value: 'Red' }, + { name: 'Size', value: 'Medium' }, + ] + + expect(account.fields) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Color/, value: /Red/)), + be_a(Account::Field).and(have_attributes(name: /Size/, value: /Medium/)) + ) + end + end + + context 'when fields were previously a hash' do + before { account.fields = {} } + + it 'assigns fields array' do + account.fields_attributes = { + '0' => { name: 'Color', value: 'Red' }, + } + + expect(account.fields) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Color/, value: /Red/)) + ) + end + end + + context 'when fields were previously verified' do + before { account.fields = [{ name: 'Color', value: 'Red', verified_at: 2.weeks.ago.to_datetime }] } + + it 'assigns fields array with preserved verification' do + account.fields_attributes = { + '0' => { name: 'Color', value: 'Red' }, + } + + expect(account.fields) + .to be_an(Array) + .and contain_exactly( + be_a(Account::Field).and(have_attributes(name: /Color/, value: /Red/, verified_at: 2.weeks.ago.to_datetime).and(be_verified)) + ) + end + end + end + + describe '#build_fields' do + let(:account) { Fabricate.build :account } + + context 'when fields already full' do + before { account.fields = Array.new(Account::DEFAULT_FIELDS_SIZE) { |i| { name: "Name#{i}", value: 'Test' } } } + + it 'returns nil without updating fields' do + expect(account.build_fields) + .to be_nil + + expect(account.fields) + .to be_an(Array) + .and have_attributes(size: Account::DEFAULT_FIELDS_SIZE) + end + end + + context 'when fields partially full' do + before { account.fields = Array.new(2) { |i| { name: "Name#{i}", value: 'Test' } } } + + it 'returns nil without updating fields' do + expect(account.build_fields) + .to be_an(Array) + + expect(account.attributes['fields']) + .to be_an(Array) + .and contain_exactly( + include('name' => /Name/), + include('name' => /Name/), + include('name' => ''), + include('name' => '') + ) + end + end + + context 'when fields were previously a hash' do + before { account.fields = {} } + + it 'assigns fields array with empty values' do + expect(account.build_fields) + .to be_an(Array) + + expect(account.attributes['fields']) + .to be_an(Array) + .and all(include('name' => '', 'value' => '')) + end + end + end +end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index bb521e234a..8786760125 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -546,9 +546,6 @@ RSpec.describe Account do 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_values(fields_over_limit, fields_empty_name).for(:fields) } - it { is_expected.to validate_absence_of(:followers_url).on(:create) } it { is_expected.to validate_absence_of(:inbox_url).on(:create) } it { is_expected.to validate_absence_of(:shared_inbox_url).on(:create) } @@ -590,18 +587,6 @@ RSpec.describe Account do 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(described_class::DEFAULT_FIELDS_SIZE + 1) { { '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 bafc552a722fc6875c9adc845fd32ba031e58f66 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Wed, 25 Mar 2026 11:24:19 +0100 Subject: [PATCH 09/17] Hide empty state of topic suggestions dropdown in Collection editor (#38356) --- .../features/collections/editor/details.tsx | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app/javascript/mastodon/features/collections/editor/details.tsx b/app/javascript/mastodon/features/collections/editor/details.tsx index 73847a2b20..9a7ea16be8 100644 --- a/app/javascript/mastodon/features/collections/editor/details.tsx +++ b/app/javascript/mastodon/features/collections/editor/details.tsx @@ -1,4 +1,4 @@ -import { Fragment, useCallback, useMemo, useState } from 'react'; +import { Fragment, useCallback, useMemo } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; @@ -10,7 +10,6 @@ import { languages } from '@/mastodon/initial_state'; import { hasSpecialCharacters, inputToHashtag, - trimHashFromStart, } from '@/mastodon/utils/hashtags'; import type { ApiCreateCollectionPayload, @@ -297,14 +296,7 @@ export const CollectionDetails: React.FC = () => { const TopicField: React.FC = () => { const intl = useIntl(); const dispatch = useAppDispatch(); - const { id, topic } = useAppSelector((state) => state.collections.editor); - - const collection = useAppSelector((state) => - id ? state.collections.collections[id] : undefined, - ); - const [isInitialValue, setIsInitialValue] = useState( - () => trimHashFromStart(topic) === (collection?.tag?.name ?? ''), - ); + const { topic } = useAppSelector((state) => state.collections.editor); const { tags, isLoading, searchTags } = useSearchTags({ query: topic, @@ -312,7 +304,6 @@ const TopicField: React.FC = () => { const handleTopicChange = useCallback( (event: React.ChangeEvent) => { - setIsInitialValue(false); dispatch( updateCollectionEditorField({ field: 'topic', @@ -379,7 +370,7 @@ const TopicField: React.FC = () => { } : undefined } - suppressMenu={isInitialValue} + suppressMenu={!tags.length} /> ); }; From 5d7682c7ddbf01dc0f6a4d244d215c2904b8e11b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Mar 2026 06:35:09 -0400 Subject: [PATCH 10/17] Extract `security_key_options` endpoint to standalone controller (#38367) --- .../security_key_options_controller.rb | 24 +++++++++ app/controllers/auth/sessions_controller.rb | 17 ------ config/routes.rb | 4 +- .../sessions/security_key_options_spec.rb | 54 +++++++++++++------ 4 files changed, 66 insertions(+), 33 deletions(-) create mode 100644 app/controllers/auth/sessions/security_key_options_controller.rb diff --git a/app/controllers/auth/sessions/security_key_options_controller.rb b/app/controllers/auth/sessions/security_key_options_controller.rb new file mode 100644 index 0000000000..1bd2b4043c --- /dev/null +++ b/app/controllers/auth/sessions/security_key_options_controller.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class Auth::Sessions::SecurityKeyOptionsController < ApplicationController + skip_before_action :check_self_destruct! + skip_before_action :require_functional! + skip_before_action :update_user_sign_in + + def show + user = User.find_by(id: session[:attempt_user_id]) + + if user&.webauthn_enabled? + options_for_get = WebAuthn::Credential.options_for_get( + allow: user.webauthn_credentials.pluck(:external_id), + user_verification: 'discouraged' + ) + + session[:webauthn_challenge] = options_for_get.challenge + + render json: options_for_get, status: 200 + else + render json: { error: t('webauthn_credentials.not_enabled') }, status: 401 + end + end +end diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 077f4d9db5..67bee2344e 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -38,23 +38,6 @@ class Auth::SessionsController < Devise::SessionsController flash.delete(:notice) end - def webauthn_options - user = User.find_by(id: session[:attempt_user_id]) - - if user&.webauthn_enabled? - options_for_get = WebAuthn::Credential.options_for_get( - allow: user.webauthn_credentials.pluck(:external_id), - user_verification: 'discouraged' - ) - - session[:webauthn_challenge] = options_for_get.challenge - - render json: options_for_get, status: 200 - else - render json: { error: t('webauthn_credentials.not_enabled') }, status: 401 - end - end - protected def find_user diff --git a/config/routes.rb b/config/routes.rb index bff3f9d034..1bc32a2861 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -76,8 +76,10 @@ Rails.application.routes.draw do namespace :auth do resource :setup, only: [:show, :update], controller: :setup resource :challenge, only: [:create] - get 'sessions/security_key_options', to: 'sessions#webauthn_options' post 'captcha_confirmation', to: 'confirmations#confirm_captcha', as: :captcha_confirmation + namespace :sessions do + resource :security_key_options, only: :show + end end end diff --git a/spec/requests/auth/sessions/security_key_options_spec.rb b/spec/requests/auth/sessions/security_key_options_spec.rb index e53b9802b4..17ec364a9b 100644 --- a/spec/requests/auth/sessions/security_key_options_spec.rb +++ b/spec/requests/auth/sessions/security_key_options_spec.rb @@ -5,9 +5,9 @@ require 'webauthn/fake_client' RSpec.describe 'Security Key Options' do describe 'GET /auth/sessions/security_key_options' do - let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) - end + subject { get '/auth/sessions/security_key_options' } + + let!(:user) { Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) } context 'with WebAuthn and OTP enabled as second factor' do let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" } @@ -19,31 +19,55 @@ RSpec.describe 'Security Key Options' do user.update(webauthn_id: WebAuthn.generate_user_id) Fabricate( :webauthn_credential, - user_id: user.id, external_id: public_key_credential.id, - public_key: public_key_credential.public_key + public_key: public_key_credential.public_key, + user_id: user.id ) - post '/auth/sign_in', params: { user: { email: user.email, password: user.password } } end - it 'returns http success' do - get '/auth/sessions/security_key_options' + context 'when signed in' do + before { post '/auth/sign_in', params: { user: { email: user.email, password: user.password } } } - expect(response) - .to have_http_status 200 - expect(response.content_type) - .to start_with('application/json') + it 'returns http success' do + subject + + expect(response) + .to have_http_status 200 + expect(response.media_type) + .to eq('application/json') + expect(response.parsed_body) + .to include( + challenge: be_present, + userVerification: eq('discouraged'), + allowCredentials: contain_exactly(include(type: 'public-key', id: be_present)) + ) + end + end + + context 'when not signed in' do + it 'returns http unauthorized' do + subject + + expect(response) + .to have_http_status 401 + expect(response.media_type) + .to eq('application/json') + expect(response.parsed_body) + .to include(error: I18n.t('webauthn_credentials.not_enabled')) + end end end context 'when WebAuthn not enabled' do it 'returns http unauthorized' do - get '/auth/sessions/security_key_options' + subject expect(response) .to have_http_status 401 - expect(response.content_type) - .to start_with('application/json') + expect(response.media_type) + .to eq('application/json') + expect(response.parsed_body) + .to include(error: I18n.t('webauthn_credentials.not_enabled')) end end end From 74123950be00e498fa1b78fcfaf9f5b9ec3246eb Mon Sep 17 00:00:00 2001 From: Echo Date: Wed, 25 Mar 2026 11:46:18 +0100 Subject: [PATCH 11/17] Profile editing: Fix incorrect label (#38382) --- app/javascript/mastodon/features/account_edit/index.tsx | 2 +- app/javascript/mastodon/locales/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/account_edit/index.tsx b/app/javascript/mastodon/features/account_edit/index.tsx index 9161b2f7a5..d129f60ee5 100644 --- a/app/javascript/mastodon/features/account_edit/index.tsx +++ b/app/javascript/mastodon/features/account_edit/index.tsx @@ -59,7 +59,7 @@ export const messages = defineMessages({ defaultMessage: 'Add a short introduction to help others identify you.', }, bioAddLabel: { - id: 'account_edit.bio.label', + id: 'account_edit.bio.add_label', defaultMessage: 'Add bio', }, bioEditLabel: { diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index fc6e4a8a23..47ea34cc4a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -141,8 +141,8 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications_short": "Unmute notifications", "account.unmute_short": "Unmute", + "account_edit.bio.add_label": "Add bio", "account_edit.bio.edit_label": "Edit bio", - "account_edit.bio.label": "bio", "account_edit.bio.placeholder": "Add a short introduction to help others identify you.", "account_edit.bio.title": "Bio", "account_edit.bio_modal.add_title": "Add bio", From d9db4779cf2c0a4ad19f113c1bec25cab0fe68f7 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 25 Mar 2026 11:57:34 +0100 Subject: [PATCH 12/17] Handle local/remote collection items differently when deleting (#38383) --- .../delete_collection_item_service.rb | 9 ++++--- .../delete_collection_item_service_spec.rb | 27 ++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/app/services/delete_collection_item_service.rb b/app/services/delete_collection_item_service.rb index 47df001d60..168eb9ba0a 100644 --- a/app/services/delete_collection_item_service.rb +++ b/app/services/delete_collection_item_service.rb @@ -5,9 +5,12 @@ class DeleteCollectionItemService @collection_item = collection_item @collection = collection_item.collection - revoke ? @collection_item.revoke! : @collection_item.destroy! - - distribute_remove_activity if Mastodon::Feature.collections_federation_enabled? + if collection_item.local? + revoke ? @collection_item.revoke! : @collection_item.destroy! + distribute_remove_activity if Mastodon::Feature.collections_federation_enabled? + else + collection_item.destroy! + end end private diff --git a/spec/services/delete_collection_item_service_spec.rb b/spec/services/delete_collection_item_service_spec.rb index bdd37ad4a8..d7bfb97f67 100644 --- a/spec/services/delete_collection_item_service_spec.rb +++ b/spec/services/delete_collection_item_service_spec.rb @@ -13,17 +13,30 @@ RSpec.describe DeleteCollectionItemService do expect { subject.call(collection_item) }.to change(collection.collection_items, :count).by(-1) end - it 'federates a `Remove` activity', feature: :collections_federation do - subject.call(collection_item) + context 'when the collection is local' do + it 'federates a `Remove` activity', feature: :collections_federation do + subject.call(collection_item) - expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job + end + + context 'when `revoke` is set to true' do + it 'revokes the collection item' do + subject.call(collection_item, revoke: true) + + expect(collection_item.reload).to be_revoked + end + end end - context 'when `revoke` is set to true' do - it 'revokes the collection item' do - subject.call(collection_item, revoke: true) + context 'when the collection is remote' do + let(:collection) { Fabricate(:remote_collection) } + let!(:collection_item) { Fabricate(:collection_item, collection:, state: :accepted) } - expect(collection_item.reload).to be_revoked + it 'destroys the collection withouth federating anything', feature: :collections_federation do + expect { subject.call(collection_item, revoke: true) }.to change(collection.collection_items, :count).by(-1) + + expect(ActivityPub::AccountRawDistributionWorker).to_not have_enqueued_sidekiq_job end end end From 45e7c7a5e184b42868357efe44243e26ff47798c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 12:22:11 +0100 Subject: [PATCH 13/17] Update storybook (non-major) (#38353) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Claire --- .storybook/static/mockServiceWorker.js | 2 +- yarn.lock | 155 +++++++++++++------------ 2 files changed, 83 insertions(+), 74 deletions(-) diff --git a/.storybook/static/mockServiceWorker.js b/.storybook/static/mockServiceWorker.js index 02115fb4d9..b17fcd650c 100644 --- a/.storybook/static/mockServiceWorker.js +++ b/.storybook/static/mockServiceWorker.js @@ -7,7 +7,7 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.12.1' +const PACKAGE_VERSION = '2.12.14' const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() diff --git a/yarn.lock b/yarn.lock index dde95e8d33..e4b7b7da1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3010,9 +3010,9 @@ __metadata: languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.40.0": - version: 0.40.0 - resolution: "@mswjs/interceptors@npm:0.40.0" +"@mswjs/interceptors@npm:^0.41.2": + version: 0.41.3 + resolution: "@mswjs/interceptors@npm:0.41.3" dependencies: "@open-draft/deferred-promise": "npm:^2.2.0" "@open-draft/logger": "npm:^0.3.0" @@ -3020,7 +3020,7 @@ __metadata: is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" strict-event-emitter: "npm:^0.5.1" - checksum: 10c0/4500f17b65910b2633182fdb15a81ccb6ccd4488a8c45bc2f7acdaaff4621c3cce5362e6b59ddc4fa28d315d0efb0608fd1f0d536bc5345141f8ac03fd7fab22 + checksum: 10c0/a259bbfc3bb4caada7a9a3529cc830159818e838c152df89ac890e7203df615a5e070ca63aa1e70a39868322ff5c1441ab74bbadb4081ca55b0c3a462e2903c0 languageName: node linkType: hard @@ -3830,37 +3830,37 @@ __metadata: linkType: hard "@storybook/addon-a11y@npm:^10.3.0": - version: 10.3.0 - resolution: "@storybook/addon-a11y@npm:10.3.0" + version: 10.3.3 + resolution: "@storybook/addon-a11y@npm:10.3.3" dependencies: "@storybook/global": "npm:^5.0.0" axe-core: "npm:^4.2.0" peerDependencies: - storybook: ^10.3.0 - checksum: 10c0/3efcaeeaadf028427ed7af929a4f9e8d5ae1cfba6b0f0c20832009ecc6088e3df998c567ba7a2ee695cc5da4d17fe404f2094b80119a1a34a8c1c0a900d19ebe + storybook: ^10.3.3 + checksum: 10c0/da83678c1fc351a3893bab7c4d04a81b11aeeb51112b03cff5c681fd5951b7c12f469410369eb0e02e7a91ce732b4f297077136855a73cdf5dd8ab3735dab3b6 languageName: node linkType: hard "@storybook/addon-docs@npm:^10.3.0": - version: 10.3.0 - resolution: "@storybook/addon-docs@npm:10.3.0" + version: 10.3.3 + resolution: "@storybook/addon-docs@npm:10.3.3" dependencies: "@mdx-js/react": "npm:^3.0.0" - "@storybook/csf-plugin": "npm:10.3.0" + "@storybook/csf-plugin": "npm:10.3.3" "@storybook/icons": "npm:^2.0.1" - "@storybook/react-dom-shim": "npm:10.3.0" + "@storybook/react-dom-shim": "npm:10.3.3" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^10.3.0 - checksum: 10c0/f70ce1bb5bd31ace42386c8000b5e1b0a9b509c574b9b1dca4f1e55ebaa081b93db45a5661e3dfe0133581abfcb70a7acbd4bd45ee0f846cbc01f631ced54ffa + storybook: ^10.3.3 + checksum: 10c0/19a98f3e8fcf97d35bb25f6cda49708e56006e445d9f04cd80eb697ee452c158203af1f4f3e71358e47a2e257d7fdb85c29ece5f4b36f71dff95070ca4a85af2 languageName: node linkType: hard "@storybook/addon-vitest@npm:^10.3.0": - version: 10.3.0 - resolution: "@storybook/addon-vitest@npm:10.3.0" + version: 10.3.3 + resolution: "@storybook/addon-vitest@npm:10.3.3" dependencies: "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^2.0.1" @@ -3868,7 +3868,7 @@ __metadata: "@vitest/browser": ^3.0.0 || ^4.0.0 "@vitest/browser-playwright": ^4.0.0 "@vitest/runner": ^3.0.0 || ^4.0.0 - storybook: ^10.3.0 + storybook: ^10.3.3 vitest: ^3.0.0 || ^4.0.0 peerDependenciesMeta: "@vitest/browser": @@ -3879,32 +3879,32 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/d6c1c688af591155b9dcdc68be55ab04cb864b569b86c91fafc4407e5c1eec30bacc2d23258837eda0e069ae86f3f95d134b8e6cc7b1d7f4b73f7a00f7470244 + checksum: 10c0/1691bbe974b55510eb1b0d50a542322b79302e42789b35ecdda3fdcd8a289693c681c2a2fcf9c219c63a6d1112433f1f13305bd24143d2183e8d7dd53b65d560 languageName: node linkType: hard -"@storybook/builder-vite@npm:10.3.0": - version: 10.3.0 - resolution: "@storybook/builder-vite@npm:10.3.0" +"@storybook/builder-vite@npm:10.3.3": + version: 10.3.3 + resolution: "@storybook/builder-vite@npm:10.3.3" dependencies: - "@storybook/csf-plugin": "npm:10.3.0" + "@storybook/csf-plugin": "npm:10.3.3" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^10.3.0 + storybook: ^10.3.3 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/62dc1ead65b5a8a17187862ac13a47867dd6f1fc9ff43e6d0c8e1a82d6c4cc8a6bb219cd4adcbce664654cc1c0bf1cb82fd56b706923b3b7220290eef3011e3f + checksum: 10c0/90b002777ff4b0b31ea4bc8d4f6e13f4d4c35a51c2bad7cf0b2e0a3a2f4ec3aa387f87ed174f7589d29842564f61346415dc0c919819e9ab45827c2c0f6141f2 languageName: node linkType: hard -"@storybook/csf-plugin@npm:10.3.0": - version: 10.3.0 - resolution: "@storybook/csf-plugin@npm:10.3.0" +"@storybook/csf-plugin@npm:10.3.3": + version: 10.3.3 + resolution: "@storybook/csf-plugin@npm:10.3.3" dependencies: unplugin: "npm:^2.3.5" peerDependencies: esbuild: "*" rollup: "*" - storybook: ^10.3.0 + storybook: ^10.3.3 vite: "*" webpack: "*" peerDependenciesMeta: @@ -3916,7 +3916,7 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/59c1784257d313fb7298a34c079462ba0ad518f82369441e6432da1abdc47ecb16afc40bbb02fd1331183be10914d383ed1f68a6b431ea25019fd50b63453e7f + checksum: 10c0/62d52c50555ca0f18907962179aa90287e6b95ba6b31cbbeb071842f1580491ff8578cc628f9fd1809a0ef48e2b23164657204c2de16a3f7c9830c4b69c822aa languageName: node linkType: hard @@ -3937,25 +3937,25 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:10.3.0": - version: 10.3.0 - resolution: "@storybook/react-dom-shim@npm:10.3.0" +"@storybook/react-dom-shim@npm:10.3.3": + version: 10.3.3 + resolution: "@storybook/react-dom-shim@npm:10.3.3" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.0 - checksum: 10c0/59690a34b39299853ae689e891b88b01dd3019b1b9da56aa9cfc318ccd3880ec3736ec2f36b08c924df6952e510ea62d2810c32d2fda5bb6db71d133b3c94984 + storybook: ^10.3.3 + checksum: 10c0/d4018e1e2acf64d521a13b2190d263b2e873ac65172facda7e443716ede593195e21bb9e0cd288e785a25a5973527813a5ccdb069881a2bc22e490342237d026 languageName: node linkType: hard "@storybook/react-vite@npm:^10.3.0": - version: 10.3.0 - resolution: "@storybook/react-vite@npm:10.3.0" + version: 10.3.3 + resolution: "@storybook/react-vite@npm:10.3.3" dependencies: "@joshwooding/vite-plugin-react-docgen-typescript": "npm:^0.6.4" "@rollup/pluginutils": "npm:^5.0.2" - "@storybook/builder-vite": "npm:10.3.0" - "@storybook/react": "npm:10.3.0" + "@storybook/builder-vite": "npm:10.3.3" + "@storybook/react": "npm:10.3.3" empathic: "npm:^2.0.0" magic-string: "npm:^0.30.0" react-docgen: "npm:^8.0.0" @@ -3964,29 +3964,29 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.0 + storybook: ^10.3.3 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/ab000cb70698e971965d5970dd547579dc14428238055826b6d0d7069bb56fc5e6ce7dc22a0ee0f4c4b9c3f0c505a6c246367d5bedac0bc70720fee666a24d88 + checksum: 10c0/6c044a398201ee35d973269c8d47def841caba628b20df95c316d0723a02b798167366de26281ce2c934a844d69c5a51f1e1bc6d11d7ee20219e3cd59d3c9343 languageName: node linkType: hard -"@storybook/react@npm:10.3.0": - version: 10.3.0 - resolution: "@storybook/react@npm:10.3.0" +"@storybook/react@npm:10.3.3": + version: 10.3.3 + resolution: "@storybook/react@npm:10.3.3" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/react-dom-shim": "npm:10.3.0" + "@storybook/react-dom-shim": "npm:10.3.3" react-docgen: "npm:^8.0.2" react-docgen-typescript: "npm:^2.2.2" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.0 + storybook: ^10.3.3 typescript: ">= 4.9.x" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/604414597b2093877b2ef5c9fc1d04d2b231a5cafdb1acc303b888fbf3c701c014642b20fa1f40048e3517bddd5b2e05f51427909f4c5475f1cecae768d352ab + checksum: 10c0/a6c36e4e14685348faf50b74de43603d23e0d18aaa21d16e91f6e0b274b1ab689033a8a42b424d776dcdfefa744a6d919a2f509dae8e0520a19b0b20503a1fa7 languageName: node linkType: hard @@ -4700,7 +4700,7 @@ __metadata: languageName: node linkType: hard -"@types/statuses@npm:^2.0.4": +"@types/statuses@npm:^2.0.6": version: 2.0.6 resolution: "@types/statuses@npm:2.0.6" checksum: 10c0/dd88c220b0e2c6315686289525fd61472d2204d2e4bef4941acfb76bda01d3066f749ac74782aab5b537a45314fcd7d6261eefa40b6ec872691f5803adaa608d @@ -6060,8 +6060,8 @@ __metadata: linkType: hard "chromatic@npm:^13.3.3": - version: 13.3.3 - resolution: "chromatic@npm:13.3.3" + version: 13.3.5 + resolution: "chromatic@npm:13.3.5" peerDependencies: "@chromatic-com/cypress": ^0.*.* || ^1.0.0 "@chromatic-com/playwright": ^0.*.* || ^1.0.0 @@ -6074,7 +6074,7 @@ __metadata: chroma: dist/bin.js chromatic: dist/bin.js chromatic-cli: dist/bin.js - checksum: 10c0/6fc54df030113d91ef00a2050f5cb13ca182b355dae2c29cdd326fac6cf21d8ddc2cd93dc3f5db04379b7769d4df8e3ea5f18c3642e9e3a48545565f992a838c + checksum: 10c0/58b3d7984db000f8c7b605788569a24c3f3cd41bb6b2d3a94f18acc9ff11ce6c6881f795c8390a94ff721ccfcf8a2d7942e78a54a1f70294a7b3d35ccc382154 languageName: node linkType: hard @@ -8262,10 +8262,10 @@ __metadata: languageName: node linkType: hard -"graphql@npm:^16.8.1": - version: 16.11.0 - resolution: "graphql@npm:16.11.0" - checksum: 10c0/124da7860a2292e9acf2fed0c71fc0f6a9b9ca865d390d112bdd563c1f474357141501c12891f4164fe984315764736ad67f705219c62f7580681d431a85db88 +"graphql@npm:^16.12.0": + version: 16.13.2 + resolution: "graphql@npm:16.13.2" + checksum: 10c0/64e822a0a0e4398781e4bc9765b88d370c08261498b517add4b878038ef7be2005b6b394a79a5102b9379d57052f60bc7f23fec8f39808d101984a74772ebd9d languageName: node linkType: hard @@ -10151,25 +10151,25 @@ __metadata: linkType: hard "msw@npm:^2.12.1": - version: 2.12.1 - resolution: "msw@npm:2.12.1" + version: 2.12.14 + resolution: "msw@npm:2.12.14" dependencies: "@inquirer/confirm": "npm:^5.0.0" - "@mswjs/interceptors": "npm:^0.40.0" + "@mswjs/interceptors": "npm:^0.41.2" "@open-draft/deferred-promise": "npm:^2.2.0" - "@types/statuses": "npm:^2.0.4" + "@types/statuses": "npm:^2.0.6" cookie: "npm:^1.0.2" - graphql: "npm:^16.8.1" + graphql: "npm:^16.12.0" headers-polyfill: "npm:^4.0.2" is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" path-to-regexp: "npm:^6.3.0" picocolors: "npm:^1.1.1" - rettime: "npm:^0.7.0" + rettime: "npm:^0.10.1" statuses: "npm:^2.0.2" strict-event-emitter: "npm:^0.5.1" tough-cookie: "npm:^6.0.0" - type-fest: "npm:^4.26.1" + type-fest: "npm:^5.2.0" until-async: "npm:^3.0.2" yargs: "npm:^17.7.2" peerDependencies: @@ -10179,7 +10179,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10c0/822f4fc0cb2bdade39a67045d56b32fc7b15f30814a64c637a3c55d99358a4c1d61ed00d21fafafbbee320ad600e5a048d938b195e0cef5c59e016a040595176 + checksum: 10c0/73e2c08a74bac94036c75aa0340e48573a233d5060cb3098ead7ec0eaddaacef4de399b81e0e3f41ea73d5f92341adc9cf0ae908ad74583d294afa4667e7d277 languageName: node linkType: hard @@ -12421,10 +12421,10 @@ __metadata: languageName: node linkType: hard -"rettime@npm:^0.7.0": - version: 0.7.0 - resolution: "rettime@npm:0.7.0" - checksum: 10c0/1460539d49415c37e46884bf1db7a5da974b239c1bd6976e1cf076fad169067dc8f55cd2572aec504433162f3627b6d8123eea977d110476258045d620bd051b +"rettime@npm:^0.10.1": + version: 0.10.1 + resolution: "rettime@npm:0.10.1" + checksum: 10c0/94fb30cd13684386c70301c4cff4391bc0c6dc7aeac49364fdfeeaba167897bdb28a58bbb46d1a415f1c5c6240fda3f765cb329e471f37fdc513c739f0b04fbe languageName: node linkType: hard @@ -13179,8 +13179,8 @@ __metadata: linkType: hard "storybook@npm:^10.3.0": - version: 10.3.0 - resolution: "storybook@npm:10.3.0" + version: 10.3.3 + resolution: "storybook@npm:10.3.3" dependencies: "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^2.0.1" @@ -13201,7 +13201,7 @@ __metadata: optional: true bin: storybook: ./dist/bin/dispatcher.js - checksum: 10c0/aaab242fb36948c122b8a9bd6b45120418e25af105e96c303f565ef19d08001adb17aaa9810c9f44b4d494fab999a53e58e4789c6202e0880d1e701e93f10e21 + checksum: 10c0/f61e199dfb11a02be6004a3d72c0ecd062f1770d60d480ecf42a6af8a6c49f9082b17c37fde2eea58ed53de35e7b190c95bcad8c8e4d47f9419d577826e0c00c languageName: node linkType: hard @@ -13648,6 +13648,13 @@ __metadata: languageName: node linkType: hard +"tagged-tag@npm:^1.0.0": + version: 1.0.0 + resolution: "tagged-tag@npm:1.0.0" + checksum: 10c0/91d25c9ffb86a91f20522cefb2cbec9b64caa1febe27ad0df52f08993ff60888022d771e868e6416cf2e72dab68449d2139e8709ba009b74c6c7ecd4000048d1 + languageName: node + linkType: hard + "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -13990,10 +13997,12 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^4.26.1": - version: 4.41.0 - resolution: "type-fest@npm:4.41.0" - checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4 +"type-fest@npm:^5.2.0": + version: 5.5.0 + resolution: "type-fest@npm:5.5.0" + dependencies: + tagged-tag: "npm:^1.0.0" + checksum: 10c0/60bf79a8df45abf99490e3204eceb5cf7f915413f8a69fb578c75cab37ddcb7d29ee21f185f0e1617323ac0b2a441e001b8dc691e220d0b087e9c29ea205538c languageName: node linkType: hard From 7583d07d3a1e17808424b910e0dffe95a60bce87 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 25 Mar 2026 13:32:47 +0100 Subject: [PATCH 14/17] Change avatar and account header description limit and expose it in API (#38384) --- app/models/concerns/account/avatar.rb | 3 ++- app/models/concerns/account/header.rb | 3 ++- app/serializers/rest/instance_serializer.rb | 2 ++ spec/requests/api/v2/instance_spec.rb | 9 ++++++++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/account/avatar.rb b/app/models/concerns/account/avatar.rb index 1b561fc770..bcc48791d5 100644 --- a/app/models/concerns/account/avatar.rb +++ b/app/models/concerns/account/avatar.rb @@ -3,6 +3,7 @@ module Account::Avatar extend ActiveSupport::Concern + MAX_DESCRIPTION_LENGTH = 150 AVATAR_IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze AVATAR_LIMIT = 8.megabytes AVATAR_DIMENSIONS = [400, 400].freeze @@ -25,7 +26,7 @@ module Account::Avatar validates_attachment_size :avatar, less_than: AVATAR_LIMIT remotable_attachment :avatar, AVATAR_LIMIT, suppress_errors: false - validates :avatar_description, length: { maximum: MediaAttachment::MAX_DESCRIPTION_LENGTH }, if: -> { local? && will_save_change_to_avatar_description? } + validates :avatar_description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: -> { local? && will_save_change_to_avatar_description? } end def avatar_original_url diff --git a/app/models/concerns/account/header.rb b/app/models/concerns/account/header.rb index 75d3c04542..a3715c211b 100644 --- a/app/models/concerns/account/header.rb +++ b/app/models/concerns/account/header.rb @@ -3,6 +3,7 @@ module Account::Header extend ActiveSupport::Concern + MAX_DESCRIPTION_LENGTH = 150 HEADER_IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze HEADER_LIMIT = 8.megabytes HEADER_DIMENSIONS = [1500, 500].freeze @@ -26,7 +27,7 @@ module Account::Header validates_attachment_size :header, less_than: HEADER_LIMIT remotable_attachment :header, HEADER_LIMIT, suppress_errors: false - validates :header_description, length: { maximum: MediaAttachment::MAX_DESCRIPTION_LENGTH }, if: -> { local? && will_save_change_to_header_description? } + validates :header_description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: -> { local? && will_save_change_to_header_description? } end def header_original_url diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 625cd3ad8c..52d7f2b363 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -71,6 +71,8 @@ class REST::InstanceSerializer < ActiveModel::Serializer accounts: { max_display_name_length: Account::DISPLAY_NAME_LENGTH_LIMIT, max_note_length: Account::NOTE_LENGTH_LIMIT, + max_avatar_description_length: Account::Avatar::MAX_DESCRIPTION_LENGTH, + max_header_description_length: Account::Header::MAX_DESCRIPTION_LENGTH, max_featured_tags: FeaturedTag::LIMIT, max_pinned_statuses: StatusPinValidator::PIN_LIMIT, max_profile_fields: Account::DEFAULT_FIELDS_SIZE, diff --git a/spec/requests/api/v2/instance_spec.rb b/spec/requests/api/v2/instance_spec.rb index 39e7105f09..d9d5df1bea 100644 --- a/spec/requests/api/v2/instance_spec.rb +++ b/spec/requests/api/v2/instance_spec.rb @@ -66,8 +66,15 @@ RSpec.describe 'Instances' do include( configuration: include( accounts: include( + max_display_name_length: Account::DISPLAY_NAME_LENGTH_LIMIT, + max_note_length: Account::NOTE_LENGTH_LIMIT, + max_avatar_description_length: Account::Avatar::MAX_DESCRIPTION_LENGTH, + max_header_description_length: Account::Header::MAX_DESCRIPTION_LENGTH, max_featured_tags: FeaturedTag::LIMIT, - max_pinned_statuses: StatusPinValidator::PIN_LIMIT + max_pinned_statuses: StatusPinValidator::PIN_LIMIT, + max_profile_fields: Account::DEFAULT_FIELDS_SIZE, + profile_field_name_limit: Account::Field::MAX_CHARACTERS_LOCAL, + profile_field_value_limit: Account::Field::MAX_CHARACTERS_LOCAL ), statuses: include( max_characters: StatusLengthValidator::MAX_CHARS, From 84ea8334feedffdc0067a21cb8cb605ff547d37b Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 25 Mar 2026 14:04:05 +0100 Subject: [PATCH 15/17] Do not auto-accept remote collection items (#38386) --- app/services/add_account_to_collection_service.rb | 6 ++---- app/services/create_collection_service.rb | 3 ++- spec/services/add_account_to_collection_service_spec.rb | 5 ++++- spec/services/create_collection_service_spec.rb | 6 +++++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/services/add_account_to_collection_service.rb b/app/services/add_account_to_collection_service.rb index e53c67b57f..c5a4697e79 100644 --- a/app/services/add_account_to_collection_service.rb +++ b/app/services/add_account_to_collection_service.rb @@ -22,10 +22,8 @@ class AddAccountToCollectionService private def create_collection_item - @collection.collection_items.create!( - account: @account, - state: :accepted - ) + state = @account.local? ? :accepted : :pending + @collection.collection_items.create!(account: @account, state:) end def distribute_add_activity diff --git a/app/services/create_collection_service.rb b/app/services/create_collection_service.rb index b0d291d7c3..979794224a 100644 --- a/app/services/create_collection_service.rb +++ b/app/services/create_collection_service.rb @@ -36,7 +36,8 @@ class CreateCollectionService @accounts_to_add.each do |account_to_add| raise Mastodon::NotPermittedError, I18n.t('accounts.errors.cannot_be_added_to_collections') unless AccountPolicy.new(@account, account_to_add).feature? - @collection.collection_items.build(account: account_to_add, state: :accepted) + state = account_to_add.local? ? :accepted : :pending + @collection.collection_items.build(account: account_to_add, state:) end end diff --git a/spec/services/add_account_to_collection_service_spec.rb b/spec/services/add_account_to_collection_service_spec.rb index 35c7432ebe..c1e3ab45c8 100644 --- a/spec/services/add_account_to_collection_service_spec.rb +++ b/spec/services/add_account_to_collection_service_spec.rb @@ -32,9 +32,12 @@ RSpec.describe AddAccountToCollectionService do context 'when the account is remote', feature: :collections_federation do let(:account) { Fabricate(:remote_account, feature_approval_policy: (0b10 << 16)) } - it 'federates a `FeatureRequest` activity' do + it 'marks the item as `pending` and federates a `FeatureRequest` activity' do subject.call(collection, account) + new_item = collection.collection_items.last + expect(new_item).to be_pending + expect(ActivityPub::FeatureRequestWorker).to have_enqueued_sidekiq_job end end diff --git a/spec/services/create_collection_service_spec.rb b/spec/services/create_collection_service_spec.rb index 0d71117e73..976782679f 100644 --- a/spec/services/create_collection_service_spec.rb +++ b/spec/services/create_collection_service_spec.rb @@ -65,9 +65,13 @@ RSpec.describe CreateCollectionService do context 'when some accounts are remote' do let(:accounts) { Fabricate.times(2, :remote_account, feature_approval_policy: (0b10 << 16)) } - it 'federates `FeatureRequest` activities', feature: :collections_federation do + it 'marks the new items as `pending` and federates `FeatureRequest` activities', feature: :collections_federation do subject.call(params, author) + new_collection = author.collections.last + expect(new_collection.collection_items.size).to eq 2 + expect(new_collection.collection_items).to all(be_pending) + expect(ActivityPub::FeatureRequestWorker).to have_enqueued_sidekiq_job.exactly(2).times end end From bcead764109bff870cb24628e9bf4c9bbcd25bd9 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 25 Mar 2026 14:04:09 +0100 Subject: [PATCH 16/17] Only federate accepted collection items (#38385) --- .../activitypub/featured_collections_controller.rb | 4 +++- .../activitypub/featured_collection_serializer.rb | 4 ++++ .../featured_collection_serializer_spec.rb | 13 +++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/controllers/activitypub/featured_collections_controller.rb b/app/controllers/activitypub/featured_collections_controller.rb index 872d03423d..09de5583cc 100644 --- a/app/controllers/activitypub/featured_collections_controller.rb +++ b/app/controllers/activitypub/featured_collections_controller.rb @@ -33,7 +33,9 @@ class ActivityPub::FeaturedCollectionsController < ApplicationController def set_collections authorize @account, :index_collections? - @collections = @account.collections.page(params[:page]).per(PER_PAGE) + @collections = @account.collections + .includes(:accepted_collection_items) + .page(params[:page]).per(PER_PAGE) rescue Mastodon::NotPermittedError not_found end diff --git a/app/serializers/activitypub/featured_collection_serializer.rb b/app/serializers/activitypub/featured_collection_serializer.rb index d6242b9d5b..e37085d422 100644 --- a/app/serializers/activitypub/featured_collection_serializer.rb +++ b/app/serializers/activitypub/featured_collection_serializer.rb @@ -46,4 +46,8 @@ class ActivityPub::FeaturedCollectionSerializer < ActivityPub::Serializer def language_present? object.language.present? end + + def collection_items + object.accepted_collection_items + end end diff --git a/spec/serializers/activitypub/featured_collection_serializer_spec.rb b/spec/serializers/activitypub/featured_collection_serializer_spec.rb index c0ae43abb9..b25ec13a52 100644 --- a/spec/serializers/activitypub/featured_collection_serializer_spec.rb +++ b/spec/serializers/activitypub/featured_collection_serializer_spec.rb @@ -67,4 +67,17 @@ RSpec.describe ActivityPub::FeaturedCollectionSerializer do expect(subject).to_not have_key('summary') end end + + context 'when not all items are accepted' do + before do + collection_items.first.update!(state: :pending) + end + + it 'only includes accepted items' do + items = subject['orderedItems'] + + expect(items.size).to eq 1 + expect(items.first['id']).to eq ActivityPub::TagManager.instance.uri_for(collection_items.last) + end + end end From 664efcf4c3f9713894054fb642a252d8752a4123 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Mar 2026 09:18:14 -0400 Subject: [PATCH 17/17] Add `have_attachment` matcher for attached file exports (#38389) --- .../export_domain_blocks_controller_spec.rb | 2 ++ .../export_controller_concern_spec.rb | 3 ++- .../settings/imports_controller_spec.rb | 22 +++++++++++-------- .../admin/export_domain_allows_spec.rb | 2 ++ spec/requests/severed_relationships_spec.rb | 12 ++++------ spec/support/matchers/attachments.rb | 17 ++++++++++++++ 6 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 spec/support/matchers/attachments.rb diff --git a/spec/controllers/admin/export_domain_blocks_controller_spec.rb b/spec/controllers/admin/export_domain_blocks_controller_spec.rb index 442f3e5a15..ad95ccc3d4 100644 --- a/spec/controllers/admin/export_domain_blocks_controller_spec.rb +++ b/spec/controllers/admin/export_domain_blocks_controller_spec.rb @@ -26,6 +26,8 @@ RSpec.describe Admin::ExportDomainBlocksController do get :export, params: { format: :csv } expect(response).to have_http_status(200) + expect(response) + .to have_attachment('domain_blocks.csv') expect(response.body).to eq(domain_blocks_csv_file) end diff --git a/spec/controllers/concerns/settings/export_controller_concern_spec.rb b/spec/controllers/concerns/settings/export_controller_concern_spec.rb index 6c1a06114c..782ec88ecd 100644 --- a/spec/controllers/concerns/settings/export_controller_concern_spec.rb +++ b/spec/controllers/concerns/settings/export_controller_concern_spec.rb @@ -23,7 +23,8 @@ RSpec.describe Settings::ExportControllerConcern do expect(response).to have_http_status(200) expect(response.media_type).to eq 'text/csv' - expect(response.headers['Content-Disposition']).to start_with 'attachment; filename="anonymous.csv"' + expect(response) + .to have_attachment('anonymous.csv') expect(response.body).to eq 'body data value' end diff --git a/spec/controllers/settings/imports_controller_spec.rb b/spec/controllers/settings/imports_controller_spec.rb index 0b399fcc40..a8fa9fdd35 100644 --- a/spec/controllers/settings/imports_controller_spec.rb +++ b/spec/controllers/settings/imports_controller_spec.rb @@ -136,7 +136,7 @@ RSpec.describe Settings::ImportsController do describe 'GET #failures' do subject { get :failures, params: { id: bulk_import.id }, format: :csv } - shared_examples 'export failed rows' do |expected_contents| + shared_examples 'export failed rows' do |filename, expected_contents| let(:bulk_import) { Fabricate(:bulk_import, account: user.account, type: import_type, state: :finished) } before do @@ -147,8 +147,12 @@ RSpec.describe Settings::ImportsController do it 'returns expected contents', :aggregate_failures do subject - expect(response).to have_http_status(200) - expect(response.body).to eq expected_contents + expect(response) + .to have_http_status(200) + expect(response) + .to have_attachment(filename) + expect(response.body) + .to eq expected_contents end end @@ -162,7 +166,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "Account address,Show boosts,Notify on new posts,Languages\nfoo@bar,true,false,\nuser@bar,false,true,\"fr, de\"\n" + it_behaves_like 'export failed rows', 'following_accounts_failures.csv', "Account address,Show boosts,Notify on new posts,Languages\nfoo@bar,true,false,\nuser@bar,false,true,\"fr, de\"\n" end context 'with blocks' do @@ -175,7 +179,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "foo@bar\nuser@bar\n" + it_behaves_like 'export failed rows', 'blocked_accounts_failures.csv', "foo@bar\nuser@bar\n" end context 'with mutes' do @@ -188,7 +192,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "Account address,Hide notifications\nfoo@bar,true\nuser@bar,false\n" + it_behaves_like 'export failed rows', 'muted_accounts_failures.csv', "Account address,Hide notifications\nfoo@bar,true\nuser@bar,false\n" end context 'with domain blocks' do @@ -201,7 +205,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "bad.domain\nevil.domain\n" + it_behaves_like 'export failed rows', 'blocked_domains_failures.csv', "bad.domain\nevil.domain\n" end context 'with bookmarks' do @@ -214,7 +218,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "https://foo.com/1\nhttps://foo.com/2\n" + it_behaves_like 'export failed rows', 'bookmarks_failures.csv', "https://foo.com/1\nhttps://foo.com/2\n" end context 'with lists' do @@ -227,7 +231,7 @@ RSpec.describe Settings::ImportsController do ] end - it_behaves_like 'export failed rows', "Amigos,user@example.com\nFrenemies,user@org.org\n" + it_behaves_like 'export failed rows', 'lists_failures.csv', "Amigos,user@example.com\nFrenemies,user@org.org\n" end end diff --git a/spec/requests/admin/export_domain_allows_spec.rb b/spec/requests/admin/export_domain_allows_spec.rb index dd1a55a022..4314bdfb50 100644 --- a/spec/requests/admin/export_domain_allows_spec.rb +++ b/spec/requests/admin/export_domain_allows_spec.rb @@ -27,6 +27,8 @@ RSpec.describe 'Admin Export Domain Allows' do .to have_http_status(200) expect(response.body) .to eq(domain_allows_csv_file) + expect(response) + .to have_attachment('domain_allows.csv') expect(response.media_type) .to eq('text/csv') end diff --git a/spec/requests/severed_relationships_spec.rb b/spec/requests/severed_relationships_spec.rb index e0116120cb..becc16570d 100644 --- a/spec/requests/severed_relationships_spec.rb +++ b/spec/requests/severed_relationships_spec.rb @@ -16,10 +16,8 @@ RSpec.describe 'Severed Relationships' do .to have_http_status(200) expect(response.content_type) .to start_with('text/csv') - expect(response.headers['Content-Disposition']) - .to match(<<~FILENAME.squish) - attachment; filename="following-example.com-#{Date.current}.csv" - FILENAME + expect(response) + .to have_attachment("following-example.com-#{Date.current}.csv") expect(response.body) .to include('Account address') end @@ -44,10 +42,8 @@ RSpec.describe 'Severed Relationships' do .to have_http_status(200) expect(response.content_type) .to start_with('text/csv') - expect(response.headers['Content-Disposition']) - .to match(<<~FILENAME.squish) - attachment; filename="followers-example.com-#{Date.current}.csv" - FILENAME + expect(response) + .to have_attachment("followers-example.com-#{Date.current}.csv") expect(response.body) .to include('Account address') end diff --git a/spec/support/matchers/attachments.rb b/spec/support/matchers/attachments.rb new file mode 100644 index 0000000000..482f3a055c --- /dev/null +++ b/spec/support/matchers/attachments.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +RSpec::Matchers.define :have_attachment do |value| + match do |response| + expect(response.headers['Content-Disposition']) + .to match(<<~FILENAME.squish) + attachment; filename="#{value}" + FILENAME + end + + failure_message do |response| + <<~ERROR + Expected response to have file attachment of `#{value}` but was: + Content-Disposition: #{response.headers['Content-Disposition']} + ERROR + end +end