);
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 881ed19e0e..fd44b3952b 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -297,8 +297,8 @@
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
"filter_modal.select_filter.title": "Filter this post",
"filter_modal.title.status": "Filter a post",
+ "filtered_notifications_banner.mentions": "{count, plural, one {mention} other {mentions}}",
"filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know",
- "filtered_notifications_banner.private_mentions": "{count, plural, one {private mention} other {private mentions}}",
"filtered_notifications_banner.title": "Filtered notifications",
"firehose.all": "All",
"firehose.local": "This server",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index bc57c4cee5..529c1ab9c9 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -408,7 +408,7 @@
"lightbox.previous": "Aurrekoa",
"limited_account_hint.action": "Erakutsi profila hala ere",
"limited_account_hint.title": "Profil hau ezkutatu egin dute {domain} zerbitzariko moderatzaileek.",
- "link_preview.author": "{name}(r)en eskutik",
+ "link_preview.author": "Egilea: {name}",
"lists.account.add": "Gehitu zerrendara",
"lists.account.remove": "Kendu zerrendatik",
"lists.delete": "Ezabatu zerrenda",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index ace3d41e04..18fce401b2 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -534,7 +534,7 @@
"onboarding.actions.go_to_home": "Allers vers mon flux principal",
"onboarding.compose.template": "Bonjour #Mastodon !",
"onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer d'utiliser la recherche ou parcourir la page de découverte pour trouver des personnes à suivre, ou réessayez plus tard.",
- "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
+ "onboarding.follows.lead": "Votre flux principal est le principal moyen de découvrir Mastodon. Plus vous suivez de personnes, plus il sera actif et intéressant. Pour commencer, voici quelques suggestions :",
"onboarding.follows.title": "Personnaliser votre flux principal",
"onboarding.profile.discoverable": "Rendre mon profil découvrable",
"onboarding.profile.discoverable_hint": "Lorsque vous acceptez d'être découvert sur Mastodon, vos messages peuvent apparaître dans les résultats de recherche et les tendances, et votre profil peut être suggéré à des personnes ayant des intérêts similaires aux vôtres.",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index 97119e30c0..a22f4767a6 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -13,7 +13,7 @@
"about.rules": "Serverrigels",
"account.account_note_header": "Opmerking",
"account.add_or_remove_from_list": "Tafoegje oan of fuortsmite út listen",
- "account.badges.bot": "Bot",
+ "account.badges.bot": "Automatisearre",
"account.badges.group": "Groep",
"account.block": "@{name} blokkearje",
"account.block_domain": "Domein {domain} blokkearje",
@@ -89,6 +89,11 @@
"announcement.announcement": "Oankundiging",
"attachments_list.unprocessed": "(net ferwurke)",
"audio.hide": "Audio ferstopje",
+ "block_modal.show_less": "Minder toane",
+ "block_modal.show_more": "Mear toane",
+ "block_modal.they_cant_mention": "Sy kinne jo net fermelde of folgje.",
+ "block_modal.title": "Brûker blokkearje?",
+ "block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dy’t dizze account fermelde.",
"boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan",
"bundle_column_error.copy_stacktrace": "Flaterrapport kopiearje",
"bundle_column_error.error.body": "De opfrege side koe net werjûn wurde. It kin wêze troch in flater yn ús koade, of in probleem mei browserkompatibiliteit.",
@@ -169,6 +174,7 @@
"confirmations.delete_list.message": "Binne jo wis dat jo dizze list foar permanint fuortsmite wolle?",
"confirmations.discard_edit_media.confirm": "Fuortsmite",
"confirmations.discard_edit_media.message": "Jo hawwe net-bewarre wizigingen yn de mediabeskriuwing of foarfertoaning, wolle jo dizze dochs fuortsmite?",
+ "confirmations.domain_block.confirm": "Server blokkearje",
"confirmations.domain_block.message": "Binne jo echt wis dat jo alles fan {domain} negearje wolle? Yn de measte gefallen is it blokkearjen of negearjen fan in pear spesifike persoanen genôch en better. Jo sille gjin berjochten fan dizze server op iepenbiere tiidlinen sjen of yn jo meldingen. Jo folgers fan dizze server wurde fuortsmiten.",
"confirmations.edit.confirm": "Bewurkje",
"confirmations.edit.message": "Troch no te bewurkjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?",
@@ -200,6 +206,20 @@
"dismissable_banner.explore_statuses": "Dizze berjochten winne oan populariteit op dizze en oare servers binnen it desintrale netwurk. Nijere berjochten mei mear boosts en favoriten stean heger.",
"dismissable_banner.explore_tags": "Dizze hashtags winne oan populariteit op dizze en oare servers binnen it desintrale netwurk.",
"dismissable_banner.public_timeline": "Dit binne de meast resinte iepenbiere berjochten fan accounts op it sosjale web dy’t troch minsken op {domain} folge wurde.",
+ "domain_block_modal.block": "Server blokkearje",
+ "domain_block_modal.block_account_instead": "Yn stee hjirfan {name} blokkearje",
+ "domain_block_modal.they_can_interact_with_old_posts": "Minsken op dizze server kinne ynteraksje hawwe mei jo âlde berjochten.",
+ "domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.",
+ "domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.",
+ "domain_block_modal.title": "Domein blokkearje?",
+ "domain_block_modal.you_will_lose_followers": "Al jo folgers fan dizze server wurde ûntfolge.",
+ "domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.",
+ "domain_pill.server": "Server",
+ "domain_pill.their_handle": "Harren fediverse-adres:",
+ "domain_pill.their_server": "Harren digitale thús, wer’t al harren berjochten binne.",
+ "domain_pill.username": "Brûkersnamme",
+ "domain_pill.whats_in_a_handle": "Wat is in fediverse-adres?",
+ "domain_pill.your_handle": "Jo fediverse-adres:",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Sa komt it der út te sjen:",
"emoji_button.activity": "Aktiviteiten",
@@ -266,6 +286,7 @@
"filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje",
"filter_modal.select_filter.title": "Dit berjocht filterje",
"filter_modal.title.status": "In berjocht filterje",
+ "filtered_notifications_banner.title": "Filtere meldingen",
"firehose.all": "Alles",
"firehose.local": "Dizze server",
"firehose.remote": "Oare servers",
@@ -394,6 +415,9 @@
"loading_indicator.label": "Lade…",
"media_gallery.toggle_visible": "{number, plural, one {ôfbylding ferstopje} other {ôfbyldingen ferstopje}}",
"moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.",
+ "mute_modal.hide_options": "Opsjes ferstopje",
+ "mute_modal.indefinite": "Oant ik se net mear negearje",
+ "mute_modal.show_options": "Opsjes toane",
"navigation_bar.about": "Oer",
"navigation_bar.advanced_interface": "Yn avansearre webomjouwing iepenje",
"navigation_bar.blocks": "Blokkearre brûkers",
@@ -429,14 +453,20 @@
"notification.own_poll": "Jo poll is beëinige",
"notification.poll": "In enkête dêr’t jo yn stimd hawwe is beëinige",
"notification.reblog": "{name} hat jo berjocht boost",
+ "notification.relationships_severance_event.learn_more": "Mear ynfo",
"notification.status": "{name} hat in berjocht pleatst",
"notification.update": "{name} hat in berjocht bewurke",
+ "notification_requests.accept": "Akseptearje",
+ "notification_requests.dismiss": "Ofwize",
+ "notification_requests.notifications_from": "Meldingen fan {name}",
+ "notification_requests.title": "Filtere meldingen",
"notifications.clear": "Meldingen wiskje",
"notifications.clear_confirmation": "Binne jo wis dat jo al jo meldingen permanint fuortsmite wolle?",
"notifications.column_settings.admin.report": "Nije rapportaazjes:",
"notifications.column_settings.admin.sign_up": "Nije registraasjes:",
"notifications.column_settings.alert": "Desktopmeldingen",
"notifications.column_settings.favourite": "Favoriten:",
+ "notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane",
"notifications.column_settings.follow": "Nije folgers:",
"notifications.column_settings.follow_request": "Nij folchfersyk:",
"notifications.column_settings.mention": "Fermeldingen:",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index 428abb8c5a..af28f9ce37 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -9,15 +9,18 @@
"about.domain_blocks.suspended.explanation": "Nulle datos de iste servitor essera processate, immagazinate o excambiate, rendente omne interaction o communication con usatores de iste servitor impossibile.",
"about.domain_blocks.suspended.title": "Suspendite",
"about.not_available": "Iste information non ha essite rendite disponibile sur iste servitor.",
+ "about.powered_by": "Rete social decentralisate, actionate per {mastodon}",
"about.rules": "Regulas del servitor",
"account.account_note_header": "Nota",
"account.add_or_remove_from_list": "Adder a, o remover de listas",
+ "account.badges.bot": "Automatisate",
"account.badges.group": "Gruppo",
"account.block": "Blocar @{name}",
"account.block_domain": "Blocar dominio {domain}",
"account.block_short": "Blocar",
"account.blocked": "Blocate",
"account.browse_more_on_origin_server": "Navigar plus sur le profilo original",
+ "account.cancel_follow_request": "Cancellar sequimento",
"account.copy": "Copiar ligamine a profilo",
"account.direct": "Mentionar privatemente @{name}",
"account.disable_notifications": "Non plus notificar me quando @{name} publica",
@@ -26,7 +29,7 @@
"account.enable_notifications": "Notificar me quando @{name} publica",
"account.endorse": "Evidentiar sur le profilo",
"account.featured_tags.last_status_at": "Ultime message publicate le {date}",
- "account.featured_tags.last_status_never": "Necun messages",
+ "account.featured_tags.last_status_never": "Necun message",
"account.featured_tags.title": "Hashtags eminente de {name}",
"account.follow": "Sequer",
"account.follow_back": "Sequer in retorno",
@@ -34,9 +37,10 @@
"account.followers.empty": "Necuno seque ancora iste usator.",
"account.followers_counter": "{count, plural, one {{counter} sequitor} other {{counter} sequitores}}",
"account.following": "Sequente",
+ "account.following_counter": "{count, plural, one {{counter} sequite} other {{counter} sequites}}",
"account.follows.empty": "Iste usator non seque ancora alcuno.",
"account.go_to_profile": "Vader al profilo",
- "account.hide_reblogs": "Celar boosts de @{name}",
+ "account.hide_reblogs": "Celar impulsos de @{name}",
"account.in_memoriam": "In memoriam.",
"account.languages": "Cambiar le linguas subscribite",
"account.link_verified_on": "Le proprietate de iste ligamine ha essite verificate le {date}",
@@ -74,9 +78,13 @@
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
"announcement.announcement": "Annuncio",
"audio.hide": "Celar audio",
+ "block_modal.remote_users_caveat": "Nos demandera al servitor {domain} de respectar tu decision. Nonobstante, le conformitate non es garantite perque alcun servitores pote tractar le blocadas de maniera differente. Le messages public pote esser totevia visibile pro le usatores non authenticate.",
"block_modal.show_less": "Monstrar minus",
"block_modal.show_more": "Monstrar plus",
+ "block_modal.they_cant_see_posts": "Iste persona non potera vider tu messages e tu non videra le sues.",
"block_modal.title": "Blocar usator?",
+ "block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
+ "boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice",
"bundle_column_error.error.title": "Oh, no!",
"bundle_column_error.network.title": "Error de rete",
"bundle_column_error.retry": "Tentar novemente",
@@ -98,6 +106,7 @@
"column.lists": "Listas",
"column.mutes": "Usatores silentiate",
"column.notifications": "Notificationes",
+ "column.pins": "Messages fixate",
"column.public": "Chronologia federate",
"column_back_button.label": "Retro",
"column_header.hide_settings": "Celar le parametros",
@@ -113,6 +122,8 @@
"compose.published.open": "Aperir",
"compose.saved.body": "Message salvate.",
"compose_form.direct_message_warning_learn_more": "Apprender plus",
+ "compose_form.encryption_warning": "Le messages sur Mastodon non es cryptate de puncta a puncta. Non condivide alcun information sensibile usante Mastodon.",
+ "compose_form.hashtag_warning": "Iste message non essera listate sub alcun hashtag perque illo non es public. Solmente le messages public pote esser cercate per hashtag.",
"compose_form.lock_disclaimer": "Tu conto non es {locked}. Quicunque pote sequer te pro vider tu messages solo pro sequitores.",
"compose_form.lock_disclaimer.lock": "serrate",
"compose_form.poll.duration": "Durata del sondage",
@@ -142,6 +153,7 @@
"confirmations.logout.confirm": "Clauder session",
"confirmations.logout.message": "Es tu secur que tu vole clauder le session?",
"confirmations.mute.confirm": "Silentiar",
+ "confirmations.redraft.message": "Es tu secur de voler deler iste message e rescriber lo? Le favorites e le impulsos essera perdite, e le responsas al message original essera orphanate.",
"confirmations.reply.confirm": "Responder",
"confirmations.unfollow.confirm": "Non plus sequer",
"confirmations.unfollow.message": "Es tu secur que tu vole cessar de sequer {name}?",
@@ -158,16 +170,24 @@
"directory.recently_active": "Recentemente active",
"disabled_account_banner.account_settings": "Parametros de conto",
"disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.",
+ "dismissable_banner.community_timeline": "Ecce le messages public le plus recente del personas con contos sur {domain}.",
"dismissable_banner.dismiss": "Dimitter",
+ "dismissable_banner.explore_links": "Istes es le articulos de novas que se condivide le plus sur le rete social hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.",
+ "dismissable_banner.explore_statuses": "Ecce le messages de tote le rete social que gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.",
+ "dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le rete social que le gente sur {domain} seque.",
"domain_block_modal.block": "Blocar le servitor",
"domain_block_modal.block_account_instead": "Blocar @{name} in su loco",
+ "domain_block_modal.they_can_interact_with_old_posts": "Le personas de iste servitor pote interager con tu messages ancian.",
"domain_block_modal.they_cant_follow": "Nulle persona ab iste servitor pote sequer te.",
"domain_block_modal.they_wont_know": "Illes non sapera que illes ha essite blocate.",
"domain_block_modal.title": "Blocar dominio?",
"domain_block_modal.you_will_lose_followers": "Omne sequitores ab iste servitor essera removite.",
"domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes ab usatores sur iste servitor.",
"domain_pill.server": "Servitor",
+ "domain_pill.their_server": "Su casa digital, ubi vive tote su messages.",
"domain_pill.username": "Nomine de usator",
+ "domain_pill.your_server": "Tu casa digital, ubi vive tote tu messages. Non te place? Cambia de servitor a omne momento e porta tu sequitores con te.",
+ "embed.instructions": "Incorpora iste message sur tu sito web con le codice sequente.",
"embed.preview": "Ecce como illlo parera:",
"emoji_button.activity": "Activitate",
"emoji_button.clear": "Rader",
@@ -187,11 +207,15 @@
"empty_column.account_timeline": "Nulle messages hic!",
"empty_column.account_unavailable": "Profilo non disponibile",
"empty_column.blocks": "Tu non ha blocate alcun usator ancora.",
+ "empty_column.bookmarked_statuses": "Tu non ha ancora messages in marcapaginas. Quando tu adde un message al marcapaginas, illo apparera hic.",
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
"empty_column.explore_statuses": "Il non ha tendentias in iste momento. Reveni plus tarde!",
"empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.",
+ "empty_column.favourites": "Necuno ha ancora marcate iste message como favorite. Quando alcuno lo face, ille apparera hic.",
"empty_column.followed_tags": "Tu non ha ancora sequite alcun hashtags. Quando tu lo face, illos apparera hic.",
"empty_column.hashtag": "Il non ha ancora alcun cosa in iste hashtag.",
+ "empty_column.home": "Tu chronologia de initio es vacue! Seque plus personas pro plenar lo.",
+ "empty_column.list": "Iste lista es ancora vacue. Quando le membros de iste lista publica nove messages, illos apparera hic.",
"errors.unexpected_crash.report_issue": "Signalar un defecto",
"explore.search_results": "Resultatos de recerca",
"explore.suggested_follows": "Personas",
@@ -199,6 +223,7 @@
"explore.trending_links": "Novas",
"explore.trending_statuses": "Messages",
"explore.trending_tags": "Hashtags",
+ "filter_modal.added.context_mismatch_explanation": "Iste categoria de filtros non se applica al contexto in le qual tu ha accedite a iste message. Pro filtrar le message in iste contexto tamben, modifica le filtro.",
"filter_modal.added.review_and_configure_title": "Parametros de filtro",
"filter_modal.added.settings_link": "pagina de parametros",
"filter_modal.added.short_explanation": "Iste message ha essite addite al sequente categoria de filtros: {title}.",
@@ -231,6 +256,8 @@
"hashtag.column_header.tag_mode.none": "sin {additional}",
"hashtag.column_settings.select.no_options_message": "Nulle suggestiones trovate",
"hashtag.column_settings.select.placeholder": "Insere hashtags…",
+ "hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
+ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} hodie",
"hashtag.follow": "Sequer hashtag",
"hashtag.unfollow": "Non sequer plus le hashtag",
"hashtags.and_other": "…e {count, plural, one {}other {# plus}}",
@@ -241,10 +268,16 @@
"home.pending_critical_update.link": "Vider actualisationes",
"home.pending_critical_update.title": "Actualisation de securitate critic disponibile!",
"home.show_announcements": "Monstrar annuncios",
+ "interaction_modal.description.favourite": "Con un conto sur Mastodon, tu pote marcar iste message como favorite pro informar le autor que tu lo apprecia e salveguarda pro plus tarde.",
+ "interaction_modal.description.follow": "Con un conto sur Mastodon, tu pote sequer {name} e reciper su messages in tu fluxo de initio.",
+ "interaction_modal.description.reblog": "Con un conto sur Mastodon, tu pote impulsar iste message pro condivider lo con tu proprie sequitores.",
+ "interaction_modal.description.reply": "Con un conto sur Mastodon, tu pote responder a iste message.",
+ "interaction_modal.login.action": "Porta me a casa",
"interaction_modal.login.prompt": "Dominio de tu servitor, p.ex. mastodon.social",
"interaction_modal.no_account_yet": "Non sur Mstodon?",
"interaction_modal.on_another_server": "Sur un altere servitor",
"interaction_modal.on_this_server": "Sur iste servitor",
+ "interaction_modal.title.favourite": "Marcar le message de {name} como favorite",
"interaction_modal.title.follow": "Sequer {name}",
"interaction_modal.title.reblog": "Impulsar le message de {name}",
"interaction_modal.title.reply": "Responder al message de {name}",
@@ -264,6 +297,7 @@
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
"keyboard_shortcuts.notifications": "Aperir columna de notificationes",
"keyboard_shortcuts.open_media": "Aperir multimedia",
+ "keyboard_shortcuts.pinned": "Aperir le lista de messages fixate",
"keyboard_shortcuts.profile": "Aperir le profilo del autor",
"keyboard_shortcuts.reply": "Responder al message",
"keyboard_shortcuts.spoilers": "Monstrar/celar le campo CW",
@@ -294,7 +328,8 @@
"mute_modal.they_can_mention_and_follow": "Illes pote mentionar te e sequer te, ma tu non potera vider los.",
"mute_modal.they_wont_know": "Illes non sapera que illes ha essite silentiate.",
"mute_modal.title": "Silentiar le usator?",
- "mute_modal.you_wont_see_mentions": "Tu non videra messages que los mentiona.",
+ "mute_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
+ "mute_modal.you_wont_see_posts": "Iste persona pote totevia vider tu messages, ma tu non videra le sues.",
"navigation_bar.about": "A proposito",
"navigation_bar.advanced_interface": "Aperir in le interfacie web avantiate",
"navigation_bar.blocks": "Usatores blocate",
@@ -312,12 +347,16 @@
"navigation_bar.mutes": "Usatores silentiate",
"navigation_bar.opened_in_classic_interface": "Messages, contos e altere paginas specific es aperite per predefinition in le interfacie web classic.",
"navigation_bar.personal": "Personal",
+ "navigation_bar.pins": "Messages fixate",
"navigation_bar.preferences": "Preferentias",
"navigation_bar.public_timeline": "Chronologia federate",
"navigation_bar.search": "Cercar",
"navigation_bar.security": "Securitate",
+ "notification.favourite": "{name} ha marcate tu message como favorite",
"notification.own_poll": "Tu sondage ha finite",
+ "notification.reblog": "{name} ha impulsate tu message",
"notification.relationships_severance_event.learn_more": "Apprender plus",
+ "notification.status": "{name} ha justo ora publicate",
"notification.update": "{name} ha modificate un message",
"notification_requests.accept": "Acceptar",
"notification_requests.dismiss": "Dimitter",
@@ -332,11 +371,13 @@
"notifications.column_settings.mention": "Mentiones:",
"notifications.column_settings.poll": "Resultatos del sondage:",
"notifications.column_settings.push": "Notificationes push",
+ "notifications.column_settings.reblog": "Impulsos:",
"notifications.column_settings.show": "Monstrar in columna",
"notifications.column_settings.sound": "Reproducer sono",
"notifications.column_settings.status": "Nove messages:",
"notifications.column_settings.unread_notifications.category": "Notificationes non legite",
"notifications.filter.all": "Toto",
+ "notifications.filter.boosts": "Impulsos",
"notifications.filter.favourites": "Favoritos",
"notifications.filter.mentions": "Mentiones",
"notifications.filter.polls": "Resultatos del sondage",
@@ -346,38 +387,52 @@
"notifications.mark_as_read": "Marcar cata notification como legite",
"notifications.policy.filter_new_accounts_title": "Nove contos",
"notifications_permission_banner.enable": "Activar notificationes de scriptorio",
+ "onboarding.actions.go_to_home": "Porta me a mi fluxo de initio",
"onboarding.compose.template": "Salute #Mastodon!",
+ "onboarding.follows.lead": "Le fluxo de initio es le maniera principal de discoperir Mastodon. Quanto plus personas tu seque, tanto plus active e interessante illo essera. Pro comenciar, ecce alcun suggestiones:",
+ "onboarding.follows.title": "Personalisar tu fluxo de initio",
+ "onboarding.profile.discoverable_hint": "Quando tu opta pro devenir discoperibile sur Mastodon, tu messages pote apparer in resultatos de recerca e in tendentias, e tu profilo pote esser suggerite al personas con interesses simile al tues.",
"onboarding.profile.save_and_continue": "Salvar e continuar",
"onboarding.share.next_steps": "Sequente passos possibile:",
"onboarding.share.title": "Compartir tu profilo",
- "onboarding.steps.follow_people.title": "Personalisa tu fluxo de initio",
+ "onboarding.steps.follow_people.title": "Personalisar tu fluxo de initio",
"onboarding.steps.publish_status.title": "Face tu prime message",
+ "onboarding.steps.setup_profile.body": "Impulsa tu interactiones con un profilo comprehensive.",
"onboarding.steps.setup_profile.title": "Personalisa tu profilo",
"onboarding.steps.share_profile.title": "Compartir tu profilo de Mastodon",
"poll.closed": "Claudite",
"poll.reveal": "Vider le resultatos",
"privacy.change": "Cambiar le confidentialitate del message",
+ "privacy.direct.long": "Tote le personas mentionate in le message",
"privacy.public.short": "Public",
+ "privacy.unlisted.additional": "Isto es exactemente como public, excepte que le message non apparera in fluxos in directo, in hashtags, in Explorar, o in le recerca de Mastodon, mesmo si tu ha optate pro render tote le conto discoperibile.",
"privacy_policy.last_updated": "Ultime actualisation {date}",
"privacy_policy.title": "Politica de confidentialitate",
+ "regeneration_indicator.sublabel": "Tu fluxo de initio es in preparation!",
"relative_time.just_now": "ora",
"relative_time.today": "hodie",
"reply_indicator.cancel": "Cancellar",
"report.block": "Blocar",
+ "report.block_explanation": "Tu non videra le messages de iste persona. Ille non potera vider tu messages o sequer te. Ille potera saper de esser blocate.",
"report.categories.other": "Alteres",
"report.category.title_account": "profilo",
"report.category.title_status": "message",
"report.close": "Facite",
"report.mute": "Silentiar",
+ "report.mute_explanation": "Tu non videra le messages de iste persona. Ille pote totevia sequer te e vider tu messages e non sapera de esser silentiate.",
"report.next": "Sequente",
"report.placeholder": "Commentos additional",
"report.reasons.dislike": "Non me place",
+ "report.statuses.title": "Existe alcun messages que appoia iste reporto?",
+ "report.unfollow_explanation": "Tu seque iste conto. Pro non plus vider su messages in tu fluxo de initio, cessa de sequer lo.",
+ "report_notification.attached_statuses": "{count, plural, one {{count} message} other {{count} messages}} annexate",
"report_notification.categories.other": "Alteres",
"report_notification.open": "Aperir reporto",
"search.no_recent_searches": "Nulle recercas recente",
"search.quick_action.go_to_account": "Vader al profilo {x}",
"search.quick_action.go_to_hashtag": "Vader al hashtag {x}",
"search.quick_action.open_url": "Aperir URL in Mastodon",
+ "search.quick_action.status_search": "Messages correspondente a {x}",
"search_popout.full_text_search_disabled_message": "Non disponibile sur {domain}.",
"search_popout.language_code": "Codice de lingua ISO",
"search_popout.options": "Optiones de recerca",
@@ -393,7 +448,11 @@
"server_banner.server_stats": "Statos del servitor:",
"sign_in_banner.create_account": "Crear un conto",
"sign_in_banner.sign_in": "Aperir session",
+ "sign_in_banner.text": "Aperi session pro sequer profilos o hashtags, marcar messages como favorite, e condivider e responder a messages. Tu pote etiam interager desde tu conto sur un altere servitor.",
+ "status.admin_status": "Aperir iste message in le interfacie de moderation",
"status.block": "Blocar @{name}",
+ "status.cancel_reblog_private": "Disfacer impulso",
+ "status.cannot_reblog": "Iste message non pote esser impulsate",
"status.copy": "Copiar ligamine a message",
"status.delete": "Deler",
"status.direct": "Mentionar privatemente @{name}",
@@ -409,7 +468,13 @@
"status.media.show": "Clicca pro monstrar",
"status.more": "Plus",
"status.mute_conversation": "Silentiar conversation",
+ "status.open": "Expander iste message",
+ "status.pinned": "Message fixate",
"status.read_more": "Leger plus",
+ "status.reblog": "Impulsar",
+ "status.reblog_private": "Impulsar con visibilitate original",
+ "status.reblogged_by": "Impulsate per {name}",
+ "status.reblogs": "{count, plural, one {impulso} other {impulsos}}",
"status.reblogs.empty": "Necuno ha ancora impulsate iste message. Quando alcuno lo face, le impulsos apparera hic.",
"status.redraft": "Deler e reconciper",
"status.remove_bookmark": "Remover marcapagina",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 0d416be2aa..580af4f3da 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -83,12 +83,15 @@
"admin.impact_report.instance_follows": "Sekėjai, kuriuos prarastų jų naudotojai",
"admin.impact_report.title": "Poveikio apibendrinimas",
"alert.rate_limited.message": "Pabandyk vėliau po {retry_time, time, medium}.",
- "alert.rate_limited.title": "Sparta ribota",
+ "alert.rate_limited.title": "Sparta ribota.",
"alert.unexpected.message": "Įvyko netikėta klaida.",
"alert.unexpected.title": "Ups!",
"announcement.announcement": "Skelbimas",
"attachments_list.unprocessed": "(neapdorotas)",
"audio.hide": "Slėpti garsą",
+ "block_modal.remote_users_caveat": "Paprašysime serverio {domain} gerbti tavo sprendimą. Tačiau atitiktis negarantuojama, nes kai kurie serveriai gali skirtingai tvarkyti blokavimus. Vieši įrašai vis tiek gali būti matomi neprisijungusiems naudotojams.",
+ "block_modal.show_less": "Rodyti mažiau",
+ "block_modal.show_more": "Rodyti daugiau",
"boost_modal.combo": "Galima paspausti {combo}, kad praleisti kitą kartą.",
"bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą",
"bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 23960e9f86..1025c32048 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -225,8 +225,8 @@
"domain_pill.their_username": "Hun unieke identificatie-adres op hun server. Het is mogelijk dat er gebruikers met dezelfde gebruikersnaam op verschillende servers te vinden zijn.",
"domain_pill.username": "Gebruikersnaam",
"domain_pill.whats_in_a_handle": "Wat is een fediverse-adres?",
- "domain_pill.who_they_are": "Omdat je aan een fediverse-adres kunt zien wie iemand is en waar die zich bevindt, kun je met mensen op het door sociale web (fediverse) communiceren.",
- "domain_pill.who_you_are": "Omdat je aan jouw fediverse-adres kunt zien wie jij bent is en waar je je bevindt, kunnen mensen op het door sociale web (fediverse) met jou communiceren.",
+ "domain_pill.who_they_are": "Omdat je aan een fediverse-adres kunt zien hoe iemand heet en op welke server die zich bevindt, kun je met mensen op het door sociale web (fediverse) communiceren.",
+ "domain_pill.who_you_are": "Omdat je aan jouw fediverse-adres kunt zien hoe je heet en op welke server je je bevindt, kunnen mensen op het door sociale web (fediverse) met jou communiceren.",
"domain_pill.your_handle": "Jouw fediverse-adres:",
"domain_pill.your_server": "Jouw digitale thuis, waar al jouw berichten zich bevinden. Is deze server toch niet naar jouw wens? Dan kun je op elk moment naar een andere server verhuizen en ook jouw volgers overbrengen.",
"domain_pill.your_username": "Jouw unieke identificatie-adres op deze server. Het is mogelijk dat er gebruikers met dezelfde gebruikersnaam op verschillende servers te vinden zijn.",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index e09dd9067a..c693c24721 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -15,21 +15,32 @@
"account.cancel_follow_request": "ਫ਼ਾਲੋ ਕਰਨ ਨੂੰ ਰੱਦ ਕਰੋ",
"account.copy": "ਪਰੋਫਾਇਲ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
"account.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ @{name}",
+ "account.domain_blocked": "ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ",
"account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ",
+ "account.enable_notifications": "ਜਦੋਂ {name} ਪੋਸਟ ਕਰੇ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਦਿਓ",
+ "account.endorse": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਫ਼ੀਚਰ",
"account.featured_tags.last_status_at": "{date} ਨੂੰ ਆਖਰੀ ਪੋਸਟ",
"account.featured_tags.last_status_never": "ਕੋਈ ਪੋਸਟ ਨਹੀਂ",
"account.follow": "ਫ਼ਾਲੋ",
+ "account.follow_back": "ਵਾਪਸ ਫਾਲ਼ੋ ਕਰੋ",
"account.followers": "ਫ਼ਾਲੋਅਰ",
"account.followers.empty": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਾਲੇ ਕੋਈ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
+ "account.followers_counter": "{count, plural, one {{counter} ਫ਼ਾਲੋਅਰ} other {{counter} ਫ਼ਾਲੋਅਰ}}",
"account.following": "ਫ਼ਾਲੋ ਕੀਤਾ",
+ "account.following_counter": "{count, plural, one {{counter} ਨੂੰ ਫ਼ਾਲੋ} other {{counter} ਨੂੰ ਫ਼ਾਲੋ}}",
"account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
"account.go_to_profile": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਜਾਓ",
"account.media": "ਮੀਡੀਆ",
"account.muted": "ਮੌਨ ਕੀਤੀਆਂ",
+ "account.mutual": "ਸਾਂਝੇ",
+ "account.no_bio": "ਕੋਈ ਵਰਣਨ ਨਹੀਂ ਦਿੱਤਾ।",
+ "account.open_original_page": "ਅਸਲ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹੋ",
"account.posts": "ਪੋਸਟਾਂ",
"account.posts_with_replies": "ਪੋਸਤਾਂ ਅਤੇ ਜਵਾਬ",
+ "account.report": "{name} ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ",
"account.requested": "ਮਨਜ਼ੂਰੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
"account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ",
+ "account.share": "{name} ਦਾ ਪਰੋਫ਼ਾਇਲ ਸਾਂਝਾ ਕਰੋ",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
"account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
"account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
@@ -41,6 +52,9 @@
"admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ",
"alert.unexpected.title": "ਓਹੋ!",
"announcement.announcement": "ਹੋਕਾ",
+ "block_modal.show_less": "ਘੱਟ ਦਿਖਾਓ",
+ "block_modal.show_more": "ਵੱਧ ਦਿਖਾਓ",
+ "block_modal.title": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਹੈ?",
"bundle_column_error.error.title": "ਓਹ ਹੋ!",
"bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ",
"bundle_column_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 7ff98ba53b..16c4d19985 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -514,6 +514,7 @@
"notifications.permission_denied": "Уведомления на рабочем столе недоступны, так как вы запретили их отправку в браузере. Проверьте настройки для сайта, чтобы включить их обратно.",
"notifications.permission_denied_alert": "Уведомления на рабочем столе недоступны, так как вы ранее отклонили запрос на их отправку.",
"notifications.permission_required": "Чтобы включить уведомления на рабочем столе, необходимо разрешить их в браузере.",
+ "notifications.policy.filter_new_accounts_title": "Новые учётные записи",
"notifications_permission_banner.enable": "Включить уведомления",
"notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.",
"notifications_permission_banner.title": "Будьте в курсе происходящего",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 4a7c224395..952ed5adf5 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -16,12 +16,12 @@
"account.badges.bot": "อัตโนมัติ",
"account.badges.group": "กลุ่ม",
"account.block": "ปิดกั้น @{name}",
- "account.block_domain": "เลิกปิดกั้นโดเมน {domain} แล้ว",
+ "account.block_domain": "ปิดกั้นโดเมน {domain}",
"account.block_short": "ปิดกั้น",
"account.blocked": "ปิดกั้นอยู่",
"account.browse_more_on_origin_server": "เรียกดูเพิ่มเติมในโปรไฟล์ดั้งเดิม",
"account.cancel_follow_request": "ยกเลิกการติดตาม",
- "account.copy": "Copy link to profile",
+ "account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์",
"account.direct": "กล่าวถึง @{name} แบบส่วนตัว",
"account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์",
"account.domain_blocked": "ปิดกั้นโดเมนอยู่",
diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json
index c3f184e15d..80d412a20b 100644
--- a/app/javascript/mastodon/locales/tok.json
+++ b/app/javascript/mastodon/locales/tok.json
@@ -36,6 +36,7 @@
"account.go_to_profile": "o tawa lipu jan",
"account.hide_reblogs": "o lukin ala e pana toki tan @{name}",
"account.in_memoriam": "jan ni li moli. pona o tawa ona.",
+ "account.joined_short": "li kama",
"account.languages": "sina wile lukin e sitelen pi toki seme",
"account.locked_info": "sina wile kute e jan ni la ona o toki e ken",
"account.media": "sitelen",
@@ -70,6 +71,10 @@
"alert.unexpected.title": "pakala a!",
"announcement.announcement": "toki suli",
"audio.hide": "o len e kalama",
+ "block_modal.show_less": "o lili e lukin",
+ "block_modal.show_more": "o mute e lukin",
+ "block_modal.they_cant_mention": "ona li ken ala toki e sina li ken ala alasa e sina",
+ "block_modal.title": "o weka ala weka e jan",
"boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama",
"bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina",
"bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.",
@@ -86,10 +91,15 @@
"column.about": "sona",
"column.blocks": "kulupu pi jan weka",
"column.bookmarks": "awen toki",
+ "column.community": "linja tenpo pi ma ni",
+ "column.favourites": "ijo pona",
+ "column.firehose": "toki pi tenpo ni",
+ "column.follow_requests": "wile alasa pi jan ante",
"column.home": "lipu open",
"column.lists": "kulupu lipu",
"column.mutes": "jan len",
"column.pins": "toki sewi",
+ "column_back_button.label": "o tawa monsi",
"column_header.hide_settings": "o len e lawa",
"column_header.pin": "o sewi",
"column_header.show_settings": "o lukin e lawa",
@@ -157,6 +167,9 @@
"dismissable_banner.explore_statuses": "suni ni la jan mute li lukin e toki ni. jan mute li wawa e toki li suli e toki la toki ni li lon sewi. toki li sin la toki ni li lon sewi.",
"dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.",
"dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.",
+ "domain_block_modal.block": "o weka e ma",
+ "domain_block_modal.you_will_lose_followers": "ma ni la jan alasa ale sina li weka",
+ "domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
"embed.preview": "ni li jo e sitelen ni:",
"emoji_button.activity": "musi",
"emoji_button.flags": "len ma",
@@ -232,7 +245,7 @@
"keyboard_shortcuts.boost": "o pana sin e toki",
"keyboard_shortcuts.down": "o tawa anpa lon lipu",
"keyboard_shortcuts.enter": "o lukin e toki",
- "keyboard_shortcuts.favourite": "o suli e toki",
+ "keyboard_shortcuts.favourite": "o sitelen pona e toki",
"keyboard_shortcuts.favourites": "o lukin e lipu sina pi toki suli",
"keyboard_shortcuts.muted": "o lukin e lipu sina pi jan len",
"keyboard_shortcuts.my_profile": "o lukin e lipu sina",
@@ -264,7 +277,7 @@
"navigation_bar.about": "sona",
"navigation_bar.blocks": "jan weka",
"navigation_bar.compose": "o pali e toki sin",
- "navigation_bar.favourites": "toki suli",
+ "navigation_bar.favourites": "ijo pona",
"navigation_bar.filters": "nimi len",
"navigation_bar.lists": "kulupu lipu",
"navigation_bar.mutes": "sina wile ala kute e jan ni",
@@ -273,7 +286,7 @@
"navigation_bar.search": "o alasa",
"notification.admin.report": "jan {name} li toki e jan {target} tawa lawa",
"notification.admin.sign_up": "{name} li kama",
- "notification.favourite": "{name} li suli e toki sina",
+ "notification.favourite": "toki sina li pona tawa {name}",
"notification.follow": " {name} li kute e sina",
"notification.follow_request": "{name} li wile kute e sina",
"notification.mention": "jan {name} li toki e sina",
@@ -281,11 +294,13 @@
"notification.reblog": "{name} li wawa e toki sina",
"notification.status": "{name} li toki",
"notification.update": "{name} li ante e toki",
+ "notifications.column_settings.favourite": "ijo pona:",
"notifications.column_settings.follow": "jan kute sin",
"notifications.column_settings.poll": "pana lon pana ni:",
"notifications.column_settings.reblog": "wawa:",
"notifications.column_settings.update": "ante toki:",
"notifications.filter.all": "ale",
+ "notifications.filter.favourites": "ijo pona",
"notifications.filter.polls": "pana lon pana ni",
"onboarding.compose.template": "toki a, #Mastodon o!",
"onboarding.profile.display_name": "nimi tawa jan ante",
@@ -333,7 +348,7 @@
"status.delete": "o weka",
"status.edit": "o ante",
"status.embed": "ni o lon insa pi lipu ante",
- "status.favourite": "o suli",
+ "status.favourite": "o sitelen pona",
"status.hide": "o len",
"status.history.created": "{name} li pali e ni lon {date}",
"status.history.edited": "{name} li ante lon {date}",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 97c0f58238..9324fb2ee0 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -7863,8 +7863,13 @@ noscript {
}
}
- @container account-header (max-width: 372px) {
- .optional {
+ .optional {
+ @container account-header (max-width: 372px) {
+ display: none;
+ }
+
+ // Fallback for older browsers with no container queries support
+ @media screen and (max-width: 372px + 55px) {
display: none;
}
}
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index 0dcab0a675..e4801b53a9 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -134,7 +134,7 @@ class FeedManager
def merge_into_home(from_account, into_account)
timeline_key = key(:home, into_account.id)
aggregate = into_account.user&.aggregates_reblogs?
- query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
+ query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
@@ -160,7 +160,7 @@ class FeedManager
def merge_into_list(from_account, list)
timeline_key = key(:list, list.id)
aggregate = list.account.user&.aggregates_reblogs?
- query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
+ query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
@@ -299,7 +299,7 @@ class FeedManager
next if last_status_score < oldest_home_score
end
- statuses = target_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit)
+ statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit)
crutches = build_crutches(account.id, statuses)
statuses.each do |status|
diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb
index 7c148e877f..2d8f5b6cba 100644
--- a/app/models/custom_filter.rb
+++ b/app/models/custom_filter.rb
@@ -42,6 +42,7 @@ class CustomFilter < ApplicationRecord
validate :context_must_be_valid
normalizes :context, with: ->(context) { context.map(&:strip).filter_map(&:presence) }
+ scope :unexpired, -> { where(expires_at: nil).or where.not(expires_at: ..Time.zone.now) }
before_save :prepare_cache_invalidation!
before_destroy :prepare_cache_invalidation!
@@ -66,14 +67,16 @@ class CustomFilter < ApplicationRecord
active_filters = Rails.cache.fetch("filters:v3:#{account_id}") do
filters_hash = {}
- scope = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()'))
+ scope = CustomFilterKeyword.left_outer_joins(:custom_filter).merge(unexpired.where(account_id: account_id))
+
scope.to_a.group_by(&:custom_filter).each do |filter, keywords|
keywords.map!(&:to_regex)
filters_hash[filter.id] = { keywords: Regexp.union(keywords), filter: filter }
end.to_h
- scope = CustomFilterStatus.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()'))
+ scope = CustomFilterStatus.left_outer_joins(:custom_filter).merge(unexpired.where(account_id: account_id))
+
scope.to_a.group_by(&:custom_filter).each do |filter, statuses|
filters_hash[filter.id] ||= { filter: filter }
filters_hash[filter.id].merge!(status_ids: statuses.map(&:status_id))
diff --git a/app/models/status.rb b/app/models/status.rb
index a3c1bc0fcb..8b665b8741 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -124,6 +124,7 @@ class Status < ApplicationRecord
scope :tagged_with_none, lambda { |tag_ids|
where('NOT EXISTS (SELECT * FROM statuses_tags forbidden WHERE forbidden.status_id = statuses.id AND forbidden.tag_id IN (?))', tag_ids)
}
+ scope :list_eligible_visibility, -> { where(visibility: %i(public unlisted private)) }
scope :not_local_only, -> { where(local_only: [false, nil]) }
diff --git a/app/views/shared/_web_app.html.haml b/app/views/shared/_web_app.html.haml
index cb9f7f4cfd..750f4f87de 100644
--- a/app/views/shared/_web_app.html.haml
+++ b/app/views/shared/_web_app.html.haml
@@ -10,7 +10,7 @@
.notranslate.app-holder#mastodon{ data: { props: Oj.dump(default_props) } }
%noscript
- = image_pack_tag 'logo.svg', alt: 'Mastodon'
+ = image_tag frontend_asset_path('images/logo.svg'), alt: 'Mastodon'
%div
= t('errors.noscript_html', apps_path: 'https://joinmastodon.org/apps')
diff --git a/config/initializers/premailer_rails.rb b/config/initializers/premailer_rails.rb
index 5e9576be7a..1c8df970db 100644
--- a/config/initializers/premailer_rails.rb
+++ b/config/initializers/premailer_rails.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
-require_relative '../../lib/premailer_webpack_strategy'
+require_relative '../../lib/premailer_bundled_asset_strategy'
Premailer::Rails.config.merge!(remove_ids: true,
adapter: :nokogiri,
generate_text_part: false,
css_to_attributes: false,
- strategies: [PremailerWebpackStrategy])
+ strategies: [PremailerBundledAssetStrategy])
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 22710265f3..67aad15873 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -615,7 +615,7 @@ de:
created_at: Gemeldet
delete_and_resolve: Beiträge löschen
forwarded: Weitergeleitet
- forwarded_replies_explanation: Diese Meldung stammt von einem externen Profil und betrifft einen externen Inhalt. Der Inhalt wurde an Dich weitergeleitet, weil er eine Antwort auf ein bei Dir registriertes Profil ist.
+ forwarded_replies_explanation: Diese Meldung stammt von einem externen Profil und betrifft einen externen Inhalt. Der Inhalt wurde an dich weitergeleitet, weil er eine Antwort auf ein bei dir registriertes Profil ist.
forwarded_to: Weitergeleitet an %{domain}
mark_as_resolved: Als geklärt markieren
mark_as_sensitive: Mit einer Inhaltswarnung versehen
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 0d585131ed..f9cbb6a75e 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -1629,13 +1629,26 @@ ja:
import: データのインポート
import_and_export: インポート・エクスポート
migrate: アカウントの引っ越し
+ notifications: メール通知
preferences: ユーザー設定
profile: プロフィール
relationships: フォロー・フォロワー
+ severed_relationships: 途切れたフォロー関係
statuses_cleanup: 投稿の自動削除
strikes: モデレーションストライク
two_factor_authentication: 二要素認証
webauthn_authentication: セキュリティキー
+ severed_relationships:
+ download: 取り出す (%{count}件)
+ event_type:
+ account_suspension: アカウントの停止 (%{target_name})
+ domain_block: 管理者によるサーバーの停止 (%{target_name})
+ user_domain_block: ユーザーによるドメインブロック (%{target_name})
+ lost_followers: 解除されたフォロワー
+ lost_follows: 解除されたフォロー
+ preamble: ドメインをブロックしたりモデレーターによってリモートのサーバーが停止された場合、巻き込みでフォロー・フォロワー関係が失われることがあります。このようにして解除されたフォロー・フォロワーはリスト形式で取り出して内容を確認したり、対応している場合は他のサーバーでインポートできます。
+ purged: 管理者がサーバーの情報を削除したため表示できません。
+ type: 理由
statuses:
attached:
audio:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 0b28c8c1b5..4c22335eaa 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -1669,6 +1669,9 @@ pt-BR:
event_type:
account_suspension: Suspensão da conta (%{target_name})
domain_block: Suspensão do servidor (%{target_name})
+ user_domain_block: Você bloqueou %{target_name}
+ lost_followers: Seguidores perdidos
+ type: Evento
statuses:
attached:
audio:
@@ -1874,6 +1877,9 @@ pt-BR:
follows_subtitle: Siga contas conhecidas
follows_title: Quem seguir
follows_view_more: Veja mais pessoas para seguir
+ hashtags_recent_count:
+ one: "%{people} Pessoas nos últimos 2 dias"
+ other: "%{people} pessoas nos últimos 2 dias"
hashtags_subtitle: Explorar o que está em alta nos últimos 2 dias
hashtags_title: Hashtags em alta
hashtags_view_more: Ver mais hashtags em alta
diff --git a/lib/premailer_webpack_strategy.rb b/lib/premailer_bundled_asset_strategy.rb
similarity index 80%
rename from lib/premailer_webpack_strategy.rb
rename to lib/premailer_bundled_asset_strategy.rb
index 6816d04745..fbe50cd4fc 100644
--- a/lib/premailer_webpack_strategy.rb
+++ b/lib/premailer_bundled_asset_strategy.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
-module PremailerWebpackStrategy
+module PremailerBundledAssetStrategy
def load(url)
- asset_host = ENV['CDN_HOST'] || ENV['WEB_DOMAIN'] || ENV['LOCAL_DOMAIN']
+ asset_host = ENV['CDN_HOST'] || ENV['WEB_DOMAIN'] || ENV.fetch('LOCAL_DOMAIN', nil)
if Webpacker.dev_server.running?
asset_host = "#{Webpacker.dev_server.protocol}://#{Webpacker.dev_server.host_with_port}"
diff --git a/lib/webpacker/manifest_extensions.rb b/lib/webpacker/manifest_extensions.rb
index 789eb81ccf..8a184bc52f 100644
--- a/lib/webpacker/manifest_extensions.rb
+++ b/lib/webpacker/manifest_extensions.rb
@@ -5,9 +5,9 @@ module Webpacker::ManifestExtensions
asset = super
if pack_type[:with_integrity] && asset.respond_to?(:dig)
- [asset.dig('src'), asset.dig('integrity')]
+ [asset['src'], asset['integrity']]
elsif asset.respond_to?(:dig)
- asset.dig('src')
+ asset['src']
else
asset
end
diff --git a/package.json b/package.json
index 37d89a534a..d83c412043 100644
--- a/package.json
+++ b/package.json
@@ -142,7 +142,7 @@
"devDependencies": {
"@formatjs/cli": "^6.1.1",
"@testing-library/jest-dom": "^6.0.0",
- "@testing-library/react": "^14.0.0",
+ "@testing-library/react": "^15.0.0",
"@types/babel__core": "^7.20.1",
"@types/emoji-mart": "^3.0.9",
"@types/escape-html": "^1.0.2",
diff --git a/postcss.config.js b/postcss.config.js
index b6ea8130b5..63aeafb36d 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,7 +1,10 @@
-module.exports = ({ env }) => ({
+/** @type {import('postcss-load-config').Config} */
+const config = ({ env }) => ({
plugins: [
- 'postcss-preset-env',
- 'autoprefixer',
- env === 'production' ? 'cssnano' : '',
+ require('postcss-preset-env'),
+ require('autoprefixer'),
+ env === 'production' ? require('cssnano') : '',
],
});
+
+module.exports = config;
diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb
index de9db1cc4d..57032a068f 100644
--- a/spec/views/statuses/show.html.haml_spec.rb
+++ b/spec/views/statuses/show.html.haml_spec.rb
@@ -3,22 +3,23 @@
require 'rails_helper'
describe 'statuses/show.html.haml', :without_verify_partial_doubles do
+ let(:alice) { Fabricate(:account, username: 'alice', display_name: 'Alice') }
+ let(:status) { Fabricate(:status, account: alice, text: 'Hello World') }
+
before do
allow(view).to receive_messages(api_oembed_url: '', site_title: 'example site', site_hostname: 'example.com', full_asset_url: '//asset.host/image.svg', current_flavour: 'glitch', current_account: nil, single_user_mode?: false)
allow(view).to receive(:local_time)
allow(view).to receive(:local_time_ago)
assign(:instance_presenter, InstancePresenter.new)
- end
- it 'has valid opengraph tags' do
- alice = Fabricate(:account, username: 'alice', display_name: 'Alice')
- status = Fabricate(:status, account: alice, text: 'Hello World')
Fabricate(:media_attachment, account: alice, status: status, type: :video)
assign(:status, status)
assign(:account, alice)
assign(:descendant_threads, [])
+ end
+ it 'has valid opengraph tags' do
render
expect(header_tags)
@@ -29,14 +30,6 @@ describe 'statuses/show.html.haml', :without_verify_partial_doubles do
end
it 'has twitter player tag' do
- alice = Fabricate(:account, username: 'alice', display_name: 'Alice')
- status = Fabricate(:status, account: alice, text: 'Hello World')
- Fabricate(:media_attachment, account: alice, status: status, type: :video)
-
- assign(:status, status)
- assign(:account, alice)
- assign(:descendant_threads, [])
-
render
expect(header_tags)
diff --git a/yarn.lock b/yarn.lock
index 656532728b..e1ad29c1fd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2738,7 +2738,7 @@ __metadata:
"@reduxjs/toolkit": "npm:^2.0.1"
"@svgr/webpack": "npm:^5.5.0"
"@testing-library/jest-dom": "npm:^6.0.0"
- "@testing-library/react": "npm:^14.0.0"
+ "@testing-library/react": "npm:^15.0.0"
"@types/babel__core": "npm:^7.20.1"
"@types/emoji-mart": "npm:^3.0.9"
"@types/escape-html": "npm:^1.0.2"
@@ -3284,19 +3284,19 @@ __metadata:
languageName: node
linkType: hard
-"@testing-library/dom@npm:^9.0.0":
- version: 9.3.1
- resolution: "@testing-library/dom@npm:9.3.1"
+"@testing-library/dom@npm:^10.0.0":
+ version: 10.0.0
+ resolution: "@testing-library/dom@npm:10.0.0"
dependencies:
"@babel/code-frame": "npm:^7.10.4"
"@babel/runtime": "npm:^7.12.5"
"@types/aria-query": "npm:^5.0.1"
- aria-query: "npm:5.1.3"
+ aria-query: "npm:5.3.0"
chalk: "npm:^4.1.0"
dom-accessibility-api: "npm:^0.5.9"
lz-string: "npm:^1.5.0"
pretty-format: "npm:^27.0.2"
- checksum: 10c0/25d1deddba014c107fd9703181fbb7063ed376d3ad42d7918ee752e7e677edfb5abaf672b22afc5257ffe760c9c7e5cc981656297c328bc61578d23c6b65b4dc
+ checksum: 10c0/2d12d2a6018a6f1d15e91834180bc068932c699ff1fcbfb80aa21aba519a4f5329c861dfa852e06ee5615bcb92ef2a0f0e755e32684ea3dada63bc34248382ab
languageName: node
linkType: hard
@@ -3333,17 +3333,17 @@ __metadata:
languageName: node
linkType: hard
-"@testing-library/react@npm:^14.0.0":
- version: 14.3.1
- resolution: "@testing-library/react@npm:14.3.1"
+"@testing-library/react@npm:^15.0.0":
+ version: 15.0.2
+ resolution: "@testing-library/react@npm:15.0.2"
dependencies:
"@babel/runtime": "npm:^7.12.5"
- "@testing-library/dom": "npm:^9.0.0"
+ "@testing-library/dom": "npm:^10.0.0"
"@types/react-dom": "npm:^18.0.0"
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 10c0/1ccf4eb1510500cc20a805cb0244c9098dca28a8745173a8f71ea1274d63774f0b7898a35c878b43c797b89c13621548909ff37843b835c1a27ee1efbbdd098c
+ checksum: 10c0/8d75e4850f8f749244bf4f30b0f99a5d4aa1156ee5a59eea0772f47971c38535d1fb31d021c4f0f0b816346ae664870dc223d5d997ab399dfb1b6211f0e2acf1
languageName: node
linkType: hard
@@ -4715,16 +4715,7 @@ __metadata:
languageName: node
linkType: hard
-"aria-query@npm:5.1.3":
- version: 5.1.3
- resolution: "aria-query@npm:5.1.3"
- dependencies:
- deep-equal: "npm:^2.0.5"
- checksum: 10c0/edcbc8044c4663d6f88f785e983e6784f98cb62b4ba1e9dd8d61b725d0203e4cfca38d676aee984c31f354103461102a3d583aa4fbe4fd0a89b679744f4e5faf
- languageName: node
- linkType: hard
-
-"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0":
+"aria-query@npm:5.3.0, aria-query@npm:^5.0.0, aria-query@npm:^5.3.0":
version: 5.3.0
resolution: "aria-query@npm:5.3.0"
dependencies:
@@ -4754,7 +4745,7 @@ __metadata:
languageName: node
linkType: hard
-"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1":
+"array-buffer-byte-length@npm:^1.0.1":
version: 1.0.1
resolution: "array-buffer-byte-length@npm:1.0.1"
dependencies:
@@ -6915,32 +6906,6 @@ __metadata:
languageName: node
linkType: hard
-"deep-equal@npm:^2.0.5":
- version: 2.2.1
- resolution: "deep-equal@npm:2.2.1"
- dependencies:
- array-buffer-byte-length: "npm:^1.0.0"
- call-bind: "npm:^1.0.2"
- es-get-iterator: "npm:^1.1.3"
- get-intrinsic: "npm:^1.2.0"
- is-arguments: "npm:^1.1.1"
- is-array-buffer: "npm:^3.0.2"
- is-date-object: "npm:^1.0.5"
- is-regex: "npm:^1.1.4"
- is-shared-array-buffer: "npm:^1.0.2"
- isarray: "npm:^2.0.5"
- object-is: "npm:^1.1.5"
- object-keys: "npm:^1.1.1"
- object.assign: "npm:^4.1.4"
- regexp.prototype.flags: "npm:^1.5.0"
- side-channel: "npm:^1.0.4"
- which-boxed-primitive: "npm:^1.0.2"
- which-collection: "npm:^1.0.1"
- which-typed-array: "npm:^1.1.9"
- checksum: 10c0/9e32606f0e24ef4d6b100c68cadae81495c3638944e933afc4b8389b042e95c5fe1381492cf7a6d385bcbae564c9cfb7086f37f277e37521a632b008a6b208dc
- languageName: node
- linkType: hard
-
"deep-is@npm:^0.1.3":
version: 0.1.4
resolution: "deep-is@npm:0.1.4"
@@ -7595,23 +7560,6 @@ __metadata:
languageName: node
linkType: hard
-"es-get-iterator@npm:^1.1.3":
- version: 1.1.3
- resolution: "es-get-iterator@npm:1.1.3"
- dependencies:
- call-bind: "npm:^1.0.2"
- get-intrinsic: "npm:^1.1.3"
- has-symbols: "npm:^1.0.3"
- is-arguments: "npm:^1.1.1"
- is-map: "npm:^2.0.2"
- is-set: "npm:^2.0.2"
- is-string: "npm:^1.0.7"
- isarray: "npm:^2.0.5"
- stop-iteration-iterator: "npm:^1.0.0"
- checksum: 10c0/ebd11effa79851ea75d7f079405f9d0dc185559fd65d986c6afea59a0ff2d46c2ed8675f19f03dce7429d7f6c14ff9aede8d121fbab78d75cfda6a263030bac0
- languageName: node
- linkType: hard
-
"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17":
version: 1.0.17
resolution: "es-iterator-helpers@npm:1.0.17"
@@ -8779,7 +8727,7 @@ __metadata:
languageName: node
linkType: hard
-"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
+"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
version: 1.2.4
resolution: "get-intrinsic@npm:1.2.4"
dependencies:
@@ -9618,7 +9566,7 @@ __metadata:
languageName: node
linkType: hard
-"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7":
+"internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7":
version: 1.0.7
resolution: "internal-slot@npm:1.0.7"
dependencies:
@@ -9734,7 +9682,7 @@ __metadata:
languageName: node
linkType: hard
-"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1":
+"is-arguments@npm:^1.0.4":
version: 1.1.1
resolution: "is-arguments@npm:1.1.1"
dependencies:
@@ -9744,7 +9692,7 @@ __metadata:
languageName: node
linkType: hard
-"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4":
+"is-array-buffer@npm:^3.0.4":
version: 3.0.4
resolution: "is-array-buffer@npm:3.0.4"
dependencies:
@@ -9991,7 +9939,7 @@ __metadata:
languageName: node
linkType: hard
-"is-map@npm:^2.0.1, is-map@npm:^2.0.2":
+"is-map@npm:^2.0.1":
version: 2.0.2
resolution: "is-map@npm:2.0.2"
checksum: 10c0/119ff9137a37fd131a72fab3f4ab8c9d6a24b0a1ee26b4eff14dc625900d8675a97785eea5f4174265e2006ed076cc24e89f6e57ebd080a48338d914ec9168a5
@@ -10116,7 +10064,7 @@ __metadata:
languageName: node
linkType: hard
-"is-set@npm:^2.0.1, is-set@npm:^2.0.2":
+"is-set@npm:^2.0.1":
version: 2.0.2
resolution: "is-set@npm:2.0.2"
checksum: 10c0/5f8bd1880df8c0004ce694e315e6e1e47a3452014be792880bb274a3b2cdb952fdb60789636ca6e084c7947ca8b7ae03ccaf54c93a7fcfed228af810559e5432
@@ -12312,7 +12260,7 @@ __metadata:
languageName: node
linkType: hard
-"object-is@npm:^1.0.1, object-is@npm:^1.1.5":
+"object-is@npm:^1.0.1":
version: 1.1.5
resolution: "object-is@npm:1.1.5"
dependencies:
@@ -14036,12 +13984,12 @@ __metadata:
linkType: hard
"prom-client@npm:^15.0.0":
- version: 15.1.1
- resolution: "prom-client@npm:15.1.1"
+ version: 15.1.2
+ resolution: "prom-client@npm:15.1.2"
dependencies:
"@opentelemetry/api": "npm:^1.4.0"
tdigest: "npm:^0.1.1"
- checksum: 10c0/b3e6a58fc0ef87cf5b0badf06d7d79c24ac93ba47cccfaad95faeba79824c6a7724d74a257e7268d691245c847173818c16c8153054cccf16b8f033c37c74129
+ checksum: 10c0/a221db148fa64e29dfd4c6cdcaaae14635495a4272b68917e2b44fcfd988bc57027d275b04489ceeea4d0c4d64d058af842c1300966d2c1ffa255f1fa6af1277
languageName: node
linkType: hard
@@ -16099,15 +16047,6 @@ __metadata:
languageName: node
linkType: hard
-"stop-iteration-iterator@npm:^1.0.0":
- version: 1.0.0
- resolution: "stop-iteration-iterator@npm:1.0.0"
- dependencies:
- internal-slot: "npm:^1.0.4"
- checksum: 10c0/c4158d6188aac510d9e92925b58709207bd94699e9c31186a040c80932a687f84a51356b5895e6dc72710aad83addb9411c22171832c9ae0e6e11b7d61b0dfb9
- languageName: node
- linkType: hard
-
"stream-browserify@npm:^2.0.1":
version: 2.0.2
resolution: "stream-browserify@npm:2.0.2"