Merge commit '0622107449e72d35b22afeeba2f0ba983e914803' into glitch-soc/merge-upstream

pull/2699/head
Claire 2024-05-01 19:16:48 +02:00
commit 946bd2e7e1
34 changed files with 236 additions and 148 deletions

View File

@ -111,7 +111,6 @@ jobs:
fail-fast: false
matrix:
ruby-version:
- '3.0'
- '3.1'
- '.ruby-version'
- '3.3'
@ -187,7 +186,6 @@ jobs:
fail-fast: false
matrix:
ruby-version:
- '3.0'
- '3.1'
- '.ruby-version'
- '3.3'
@ -287,7 +285,6 @@ jobs:
fail-fast: false
matrix:
ruby-version:
- '3.0'
- '3.1'
- '.ruby-version'
- '3.3'

View File

@ -14,7 +14,7 @@ require:
- ./lib/linter/rubocop_middle_dot
AllCops:
TargetRubyVersion: 3.0 # Set to minimum supported version of CI
TargetRubyVersion: 3.1 # Set to minimum supported version of CI
DisplayCopNames: true
DisplayStyleGuide: true
ExtraDetails: true
@ -80,6 +80,11 @@ Metrics/CyclomaticComplexity:
Metrics/ParameterLists:
CountKeywordArgs: false
# Reason: Prefer seeing a variable name
# https://docs.rubocop.org/rubocop/cops_naming.html#namingblockforwarding
Naming/BlockForwarding:
EnforcedStyle: explicit
# Reason: Prevailing style is argument file paths
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsfilepath
Rails/FilePath:
@ -180,6 +185,7 @@ Style/FormatStringToken:
# https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
Style/HashSyntax:
EnforcedStyle: ruby19_no_mixed_keys
EnforcedShorthandSyntax: either
# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#stylenumericliterals

View File

@ -97,7 +97,6 @@ Style/FetchEnvVar:
- 'config/initializers/paperclip.rb'
- 'config/initializers/vapid.rb'
- 'lib/mastodon/redis_config.rb'
- 'lib/premailer_webpack_strategy.rb'
- 'lib/tasks/repo.rake'
- 'spec/features/profile_spec.rb'
@ -250,11 +249,6 @@ Style/SignalException:
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/SingleArgumentDig:
Exclude:
- 'lib/webpacker/manifest_extensions.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
source 'https://rubygems.org'
ruby '>= 3.0.0'
ruby '>= 3.1.0'
gem 'puma', '~> 6.3'
gem 'rails', '~> 7.1.1'

View File

@ -646,7 +646,7 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.1)
rubocop (1.63.1)
rubocop (1.63.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)

View File

@ -85,7 +85,7 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre
- **PostgreSQL** 12+
- **Redis** 4+
- **Ruby** 3.0+
- **Ruby** 3.1+
- **Node.js** 16+
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.

View File

@ -19,6 +19,6 @@ module BrandingHelper
end
def render_logo
image_pack_tag('logo.svg', alt: 'Mastodon', class: 'logo logo--icon')
image_tag(frontend_asset_path('images/logo.svg'), alt: 'Mastodon', class: 'logo logo--icon')
end
end

View File

@ -42,7 +42,7 @@ export const FilteredNotificationsBanner = () => {
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>{toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))}</div>
<FormattedMessage id='filtered_notifications_banner.private_mentions' defaultMessage='{count, plural, one {private mention} other {private mentions}}' values={{ count: policy.getIn(['summary', 'pending_notifications_count']) }} />
<FormattedMessage id='filtered_notifications_banner.mentions' defaultMessage='{count, plural, one {mention} other {mentions}}' values={{ count: policy.getIn(['summary', 'pending_notifications_count']) }} />
</div>
</Link>
);

View File

@ -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",

View File

@ -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",

View File

@ -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.",

View File

@ -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 dyt 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 dyt 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, wert 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êrt 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:",

View File

@ -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",

View File

@ -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.",

View File

@ -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 <button>ActivityPub aangedreven</button> 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 <button>ActivityPub aangedreven</button> 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 <button>ActivityPub aangedreven</button> 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 <button>ActivityPub aangedreven</button> 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.",

View File

@ -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": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",

View File

@ -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": "Будьте в курсе происходящего",

View File

@ -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": "ปิดกั้นโดเมนอยู่",

View File

@ -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}",

View File

@ -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;
}
}

View File

@ -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|

View File

@ -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))

View File

@ -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]) }

View File

@ -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')

View File

@ -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])

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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}"

View File

@ -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

View File

@ -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",

View File

@ -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;

View File

@ -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)

107
yarn.lock
View File

@ -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"