diff --git a/.nvmrc b/.nvmrc index 12389442377..e4a1475c12d 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.7 +24.7 \ No newline at end of file diff --git a/app/controllers/settings/preferences/posting_defaults_controller.rb b/app/controllers/settings/preferences/posting_defaults_controller.rb new file mode 100644 index 00000000000..53fee0e5ca3 --- /dev/null +++ b/app/controllers/settings/preferences/posting_defaults_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Settings::Preferences::PostingDefaultsController < Settings::Preferences::BaseController + private + + def after_update_redirect_path + settings_preferences_posting_defaults_path + end +end diff --git a/app/javascript/mastodon/features/ui/components/visibility_modal.tsx b/app/javascript/mastodon/features/ui/components/visibility_modal.tsx index 2341fd9f3a8..8b48cad5401 100644 --- a/app/javascript/mastodon/features/ui/components/visibility_modal.tsx +++ b/app/javascript/mastodon/features/ui/components/visibility_modal.tsx @@ -198,10 +198,10 @@ export const VisibilityModal: FC = forwardRef(
( - {chunks} + {chunks} ), }} tagName='p' @@ -216,7 +216,7 @@ export const VisibilityModal: FC = forwardRef( > = forwardRef( > {count, plural, one {# altre} other {# altres}} han impulsat la vostra publicació", "notification.relationships_severance_event": "S'han perdut les connexions amb {name}", @@ -859,6 +861,7 @@ "status.continued_thread": "Continuació del fil", "status.copy": "Copia l'enllaç al tut", "status.delete": "Elimina", + "status.delete.success": "Publicació esborrada", "status.detailed_status": "Vista detallada de la conversa", "status.direct": "Menciona privadament @{name}", "status.direct_indicator": "Menció privada", @@ -888,11 +891,16 @@ "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_followers_only": "Només els seguidors poden citar aquesta publicació", + "status.quote_manual_review": "L'autor ho revisarà manualment", "status.quote_policy_change": "Canvieu qui us pot citar", "status.quote_post_author": "S'ha citat una publicació de @{name}", "status.quote_private": "No es poden citar les publicacions privades", + "status.quotes": "{count, plural, one {cita} other {cites}}", + "status.quotes.empty": "Encara no ha citat aquesta publicació ningú. Quan ho faci algú apareixerà aquí.", "status.read_more": "Més informació", "status.reblog": "Impulsa", + "status.reblog_or_quote": "Impuls or cita", "status.reblog_private": "Impulsa amb la visibilitat original", "status.reblogged_by": "impulsat per {name}", "status.reblogs": "{count, plural, one {impuls} other {impulsos}}", @@ -905,6 +913,7 @@ "status.reply": "Respon", "status.replyAll": "Respon al fil", "status.report": "Denuncia @{name}", + "status.request_quote": "Petició per a citar", "status.revoke_quote": "Elimina la meva publicació de la de @{name}", "status.sensitive_warning": "Contingut sensible", "status.share": "Comparteix", @@ -968,12 +977,15 @@ "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 mencions privades fetes a Mastondon.", "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 publicacions fetes a Mastodon 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": "Només jo", "visibility_modal.quote_public": "Qualsevol", "visibility_modal.save": "Desa" } diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 8880382901e..a6793ec5706 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -870,6 +870,7 @@ "status.continued_thread": "Pokračuje ve vlákně", "status.copy": "Zkopírovat odkaz na příspěvek", "status.delete": "Smazat", + "status.delete.success": "Příspěvek byl smazán", "status.detailed_status": "Podrobné zobrazení konverzace", "status.direct": "Soukromě zmínit @{name}", "status.direct_indicator": "Soukromá zmínka", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 505e37d02dd..263656f85b0 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -483,6 +483,7 @@ "keyboard_shortcuts.home": "Agor ffrwd gartref", "keyboard_shortcuts.hotkey": "Bysell boeth", "keyboard_shortcuts.legend": "Dangos yr allwedd hon", + "keyboard_shortcuts.load_more": "Canolbwyntio ar y botwm \"Llwytho rhagor\"", "keyboard_shortcuts.local": "Agor ffrwd lleol", "keyboard_shortcuts.mention": "Crybwyll yr awdur", "keyboard_shortcuts.muted": "Agor rhestr defnyddwyr rydych wedi'u tewi", @@ -491,6 +492,7 @@ "keyboard_shortcuts.open_media": "Agor cyfryngau", "keyboard_shortcuts.pinned": "Agor rhestr postiadau wedi'u pinio", "keyboard_shortcuts.profile": "Agor proffil yr awdur", + "keyboard_shortcuts.quote": "Dyfynnu postiad", "keyboard_shortcuts.reply": "Ateb postiad", "keyboard_shortcuts.requests": "Agor rhestr ceisiadau dilyn", "keyboard_shortcuts.search": "Ffocysu ar y bar chwilio", @@ -619,6 +621,7 @@ "notification.moderation_warning.action_suspend": "Mae eich cyfrif wedi'i atal.", "notification.own_poll": "Mae eich pleidlais wedi dod i ben", "notification.poll": "Mae arolwg rydych wedi pleidleisio ynddo wedi dod i ben", + "notification.quoted_update": "Golygodd {name} bostiad rydych chi wedi'i ddyfynnu", "notification.reblog": "Hybodd {name} eich post", "notification.reblog.name_and_others_with_link": "Mae {name} a {count, plural, one {# arall} other {# arall}} wedi hybu eich postiad", "notification.relationships_severance_event": "Wedi colli cysylltiad â {name}", @@ -738,11 +741,18 @@ "privacy.private.short": "Dilynwyr", "privacy.public.long": "Unrhyw un ar ac oddi ar Mastodon", "privacy.public.short": "Cyhoeddus", + "privacy.quote.anyone": "{visibility}, gall unrhyw un ddyfynnu", + "privacy.quote.disabled": "{visibility}, dyfyniadau wedi'u hanalluogi", + "privacy.quote.limited": "{visibility}, dyfyniadau wedi'u cyfyngu", "privacy.unlisted.additional": "Mae hwn yn ymddwyn yn union fel y cyhoeddus, ac eithrio na fydd y postiad yn ymddangos mewn ffrydiau byw neu hashnodau, archwilio, neu chwiliad Mastodon, hyd yn oed os ydych wedi eich cynnwys ar draws y cyfrif.", "privacy.unlisted.long": "Llai o ddathliadau algorithmig", "privacy.unlisted.short": "Tewi'r cyhoeddus", "privacy_policy.last_updated": "Diweddarwyd ddiwethaf ar {date}", "privacy_policy.title": "Polisi Preifatrwydd", + "quote_error.poll": "Dyw dyfynnu ddim yn cael ei ganiatáu gyda pholau.", + "quote_error.quote": "Dim ond un dyfyniad ar y tro sy'n cael ei ganiatáu.", + "quote_error.unauthorized": "Does gennych chi ddim awdurdod i ddyfynnu'r postiad hwn.", + "quote_error.upload": "Dyw dyfynnu ddim yn cael ei ganiatáu gydag atodiadau cyfryngau.", "recommended": "Argymhellwyd", "refresh": "Adnewyddu", "regeneration_indicator.please_stand_by": "Arhoswch am dipyn.", @@ -849,15 +859,18 @@ "status.admin_account": "Agor rhyngwyneb cymedroli @{name}", "status.admin_domain": "Agor rhyngwyneb cymedroli {domain}", "status.admin_status": "Agor y postiad hwn yn y rhyngwyneb cymedroli", + "status.all_disabled": "Mae hybu a dyfynnu wedi'u hanalluogi", "status.block": "Rhwystro @{name}", "status.bookmark": "Nod tudalen", "status.cancel_reblog_private": "Dadhybu", + "status.cannot_quote": "Mae'r awdur wedi analluogi dyfynnu ar y postiad hwn", "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", + "status.delete.success": "Postiad wedi'i ddileu", "status.detailed_status": "Golwg manwl o'r sgwrs", "status.direct": "Crybwyll yn breifat @{name}", "status.direct_indicator": "Crybwyll preifat", @@ -880,15 +893,22 @@ "status.mute_conversation": "Anwybyddu sgwrs", "status.open": "Ehangu'r post hwn", "status.pin": "Pinio ar y proffil", + "status.quote": "Dyfynnu", + "status.quote.cancel": "Diddymu'r dyfyniad", "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_followers_only": "Dim ond dilynwyr all ddyfynnu'r postiad hwn", + "status.quote_manual_review": "Bydd yr awdur yn ei adolygu ei hyn", "status.quote_policy_change": "Newid pwy all ddyfynnu", "status.quote_post_author": "Wedi dyfynnu postiad gan @{name}", + "status.quote_private": "Does dim modd dyfynnu postiadau preifat", + "status.quotes.empty": "Does neb wedi dyfynnu'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, bydd yn ymddangos yma.", "status.read_more": "Darllen rhagor", "status.reblog": "Hybu", + "status.reblog_or_quote": "Hybu neu ddyfynnu", "status.reblog_private": "Hybu i'r gynulleidfa wreiddiol", "status.reblogged_by": "Hybodd {name}", "status.reblogs": "{count, plural, one {# hwb} other {# hwb}}", @@ -901,6 +921,7 @@ "status.reply": "Ymateb", "status.replyAll": "Ateb edefyn", "status.report": "Adrodd ar @{name}", + "status.request_quote": "Gofyn i gael dyfynnu", "status.revoke_quote": "Dileu fy mhostiad o bostiad @{name}", "status.sensitive_warning": "Cynnwys sensitif", "status.share": "Rhannu", @@ -939,6 +960,7 @@ "upload_button.label": "Ychwanegwch delweddau, fideo neu ffeil sain", "upload_error.limit": "Wedi mynd heibio'r uchafswm llwytho.", "upload_error.poll": "Does dim modd llwytho ffeiliau â phleidleisiau.", + "upload_error.quote": "Does dim hawl llwytho i fyny gyda dyfyniadau.", "upload_form.drag_and_drop.instructions": "I godi atodiad cyfryngau, pwyswch y space neu enter. Wrth lusgo, defnyddiwch y bysellau saeth i symud yr atodiad cyfryngau i unrhyw gyfeiriad penodol. Pwyswch space neu enter eto i ollwng yr atodiad cyfryngau yn ei safle newydd, neu pwyswch escape i ddiddymu.", "upload_form.drag_and_drop.on_drag_cancel": "Cafodd llusgo ei ddiddymu. Cafodd atodi cyfryngau {item} ei ollwng.", "upload_form.drag_and_drop.on_drag_end": "Cafodd atodiad cyfryngau {item} ei ollwng.", @@ -964,11 +986,15 @@ "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 ysgrifennwyd ar Mastodon.", "visibility_modal.helper.privacy_editing": "Does dim modd newid gwelededd postiadau wedi'u cyhoeddi.", + "visibility_modal.helper.private_quoting": "Does dim modd dyfynnu crybwylliadau preifat ysgrifennwyd gan ddilynwyr.", "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_public": "Pawb" + "visibility_modal.quote_nobody": "Dim ond fi", + "visibility_modal.quote_public": "Pawb", + "visibility_modal.save": "Cadw" } diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 98d853b5796..f3ce189e978 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -492,7 +492,7 @@ "keyboard_shortcuts.open_media": "Åbn medier", "keyboard_shortcuts.pinned": "Åbn liste over fastgjorte indlæg", "keyboard_shortcuts.profile": "Åbn forfatters profil", - "keyboard_shortcuts.quote": "Citer indlæg", + "keyboard_shortcuts.quote": "Citér indlæg", "keyboard_shortcuts.reply": "Besvar indlægget", "keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger", "keyboard_shortcuts.search": "Fokusér søgebjælke", @@ -621,7 +621,7 @@ "notification.moderation_warning.action_suspend": "Din konto er suspenderet.", "notification.own_poll": "Din afstemning er afsluttet", "notification.poll": "En afstemning, hvori du har stemt, er slut", - "notification.quoted_update": "{name} redigerede et indlæg, man har citeret", + "notification.quoted_update": "{name} redigerede et indlæg, du har citeret", "notification.reblog": "{name} fremhævede dit indlæg", "notification.reblog.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} fremhævede dit indlæg", "notification.relationships_severance_event": "Mistede forbindelser med {name}", @@ -751,7 +751,7 @@ "privacy_policy.title": "Privatlivspolitik", "quote_error.poll": "Citering ikke tilladt i afstemninger.", "quote_error.quote": "Kun ét citat ad gangen er tilladt.", - "quote_error.unauthorized": "Man har ikke tilladelse til at citere dette indlæg.", + "quote_error.unauthorized": "Du har ikke tilladelse til at citere dette indlæg.", "quote_error.upload": "Citering ikke tilladt ved medievedhæftninger.", "recommended": "Anbefalet", "refresh": "Genindlæs", @@ -870,6 +870,7 @@ "status.continued_thread": "Fortsat tråd", "status.copy": "Kopiér link til indlæg", "status.delete": "Slet", + "status.delete.success": "Indlæg slettet", "status.detailed_status": "Detaljeret samtalevisning", "status.direct": "Nævn @{name} privat", "status.direct_indicator": "Privat omtale", @@ -905,10 +906,10 @@ "status.quote_post_author": "Citerede et indlæg fra @{name}", "status.quote_private": "Private indlæg kan ikke citeres", "status.quotes": "{count, plural, one {citat} other {citater}}", - "status.quotes.empty": "Ingen har citeret dette indlæg endnu. Når nogen gør det, vil det blive vist her.", + "status.quotes.empty": "Ingen har citeret dette indlæg endnu. Når det sker, vil det fremgå her.", "status.read_more": "Læs mere", "status.reblog": "Fremhæv", - "status.reblog_or_quote": "Fremhæv eller citer", + "status.reblog_or_quote": "Fremhæv eller citér", "status.reblog_private": "Fremhæv med oprindelig synlighed", "status.reblogged_by": "{name} fremhævede", "status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}", @@ -921,7 +922,7 @@ "status.reply": "Besvar", "status.replyAll": "Svar alle", "status.report": "Anmeld @{name}", - "status.request_quote": "Anmod om tilladelse til at citere", + "status.request_quote": "Anmod om citeringsmulighed", "status.revoke_quote": "Fjern eget indlæg fra @{name}s indlæg", "status.sensitive_warning": "Følsomt indhold", "status.share": "Del", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2d43e05857e..675f49f6701 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -870,6 +870,7 @@ "status.continued_thread": "Fortgeführter Thread", "status.copy": "Link zum Beitrag kopieren", "status.delete": "Beitrag löschen", + "status.delete.success": "Beitrag gelöscht", "status.detailed_status": "Detaillierte Ansicht der Unterhaltung", "status.direct": "@{name} privat erwähnen", "status.direct_indicator": "Private Erwähnung", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 6e52da01cd0..d2e474082ac 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -991,10 +991,10 @@ "visibility_modal.helper.privacy_editing": "Published posts cannot change their visibility.", "visibility_modal.helper.private_quoting": "Follower-only posts authored on Mastodon can't be quoted by others.", "visibility_modal.helper.unlisted_quoting": "When people quote you, their post will also be hidden from trending timelines.", - "visibility_modal.instructions": "Control who can interact with this post. Global settings can be found under Preferences > Other.", - "visibility_modal.privacy_label": "Privacy", + "visibility_modal.instructions": "Control who can interact with this post. You can also apply settings to all future posts by navigating to Preferences > Posting defaults.", + "visibility_modal.privacy_label": "Visibility", "visibility_modal.quote_followers": "Followers only", - "visibility_modal.quote_label": "Change who can quote", + "visibility_modal.quote_label": "Who can quote", "visibility_modal.quote_nobody": "Just me", "visibility_modal.quote_public": "Anyone", "visibility_modal.save": "Save" diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 70d5c70433a..36da8c9527b 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -324,7 +324,7 @@ "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.", "empty_column.explore_statuses": "Praegu pole ühtegi trendi. Tule hiljem tagasi!", "empty_column.favourited_statuses": "Pole veel lemmikpostitusi. Kui märgid mõne, näed neid siin.", - "empty_column.favourites": "Keegi pole veel seda postitust lemmikuks märkinud. Kui keegi seda teeb, näed seda siin.", + "empty_column.favourites": "Keegi pole veel seda postitust lemmikuks märkinud. Kui keegi seda teeb, siis on ta nähtav siin.", "empty_column.follow_requests": "Pole hetkel ühtegi jälgimistaotlust. Kui saad mõne, näed neid siin.", "empty_column.followed_tags": "Sa ei jälgi veel ühtegi märksõna. Kui jälgid, ilmuvad need siia.", "empty_column.hashtag": "Selle sildi all ei ole ühtegi postitust.", @@ -492,6 +492,7 @@ "keyboard_shortcuts.open_media": "Ava meedia", "keyboard_shortcuts.pinned": "Ava kinnitatud postituste loetelu", "keyboard_shortcuts.profile": "Ava autori profiil", + "keyboard_shortcuts.quote": "Tsiteeri postitust", "keyboard_shortcuts.reply": "Vasta postitusele", "keyboard_shortcuts.requests": "Ava jälgimistaotluste loetelu", "keyboard_shortcuts.search": "Fookus otsingule", @@ -869,6 +870,7 @@ "status.continued_thread": "Jätkatud lõim", "status.copy": "Kopeeri postituse link", "status.delete": "Kustuta", + "status.delete.success": "Postitus on kustutatud", "status.detailed_status": "Detailne vestluskuva", "status.direct": "Maini privaatselt @{name}", "status.direct_indicator": "Privaatne mainimine", @@ -898,16 +900,20 @@ "status.quote_error.pending_approval": "Postitus on ootel", "status.quote_error.pending_approval_popout.body": "Kuna erinevates serverites on erinevad reeglid, siis üle Födiversumi jagatud tsitaatide kuvamine võib võtta aega.", "status.quote_error.pending_approval_popout.title": "Tsiteerimine on ootel? Palun jää rahulikuks", + "status.quote_followers_only": "Vaid jälgijad saavad seda postitust tsiteerida", + "status.quote_manual_review": "Autor vaatab selle üle", "status.quote_policy_change": "Muuda neid, kes võivad tsiteerida", "status.quote_post_author": "Tsiteeris kasutaja @{name} postitust", "status.quote_private": "Otsepostituste tsiteerimine pole võimalik", "status.quotes": "{count, plural, one {# tsiteerimine} other {# tsiteerimist}}", + "status.quotes.empty": "Keegi pole seda postitust veel tsiteerinud. Kui keegi seda teeb, siis on ta nähtav siin.", "status.read_more": "Loe veel", "status.reblog": "Jaga", + "status.reblog_or_quote": "Anna hoogu või tsiteeri", "status.reblog_private": "Jaga algse nähtavusega", "status.reblogged_by": "{name} jagas", "status.reblogs": "{count, plural, one {jagamine} other {jagamist}}", - "status.reblogs.empty": "Keegi pole seda postitust veel jaganud. Kui keegi seda teeb, näeb seda siin.", + "status.reblogs.empty": "Keegi pole seda postitust veel jaganud. Kui keegi seda teeb, siis on ta nähtav siin.", "status.redraft": "Kustuta & alga uuesti", "status.remove_bookmark": "Eemalda järjehoidja", "status.remove_favourite": "Eemalda lemmikute seast", @@ -916,6 +922,7 @@ "status.reply": "Vasta", "status.replyAll": "Vasta lõimele", "status.report": "Raporteeri @{name}", + "status.request_quote": "Küsi võimalust tsiteerida", "status.revoke_quote": "Eemalda minu tsitaat postituses, mille tegi @{name}", "status.sensitive_warning": "Tundlik sisu", "status.share": "Jaga", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 5ea5b1a9ed1..6fa8a40ad27 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -870,6 +870,7 @@ "status.continued_thread": "Framhaldandi tráður", "status.copy": "Kopiera leinki til postin", "status.delete": "Strika", + "status.delete.success": "Postur strikaður", "status.detailed_status": "Útgreinað samrøðusýni", "status.direct": "Umrøð @{name} privat", "status.direct_indicator": "Privat umrøða", @@ -905,6 +906,7 @@ "status.quote_post_author": "Siteraði ein post hjá @{name}", "status.quote_private": "Privatir postar kunnu ikki siterast", "status.quotes": "{count, plural, one {sitat} other {sitat}}", + "status.quotes.empty": "Eingin hevur siterað hendan postin enn. Tá onkur siterar postin, verður hann sjónligur her.", "status.read_more": "Les meira", "status.reblog": "Stimbra", "status.reblog_or_quote": "Stimbra ella sitera", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 63fc11c6c16..6342d2ab833 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -492,6 +492,7 @@ "keyboard_shortcuts.open_media": "Oscail meáin", "keyboard_shortcuts.pinned": "Oscail liosta postálacha pinn", "keyboard_shortcuts.profile": "Oscail próifíl an t-údar", + "keyboard_shortcuts.quote": "Postáil luachana", "keyboard_shortcuts.reply": "Freagair ar phostáil", "keyboard_shortcuts.requests": "Oscail liosta iarratas leanúnaí", "keyboard_shortcuts.search": "Díriú ar an mbosca cuardaigh", @@ -869,6 +870,7 @@ "status.continued_thread": "Snáithe ar lean", "status.copy": "Cóipeáil an nasc chuig an bpostáil", "status.delete": "Scrios", + "status.delete.success": "Scriosadh an post", "status.detailed_status": "Amharc comhrá mionsonraithe", "status.direct": "Luaigh @{name} go príobháideach", "status.direct_indicator": "Lua príobháideach", @@ -907,6 +909,7 @@ "status.quotes.empty": "Níl an post seo luaite ag aon duine go fóill. Nuair a dhéanann duine é, taispeánfar anseo é.", "status.read_more": "Léan a thuilleadh", "status.reblog": "Treisiú", + "status.reblog_or_quote": "Borradh nó luachan", "status.reblog_private": "Mol le léargas bunúsach", "status.reblogged_by": "Mhol {name}", "status.reblogs": "{count, plural, one {buaic} other {buaic}}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a960843f8f1..e7bff58b1bf 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -870,6 +870,7 @@ "status.continued_thread": "שרשור מתמשך", "status.copy": "העתק/י קישור להודעה זו", "status.delete": "מחיקה", + "status.delete.success": "ההודעה נמחקה", "status.detailed_status": "תצוגת שיחה מפורטת", "status.direct": "הודעה פרטית אל @{name}", "status.direct_indicator": "הודעה פרטית", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index cd059594bee..0c88381cedc 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.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": "활동", @@ -491,6 +492,7 @@ "keyboard_shortcuts.open_media": "미디어 열기", "keyboard_shortcuts.pinned": "고정 게시물 리스트 열기", "keyboard_shortcuts.profile": "작성자의 프로필 열기", + "keyboard_shortcuts.quote": "게시물 인용", "keyboard_shortcuts.reply": "게시물에 답장", "keyboard_shortcuts.requests": "팔로우 요청 리스트 열기", "keyboard_shortcuts.search": "검색창에 포커스", @@ -619,6 +621,7 @@ "notification.moderation_warning.action_suspend": "계정이 정지되었습니다.", "notification.own_poll": "설문을 마침", "notification.poll": "참여한 투표가 끝났습니다", + "notification.quoted_update": "{name} 님이 내가 인용한 게시물을 수정했습니다", "notification.reblog": "{name} 님이 부스트했습니다", "notification.reblog.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 부스트했습니다", "notification.relationships_severance_event": "{name} 님과의 연결이 끊어졌습니다", @@ -746,7 +749,10 @@ "privacy.unlisted.short": "조용한 공개", "privacy_policy.last_updated": "{date}에 마지막으로 업데이트됨", "privacy_policy.title": "개인정보처리방침", + "quote_error.poll": "인용과 투표를 함께 사용할 수 없습니다.", + "quote_error.quote": "한 번의 인용만 허용됩니다.", "quote_error.unauthorized": "이 글을 인용할 권한이 없습니다.", + "quote_error.upload": "인용과 미디어 첨부를 함께 사용할 수 없습니다.", "recommended": "추천함", "refresh": "새로고침", "regeneration_indicator.please_stand_by": "잠시 기다려주세요.", @@ -864,6 +870,7 @@ "status.continued_thread": "이어지는 글타래", "status.copy": "게시물 링크 복사", "status.delete": "삭제", + "status.delete.success": "게시물 삭제됨", "status.detailed_status": "대화 자세히 보기", "status.direct": "@{name} 님에게 개인적으로 멘션", "status.direct_indicator": "개인적인 멘션", @@ -891,9 +898,16 @@ "status.quote_error.filtered": "필터에 의해 가려짐", "status.quote_error.not_available": "게시물 사용 불가", "status.quote_error.pending_approval": "게시물 대기중", + "status.quote_followers_only": "팔로워만 이 게시물을 인용할 수 있습니다", + "status.quote_manual_review": "작성자가 직접 검토합니다", + "status.quote_policy_change": "누가 인용할 수 있는지", "status.quote_post_author": "인용된 @{name} 님의 게시물", + "status.quote_private": "비공개 게시물은 인용할 수 없습니다", + "status.quotes": "{count, plural, other {#}} 인용", + "status.quotes.empty": "아직 아무도 이 게시물을 인용하지 않았습니다. 누군가 인용한다면 여기에 표시됩니다.", "status.read_more": "더 보기", "status.reblog": "부스트", + "status.reblog_or_quote": "부스트 또는 인용", "status.reblog_private": "원래의 수신자들에게 부스트", "status.reblogged_by": "{name} 님이 부스트했습니다", "status.reblogs": "{count, plural, other {부스트}}", @@ -906,6 +920,7 @@ "status.reply": "답장", "status.replyAll": "글타래에 답장", "status.report": "@{name} 신고하기", + "status.request_quote": "인용 요청", "status.revoke_quote": "내 게시물을 @{name}의 게시물에서 삭제", "status.sensitive_warning": "민감한 내용", "status.share": "공유", @@ -944,6 +959,7 @@ "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없습니다.", + "upload_error.quote": "파일 업로드는 인용과 함께 쓸 수 없습니다.", "upload_form.drag_and_drop.instructions": "미디어 첨부파일을 집으려면 스페이스나 엔터를 누르세요. 드래그 하는 동안 방향키를 이용해 원하는 방향으로 이동할 수 있습니다. 스페이스나 엔터를 다시 눌러 새 위치에 놓거나 ESC를 이용해 취소할 수 있습니다.", "upload_form.drag_and_drop.on_drag_cancel": "드래그가 취소되었습니다. 미디어 첨부파일 {item}은 이동되지 않았습니다.", "upload_form.drag_and_drop.on_drag_end": "미디어 첨부파일 {item}은 이동되지 않았습니다.", @@ -968,8 +984,12 @@ "video.volume_down": "음량 감소", "video.volume_up": "음량 증가", "visibility_modal.button_title": "공개범위 설정", + "visibility_modal.header": "공개범위와 반응", + "visibility_modal.helper.privacy_editing": "발행된 게시물은 공개설정을 바꿀 수 없습니다.", + "visibility_modal.helper.unlisted_quoting": "사람들이 나를 인용한 경우 그 게시물 또한 유행에서 제외됩니다.", + "visibility_modal.instructions": "누가 이 게시물에 반응할 수 있는지 제어하세요. 전체 설정은 설정 > 기타에 있습니다.", "visibility_modal.privacy_label": "공개범위", - "visibility_modal.quote_followers": "팔로워 전용", + "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 319a3001e3c..3e05ee037b4 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -492,6 +492,7 @@ "keyboard_shortcuts.open_media": "Phah開媒體", "keyboard_shortcuts.pinned": "Phah開釘起來ê PO文列單", "keyboard_shortcuts.profile": "Phah開作者ê個人資料", + "keyboard_shortcuts.quote": "引用PO文", "keyboard_shortcuts.reply": "回應PO文", "keyboard_shortcuts.requests": "Phah開跟tuè請求ê列單", "keyboard_shortcuts.search": "揀tshiau-tshuē條á", @@ -620,6 +621,7 @@ "notification.moderation_warning.action_suspend": "Lí ê口座ê權限已經停止ah。", "notification.own_poll": "Lí ê投票結束ah", "notification.poll": "Lí bat投ê投票結束ah", + "notification.quoted_update": "{name} 編輯lí有引用ê PO文", "notification.reblog": "{name} 轉送lí ê PO文", "notification.reblog.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}轉送lí ê PO文", "notification.relationships_severance_event": "Kap {name} ê結連無去", @@ -744,7 +746,7 @@ "privacy.quote.limited": "{visibility},PO文引用受限", "privacy.unlisted.additional": "Tse ê行為kap公開相siâng,m̄-koh 就算lí佇口座設定phah開有關ê公開功能,PO文mā bē顯示佇即時ê動態、hashtag、探索kap Mastodon ê搜尋結果。", "privacy.unlisted.long": "減少演算法ê宣傳", - "privacy.unlisted.short": "恬靜ê公開", + "privacy.unlisted.short": "恬靜公開", "privacy_policy.last_updated": "上尾更新tī:{date}", "privacy_policy.title": "隱私權政策", "quote_error.poll": "有投票ê PO文bē當引用。", @@ -868,6 +870,7 @@ "status.continued_thread": "接續ê討論線", "status.copy": "Khóo-pih PO文ê連結", "status.delete": "Thâi掉", + "status.delete.success": "PO文thâi掉ah", "status.detailed_status": "對話ê詳細", "status.direct": "私人提起 @{name}", "status.direct_indicator": "私人ê提起", @@ -896,11 +899,16 @@ "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_followers_only": "Kan-ta tuè我ê ē當引用PO文", + "status.quote_manual_review": "作者ē hōo lâng人工審核", "status.quote_policy_change": "改通引用ê lâng", "status.quote_post_author": "引用 @{name} ê PO文ah", "status.quote_private": "私人PO文bē當引用", + "status.quotes": "{count, plural, other {# 篇引用ê PO文}}", + "status.quotes.empty": "Iáu無lâng引用tsit篇PO文。Nā是有lâng引用,ē佇tsia顯示。.", "status.read_more": "讀詳細", "status.reblog": "轉送", + "status.reblog_or_quote": "轉送á是引用", "status.reblog_private": "照原PO ê通看見ê範圍轉送", "status.reblogged_by": "{name} kā轉送ah", "status.reblogs": "{count, plural, other {# ê 轉送}}", @@ -913,6 +921,7 @@ "status.reply": "回應", "status.replyAll": "應討論線", "status.report": "檢舉 @{name}", + "status.request_quote": "要求引用PO文", "status.revoke_quote": "Kā 我ê PO文tuì @{name} ê thâi掉", "status.sensitive_warning": "敏感ê內容", "status.share": "分享", @@ -976,12 +985,15 @@ "video.volume_up": "變khah大聲", "visibility_modal.button_title": "設定通看ê程度", "visibility_modal.header": "通看ê程度kap互動", + "visibility_modal.helper.direct_quoting": "Mastodon頂發布ê私人提起bē當hōo別lâng引用。", "visibility_modal.helper.privacy_editing": "公開ê PO文bē當改in通看ê程度。", + "visibility_modal.helper.private_quoting": "Mastodon頂發布ê kan-ta跟tuè ê通看ê PO文,bē當hōo別lâng引用。", "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": "Kan-ta我", "visibility_modal.quote_public": "Ta̍k ê lâng", "visibility_modal.save": "儲存" } diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index f038021138a..c5ace43ddcc 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -858,6 +858,7 @@ "status.continued_thread": "Fortsatt tråd", "status.copy": "Kopiera inläggslänk", "status.delete": "Radera", + "status.delete.success": "Inlägg borttaget", "status.detailed_status": "Detaljerad samtalsvy", "status.direct": "Omnämn @{name} privat", "status.direct_indicator": "Privat omnämnande", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index c66c7a71b09..6c5f3bb91e4 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -492,6 +492,7 @@ "keyboard_shortcuts.open_media": "Medyayı açmak için", "keyboard_shortcuts.pinned": "Sabitlenmiş gönderilerin listesini aç", "keyboard_shortcuts.profile": "Yazanın profilini açmak için", + "keyboard_shortcuts.quote": "Gönderiyi alıntıla", "keyboard_shortcuts.reply": "gönderiyi yanıtla", "keyboard_shortcuts.requests": "Takip istekleri listesini açmak için", "keyboard_shortcuts.search": "Aramaya odaklanmak için", @@ -869,6 +870,7 @@ "status.continued_thread": "Devam eden akış", "status.copy": "Gönderi bağlantısını kopyala", "status.delete": "Sil", + "status.delete.success": "Gönderi silindi", "status.detailed_status": "Ayrıntılı sohbet görünümü", "status.direct": "@{name} kullanıcısına özelden değin", "status.direct_indicator": "Özel değinme", @@ -907,6 +909,7 @@ "status.quotes.empty": "Henüz hiç kimse bu gönderiyi alıntılamadı. Herhangi bir kullanıcı alıntıladığında burada görüntülenecek.", "status.read_more": "Devamını okuyun", "status.reblog": "Yeniden paylaş", + "status.reblog_or_quote": "Yükselt veya alıntıla", "status.reblog_private": "Özgün görünürlük ile yeniden paylaş", "status.reblogged_by": "{name} yeniden paylaştı", "status.reblogs": "{count, plural, one {yeniden paylaşım} other {yeniden paylaşım}}", diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index e39f43f7d49..5008a0bbb7e 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -15,45 +15,6 @@ recommended: true, wrapper: :with_label - %h4= t 'preferences.posting_defaults' - - .fields-group - = ff.input :default_privacy, - collection: Status.selectable_visibilities, - selected: current_user.setting_default_privacy, - hint: false, - include_blank: false, - label_method: ->(visibility) { safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, - label: I18n.t('simple_form.labels.defaults.setting_default_privacy'), - required: false, - wrapper: :with_label - - .fields-group - = ff.input :default_quote_policy, - collection: %w(public followers nobody), - include_blank: false, - label_method: ->(policy) { I18n.t("statuses.quote_policies.#{policy}") }, - label: I18n.t('simple_form.labels.defaults.setting_default_quote_policy'), - hint: I18n.t('simple_form.hints.defaults.setting_default_quote_policy'), - required: false, - wrapper: :with_label - - .fields-group - = ff.input :default_language, - collection: [nil] + filterable_languages, - hint: false, - include_blank: false, - label_method: ->(locale) { locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, - label: I18n.t('simple_form.labels.defaults.setting_default_language'), - required: false, - wrapper: :with_label - - .fields-group - = ff.input :default_sensitive, - hint: I18n.t('simple_form.hints.defaults.setting_default_sensitive'), - label: I18n.t('simple_form.labels.defaults.setting_default_sensitive'), - wrapper: :with_label - %h4= t 'preferences.public_timelines' .fields-group diff --git a/app/views/settings/preferences/posting_defaults/show.html.haml b/app/views/settings/preferences/posting_defaults/show.html.haml new file mode 100644 index 00000000000..4d5905208a7 --- /dev/null +++ b/app/views/settings/preferences/posting_defaults/show.html.haml @@ -0,0 +1,48 @@ +- content_for :page_title do + = t('preferences.posting_defaults') + +- content_for :heading_actions do + = button_tag t('generic.save_changes'), class: 'button', form: 'edit_preferences' + += simple_form_for current_user, url: settings_preferences_posting_defaults_path, html: { id: :edit_preferences } do |f| + = render 'shared/error_messages', object: current_user + + = f.simple_fields_for :settings, current_user.settings do |ff| + .flash-message= t('posting_defaults.explanation') + + .fields-group + = ff.input :default_privacy, + collection: Status.selectable_visibilities, + selected: current_user.setting_default_privacy, + hint: false, + include_blank: false, + label_method: ->(visibility) { safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, + label: I18n.t('simple_form.labels.defaults.setting_default_privacy'), + required: false, + wrapper: :with_label + + .fields-group + = ff.input :default_quote_policy, + collection: %w(public followers nobody), + include_blank: false, + label_method: ->(policy) { I18n.t("statuses.quote_policies.#{policy}") }, + label: I18n.t('simple_form.labels.defaults.setting_default_quote_policy'), + hint: I18n.t('simple_form.hints.defaults.setting_default_quote_policy'), + required: false, + wrapper: :with_label + + .fields-group + = ff.input :default_language, + collection: [nil] + filterable_languages, + hint: false, + include_blank: false, + label_method: ->(locale) { locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, + label: I18n.t('simple_form.labels.defaults.setting_default_language'), + required: false, + wrapper: :with_label + + .fields-group + = ff.input :default_sensitive, + hint: I18n.t('simple_form.hints.defaults.setting_default_sensitive'), + label: I18n.t('simple_form.labels.defaults.setting_default_sensitive'), + wrapper: :with_label diff --git a/app/views/severed_relationships/_download.html.haml b/app/views/severed_relationships/_download.html.haml new file mode 100644 index 00000000000..b1eb76c920c --- /dev/null +++ b/app/views/severed_relationships/_download.html.haml @@ -0,0 +1,6 @@ +-# locals(count:, link:) + +- if count.zero? + = t('generic.none') +- else + = table_link_to 'download', t('severed_relationships.download', count:), link diff --git a/app/views/severed_relationships/_event.html.haml b/app/views/severed_relationships/_event.html.haml new file mode 100644 index 00000000000..adc7752cb96 --- /dev/null +++ b/app/views/severed_relationships/_event.html.haml @@ -0,0 +1,14 @@ +-# locals(event:) + +%tr + %td + %time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) } + = l(event.created_at) + %td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name) + - if event.purged? + %td{ rowspan: 2 }= t('severed_relationships.purged') + - else + %td + = render 'download', count: event.following_count, link: following_severed_relationship_path(event, format: :csv) + %td + = render 'download', count: event.followers_count, link: followers_severed_relationship_path(event, format: :csv) diff --git a/app/views/severed_relationships/index.html.haml b/app/views/severed_relationships/index.html.haml index cc9439b4681..d4ce658ca3d 100644 --- a/app/views/severed_relationships/index.html.haml +++ b/app/views/severed_relationships/index.html.haml @@ -13,24 +13,4 @@ %th= t('severed_relationships.lost_follows') %th= t('severed_relationships.lost_followers') %tbody - - @events.each do |event| - %tr - %td - %time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) } - = l(event.created_at) - %td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name) - - if event.purged? - %td{ rowspan: 2 }= t('severed_relationships.purged') - - else - %td - - count = event.following_count - - if count.zero? - = t('generic.none') - - else - = table_link_to 'download', t('severed_relationships.download', count: count), following_severed_relationship_path(event, format: :csv) - %td - - count = event.followers_count - - if count.zero? - = t('generic.none') - - else - = table_link_to 'download', t('severed_relationships.download', count: count), followers_severed_relationship_path(event, format: :csv) + = render partial: 'event', collection: @events diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 0089796d8b3..34f9074db14 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -361,6 +361,7 @@ ca: title: Emojis personalitzats uncategorized: Sense categoria unlist: No llistat + unlisted: Públic silenciós update_failed_msg: No s'ha pogut actualitzar aquest emoji updated_msg: Emoji s'ha actualitzat correctament! upload: Carrega @@ -1880,13 +1881,19 @@ ca: limit: Ja has fixat el màxim nombre de tuts ownership: No es pot fixar el tut d'algú altre reblog: No es pot fixar un impuls + quote_policies: + followers: Només seguidors + nobody: Només jo + public: Qualsevol title: '%{name}: "%{quote}"' visibilities: direct: Menció privada private: Només seguidors private_long: Mostra només als seguidors public: Públic + public_long: Tothom dins o fora Mastodon unlisted: No llistat + unlisted_long: Amagat dels resultats de cerca de Mastodon, de les tendències i de les línies temporals statuses_cleanup: enabled: Esborra automàticament tuts antics enabled_hint: Suprimeix automàticament els teus tuts quan arribin a un llindar d’edat especificat, tret que coincideixin amb una de les excepcions següents diff --git a/config/locales/da.yml b/config/locales/da.yml index bbd1209233c..44241b1e1e5 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -418,7 +418,7 @@ da: remove_all_data: Dette vil fjerne alt indhold, medier og profildata for dette domænes konti fra din server. stop_communication: Din server vil stoppe kommunikationen med disse servere. title: Bekræft blokering af domænet %{domain} - undo_relationships: Dette vil fortryde ethvert følgeforhold mellem konti for disse servere og din. + undo_relationships: Dette vil ophæve ethvert følgeforhold mellem konti på disse servere og dine. created_msg: Domæneblokering under behandling destroyed_msg: Domæneblokering er blevet fjernet domain: Domæne diff --git a/config/locales/en.yml b/config/locales/en.yml index 014ec44863b..b657932d802 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1740,6 +1740,8 @@ en: self_vote: You cannot vote in your own polls too_few_options: must have more than one item too_many_options: can't contain more than %{max} items + posting_defaults: + explanation: These settings will be used as defaults when you create new posts, but you can edit them per post within the composer. preferences: other: Other posting_defaults: Posting defaults diff --git a/config/locales/fo.yml b/config/locales/fo.yml index c50b168a677..450c649315d 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1914,6 +1914,7 @@ fo: public: Ein og hvør title: '%{name}: "%{quote}"' visibilities: + direct: Privat umrøða private: Einans fylgjarar private_long: Vís einans fyri fylgjarum public: Alment @@ -1964,6 +1965,11 @@ fo: does_not_match_previous_name: samsvarar ikki við undanfarna navnið terms_of_service: title: Tænastutreytir + terms_of_service_interstitial: + future_preamble_html: Vit gera broytingar í tænastutreytunum, sum fáa virknað frá %{date}. Vit eggja tær til at eftirkanna dagførdu treytirnar. + past_preamble_html: Vit hava broytt tænastutreytirnar síðani tú seinast vitjaði. Vit eggja tær til at eftirkanna dagførdu treytirnar. + review_link: Eftirkanna tænastutreytir + title: Tænastutreytirnar á %{domain} verða broyttar themes: contrast: Mastodon (høgur kontrastur) default: Mastodon (myrkt) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index e72ec3506d3..e4f1493c351 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -364,6 +364,7 @@ ko: title: 커스텀 에모지 uncategorized: 분류되지 않음 unlist: 목록에서 제거 + unlisted: 조용한 공개 update_failed_msg: 에모지를 업데이트 할 수 없습니다 updated_msg: 성공적으로 에모지를 업데이트했습니다! upload: 업로드 @@ -1866,13 +1867,19 @@ ko: limit: 이미 너무 많은 게시물을 고정했습니다 ownership: 다른 사람의 게시물은 고정될 수 없습니다 reblog: 부스트는 고정될 수 없습니다 + quote_policies: + followers: 팔로워만 + nobody: 나만 + public: 누구나 title: '%{name}: "%{quote}"' visibilities: direct: 개인 멘션 private: 비공개 private_long: 팔로워에게만 공개됩니다 public: 공개 + public_long: 마스토돈 내외 모두 unlisted: 미등재 + unlisted_long: 마스토돈 검색결과, 유행, 공개 타임라인에서 숨기기 statuses_cleanup: enabled: 오래된 게시물 자동 삭제 enabled_hint: 아래의 예외 목록에 해당하지 않는다면, 명시된 기한 이후 당신의 게시물을 자동으로 삭제합니다 diff --git a/config/locales/nan.yml b/config/locales/nan.yml index c479cc135d6..334f8c31a26 100644 --- a/config/locales/nan.yml +++ b/config/locales/nan.yml @@ -364,6 +364,7 @@ nan: title: 自訂emoji uncategorized: Iáu無分類 unlist: Tuì列單the̍h掉 + unlisted: 恬靜公開 update_failed_msg: Bē當更新hit ê emoji updated_msg: Emoji成功更新ah! upload: 傳上去 @@ -799,6 +800,29 @@ nan: about: manage_rules: 管理服侍器ê規則 preamble: 提供關係服侍器án-nuá運作kap管理,以及資金源頭ê詳細資訊。 + rules_hint: Tse是關係lí ê用者應該遵守ê規則ê專區。 + title: 關係本站 + allow_referrer_origin: + desc: Nā是lí ê用者點連結kàu外部網站,in ê瀏覽器可能ē kā lí ê Mastodon服侍器ê地址當做流量ê來源送出。如果tse ē唯一區別lí ê用者,比如tse是個人ê Mastodon服侍器,請kā停止使用。 + title: 允准外部網站kā lí ê Mastodon服侍器當做流量ê來源 + appearance: + preamble: 自訂Mastodon網頁ê界面。 + title: 外觀 + branding: + preamble: Lí ê服侍器品牌hōo伊kap別ê服侍器區別。Tsit ê資訊可能展示佇無kâng ê環境,比如Mastodon ê網頁界面、原底ê app、佇別站ê sing看連結ê所在kap佇通信app內底等。因為tsit ê緣故,上好kā資訊保持kah清楚、短koh簡要。 + title: 品牌 + captcha_enabled: + desc_html: Tsit ê功能需要tuì hCaptcha來ê外部kha本,可能有安全kap隱私ê顧慮。另外,tse ē明顯降kē tsi̍t寡lâng(特別是障礙者)註冊ê容易程度。因為tsiah ê緣故,請考慮別ê替代方案,比如審核制á是邀請制ê註冊。 + title: 要求新ê用者解決CAPTCHA問題,來確認in ê口座 + content_retention: + danger_zone: 危險ê所在 + preamble: 控制使用者產生ê內容tiông佇Mastodon ê方法。 + title: 內容保存期間 + default_noindex: + desc_html: 影響逐ê iáu buē改變tsit ê設定ê用者 + title: 預設kā用者tuì tshiau-tshuē ia̋n-jín ê索引排除 + discovery: + follow_recommendations: 跟tuè建議 statuses: language: 語言 trends: diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 35f64599e10..d9a2dbe32fd 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -231,6 +231,7 @@ ca: setting_auto_play_gif: Reprodueix automàticament els GIF animats setting_boost_modal: Mostra la finestra de confirmació abans d'impulsar setting_default_language: Llengua dels tuts + setting_default_privacy: Visibilitat de la publicació setting_default_quote_policy: Qui pot citar setting_default_sensitive: Marcar sempre el contingut gràfic com a sensible setting_delete_modal: Mostra la finestra de confirmació abans d'esborrar un tut diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index a5d552b8bb2..7aeea4b6107 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -234,6 +234,7 @@ ko: setting_auto_play_gif: 애니메이션 GIF를 자동 재생 setting_boost_modal: 부스트 전 확인창을 띄웁니다 setting_default_language: 게시물 언어 + setting_default_privacy: 게시물 공개 범위 setting_default_quote_policy: 인용할 수 있는 사람 setting_default_sensitive: 미디어를 언제나 민감한 콘텐츠로 설정 setting_delete_modal: 게시물 삭제 전 확인창을 띄웁니다 diff --git a/config/navigation.rb b/config/navigation.rb index a8f686fd8b1..4829f9efd2d 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -16,6 +16,7 @@ SimpleNavigation::Configuration.run do |navigation| n.item :preferences, safe_join([material_symbol('settings'), t('settings.preferences')]), settings_preferences_path, if: -> { current_user.functional? && !self_destruct } do |s| s.item :appearance, safe_join([material_symbol('computer'), t('settings.appearance')]), settings_preferences_appearance_path + s.item :posting_defaults, safe_join([material_symbol('edit_square'), t('preferences.posting_defaults')]), settings_preferences_posting_defaults_path s.item :notifications, safe_join([material_symbol('mail'), t('settings.notifications')]), settings_preferences_notifications_path s.item :other, safe_join([material_symbol('tune'), t('preferences.other')]), settings_preferences_other_path end diff --git a/config/routes/settings.rb b/config/routes/settings.rb index cefa24316db..f5869a767c2 100644 --- a/config/routes/settings.rb +++ b/config/routes/settings.rb @@ -9,6 +9,7 @@ namespace :settings do namespace :preferences do resource :appearance, only: [:show, :update], controller: :appearance + resource :posting_defaults, only: [:show, :update], controller: :posting_defaults resource :notifications, only: [:show, :update] resource :other, only: [:show, :update], controller: :other end diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb index f1f40c99ce3..ea6b508c6fe 100644 --- a/lib/mastodon/cli/ip_blocks.rb +++ b/lib/mastodon/cli/ip_blocks.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'rubygems/package' require_relative 'base' module Mastodon::CLI diff --git a/spec/models/relay_spec.rb b/spec/models/relay_spec.rb index 4b95c596e45..9c917e2d2e0 100644 --- a/spec/models/relay_spec.rb +++ b/spec/models/relay_spec.rb @@ -8,4 +8,95 @@ RSpec.describe Relay do it { is_expected.to normalize(:inbox_url).from(' http://host.example ').to('http://host.example') } end end + + describe 'Validations' do + it { is_expected.to validate_presence_of(:inbox_url) } + it { is_expected.to validate_uniqueness_of(:inbox_url) } + end + + describe 'Enumerations' do + it { is_expected.to define_enum_for(:state) } + end + + describe 'Scopes' do + describe 'enabled' do + let!(:accepted_relay) { Fabricate :relay, state: :accepted } + let!(:pending_relay) { Fabricate :relay, state: :pending } + + it 'returns records in accepted state' do + expect(described_class.enabled) + .to include(accepted_relay) + .and not_include(pending_relay) + end + end + end + + describe 'Callbacks' do + describe 'Ensure disabled on destroy' do + before { stub_delivery_worker } + + context 'when relay is enabled' do + let(:relay) { Fabricate :relay, state: :accepted } + + it 'sends undo when destroying the record' do + relay.destroy! + + expect(ActivityPub::DeliveryWorker) + .to have_received(:perform_async).with(match('Undo'), Account.representative.id, relay.inbox_url) + end + end + + context 'when relay is not enabled' do + let(:relay) { Fabricate :relay, state: :pending } + + it 'sends undo when destroying the record' do + relay.destroy! + + expect(ActivityPub::DeliveryWorker) + .to_not have_received(:perform_async) + end + end + end + end + + describe '#to_log_human_identifier' do + subject { relay.to_log_human_identifier } + + let(:relay) { Fabricate.build :relay, inbox_url: } + let(:inbox_url) { 'https://host.example' } + + it { is_expected.to eq(inbox_url) } + end + + describe '#disable' do + let(:relay) { Fabricate :relay, state: :accepted, follow_activity_id: 'https://host.example/123' } + + before { stub_delivery_worker } + + it 'changes state to idle and removes the activity id' do + expect { relay.disable! } + .to change { relay.reload.state }.to('idle') + .and change { relay.reload.follow_activity_id }.to(be_nil) + expect(ActivityPub::DeliveryWorker) + .to have_received(:perform_async).with(match('Undo'), Account.representative.id, relay.inbox_url) + end + end + + describe '#enable' do + let(:relay) { Fabricate :relay, state: :idle, follow_activity_id: '' } + + before { stub_delivery_worker } + + it 'changes state to pending and populates the activity id' do + expect { relay.enable! } + .to change { relay.reload.state }.to('pending') + .and change { relay.reload.follow_activity_id }.to(be_present) + expect(ActivityPub::DeliveryWorker) + .to have_received(:perform_async).with(match('Follow'), Account.representative.id, relay.inbox_url) + end + end + + def stub_delivery_worker + allow(ActivityPub::DeliveryWorker).to receive(:perform_async) + end end diff --git a/spec/system/settings/preferences/other_spec.rb b/spec/system/settings/preferences/other_spec.rb index d741ec1ad2d..762233b9e5a 100644 --- a/spec/system/settings/preferences/other_spec.rb +++ b/spec/system/settings/preferences/other_spec.rb @@ -15,11 +15,9 @@ RSpec.describe 'Settings preferences other page' do check language_field(:es) check language_field(:fr) - check mark_sensitive_field expect { save_changes } .to change { user.reload.chosen_languages }.to(%w(es fr)) - .and(change { user.reload.settings.default_sensitive }.to(true)) expect(page) .to have_title(I18n.t('settings.preferences')) end @@ -28,10 +26,6 @@ RSpec.describe 'Settings preferences other page' do within('form') { click_on submit_button } end - def mark_sensitive_field - form_label('defaults.setting_default_sensitive') - end - def language_field(key) LanguagesHelper::SUPPORTED_LOCALES[key].last end diff --git a/spec/system/settings/preferences/posting_defaults_spec.rb b/spec/system/settings/preferences/posting_defaults_spec.rb new file mode 100644 index 00000000000..583958f96b3 --- /dev/null +++ b/spec/system/settings/preferences/posting_defaults_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings preferences posting defaults page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + it 'Views and updates user prefs' do + visit settings_preferences_posting_defaults_path + + expect(page) + .to have_private_cache_control + + check mark_sensitive_field + + expect { save_changes } + .to change { user.reload.settings.default_sensitive }.to(true) + expect(page) + .to have_title(I18n.t('preferences.posting_defaults')) + end + + def save_changes + click_on submit_button + end + + def mark_sensitive_field + form_label('defaults.setting_default_sensitive') + end +end