From 83fcd1cf4f0d11cd34d79d6dcda8d827848d3bc7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:01:07 +0200 Subject: [PATCH 01/27] Update dependency rails-i18n to v8.0.2 (#35796) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b0bf819481f..6a4040cffbc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -688,7 +688,7 @@ GEM rails-html-sanitizer (1.6.2) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - rails-i18n (8.0.1) + rails-i18n (8.0.2) i18n (>= 0.7, < 2) railties (>= 8.0.0, < 9) railties (8.0.2.1) From a18e6199efb60be6d0f14bca176dfc37f1fdbc07 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:03:54 +0200 Subject: [PATCH 02/27] New Crowdin Translations (automated) (#35795) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/az.json | 3 +- app/javascript/mastodon/locales/be.json | 16 +++++++- app/javascript/mastodon/locales/bg.json | 28 ++++++++++++- app/javascript/mastodon/locales/ca.json | 18 ++++++++- app/javascript/mastodon/locales/cs.json | 16 +++++++- app/javascript/mastodon/locales/cy.json | 33 ++++++++++++++- app/javascript/mastodon/locales/da.json | 16 +++++++- app/javascript/mastodon/locales/el.json | 16 +++++++- app/javascript/mastodon/locales/eo.json | 14 ++++++- app/javascript/mastodon/locales/es-MX.json | 16 +++++++- app/javascript/mastodon/locales/es.json | 16 +++++++- app/javascript/mastodon/locales/fa.json | 20 ++++++++- app/javascript/mastodon/locales/fi.json | 16 +++++++- app/javascript/mastodon/locales/ga.json | 16 +++++++- app/javascript/mastodon/locales/gl.json | 16 +++++++- app/javascript/mastodon/locales/he.json | 16 +++++++- app/javascript/mastodon/locales/nan.json | 22 ++++++++-- app/javascript/mastodon/locales/zh-TW.json | 6 +-- config/locales/bg.yml | 38 +++++++++++++++++ config/locales/ca.yml | 2 +- config/locales/cy.yml | 31 ++++++++++++++ config/locales/devise.be.yml | 2 +- config/locales/fa.yml | 20 +++++++++ config/locales/fi.yml | 8 ++-- config/locales/nan.yml | 47 ++++++++++++++++++++-- config/locales/ru.yml | 22 +++++----- config/locales/simple_form.bg.yml | 15 +++++++ config/locales/simple_form.cy.yml | 10 +++++ config/locales/simple_form.fa.yml | 8 ++++ 29 files changed, 461 insertions(+), 46 deletions(-) diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index a243952ec7a..e9bcd2f34e0 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -174,7 +174,7 @@ "column.lists": "Siyahılar", "column.mutes": "Səssizləşdirilmiş istifadəçilər", "column.notifications": "Bildirişlər", - "column.pins": "Bərkidilmiş paylaşımlar", + "column.pins": "Sancılmış göndərişlər", "column.public": "Federasiya zaman qrafiki", "column_back_button.label": "Geriyə", "column_header.hide_settings": "Ayarları gizlət", @@ -483,6 +483,7 @@ "keyboard_shortcuts.my_profile": "Profilinizi açın", "keyboard_shortcuts.notifications": "Bildirişlər sütununu aç", "keyboard_shortcuts.open_media": "Medianı aç", + "keyboard_shortcuts.pinned": "Sancılmış göndərişlərin siyahısını aç", "keyboard_shortcuts.profile": "Müəllifin profilini aç", "keyboard_shortcuts.reply": "Göndərişə cavab ver", "keyboard_shortcuts.requests": "İzləmə istəyi siyahısını aç", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index a3caa5a0235..29ad29c4f52 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Ваш ідэнтыфікатар:", "domain_pill.your_server": "Ваш лічбавы дом, дзе захоўваюцца ўсе вашыя допісы. Не падабаецца гэты сервер? Змяніце сервер у любы час з захаваннем сваіх падпісчыкаў.", "domain_pill.your_username": "Ваш унікальны ідэнтыфікатар на гэтым серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.", + "dropdown.empty": "Выбраць варыянт", "embed.instructions": "Убудуйце гэты допіс на свой сайт, скапіраваўшы прыведзены ніжэй код.", "embed.preview": "Вось як гэта будзе выглядаць:", "emoji_button.activity": "Актыўнасць", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Допіс чакае пацвярджэння", "status.quote_error.pending_approval_popout.body": "Допісы, якія былі цытаваныя паміж серверамі Fediverse, могуць доўга загружацца, паколькі розныя серверы маюць розныя пратаколы.", "status.quote_error.pending_approval_popout.title": "Цытаваны допіс чакае пацвярджэння? Захоўвайце спакой", + "status.quote_policy_change": "Змяніць, хто можа цытаваць", "status.quote_post_author": "Цытаваў допіс @{name}", "status.read_more": "Чытаць болей", "status.reblog": "Пашырыць", @@ -959,5 +961,17 @@ "video.skip_forward": "Праматаць уперад", "video.unmute": "Уключыць гук", "video.volume_down": "Паменшыць гучнасць", - "video.volume_up": "Павялічыць гучнасць" + "video.volume_up": "Павялічыць гучнасць", + "visibility_modal.button_title": "Вызначыць бачнасць", + "visibility_modal.header": "Бачнасць і ўзаемадзеянне", + "visibility_modal.helper.direct_quoting": "Прыватныя згадванні нельга цытаваць.", + "visibility_modal.helper.privacy_editing": "Апублікаваным допісам нельга змяняць бачнасць.", + "visibility_modal.helper.private_quoting": "Допісы для падпісчыкаў нельга цытаваць.", + "visibility_modal.helper.unlisted_quoting": "Калі людзі працытуюць Вас, іх допіс таксама будзе схаваны ад стужкі трэндаў.", + "visibility_modal.instructions": "Кантралюйце, хто можа ўзаемадзейнічаць з Вашым допісам. Глабальныя налады можна знайсці ў Налады > Іншае.", + "visibility_modal.privacy_label": "Прыватнасць", + "visibility_modal.quote_followers": "Толькі падпісчыкі", + "visibility_modal.quote_label": "Змяніць, хто можа цытаваць", + "visibility_modal.quote_nobody": "Ніхто", + "visibility_modal.quote_public": "Усе" } diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 6f0cf6f54fe..04abc227fa9 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -1,6 +1,7 @@ { "about.blocks": "Модерирани сървъри", "about.contact": "За контакти:", + "about.default_locale": "По подразбиране", "about.disclaimer": "Mastodon е безплатен софтуер с отворен изходен код и търговска марка на Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Няма налична причина", "about.domain_blocks.preamble": "Mastodon обикновено позволява да разглеждате съдържание и да взаимодействате с други потребители от всякакви сървъри във Федивселената. Има изключения, направени конкретно за този сървър.", @@ -244,6 +245,9 @@ "confirmations.remove_from_followers.confirm": "Премахване на последовател", "confirmations.remove_from_followers.message": "{name} ще спре да ви следва. Наистина ли искате да продължите?", "confirmations.remove_from_followers.title": "Премахвате ли последовател?", + "confirmations.revoke_quote.confirm": "Премахване на публикация", + "confirmations.revoke_quote.message": "Действието е неотменимо.", + "confirmations.revoke_quote.title": "Премахвате ли публикацията?", "confirmations.unfollow.confirm": "Без следване", "confirmations.unfollow.message": "Наистина ли искате вече да не следвате {name}?", "confirmations.unfollow.title": "Спирате ли да следвате потребителя?", @@ -288,6 +292,7 @@ "domain_pill.your_handle": "Вашият адрес:", "domain_pill.your_server": "Цифровият ви дом, където живеят всичките ви публикации. Не харесвате ли този? Прехвърляте се на сървъри по всяко време и докарвате последователите си също.", "domain_pill.your_username": "Неповторимият ви идентификатор на този сървър. Възможно е да се намерят потребители със същото потребителско име на други сървъри.", + "dropdown.empty": "Изберете възможност", "embed.instructions": "Вградете публикацията в уебсайта си, копирайки кода долу.", "embed.preview": "Ето как ще изглежда:", "emoji_button.activity": "Дейност", @@ -493,6 +498,8 @@ "keyboard_shortcuts.translate": "за превод на публикация", "keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене", "keyboard_shortcuts.up": "Преместване нагоре в списъка", + "learn_more_link.got_it": "Разбрах", + "learn_more_link.learn_more": "Научете повече", "lightbox.close": "Затваряне", "lightbox.next": "Напред", "lightbox.previous": "Назад", @@ -587,6 +594,7 @@ "notification.label.mention": "Споменаване", "notification.label.private_mention": "Частно споменаване", "notification.label.private_reply": "Личен отговор", + "notification.label.quote": "{name} цитира ваша публикация", "notification.label.reply": "Отговор", "notification.mention": "Споменаване", "notification.mentioned_you": "{name} ви спомена", @@ -644,6 +652,7 @@ "notifications.column_settings.mention": "Споменавания:", "notifications.column_settings.poll": "Резултати от анкета:", "notifications.column_settings.push": "Изскачащи известия", + "notifications.column_settings.quote": "Цитати:", "notifications.column_settings.reblog": "Подсилвания:", "notifications.column_settings.show": "Показване в колоната", "notifications.column_settings.sound": "Пускане на звук", @@ -834,6 +843,8 @@ "status.bookmark": "Отмятане", "status.cancel_reblog_private": "Край на подсилването", "status.cannot_reblog": "Публикацията не може да се подсилва", + "status.context.load_new_replies": "Има нови отговори", + "status.context.loading": "Проверка за още отговори", "status.continued_thread": "Продължена нишка", "status.copy": "Копиране на връзката към публикация", "status.delete": "Изтриване", @@ -860,6 +871,10 @@ "status.open": "Разширяване на публикацията", "status.pin": "Закачане в профила", "status.quote_error.filtered": "Скрито поради един от филтрите ви", + "status.quote_error.not_available": "Неналична публикация", + "status.quote_error.pending_approval": "Публикацията чака одобрение", + "status.quote_policy_change": "Промяна кой може да цитира", + "status.quote_post_author": "Цитирах публикация от @{name}", "status.read_more": "Още за четене", "status.reblog": "Подсилване", "status.reblog_private": "Подсилване с оригиналната видимост", @@ -874,6 +889,7 @@ "status.reply": "Отговор", "status.replyAll": "Отговор на нишка", "status.report": "Докладване на @{name}", + "status.revoke_quote": "Премахване на моя публикация от публикацията на @{name}", "status.sensitive_warning": "Деликатно съдържание", "status.share": "Споделяне", "status.show_less_all": "Показване на по-малко за всички", @@ -933,5 +949,15 @@ "video.skip_forward": "Прескок напред", "video.unmute": "Без заглушаване", "video.volume_down": "Намаляване на звука", - "video.volume_up": "Увеличаване на звука" + "video.volume_up": "Увеличаване на звука", + "visibility_modal.button_title": "Задаване на видимост", + "visibility_modal.header": "Видимост и взаимодействие", + "visibility_modal.helper.direct_quoting": "Частни споменавания не може да се цитират.", + "visibility_modal.helper.privacy_editing": "Публикуваните публикации не може да променят видимостта си.", + "visibility_modal.instructions": "Управлявайте кой може да взаимодейства с тази публикация. Глобалните настройки може да се намерят под Предпочитания> Друго.", + "visibility_modal.privacy_label": "Поверителност", + "visibility_modal.quote_followers": "Само последователи", + "visibility_modal.quote_label": "Промяна кой може да цитира", + "visibility_modal.quote_nobody": "Никого", + "visibility_modal.quote_public": "Някой" } diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 103b4f3715d..288227053db 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -245,7 +245,9 @@ "confirmations.remove_from_followers.confirm": "Elimina el seguidor", "confirmations.remove_from_followers.message": "{name} deixarà de seguir-vos. Tirem endavant?", "confirmations.remove_from_followers.title": "Eliminem el seguidor?", + "confirmations.revoke_quote.confirm": "Eliminar la publicació", "confirmations.revoke_quote.message": "Aquesta acció no es pot desfer.", + "confirmations.revoke_quote.title": "Eliminar la publicació?", "confirmations.unfollow.confirm": "Deixa de seguir", "confirmations.unfollow.message": "Segur que vols deixar de seguir {name}?", "confirmations.unfollow.title": "Deixar de seguir l'usuari?", @@ -290,6 +292,7 @@ "domain_pill.your_handle": "El vostre identificador:", "domain_pill.your_server": "La vostra llar digital, on són totes les vostres publicacions. No us agrada aquesta? Canvieu de servidor quan vulgueu i emporteu-vos els vostres seguidors.", "domain_pill.your_username": "El vostre identificador únic en aquest servidor. Hi pot haver usuaris amb el mateix nom a diferents servidors.", + "dropdown.empty": "Seleccioneu una opció", "embed.instructions": "Incrusta aquest tut a la teva pàgina web copiant el codi següent.", "embed.preview": "Aquest aspecte tindrà:", "emoji_button.activity": "Activitat", @@ -881,6 +884,7 @@ "status.quote_error.pending_approval": "Publicació pendent", "status.quote_error.pending_approval_popout.body": "Les citacions compartides a través del Fediverse poden trigar en aparèixer, perquè diferents servidors tenen diferents protocols.", "status.quote_error.pending_approval_popout.title": "Publicació pendent? Mantinguem la calma", + "status.quote_policy_change": "Canvieu qui us pot citar", "status.quote_post_author": "S'ha citat una publicació de @{name}", "status.read_more": "Més informació", "status.reblog": "Impulsa", @@ -956,5 +960,17 @@ "video.skip_forward": "Salta endavant", "video.unmute": "Deixa de silenciar", "video.volume_down": "Abaixa el volum", - "video.volume_up": "Apuja el volum" + "video.volume_up": "Apuja el volum", + "visibility_modal.button_title": "Establiu la visibilitat", + "visibility_modal.header": "Visibilitat i interacció", + "visibility_modal.helper.direct_quoting": "No es poden citar les mencions privades.", + "visibility_modal.helper.privacy_editing": "No es pot canviar la visibilitat de les publicacions ja fetes.", + "visibility_modal.helper.private_quoting": "No es poden citar les publicacions només per a seguidors.", + "visibility_modal.helper.unlisted_quoting": "Quan la gent et citi les seves publicacions estaran amagades de les línies de temps de tendències.", + "visibility_modal.instructions": "Controleu qui pot interactuar amb aquesta publicació. La configuració global es troba a Preferències>Altres.", + "visibility_modal.privacy_label": "Privacitat", + "visibility_modal.quote_followers": "Només seguidors", + "visibility_modal.quote_label": "Canvieu qui us pot citar", + "visibility_modal.quote_nobody": "Ningú", + "visibility_modal.quote_public": "Qualsevol" } diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index bd8d5a5d8bc..dc314244a30 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Tvůj handle:", "domain_pill.your_server": "Tvůj digitální domov, kde žijí všechny tvé příspěvky. Nelíbí se ti? Kdykoliv se přesuň na jiný server a vezmi si sebou i své sledující.", "domain_pill.your_username": "Tvůj jedinečný identifikátor na tomto serveru. Je možné najít uživatele se stejným uživatelským jménem na jiných serverech.", + "dropdown.empty": "Vyberte možnost", "embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.", "embed.preview": "Takhle to bude vypadat:", "emoji_button.activity": "Aktivita", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Příspěvek čeká na schválení", "status.quote_error.pending_approval_popout.body": "Zobrazení citátů sdílených napříč Fediversem může chvíli trvat, protože různé servery používají různé protokoly.", "status.quote_error.pending_approval_popout.title": "Příspěvek čeká na schválení? Buďte klidní", + "status.quote_policy_change": "Změňte, kdo může citovat", "status.quote_post_author": "Citovali příspěvek od @{name}", "status.read_more": "Číst více", "status.reblog": "Boostnout", @@ -959,5 +961,17 @@ "video.skip_forward": "Přeskočit vpřed", "video.unmute": "Zrušit ztlumení", "video.volume_down": "Snížit hlasitost", - "video.volume_up": "Zvýšit hlasitost" + "video.volume_up": "Zvýšit hlasitost", + "visibility_modal.button_title": "Nastavit viditelnost", + "visibility_modal.header": "Viditelnost a interakce", + "visibility_modal.helper.direct_quoting": "Soukromé zmínky nemohou být citovány.", + "visibility_modal.helper.privacy_editing": "Publikované příspěvky nemohou změnit svou viditelnost.", + "visibility_modal.helper.private_quoting": "Nelze citovat příspěvky, které jsou pouze pro sledující.", + "visibility_modal.helper.unlisted_quoting": "Když vás lidé citují, jejich příspěvek bude v časové ose populárních příspěvků také skryt.", + "visibility_modal.instructions": "Kontrolujte, kdo může interagovat s tímto příspěvkem. Globální nastavení můžete najít pod Nastavení > Ostatní.", + "visibility_modal.privacy_label": "Soukromí", + "visibility_modal.quote_followers": "Pouze sledující", + "visibility_modal.quote_label": "Změňte, kdo může citovat", + "visibility_modal.quote_nobody": "Nikdo", + "visibility_modal.quote_public": "Kdokoliv" } diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 9dfc6b35a60..d88be09b56b 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -245,6 +245,9 @@ "confirmations.remove_from_followers.confirm": "Dileu dilynwr", "confirmations.remove_from_followers.message": "Bydd {name} yn rhoi'r gorau i'ch dilyn. A ydych yn siŵr eich bod am fwrw ymlaen?", "confirmations.remove_from_followers.title": "Tynnu dilynwr?", + "confirmations.revoke_quote.confirm": "Dileu'r postiad", + "confirmations.revoke_quote.message": "Does dim modd dadwneud y weithred hon.", + "confirmations.revoke_quote.title": "Dileu'r postiad?", "confirmations.unfollow.confirm": "Dad-ddilyn", "confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?", "confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?", @@ -289,6 +292,7 @@ "domain_pill.your_handle": "Eich handlen:", "domain_pill.your_server": "Eich cartref digidol, lle mae'ch holl bostiadau'n byw. Ddim yn hoffi'r un hon? Trosglwyddwch weinyddion ar unrhyw adeg a dewch â'ch dilynwyr hefyd.", "domain_pill.your_username": "Eich dynodwr unigryw ar y gweinydd hwn. Mae'n bosibl dod o hyd i ddefnyddwyr gyda'r un enw defnyddiwr ar wahanol weinyddion.", + "dropdown.empty": "Dewis dewis", "embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.preview": "Dyma sut olwg fydd arno:", "emoji_button.activity": "Gweithgarwch", @@ -498,6 +502,8 @@ "keyboard_shortcuts.translate": "i gyfieithu postiad", "keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "Symud yn uwch yn y rhestr", + "learn_more_link.got_it": "Iawn", + "learn_more_link.learn_more": "Dysgu rhagor", "lightbox.close": "Cau", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", @@ -558,7 +564,7 @@ "navigation_bar.favourites": "Ffefrynnau", "navigation_bar.filters": "Geiriau wedi'u tewi", "navigation_bar.follow_requests": "Ceisiadau dilyn", - "navigation_bar.followed_tags": "Hashnodau a ddilynir", + "navigation_bar.followed_tags": "Hashnodau sy'n cael eu dilyn", "navigation_bar.follows_and_followers": "Yn dilyn a dilynwyr", "navigation_bar.import_export": "Mewnforio ac allforio", "navigation_bar.lists": "Rhestrau", @@ -598,6 +604,7 @@ "notification.label.mention": "Crybwyll", "notification.label.private_mention": "Crybwyll preifat", "notification.label.private_reply": "Ymateb preifat", + "notification.label.quote": "Mae {name} wedi dyfynnu eich postiad", "notification.label.reply": "Ymateb", "notification.mention": "Crybwyll", "notification.mentioned_you": "Rydych wedi'ch crybwyll gan {name}", @@ -655,6 +662,7 @@ "notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.poll": "Canlyniadau pleidlais:", "notifications.column_settings.push": "Hysbysiadau gwthio", + "notifications.column_settings.quote": "Dyfyniadau:", "notifications.column_settings.reblog": "Hybiau:", "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", @@ -845,6 +853,8 @@ "status.bookmark": "Nod tudalen", "status.cancel_reblog_private": "Dadhybu", "status.cannot_reblog": "Does dim modd hybu'r postiad hwn", + "status.context.load_new_replies": "Mae atebion newydd ar gael", + "status.context.loading": "Yn chwilio am fwy o atebion", "status.continued_thread": "Edefyn parhaus", "status.copy": "Copïo dolen i'r post", "status.delete": "Dileu", @@ -871,6 +881,12 @@ "status.open": "Ehangu'r post hwn", "status.pin": "Pinio ar y proffil", "status.quote_error.filtered": "Wedi'i guddio oherwydd un o'ch hidlwyr", + "status.quote_error.not_available": "Postiad ddim ar gael", + "status.quote_error.pending_approval": "Postiad yn yr arfaeth", + "status.quote_error.pending_approval_popout.body": "Gall dyfyniadau sy'n cael eu rhannu ar draws y Ffedysawd gymryd amser i'w dangos, gan fod gan wahanol weinyddion brotocolau gwahanol.", + "status.quote_error.pending_approval_popout.title": "Dyfyniad yn aros? Amynedd :-)", + "status.quote_policy_change": "Newid pwy all ddyfynnu", + "status.quote_post_author": "Wedi dyfynnu postiad gan @{name}", "status.read_more": "Darllen rhagor", "status.reblog": "Hybu", "status.reblog_private": "Hybu i'r gynulleidfa wreiddiol", @@ -885,6 +901,7 @@ "status.reply": "Ymateb", "status.replyAll": "Ateb edefyn", "status.report": "Adrodd ar @{name}", + "status.revoke_quote": "Dileu fy mhostiad o bostiad @{name}", "status.sensitive_warning": "Cynnwys sensitif", "status.share": "Rhannu", "status.show_less_all": "Dangos llai i bawb", @@ -944,5 +961,17 @@ "video.skip_forward": "Symud ymlaen", "video.unmute": "Dad-dewi", "video.volume_down": "Lefel sain i lawr", - "video.volume_up": "Lefel sain i fyny" + "video.volume_up": "Lefel sain i fyny", + "visibility_modal.button_title": "Gosod gwelededd", + "visibility_modal.header": "Gwelededd a rhyngweithio", + "visibility_modal.helper.direct_quoting": "Does dim modd dyfynnu crybwylliadau preifat.", + "visibility_modal.helper.privacy_editing": "Does dim modd newid gwelededd postiadau wedi'u cyhoeddi.", + "visibility_modal.helper.private_quoting": "Does dim modd dyfynnu postiadau dilynwyr yn unig.", + "visibility_modal.helper.unlisted_quoting": "Pan fydd pobl yn eich dyfynnu, bydd eu postiad hefyd yn cael ei guddio rhag llinellau amser sy'n trendio.", + "visibility_modal.instructions": "Rheolwch bwy all ryngweithio â'r postiad hwn. Mae modd dod o hyd i osodiadau eang o dan Dewisiadau > Arall.", + "visibility_modal.privacy_label": "Preifatrwydd", + "visibility_modal.quote_followers": "Dilynwyr yn unig", + "visibility_modal.quote_label": "Newid pwy all ddyfynnu", + "visibility_modal.quote_nobody": "Neb", + "visibility_modal.quote_public": "Pawb" } diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 597990435b6..1f36a14f7da 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Dit handle:", "domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.", "domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.", + "dropdown.empty": "Vælg en indstillingsmulighed", "embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.", "embed.preview": "Sådan kommer det til at se ud:", "emoji_button.activity": "Aktivitet", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Afventende indlæg", "status.quote_error.pending_approval_popout.body": "Citater delt på tværs af Fediverset kan tage tid at vise, da forskellige servere har forskellige protokoller.", "status.quote_error.pending_approval_popout.title": "Afventende citat? Tag det roligt", + "status.quote_policy_change": "Ændr hvem der kan citere", "status.quote_post_author": "Citerede et indlæg fra @{name}", "status.read_more": "Læs mere", "status.reblog": "Fremhæv", @@ -959,5 +961,17 @@ "video.skip_forward": "Overspring fremad", "video.unmute": "Slå lyd tl", "video.volume_down": "Lydstyrke ned", - "video.volume_up": "Lydstyrke op" + "video.volume_up": "Lydstyrke op", + "visibility_modal.button_title": "Indstil synlighed", + "visibility_modal.header": "Synlighed og interaktion", + "visibility_modal.helper.direct_quoting": "Private omtaler kan ikke citeres.", + "visibility_modal.helper.privacy_editing": "Publicerede indlægs synlighed kan ikke ændres.", + "visibility_modal.helper.private_quoting": "Indlæg kun for følgere kan ikke citeres.", + "visibility_modal.helper.unlisted_quoting": "Når man citeres af andre, skjules deres indlæg også på tendenstidslinjer.", + "visibility_modal.instructions": "Styr, hvem der kan interagere med dette indlæg. Globale indstillinger findes under Præferencer > Andet.", + "visibility_modal.privacy_label": "Fortrolighed", + "visibility_modal.quote_followers": "Kun følgere", + "visibility_modal.quote_label": "Ændr hvem der kan citere", + "visibility_modal.quote_nobody": "Ingen", + "visibility_modal.quote_public": "Alle" } diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 5632def3eab..6f25078bf68 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Το πλήρες όνομα χρήστη σου:", "domain_pill.your_server": "Το ψηφιακό σου σπίτι, όπου ζουν όλες σου οι αναρτήσεις. Δε σ' αρέσει αυτός; Μετακινήσου σε διακομιστές ανά πάσα στιγμή και πάρε και τους ακόλουθούς σου.", "domain_pill.your_username": "Το μοναδικό σου αναγνωριστικό σε τούτο τον διακομιστή. Είναι πιθανό να βρεις χρήστες με το ίδιο όνομα χρήστη σε διαφορετικούς διακομιστές.", + "dropdown.empty": "Διαλέξτε μια επιλογή", "embed.instructions": "Ενσωμάτωσε αυτή την ανάρτηση στην ιστοσελίδα σου αντιγράφοντας τον παρακάτω κώδικα.", "embed.preview": "Ορίστε πως θα φαίνεται:", "emoji_button.activity": "Δραστηριότητα", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Ανάρτηση σε αναμονή", "status.quote_error.pending_approval_popout.body": "Οι παραθέσεις που μοιράζονται στο Fediverse μπορεί να χρειαστούν χρόνο για να εμφανιστούν, καθώς διαφορετικοί διακομιστές έχουν διαφορετικά πρωτόκολλα.", "status.quote_error.pending_approval_popout.title": "Παράθεση σε εκκρεμότητα; Μείνετε ψύχραιμοι", + "status.quote_policy_change": "Αλλάξτε ποιός μπορεί να κάνει παράθεση", "status.quote_post_author": "Παρατίθεται μια ανάρτηση από @{name}", "status.read_more": "Διάβασε περισότερα", "status.reblog": "Ενίσχυση", @@ -959,5 +961,17 @@ "video.skip_forward": "Παράλειψη εμπρός", "video.unmute": "Άρση σίγασης", "video.volume_down": "Μείωση έντασης", - "video.volume_up": "Αύξηση έντασης" + "video.volume_up": "Αύξηση έντασης", + "visibility_modal.button_title": "Ορισμός ορατότητας", + "visibility_modal.header": "Ορατότητα και αλληλεπίδραση", + "visibility_modal.helper.direct_quoting": "Ιδιωτικές επισημάνσεις δεν μπορούν να παρατεθούν.", + "visibility_modal.helper.privacy_editing": "Δημοσιευμένες αναρτήσεις δεν μπορούν να αλλάξουν την ορατότητά τους.", + "visibility_modal.helper.private_quoting": "Οι αναρτήσεις μόνο για ακολούθους δεν μπορούν να παρατεθούν.", + "visibility_modal.helper.unlisted_quoting": "Όταν οι άνθρωποι σας παραθέτουν, η ανάρτηση τους θα είναι επίσης κρυμμένη από τα δημοφιλή χρονοδιαγράμματα.", + "visibility_modal.instructions": "Ελέγξτε ποιός μπορεί να αλληλεπιδράσει με αυτή την ανάρτηση. Οι καθολικές ρυθμίσεις μπορούν να βρεθούν κάτω από Προτιμήσεις > Άλλα.", + "visibility_modal.privacy_label": "Απόρρητο", + "visibility_modal.quote_followers": "Μόνο ακόλουθοι", + "visibility_modal.quote_label": "Αλλάξτε ποιός μπορεί να κάνει παράθεση", + "visibility_modal.quote_nobody": "Κανένας", + "visibility_modal.quote_public": "Οποιοσδήποτε" } diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 938e9e706b6..c93cacf3aa8 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -287,6 +287,7 @@ "domain_pill.your_handle": "Via identigo:", "domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.", "domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", + "dropdown.empty": "Elektu opcion", "embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -940,5 +941,16 @@ "video.skip_forward": "Preterpasi antaŭen", "video.unmute": "Ne plu silentigi", "video.volume_down": "Laŭteco Malpliigi", - "video.volume_up": "Laŭteco pliigi" + "video.volume_up": "Laŭteco pliigi", + "visibility_modal.button_title": "Agordu videblon", + "visibility_modal.header": "Videblo kaj interago", + "visibility_modal.helper.direct_quoting": "Privataj mencioj ne povas esti cititaj.", + "visibility_modal.helper.privacy_editing": "Publikigitaj afiŝoj ne povas ŝanĝi sian videblon.", + "visibility_modal.helper.private_quoting": "Afiŝoj nur por sekvantoj ne povas esti cititaj.", + "visibility_modal.helper.unlisted_quoting": "Kiam homoj citas vin, ilia afiŝo ankaŭ estos kaŝita de tendencaj templinioj.", + "visibility_modal.privacy_label": "Privateco", + "visibility_modal.quote_followers": "Nur sekvantoj", + "visibility_modal.quote_label": "Ŝanĝi kiu povas citi", + "visibility_modal.quote_nobody": "Neniu", + "visibility_modal.quote_public": "Iu ajn" } diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 317f5311088..4fe9ff66a5a 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Tu alias:", "domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.", "domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.", + "dropdown.empty": "Elige una opción", "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.", "embed.preview": "Así es como se verá:", "emoji_button.activity": "Actividad", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Publicación pendiente", "status.quote_error.pending_approval_popout.body": "Las citas compartidas en el Fediverso pueden tardar en mostrarse, ya que cada servidor tiene un protocolo diferente.", "status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma", + "status.quote_policy_change": "Cambia quién puede citarte", "status.quote_post_author": "Ha citado una publicación de @{name}", "status.read_more": "Leer más", "status.reblog": "Impulsar", @@ -959,5 +961,17 @@ "video.skip_forward": "Saltar adelante", "video.unmute": "Dejar de silenciar", "video.volume_down": "Bajar el volumen", - "video.volume_up": "Subir el volumen" + "video.volume_up": "Subir el volumen", + "visibility_modal.button_title": "Establece la visibilidad", + "visibility_modal.header": "Visibilidad e interacción", + "visibility_modal.helper.direct_quoting": "Las menciones privadas no pueden citarse.", + "visibility_modal.helper.privacy_editing": "Las publicaciones ya enviadas no pueden cambiar su visibilidad.", + "visibility_modal.helper.private_quoting": "Las publicaciones para seguidores no pueden citarse.", + "visibility_modal.helper.unlisted_quoting": "Cuando las personas te citen, sus publicaciones también se ocultarán de las cronologías de tendencias.", + "visibility_modal.instructions": "Controla quién puede interactuar con esta publicación. La configuración global se encuentra en Preferencias > Otros.", + "visibility_modal.privacy_label": "Privacidad", + "visibility_modal.quote_followers": "Solo seguidores", + "visibility_modal.quote_label": "Cambia quién puede citarte", + "visibility_modal.quote_nobody": "Nadie", + "visibility_modal.quote_public": "Cualquiera" } diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index d23f1f5c128..2ee502b0d4f 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Tu alias:", "domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.", "domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.", + "dropdown.empty": "Selecciona una opción", "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.", "embed.preview": "Así es como se verá:", "emoji_button.activity": "Actividad", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Publicación pendiente", "status.quote_error.pending_approval_popout.body": "Las citas compartidas a través del Fediverso pueden tardar en mostrarse, ya que los diferentes servidores tienen diferentes protocolos.", "status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma", + "status.quote_policy_change": "Cambia quién puede citarte", "status.quote_post_author": "Ha citado una publicación de @{name}", "status.read_more": "Leer más", "status.reblog": "Impulsar", @@ -959,5 +961,17 @@ "video.skip_forward": "Adelantar", "video.unmute": "Dejar de silenciar", "video.volume_down": "Bajar volumen", - "video.volume_up": "Subir volumen" + "video.volume_up": "Subir volumen", + "visibility_modal.button_title": "Configura la visibilidad", + "visibility_modal.header": "Visibilidad e interacciones", + "visibility_modal.helper.direct_quoting": "Las menciones privadas no se pueden citar.", + "visibility_modal.helper.privacy_editing": "Las publicaciones no pueden cambiar su visibilidad.", + "visibility_modal.helper.private_quoting": "Las publicaciones para seguidores no pueden citarse.", + "visibility_modal.helper.unlisted_quoting": "Cuando la gente te cite, su publicación tampoco se mostrará en las cronologías públicas.", + "visibility_modal.instructions": "Controla quién puede interactuar con esta publicación. Puedes encontrar los ajustes globales en Preferencias > Otros.", + "visibility_modal.privacy_label": "Privacidad", + "visibility_modal.quote_followers": "Sólo seguidores", + "visibility_modal.quote_label": "Cambia quién puede citarte", + "visibility_modal.quote_nobody": "Nadie", + "visibility_modal.quote_public": "Cualquiera" } diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 798be24ad65..b2ab96a37fa 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -39,7 +39,7 @@ "account.featured_tags.last_status_at": "آخرین فرسته در {date}", "account.featured_tags.last_status_never": "بدون فرسته", "account.follow": "پی‌گرفتن", - "account.follow_back": "دنبال کردن متقابل", + "account.follow_back": "پی‌گیری متقابل", "account.followers": "پی‌گیرندگان", "account.followers.empty": "هنوز کسی پی‌گیر این کاربر نیست.", "account.followers_counter": "{count, plural, one {{counter} پی‌گیرنده} other {{counter} پی‌گیرنده}}", @@ -292,6 +292,7 @@ "domain_pill.your_handle": "شناسه‌تان:", "domain_pill.your_server": "خانهٔ رقمیتان. جایی که همهٔ فرسته‌هایتان می‌زیند. دوستش ندارید؟ در هر زمان کارسازتان را جابه‌جا کرده و پی‌گیرندگانتان را نیز بیاورید.", "domain_pill.your_username": "شناسهٔ یکتایتان روی این کارساز. ممکن است کاربرانی با نام کاربری مشابه روی کارسازهای دیگر باشند.", + "dropdown.empty": "انتخاب یک گزینه", "embed.instructions": "جاسازی این فرسته روی پایگاهتان با رونوشت کردن کد زیر.", "embed.preview": "این گونه دیده خواهد شد:", "emoji_button.activity": "فعالیت", @@ -881,7 +882,10 @@ "status.pin": "سنجاق به نمایه", "status.quote_error.filtered": "نهفته بنا بر یکی از پالایه‌هایتان", "status.quote_error.not_available": "فرسته در دسترس نیست", + "status.quote_error.pending_approval": "فرسته منتظر", "status.quote_error.pending_approval_popout.body": "نقل‌قول‌هایی که در سراسر فدیورس هم‌رسانی می‌شوند ممکن است زمان‌بر باشند تا نمایش داده شوند، چون کارسازهای مختلف از شیوه‌نامه‌های متفاوتی استفاده می‌کنند.", + "status.quote_error.pending_approval_popout.title": "منتظر نقل؟ خونسرد بمانید", + "status.quote_policy_change": "تغییر کسانی که می‌توانند نقل کنند", "status.quote_post_author": "فرسته‌ای از @{name} نقل شد", "status.read_more": "بیشتر بخوانید", "status.reblog": "تقویت", @@ -957,5 +961,17 @@ "video.skip_forward": "پرش به پیش", "video.unmute": "ناخموشی", "video.volume_down": "کاهش حجم صدا", - "video.volume_up": "افزایش حجم صدا" + "video.volume_up": "افزایش حجم صدا", + "visibility_modal.button_title": "تنظیم نمایانی", + "visibility_modal.header": "نمایانی و برهم‌کنش", + "visibility_modal.helper.direct_quoting": "نام‌بری‌های خصوصی قابل نقل نیستند.", + "visibility_modal.helper.privacy_editing": "نمی‌توان نمایانی فرسته‌های منتشر شده را تغییر داد.", + "visibility_modal.helper.private_quoting": "فرسته‌های فقط برای پی‌گیرندگان نمی‌توانند نقل شوند.", + "visibility_modal.helper.unlisted_quoting": "هنگامی که افراد نقلتان می‌کنند فرسته‌شان هم از خط‌زمانی‌های داغ پنهان خواهد بود.", + "visibility_modal.instructions": "واپایش کسانی که می‌توانند با این فرسته برهم‌کنش داشته باشند. تنظیمات سراسری می‌تواند در ترجیحات > دیگر پیدا شود.", + "visibility_modal.privacy_label": "محرمانگی", + "visibility_modal.quote_followers": "فقط پی‌گیرندگان", + "visibility_modal.quote_label": "تغییر کسانی که می‌توانند نقل کنند", + "visibility_modal.quote_nobody": "هیچ‌کس", + "visibility_modal.quote_public": "هرکسی" } diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index e1b8d49e112..81398669222 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Käyttäjätunnuksesi:", "domain_pill.your_server": "Digitaalinen kotisi, jossa kaikki julkaisusi sijaitsevat. Etkö pidä tästä? Siirry palvelimelta toiselle milloin tahansa ja tuo myös seuraajasi mukanasi.", "domain_pill.your_username": "Yksilöllinen tunnisteesi tällä palvelimella. Eri palvelimilta on mahdollista löytää käyttäjiä, joilla on sama käyttäjänimi.", + "dropdown.empty": "Valitse vaihtoehto", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Tältä se näyttää:", "emoji_button.activity": "Aktiviteetit", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Julkaisu odottaa", "status.quote_error.pending_approval_popout.body": "Saattaa viedä jonkin ainaa ennen kuin fediversumin kautta jaetut julkaisut tulevat näkyviin, sillä eri palvelimet käyttävät eri protokollia.", "status.quote_error.pending_approval_popout.title": "Odottava lainaus? Pysy rauhallisena", + "status.quote_policy_change": "Vaihda, kuka voi lainata", "status.quote_post_author": "Lainaa käyttäjän @{name} julkaisua", "status.read_more": "Näytä enemmän", "status.reblog": "Tehosta", @@ -959,5 +961,17 @@ "video.skip_forward": "Siirry eteenpäin", "video.unmute": "Poista mykistys", "video.volume_down": "Vähennä äänenvoimakkuutta", - "video.volume_up": "Lisää äänenvoimakkuutta" + "video.volume_up": "Lisää äänenvoimakkuutta", + "visibility_modal.button_title": "Aseta näkyvyys", + "visibility_modal.header": "Näkyvyys ja vuorovaikutus", + "visibility_modal.helper.direct_quoting": "Yksityismainintoja ei voi lainata.", + "visibility_modal.helper.privacy_editing": "Lähetettyjen julkaisujen näkyvyyttä ei voi vaihtaa.", + "visibility_modal.helper.private_quoting": "Vain seuraajille tarkoitettuja julkaisuja ei voi lainata.", + "visibility_modal.helper.unlisted_quoting": "Kun ihmiset lainaavat sinua, myös heidän julkaisunsa piilotetaan suosittujen julkaisujen aikajanoilta.", + "visibility_modal.instructions": "Hallitse, kuka voi olla vuorovaikutuksessa tämän julkaisun kanssa. Yleiset asetukset sijaitsevat kohdassa Asetukset > Muut.", + "visibility_modal.privacy_label": "Yksityisyys", + "visibility_modal.quote_followers": "Vain seuraajat", + "visibility_modal.quote_label": "Vaihda, kuka voi lainata", + "visibility_modal.quote_nobody": "Ei kukaan", + "visibility_modal.quote_public": "Kuka tahansa" } diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 4760b64626e..1b730557c90 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Do láimhseáil:", "domain_pill.your_server": "Do theach digiteach, áit a bhfuil do phoist go léir ina gcónaí. Nach maith leat an ceann seo? Aistrigh freastalaithe am ar bith agus tabhair leat do leantóirí freisin.", "domain_pill.your_username": "D'aitheantóir uathúil ar an bhfreastalaí seo. Is féidir teacht ar úsáideoirí leis an ainm úsáideora céanna ar fhreastalaithe éagsúla.", + "dropdown.empty": "Roghnaigh rogha", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Seo an chuma a bheidh air:", "emoji_button.activity": "Gníomhaíocht", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Post ar feitheamh", "status.quote_error.pending_approval_popout.body": "D’fhéadfadh sé go dtógfadh sé tamall le Sleachta a roinntear ar fud Fediverse a thaispeáint, toisc go mbíonn prótacail éagsúla ag freastalaithe éagsúla.", "status.quote_error.pending_approval_popout.title": "Ag fanacht le luachan? Fan socair", + "status.quote_policy_change": "Athraigh cé a fhéadann luachan a thabhairt", "status.quote_post_author": "Luaigh mé post le @{name}", "status.read_more": "Léan a thuilleadh", "status.reblog": "Treisiú", @@ -959,5 +961,17 @@ "video.skip_forward": "Scipeáil ar aghaidh", "video.unmute": "Díbhalbhú", "video.volume_down": "Toirt síos", - "video.volume_up": "Toirt suas" + "video.volume_up": "Toirt suas", + "visibility_modal.button_title": "Socraigh infheictheacht", + "visibility_modal.header": "Infheictheacht agus idirghníomhaíocht", + "visibility_modal.helper.direct_quoting": "Ní féidir lua a thabhairt ar luanna príobháideacha.", + "visibility_modal.helper.privacy_editing": "Ní féidir infheictheacht postálacha foilsithe a athrú.", + "visibility_modal.helper.private_quoting": "Ní féidir poist atá dírithe ar leanúna amháin a lua.", + "visibility_modal.helper.unlisted_quoting": "Nuair a luann daoine thú, beidh a bpost i bhfolach ó amlínte treochta freisin.", + "visibility_modal.instructions": "Rialú cé a fhéadfaidh idirghníomhú leis an bpost seo. Is féidir socruithe domhanda a fháil faoi Sainroghanna > Eile.", + "visibility_modal.privacy_label": "Príobháideacht", + "visibility_modal.quote_followers": "Leantóirí amháin", + "visibility_modal.quote_label": "Athraigh cé a fhéadann luachan a thabhairt", + "visibility_modal.quote_nobody": "Níl aon duine", + "visibility_modal.quote_public": "Aon duine" } diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c6d0fbd8066..775af830562 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "O teu alcume:", "domain_pill.your_server": "O teu fogar dixital, onde están as túas publicacións. Non é do teu agrado? Podes cambiar de servidor cando queiras levando as túas seguidoras contigo.", "domain_pill.your_username": "O teu identificador único neste servidor. É posible que atopes usuarias co mesmo nome de usuaria en outros servidores.", + "dropdown.empty": "Escolle unha opción", "embed.instructions": "Inclúe esta publicación no teu sitio web copiando o seguinte código.", "embed.preview": "Vaise ver así:", "emoji_button.activity": "Actividade", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "Publicación pendente", "status.quote_error.pending_approval_popout.body": "As citas compartidas no Fediverso poderían tardar en mostrarse, xa que os diferentes servidores teñen diferentes protocolos.", "status.quote_error.pending_approval_popout.title": "Cita pendente? Non te apures", + "status.quote_policy_change": "Cambia quen pode citarte", "status.quote_post_author": "Citou unha publicación de @{name}", "status.read_more": "Ler máis", "status.reblog": "Promover", @@ -959,5 +961,17 @@ "video.skip_forward": "Avanzar", "video.unmute": "Non silenciar", "video.volume_down": "Baixar volume", - "video.volume_up": "Subir volume" + "video.volume_up": "Subir volume", + "visibility_modal.button_title": "Establece a visibilidade", + "visibility_modal.header": "Visibilidade e interaccións", + "visibility_modal.helper.direct_quoting": "A mencións privadas non se poden citar.", + "visibility_modal.helper.privacy_editing": "Non se pode cambiar a visibilidade das publicacións xa publicadas.", + "visibility_modal.helper.private_quoting": "As publicacións só para seguidoras non se poden citar.", + "visibility_modal.helper.unlisted_quoting": "Cando alguén te cite, a súa publicación non aparecerá nas cronoloxías de popularidade.", + "visibility_modal.instructions": "Controla quen pode interactuar con esta publicación. Os axustes xerais están en Preferencias > Outros.", + "visibility_modal.privacy_label": "Privacidade", + "visibility_modal.quote_followers": "Só para seguidoras", + "visibility_modal.quote_label": "Cambia quen pode citarte", + "visibility_modal.quote_nobody": "Ninguén", + "visibility_modal.quote_public": "Calquera" } diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index bdb23bc4cbe..69e1f870ed6 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "הכינוי שלך:", "domain_pill.your_server": "הבית המקוון שלך, היכן ששוכנות כל הודעותיך. לא מוצא חן בעיניך? ניתן לעבור שרתים בכל עת וגם לשמור על העוקבים.", "domain_pill.your_username": "המזהה הייחודי שלך על שרת זה. ניתן למצוא משתמשים עם שם משתמש זהה על שרתים שונים.", + "dropdown.empty": "בחירת אפשרות", "embed.instructions": "ניתן להטמיע את ההודעה הזו באתרך ע\"י העתקת הקוד שלהלן.", "embed.preview": "דוגמא כיצד זה יראה:", "emoji_button.activity": "פעילות", @@ -884,6 +885,7 @@ "status.quote_error.pending_approval": "ההודעה בהמתנה לאישור", "status.quote_error.pending_approval_popout.body": "ציטוטים ששותפו בפדיוורס עשויים להתפרסם אחרי עיכוב קל, כיוון ששרתים שונים משתמשים בפרוטוקולים שונים.", "status.quote_error.pending_approval_popout.title": "ההודעה בהמתנה? המתינו ברוגע", + "status.quote_policy_change": "הגדרת הרשאה לציטוט הודעותיך", "status.quote_post_author": "ההודעה צוטטה על ידי @{name}", "status.read_more": "לקרוא עוד", "status.reblog": "הדהוד", @@ -959,5 +961,17 @@ "video.skip_forward": "דילוג קדימה", "video.unmute": "ביטול השתקה", "video.volume_down": "הנמכת עוצמת השמע", - "video.volume_up": "הגברת עוצמת שמע" + "video.volume_up": "הגברת עוצמת שמע", + "visibility_modal.button_title": "בחירת רמת חשיפה", + "visibility_modal.header": "חשיפה והידוּד (אינטראקציה)", + "visibility_modal.helper.direct_quoting": "הודעות פרטיות לא ניתנות לציטוט.", + "visibility_modal.helper.privacy_editing": "לא ניתן לשנות את דרגת החשיפה של הודעות שפורסמו.", + "visibility_modal.helper.private_quoting": "לא ניתן לצטט הודעות שחשופות לעוקבים בלבד.", + "visibility_modal.helper.unlisted_quoting": "כאשר אחרים מצטטים אותך, ההודעות שלהם יוסתרו גם מ\"נושאים חמים\".", + "visibility_modal.instructions": "שליטה בהרשאה להידוּד (תגובות וציטוטים) עם הודעה זו. הגדרות ברירת המחדל ניתן למצוא תחת העדפות > אחרים.", + "visibility_modal.privacy_label": "פרטיות", + "visibility_modal.quote_followers": "לעוקבים בלבד", + "visibility_modal.quote_label": "הגדרת הרשאה לציטוט הודעותיך", + "visibility_modal.quote_nobody": "אף אחד", + "visibility_modal.quote_public": "כולם" } diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index 33cb8cac4bf..da133ef612e 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -292,6 +292,7 @@ "domain_pill.your_handle": "Lí ê口座:", "domain_pill.your_server": "Lí數位ê厝,內底有lí所有ê PO文。無kah意?Ē當轉kàu別ê服侍器,koh保有跟tuè lí êl âng。.", "domain_pill.your_username": "Lí 佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。", + "dropdown.empty": "揀選項", "embed.instructions": "Khóo-pih 下kha ê程式碼,來kā tsit篇PO文tàu佇lí ê網站。", "embed.preview": "伊e án-ne顯示:\n", "emoji_button.activity": "活動", @@ -570,7 +571,7 @@ "navigation_bar.live_feed_local": "即時ê內容(本地)", "navigation_bar.live_feed_public": "即時ê內容(公開)", "navigation_bar.logout": "登出", - "navigation_bar.moderation": "審核", + "navigation_bar.moderation": "管理", "navigation_bar.more": "其他", "navigation_bar.mutes": "消音ê用者", "navigation_bar.opened_in_classic_interface": "PO文、口座kap其他指定ê頁面,預設ē佇經典ê網頁界面內phah開。", @@ -608,11 +609,11 @@ "notification.mention": "提起", "notification.mentioned_you": "{name}kā lí提起", "notification.moderation-warning.learn_more": "看詳細", - "notification.moderation_warning": "Lí有收著審核ê警告", + "notification.moderation_warning": "Lí有收著管理ê警告", "notification.moderation_warning.action_delete_statuses": "Lí ê一寡PO文hōo lâng thâi掉ah。", "notification.moderation_warning.action_disable": "Lí ê口座hōo lâng停止使用ah。", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Lí ê一寡PO文,hōo lâng標做敏感ê內容。", - "notification.moderation_warning.action_none": "Lí ê口座有收著審核ê警告。", + "notification.moderation_warning.action_none": "Lí ê口座有收著管理ê警告。", "notification.moderation_warning.action_sensitive": "Tuì tsit-má開始,lí êPO文ē標做敏感ê內容。", "notification.moderation_warning.action_silence": "Lí ê口座hōo lâng限制ah。", "notification.moderation_warning.action_suspend": "Lí ê口座ê權限已經停止ah。", @@ -883,6 +884,7 @@ "status.quote_error.pending_approval": "鋪文當咧送", "status.quote_error.pending_approval_popout.body": "因為無kâng ê服侍器有無kâng ê協定,佇聯邦宇宙分享ê引文可能愛開時間來顯示。", "status.quote_error.pending_approval_popout.title": "Leh送引文?請sió等leh", + "status.quote_policy_change": "改通引用ê lâng", "status.quote_post_author": "引用 @{name} ê PO文ah", "status.read_more": "讀詳細", "status.reblog": "轉送", @@ -957,5 +959,17 @@ "video.skip_forward": "跳kah頭前", "video.unmute": "取消消音", "video.volume_down": "變khah細聲", - "video.volume_up": "變khah大聲" + "video.volume_up": "變khah大聲", + "visibility_modal.button_title": "設定通看ê程度", + "visibility_modal.header": "通看ê程度kap互動", + "visibility_modal.helper.direct_quoting": "私人ê提起bē當引用。", + "visibility_modal.helper.privacy_editing": "公開ê PO文bē當改in通看ê程度。", + "visibility_modal.helper.private_quoting": "Bē當引用kan-ta跟tuè ê通看ê PO文。", + "visibility_modal.helper.unlisted_quoting": "若別lâng引用lí,in ê PO文mā ē tuì趨勢時間線隱藏。", + "visibility_modal.instructions": "控制ē當kap tsit篇PO文互動ê lâng,Ē當佇 偏愛ê設定>其他tshuē tio̍h全地ê設定。", + "visibility_modal.privacy_label": "隱私權", + "visibility_modal.quote_followers": "Kan-ta hōo跟tuè ê lâng", + "visibility_modal.quote_label": "改通引用ê lâng", + "visibility_modal.quote_nobody": "無半位", + "visibility_modal.quote_public": "Ta̍k ê lâng" } diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 2627fe21e3e..67e10ce2aa7 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -292,7 +292,7 @@ "domain_pill.your_handle": "您的帳號:", "domain_pill.your_server": "您數位世界的家,您所有的嘟文都在這裡。不喜歡這台伺服器嗎?您能隨時搬家至其他伺服器並且仍保有您的跟隨者。", "domain_pill.your_username": "您於您的伺服器中獨一無二的識別。於不同的伺服器上可能找到具有相同帳號的使用者。", - "dropdown.empty": "選取選項", + "dropdown.empty": "選項", "embed.instructions": "若您欲於您的網站嵌入此嘟文,請複製以下程式碼。", "embed.preview": "它將顯示成這樣:", "emoji_button.activity": "活動", @@ -965,9 +965,9 @@ "visibility_modal.button_title": "設定可見性", "visibility_modal.header": "可見性與互動", "visibility_modal.helper.direct_quoting": "無法引用私人提及。", - "visibility_modal.helper.privacy_editing": "無法變更已發佈的嘟文的可見性。", + "visibility_modal.helper.privacy_editing": "無法變更已發佈的嘟文之可見性。", "visibility_modal.helper.private_quoting": "無法引用僅追蹤者的嘟文。", - "visibility_modal.helper.unlisted_quoting": "當期他人引用您時,他們的嘟文也會自熱門時間軸隱藏。", + "visibility_modal.helper.unlisted_quoting": "當其他人引用您時,他們的嘟文也會自熱門時間軸隱藏。", "visibility_modal.instructions": "控制誰能與此嘟文互動。可在偏好設定 > 其他下找到全域設定。", "visibility_modal.privacy_label": "隱私權", "visibility_modal.quote_followers": "僅限跟隨者", diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 077a729b919..f32f69406e1 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -190,6 +190,7 @@ bg: create_relay: Създаване на пренасочване create_unavailable_domain: Създаване на недостъпен домейн create_user_role: Създаване на роля + create_username_block: Създаване на правило за потебителско име demote_user: Понижаване на потребител destroy_announcement: Изтриване на оповестяване destroy_canonical_email_block: Изтриване на блокиране за е-поща @@ -202,6 +203,7 @@ bg: destroy_status: Изтриване на публикация destroy_unavailable_domain: Изтриване на недостъпен домейн destroy_user_role: Унищожаване на роля + destroy_username_block: Изтриване на правило за потебителско име disable_2fa_user: Изкл. на 2факт.удостов. disable_custom_emoji: Деактивиране на персонализирано емоджи disable_sign_in_token_auth_user: Изключване на удостоверяването с код по имейл за потребител @@ -234,6 +236,7 @@ bg: update_report: Обновяване на доклада update_status: Обновяване на публикация update_user_role: Обновяване на ролята + update_username_block: Обновяване на правило за потеб. име actions: approve_appeal_html: "%{name} одобри обжалването на решение за модериране от %{target}" approve_user_html: "%{name} одобри регистрирането от %{target}" @@ -251,6 +254,7 @@ bg: create_ip_block_html: "%{name} създаде правило за IP %{target}" create_unavailable_domain_html: "%{name} спря доставянето до домейн %{target}" create_user_role_html: "%{name} създаде роля %{target}" + create_username_block_html: "%{name} добави правило за потребителско име, съдържащо %{target}" demote_user_html: "%{name} понижи потребителя %{target}" destroy_announcement_html: "%{name} изтри оповестяване %{target}" destroy_canonical_email_block_html: "%{name} отблокира имейла с хеш %{target}" @@ -263,6 +267,7 @@ bg: destroy_status_html: "%{name} премахна публикация от %{target}" destroy_unavailable_domain_html: "%{name} възобнови доставката до домейн %{target}" destroy_user_role_html: "%{name} изтри роля %{target}" + destroy_username_block_html: "%{name} премахна правило за потребителско име, съдържащо %{target}" disable_2fa_user_html: "%{name} изключи двуфакторното изискване за потребител %{target}" disable_custom_emoji_html: "%{name} изключи емоджито %{target}" disable_sign_in_token_auth_user_html: "%{name} изключва удостоверението с код по е-поща за %{target}" @@ -295,6 +300,7 @@ bg: update_report_html: "%{name} осъвремени доклад %{target}" update_status_html: "%{name} обнови публикация от %{target}" update_user_role_html: "%{name} промени ролята %{target}" + update_username_block_html: "%{name} обнови правило за потребителско име, съдържащо %{target}" deleted_account: изтрит акаунт empty: Няма намерени дневници. filter_by_action: Филтриране по действие @@ -791,12 +797,16 @@ bg: title: Сървърни правила translation: Превод translations: Преводи + translations_explanation: Може по избор да добавите преводи за правилата. Стандартната стойност ще се показва, ако няма налична преведена версия. Винаги се уверявайте, че всеки предоставен превод е синхронизиран със стандартната стойност. settings: about: manage_rules: Управление на правилата на сървъра preamble: Предложете задълбочена информация за това как вашият сървър се управлява, модерира и финансира. rules_hint: Съществува специална част за правилата, които се очаква вашите потребители да спазват. title: Относно + allow_referrer_origin: + desc: Когато потребителите ви щракнат върху връзки към външни сайтове, то браузърите им може да изпращат адреса на сървъра ви в Mastodon както референтът. Изключете това, ако то неповторимо би установило самоличността на потребителя ви, например ако това е личен сървър в Mastodon. + title: Позволяване на външни сайтове да виждат сървъра ви в Mastodon като източник на трафик appearance: preamble: Настройване на мрежовия интерфейс на Mastodon. title: Външен вид @@ -1067,6 +1077,23 @@ bg: other: Използвано от %{count} души през последната седмица title: Препоръки и насоки на развитие trending: Изгряващи + username_blocks: + add_new: Добавяне на ново + block_registrations: Блокиране на регистрациите + comparison: + contains: Съдържа + contains_html: Съдържа %{string} + created_msg: Успешно създадено правило за потребителско име + delete: Изтриване + edit: + title: Промяна на правило за потреб. име + new: + create: Създаване на правило + title: Създаване на ново правило за потреб. име + no_username_block_selected: Няма променени правила за потребителско име, тъй като нищо не бе избрано + not_permitted: Няма позволение + title: Правила за потребителско име + updated_msg: Успешно обновено правило за потребителско име warning_presets: add_new: Добавяне на ново delete: Изтриване @@ -1331,6 +1358,10 @@ bg: basic_information: Основна информация hint_html: "Персонализирайте какво хората виждат в обществения ви профил и до публикациите ви. Другите хора са по-склонни да ви последват и да взаимодействат с вас, когато имате попълнен профил и снимка на профила." other: Друго + emoji_styles: + auto: Автоматично + native: Естествено системно + twemoji: Twemoji errors: '400': Подадохте невалидна или деформирана заявка. '403': Нямате позволение да разгледате тази страница. @@ -1640,6 +1671,10 @@ bg: title: Ново споменаване poll: subject: Анкетата от %{name} приключи + quote: + body: 'Ваша публикация беше цитирана от %{name}:' + subject: "%{name} цитира ваша публикация" + title: Нов цитат reblog: body: 'Ваша публикация беше раздута от %{name}:' subject: "%{name} разду ваша публикация" @@ -1850,6 +1885,7 @@ bg: edited_at_html: Редактирано на %{date} errors: in_reply_not_found: Изглежда, че публикацията, на която се опитвате да отговорите, не съществува. + quoted_status_not_found: Публикацията, която се опитвате да цитирате, не съществува. over_character_limit: прехвърлен лимит от %{max} символа pin_errors: direct: Публикациите, които са видими само за потребители споменати в тях, не могат да бъдат закачани @@ -1857,6 +1893,8 @@ bg: ownership: Публикация на някого другиго не може да бъде закачена reblog: Раздуване не може да бъде закачано quote_policies: + followers: Само последователите ви + nobody: Никого public: Всеки title: "%{name}: „%{quote}“" visibilities: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 7dfa928f57b..65299b87bcc 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1713,7 +1713,7 @@ ca: too_few_options: ha de tenir més d'una opció too_many_options: no pot contenir més de %{max} opcions preferences: - other: Altre + other: Altres posting_defaults: Valors per defecte de publicació public_timelines: Línies de temps públiques privacy: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index e8990d34820..8860bcb0a67 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -202,6 +202,7 @@ cy: create_relay: Creu Cyfnewidiad create_unavailable_domain: Creu Parth Ddim ar Gael create_user_role: Creu Rôl + create_username_block: Creu Rheol Enw Defnyddiwr demote_user: Diraddio Defnyddiwr destroy_announcement: Dileu Cyhoeddiad destroy_canonical_email_block: Dileu Rhwystr E-bost @@ -215,6 +216,7 @@ cy: destroy_status: Dileu Postiad destroy_unavailable_domain: Dileu Parth Ddim ar Gael destroy_user_role: Dileu Rôl + destroy_username_block: Dileu Rheol Enw Defnyddiwr disable_2fa_user: Diffodd 2FA disable_custom_emoji: Analluogi Emoji Addasedig disable_relay: Analluogi Cyfnewidiad @@ -249,6 +251,7 @@ cy: update_report: Diweddaru Adroddiad update_status: Diweddaru Postiad update_user_role: Diweddaru Rôl + update_username_block: Diweddaru Rheol Enw Defnyddiwr actions: approve_appeal_html: Mae %{name} wedi cymeradwyo penderfyniad cymedroli gan %{target} approve_user_html: Mae %{name} wedi cymeradwyo cofrestru gan %{target} @@ -267,6 +270,7 @@ cy: create_relay_html: Creodd %{name} gyfnewidiad %{target} create_unavailable_domain_html: Mae %{name} wedi stopio danfon i barth %{target} create_user_role_html: Mae %{name} wedi creu rôl %{target} + create_username_block_html: Mae %{name} wedi ychwanegu rheol ar gyfer enwau defnyddwyr sy'n cynnwys %{target} demote_user_html: Mae %{name} wedi israddio defnyddiwr %{target} destroy_announcement_html: Mae %{name} wedi dileu cyhoeddiad %{target} destroy_canonical_email_block_html: Mae %{name} wedi dad-rwystro parth e-bost %{target} @@ -280,6 +284,7 @@ cy: destroy_status_html: Mae %{name} wedi tynnu postiad gan %{target} destroy_unavailable_domain_html: Mae %{name} wedi ailddechrau anfon i barth %{target} destroy_user_role_html: Mae %{name} wedi dileu rôl %{target} + destroy_username_block_html: Mae %{name} wedi dileu rheol ar gyfer enwau defnyddwyr sy'n cynnwys %{target} disable_2fa_user_html: Mae %{name} wedi analluogi gofyniad dau ffactor ar gyfer defnyddiwr %{target} disable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target} disable_relay_html: Analluogodd %{name} y cyfnewidiad %{target} @@ -314,6 +319,7 @@ cy: update_report_html: Mae %{name} wedi diweddaru adroddiad %{target} update_status_html: Mae %{name} wedi diweddaru postiad gan %{target} update_user_role_html: Mae %{name} wedi newid rôl %{target} + update_username_block_html: Mae %{name} wedi diweddaru rheol ar gyfer enwau defnyddwyr sy'n cynnwys %{target} deleted_account: cyfrif wedi'i ddileu empty: Dim logiau ar gael. filter_by_action: Hidlo yn ôl gweithred @@ -1157,6 +1163,25 @@ cy: zero: Wedi'i ddefnyddio gan %{count} o bobl dros yr wythnos ddiwethaf title: Argymhellion a Threndiau trending: Trendio + username_blocks: + add_new: Ychwanegu newydd + block_registrations: Rhwystro cofrestriadau + comparison: + contains: Yn cynnwys + equals: Yn hafal i + contains_html: Yn cynnwys %{string} + created_msg: Rheol enw defnyddiwr wedi'i chreu'n llwyddiannus + delete: Dileu + edit: + title: Golygu rheol enw defnyddiwr + matches_exactly_html: Yn hafal i %{string} + new: + create: Creu rheol + title: Creu rheol enw defnyddiwr newydd + no_username_block_selected: Heb newid unrhyw reolau enw defnyddiwr gan nad oes un ohonyn nhw wedi'u dewis + not_permitted: Dim caniatâd + title: Rheolau enw defnyddiwr + updated_msg: Rheol enw defnyddiwr wedi'i diweddaru'n llwyddiannus warning_presets: add_new: Ychwanegu newydd delete: Dileu @@ -1817,6 +1842,10 @@ cy: title: Crywbylliad newydd poll: subject: Mae arolwg gan %{name} wedi dod i ben + quote: + body: 'Mae %{name} wedi dyfynnu eich postiad :' + subject: Mae %{name} wedi dyfynnu eich postiad + title: Dyfyniad newydd reblog: body: 'Cafodd eich postiad ei hybu gan %{name}:' subject: Rhoddodd %{name} hwb i'ch postiad @@ -2051,6 +2080,8 @@ cy: ownership: Nid oes modd pinio postiad rhywun arall reblog: Nid oes modd pinio hwb quote_policies: + followers: Dim ond eich dilynwyr + nobody: Neb public: Pawb title: '%{name}: "%{quote}"' visibilities: diff --git a/config/locales/devise.be.yml b/config/locales/devise.be.yml index 8aebd2b198e..21dd93e31ab 100644 --- a/config/locales/devise.be.yml +++ b/config/locales/devise.be.yml @@ -58,7 +58,7 @@ be: subtitle: Для вашага ўліковага запісу была ўключаная двухфактарная аўтэнтыфікацыя. title: двухэтапнае спраўджанне уключана two_factor_recovery_codes_changed: - explanation: Папярэднія коды аднаўлення былі ануляваны і былі створаныя новыя. + explanation: Папярэднія коды аднаўлення былі ануляваны і створаны новыя. subject: 'Mastodon: створаныя новыя коды аднаўлення' subtitle: Папярэднія коды аднаўлення былі ануляваны і замест іх былі створаныя новыя. title: 2FA коды аднаўлення былі зменены diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 913f3848844..e3e8348ef01 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -258,6 +258,7 @@ fa: create_relay_html: "%{name} یک رله %{target} ایجاد کرد" create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد" create_user_role_html: "%{name} نقش %{target} را ایجاد کرد" + create_username_block_html: "‫‏%{name} قانونی برای نام‌های کاربری دارای %{target} افزود" demote_user_html: "%{name} کاربر %{target} را تنزل داد" destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد" destroy_canonical_email_block_html: "%{name} رایانامه با درهم‌ریزی %{target} را نامسدود کرد" @@ -271,6 +272,7 @@ fa: destroy_status_html: "%{name} وضعیت %{target} را برداشت" destroy_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را از سر گرفت" destroy_user_role_html: "%{name} نقش %{target} را حذف کرد" + destroy_username_block_html: "‫‏%{name} قانون نام‌های کاربری دارای %{target} را برداشت" disable_2fa_user_html: "%{name} ضرورت ورود دو مرحله‌ای را برای کاربر %{target} غیر فعال کرد" disable_custom_emoji_html: "%{name} شکلک %{target} را غیرفعال کرد" disable_relay_html: "%{name} رله %{target} را غیرفعال کرد" @@ -305,6 +307,7 @@ fa: update_report_html: "%{name} گزارش %{target} را به‌روز کرد" update_status_html: "%{name} نوشتهٔ %{target} را به‌روز کرد" update_user_role_html: "%{name} نقش %{target} را تغییر داد" + update_username_block_html: "‫‏%{name} قانونی برای نام‌های کاربری دارای %{target} را به‌روز کرد" deleted_account: حساب حذف شد empty: هیچ گزارشی پیدا نشد. filter_by_action: پالایش بر اساس کنش @@ -1089,7 +1092,24 @@ fa: title: توصیه ها و روندها trending: پرطرفدار username_blocks: + add_new: افزودن جدید + block_registrations: انسداد ثبت‌نام‌ها + comparison: + contains: دارای + equals: برابر + contains_html: دارای %{string} + created_msg: قانون نام کاربری با موفّقیت ایجاد شد delete: حذف + edit: + title: ویرایش قانون نام‌کاربری + matches_exactly_html: برابر %{string} + new: + create: ایجاد قانون + title: ایجاد قانون نام‌کاربری جدید + no_username_block_selected: هیچ قاعدهٔ نام کاربری‌ای تغییری نکرد زیرا هیچ‌کدام گزیده نشده بودند + not_permitted: مجاز نیست + title: قانون نام کاربری + updated_msg: قانون نام کاربری با موفّقیت به‌روز شد warning_presets: add_new: افزودن تازه delete: زدودن diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 64752d55556..1c6ebec1963 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -18,8 +18,8 @@ fi: pin_errors: following: Sinun täytyy seurata käyttäjää, jota haluat tukea posts: - one: Julkaisu - other: Julkaisua + one: julkaisu + other: julkaisua posts_tab_heading: Julkaisut self_follow_error: Oman tilisi seuraaminen ei ole sallittua admin: @@ -507,14 +507,14 @@ fi: registration_requested: Rekisteröintiä pyydetty registrations: confirm: Vahvista - description: Sait rekisteröinnin FASP:lta. Hylkää se, jos et aloittanut sitä. Jos aloitat tämän, vertaile huolellisesti nimeä ja sormenjälkeä ennen rekisteröinnin vahvistamista. + description: Vastaanotit rekisteröintymisen FASP-palvelusta. Hylkää rekisteröintyminen, jos et aloittanut sitä. Jos aloitit sen, vertaile huolellisesti nimeä ja avaimen sormenjälkeä ennen kuin hyväksyt rekisteröintymisen. reject: Hylkää title: Vahvista FASP-rekisteröinti save: Tallenna select_capabilities: Valitse kyvykkyydet sign_in: Kirjaudu sisään status: Tila - title: Fediversumin Tukitoimintojen Tarjoajat + title: Fediversumin tukitoimintojen tarjoajat title: FASP follow_recommendations: description_html: "Seurantasuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä." diff --git a/config/locales/nan.yml b/config/locales/nan.yml index f6b11afc930..51d365229b2 100644 --- a/config/locales/nan.yml +++ b/config/locales/nan.yml @@ -25,7 +25,7 @@ nan: action: 執行動作 already_silenced: Tsit ê口座有受著限制。 already_suspended: Tsit ê口座ê權限已經hōo lâng停止。 - title: Kā %{acct} 做審核ê動作 + title: Kā %{acct} 做管理ê動作 account_moderation_notes: create: 留記錄 created_msg: 管理記錄成功建立! @@ -238,7 +238,7 @@ nan: update_user_role: 更新角色 update_username_block: 更新使用者號名規則 actions: - approve_appeal_html: "%{name} 允准 %{target} 所寫ê tuì審核決定ê投訴" + approve_appeal_html: "%{name} 允准 %{target} 所寫ê tuì管理決定ê投訴" approve_user_html: "%{name} 允准 %{target} ê 註冊" assigned_to_self_report_html: "%{name} kā報告 %{target} 分配hōo家tī" change_email_user_html: "%{name} 改變 %{target} ê電子phue地址" @@ -282,7 +282,7 @@ nan: memorialize_account_html: "%{name} kā %{target} 設做故人口座" promote_user_html: "%{name} kā 用者 %{target} 升級" publish_terms_of_service_html: "%{name} 公佈服務規則ê更新" - reject_appeal_html: "%{name} 拒絕 %{target} 所寫ê tuì審核決定ê投訴" + reject_appeal_html: "%{name} 拒絕 %{target} 所寫ê tuì管理決定ê投訴" reject_user_html: "%{name} 拒絕 %{target} ê 註冊" remove_avatar_user_html: "%{name} thâi掉 %{target} ê標頭" reopen_report_html: "%{name} 重開 %{target} ê檢舉" @@ -667,7 +667,7 @@ nan: none: 無 comment_description_html: 為著提供其他資訊,%{name} 寫: confirm: 確認 - confirm_action: 確認kā %{acct} 審核ê動作 + confirm_action: 確認kā %{acct} 管理ê動作 created_at: 檢舉tī delete_and_resolve: Thâi掉PO文 forwarded: 轉送ah @@ -720,9 +720,48 @@ nan: target_origin: 受檢舉ê口座ê來源 title: 檢舉 unassign: 取消分配 + unknown_action_msg: M̄知影ê動作:%{action} + unresolved: 無解決 + updated_at: 更新 + view_profile: 看個人資料 roles: + add_new: 加添角色 + assigned_users: + other: "%{count} ê用者" + categories: + administration: 管理員 + devops: DevOps + invites: 邀請 + moderation: 管理 + special: 特別 + delete: Thâi掉 + description_html: 用用者角色,lí通自訂lí ê用者ē當接近使用Mastodon ê siánn物功能kap區域。 + edit: 編「%{name}」ê角色 + everyone: 預設ê權限 + everyone_full_description_html: Tse是ē影響所有用者ê基本角色,就算是無分配tio̍h角色ê mā kâng款。所有其他ê角色繼承伊ê權限。 + permissions_count: + other: "%{count} ê權限" privileges: + administrator: 管理員 + administrator_description: 有tsit ê權限ê用者ē忽略所有ê權限。 + delete_user_data: Thâi掉用者ê資料 + delete_user_data_description: 允准用者liâm-mi thâi掉其他用者ê資料 + invite_users: 邀請用者 + invite_users_description: 允准用者邀請新lâng來tsit ê服侍器 manage_announcements: 管理公告 + manage_announcements_description: 允准用者管理佇tsit ê服侍器ê公告 + manage_appeals: 管理投訴 + manage_appeals_description: 允准用者審查tuì管理動作ê投訴 + manage_blocks: 管理封鎖 + manage_blocks_description: 允准用者封鎖電子phue ê 提供者kap IP地址 + manage_custom_emojis: 管理自訂ê Emoji + manage_custom_emojis_description: 允准用者管理佇tsit ê服侍器ê自訂Emoji + manage_federation: 管理聯邦 + manage_federation_description: 允准用者封鎖á是允准kap其他域名相連,mā控制寄送ê能力 + manage_invites: 管理邀請 + manage_invites_description: 允准用者瀏覽kap停止使用邀請連結 + manage_reports: 管理檢舉 + manage_reports_description: 允准用者審查檢舉kap執行對in ê管理ê動作。 statuses: language: 語言 trends: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b34a8ab84ce..9153e01a3be 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1996,7 +1996,7 @@ ru: ignore_favs: Не учитывать добавление в избранное ignore_reblogs: Не учитывать продвижения interaction_exceptions: Исключения на основе взаимодействий - interaction_exceptions_explanation: 'Обратите внимание: нет никаких гарантий, что посты будут удалены, после того, как они единожды перешли порог по отметкам «избранного» или продвижений.' + interaction_exceptions_explanation: 'Обратите внимание: даже если количество взаимодействий опустится ниже установленного значения после того, как оно однажды превысило его, то всё равно может случиться так, что пост не будет удалён.' keep_direct: Не удалять личные сообщения keep_direct_hint: Те ваши посты, которые видны только упомянутым в них людям, не будут удалены keep_media: Не удалять посты с вложениями @@ -2040,29 +2040,29 @@ ru: contrast: Mastodon (высококонтрастная) default: Mastodon (тёмная) mastodon-light: Mastodon (светлая) - system: Автоматически (используйте системную тему) + system: Автоматически (как в системе) time: formats: default: "%d %b %Y, %H:%M" month: "%m.%Y" time: "%H:%M" - with_time_zone: "%b %d, %Y, %H:%M %Z" + with_time_zone: "%d %b %Y, %H:%M %Z" translation: errors: quota_exceeded: Превышена квота использования службы перевода в масштабах всего сервера. too_many_requests: В последнее время в службу переводов поступает слишком много запросов. two_factor_authentication: add: Добавить - disable: Отключить - disabled_success: Двухфакторная аутентификация успешно отключена + disable: Отключить 2FA + disabled_success: Двухфакторная аутентификация отключена edit: Изменить - enabled: Двухфакторная аутентификация настроена - enabled_success: Двухфакторная авторизация успешно настроена - generate_recovery_codes: Сгенерировать коды восстановления + enabled: Двухфакторная аутентификация включена + enabled_success: Двухфакторная аутентификация настроена + generate_recovery_codes: Сгенерировать резервные коды lost_recovery_codes: Коды восстановления позволяются войти в учётную запись в случае утери смартфона. Если вы потеряли свои коды восстановления, вы можете создать новые здесь. Прошлые коды работать перестанут. - methods: Методы двухфакторной аутентификации - otp: Приложение для проверки подлинности - recovery_codes: Коды восстановления + methods: Способы подтверждения входа + otp: Приложение-аутентификатор + recovery_codes: Резервные коды recovery_codes_regenerated: Коды восстановления успешно сгенерированы recovery_instructions_html: 'Пожалуйста, сохраните коды ниже в надёжном месте: они понадобятся, чтобы войти в учётную запись, если вы потеряете доступ к своему смартфону. Вы можете вручную переписать их, распечатать и спрятать среди важных документов или, например, в любимой книжке. Каждый код действителен только один раз.' webauthn: Электронные ключи diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 928b17ed1d1..87ebe45e570 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -56,10 +56,12 @@ bg: scopes: Указва до кои API има достъп приложението. Ако изберете диапазон от най-високо ниво, няма нужда да избирате индивидуални. setting_aggregate_reblogs: Без показване на нови подсилвания за публикации, които са неотдавна подсилени (засяга само новополучени подсилвания) setting_always_send_emails: Обикновено известията по имейл няма да са изпратени при дейна употреба на Mastodon + setting_default_quote_policy: Тази настройка ще се отрази само за публикациите, създадени със следващата версия на Mastodon, но може да изберете предпочитанията си в подготовката. setting_default_sensitive: Деликатната мултимедия е скрита по подразбиране и може да се разкрие с едно щракване setting_display_media_default: Скриване на мултимедия отбелязана като деликатна setting_display_media_hide_all: Винаги скриване на мултимедията setting_display_media_show_all: Винаги показване на мултимедията + setting_emoji_style: Как се показват емоджита. "Автоматично" ще опита да използва естествените за системата емоджита, но се връща към Twemoji за остарели браузъри. setting_system_scrollbars_ui: Прилага се само към настолни браузъри, основаващи се на Safari и Chrome setting_use_blurhash: Преливането е въз основа на цветовете на скритите визуализации, но се замъгляват подробностите setting_use_pending_items: Да се показват обновявания на часовата ос само след щракване вместо автоматично превъртане на инфоканала @@ -147,6 +149,9 @@ bg: min_age: Не трябва да е под изискваната минимална възраст от закона на юрисдикцията ви. user: chosen_languages: Само публикации на отметнатите езици ще се показват в публичните часови оси + date_of_birth: + one: Трябва да се уверим, че сте поне на %{count}, за да употребявате %{domain}. Няма да съхраняваме това. + other: Трябва да се уверим, че сте поне на %{count}, за да употребявате %{domain}. Няма да съхраняваме това. role: Ролята управлява какви позволения има потребителят. user_role: color: Цветът, използван за ролите в потребителския интерфейс, като RGB в шестнадесетичен формат @@ -154,6 +159,10 @@ bg: name: Публично име на ролята, ако ролята е зададена да се показва като значка permissions_as_keys: Потребители с тази роля ще имат достъп до... position: По-висшата роля може да разреши конфликти в някои ситуации. Някои действия могат да бъдат извършени само за роли с по-нисък приоритет + username_block: + allow_with_approval: Вместо напълно да се предотвратява регистрирането, съвпадащите регистрирания ще изискват одобрението ви + comparison: Имайте предвид проблема със Scunthorpe, блокирайки частично съвпаденията + username: Ще се намира съвпадение независимо от главните и малките букви и често срещаните приличащи си знаци като "4" за "a" или "3" за "e" webhook: events: Изберете събития за изпращане template: Съставете свой полезен товар на JSON посредством променлива интерполация. Оставете празно за подразбиращ се JSON. @@ -236,6 +245,7 @@ bg: setting_display_media_default: Стандартно setting_display_media_hide_all: Скриване на всичко setting_display_media_show_all: Показване на всичко + setting_emoji_style: Стил на емоджито setting_expand_spoilers: Винаги разширяване на публикации, отбелязани с предупреждения за съдържание setting_hide_network: Скриване на социалния ви свързан граф setting_missing_alt_text_modal: Показване на диалогов прозорец потвърждение преди публикуване на мултимедия без алт. текст @@ -318,6 +328,7 @@ bg: follow_request: Някой пожела да ви последва mention: Някой ви спомена pending_account: Новите акаунти се нуждаят от преглед + quote: Някой ви цитира reblog: Някой подсили ваша публикация report: Новият доклад е подаден software_updates: @@ -364,6 +375,10 @@ bg: name: Име permissions_as_keys: Разрешения position: Приоритет + username_block: + allow_with_approval: Позволяване на регистрации с одобрение + comparison: Начин на сравнение + username: Думи, които трябва да пасват webhook: events: Включване на събития template: Шаблон за полезен товар diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 260d7530005..8a727fcd780 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -56,6 +56,7 @@ cy: scopes: Pa APIs y bydd y rhaglen yn cael mynediad iddynt. Os dewiswch gwmpas lefel uchaf, nid oes angen i chi ddewis rhai unigol. setting_aggregate_reblogs: Peidiwch â dangos hybiau newydd ar bostiadau sydd wedi cael eu hybu'n ddiweddar (dim ond yn effeithio ar hybiau newydd ei dderbyn) setting_always_send_emails: Fel arfer ni fydd hysbysiadau e-bost yn cael eu hanfon pan fyddwch chi wrthi'n defnyddio Mastodon + setting_default_quote_policy: Dim ond ar gyfer fersiynau nesaf Mastodon bydd y gosodiadau hyn yn dod i rym, ond gallwch wneud eich dewis ymlaen llaw. setting_default_sensitive: Mae cyfryngau sensitif wedi'u cuddio yn rhagosodedig a gellir eu datgelu trwy glicio setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif setting_display_media_hide_all: Cuddio cyfryngau bob tro @@ -163,6 +164,10 @@ cy: name: Enw cyhoeddus y rôl, os yw'r rôl wedi'i gosod i'w dangos fel bathodyn permissions_as_keys: Bydd defnyddwyr sydd â'r rôl hon yn cael mynediad at... position: Mae rôl uwch yn penderfynu ar ddatrys gwrthdrawiadau mewn rhai sefyllfaoedd. Dim ond ar rolau â blaenoriaeth is y gellir cyflawni rhai gweithredoedd + username_block: + allow_with_approval: Yn lle atal cofrestru’n llwyr, bydd angen eich cymeradwyaeth rhag cofrestru cyfatebol + comparison: Byddwch yn ymwybodol o Broblem Scunthorpe wrth rwystro cyfatebion rhannol. + username: Bydd yn cael ei gyfatebu waeth beth fo'r nodau bach a mawr a homoglyffau cyffredin fel "4" ar gyfer "a" neu "3" ar gyfer "e" webhook: events: Dewiswch ddigwyddiadau i'w hanfon template: Cyfansoddwch eich llwyth tâl JSON eich hun gan ddefnyddio rhyngosod newidiol. Gadewch yn wag ar gyfer JSON rhagosodedig. @@ -328,6 +333,7 @@ cy: follow_request: Mae rhywun yn ceisio eich dilyn chi mention: Mae rhywun yn sôn amdanoch chi pending_account: Mae cyfrif newydd angen adolygiad + quote: Dyfynnodd rhywun chi reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd software_updates: @@ -374,6 +380,10 @@ cy: name: Enw permissions_as_keys: Caniatâd position: Blaenoriaeth + username_block: + allow_with_approval: Caniatáu cofrestru gyda chymeradwyaeth + comparison: Dull cymharu + username: Gair i gyfatebu webhook: events: Digwyddiadau wedi'u galluogi template: Templed prif lwyth diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index c9842f07ea0..19697b72aa1 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -160,6 +160,10 @@ fa: name: نام عمومی نقش، اگر قرار است نقش به عنوان یک نشان نمایش داده شود permissions_as_keys: کاربرانی که این نقش را دارند به... position: نقش بالاتر در موقعیت‌های خاص حل تعارض را تعیین می‌کند. برخی اقدامات را فقط می توان روی نقش هایی با اولویت کمتر انجام داد + username_block: + allow_with_approval: به جای جلوگیری از ثبت‌نام، ثبت‌نام‌های مطابق نیازمند تأییدتان خواهند بود + comparison: لطفاً هنگام مسدود کردن تطابق‌های جزیی به مشکل اسکان‌ثورپ توجّه داشته باشید + username: تطبیق بدون توجه به بزرگی و کوچکی یا استفاده از نویسه‌های مشابه مثل 4 به جای a یا 3 به جای e webhook: events: گزینش رویدادها برای فرستادن template: بار JSON خود را با استفاده از درون یابی متغیر بنویسید. JSON پیش فرض را خالی بگذارید. @@ -372,6 +376,10 @@ fa: name: نام permissions_as_keys: اجازه‌ها position: اولویت + username_block: + allow_with_approval: اجازهٔ ثبت‌نام با تأیید + comparison: روش مقایسه + username: واژه برای تطبیق webhook: events: رویدادهای به کار افتاده template: قالب بار From 9d15b85d3b2ddfe964148eadba55e4ab87c571c7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 18 Aug 2025 03:35:56 -0400 Subject: [PATCH 03/27] Include `update` in the resources args for api/web/push_subscriptions route (#35801) --- config/routes/api.rb | 6 +----- spec/requests/api/web/push_subscriptions_spec.rb | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/config/routes/api.rb b/config/routes/api.rb index f8b903c7b94..34b2e255da6 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -369,10 +369,6 @@ namespace :api, format: false do namespace :web do resource :settings, only: [:update] resources :embeds, only: [:show] - resources :push_subscriptions, only: [:create, :destroy] do - member do - put :update - end - end + resources :push_subscriptions, only: [:create, :destroy, :update] end end diff --git a/spec/requests/api/web/push_subscriptions_spec.rb b/spec/requests/api/web/push_subscriptions_spec.rb index 05e6f28d1ff..21830d1b1c1 100644 --- a/spec/requests/api/web/push_subscriptions_spec.rb +++ b/spec/requests/api/web/push_subscriptions_spec.rb @@ -162,7 +162,7 @@ RSpec.describe 'API Web Push Subscriptions' do end end - describe 'PUT /api/web/push_subscriptions' do + describe 'PUT /api/web/push_subscriptions/:id' do before { sign_in Fabricate :user } let(:subscription) { Fabricate :web_push_subscription } From 72bd1ed4b3df9188a1ad3e664c86fe2e928bd134 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 18 Aug 2025 10:34:45 +0200 Subject: [PATCH 04/27] Fix updates to quote policy not being federated (#35804) --- .../api/v1/statuses/interaction_policies_controller.rb | 2 +- spec/requests/api/v1/statuses/interaction_policies_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/statuses/interaction_policies_controller.rb b/app/controllers/api/v1/statuses/interaction_policies_controller.rb index 8b822185f69..b8ec4fe1400 100644 --- a/app/controllers/api/v1/statuses/interaction_policies_controller.rb +++ b/app/controllers/api/v1/statuses/interaction_policies_controller.rb @@ -28,6 +28,6 @@ class Api::V1::Statuses::InteractionPoliciesController < Api::V1::Statuses::Base def broadcast_updates! DistributionWorker.perform_async(@status.id, { 'update' => true }) - ActivityPub::StatusUpdateDistributionWorker.perform_async(@status.id) + ActivityPub::StatusUpdateDistributionWorker.perform_async(@status.id, { 'updated_at' => Time.now.utc.iso8601 }) end end diff --git a/spec/requests/api/v1/statuses/interaction_policies_spec.rb b/spec/requests/api/v1/statuses/interaction_policies_spec.rb index 6b988bb523d..cdc33e40d7e 100644 --- a/spec/requests/api/v1/statuses/interaction_policies_spec.rb +++ b/spec/requests/api/v1/statuses/interaction_policies_spec.rb @@ -62,7 +62,7 @@ RSpec.describe 'Interaction policies', feature: :outgoing_quotes do expect(DistributionWorker) .to have_enqueued_sidekiq_job(status.id, { 'update' => true }) expect(ActivityPub::StatusUpdateDistributionWorker) - .to have_enqueued_sidekiq_job(status.id) + .to have_enqueued_sidekiq_job(status.id, { 'updated_at' => anything }) end end From f5754f2a3600f6ae9c9d7d89fe5aa5ecb85e7bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ev=D0=B0n=20Summers?= Date: Mon, 18 Aug 2025 16:13:44 +0200 Subject: [PATCH 05/27] Mention admin@localhost in DEVELOPMENT.md for non-Vagrant setups (#35704) --- docs/DEVELOPMENT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 79153a20213..0425f8892b6 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -91,7 +91,7 @@ development environment configured with the software needed for this project. ## Next steps - Once you have successfully set up a development environment, it will be available on http://localhost:3000 -- Log in as the default admin user with the username `admin@mastodon.local` and the password `mastodonadmin`. +- Log in as the default admin user with the username `admin@mastodon.local` or `admin@localhost` (depending on your setup) and the password `mastodonadmin`. - Check out the [Mastodon docs] for tips on working with emails in development (you'll need this when creating new user accounts) as well as a list of useful commands for testing and updating your dev instance. - You can optionally populate your database with sample data by running `bin/rails dev:populate_sample_data`. This will create a `@showcase_account` account with various types of contents. From c2fcf4183ce1c4f78097be032fdee2fc354b66d4 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 18 Aug 2025 16:51:16 +0200 Subject: [PATCH 06/27] =?UTF-8?q?Fix=20=E2=80=9CDelete=20&=20Redraft?= =?UTF-8?q?=E2=80=9D=20as=20well=20as=20=E2=80=9CEdit=E2=80=9D=20unexpecte?= =?UTF-8?q?dly=20reseting=20quote=20policy=20(#35808)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/reducers/compose.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index c5b3c22ec14..bb4d917cca5 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -512,6 +512,8 @@ export const composeReducer = (state = initialState, action) => { map.set('sensitive', action.status.get('sensitive')); map.set('language', action.status.get('language')); map.set('id', null); + // Mastodon-authored posts can be expected to have at most one automatic approval policy + map.set('quote_policy', action.status.getIn(['quote_approval', 'automatic', 0]) || 'nobody'); if (action.status.get('spoiler_text').length > 0) { map.set('spoiler', true); @@ -541,6 +543,8 @@ export const composeReducer = (state = initialState, action) => { map.set('idempotencyKey', uuid()); map.set('sensitive', action.status.get('sensitive')); map.set('language', action.status.get('language')); + // Mastodon-authored posts can be expected to have at most one automatic approval policy + map.set('quote_policy', action.status.getIn(['quote_approval', 'automatic', 0]) || 'nobody'); if (action.spoiler_text.length > 0) { map.set('spoiler', true); From 95111e88e3c9d44efdc4a18a80a7b082cf340655 Mon Sep 17 00:00:00 2001 From: Alan Date: Mon, 18 Aug 2025 09:55:38 -0600 Subject: [PATCH 07/27] Update color alpha blending to use Sass color functions (#35787) --- .../styles/mastodon-light/diff.scss | 18 +-- app/javascript/styles/mastodon/_mixins.scss | 3 +- app/javascript/styles/mastodon/accounts.scss | 15 ++- app/javascript/styles/mastodon/admin.scss | 3 +- .../styles/mastodon/components.scss | 125 +++++++++--------- .../styles/mastodon/css_variables.scss | 10 +- app/javascript/styles/mastodon/forms.scss | 23 ++-- app/javascript/styles/mastodon/polls.scss | 5 +- app/javascript/styles/mastodon/widgets.scss | 3 +- 9 files changed, 108 insertions(+), 97 deletions(-) diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 874c44240a4..d92012a1573 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -16,7 +16,7 @@ .status-card__actions button, .status-card__actions a { - color: rgba($white, 0.8); + color: color.change($white, $alpha: 0.8); &:hover, &:active, @@ -298,14 +298,14 @@ .simple_form { .warning { box-shadow: none; - background: rgba($error-red, 0.5); + background: color.change($error-red, $alpha: 0.5); text-shadow: none; } .recommended { border-color: $ui-highlight-color; color: $ui-highlight-color; - background-color: rgba($ui-highlight-color, 0.1); + background-color: color.change($ui-highlight-color, $alpha: 0.1); } input[type='text'], @@ -327,7 +327,7 @@ .compose-form .compose-form__warning { border-color: $ui-highlight-color; - background-color: rgba($ui-highlight-color, 0.1); + background-color: color.change($ui-highlight-color, $alpha: 0.1); &, a { @@ -375,10 +375,10 @@ } .status__wrapper-direct { - background-color: rgba($ui-highlight-color, 0.1); + background-color: color.change($ui-highlight-color, $alpha: 0.1); &:focus { - background-color: rgba($ui-highlight-color, 0.15); + background-color: color.change($ui-highlight-color, $alpha: 0.15); } } @@ -433,8 +433,8 @@ } .inline-follow-suggestions { - background-color: rgba($ui-highlight-color, 0.1); - border-bottom-color: rgba($ui-highlight-color, 0.3); + background-color: color.change($ui-highlight-color, $alpha: 0.1); + border-bottom-color: color.change($ui-highlight-color, $alpha: 0.3); } .inline-follow-suggestions__body__scrollable__card { @@ -508,7 +508,7 @@ a.sparkline { @supports not selector(::-webkit-scrollbar) { html { - scrollbar-color: rgba($action-button-color, 0.25) + scrollbar-color: color.change($action-button-color, $alpha: 0.25) var(--background-border-color); } } diff --git a/app/javascript/styles/mastodon/_mixins.scss b/app/javascript/styles/mastodon/_mixins.scss index b7d9203e3f3..d66fa405819 100644 --- a/app/javascript/styles/mastodon/_mixins.scss +++ b/app/javascript/styles/mastodon/_mixins.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'variables' as *; @mixin search-input { @@ -22,7 +23,7 @@ padding-bottom: 14px; margin-top: 10px; color: $light-text-color; - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); + box-shadow: 2px 4px 15px color.change($base-shadow-color, $alpha: 0.4); h4 { text-transform: uppercase; diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 3854db0c396..da4b9bdaa81 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'variables' as *; @use 'functions' as *; @@ -161,7 +162,7 @@ .nothing-here { background: $ui-base-color; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2); color: $darker-text-color; font-size: 14px; font-weight: 500; @@ -205,8 +206,8 @@ .simple_form .overridden, .simple_form .recommended, .simple_form .not_recommended { - background-color: rgba($ui-secondary-color, 0.1); - border: 1px solid rgba($ui-secondary-color, 0.5); + background-color: color.change($ui-secondary-color, $alpha: 0.1); + border: 1px solid color.change($ui-secondary-color, $alpha: 0.5); } .account-role { @@ -240,8 +241,8 @@ .information-badge { &.superapp { color: $success-green; - background-color: rgba($success-green, 0.1); - border-color: rgba($success-green, 0.5); + background-color: color.change($success-green, $alpha: 0.1); + border-color: color.change($success-green, $alpha: 0.5); } } @@ -302,8 +303,8 @@ } .verified { - border: 1px solid rgba($valid-value-color, 0.5); - background: rgba($valid-value-color, 0.25); + border: 1px solid color.change($valid-value-color, $alpha: 0.5); + background: color.change($valid-value-color, $alpha: 0.25); a { color: $valid-value-color; diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 3709a4f504c..e9b584f3966 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'sass:math'; @use 'functions' as *; @use 'variables' as *; @@ -1255,7 +1256,7 @@ a.name-tag, } path:first-child { - fill: rgba($highlight-text-color, 0.25) !important; + fill: color.change($highlight-text-color, $alpha: 0.25) !important; fill-opacity: 1 !important; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 1de7b74c501..48a7ed12cc1 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -311,7 +311,7 @@ &:active, &:focus-visible { color: lighten($action-button-color, 7%); - background-color: rgba($action-button-color, 0.15); + background-color: color.change($action-button-color, $alpha: 0.15); } &:focus-visible { @@ -331,7 +331,7 @@ &:active, &:focus-visible { color: darken($lighter-text-color, 7%); - background-color: rgba($lighter-text-color, 0.15); + background-color: color.change($lighter-text-color, $alpha: 0.15); } &:focus-visible { @@ -361,14 +361,14 @@ &.overlayed { box-sizing: content-box; - background: rgba($black, 0.65); + background: color.change($black, $alpha: 0.65); backdrop-filter: $backdrop-blur-filter; - color: rgba($white, 0.7); + color: color.change($white, $alpha: 0.7); border-radius: 4px; padding: 2px; &:hover { - background: rgba($black, 0.9); + background: color.change($black, $alpha: 0.9); } } @@ -391,7 +391,7 @@ border-color: $valid-value-color; color: $valid-value-color; transition: none; - background-color: rgba($valid-value-color, 0.15); + background-color: color.change($valid-value-color, $alpha: 0.15); } } @@ -411,7 +411,7 @@ &:active, &:focus { color: darken($lighter-text-color, 7%); - background-color: rgba($lighter-text-color, 0.15); + background-color: color.change($lighter-text-color, $alpha: 0.15); } &:focus-visible { @@ -618,7 +618,7 @@ body > [data-popper-placement] { &__warning { color: $inverted-text-color; background: $ui-primary-color; - box-shadow: 0 2px 6px rgba($base-shadow-color, 0.3); + box-shadow: 0 2px 6px color.change($base-shadow-color, $alpha: 0.3); padding: 8px 10px; border-radius: 4px; font-size: 13px; @@ -694,7 +694,7 @@ body > [data-popper-placement] { .spoiler-input__input { padding: 12px 12px - 5px; - background: rgba($ui-highlight-color, 0.05); + background: color.change($ui-highlight-color, $alpha: 0.05); color: $highlight-text-color; } @@ -1428,7 +1428,7 @@ body > [data-popper-placement] { .focusable { &:focus-visible { outline: 0; - background: rgba($ui-highlight-color, 0.05); + background: color.change($ui-highlight-color, $alpha: 0.05); box-shadow: inset 0 0 0 2px $ui-button-focus-outline-color; } } @@ -1683,10 +1683,10 @@ body > [data-popper-placement] { .notification-ungrouped--direct, .notification-group--direct, .notification-group--annual-report { - background: rgba($ui-highlight-color, 0.05); + background: color.change($ui-highlight-color, $alpha: 0.05); &:focus { - background: rgba($ui-highlight-color, 0.1); + background: color.change($ui-highlight-color, $alpha: 0.1); } } @@ -2016,7 +2016,7 @@ body > [data-popper-placement] { &__domain-pill { display: inline-flex; - background: rgba($highlight-text-color, 0.2); + background: color.change($highlight-text-color, $alpha: 0.2); border-radius: 4px; border: 0; color: $highlight-text-color; @@ -2077,7 +2077,7 @@ body > [data-popper-placement] { &__handle { border: 2px dashed $highlight-text-color; - background: rgba($highlight-text-color, 0.1); + background: color.change($highlight-text-color, $alpha: 0.1); padding: 12px 8px; color: $highlight-text-color; border-radius: 4px; @@ -3283,7 +3283,7 @@ a.account__display-name { .columns-area__panels__pane--overlay { pointer-events: auto; - background: rgba($base-overlay-background, 0.5); + background: color.change($base-overlay-background, $alpha: 0.5); z-index: 3; .columns-area__panels__pane__inner { @@ -3820,7 +3820,10 @@ a.account__display-name { border-radius: 10px; padding: 0; user-select: none; - -webkit-tap-highlight-color: rgba($base-overlay-background, 0); + -webkit-tap-highlight-color: color.change( + $base-overlay-background, + $alpha: 0 + ); -webkit-tap-highlight-color: transparent; } @@ -4069,7 +4072,7 @@ a.account__display-name { cursor: pointer; & > div { - background: rgba($base-shadow-color, 0.6); + background: color.change($base-shadow-color, $alpha: 0.6); border-radius: 8px; padding: 12px 9px; backdrop-filter: $backdrop-blur-filter; @@ -4399,7 +4402,7 @@ a.status-card { z-index: 1; &.active { - box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3); + box-shadow: 0 1px 0 color.change($highlight-text-color, $alpha: 0.3); &::before { display: block; @@ -4415,8 +4418,8 @@ a.status-card { z-index: 1; background: radial-gradient( ellipse, - rgba($ui-highlight-color, 0.23) 0%, - rgba($ui-highlight-color, 0) 60% + color.change($ui-highlight-color, $alpha: 0.23) 0%, + color.change($ui-highlight-color, $alpha: 0) 60% ); } } @@ -4510,7 +4513,7 @@ a.status-card { &.active { .column-header__icon { color: $highlight-text-color; - text-shadow: 0 0 10px rgba($highlight-text-color, 0.4); + text-shadow: 0 0 10px color.change($highlight-text-color, $alpha: 0.4); } } @@ -4855,7 +4858,7 @@ a.status-card { font-size: 14px; &__label { - background-color: rgba($black, 0.45); + background-color: color.change($black, $alpha: 0.45); backdrop-filter: $backdrop-blur-filter; border-radius: 8px; padding: 12px 16px; @@ -4875,7 +4878,7 @@ a.status-card { &:hover, &:focus { .spoiler-button__overlay__label { - background-color: rgba($black, 0.9); + background-color: color.change($black, $alpha: 0.9); } } } @@ -5266,7 +5269,7 @@ a.status-card { .upload-area { align-items: center; - background: rgba($base-overlay-background, 0.8); + background: color.change($base-overlay-background, $alpha: 0.8); display: flex; height: 100vh; justify-content: center; @@ -5301,7 +5304,7 @@ a.status-card { z-index: -1; border-radius: 4px; background: $ui-base-color; - box-shadow: 0 0 5px rgba($base-shadow-color, 0.2); + box-shadow: 0 0 5px color.change($base-shadow-color, $alpha: 0.2); } .upload-area__content { @@ -5939,7 +5942,7 @@ a.status-card { align-items: center; .icon-button { - color: rgba($white, 0.7); + color: color.change($white, $alpha: 0.7); padding: 8px; .icon { @@ -5952,11 +5955,11 @@ a.status-card { &:focus, &:active { color: $white; - background-color: rgba($white, 0.15); + background-color: color.change($white, $alpha: 0.15); } &:focus { - background-color: rgba($white, 0.3); + background-color: color.change($white, $alpha: 0.3); } } } @@ -5997,7 +6000,7 @@ a.status-card { background: transparent; box-sizing: border-box; border: 0; - color: rgba($white, 0.7); + color: color.change($white, $alpha: 0.7); cursor: pointer; display: flex; align-items: center; @@ -6051,11 +6054,11 @@ a.status-card { &:focus, &:active { color: $white; - background-color: rgba($white, 0.15); + background-color: color.change($white, $alpha: 0.15); } &:focus { - background-color: rgba($white, 0.3); + background-color: color.change($white, $alpha: 0.3); } &.active { @@ -6064,11 +6067,11 @@ a.status-card { &:hover, &:focus, &:active { - background: rgba($highlight-text-color, 0.15); + background: color.change($highlight-text-color, $alpha: 0.15); } &:focus { - background: rgba($highlight-text-color, 0.3); + background: color.change($highlight-text-color, $alpha: 0.3); } } @@ -6078,11 +6081,11 @@ a.status-card { &:hover, &:focus, &:active { - background: rgba($gold-star, 0.15); + background: color.change($gold-star, $alpha: 0.15); } &:focus { - background: rgba($gold-star, 0.3); + background: color.change($gold-star, $alpha: 0.3); } } @@ -6954,7 +6957,7 @@ a.status-card { display: block; color: $white; border: 0; - background: rgba($black, 0.65); + background: color.change($black, $alpha: 0.65); backdrop-filter: $backdrop-blur-filter; padding: 3px 12px; border-radius: 99px; @@ -6979,7 +6982,7 @@ a.status-card { text-align: center; color: $white; border: 0; - background: rgba($black, 0.65); + background: color.change($black, $alpha: 0.65); backdrop-filter: $backdrop-blur-filter; padding: 3px 8px; border-radius: 4px; @@ -7001,7 +7004,7 @@ a.status-card { } .media-gallery__alt__popover { - background: rgba($black, 0.65); + background: color.change($black, $alpha: 0.65); backdrop-filter: $backdrop-blur-filter; border-radius: 4px; box-shadow: var(--dropdown-shadow); @@ -7023,7 +7026,7 @@ a.status-card { p { font-size: 15px; line-height: 20px; - color: rgba($white, 0.85); + color: color.change($white, $alpha: 0.85); white-space: pre-line; } } @@ -7467,8 +7470,8 @@ a.status-card { box-sizing: border-box; background: linear-gradient( 0deg, - rgba($base-shadow-color, 0.85) 0, - rgba($base-shadow-color, 0.45) 60%, + color.change($base-shadow-color, $alpha: 0.85) 0, + color.change($base-shadow-color, $alpha: 0.45) 60%, transparent ); padding: 0 15px; @@ -7564,7 +7567,7 @@ a.status-card { flex: 0 0 auto; background: transparent; border: 0; - color: rgba($white, 0.75); + color: color.change($white, $alpha: 0.75); font-weight: 500; &:active, @@ -7628,7 +7631,7 @@ a.status-card { &::before { content: ''; width: 50px; - background: rgba($white, 0.35); + background: color.change($white, $alpha: 0.35); border-radius: 4px; display: block; position: absolute; @@ -7660,7 +7663,7 @@ a.status-card { margin-inline-start: -6px; transform: translate(0, -50%); background: $white; - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + box-shadow: 1px 2px 6px color.change($base-shadow-color, $alpha: 0.2); opacity: 0; .no-reduce-motion & { @@ -7698,7 +7701,7 @@ a.status-card { &::before { content: ''; width: 100%; - background: rgba($white, 0.35); + background: color.change($white, $alpha: 0.35); border-radius: 4px; display: block; position: absolute; @@ -7717,7 +7720,7 @@ a.status-card { } &__buffer { - background: rgba($white, 0.2); + background: color.change($white, $alpha: 0.2); } &__handle { @@ -7730,7 +7733,7 @@ a.status-card { top: 10px; margin-inline-start: -6px; background: $white; - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + box-shadow: 1px 2px 6px color.change($base-shadow-color, $alpha: 0.2); .no-reduce-motion & { transition: opacity 0.1s ease; @@ -7754,7 +7757,7 @@ a.status-card { top: 50%; inset-inline-start: 50%; transform: translate(-50%, -50%); - background: rgba($base-shadow-color, 0.45); + background: color.change($base-shadow-color, $alpha: 0.45); backdrop-filter: $backdrop-blur-filter; color: $white; border-radius: 8px; @@ -8089,7 +8092,7 @@ noscript { inset-inline-start: 0; width: 100%; height: 100%; - background: rgba($base-overlay-background, 0.5); + background: color.change($base-overlay-background, $alpha: 0.5); } .focal-point { @@ -8111,7 +8114,7 @@ noscript { transform: translate(-50%, -50%); border: 2px solid #fff; border-radius: 50%; - box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35); + box-shadow: 0 0 0 9999em color.change($base-shadow-color, $alpha: 0.35); pointer-events: none; } } @@ -8353,7 +8356,7 @@ noscript { } .verified { - border: 1px solid rgba($valid-value-color, 0.5); + border: 1px solid color.change($valid-value-color, $alpha: 0.5); margin-top: -1px; margin-inline: -1px; @@ -8573,7 +8576,7 @@ noscript { width: 50px; path:first-child { - fill: rgba($highlight-text-color, 0.25) !important; + fill: color.change($highlight-text-color, $alpha: 0.25) !important; fill-opacity: 1 !important; } @@ -8598,7 +8601,7 @@ noscript { .trends__item__sparkline { path:first-child { - fill: rgba($gold-star, 0.25) !important; + fill: color.change($gold-star, $alpha: 0.25) !important; } path:last-child { @@ -9763,7 +9766,7 @@ noscript { margin-bottom: 5px; border-radius: 8px; border: 1px solid $highlight-text-color; - background: rgba($highlight-text-color, 0.15); + background: color.change($highlight-text-color, $alpha: 0.15); overflow: hidden; flex-shrink: 0; @@ -9818,7 +9821,7 @@ noscript { } .button-tertiary { - background: rgba($ui-base-color, 0.15); + background: color.change($ui-base-color, $alpha: 0.15); backdrop-filter: blur(8px); } } @@ -9835,7 +9838,7 @@ noscript { .warning-banner { border: 1px solid $warning-red; - background: rgba($warning-red, 0.15); + background: color.change($warning-red, $alpha: 0.15); &__message { h1 { @@ -10170,13 +10173,13 @@ noscript { padding: 15px; margin: 0; color: $white; - background: rgba($black, 0.85); + background: color.change($black, $alpha: 0.85); backdrop-filter: blur(8px); border: 1px solid rgba(lighten($classic-base-color, 4%), 0.85); border-radius: 8px; box-shadow: - 0 10px 15px -3px rgba($base-shadow-color, 0.25), - 0 4px 6px -4px rgba($base-shadow-color, 0.25); + 0 10px 15px -3px color.change($base-shadow-color, $alpha: 0.25), + 0 4px 6px -4px color.change($base-shadow-color, $alpha: 0.25); cursor: default; font-size: 15px; line-height: 21px; @@ -10214,7 +10217,7 @@ noscript { &:hover, &:focus, &:active { - background: rgba($ui-base-color, 0.85); + background: color.change($ui-base-color, $alpha: 0.85); } } @@ -10312,7 +10315,7 @@ noscript { padding: 16px 0; padding-bottom: 0; border-bottom: 1px solid var(--background-border-color); - background: rgba($ui-highlight-color, 0.05); + background: color.change($ui-highlight-color, $alpha: 0.05); &__header { display: flex; diff --git a/app/javascript/styles/mastodon/css_variables.scss b/app/javascript/styles/mastodon/css_variables.scss index 7f27c12f774..78915ae10ee 100644 --- a/app/javascript/styles/mastodon/css_variables.scss +++ b/app/javascript/styles/mastodon/css_variables.scss @@ -6,10 +6,10 @@ --dropdown-border-color: #{lighten($ui-base-color, 4%)}; --dropdown-background-color: #{rgba(darken($ui-base-color, 8%), 0.9)}; --dropdown-shadow: - 0 20px 25px -5px #{rgba($base-shadow-color, 0.25)}, - 0 8px 10px -6px #{rgba($base-shadow-color, 0.25)}; + 0 20px 25px -5px #{color.change($base-shadow-color, $alpha: 0.25)}, + 0 8px 10px -6px #{color.change($base-shadow-color, $alpha: 0.25)}; --modal-background-color: #{rgba(darken($ui-base-color, 8%), 0.7)}; - --modal-background-variant-color: #{rgba($ui-base-color, 0.7)}; + --modal-background-variant-color: #{color.change($ui-base-color, $alpha: 0.7)}; --modal-border-color: #{lighten($ui-base-color, 4%)}; --background-border-color: #{lighten($ui-base-color, 4%)}; --background-color: #{darken($ui-base-color, 8%)}; @@ -21,7 +21,9 @@ --on-surface-color: #{color.adjust($ui-base-color, $alpha: -0.5)}; --avatar-border-radius: 8px; --media-outline-color: #{rgba(#fcf8ff, 0.15)}; - --overlay-icon-shadow: drop-shadow(0 0 8px #{rgba($base-shadow-color, 0.35)}); + --overlay-icon-shadow: drop-shadow( + 0 0 8px #{color.change($base-shadow-color, $alpha: 0.35)} + ); --error-background-color: #{darken($error-red, 16%)}; --error-active-background-color: #{darken($error-red, 12%)}; --on-error-color: #fff; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 4762168bd89..b3708b722e3 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'variables' as *; @use 'functions' as *; @@ -733,20 +734,20 @@ code { text-align: center; &.notice { - border: 1px solid rgba($valid-value-color, 0.5); - background: rgba($valid-value-color, 0.25); + border: 1px solid color.change($valid-value-color, $alpha: 0.5); + background: color.change($valid-value-color, $alpha: 0.25); color: $valid-value-color; } &.warning { - border: 1px solid rgba($gold-star, 0.5); - background: rgba($gold-star, 0.25); + border: 1px solid color.change($gold-star, $alpha: 0.5); + background: color.change($gold-star, $alpha: 0.25); color: $gold-star; } &.alert { - border: 1px solid rgba($error-value-color, 0.5); - background: rgba($error-value-color, 0.1); + border: 1px solid color.change($error-value-color, $alpha: 0.5); + background: color.change($error-value-color, $alpha: 0.1); color: $error-value-color; } @@ -965,7 +966,7 @@ code { background: $simple-background-color; padding: 4px; margin: 0 10px 20px 0; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2); display: inline-block; svg { @@ -988,10 +989,10 @@ code { .simple_form { .warning { box-sizing: border-box; - background: rgba($error-value-color, 0.5); + background: color.change($error-value-color, $alpha: 0.5); color: $primary-text-color; - text-shadow: 1px 1px 0 rgba($base-shadow-color, 0.3); - box-shadow: 0 2px 6px rgba($base-shadow-color, 0.4); + text-shadow: 1px 1px 0 color.change($base-shadow-color, $alpha: 0.3); + box-shadow: 0 2px 6px color.change($base-shadow-color, $alpha: 0.4); border-radius: 4px; padding: 10px; margin-bottom: 15px; @@ -1350,7 +1351,7 @@ code { width: 100%; height: 100%; position: absolute; - background: rgba($error-value-color, 0.25); + background: color.change($error-value-color, $alpha: 0.25); z-index: 2; border-radius: 8px; } diff --git a/app/javascript/styles/mastodon/polls.scss b/app/javascript/styles/mastodon/polls.scss index f49ce3c413b..4402e51b9ba 100644 --- a/app/javascript/styles/mastodon/polls.scss +++ b/app/javascript/styles/mastodon/polls.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'variables' as *; @use 'functions' as *; @@ -206,7 +207,7 @@ &:active, &:focus { - background-color: rgba($dark-text-color, 0.1); + background-color: color.change($dark-text-color, $alpha: 0.1); } } @@ -225,7 +226,7 @@ background: rgba(darken($ui-primary-color, 14%), 0.7); &.leading { - background: rgba($ui-highlight-color, 0.5); + background: color.change($ui-highlight-color, $alpha: 0.5); } } } diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index 8d09c7d5839..266a9ca9307 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -1,3 +1,4 @@ +@use 'sass:color'; @use 'variables' as *; @use 'functions' as *; @@ -16,7 +17,7 @@ padding: 15px; text-decoration: none; color: inherit; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2); } & > a { From 255d8f3f8c6ece6a9f1fce9ea901d71577b92099 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 18 Aug 2025 18:37:13 +0200 Subject: [PATCH 08/27] Fix e-mail confirmation bypassing username approval (#35806) --- app/models/user.rb | 8 +++-- .../models/concerns/user/confirmation.rb | 36 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index aca72daff04..8e0785e7fdd 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -412,7 +412,7 @@ class User < ApplicationRecord def set_approved self.approved = begin - if sign_up_from_ip_requires_approval? || sign_up_email_requires_approval? || sign_up_username_requires_approval? + if requires_approval? false else open_registrations? || valid_invitation? || external? @@ -426,7 +426,11 @@ class User < ApplicationRecord def grant_approval_on_confirmation? # Re-check approval on confirmation if the server has switched to open registrations - open_registrations? && !sign_up_from_ip_requires_approval? && !sign_up_email_requires_approval? + open_registrations? && !requires_approval? + end + + def requires_approval? + sign_up_from_ip_requires_approval? || sign_up_email_requires_approval? || sign_up_username_requires_approval? end def wrap_email_confirmation diff --git a/spec/support/examples/models/concerns/user/confirmation.rb b/spec/support/examples/models/concerns/user/confirmation.rb index 4edc402f950..bb4d1b52b9c 100644 --- a/spec/support/examples/models/concerns/user/confirmation.rb +++ b/spec/support/examples/models/concerns/user/confirmation.rb @@ -86,6 +86,42 @@ RSpec.shared_examples 'User::Confirmation' do end end + context 'when the user requires explicit approval because of signup IP address' do + let(:user) { Fabricate(:user, confirmed_at: nil, unconfirmed_email: new_email, approved: false, sign_up_ip: '192.0.2.5') } + + before do + Setting.registrations_mode = 'open' + Fabricate(:ip_block, ip: '192.0.2.5', severity: :sign_up_requires_approval) + end + + it 'sets email to new_email and marks user as confirmed, but not as approved and does not trigger `account.approved` web hook' do + expect { subject } + .to change { user.reload.email }.to(new_email) + .and change { user.reload.confirmed_at }.from(nil) + .and not_change { user.reload.approved }.from(false) + expect(TriggerWebhookWorker) + .to_not have_received(:perform_async).with('account.approved', 'Account', user.account_id) + end + end + + context 'when the user requires explicit approval because of username' do + let(:user) { Fabricate(:user, confirmed_at: nil, unconfirmed_email: new_email, approved: false, account_attributes: { username: 'VeryStrangeUsername' }) } + + before do + Setting.registrations_mode = 'open' + Fabricate(:username_block, username: 'StrangeUser', exact: false, allow_with_approval: true) + end + + it 'sets email to new_email and marks user as confirmed, but not as approved and does not trigger `account.approved` web hook' do + expect { subject } + .to change { user.reload.email }.to(new_email) + .and change { user.reload.confirmed_at }.from(nil) + .and not_change { user.reload.approved }.from(false) + expect(TriggerWebhookWorker) + .to_not have_received(:perform_async).with('account.approved', 'Account', user.account_id) + end + end + context 'when registrations mode is approved' do before { Setting.registrations_mode = 'approved' } From 28bf811a070f4c4fcc8a81378b89173e5766f433 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Mon, 18 Aug 2025 11:45:31 -0500 Subject: [PATCH 09/27] Update Dockerfile to use Debian 'trixie' (#35768) --- Dockerfile | 35 ++++++++++++++++------------------- streaming/Dockerfile | 6 +++--- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index 23214c2483c..38723228547 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,11 +17,11 @@ ARG RUBY_VERSION="3.4.5" # # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="22" -# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] -ARG DEBIAN_VERSION="bookworm" -# Node.js image to use for base image based on combined variables (ex: 20-bookworm-slim) +# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="trixie"] +ARG DEBIAN_VERSION="trixie" +# Node.js image to use for base image based on combined variables (ex: 20-trixie-slim) FROM ${BASE_REGISTRY}/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS node -# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-bookworm) +# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-trixie) FROM ${BASE_REGISTRY}/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} AS ruby # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA @@ -96,9 +96,6 @@ RUN \ # Set /opt/mastodon as working directory WORKDIR /opt/mastodon -# Add backport repository for some specific packages where we need the latest version -RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list - # hadolint ignore=DL3008,DL3005 RUN \ # Mount Apt cache and lib directories from Docker buildx caches @@ -161,11 +158,11 @@ RUN \ libexif-dev \ libexpat1-dev \ libgirepository1.0-dev \ - libheif-dev/bookworm-backports \ + libheif-dev \ + libhwy-dev \ libimagequant-dev \ libjpeg62-turbo-dev \ liblcms2-dev \ - liborc-dev \ libspng-dev \ libtiff-dev \ libwebp-dev \ @@ -209,7 +206,7 @@ FROM build AS ffmpeg # ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"] # renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg -ARG FFMPEG_VERSION=7.1 +ARG FFMPEG_VERSION=7.1.1 # ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"] ARG FFMPEG_URL=https://ffmpeg.org/releases @@ -327,28 +324,28 @@ RUN \ # Apt update install non-dev versions of necessary components apt-get install -y --no-install-recommends \ libexpat1 \ - libglib2.0-0 \ - libicu72 \ + libglib2.0-0t64 \ + libicu76 \ libidn12 \ libpq5 \ - libreadline8 \ - libssl3 \ + libreadline8t64 \ + libssl3t64 \ libyaml-0-2 \ # libvips components libcgif0 \ libexif12 \ - libheif1/bookworm-backports \ + libheif1 \ + libhwy1t64 \ libimagequant0 \ libjpeg62-turbo \ liblcms2-2 \ - liborc-0.4-0 \ libspng0 \ libtiff6 \ libwebp7 \ libwebpdemux2 \ libwebpmux3 \ # ffmpeg components - libdav1d6 \ + libdav1d7 \ libmp3lame0 \ libopencore-amrnb0 \ libopencore-amrwb0 \ @@ -358,9 +355,9 @@ RUN \ libvorbis0a \ libvorbisenc2 \ libvorbisfile3 \ - libvpx7 \ + libvpx9 \ libx264-164 \ - libx265-199 \ + libx265-215 \ ; # Copy Mastodon sources into final layer diff --git a/streaming/Dockerfile b/streaming/Dockerfile index 14f2d3c7e71..0ddde2f8dc6 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -11,9 +11,9 @@ ARG BASE_REGISTRY="docker.io" # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="22" -# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] -ARG DEBIAN_VERSION="bookworm" -# Node image to use for base image based on combined variables (ex: 20-bookworm-slim) +# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="trixie"] +ARG DEBIAN_VERSION="trixie" +# Node image to use for base image based on combined variables (ex: 20-trixie-slim) FROM ${BASE_REGISTRY}/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS streaming # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA From d4b2e7f77139e27cbde83034fe96dbd189ac56c9 Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 18 Aug 2025 18:52:28 +0200 Subject: [PATCH 10/27] Composer Quote UI (#35805) Co-authored-by: diondiondion --- .../components/autosuggest_textarea.jsx | 3 ++- app/javascript/mastodon/components/status.jsx | 19 +++++++++++++ .../mastodon/containers/status_container.jsx | 7 +++++ .../compose/components/compose_form.jsx | 3 +++ .../compose/components/quoted_post.tsx | 27 +++++++++++++++++++ .../containers/poll_button_container.js | 14 +++++++--- .../containers/upload_button_container.js | 3 ++- app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/reducers/compose.js | 12 +++++++-- app/javascript/mastodon/selectors/filters.ts | 2 +- .../mastodon/store/typed_functions.ts | 2 +- .../styles/mastodon/components.scss | 24 +++++++++++++++++ 12 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 app/javascript/mastodon/features/compose/components/quoted_post.tsx diff --git a/app/javascript/mastodon/components/autosuggest_textarea.jsx b/app/javascript/mastodon/components/autosuggest_textarea.jsx index c7ec3779f3f..de5accc4b28 100644 --- a/app/javascript/mastodon/components/autosuggest_textarea.jsx +++ b/app/javascript/mastodon/components/autosuggest_textarea.jsx @@ -53,6 +53,7 @@ const AutosuggestTextarea = forwardRef(({ onFocus, autoFocus = true, lang, + className, }, textareaRef) => { const [suggestionsHidden, setSuggestionsHidden] = useState(true); @@ -192,7 +193,7 @@ const AutosuggestTextarea = forwardRef(({ }; return ( -
+