diff --git a/.eslintrc.js b/.eslintrc.js index 502b9cefed87c6..759003b55ec3cd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -363,6 +363,7 @@ module.exports = defineConfig({ "message": "Use typed hooks `useAppDispatch` and `useAppSelector` instead." } ], + "@typescript-eslint/restrict-template-expressions": ['warn', { allowNumber: true }], 'jsdoc/require-jsdoc': 'off', // Those rules set stricter rules for TS files diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index e8f3126bdec4c7..9345249e88b329 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -24,7 +24,7 @@ export type StatusLike = Record<{ function normalizeHashtag(hashtag: string) { return ( - hashtag && hashtag.startsWith('#') ? hashtag.slice(1) : hashtag + !!hashtag && hashtag.startsWith('#') ? hashtag.slice(1) : hashtag ).normalize('NFKC'); } diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 74f3f560d42feb..eda2099357877a 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -476,10 +476,13 @@ "notification.relationships_severance_event.account_suspension": "{from} admin on kustutanud {target}, mis tähendab, et sa ei saa enam neilt uuendusi või suhelda nendega.", "notification.relationships_severance_event.domain_block": "{from} admin on blokeerinud {target}, sealhulgas {followersCount} sinu jälgijat ja {followingCount, plural, one {# konto} other {# kontot}}, mida jälgid.", "notification.relationships_severance_event.learn_more": "Saa rohkem teada", + "notification.relationships_severance_event.user_domain_block": "Blokeerisid {target}, eemaldades oma jälgijate hulgast {followersCount} ja jälgitavate hulgast {followingCount, plural, one {# konto} other {# kontot}}.", "notification.status": "{name} just postitas", "notification.update": "{name} muutis postitust", "notification_requests.accept": "Nõus", "notification_requests.dismiss": "Hülga", + "notification_requests.notifications_from": "Teavitus kasutajalt {name}", + "notification_requests.title": "Filtreeritud teavitused", "notifications.clear": "Puhasta teated", "notifications.clear_confirmation": "Oled kindel, et soovid püsivalt kõik oma teated eemaldada?", "notifications.column_settings.admin.report": "Uued teavitused:", @@ -515,6 +518,13 @@ "notifications.permission_required": "Töölaua märguanded ei ole saadaval, kuna vajalik luba pole antud.", "notifications.policy.filter_new_accounts.hint": "Loodud viimase {days, plural, one {ühe päeva} other {# päeva}} jooksul", "notifications.policy.filter_new_accounts_title": "Uued kontod", + "notifications.policy.filter_not_followers_hint": "Kaasates kasutajad, kes on sind jälginud vähem kui {days, plural, one {ühe päeva} other {# päeva}}", + "notifications.policy.filter_not_followers_title": "Sind mittejälgivad kasutajad", + "notifications.policy.filter_not_following_hint": "Kuni sa nad käsitsi kinnitad", + "notifications.policy.filter_not_following_title": "Inimesed, keda sa ei jälgi", + "notifications.policy.filter_private_mentions_hint": "Filtreeritud, kui see pole vastus sinupoolt mainimisele või kui jälgid saatjat", + "notifications.policy.filter_private_mentions_title": "Soovimatud privaatsed mainimised", + "notifications.policy.title": "Filtreeri välja teavitused kohast…", "notifications_permission_banner.enable": "Luba töölaua märguanded", "notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.", "notifications_permission_banner.title": "Ära jää millestki ilma", @@ -691,9 +701,11 @@ "status.direct": "Maini privaatselt @{name}", "status.direct_indicator": "Privaatne mainimine", "status.edit": "Muuda", + "status.edited": "Viimati muudetud {date}", "status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}", "status.embed": "Manustamine", "status.favourite": "Lemmik", + "status.favourites": "{count, plural, one {lemmik} other {lemmikud}}", "status.filter": "Filtreeri seda postitust", "status.filtered": "Filtreeritud", "status.hide": "Peida postitus", @@ -714,6 +726,7 @@ "status.reblog": "Jaga", "status.reblog_private": "Jaga algse nähtavusega", "status.reblogged_by": "{name} jagas", + "status.reblogs": "{count, plural, one {jagamine} other {jagamist}}", "status.reblogs.empty": "Keegi pole seda postitust veel jaganud. Kui keegi seda teeb, näeb seda siin.", "status.redraft": "Kustuta & alga uuesti", "status.remove_bookmark": "Eemalda järjehoidja", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index afa0e5fbc2c5fd..894d73c8cc42ba 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -50,6 +50,7 @@ "admin.dashboard.retention.cohort_size": "Mga bagong tagagamit", "alert.rate_limited.message": "Mangyaring subukan muli pagkatapos ng {retry_time, time, medium}.", "audio.hide": "Itago ang tunog", + "block_modal.title": "Harangan ang tagagamit?", "bundle_column_error.error.title": "Naku!", "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", "bundle_column_error.network.title": "Kamaliang network", @@ -104,6 +105,7 @@ "compose_form.poll.multiple": "Maraming pagpipilian", "compose_form.poll.single": "Piliin ang isa", "compose_form.reply": "Tumugon", + "compose_form.spoiler.marked": "Tanggalin ang babala sa nilalaman", "compose_form.spoiler.unmarked": "Idagdag ang babala sa nilalaman", "confirmation_modal.cancel": "Pagpaliban", "confirmations.block.confirm": "Harangan", @@ -115,6 +117,7 @@ "confirmations.discard_edit_media.confirm": "Ipagpaliban", "confirmations.edit.confirm": "Baguhin", "confirmations.reply.confirm": "Tumugon", + "conversation.mark_as_read": "Markahan bilang nabasa na", "copy_icon_button.copied": "Sinipi sa clipboard", "copypaste.copied": "Sinipi", "copypaste.copy_to_clipboard": "I-sipi sa clipboard", @@ -130,6 +133,10 @@ "dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.", "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.", "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", + "domain_block_modal.block": "Harangan ang serbiro", + "domain_block_modal.title": "Harangan ang domain?", + "domain_block_modal.you_will_lose_followers": "Mabubura ang iyong mga tagasunod mula sa serbirong ito.", + "domain_pill.server": "Serbiro", "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", "embed.preview": "Ito ang magiging itsura:", "emoji_button.activity": "Aktibidad", @@ -166,6 +173,8 @@ "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito.", "explore.search_results": "Mga resulta ng paghahanap", + "explore.title": "Tuklasin", + "explore.trending_links": "Mga balita", "filter_modal.select_filter.search": "Hanapin o gumawa", "firehose.all": "Lahat", "firehose.local": "Itong serbiro", @@ -180,6 +189,7 @@ "generic.saved": "Nakaimbak", "hashtag.column_header.tag_mode.all": "at {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", + "home.column_settings.show_replies": "Ipakita ang mga tugon", "home.pending_critical_update.body": "Mangyaring i-update ang iyong serbiro ng Mastodon sa lalong madaling panahon!", "interaction_modal.login.action": "Iuwi mo ako", "interaction_modal.no_account_yet": "Wala sa Mastodon?", @@ -216,14 +226,21 @@ "notification.follow": "Sinundan ka ni {name}", "notification.follow_request": "Hinihiling ni {name} na sundan ka", "notification.mention": "Binanggit ka ni {name}", + "notification.relationships_severance_event.learn_more": "Matuto nang higit pa", + "notification_requests.accept": "Tanggapin", + "notification_requests.notifications_from": "Mga abiso mula kay/sa {name}", "notifications.clear": "Burahin mga abiso", "notifications.column_settings.admin.report": "Mga bagong ulat:", + "notifications.column_settings.alert": "Mga abiso sa Desktop", "notifications.column_settings.favourite": "Mga paborito:", "notifications.column_settings.follow": "Mga bagong tagasunod:", "notifications.column_settings.unread_notifications.category": "Hindi Nabasang mga Abiso", "notifications.column_settings.update": "Mga pagbago:", "notifications.filter.all": "Lahat", + "notifications.filter.favourites": "Mga paborito", "notifications.mark_as_read": "Markahan lahat ng abiso bilang nabasa na", + "notifications.policy.filter_not_followers_title": "Mga taong hindi ka susundan", + "notifications.policy.filter_not_following_title": "Mga taong hindi mo sinusundan", "onboarding.action.back": "Ibalik mo ako", "onboarding.actions.back": "Ibalik mo ako", "onboarding.profile.note_hint": "Maaari mong @bangitin ang ibang mga tao o mga #hashtag…", @@ -236,6 +253,8 @@ "privacy.direct.long": "Lahat ng mga binanggit sa post", "privacy.private.long": "Mga tagasunod mo lamang", "privacy.private.short": "Mga tagasunod", + "privacy.public.long": "Sinumang nasa loob at labas ng Mastodon", + "regeneration_indicator.label": "Kumakarga…", "relative_time.days": "{number}a", "relative_time.full.days": "{number, plural, one {# araw} other {# na araw}} ang nakalipas", "relative_time.full.hours": "{number, plural, one {# oras} other {# na oras}} ang nakalipas", @@ -261,6 +280,10 @@ "report.thanks.title": "Ayaw mo bang makita ito?", "report.thanks.title_actionable": "Salamat sa pag-uulat, titingnan namin ito.", "report_notification.categories.other": "Iba pa", + "search.quick_action.open_url": "Buksan ang URL sa Mastodon", + "search.search_or_paste": "Maghanap o ilagay ang URL", + "search_popout.full_text_search_disabled_message": "Hindi magagamit sa {domain}.", + "search_popout.full_text_search_logged_out_message": "Magagamit lamang kapag naka-log in.", "search_results.all": "Lahat", "search_results.see_all": "Ipakita lahat", "server_banner.learn_more": "Matuto nang higit pa", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index d982381c427cb0..428abb8c5acde0 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -159,8 +159,13 @@ "disabled_account_banner.account_settings": "Parametros de conto", "disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.", "dismissable_banner.dismiss": "Dimitter", + "domain_block_modal.block": "Blocar le servitor", + "domain_block_modal.block_account_instead": "Blocar @{name} in su loco", + "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.username": "Nomine de usator", "embed.preview": "Ecce como illlo parera:", @@ -202,6 +207,7 @@ "filter_modal.select_filter.search": "Cercar o crear", "filter_modal.select_filter.title": "Filtrar iste message", "filter_modal.title.status": "Filtrar un message", + "filtered_notifications_banner.pending_requests": "Notificationes ab {count, plural, =0 {nemo} one {un persona} other {# personas}} tu poterea cognoscer", "firehose.all": "Toto", "firehose.local": "Iste servitor", "firehose.remote": "Altere servitores", @@ -251,7 +257,9 @@ "keyboard_shortcuts.federated": "Aperir le chronologia federate", "keyboard_shortcuts.heading": "Accessos directe de claviero", "keyboard_shortcuts.home": "Aperir le chronologia de initio", + "keyboard_shortcuts.legend": "Monstrar iste legenda", "keyboard_shortcuts.local": "Aperir le chronologia local", + "keyboard_shortcuts.mention": "Mentionar le author", "keyboard_shortcuts.muted": "Aperir lista de usatores silentiate", "keyboard_shortcuts.my_profile": "Aperir tu profilo", "keyboard_shortcuts.notifications": "Aperir columna de notificationes", @@ -264,6 +272,8 @@ "lightbox.close": "Clauder", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", + "limited_account_hint.action": "Monstrar profilo in omne caso", + "limited_account_hint.title": "Iste profilo esseva celate per le moderatores de {domain}.", "link_preview.author": "Per {name}", "lists.account.add": "Adder al lista", "lists.account.remove": "Remover del lista", @@ -278,8 +288,13 @@ "lists.subheading": "Tu listas", "loading_indicator.label": "Cargante…", "media_gallery.toggle_visible": "{number, plural, one {Celar imagine} other {Celar imagines}}", + "mute_modal.hide_from_notifications": "Celar ab notificationes", "mute_modal.hide_options": "Celar optiones", + "mute_modal.show_options": "Monstrar optiones", + "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.", "navigation_bar.about": "A proposito", "navigation_bar.advanced_interface": "Aperir in le interfacie web avantiate", "navigation_bar.blocks": "Usatores blocate", @@ -304,7 +319,10 @@ "notification.own_poll": "Tu sondage ha finite", "notification.relationships_severance_event.learn_more": "Apprender plus", "notification.update": "{name} ha modificate un message", + "notification_requests.accept": "Acceptar", + "notification_requests.dismiss": "Dimitter", "notification_requests.notifications_from": "Notificationes de {name}", + "notification_requests.title": "Notificationes filtrate", "notifications.clear": "Rader notificationes", "notifications.clear_confirmation": "Es tu secur que tu vole rader permanentemente tote tu notificationes?", "notifications.column_settings.alert": "Notificationes de scriptorio", @@ -325,6 +343,7 @@ "notifications.filter.statuses": "Actualisationes de personas que tu seque", "notifications.grant_permission": "Conceder permission.", "notifications.group": "{count} notificationes", + "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.compose.template": "Salute #Mastodon!", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d7e447626ea242..fd12ee298b956c 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -354,7 +354,7 @@ "interaction_modal.description.follow": "Con un profilo di Mastodon, puoi seguire {name} per ricevere i suoi post nel feed della tua home.", "interaction_modal.description.reblog": "Con un profilo di Mastodon, puoi rebloggare questo post per condividerlo con i tuoi seguaci.", "interaction_modal.description.reply": "Con un profilo di Mastodon, puoi rispondere a questo post.", - "interaction_modal.login.action": "Torna all’inizio", + "interaction_modal.login.action": "Portami alla pagina iniziale", "interaction_modal.login.prompt": "Dominio del tuo server principale, ad esempio mastodon.social", "interaction_modal.no_account_yet": "Non su Mastodon?", "interaction_modal.on_another_server": "Su un altro server", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index f9ef7e242c00e4..b43af3c0aa8496 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -442,6 +442,8 @@ "notification.own_poll": "Tavo apklausa baigėsi", "notification.poll": "Apklausa, kurioje balsavai, pasibaigė", "notification.reblog": "{name} pakėlė tavo įrašą", + "notification.relationships_severance_event.learn_more": "Sužinoti daugiau", + "notification.relationships_severance_event.user_domain_block": "Tu užblokavai {target}. Pašalinama {followersCount} savo sekėjų ir {followingCount, plural, one {# paskyrą} few {# paskyrai} many {# paskyros} other {# paskyrų}}, kurios seki.", "notification.status": "{name} ką tik paskelbė", "notification.update": "{name} redagavo įrašą", "notification_requests.accept": "Priimti", @@ -454,6 +456,8 @@ "notifications.column_settings.admin.sign_up": "Naujos registracijos:", "notifications.column_settings.alert": "Darbalaukio pranešimai", "notifications.column_settings.favourite": "Mėgstami:", + "notifications.column_settings.filter_bar.advanced": "Rodyti visas kategorijas", + "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", "notifications.column_settings.follow": "Nauji sekėjai:", "notifications.column_settings.follow_request": "Nauji sekimo prašymai:", "notifications.column_settings.mention": "Paminėjimai:", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index c47831b389e9d4..23960e9f8647dc 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -705,7 +705,7 @@ "status.edited_x_times": "{count, plural, one {{count} keer} other {{count} keer}} bewerkt", "status.embed": "Embedden", "status.favourite": "Favoriet", - "status.favourites": "{count, plural, one {# favoriet} other {# favorieten}}", + "status.favourites": "{count, plural, one {favoriet} other {favorieten}}", "status.filter": "Dit bericht filteren", "status.filtered": "Gefilterd", "status.hide": "Bericht verbergen", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 026e198206c766..95768b811a6638 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -297,6 +297,7 @@ "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.title.status": "Filtroni një postim", + "filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni", "filtered_notifications_banner.private_mentions": "{count, plural, one {përmendje private} other {përmendje private}}", "filtered_notifications_banner.title": "Njoftime të filtruar", "firehose.all": "Krejt", @@ -515,7 +516,9 @@ "notifications.permission_denied": "S’merren dot njoftime në desktop, ngaqë më herët shfletuesit i janë mohuar lejet për këtë", "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.", + "notifications.policy.filter_new_accounts.hint": "Krijuar brenda {days, plural, one {një dite} other {# ditësh}} të shkuara", "notifications.policy.filter_new_accounts_title": "Llogari të reja", + "notifications.policy.filter_not_followers_hint": "Përfshi persona që ju kanë ndjekur brenda më pak se {days, plural, one {një dite} other {# ditësh}}", "notifications.policy.filter_not_followers_title": "Persona që s’ju ndjekin", "notifications.policy.filter_not_following_hint": "Deri sa t’i miratoni dorazi", "notifications.policy.filter_not_following_title": "Persona që s’i ndiqni", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 85511df8ccbc22..46a6cb7943f28b 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -476,6 +476,7 @@ "notification.relationships_severance_event.account_suspension": "En administratör från {from} har stängt av {target}, vilket innebär att du inte längre kan ta emot uppdateringar från dem eller interagera med dem.", "notification.relationships_severance_event.domain_block": "En administratör från {from} har blockerat {target}, inklusive {followersCount} av dina följare och {followingCount, plural, one {# konto} other {# konton}} du följer.", "notification.relationships_severance_event.learn_more": "Läs mer", + "notification.relationships_severance_event.user_domain_block": "Du har blockerat {target} och tar därmed bort {followersCount} av dina följare samt {followingCount, plural, one {# konto} other {# konton}} du följer.", "notification.status": "{name} publicerade just ett inlägg", "notification.update": "{name} redigerade ett inlägg", "notification_requests.accept": "Godkänn", @@ -489,6 +490,7 @@ "notifications.column_settings.alert": "Skrivbordsaviseringar", "notifications.column_settings.favourite": "Favoriter:", "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier", + "notifications.column_settings.filter_bar.category": "Snabbfilter", "notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.follow_request": "Ny följ-förfrågan:", "notifications.column_settings.mention": "Omnämningar:", @@ -516,8 +518,11 @@ "notifications.permission_required": "Skrivbordsaviseringar är otillgängliga eftersom att rättigheten som krävs inte har godkänts.", "notifications.policy.filter_new_accounts.hint": "Skapad inom de senaste {days, plural, one {dagen} other {# dagarna}}", "notifications.policy.filter_new_accounts_title": "Nya konton", + "notifications.policy.filter_not_followers_hint": "Inklusive personer som har följt dig kortare än {days, plural, one {en dag} other {# dagar}}", "notifications.policy.filter_not_followers_title": "Personer som inte följer dig", + "notifications.policy.filter_not_following_hint": "Tills du manuellt godkänner dem", "notifications.policy.filter_not_following_title": "Personer du inte följer", + "notifications.policy.filter_private_mentions_hint": "Filtrerat om det inte är som svar på ditt eget omnämnande eller om du följer avsändaren", "notifications.policy.filter_private_mentions_title": "Oombedda privata omnämnanden", "notifications.policy.title": "Filtrera ut aviseringar från…", "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar", @@ -721,6 +726,7 @@ "status.reblog": "Boosta", "status.reblog_private": "Boosta med ursprunglig synlighet", "status.reblogged_by": "{name} boostade", + "status.reblogs": "{count, plural, one {# röst} other {# röster}}", "status.reblogs.empty": "Ingen har boostat detta inlägg än. När någon gör det kommer de synas här.", "status.redraft": "Radera & gör om", "status.remove_bookmark": "Ta bort bokmärke", diff --git a/app/javascript/mastodon/uuid.ts b/app/javascript/mastodon/uuid.ts index 4d0a8a803637ba..0b4d55beb615d5 100644 --- a/app/javascript/mastodon/uuid.ts +++ b/app/javascript/mastodon/uuid.ts @@ -4,5 +4,6 @@ export function uuid(a?: string): string { (a as unknown as number) ^ ((Math.random() * 16) >> ((a as unknown as number) / 4)) ).toString(16) - : ('' + 1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuid); + : // eslint-disable-next-line @typescript-eslint/restrict-plus-operands + ('' + 1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuid); } diff --git a/app/javascript/packs/admin.tsx b/app/javascript/packs/admin.tsx index bcfc5e66dbd323..64192f54ad3f5d 100644 --- a/app/javascript/packs/admin.tsx +++ b/app/javascript/packs/admin.tsx @@ -435,6 +435,6 @@ ready(() => { document.querySelectorAll('[data-admin-component]').forEach((element) => { void mountReactComponent(element); }); -}).catch((reason) => { +}).catch((reason: unknown) => { throw reason; }); diff --git a/app/javascript/packs/public.tsx b/app/javascript/packs/public.tsx index 044faeb29605cb..d45927226c282f 100644 --- a/app/javascript/packs/public.tsx +++ b/app/javascript/packs/public.tsx @@ -69,7 +69,7 @@ window.addEventListener('message', (e) => { }, '*', ); - }).catch((e) => { + }).catch((e: unknown) => { console.error('Error in setHeightMessage postMessage', e); }); }); @@ -206,7 +206,7 @@ function loaded() { return true; }) - .catch((error) => { + .catch((error: unknown) => { console.error(error); }); } @@ -448,7 +448,7 @@ Rails.delegate(document, '#registration_new_user,#new_user', 'submit', () => { }); function main() { - ready(loaded).catch((error) => { + ready(loaded).catch((error: unknown) => { console.error(error); }); } @@ -457,6 +457,6 @@ loadPolyfills() .then(loadLocale) .then(main) .then(loadKeyboardExtensions) - .catch((error) => { + .catch((error: unknown) => { console.error(error); }); diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 1de90e00160ebf..07e9d9868b4272 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -477,10 +477,7 @@ html { color: $white; } -.compose-form, -.spoiler-input__input, -.search__input, -.search__popout { +.compose-form .spoiler-input__input { color: lighten($ui-highlight-color, 8%); } @@ -488,6 +485,8 @@ html { .compose-form__highlightable, .search__input, .search__popout, +.emoji-mart-search input, +.language-dropdown__dropdown .emoji-mart-search input, .poll__option input[type='text'] { background: darken($ui-base-color, 10%); } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 1737c6cbe2a0b4..ed7eac1ecdfb55 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2322,14 +2322,14 @@ a.account__display-name { &.activate { & > .icon { animation: spring-rotate-in 1s linear; - transform-origin: 50% 55%; + transform-origin: 50% 52%; } } &.deactivate { & > .icon { animation: spring-rotate-out 1s linear; - transform-origin: 50% 55%; + transform-origin: 50% 52%; } } } diff --git a/app/javascript/styles/mastodon/emoji_picker.scss b/app/javascript/styles/mastodon/emoji_picker.scss index cc75d3e48c1f00..22c421a77dd111 100644 --- a/app/javascript/styles/mastodon/emoji_picker.scss +++ b/app/javascript/styles/mastodon/emoji_picker.scss @@ -112,10 +112,9 @@ border: 0; } - &::-moz-focus-inner, &:focus, &:active { - outline: 0 !important; + outline: none !important; } &::-webkit-search-cancel-button { diff --git a/app/views/application/mailer/_feature.html.haml b/app/views/application/mailer/_feature.html.haml index d051338a9c27bd..5facdd086602bf 100644 --- a/app/views/application/mailer/_feature.html.haml +++ b/app/views/application/mailer/_feature.html.haml @@ -11,10 +11,8 @@ %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-column-td - - if defined?(feature_title) - %h2.email-h2= feature_title - - if defined?(feature_text) - %p.email-p= feature_text + %h2.email-h2= t("user_mailer.welcome.feature_#{feature}_title") + %p.email-p= t("user_mailer.welcome.feature_#{feature}") - if defined?(feature_btn_url) = link_to '', href: feature_btn_url, class: 'email-link-with-arrow' do #{t('user_mailer.welcome.feature_action')}  @@ -25,8 +23,8 @@ %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-column-td - - if defined?(key) + - if defined?(feature) %p{ class: ('email-desktop-text-right' if defined?(text_first_on_desktop) && text_first_on_desktop) } - = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}.png"), alt: '', width: 240, height: 230 + = image_tag frontend_asset_url("images/mailer-new/welcome/feature_#{feature}.png"), alt: '', width: 240, height: 230 /[if mso] diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index 0e55707d36ce58..97fb0a2c97d49b 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -68,7 +68,7 @@ %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-extra-td - = render 'application/mailer/feature', key: 'feature_control', feature_title: t('user_mailer.welcome.feature_control_title'), feature_text: t('user_mailer.welcome.feature_control'), text_first_on_desktop: true - = render 'application/mailer/feature', key: 'feature_audience', feature_title: t('user_mailer.welcome.feature_audience_title'), feature_text: t('user_mailer.welcome.feature_audience'), text_first_on_desktop: false - = render 'application/mailer/feature', key: 'feature_moderation', feature_title: t('user_mailer.welcome.feature_moderation_title'), feature_text: t('user_mailer.welcome.feature_moderation'), text_first_on_desktop: true - = render 'application/mailer/feature', key: 'feature_creativity', feature_title: t('user_mailer.welcome.feature_creativity_title'), feature_text: t('user_mailer.welcome.feature_creativity'), text_first_on_desktop: false + = render 'application/mailer/feature', feature: 'control', text_first_on_desktop: true + = render 'application/mailer/feature', feature: 'audience', text_first_on_desktop: false + = render 'application/mailer/feature', feature: 'moderation', text_first_on_desktop: true + = render 'application/mailer/feature', feature: 'creativity', text_first_on_desktop: false diff --git a/config/locales/ia.yml b/config/locales/ia.yml index ecdf73ef9ef514..5065ca7bbbda75 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -15,17 +15,40 @@ ia: instance_actor_flash: Iste conto es un agente virtual usate pro representar le servitor mesme e non alcun usator individual. Illo es usate pro le federation e non debe esser suspendite. last_active: ultime activitate link_verified_on: Le proprietate de iste ligamine ha essite verificate le %{date} + posts: + one: Message + other: Messages + posts_tab_heading: Messages admin: + account_moderation_notes: + create: Lassar un nota accounts: + add_email_domain_block: Blocar dominio de e-mail are_you_sure: Es tu secur? by_domain: Dominio + change_email: + changed_msg: Email cambiate con successo! + current_email: E-mail actual + label: Cambiar e-mail + new_email: Nove e-mail + submit: Cambiar e-mail + title: Cambiar e-mail pro %{username} + confirm: Confirmar + confirmed: Confirmate + confirming: In confirmation custom: Personalisate delete: Deler datos deleted: Delite + demote: Degradar + destroyed_msg: Le datos de %{username} ora es in cauda pro su imminente deletion disable_two_factor_authentication: Disactivar 2FA display_name: Nomine visibile domain: Dominio + edit: Modificar + email: E-mail + email_status: Stato de e-mail enabled: Activate + followers: Sequitores location: all: Toto title: Location @@ -34,31 +57,50 @@ ia: most_recent_activity: Activitate plus recente most_recent_ip: IP plus recente public: Public + redownload: Actualisar profilo + resend_confirmation: + already_confirmed: Iste usator jam es confirmate + send: Reinviar ligamine de confirmation + success: Ligamine de confirmation inviate con successo! reset: Reinitialisar reset_password: Reinitialisar contrasigno search: Cercar + search_same_email_domain: Altere usatores con le mesme dominio de e-mail + search_same_ip: Altere usatores con le mesme IP security: Securitate security_measures: only_password: Solmente contrasigno password_and_2fa: Contrasigno e 2FA + silenced: Limitate statuses: Messages + subscribe: Subscriber title: Contos + unblock_email: Disblocar adresse de e-mail + unblocked_email_msg: Adresse de e-mail de %{username} disblocate con successo + unconfirmed_email: E-mail non confirmate username: Nomine de usator + view_domain: Vider summario de dominio action_logs: action_types: + confirm_user: Confirmar le usator create_announcement: Crear annuncio destroy_ip_block: Deler le regula IP destroy_status: Deler le message destroy_unavailable_domain: Deler le dominio non disponibile + disable_2fa_user: Disactivar 2FA disable_user: Disactivar le usator enable_user: Activar le usator reset_password_user: Reinitialisar contrasigno update_announcement: Actualisar annuncio update_custom_emoji: Actualisar emoji personalisate + update_ip_block: Actualisar le regula IP + update_status: Actualisar le message actions: change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}" create_announcement_html: "%{name} creava un nove annuncio %{target}" + deleted_account: conto delite announcements: + destroyed_msg: Annuncio delite con successo! edit: title: Modificar annuncio empty: Necun annuncios trovate. @@ -80,6 +122,7 @@ ia: enabled_msg: Emoji activate con successo new: title: Adder nove emoji personalisate + upload: Incargar dashboard: active_users: usatores active media_storage: Immagazinage de medios diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 12627434a58d20..dcacb46bf99819 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -844,10 +844,10 @@ sq: elasticsearch_index_mismatch: message_html: Përshoqërimet e treguesit të Elasticsearch-it janë të vjetruara. Ju lutemi, xhironi tootctl search deploy --only=%{value} elasticsearch_preset: - action: Shihni documentimin + action: Shihni dokumentimin message_html: Grupi i instancave tuaja Elasticsearch ka më shumë se një nyjë, por Mastodon-i s’është formësuar t’i përdorë ato. elasticsearch_preset_single_node: - action: Shihni documentimin + action: Shihni dokumentimin message_html: Grupi i instancave tuaja Elasticsearch ka vetëm një nyjë, ES_PRESET i duhet dhënë vlera single_node_cluster. elasticsearch_reset_chewy: message_html: Treguesi juaj i sistemit Elasticsearch është i vjetruar, për shkak të një ndryshimi rregullimesh. Për ta përditësuar, ju lutemi, xhironi tootctl search deploy --reset-chewy. @@ -1666,6 +1666,8 @@ sq: account_suspension: Pezullim llogarie (%{target_name}) domain_block: Pezullim shërbyesi (%{target_name}) user_domain_block: Bllokuat %{target_name} + lost_followers: Ndjekës të humbur + lost_follows: Ndjekje të humbura preamble: Mund të humbni ndjekje dhe ndjekës, kur bllokoni një përkatësi, ose kur moderatorët tuaj vendosin të pezullojnë një shërbyes të largët. Kur kjo ndodh, do të jeni në gjendje të shkarkoni lista marrëdhëniesh të dëmtuara, për t’i shqyrtuar dhe mundet për t’i importuar në një shërbyes tjetër. purged: Hollësitë rreth këtij shërbyesi janë spastuar nga përgjegjësit e shërbyesit tuaj. type: Akt diff --git a/yarn.lock b/yarn.lock index 299b005a7677b0..f18d52364f8019 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4047,14 +4047,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.1.1 - resolution: "@typescript-eslint/eslint-plugin@npm:7.1.1" + version: 7.5.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.5.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.1.1" - "@typescript-eslint/type-utils": "npm:7.1.1" - "@typescript-eslint/utils": "npm:7.1.1" - "@typescript-eslint/visitor-keys": "npm:7.1.1" + "@typescript-eslint/scope-manager": "npm:7.5.0" + "@typescript-eslint/type-utils": "npm:7.5.0" + "@typescript-eslint/utils": "npm:7.5.0" + "@typescript-eslint/visitor-keys": "npm:7.5.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -4067,25 +4067,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/041799604176bbee01f6ff029c5e2fcf1196db2737ba219a20b095f095dc0064ea425d15dd6dc22eaef294daa838209601ec7bc19317258dfa89a13afb8126ba + checksum: 10c0/932a7b5a09c0138ef5a0bf00f8e6039fa209d4047092ffc187de048543c21f7ce24dc14f25f4c87b6f3bbb62335fc952e259e271fde88baf793217bde6460cfa languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.1.1 - resolution: "@typescript-eslint/parser@npm:7.1.1" + version: 7.5.0 + resolution: "@typescript-eslint/parser@npm:7.5.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.1.1" - "@typescript-eslint/types": "npm:7.1.1" - "@typescript-eslint/typescript-estree": "npm:7.1.1" - "@typescript-eslint/visitor-keys": "npm:7.1.1" + "@typescript-eslint/scope-manager": "npm:7.5.0" + "@typescript-eslint/types": "npm:7.5.0" + "@typescript-eslint/typescript-estree": "npm:7.5.0" + "@typescript-eslint/visitor-keys": "npm:7.5.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/84eb44f3767aaa1d7b26176348c89bd6732bc711f7f24186b1354eba95bf9e9c65b5675838772b831391210e525ff1f3bd4b51a3130ec35413aa362920effc57 + checksum: 10c0/65521202ff024e79594272fbb7e4731ecf9d2fdd2f58fc81450bfd2bca94ce9c17b0eadd7338c01701f5cf16d38b6c025ed3fc322380b1e4b5424b7484098cda languageName: node linkType: hard @@ -4099,22 +4099,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/scope-manager@npm:7.1.1" +"@typescript-eslint/scope-manager@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/scope-manager@npm:7.5.0" dependencies: - "@typescript-eslint/types": "npm:7.1.1" - "@typescript-eslint/visitor-keys": "npm:7.1.1" - checksum: 10c0/a955c8529f24945d448b95982d06b5f15a74fc5df97307f5821d55e9861d6c26d61cbd118c1ca41634164ed1d4f6c74fcb8388761341c49e6902a6fb72036afc + "@typescript-eslint/types": "npm:7.5.0" + "@typescript-eslint/visitor-keys": "npm:7.5.0" + checksum: 10c0/a017b151a6b39ef591f8e2e65598e005e1b4b2d5494e4b91bddb5856b3a4d57dd8a58d2bc7a140e627eb574f93a2c8fe55f1307aa264c928ffd31d9e190bc5dd languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/type-utils@npm:7.1.1" +"@typescript-eslint/type-utils@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/type-utils@npm:7.5.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.1.1" - "@typescript-eslint/utils": "npm:7.1.1" + "@typescript-eslint/typescript-estree": "npm:7.5.0" + "@typescript-eslint/utils": "npm:7.5.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -4122,7 +4122,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/6f19dc383718cce42ed7262d134f5f0221bcbf225fea28975cd714c90e57d861608d5187c7ad731f6281813f94b00f22282a99a8a852167366064abc6e256341 + checksum: 10c0/12915d4d1872638f5281e222a0d191676c478f250699c84864862e95a59e708222acefbf7ffdafc0872a007261219a3a2b1e667ff45eeafea7c4bcc5b955262c languageName: node linkType: hard @@ -4133,10 +4133,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/types@npm:7.1.1" - checksum: 10c0/2bef95ec0c60e67fada336db3e82fac2be16c21a9e54fc45c7aeda3291abcceefa12aa970025db88bc2b3e113b1e70abd7f89c2a651c16b816dff1a0c46e7907 +"@typescript-eslint/types@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/types@npm:7.5.0" + checksum: 10c0/f3394f71f422dbd89f63b230f20e9769c12e47a287ff30ca03a80714e57ea21279b6f12a8ab14bafb00b59926f20a88894b2d1e72679f7ff298bae112679d4b3 languageName: node linkType: hard @@ -4159,12 +4159,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/typescript-estree@npm:7.1.1" +"@typescript-eslint/typescript-estree@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.5.0" dependencies: - "@typescript-eslint/types": "npm:7.1.1" - "@typescript-eslint/visitor-keys": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.5.0" + "@typescript-eslint/visitor-keys": "npm:7.5.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -4174,24 +4174,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/2cec9d21cfe46e523a6d29aff554e5450edf1ee30ce9cf644ee8f1f5e1cfd44b94afb3632db97a949c86c4a392ae80f264d56d8747b2b0fdbe5c54139433366a + checksum: 10c0/ea3a270c725d6be273188b86110e0393052cd64d1c54a56eb5ea405e6d3fbbe84fb3b1ce1b8496a4078ac1eefd37aedcf12be91876764f6de31d5aa5131c7bcd languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/utils@npm:7.1.1" +"@typescript-eslint/utils@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/utils@npm:7.5.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.1.1" - "@typescript-eslint/types": "npm:7.1.1" - "@typescript-eslint/typescript-estree": "npm:7.1.1" + "@typescript-eslint/scope-manager": "npm:7.5.0" + "@typescript-eslint/types": "npm:7.5.0" + "@typescript-eslint/typescript-estree": "npm:7.5.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/3e70834c5b49e4643ec8da63fa2acaab54283a566af2cedcd4c2f4210833a59bf71c459dde69e738115633c7de9f1339130552ff246e8e1bb4db26910685408b + checksum: 10c0/c815ed6909769648953d6963c069038f7cac0c979051b25718feb30e0d3337b9647b75b8de00ac03fe960f0cc8dc4e8a81d4aac4719090a99785e0068712bd24 languageName: node linkType: hard @@ -4222,13 +4222,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.1.1": - version: 7.1.1 - resolution: "@typescript-eslint/visitor-keys@npm:7.1.1" +"@typescript-eslint/visitor-keys@npm:7.5.0": + version: 7.5.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.5.0" dependencies: - "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.5.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1ab19ec966ff0b86317eddcbfcda645856ec01c3b76a451298031f35e4da0a363e4888ce5ae9e2526e874799a502c49922d83d57d21cb6fef7f3912f51e4a271 + checksum: 10c0/eecf02b8dd54e83738a143aca87b902af4b357028a90fd34ed7a2f40a3ae2f6a188b9ba53903f23c80e868f1fffbb039e9ddb63525438d659707cc7bfb269317 languageName: node linkType: hard @@ -7821,8 +7821,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^48.0.0": - version: 48.2.1 - resolution: "eslint-plugin-jsdoc@npm:48.2.1" + version: 48.2.2 + resolution: "eslint-plugin-jsdoc@npm:48.2.2" dependencies: "@es-joy/jsdoccomment": "npm:~0.42.0" are-docs-informative: "npm:^0.0.2" @@ -7835,7 +7835,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/92237f08b7dadb21f9eda50eda00bf69ac5e0bfcb9d179bf118e096178d7dc4a62b34fd01b3b7b0ba1142ff6e13814cfe2cf9a60c6cfcc879559b6b509d0d4e1 + checksum: 10c0/d6911e73d36757de5aef127e795116fbbcdef504f7e91d9c0863faf0b1693271d96188f0f1d54c0d74c56652bfa3fb4f1aa1a2f0876b0c6a5e57a874bcb3ac2b languageName: node linkType: hard @@ -7884,8 +7884,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.34.0 - resolution: "eslint-plugin-react@npm:7.34.0" + version: 7.34.1 + resolution: "eslint-plugin-react@npm:7.34.1" dependencies: array-includes: "npm:^3.1.7" array.prototype.findlast: "npm:^1.2.4" @@ -7907,7 +7907,7 @@ __metadata: string.prototype.matchall: "npm:^4.0.10" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/9bf0b959373ace66e799adbbfb493a7ceae54751e8f90fcce1da1a2a67b277ee23ba845571eaa4d4f05d96dba4e4977bf938b350f18bad26201fa616ee6aa4b8 + checksum: 10c0/7c61b1314d37a4ac2f2474f9571f801f1a1a5d81dcd4abbb5d07145406518722fb792367267757ee116bde254be9753242d6b93c9619110398b3fe1746e4848c languageName: node linkType: hard